Ошибка в cor.test.default(x = mat[, i], y = mat[, j], ...): недостаточно конечных наблюдений

Я просмотрел Google и Stackru, чтобы найти решение моей проблемы. Я пробовал кое-что сейчас, но ничего не работает.

Я пытаюсь создать диаграмму корреляции лингвистических функций. Для каждой функции (всего 36) в Excel есть 1, когда докладчик использовал ее, и 0, когда докладчик не использовал.

Есть 41 докладчик, ни один из которых не использовал все 36 функций, хотя самый низкий балл - 8. Я хочу проанализировать свои данные, чтобы увидеть, какие функции коррелируют, и, следовательно, выяснить, какие функции предсказывают использование других функций.

Я использовал corrplot в R. Вот команда, которую я использовал:

cor_mat <- df_analysis %>%
    replace(., is.na(.), 0) %>%
    cor(method = "spearman")

cor_residuals <- cor.mtest(cor_mat, conf.level = .95)

Но я получаю сообщение об ошибке:

Error in cor.test.default(x = mat[, i], y = mat[, j], ...) : not enough finite observations

Кто-нибудь знает, почему и как я могу это исправить? Фактически, все, что мне действительно нужно знать, - это в чем проблема, и я, вероятно, смогу разобраться самостоятельно оттуда. Хотя я был бы очень благодарен, если у вас тоже есть решение!

Большое спасибо!

2 ответа

Решение

В вашем наборе данных есть несколько столбцов, у которых нет вариантов; таким образом, корреляции для этих переменных всеNA, который привинчивает все вверх по течению.

which(apply(df_analysis,2,sd)==0)
## [1] a' c[h]lach bheag [3] a' c[h]loich bhig [14] a' b[h]ord bheag 
##                     1                     3                    14 
##       [26] nan su[ ]l       [27] nan sul[ ] 
##                    26                    27 

Я понял это, установив options(error=recover)и работает, чтобы узнать, где произошла ошибка (этот параметр переводит вас в режим браузера / отладки при возникновении ошибки). Точнее, я должен был сделатьcorrplot(cor_mat), который помогает поставить вопросительные знаки для значений NA...

image(), или heatmap(as.matrix(df_analysis),Rowv=NA,Colv=NA, scale="none", margins=c(10,8)), было бы полезно посмотреть ваши необработанные данные.

В идеале corrplot можно определить так:

df_cor <- cor(df_analysis)
corrplot(df_cor, type = "full", order = "hclust",
         outline.color = "white", hc.method = "ward",
         pch.cex = .5, show.diag = TRUE,
         p.mat = cor_residuals$p, insig = "blank", sig.level = .01,
         addrect = 20, tl.srt = 36, tl.cex = .8, tl.col = "black",
         col = rev(lacroix_palette("PassionFruit", 8, "continuous")))
Другие вопросы по тегам