Использование cor.test () для столбцов с на - PullRequest
1 голос
/ 26 апреля 2020

Когда я пытаюсь вычислить корреляции Спирмена одного столбца на другом кадре данных, каждый раз, когда я использую cor.test(dfx, dfy, method = c("spearman"), na.action = "na.exclude"), выдается ошибка, говорящая, что x и y должны иметь одинаковую длину. Я использовал cor(), чтобы сделать то же самое, указав «complete.obs», который прекрасно работал, но мне также нужно иметь значения P для каждого объекта.

Age Male (1,0) Female (1,0) Other (race) Caucasian (1,0)
1  83          1            0            0               1
2  91          1            0            0               1
3  87          1            0            0               1
4  89          0            1            0               1
5  78          1            0            0               1
6  84          0            1            0               1

вот пример таблицы 352x52. Я сравниваю его со столбцом 352x1, и по всему есть несколько NA, поэтому я пытаюсь выяснить, как с этим справиться и получить отчет о значении P.

1 Ответ

1 голос
/ 26 апреля 2020

Может быть, попробуйте это, сначала я сделаю пример dfx и dfy с некоторыми пропущенными значениями:

set.seed(100)
M = matrix(rnorm(352*53),ncol=53)
#make some NAs
M[sample(length(M),500)] = NA
dfy = M[,1]
dfx = M[,-1]

Вы используете apply для итерации по столбцам, и вы берете только те, которые не являются NA в этом столбце и у:

res = apply(dfx,2,function(i){
   compl = !is.na(i) & !is.na(dfy)
   unlist(cor.test(i[compl],dfy[compl],method="spearman")[c("estimate","p.value")])
})

res = t(res)

head(res)
     estimate.rho   p.value
[1,]  -0.03147103 0.5675366
[2,]  -0.06137428 0.2596360
[3,]  -0.06224493 0.2536336
[4,]  -0.02586685 0.6354243
[5,]   0.06105610 0.2642532
...