corrplotで相関行列を視覚化し,データの見通しを良くする.

多変量のデータの関係性を見たくて,相関係数を見てみたい.ということで,視覚化してみる.corrplotパッケージを使用.

まずはデータ.

> dat
   participants  EMG1  EMG2  EMG3  EMG4 time   force fatigue comfort
1             1 0.020 0.007 0.015 0.020 1.70 361.132    68.6    60.6
2             2 0.039 0.008 0.010 0.012 1.36 293.362    65.0    48.2
3             3 0.079 0.007 0.015 0.017 2.48 349.753    97.4    28.0
4             4 0.041 0.007 0.012 0.007 1.53 251.173    80.4    46.0
5             5 0.093 0.015 0.014 0.020 2.04 207.457    85.6    30.6
6             6 0.036 0.019 0.012 0.021 3.26 433.677    89.2    33.2
7             7 0.049 0.012 0.009 0.013 2.09 261.236    57.8    55.8
8             8 0.074 0.009 0.010 0.016 2.00 248.466    67.6    49.2
9             9 0.096 0.008 0.015 0.019 2.18 269.364    90.8    41.4
10           10 0.040 0.008 0.010 0.020 3.69 260.286    87.0    45.2
11           11 0.040 0.008 0.010 0.020 1.58 244.470    40.2    30.6
12           12 0.040 0.008 0.010 0.020 1.29 295.207    72.4    58.4

中略

32           32 0.043 0.007 0.009 0.011 1.60 268.695    23.8    77.2
33           33 0.092 0.007 0.012 0.018 1.05 274.317    27.0    93.4
34           34 0.051 0.007 0.008 0.014 1.21 243.626    49.8    86.0
35           35 0.051 0.007 0.008 0.014 0.84 241.260    21.4    79.0
36           36 0.051 0.007 0.008 0.014 1.10 292.484    20.6    80.2
>

こんなデータがエクセル上にあったとして…をれを読み込んだもの.

> dat<-read .delim="" clipboard="" comment--read--="">


次にこの行列について,総当りで相関係数を計算.
> cor<-cor dat="" method="pearson">
> cor
               EMG1        EMG2        EMG3       EMG4        time       force
EMG1     1.00000000  0.07462655  0.32963682  0.3262487  0.08174901 -0.32272853
EMG2     0.07462655  1.00000000  0.13179792  0.2839100  0.51848464  0.23425635
EMG3     0.32963682  0.13179792  1.00000000  0.1975159  0.18125284  0.08786192
EMG4     0.32624869  0.28391001  0.19751588  1.0000000  0.43220184  0.19650860
time     0.08174901  0.51848464  0.18125284  0.4322018  1.00000000  0.16036375
force   -0.32272853  0.23425635  0.08786192  0.1965086  0.16036375  1.00000000
fatigue -0.05285888  0.39281360  0.43567818  0.2424177  0.56961176  0.35223914
comfort -0.23434551 -0.47336696 -0.41126381 -0.4303206 -0.62746670 -0.17677707
            fatigue    comfort
EMG1    -0.05285888 -0.2343455
EMG2     0.39281360 -0.4733670
EMG3     0.43567818 -0.4112638
EMG4     0.24241771 -0.4303206
time     0.56961176 -0.6274667
force    0.35223914 -0.1767771
fatigue  1.00000000 -0.6594524
comfort -0.65945241  1.0000000

corrplotパッケージの読み込み.(もちろんインストールされていることが前提)

> library(corrplot)


視覚化してみる.

> corrplot(cor, type="upper", tl.col="black",tl.cex=1.0, tl.srt=45)

type で"full", "lower", "upper"を選択.今回は上半分だけを出力してみたので,upperとした.
tl.colで文字の色,cexでサイズを指定できる.
この他にもorderで並び順を指定でき,"original", "AOE", "FPC", "hclust", "alphabet"から選ぶことができ,medthodで,"circle", "square", "ellipse","number", "pie", "shade", "color"がある.


さらに無相関検定の結果も入れてみる.
そのために以下の関数を組む.詳しくは,

cor.mtest <- conf.level="0.95)" function="" mat="" p="">    mat <- as.matrix="" mat="" p="">    n <- mat="" ncol="" p="">    p.mat <- lowci.mat="" matrix="" n="" p="" uppci.mat="">    diag(p.mat) <- 0="" p="">    diag(lowCI.mat) <- 1="" diag="" p="" uppci.mat="">    for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
            tmp <- conf.level="conf.level)</p" cor.test="" i="" j="" mat="">            p.mat[i, j] <- i="" j="" p.mat="" p.value="" p="" tmp="">            lowCI.mat[i, j] <- conf.int="" i="" j="" lowci.mat="" p="" tmp="">            uppCI.mat[i, j] <- conf.int="" i="" j="" p="" tmp="" uppci.mat="">        }
    }
    return(list(p.mat, lowCI.mat, uppCI.mat))
}
}

このcor.mtestを使ってp値の計算.
> pval<-cor .mtest="" dat="" p="">

で,このpvalをcorrplotに組み込む.p値が0.05未満の結果だけを表示した図にするには下記の通り.

> corrplot(cor, type="upper", tl.col="black",tl.cex=1.0,tl.srt=45,p.mat=pval[[1]],insig="blank")




insigを何も指定しないと,☓がついて表示される.

p値を重ねて表示するには以下のようにする.

> corrplot(cor, type="upper", tl.col="black",tl.cex=1.0,tl.srt=45,p.mat=pval[[1]],insig="p-value",sig.level=-1)




コメント