Импорт корреляционной матрицы

У меня есть готовая корреляционная матрица для визуализации в R с corrplot (или другим соответствующим) пакетом. У меня нет исходных данных для корреляции с функцией cor().

Проблема только в том, чтобы импортировать матрицу из .csv файла и произвести с ней какие-то действия (визуализацию, дендритный граф и т.д.). Однако R не распознает матрицу как таковую, где можно применить corrplot. я использовал

M<-read.csv("myfile.csv") 

тогда

Mcor <- as.matrix(M) 

Далее я добавил одинаковые имена строк и столбцов:

rownames(Mcor)<-my_cols_names
colnames(Mcor)<-my_cols_names

Он показывает структуру, идентичную «истинной» корреляционной матрице, полученной из необработанных данных с помощью cor():

> str(Mcor)
 num [1:25, 1:25] 1 0.58 -0.43 -0.39 0.06 0.1 -0.3 -0.2 -0.06 -0.3 ...
 - attr(*, "dimnames")=List of 2
 ..$ : chr [1:25] "V1" "V2" "V3" "V4" ...
 ..$ : chr [1:25] "V1" "V2" "V3" "V4" ...

Однако corrplot(Mcor) дает

Ошибка в corrplot(Mcor): матрица не в [-1, 1]!

Проблема оказалась тривиальной и была вызвана опечаткой при вводе данных: одно число оказалось >1.

Способ проверить это, как предложено в комментариях: 1) запустите команду

любой (абс (Mcor)> 1)

дает TRUE, если в данных есть неправильные числа (абсолютные значения> 1)

2) впоследствии попытаться нарисовать графики корреляции для меньших наборов:

коррекция(Mcor[1:5,1:5])

тогда

corrplot(Mcor[1:10,1:10])

пока ошибка (неверный столбец) не будет локализована (невозможно построить график с матрицей (n+1)x(n+1), если nxn в порядке). Или напрямую выявить неправильный номер(а), например, с помощью команды what


person astrsk    schedule 20.07.2017    source источник
comment
Возможный дубликат Легкий ввод корреляционной матрицы в R   -  person Chetan Arvind Patil    schedule 21.07.2017
comment
что возвращает any(abs(Mcor)>1) (сообщение об ошибке предполагает, что это может быть правдой) . Если это так, и вы уверены, что это корреляционная матрица, которую вы импортировали, то это может быть проблемой округления. Вы можете попробовать corrplot(round(Mcor, 4))   -  person user20650    schedule 21.07.2017
comment
Это дает FALSE, данные как таковые кажутся в порядке. Что-то не так с типами/согласованностью (?)   -  person astrsk    schedule 21.07.2017
comment
типы выглядят нормально с ул. Пожалуйста, попробуйте corrplot(Mcor[1:5, 1:5]), чтобы увидеть, работает ли он для небольшого числа значений.   -  person user20650    schedule 21.07.2017
comment
Это дает FALSE, данные как таковые кажутся в порядке. Округление тоже не работает. Итак, проблема, скорее всего, в неправильной согласованности при импорте данных csv (проблемы с двойной точностью?) Или, например, матрица не симметрична (должна быть, но кто знает, может быть, какая-то опечатка)   -  person astrsk    schedule 21.07.2017
comment
Итак, вы можете построить график с подмножеством данных из комментария выше? если нет, поделитесь результатами dput(Mcor[1:5, 1:5]), пожалуйста. пс. corrplot не выдаст ошибку, если он несимметричен (corrplot::corrplot(matrix(runif(4), 2)))   -  person user20650    schedule 21.07.2017
comment
Это сработало! До corrplot(Mcor[1:18, 1:18]) включительно. А проверка данных выявила опечатку в 19-м столбце с цифрой ›1. any(abs(Mcor)›1) вернул FALSE из-за другой опечатки в этой команде (неуместный оператор ›1 и одна квадратная скобка). Так что проблема тривиальна.   -  person astrsk    schedule 21.07.2017
comment
ладно, хороший материал   -  person user20650    schedule 21.07.2017