【问题标题】:Creating a contingency table创建列联表
【发布时间】:2020-05-17 09:38:18
【问题描述】:

我目前有一个数据框,它说明基因组中的特定基因簇,它被定义为格式良好的制表符分隔文件,它基本上看起来像下面的数据框(示例):

Gene Cluster     Genome
-----------------------------
GCF3372      Streptomyces_hygroscopicus
GCF3450      Streptomyces_sp_Hm1069
GCF3371      Streptomyces_sp_MBT13
GCF3371      Streptomyces_xiamenensis

基于此,我想根据该数据框创建一个缺失/存在表或列联表,其值为 0 和 1,具体取决于基因组中特定基因簇的缺失或存在。整个想法是让我能够测量基因组中特定基因簇的出现,因此我需要一个存在/不存在表,以便能够对该矩阵进行统计分析。

x <- data.frame(gc = c('GCF3372','GCF3450','GCF3371','GCF3371','GCF3371'), 
                strain = c('Streptomyces_hygroscopicus', 'Streptomyces_sp_Hm1069', 
                           'Streptomyces_sp_MBT13', 'Streptomyces_xiamenensis','Streptomyces_hygroscopicus'))
dput(head(x[, c(1,2)]))

【问题讨论】:

  • 你试过table(Gene Cluster, Genome)吗?没有可重复的数据,很难更具体。使用 dput() 给我们几行数据或组成一些具有相同结构的数据。
  • @dcarlson 很抱歉给您带来不便,我已对其进行了编辑以使其变得更好。

标签: r dataframe datatables contingency


【解决方案1】:

这是一种从两个分类变量计算列联表的方法。出于说明目的,我将使用sexheight(这些似乎在结构上类似于您在数据框中的两个变量x):

数据:

set.seed(300)
df <- data.frame(
  Height = sample(c("tall", "very tall", "small", "very small"), 20, replace = T),
  Sex = sample(c("m", "f"), 20, replace = T)
)
df
       Height Sex
1   very tall   f
2   very tall   m
3   very tall   m
4        tall   f
5  very small   m
6        tall   f
7        tall   m
8  very small   f
9       small   f
10       tall   m
11 very small   f
12       tall   m
13 very small   m
14      small   f
15 very small   m
16      small   m
17 very small   m
18 very small   m
19       tall   f
20       tall   m

首先,如评论中所述,使用table 将数据制成表格:

tbl <- table(df$Sex, df$Height); tbl
    small tall very small very tall
  f     2    3          2         1
  m     1    4          5         2

然后可以将tbl的第一行定义为新向量female,第二行定义为male

female <- tbl[1,]
male <- tbl[2,]

最后,你将这两者绑定成一个向量counts,这就是你的列联表:

counts <- rbind(female, male)
counts
       small tall very small very tall
female     2    3          2         1
male       1    4          5         2

根据列联表,您可以运行测试,可能是卡方:

test <- chisq.test(counts); test

    Pearson's Chi-squared test

data:  counts
X-squared = 1.3492, df = 3, p-value = 0.7175

【讨论】:

  • 哇哦!谢谢,这很有帮助!我想问是否有任何特定的测试可以让我获得每行的 p 值。例如,另一个特定值可能会出现多少?我正在考虑类似渔民精确测试之类的东西,然后可能会用 bonferonni 进行更正我不知道这是否可能(对不起,如果我没有很好地解释自己)
  • @Biohacker 首先,请随时点击答案旁边的小勾号,也可以点击向上的三角形来接受我的答案。
  • @Biohacker 其次,我对如何测试您的数据提出建议感到非常不安,因为我还没有看到数据,也不知道您的假设是什么。
  • 非常感谢。我还有一个问题。如果我有大约 25 种性别,而不仅仅是这两种(女性、男性)呢?我还会遵循同样的流程吗?
  • @Biohacker 这似乎是可能的。但是,对于大于 2x2 的列联表,适用不同的假设:cf. sites.google.com/a/lakeheadu.ca/bweaver/Home/statistics/notes/…
猜你喜欢
  • 2019-03-11
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2018-04-07
  • 2020-10-17
  • 2016-03-03
相关资源
最近更新 更多