如何通过R下的for循环对矩阵的每一行应用Wilcoxon检验
我是R新手,我有一个快速的问题,如何将Wilcoxon检验应用于R下矩阵的每一行? 例如,作为最简单的矩阵。我正在尝试将Wilcoxon测试应用于for循环的每一行,两组列,第1列到第5列作为一组,第6列到第10列作为另一组。并将P值作为列保存到文件中。我写了两个for循环,但失败了。我把我的循环和错误信息放在最后。非常感谢你如何通过R下的for循环对矩阵的每一行应用Wilcoxon检验,r,matrix,row,multiple-columns,R,Matrix,Row,Multiple Columns,我是R新手,我有一个快速的问题,如何将Wilcoxon检验应用于R下矩阵的每一行? 例如,作为最简单的矩阵。我正在尝试将Wilcoxon测试应用于for循环的每一行,两组列,第1列到第5列作为一组,第6列到第10列作为另一组。并将P值作为列保存到文件中。我写了两个for循环,但失败了。我把我的循环和错误信息放在最后。非常感谢你 mymatrix [,1][,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 11
mymatrix
[,1][,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
for (i in nrow(mymatrix)){
vector1 <- c(mymatrix[i,1:5])
vector2 <- c(mymatrix[i,6:10])
wilcox.test(vector1,vector2, paired = TRUE, alternative = "two.sided")
}
#Warning message:
In wilcox.test.default(vector1, vector2, paired = TRUE, alternative = "two.sided") :
cannot compute exact p-value with ties
# I also tried this, it doesn't work either.
for (i in nrow(mymatrix)){
wilcox.test(as.numeric(mymatrix[i,1:5],as.numeric(mymatrix[i,6:10]), paired = TRUE)
}
mymatrix
[,1][,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
对于(我在nrow(我的矩阵)){
vector1您正在寻找以下内容:
# initialize a list to store the p_values
p_values <- vector("list", nrow(mymatrix))
for(i in seq_along(1: nrow(mymatrix))){
p_values[i] = wilcox.test(mymatrix[i,1:5],mymatrix[i,6:10], paired = TRUE, alternative = "two.sided", exact = FALSE)$p.value
}
# make it a data.frame
p_values = data.frame(p_values = sapply(p_values, c))
#Output
p_values
# p_values
# 1 0.03688843
# 2 0.03688843
# 3 0.03688843
# 4 0.03688843
# 5 0.03688843
# 6 0.03688843
# 7 0.03688843
# 8 0.03688843
# 9 0.03688843
# 10 0.03688843
#初始化列表以存储p#U值
p_值(1)“应用到每一行”是apply(我的矩阵,1,函数(m)wilcox.test(m[1:5],m[6:10],…)$p.value)
(2)您执行测试,但将其输出丢弃到以太中…您是否希望它在不通知它的情况下修改您的数据?它如何知道您要添加$p.value
,而不是$statistic
或任何其他返回值?(3)关于“无法使用领带计算精确p值”的警告是你真的需要处理的事情,或者在测试前修复关系,或者做其他事情。非常感谢。但是如何为此编写for循环呢?因为我需要练习。我试过Pvalue$
不适合矩阵。也许你的意思是mymatrix
在某个时间转换为data.frame
oint?(我倾向于不喜欢将任意不同用途的数字组合到一个矩阵中,假设矩阵中的所有数字都具有相同的“单位”或“含义”;一旦开始添加另一个“含义”作为列,该结构实际上更适合作为data.frame
(或者新列应该分开).这可能是数据势利,但我相信大多数以矩阵为中心的工具都假设其中的所有对象都是平等创建的…而p值与上述情况完全不同至于“关系”这一点,我建议您阅读并搜索“关系”,在它的文档中是很清楚的。谢谢。我是R的新手,我对它不太了解,但我会去学习你提到的要点。这很有帮助。非常感谢。然后我将学习一些命令,如vector和data.frame。如果我想保存v.value(或其他有用的信息),有什么想法吗还有?最好的方法是什么?将测试统计值的p.value
替换为statistic
。您可能需要检查?wilcox.test
的value
部分。