[英]How do I create a random contingency table in R?
給定固定的行和列邊際,我想創建隨機的雙向列聯表。 假設我有一個這樣的表:
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。 是否也內置了隨機應變表構造?
在此先感謝您的任何建議。
抱歉,@ joran的答案不正確。 他的公式正確地模擬了具有正確列總數的表,但是OP要求模擬時要同時考慮行和列的總數。 WM Patefield在1981年給出了解決方案。 算法AS159。 給定行和列總數的一種有效的生成rxc表的方法 。 應用統計,第30期。91-97。
Patefield的算法在Base R函數r2dtable()中實現。
我不能完全確定“取消啟用”的含義,並且由於您實際上並未指定當前使用的方法,因此無法確定這不是您正在執行的操作。
但是給定邊際(162, 44, 38, 190)
您可以通過執行以下操作來“重新創建”向量:
rep(c('A','C','G','T'),times = c(162, 44, 38, 190))
然后可以根據需要進行排列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.