如何在R中创建随机列联表?

时间:2011-08-04 19:40:28

标签: r statistics

我想创建随机的双向列联表,给定固定的行和列边距。假设我有一个这样的表:

      A   C   G   T
  A  79   6  13  53
  C  16   7   6  17
  G   9   3   1   6
  T  58  28  18 114

给定行边距:

  A   C   G   T 
151  46  19 218 

和列边距:

  A   C   G   T 
162  44  38 190 

我想创建一个随机列联表,例如:

   A  C  G  T
A 49 16 10 76
C 23  2  6 15
G 11  0  1  7
T 79 26 21 92

保留了这些边缘。

由于在这种情况下n不是太大,我试图通过“禁用”边缘向量来解决这个问题,即通过将边缘转换为形式的向量

A A A ...C C C ... G G G ... T T T 

然后进行排列和制表。

我目前用于“禁用”边缘的方法非常不自然且效率低下,我很想知道是否有更好的方法。某些内置函数必须创建随机列联表,例如simulate.p.value = TRUE时的chisq.test。是否内置了随机列联表?

提前感谢任何建议。

2 个答案:

答案 0 :(得分:3)

我并不完全确定'无法启用'是什么意思,因为你实际上没有指定你当前使用的方法,我不能确定这不是你现在正在做的

但是考虑到(162, 44, 38, 190)的边缘,你可以通过这样做'重新创建'向量:

rep(c('A','C','G','T'),times = c(162, 44, 38, 190))

然后您可以根据需要进行置换。

答案 1 :(得分:3)

对不起,@ joran的答案不正确。他的公式正确地模拟了具有正确列总数的表,但是OP请求了一个尊重行和列总计的模拟。对此的解决方案是由W.M.于1981年提出的。 Patefield。 算法AS159。给出行和列总数的生成r x c表的有效方法。应用统计,30. 91-97。

Patefield的算法在Base R函数r2dtable()中实现。