R语言怎么批量进行fisher检验?

接上文,朋友告诉我,并不是只求一个 p 值,而是要计算许多 p 值,即批量进行 fisher 检验。

我们先看看数据:

library(knitr)

df = read.table('fisher_test.tsv', header = TRUE)
kable(df)
GenemMutmWtnonMutnonWt
TP5314241320
IFITM3731429
MTRNR2L2533429
USP17L10533429
CDH1830627
CLCNKA632627
USP17L18335330
GOLGA6L18335528
NBPF14731825

这是一个基因突变的统计表,记录了肿瘤转移组与非转移组的基因突变情况,表头解释如下:

  • Gene, 基因名称

  • mMut,转移组突变的样本数

  • mWt,转移组未突变的样本数

  • nonMut,非转移组突变的样本数

  • nonWt,非转移组未突变的样本数

现在想知道,表中的基因在转移组与非转移组之间的突变频率是否有显著差异,通过循环进行fisher检验即可,代码如下:

out <- data.frame()
for (i in 1:nrow(df)){
  t <- fisher.test(matrix(as.vector(t(df[i, 2:5])), ncol=2))
 
  d <- df[i, ]
  d$p.value <- t$p.value
  d$OR <- t$estimate[[1]]
  d$OR.lower95 <- t$conf.int[1]
  d$OR.upper95 <- t$conf.int[2]
  out <- rbind(out, d)
}

kable(out)
GenemMutmWtnonMutnonWtp.valueOROR.lower95OR.upper95
TP53142413201.00000000.89880780.30886112.617323
IFITM37314290.52699811.62594880.36714408.395215
MTRNR2L25334291.00000001.09701640.21333076.080139
USP17L105334291.00000001.09701640.21333076.080139
CDH18306271.00000001.19693310.31677994.766989
CLCNKA6326271.00000000.84578130.20007163.571860
USP17L183353301.00000000.85901400.10687876.901324
GOLGA6L183355280.45868620.48498840.06927612.741811
NBPF147318250.57423210.70915400.18979612.587077

可以看到,结果也是一个表格,其中包含原表格数据以及我们最关心的 4 个值:p.value、OR、OR.lower95以及OR.upper95。

粉丝福利

学生信,计算机基础一定要好。毫不夸张地说,计算机基础决定了你能否入门,而生物学修养决定你能走多远。没有出发,如何走得远?


版权声明:本文为weshengxin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。