2016-04-30 8 views
2

に散布マトリックスを形成するために、Excelの相関行列は、以下:どのように相関行列を読み、私は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に行列にこの行列を読み取ろうとしました:

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

B <- as.matrix(dfA) 

しかし、私は次のコードで散布図行列を形成しようとすると、

私はエラー

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

は親切にこの問題で私を助け受けます。

+0

私が誤解しているかもしれませんが、私はあなたが飛ぶつもりはないされてExcelから作られた相関行列のグラフの相関行列を作成していると思います。相関マトリックスを実行するためには、 "整然とした"データしか使用できません。この場合、Tidyは行として独自の観測が必要で、ベータ1、ベータ2、ベータ3、...があなたの列であることを意味します。お役に立てれば。 – BGA

+0

@BGA実際には、私はExcelで相関行列を持っているので、その相関行列から散布図行列グラフを作成しようとしています。 –

+0

ああ。同じ概念です。私はまだあなたの散布図マトリックスを実行するために生データが必要だと思います。もう生データはありませんか?アクセス可能であれば、それをcsvのデータフレームとしてrに取り込むことは非常に簡単です。 – BGA

答えて

3

corrplot()ソリューション上記user20650のコメントに基づいてggplotを使用して私の最初のポストへ

更新。 user20650は、可能性のあるエラーの原因が、いくつかの数値が許容範囲[-1,1]の範囲外になるミスを丸めていたことと、この問題を解決する丸めであることを示しています。私は、corrplot()を使ってプロットを生成することもできました。

corMat<-as.matrix(dfA) 

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

enter image description here

ggplotあなたはまた、いくつかの追加の手順でggplot2でこれを行うことができます()ソリューション

:corrplotを実行しているこの時点で

は、()は、次のプロットを生成します。私は個人的にははるかに良く見えると思う。

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使用::溶融()長い形式に変換行列と2つのだけ小数点以下まで表示値のフォーマットされたバージョンを作成します。これはプロットに便利です。ラベルを印刷するために)主にgeom_tileに頼る()マトリックスとgeom_textを(印刷する - 最後に、私はggplot2にこのデータをフィード

> 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):

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) 

は、ここでのデータは次のようになります。各タイルの上にあなたが望むなら、あなたはこれをさらに飾ることができます。

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の議論が必要なのでしょうか? matrix()はすでに値をcorMatに正しく配置しているようです。 – AOGSTA

+1

良い目。私はOPの新しいread.table()インポートで更新するつもりです。 – AOGSTA

+0

それは完全に動作する(私は両方の散布図の行列を作った)あなたの答えとステップコードの説明でこのようなステップをありがとう。実際にggplotは円ベースの散布図よりはるかによく見えます。私はデータによって提供された方法を謝罪します。相関行列を行列形式でRにインポートするにはどうすればよいですか? –

関連する問題