Как рассчитать 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))
(Набрано на телефоне, код не проверен)