簡體   English   中英

如何在R中創建隨機列聯表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM