【发布时间】:2020-07-27 16:39:42
【问题描述】:
我对 R 相当陌生,我正在尝试进行 kruskal wallis 测试,以查看在查看不同基因时三组之间是否存在差异。我有 3 组和 127 种蛋白质。我已经能够创建一个可以做到这一点的代码,
样本数据“
groups <- c("control","control","control","control","control","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group2","group2","group2","group2","group2")
gene1 <- c(8,7,4,5,0,2,8,5,6,4,4,6,5,4,6,4,7,4,8,1,6,3,5,6,3,1)
gene2 <- c(8,10,10,9,7,5,8,10,8,9,10,9,6,9,8,7,8,7,8,9,9,7,7,6,9,8)
gene3 <- c(10,11,10,11,5,6,9,11,10,11,12,8,4,7,7,10,10,3,2,11,9,10,9,3,10,10)
gene4 <- c(4,4,3,2,0,2,4,4,3,3,4,1,1,1,4,4,3,2,3,4,4,1,4,3,2,2)
gene5 <- c(8,10,11,10,7,6,8,8,8,12,11,8,7,8,8,10,10,9,10,8,10,7,8,7,10,7)
mydata <- data.frame(groups,gene1,gene2,gene3,gene4,gene5)
i <- 2 #ignore 1st column as this is not a "protein"
pval <-NULL
repeat{
K <- kruskal.test(df[,i], df[,1], data = df, paired=FALSE, p.adjust.methods="none")
pval <- c(as.matrix(sapply(K[3],as.numeric)),pval)
i <- i+1
if(i>ncol(df)){break}
}
不幸的是,获得的 pvalue 与我一次只对一个基因进行 kruskal wallis 测试得到的 pvalue 不同。例如:
对于 Gene1,从循环中获得的 pvalue 是 0.0389,但是当我运行 kruskal.test(Gene1,group, data=df) 时,我得到的 pvalue 是 0.84。
我遇到这种情况是因为在进行 kruskal wallist 检验后,我进行了成对的 Mann Whitney 检验,并注意到 Kruskal wallis 的“显着”p 值与 Mann Whitney 的“显着”p 值不相关。
此外,我继续使用 VassarStats 和 minitab,得到的 p 值为 0.84(平局调整)。我想知道如何在不影响 p 值的情况下循环运行这个 Kruskal wallis 测试。有什么我没有看到我做错了吗?
另外,我使用了我在上一篇文章中看到的 getAnywhere(kruskal.test.default),但我找不到在反复执行测试时会导致这种情况发生的原因。
【问题讨论】:
-
欢迎来到stackoverflow。您可能会在stats.stackexchange.com 上得到更好的答案
-
您需要提供可用形式的数据样本。在数据样本上使用
dput(),而不是数据图片。当等级中存在关联时(就像您的数据中那样),任何非参数测试都将难以计算 p 值。最后,您对kruskal.test的调用是错误的,应该会产生错误消息,除非您使用了来自不同包的版本而不是基本函数。 -
@dcarlson 您好,感谢您抽出宝贵时间查看我的问题。我已经对其进行了编辑并创建了一个更有用的示例。此外,正如您所指出的,我的数据中有联系,但我不明白为什么如果我使用其他在线计算得到相同的答案,这会影响循环时的输出。我使用 base R 来运行测试,这是我使用的代码的最后一个版本,我添加了 ("paired=FALSE, p.adjust.methods="none") 因为我想看看 pvalues 是否会类似于 kruskal 测试一次只做一个基因。是错误的部分还是我的整个代码?谢谢
标签: r multivariate-testing pairwise kruskal-wallis