我想在给定固定的行和列边缘的情况下创建随机的双向联想表。假设我有一个这样的表:
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在本例中并不太大,因此我尝试通过"untabling“边缘向量来实现这一点,即通过将边缘转换为以下形式的向量
A A A ...C C C ... G G G ... T T T 然后把它们排列起来放在桌上。
我目前使用的"untabling“方法是非常不自然和低效的,我很好奇是否有更好的方法。某些内置函数必须创建随机列联表,例如当simulate.p.value=TRUE时为chisq.test。随机列联表结构也是内置的吗?
提前感谢您的任何建议。
发布于 2011-08-05 04:49:55
我不完全确定你所说的“untabling”是什么意思,因为你实际上没有指定你当前正在使用的方法,我不能确定这不是你当前正在做的事情。
但是给定(162, 44, 38, 190)的边缘部分,您可以通过执行以下操作“重新创建”该向量:
rep(c('A','C','G','T'),times = c(162, 44, 38, 190))然后您可以根据需要对其进行置换。
发布于 2015-03-31 21:04:29
很抱歉,@joran的答案不正确。他的公式正确地模拟了具有正确列合计的表,但OP要求模拟同时考虑行合计和列合计。W.M.Patefield在1981年提出了解决方案。算法AS159。一种在给定行和列总数的情况下生成r x c表的有效方法。应用统计学,30。91-97
Patefield的算法在基本R函数r2dtable()中实现。
https://stackoverflow.com/questions/6947583
复制相似问题