У меня есть готовая корреляционная матрица для визуализации в 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
any(abs(Mcor)>1)
(сообщение об ошибке предполагает, что это может быть правдой) . Если это так, и вы уверены, что это корреляционная матрица, которую вы импортировали, то это может быть проблемой округления. Вы можете попробоватьcorrplot(round(Mcor, 4))
- person user20650   schedule 21.07.2017corrplot(Mcor[1:5, 1:5])
, чтобы увидеть, работает ли он для небольшого числа значений. - person user20650   schedule 21.07.2017dput(Mcor[1:5, 1:5])
, пожалуйста. пс. corrplot не выдаст ошибку, если он несимметричен (corrplot::corrplot(matrix(runif(4), 2))
) - person user20650   schedule 21.07.2017