问题描述
对于我的硕士项目我尝试按中位数对(由用户)给定数据帧的所有列进行排序,通过特定模式(稍后提到)在列上应用 wilcox.test,然后在盒须图中绘制每列的值。
排序和绘图工作正常,但我找不到将 wilcox.test 应用于以下架构中的数据框的方法:
wilcox.test(i,j,paired=TRUE)
而 i=1
和 j=2
并且都递增直到 j=ncol(dataframe)
。所以我想用第 1 列和第 2 列的参数运行该函数,然后是第 2 列和第 3 列,依此类推,直到 j
是数据框的最后一列。
我也想将所有 p 值存储在一行(包含 p 值)的数据框中,每一行都有两列的名称,它们是 wilcox.test 中的参数,因为我不仅想要绘制所有列(每列代表一个“解决方案”),但我也想在控制台中打印每个测试的 p 值(类似于:“Wilcoxon-test with 'Solution1'和 'Solution2' 得到 p 值:'p-value from wilcox.test of Solution1 和 Solution2',这意味着解决方案是/没有显着不同").
我尝试调整其他帖子中有关此问题的一些代码,但没有任何效果。不幸的是,我在 R 方面也非常缺乏经验,所以我希望我上面写的也不是完全胡说八道。 我也尝试以 Java 方式使用 for 循环和增量迭代数据帧的列,因为这是我教过的唯一编程语言,但这根本不起作用(真令人惊讶)。>
我的代码基于具有非常不同值的数据框创建的图:
谢谢大家给我的建议,非常感谢!
解决方法
似乎是 matrixTests
包的工作。以下是使用 iris
数据集的演示:
library(matrixTests)
col_wilcoxon_twosample(iris[,1:3],iris[,2:4])
obs.x obs.y obs.tot statistic pvalue alternative location.null exact corrected
Sepal.Length 150 150 300 22497.5 9.812123e-51 two.sided 0 FALSE TRUE
Sepal.Width 150 150 300 7793.5 4.151103e-06 two.sided 0 FALSE TRUE
Petal.Length 150 150 300 19348.5 3.735718e-27 two.sided 0 FALSE TRUE
返回的结果与每对上的 wilcox.test()
匹配。例如,第一列与第二列:
w <- wilcox.test(iris[,1],2])
w$p.value
[1] 9.812123e-51