p-значение из t-test и wilcox.test с использованием вложенного цикла, используемого для двух наборов данных в R - PullRequest
0 голосов
/ 26 сентября 2019

Со следующими двумя наборами данных,

data
      X1 X2 X3 X4 X5 X6 X7
    1  1  2  2  1  1  2  2
    3  1  1  1  1  2  2  2
    4  2  1  2  1  2  2  1

И

    new.data
  v1 v2 v3 v4 v5
1 10 50 10  0  1
2 15 30 15  1  2
3 14 40 12  0  2
4 20 25  8  1  2
5 24 38 14  0  1
6 28 27 11  1  1
7 29 15  1  0  2
8 15  5  5  1  1

Я хотел бы найти значение p для каждой переменной (V1-V3) для каждой строки data с использованием функции t.test() и для v4-v5 с использованием функции wilcox.test().Я могу сделать это отдельно, как показано ниже:

p_value=matrix(NA, nrow=nrow(dty), ncol=ncol(new.data)-2)
for (iter in 1:nrow(dty)){
  for ( v in 1:(ncol(new.data)-2)){
    p_value[iter,v]=(t.test(new.data[,v][c(which(dty[iter,]=="1"))], new.data[,v][c(which(dty[iter,]=="2"))], alternative = "two.sided", var.equal = FALSE))$p.val

  }
}

p_value
            [,1]       [,2]      [,3]
[1,] 0.574490940 0.33859440 0.8054510
[2,] 0.005069568 0.32542488 0.5887188
[3,] 0.707848017 0.06346828 0.4529153

Для переменных v4 и v5

p_v4= numeric()
for (iter in 1:nrow(dty)){
  p_v4[iter]=(wilcox.test(new.data$v4[c(which(dty[iter,]=="1"))], new.data$v4[c(which(dty[iter,]=="2"))], alternative="two.sided"))$p.val
}
    > p_v4
[1] 0.8382565 0.8382565 0.4142162
p_v5= numeric()
for (iter in 1:nrow(dty)){
  p_v5[iter]=(wilcox.test(new.data$v5[c(which(dty[iter,]=="1"))], new.data$v5[c(which(dty[iter,]=="2"))], alternative="two.sided"))$p.val
}
> p_v5
[1] 0.4142162 0.4142162 0.1024704

Наконец, я объединяю их вместе

p.val_mat=cbind(p_value,p_v4,p_v5)
p.val_mat
                                           p_v4      p_v5
[1,] 0.574490940 0.33859440 0.8054510 0.8382565 0.4142162
[2,] 0.005069568 0.32542488 0.5887188 0.8382565 0.4142162
[3,] 0.707848017 0.06346828 0.4529153 0.4142162 0.1024704

Могу ли ясделать это одним циклом или с помощью любой другой функции?Благодарим Вас за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...