生成数据组合,然后对每个组合运行Wilcoxon测试

时间:2017-03-13 04:29:31

标签: r

我有一个由50个学生(行)组成的数据集,每个数据集有15个分数(列数,分数为1-5分),我正在尝试做几件事。首先,我试图为原始15的每个学生生成10个分数的所有可能组合。然后,我试图针对原始的15个分数对每个分数组合运行Wilcoxon测试(我相信Mann-Whitney U)让学生确定哪些组合有显着差异。到目前为止我在R中的代码发布在下面,循环运行每个组合的测试,但我不断得到错误'错误不够(有限)观察',我不确定我是否正在做适当。我试过as.numeric(),但似乎仍然无法修复它。代码似乎生成组合很好,我只是无法让测试工作。所有的帮助都表示赞赏,完全准备好被告知我做错了,并且非常感谢解释代码的智慧。

m<-10
n<-choose(15,m)

for(j in 1:50)
{df3 <- expand.grid(combn(data[j,],m))  

x<-(length = 0)    

for(i in 1:n)    
{niceArray <- c(df3[1,(m*(i-1)+1)],df3[1,(m*(i-1)+2)],df3[1,(m*(i-  1)+3)],df3[1,(m*(i-1)+4)],df3[1,(m*(i-1)+5)],df3[1,(m*(i-1)+6)],df3[1,(m*(i-1)+7)],df3[1,(m*(i-1)+8)],df3[1,(m*(i-1)+9)],df3[1,(m*(i-1)+10)])

tst<-wilcox.test(niceArray, as.numeric(data[j,]), alternative="two.sided", paired=FALSE)
if(tst$p.value<0.05)
{print(tst$p.value)    
x<-append(x,1,after=length(x))}}
print(length(x)-1)}

1 个答案:

答案 0 :(得分:1)

所以解析你所做的事情有点困难。以下是我尝试解决问题的方法。

我首先创建了一个包含2个学生的数据集,其中包含15个分数。

student_ds<-rbind(abs(sample(rnorm(15)*100)),abs(sample(rnorm(15)*100)))

然后我创建一个名为testresults的空数据集。 在循环内部,我们创建了一个数据框,其中包含15个分数中10个的所有可能组合。然后我们使用apply来获取wilcoxon p值,用于将原始学生的15个分数与所有可能的3003分数进行比较,并将其附加到子样本中。最后,我们在测试结果数据框中将它们绑定在一起。

for (i in 1:nrow(student_ds)){
  combinatoric<-data.frame(t(combn(student_ds[i,],10)))  # represents all ways to choose 10 from the 15
  combinatoric$wilcox.pvalue<- apply(combinatoric[,1:10],1,function(x) wilcox.test(x,student_ds[i,], alternative="two.sided", paired=FALSE)$p.value)
  combinatoric$student <- paste0("student",i)
  testresults <- rbind(testresults,combinatoric)  
  }

> head(testresults);tail(testresults)
        X1       X2       X3       X4       X5       X6       X7       X8       X9        X10 wilcox.pvalue  student
1 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821  79.272713     0.8894956 student1
2 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821  80.104210     0.9335609 student1
3 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821  93.908482     1.0000000 student1
4 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821 107.429904     0.9778308 student1
5 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821  50.930822     0.7598532 student1
6 1.974715 72.51776 119.8322 12.26869 85.91388 209.4265 65.30297 17.25499 27.32821   5.215228     0.5975122 student1
            X1        X2       X3       X4       X5       X6       X7       X8       X9      X10 wilcox.pvalue  student
6001  47.59236 222.62861  9.04522 78.70014 83.69301 123.9315 14.30569 40.72565 56.99276 129.4363     0.9778308 student2
6002  47.59236 222.62861  9.04522 78.70014 32.81073 123.9315 14.30569 40.72565 56.99276 129.4363     0.7598532 student2
6003  47.59236 222.62861  9.04522 83.69301 32.81073 123.9315 14.30569 40.72565 56.99276 129.4363     0.8025127 student2
6004  47.59236 222.62861 78.70014 83.69301 32.81073 123.9315 14.30569 40.72565 56.99276 129.4363     0.8894956 student2
6005  47.59236   9.04522 78.70014 83.69301 32.81073 123.9315 14.30569 40.72565 56.99276 129.4363     0.5595174 student2
6006 222.62861   9.04522 78.70014 83.69301 32.81073 123.9315 14.30569 40.72565 56.99276 129.4363     0.9335609 student2

如果这不是你想要的,它可能足以刺激你的伟大。