2016-04-30 5 views
2

У меня есть матрица корреляции первенствует следующим образом:Как читать матрицу корреляции и образуют матрицу диаграммы рассеяния в R

dfA <- read.table(text= 
     "beta1 beta2 beta3 beta4 beta5 beta6  X  X2  X3 
beta1 1.0000 -0.2515 -0.2157 0.7209 -0.7205 0.4679 0.1025 -0.3606 -0.0356 
beta2 -0.2515 1.0000 0.9831 0.1629 -0.1654 -0.5595 -0.0316 0.0946 0.0829 
beta3 -0.2157 0.9831 1.0000 0.1529 -0.1559 -0.4976 -0.0266 0.0383 0.0738 
beta4 0.7209 0.1629 0.1529 1.0000 -1.0000 -0.2753 0.0837 -0.1445 0.0080 
beta5 0.4679 -0.5595 -0.4976 -0.2753 1.0000 0.2757 0.0354 -0.3149 -0.0596 
beta6 -0.7205 -0.1654 -0.1559 -1.0000 0.2757 1.0000 -0.0837 0.1451 -0.0081 
X  0.1025 -0.0316 -0.0266 0.0837 -0.0837 0.0354 1.0000 0.0278 -0.0875 
X2 -0.3606 0.0946 0.0383 -0.1445 0.1451 -0.3149 0.0278 1.0000 0.2047 
X3 -0.0356 0.0829 0.0738 0.0080 -0.0081 -0.0596 -0.0875 0.2047 1.0000", 
     header=TRUE) 

Я только корреляционная матрица, а не исходные данные, из которых формируется матрица, поэтому я попытался прочитать эту матрицу в матрицу в R с этим кодом:

B <- as.matrix(dfA) 

Но когда я пытаюсь сформировать матрицу рассеяния участка со следующим кодом:

library(corrplot) 
corrplot(B, method="circle") 

Я получаю ошибку

Error in corrplot(B, method = "circle") : The matrix is not in [-1, 1]! 

Пожалуйста, помогите мне с этой проблемой.

+0

Я, возможно, не понял, но я думаю, что вы создаете корреляционную матрицу корреляционной матрицы графа сделанный из Excel, который не собирается летать. Вы можете использовать только «аккуратные» данные для выполнения корреляционной матрицы. В этом случае Tidy означает, что вам нужны уникальные наблюдения в виде строк и бета1, бета2, бета3, ... - ваши столбцы. Надеюсь это поможет. – BGA

+0

@BGA на самом деле у меня есть корреляционная матрица в excel, поэтому я пытаюсь сделать график матрицы рассеяния из этой корреляционной матрицы. –

+0

ах. но та же концепция. Я считаю, что вам все еще нужны необработанные данные для выполнения вашей матрицы рассеянного экрана. у вас больше нет необработанных данных?если он доступен, довольно легко привести его в r как кадр данных из csv или excel. – BGA

ответ

3

corrplot() Решение

Update на мой первый пост, используя ggplot на основе замечаний user20650 по выше. user20650 показывает, что вероятным источником ошибки являются ошибки округления, приводящие к тому, что некоторые числа выходят за допустимый диапазон [-1,1], и округление решает эту проблему. Я смог создать сюжет, используя corrplot().

На данный момент работает corrplot() дает следующий сюжет:

corMat<-as.matrix(dfA) 

library('corrplot') 
corrplot(corMat, method='circle') 

enter image description here

ggplot() Раствор

Вы также можете сделать это в ggplot2 с несколькими дополнительными шагами. Я лично считаю, что это выглядит намного лучше.

1) Я избавляюсь от избыточной информации в нижнем треугольнике матрицы.

corMat[lower.tri(corMat)]<-NA 

> print(corMat) 
     beta1 beta2 beta3 beta4 beta5 beta6  X  X2  X3 
beta1  1 -0.2515 -0.2157 0.7209 0.4679 -0.7205 0.1025 -0.3606 -0.0356 
beta2 NA 1.0000 0.9831 0.1629 -0.5595 -0.1654 -0.0316 0.0946 0.0829 
beta3 NA  NA 1.0000 0.1529 -0.4976 -0.1559 -0.0266 0.0383 0.0738 
beta4 NA  NA  NA 1.0000 -0.2753 -1.0000 0.0837 -0.1445 0.0080 
beta5 NA  NA  NA  NA 1.0000 0.2757 -0.0837 0.1451 -0.0081 
beta6 NA  NA  NA  NA  NA 1.0000 0.0354 -0.3149 -0.0596 
X  NA  NA  NA  NA  NA  NA 1.0000 0.0278 -0.0875 
X2  NA  NA  NA  NA  NA  NA  NA 1.0000 0.2047 
X3  NA  NA  NA  NA  NA  NA  NA  NA 1.0000 

2) Затем я использую reshape2 :: расплава(), чтобы преобразовать матрицу в длинную форму и создать форматированную версию значений, которые только показывают до двух знаков после запятой. Это будет полезно для сюжета.

library(reshape2) 
m<-melt(corMat) 
m<-data.frame(m[!is.na(m[,3]),]) # get rid of the NA matrix entries 
m$value_lab<-sprintf('%.2f',m$value) 

Вот как выглядит данные, как:

> head(m) 
    Var1 Var2 value value_lab 
1 beta1 beta1 1.0000  1.00 
10 beta1 beta2 -0.2515  -0.25 
11 beta2 beta2 1.0000  1.00 
19 beta1 beta3 -0.2157  -0.22 
20 beta2 beta3 0.9831  0.98 
21 beta3 beta3 1.0000  1.00 

3) Наконец, я кормлю эти данные в ggplot2 - в первую очередь полагаться на geom_tile(), чтобы напечатать матрицу и geom_text() для печати этикеток над каждой плиткой. Вы можете одеть это, если хотите.

library(ggplot2) 
ggplot(m, aes(Var2, Var1, fill = value, label=value_lab),color='blue') + 
    geom_tile() + 
    geom_text() + 
    xlab('')+ 
    ylab('')+ 
    theme_minimal() 

enter image description here

+0

@ user20650 О, круто. Я отправил свой ответ, прежде чем увидел ваш комментарий по этому вопросу. Я обновляю сообщение, чтобы включить corrplot(). Кроме того, зачем мне аргумент byrow? Кажется, матрица() уже правильно помещает значения в corMat. – AOGSTA

+1

Хороший глаз. Я собираюсь обновить новый импорт read.table(). – AOGSTA

+0

он отлично работает (я сделал как матрицы рассеянного экрана) спасибо за ваш ответ и такое пошаговое описание кода. На самом деле ggplot выглядит намного лучше, чем график рассеяния на основе круга. Я извиняюсь за то, как я предоставлял данные. Не могли бы вы мне помочь, как импортировать матрицу корреляции в R в матричном формате? –

 Смежные вопросы

  • Нет связанных вопросов^_^