Sponsored Links
データの読み込みと準備
サンプルデータは、統計教育推進委員会が提供してくださっているたばこ、アルコールと平均寿命[1]を使います。このデータには世界114カ国の寿命と喫煙、飲酒、1人あたりのGDPが掲載されています。以下のようにラベルを付けました。
lifespan_f:平均寿命(女)
lifespan_m:平均寿命(男)
alcohol:15歳以上一人当たりアルコール消費量
smoking_f:15歳以上喫煙率(女)
smoking_m:15歳以上喫煙率(男)
GDP:一人当たりGDP(購買力平価)
> 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
相関係数の計算
例えば女性の寿命と喫煙率の相関係数を計算する場合は以下のように入力します。
> cor(x$lifespan_f, x$smoking_f, method = "pearson") # method="pearson"は省略してもピアソンの相関係数
が計算される。スピアマンの相関係数を計算する場合にはmethod="spearman"と記述する。
[1] 0.6151073
散布図を書いてみます。
> plot(x$lifespan_f, x$smoking_f) # lifespan_fがx軸、smoking_fがy軸の散布図を書く。
相関行列の計算
それぞれの変数間の相関行列を計算します。
> 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
散布図も一気に表示してくれます。
> plot(x)
相関係数の検定
以下のようにして計算します。
> 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値を相関行列と同じように行列として取得できます。
> 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のオプションを付ければ信頼区間も計算してくれます。
> 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を付けると小数点を設定できます。
> 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の相関を分析するというように統制と分析を個別に指定できます。
> 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"
通常の相関係数とは結果が異なりますね。
Sponsored Links