Два разных p-значения для одной комбинации переменных? corrplot :: corrplot

Мне бы хотелось сопоставить свои данные (пакет, который я использую, неожиданно удивил, это {corrplot}) и отображать в нем p-значения парных корреляций.

Теперь я нашел несколько полезных вещей здесь о том, как это сделать, и на первый взгляд, все прошло на удивление хорошо. Но потом я заметил, что p-значения были совершенно странными и не соответствовали фактическим p-значениям из cor.test ().

Я уже выяснил (используя примерные данные), что это не из-за моих данных, а из-за того, что я ошибся в коде, с помощью которого я пытаюсь включить p-значения.

Итак, вот воспроизводимый пример:

#using built-in r-data:
data("mtcars")

#now for the corrplot:
M = cor(mtcars, use="complete.obs")
pval <- corr.test(M, adjust="none")$p
corrplot(M, method = "color", type = "upper", 
     order = "original", tl.col = "black", tl.srt = 45,
     family="serif", p.mat=pval, insig="p-value", sig.level=0)

Вот что я получаю:

(не разрешил мне загрузить файл, поэтому вам нужно щелкнуть ссылку ...) < / а>

В любом случае, чтобы проиллюстрировать, что это не настоящие p-значения, давайте возьмем одну пару, а именно «qsec» и «drat»:

cor.test(mtcars$qsec, mtcars$drat, use="complete.obs")

И результирующее p-значение («p-value = 0,6196») определенно не то, что вы видите на графике соответствия («0,14»).

Это, наверное, действительно глупо, и я уверен (p ‹.0001), что что-то не замечаю - но я не знаю, что это такое. Помощь?


person Fabian Habersack    schedule 04.08.2017    source источник


Ответы (1)


Используя corr.test(M, adjust="none"), вы передаете матрицу M в функцию. А матрица M отличается от данных, которые у вас есть. Попробуйте вместо этого использовать corr.test(mtcars, adjust="none"). Вам необходимо передать свой фактический набор данных, а не матрицу корреляций.

Если вы проверите, как выглядит data.frame(M), вы увидите, что ваша переменная drat имеет 11 значений, и это корреляции drat и остальных переменных. Однако вы хотите, чтобы drat был столбцом drat из mtcars с 32 значениями.

Вы можете передать матрицу корреляции M в функцию corrplot, но не в функцию corr.test.

person AntoniosK    schedule 04.08.2017
comment
Хорошо, это имеет смысл, но как я могу получить p-значения из простой функции corr.test(mtcars) в свой corrplot? Я думаю, от pvals <- corr.test(mtcars, adjust="none")? - person Fabian Habersack; 04.08.2017
comment
Да ничего другого менять не надо. - person AntoniosK; 04.08.2017
comment
ОБНОВЛЕНИЕ: он работал отлично. Спасибо, @AntoniosK. :) - person Fabian Habersack; 04.08.2017
comment
Однако я все еще не уверен, зачем нужно извлекать p-значения M, как здесь: stackoverflow.com/questions/29709204/ - person Fabian Habersack; 04.08.2017
comment
Всегда проверяйте, что каждая функция ожидает на входе. Я думаю, что хороший способ запомнить - это то, что график (например, corrplot) просто заботится о построении некоторых значений, но -статистический- тест (например, corr.test) требует фактических наблюдений. - person AntoniosK; 04.08.2017
comment
Потому что сюжет заботится только о том, чтобы отобразить некоторую информацию, которую вы ему передадите. Он не может рассчитать для вас значения p, так как никогда не увидит ваши фактические данные. Вот почему вам нужно заранее рассчитать значения p (используя статистический тест), а затем просто использовать их на графике. - person AntoniosK; 04.08.2017
comment
Еще один полезный метод: rdrr.io/cran/PerformanceAnalytics/man/chart. Correlation.html. На всякий случай, если вы еще не пробовали. - person AntoniosK; 04.08.2017
comment
Хорошо, я это понимаю. Теперь я рассчитал p-значения на основе mtcars вместо M. Но почему тогда кому-то нужно заботиться о p-значениях, основанных на M, - вот что я спрашивал себя. Это больше похоже на теоретический вопрос о том, что имеет смысл, а что нет, а не на технический вопрос о том, как corrplot работает. - person Fabian Habersack; 04.08.2017
comment
Спасибо за ссылку. chart.correlation кажется даже круче, чем corrplot (с точки зрения количества информации, которую вы можете упаковать в один график). Я обязательно воспользуюсь этим в будущем ... - person Fabian Habersack; 04.08.2017
comment
В примере в ссылке, которую вы отправили, способ определения M отличается от вашего. Ваш M представляет собой матрицу корреляций, но M в ссылке является частью фактических данных M <- mtcars[3:7]. - person AntoniosK; 04.08.2017
comment
Хорошо, я полагаю, мне следовало бы присмотреться более внимательно. Спасибо еще раз! ;) - person Fabian Habersack; 04.08.2017