相関分析

データの読み込みと準備

サンプルデータは、統計教育推進委員会が提供してくださっているたばこ、アルコールと平均寿命[1]を使います。このデータには世界114カ国の寿命と喫煙、飲酒、1人あたりのGDPが掲載されています。以下のようにラベルを付けました。

lifespan_f:平均寿命(女)
lifespan_m:平均寿命(男)
alcohol:15歳以上一人当たりアルコール消費量
smoking_f:15歳以上喫煙率(女)
smoking_m:15歳以上喫煙率(男)
GDP:一人当たりGDP(購買力平価)

R Console
> x <- read.table(pipe("pbpaste"), header=TRUE) # クリップボードからデータを読み込み、xに代入。ちなみにこちらはMac用のコードでWindowsは、read.table("clipboard", header=TRUE)。
> summary(x) # xの要約を表示
   lifespan_f      lifespan_m       alcohol         smoking_f       smoking_m    
 Min.   :43.00   Min.   :41.00   Min.   : 0.000   Min.   : 0.30   Min.   : 7.60  
 1st Qu.:66.25   1st Qu.:62.00   1st Qu.: 1.472   1st Qu.: 3.70   1st Qu.:25.65  
 Median :74.00   Median :69.00   Median : 4.555   Median : 9.80   Median :34.35  
 Mean   :71.66   Mean   :66.53   Mean   : 5.153   Mean   :14.04   Mean   :35.42  
 3rd Qu.:80.00   3rd Qu.:73.75   3rd Qu.: 8.557   3rd Qu.:24.50   3rd Qu.:44.45  
 Max.   :86.00   Max.   :79.00   Max.   :15.560   Max.   :40.10   Max.   :70.10  
      GDP       
 Min.   :  270  
 1st Qu.: 2510  
 Median : 6930  
 Mean   :12703  
 3rd Qu.:19492  
 Max.   :60870  
[1]  統計教育推進委員会 – 統計活用提案のための教材サイト

 

相関係数の計算

例えば女性の寿命と喫煙率の相関係数を計算する場合は以下のように入力します。

R Console
> cor(x$lifespan_f, x$smoking_f, method = "pearson") # method="pearson"は省略してもピアソンの相関係数
が計算される。スピアマンの相関係数を計算する場合にはmethod="spearman"と記述する。
[1] 0.6151073

散布図を書いてみます。

R Console
> plot(x$lifespan_f, x$smoking_f) # lifespan_fがx軸、smoking_fがy軸の散布図を書く。

 

相関行列の計算

それぞれの変数間の相関行列を計算します。

R Console
> round(cor(x), digits = 3) # cor(x)でデータフレームxの相関行列を一気に計算してくれる。小数点以下第3位まで表示するには、round関数を用い、digitsで小数点以下の位を設定する。
           lifespan_f lifespan_m alcohol smoking_f smoking_m    GDP
lifespan_f      1.000      0.971   0.516     0.615     0.107  0.694
lifespan_m      0.971      1.000   0.462     0.596     0.105  0.711
alcohol         0.516      0.462   1.000     0.734     0.081  0.676
smoking_f       0.615      0.596   0.734     1.000     0.149  0.671
smoking_m       0.107      0.105   0.081     0.149     1.000 -0.035
GDP             0.694      0.711   0.676     0.671    -0.035  1.000

散布図も一気に表示してくれます。

R Console
> plot(x)

 

相関係数の検定

以下のようにして計算します。

R Console
> cor.test(x$lifespan_f, x$smoking_f, method = "pearson") # method="pearson"でピアソンの積率相関係数の検定、method="spearman"でスピアマンの順位相関係数の検定。

	Pearson's product-moment correlation

data:  x$lifespan_f and x$smoking_f
t = 8.2564, df = 112, p-value = 3.309e-13
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.4861943 0.7178173
sample estimates:
      cor 
0.6151073 

パッケージpsychに含まれるcorr.testという関数を使うと、相関係数の検定で得られるp値を相関行列と同じように行列として取得できます。

R Console
> library(psych) # パッケージpsychを読み込む。
> corr.test(x, method = "pearson") # method="pearson"を省略してもデフォルトでpearsonの相関係数の検定になる。
Call:corr.test(x = x, method = "pearson")
Correlation matrix 
           lifespan_f lifespan_m alcohol smoking_f smoking_m   GDP
lifespan_f       1.00       0.97    0.52      0.62      0.11  0.69
lifespan_m       0.97       1.00    0.46      0.60      0.11  0.71
alcohol          0.52       0.46    1.00      0.73      0.08  0.68
smoking_f        0.62       0.60    0.73      1.00      0.15  0.67
smoking_m        0.11       0.11    0.08      0.15      1.00 -0.03
GDP              0.69       0.71    0.68      0.67     -0.03  1.00
Sample Size 
[1] 114
Probability values (Entries above the diagonal are adjusted for multiple tests.) # ここで示されるp値は検定回数などで補正されている。デフォルトでは、adjust="holm"になっているが、adjust="bonferroni"に設定することもできる。
           lifespan_f lifespan_m alcohol smoking_f smoking_m GDP
lifespan_f       0.00       0.00    0.00      0.00      1.00   0
lifespan_m       0.00       0.00    0.00      0.00      1.00   0
alcohol          0.00       0.00    0.00      0.00      1.00   0
smoking_f        0.00       0.00    0.00      0.00      0.57   0
smoking_m        0.26       0.27    0.39      0.11      0.00   1
GDP              0.00       0.00    0.00      0.00      0.72   0

 To see confidence intervals of the correlations, print with the short=FALSE option

最下行にも書かれていますが、関数print()でshort=FALSEのオプションを付ければ信頼区間も計算してくれます。

R Console
> print(corr.test(x, method = "pearson"), short = FALSE)
Call:corr.test(x = x, method = "pearson")
Correlation matrix 
           lifespan_f lifespan_m alcohol smoking_f smoking_m   GDP
lifespan_f       1.00       0.97    0.52      0.62      0.11  0.69
lifespan_m       0.97       1.00    0.46      0.60      0.11  0.71
alcohol          0.52       0.46    1.00      0.73      0.08  0.68
smoking_f        0.62       0.60    0.73      1.00      0.15  0.67
smoking_m        0.11       0.11    0.08      0.15      1.00 -0.03
GDP              0.69       0.71    0.68      0.67     -0.03  1.00
Sample Size 
[1] 114
Probability values (Entries above the diagonal are adjusted for multiple tests.) 
           lifespan_f lifespan_m alcohol smoking_f smoking_m GDP
lifespan_f       0.00       0.00    0.00      0.00      1.00   0
lifespan_m       0.00       0.00    0.00      0.00      1.00   0
alcohol          0.00       0.00    0.00      0.00      1.00   0
smoking_f        0.00       0.00    0.00      0.00      0.57   0
smoking_m        0.26       0.27    0.39      0.11      0.00   1
GDP              0.00       0.00    0.00      0.00      0.72   0

 To see confidence intervals of the correlations, print with the short=FALSE option

 Confidence intervals based upon normal theory.  To get bootstrapped values, try cor.ci
                raw.lower raw.r raw.upper raw.p lower.adj upper.adj
lfspn_f-lfspn_m      0.96  0.97      0.98  0.00      0.95      0.98
lfspn_f-alchl        0.37  0.52      0.64  0.00      0.31      0.68
lfspn_f-smkng_f      0.49  0.62      0.72  0.00      0.43      0.75
lfspn_f-smkng_m     -0.08  0.11      0.29  0.26     -0.13      0.33
lfspn_f-GDP          0.58  0.69      0.78  0.00      0.53      0.81
lfspn_m-alchl        0.30  0.46      0.60  0.00      0.24      0.64
lfspn_m-smkng_f      0.46  0.60      0.70  0.00      0.40      0.74
lfspn_m-smkng_m     -0.08  0.11      0.28  0.27     -0.12      0.32
lfspn_m-GDP          0.61  0.71      0.79  0.00      0.55      0.82
alchl-smkng_f        0.64  0.73      0.81  0.00      0.58      0.84
alchl-smkng_m       -0.10  0.08      0.26  0.39     -0.13      0.29
alchl-GDP            0.56  0.68      0.76  0.00      0.50      0.80
smkng_f-smkng_m     -0.04  0.15      0.32  0.11     -0.09      0.38
smkng_f-GDP          0.56  0.67      0.76  0.00      0.50      0.79
smkng_m-GDP         -0.22 -0.03      0.15  0.72     -0.22      0.15

ちなみに、corr.test()ではデフォルトで小数点第2位までしか表示されませんが、以下のようにオプションとしてdigitを付けると小数点を設定できます。

R Console
> print(corr.test(x, method = "pearson"), short = FALSE, digits = 3) # digit=3で小数点第3位まで表示。

偏相関係数

パッケージppcorの中にあるpcor関数を使って偏相関行列とp値を計算できます。pcorで得られる偏相関係数の行列は、2変数の偏相関係数をそれ以外の変数で統制した上で計算されています。

パッケージppcorの中にあるpcor.test関数を使うと、変数CとDで統制した上で変数AとBとCの相関を分析するというように統制と分析を個別に指定できます。

R Console
> library(ppcor) # パッケージppcorを読み込む。
> pcor(x, method="pearson") # xはmatrixかdata.frame型。methodオプションでspearmanやKendallも指定できる。
$estimate
             lifespan_f  lifespan_m     alcohol   smoking_f   smoking_m        GDP
lifespan_f  1.000000000  0.94517955  0.31523190 0.008680474 -0.03288137 -0.1967185
lifespan_m  0.945179547  1.00000000 -0.35684722 0.077250882  0.07888718  0.3645956
alcohol     0.315231902 -0.35684722  1.00000000 0.492543094  0.06226454  0.4367632
smoking_f   0.008680474  0.07725088  0.49254309 1.000000000  0.14102751  0.1495816
smoking_m  -0.032881368  0.07888718  0.06226454 0.141027514  1.00000000 -0.2320473
GDP        -0.196718512  0.36459560  0.43676320 0.149581615 -0.23204728  1.0000000

$p.value
             lifespan_f   lifespan_m      alcohol    smoking_f  smoking_m          GDP
lifespan_f 0.000000e+00 2.599942e-54 7.954810e-04 9.282846e-01 0.73309199 3.941719e-02
lifespan_m 2.599942e-54 0.000000e+00 1.298874e-04 4.224614e-01 0.41267120 9.006481e-05
alcohol    7.954810e-04 1.298874e-04 0.000000e+00 4.611238e-08 0.51814756 1.839470e-06
smoking_f  9.282846e-01 4.224614e-01 4.611238e-08 0.000000e+00 0.14167885 1.188326e-01
smoking_m  7.330920e-01 4.126712e-01 5.181476e-01 1.416788e-01 0.00000000 1.471476e-02
GDP        3.941719e-02 9.006481e-05 1.839470e-06 1.188326e-01 0.01471476 0.000000e+00

$statistic
            lifespan_f lifespan_m    alcohol  smoking_f  smoking_m       GDP
lifespan_f  0.00000000 30.0798063  3.4519867 0.09021353 -0.3418981 -2.085102
lifespan_m 30.07980630  0.0000000 -3.9698276 0.80522097  0.8223826  4.069080
alcohol     3.45198669 -3.9698276  0.0000000 5.88156754  0.6483301  5.045681
smoking_f   0.09021353  0.8052210  5.8815675 0.00000000  1.4803965  1.572186
smoking_m  -0.34189808  0.8223826  0.6483301 1.48039648  0.0000000 -2.479176
GDP        -2.08510161  4.0690798  5.0456812 1.57218580 -2.4791764  0.000000

$n
[1] 114

$gp
[1] 4

$method
[1] "pearson"

通常の相関係数とは結果が異なりますね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください