Как рассчитать p-значение для 48 столбцов и сохранить результаты

У меня есть два набора данных размером 18 на 48. Один за умерших людей, а другой за выживших. Оба имеют одинаковые имена столбцов (CNP1,CNP2,...,CNP48). Я хотел бы рассчитать P-значение каждого CNP. Я использую следующую функцию:

t.test (dead_CNP$CNP1, alived_CNP$CNP1)[3] - Как я могу использовать эту функцию для 48 столбцов за один раз и сохранять результаты в переменных ( p1,p2,...,p48)?

2 ответа

Вы можете просто перебрать столбцы.

 pVals <- numeric()
 for(i in 1:ncol(died_CNP))
   pVals[i] <- t.test(died_CNP[,i],survived_CNP[,i])$p.value

Результирующий pVals будет числовой вектор длины 48, Рекомендуется скорректировать ваши значения p, используя p.adjust чтобы избежать проблемы множественных сравнений

 pValsAdjusted <- p.adjust(pVals)

Это слишком долго для комментария, но расширяет ответ Грегора. Главное отличие состоит в том, что он создает for цикл без роста объекта.

pVals  <- vector ("numeric", length = ncol (died_CNP))
for (i in seq_along (pVals)){
  pVals[i] <- t.test(died_CNP[[i]], survived_CNP[[i]])$p.value
}

Или вы можете векторизовать это

pVals <- vapply (seq_along (died_CNP),
          function (i){
            t.test(died_CNP[,i],survived_CNP[,i])$p.value
          },
          numeric(1))

(Набрано на телефоне, код не проверен)

Другие вопросы по тегам