相関行列をグラフにプロットする


93

いくつかの相関値を持つ行列があります。次に、それを多かれ少なかれ似たグラフにプロットします。

ここに画像の説明を入力してください

どうすればそれを達成できますか?


:あなたは、この機能の興味深いかもしれませんgist.github.com/low-decarie/5886616を 、それはまだ改善する必要があるものの(stackoverflow.com/questions/17370853/...
エティエンヌ低Décarie

@anonはこのためのコードを共有できますか?これはまさに私のプレゼンテーションに求めているものです
パブロスパンテリアディス

回答:


57

すばやく、汚い、そして球場で:

library(lattice)

#Build the horizontal and vertical axis information
hor <- c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225")
ver <- paste("DM1-", hor, sep="")

#Build the fake correlation matrix
nrowcol <- length(ver)
cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver))
for (i in 1:nrowcol) cor[i,i] = 1

#Build the plot
rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb")
levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01))

ここに画像の説明を入力してください


2
これは、OPの例(フォント、色、レイアウト)と非常によく似ています。オリジナルもラティスで作成されたようです。非常に詳細な回答、+ 1。
Marek

1
答えてくれてありがとう。多くの人は、1-sを含む対角線が左下から右上の四角形(質問の例の図を参照)まで走る相関プロットに慣れています。解決。この問題を修正する方法は次のとおりです。cor_reversed <-apply(cor、2、rev); levelplot(t(cor_reversed)、...)
スキップ

@ bill_080コードのコピーアンドペーストで相関行列が出力されないのはなぜですか?
Pavlos Panteliadis 2017年

59

むしろ「少ない」ように見えますが、(より視覚的な情報を提供するため)チェックする価値があります。

相関行列の楕円相関行列の楕円 相関行列の円相関行列の円

以下の@assyliasで参照されているcorrplotビネットで他の例を見つけてください。


1
サイトは機能していないようです。最初のプロットのコードまたはパッケージの説明はありますか?
明るい星

1
@TrevorAlexander:私が覚えている限り、最初のプロットはによって作成されましたellipse:plotcorr
daroczig 14年

リンク1の編集を送信しました。同じ画像を提供するImprovements-visualisation.org/vis/id=250
russellpierce 2014年

1
@rpierceに感謝しますが、Rソースのない画像しか表示されません。ここで何が恋しいですか?
daroczig 2014年


43

ラティス::レベルプロットで非常に簡単:

z <- cor(mtcars)
require(lattice)
levelplot(z)

ここに画像の説明を入力してください


30

ggplot2ライブラリはでこれを処理できgeom_tile()ます。上記のプロットでは、負の相関がないため、何らかのリスケーリングが行われた可能性があるようです。データを考慮してください。mtcarsデータセットの使用:

library(ggplot2)
library(reshape)

z <- cor(mtcars)
z.m <- melt(z)

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "blue",  high = "yellow")

ここに画像の説明を入力してください

編集

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient2(low = "blue",  high = "yellow")

ここに画像の説明を入力してください

中点の色を指定することができ、デフォルトは白なので、ここで良い調整になるでしょう。他のオプションは、ここおよびここの ggplotのウェブサイト見つけることができます


いい(+1)!(例:私は手動ブレイクスケールを追加することになりますがc(-1, -0.6, -0.3, 0, 0.3, 0.6, 1))で"white"できるように途中で色が効率的な相関の対称性を反映しています。
daroczig

@Daroczig-良い点。scale_fill_gradient2()あなたが自動的に記述した機能を達成しているように見えます。それが存在することを知りませんでした。
追跡

1
これに追加:p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)インタラクティブにします
schlusie

対角1つのは、左上から右下へ行くようにするには、因子レベルの反転が要求されるX1使用:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
アルン

11

corrplotパッケージを使用します。

library(corrplot)
data(mtcars)
M <- cor(mtcars)
##  different color series
col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white", 
        "cyan", "#007FFF", "blue","#00007F"))
col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7",
        "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061"))  
col3 <- colorRampPalette(c("red", "white", "blue")) 
col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F", 
        "cyan", "#007FFF", "blue","#00007F"))   
wb <- c("white","black")


par(ask = TRUE)


## different color scale and methods to display corr-matrix
corrplot(M, method="number", col="black", addcolorlabel="no")
corrplot(M, method="number")
corrplot(M)
corrplot(M, order ="AOE")
corrplot(M, order ="AOE", addCoef.col="grey")

corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col1(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col2(200))
corrplot(M, order="AOE", col=col2(200),addCoef.col="grey")
corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col2(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col3(100))
corrplot(M, order="AOE", col=col3(10))



corrplot(M, method="color", col=col1(20), cl.length=21,order = "AOE", addCoef.col="grey")

if(TRUE){

corrplot(M, method="square", col=col2(200),order = "AOE")

corrplot(M, method="ellipse", col=col1(200),order = "AOE")


corrplot(M, method="shade", col=col3(20),order = "AOE")

corrplot(M, method="pie", order = "AOE")


## col=wb
corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no")
## like Chinese wiqi, suit for either on screen or white-black print.
corrplot(M, col = wb, bg="gold2",  order="AOE", addcolorlabel="no")
}

例えば:

ここに画像の説明を入力してください

ややエレガントなIMO


9

このタイプのグラフは、他の用語の中でも「ヒートマップ」と呼ばれます。相関行列を取得したら、さまざまなチュートリアルのいずれかを使用してプロットします。

基本グラフィックの使用:http : //flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

ggplot2の使用:http ://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/


それを「ヒートマップ」と呼ぶのがかなり現代的な発明であるかどうかはわかりません。赤-オレンジ-黄色の配色を使用して「ホットスポット」を表示しようとしている場合、それは理にかなっているようですが、一般的には単なる画像プロット、マトリックスプロット、またはラスタープロットです。それを「ヒートマップ」と呼ぶ最も古い参照を見つけることに興味があります。tldr; 「[引用が必要]」
Spacedman、

ヒートマップは必ずしも最初期の名前ではないというのはあなたの言う通りです。ウィキペディアには1957年の論文がリストされていますが、その論文を確認したところ、「ヒートマップ」という用語がどこにも表示されていません(グラフィックも現在のフォームとまったく同じに見えません)。
アリB.フリードマン

5

私は@daroczigが投稿した視覚化に似たものに取り組んでおりplotcorr()ellipseパッケージの機能を使用して@Ulrikが投稿したコードを使用しています。相関関係を表すために楕円を使用し、負と正の相関を表すために色を使用するのが好きです。ただし、目立つ色を0に近い相関ではなく、1と-1に近い相関で目立たせたいと思いました。

色付きの円の上に白い楕円を重ねた代替案を作成しました。各白い楕円のサイズは、その後ろに表示される色付きの円の比率が2乗相関に等しくなるように設定されています。相関が1と-1に近い場合、白い楕円は小さく、色付きの円の多くが表示されます。相関が0に近い場合、白い楕円は大きく、色付きの円はほとんど見えません。

関数はplotcor()https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.rで入手できます

mtcarsデータセットを使用した結果のプロットの例を以下に示します。

library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))

plotcor()関数の呼び出し結果


3

久しぶりだと思いますが、新しい読者rplot()corrrパッケージ(https://cran.rstudio.com/web/packages/corrr/index.html)から興味があるかもしれません。、ただしデータパイプラインアプローチの設計:

install.packages("corrr")
library(corrr)
mtcars %>% correlate() %>% rplot()

ここに画像の説明を入力してください

mtcars %>% correlate() %>% rearrange() %>% rplot()

ここに画像の説明を入力してください

mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15)

ここに画像の説明を入力してください

mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15)

ここに画像の説明を入力してください

mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15)

ここに画像の説明を入力してください


2

corrplot Rパッケージcorrplot()関数を使用して、コレログラムをプロットすることもできます。

library(corrplot)  
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")

相関行列を計算して視覚化する方法を説明するいくつかの記事がここに公開されています。


1

私が最近学んだ別のソリューションは、qtlchartsパッケージで作成されたインタラクティブなヒートマップです。

install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)

以下は、結果のプロットの静的画像です。 ここに画像の説明を入力してください

あなたは私のブログでインタラクティブバージョンを見ることができます。ヒートマップにカーソルを合わせると、行、列、セルの値が表示されます。セルをクリックすると、グループごとに色分けされたシンボルの散布図が表示されます(この例では、シリンダーの数、4は赤、6は緑、8は青です)。散布図のポイントにカーソルを合わせると、行の名前(この場合は自動車の型)がわかります。


0

コメントできないので、答えとしてdaroczigの答えに2cを与えなければなりません...

楕円散布図は、実際にellipseパッケージから生成され、次のように生成されます。

corr.mtcars <- cor(mtcars)
ord <- order(corr.mtcars[1,])
xc <- corr.mtcars[ord, ord]
colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white",
            "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C")   
plotcorr(xc, col=colors[5*xc + 6])

(manページから)

corrplotパッケージは-提案されているように- ここにあるきれいな画像で役立つかもしれません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.