r - 对具有不同观察值的不相等复制的数据帧执行逐行 t.test
问题描述
例如,我有一个包含 11 列的数据框(附上示例截图)。第一列列出了所有基因,接下来的十列是对照(C1-C5)
和处理(T1-T5)
样品的测量值。测量未配对。
我想执行 rowwise t.test 并为每个基因添加一个 p 值列作为数据框的最后一列。但是,正如您在我的数据中看到的那样,由于实验的执行方式,我没有对每个基因的所有复制(在控制和处理条件下)进行所有测量。所以我在很多行中有几个 NA 值。
如何在此数据框中执行 rowwise t.test 而不会因为 NA 值而失败?谢谢!
解决方案
据我所知, t.test 不适用于NA's
. 因此,如果我们执行以下操作:
Input = ("GeneID C1 C2 C3 C4 C5 T1 T2 T3 T4 T5
Gene1 5 1 7 9 2 7 5 4 4 3
Gene2 3 6 5 NA NA 5 1 3 NA NA
Gene3 2 3 NA NA NA NA 1 6 NA NA
Gene4 3 4 5 6 NA 3 4 5 NA NA")
df = as.data.frame(read.table(textConnection(Input), header = T, row.names = 1))
df$pval <- apply(df,1,function(x) {t.test(x[2:6],x[7:11])$p.value})
这将导致一个错误,例如not enough 'x' observations
肯定的。有两个选项,您可以忽略NA's
,因为Gene2
我们C1,C2,C3 vs T1,T2,T3
只有这些观察结果。其次,我们可以执行非参数测试,它的功率较小但更“灵活”。T.test 很好,但必须满足很多假设。样本的数量应该相当大,并且 C 与 T 相等。更重要的是,这些组应该具有正态分布,它们之间至少相似,这也是指方差......否则你的测试会被扭曲。我会推荐这样的东西:
df$pval <- apply(df,1,function(x) {wilcox.test(x[2:6],x[7:11])$p.value})
C1 C2 C3 C4 C5 T1 T2 T3 T4 T5 pval
Gene1 5 1 7 9 2 7 5 4 4 3 0.7109920
Gene2 3 6 5 NA NA 5 1 3 NA NA 0.1386406
Gene3 2 3 NA NA NA NA 1 6 NA NA 1.0000000
Gene4 3 4 5 6 NA 3 4 5 NA NA 1.0000000
在这里查看并检查wilcox.test()
符合您数据特征的可行参数。不过请记住,如果测量次数减少,那么测试的准确性和威力会更差。
推荐阅读
- ios - xcode命令行配置“嵌入框架”
- go - Gomplate : 坏字符 U+0022 '-'
- sql - SQL 计算总和子总数
- python - 将 Spark Dataframe 拆分为训练和测试
- java - 如何停止从 Java 中的某个方法打印某种类型的异常?
- azure - 如何在 Kusto 中执行“GROUP BY WITH ROLLUP”?
- reactjs - 如何将此创建商店转换为基于承诺的?
- entity-framework-core - 如何在 .NET Core 3.1 控制台应用程序中使用 Entity Framework Core 调用存储过程?
- python - concat 导入的数据帧在 pandas 中缺少数据
- regex - 谷歌表格提取路径文件的最后一部分