3変数の関連

勉強 7日目

Soichi Matsuura https://so-ichi.com/ (Ritsumeikan University)http://www.ritsumei.ac.jp/
2019年11月18日

第9章 3変数の関連

3変数の関連は統計分析で重要であり,そのうち

といった重要概念について学習する。

相関と因果関係

ただの「関係性」から原因と結果の「因果関係」へと議論をシフトすることで,「なぜそのような関連があるのか」という因果関係・原因・メカニズムを探求する。

因果関係の条件

  1. 2変数間に関連があること
  2. 2変数間に時間的な順序関係がある(原因が先で結果が後)
  3. 2変数間の関係が,時間的に先行する他の変数によって説明されないこと(疑似相関,見せかけの相関でないこと)

媒介関係や疑似相関関係を分析するには,第3変数の影響を取り除くと,2つの関連はどうなるかを確認する。 これをコントロールする統制するという。

変数により分析方法の違い

偏相関係数 (partial correlation coefficient)

変数\(z\)をコントロールした上で,変数\(x\)\(y\)の偏相関係数は次のように定義される。

\[ r_{xy\cdot z} = \frac{r_{xy} - r_{xz}r_{yz}}{\sqrt{1 - r_{xz}^2} \sqrt{1 - r_{yz}^2}} \]

分析

練習用データattitudeを用いて,偏相関係数の計算を行う。


d9 <- data.frame(attitude)
attach(d9)

上司に対する総合的な評価(rating)は,上司が成果に応じて昇進を認めてくれるかどうかについて評価(raises)で決まる,という仮説を考えてみる。 まず,cor.test()を用いて相関係数の検定を行う。


cor.test(rating,raises)

    Pearson's product-moment correlation

data:  rating and raises
t = 3.8681, df = 28, p-value = 0.0005978
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2919385 0.7837714
sample estimates:
     cor 
0.590139 

分析の結果,0.590139と高い相関があることが分かる。 しかし,他の第3の変数の存在を見落としている可能性もある。 そこで,全変数の相関行列をみてみる。


cor(d9)

              rating complaints privileges  learning    raises
rating     1.0000000  0.8254176  0.4261169 0.6236782 0.5901390
complaints 0.8254176  1.0000000  0.5582882 0.5967358 0.6691975
privileges 0.4261169  0.5582882  1.0000000 0.4933310 0.4454779
learning   0.6236782  0.5967358  0.4933310 1.0000000 0.6403144
raises     0.5901390  0.6691975  0.4454779 0.6403144 1.0000000
critical   0.1564392  0.1877143  0.1472331 0.1159652 0.3768830
advance    0.1550863  0.2245796  0.3432934 0.5316198 0.5741862
            critical   advance
rating     0.1564392 0.1550863
complaints 0.1877143 0.2245796
privileges 0.1472331 0.3432934
learning   0.1159652 0.5316198
raises     0.3768830 0.5741862
critical   1.0000000 0.2833432
advance    0.2833432 1.0000000

すると,上司に対する総合的な評価(rating)は他の変数とも高い相関があることが分かる。 そこで,「上司が研修の機会を与えてくれるかどうか(learning)を追加して,分析してみる。


cor.test(raises,learning) # 成果昇進と研修機会

    Pearson's product-moment correlation

data:  raises and learning
t = 4.4111, df = 28, p-value = 0.0001384
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3640191 0.8130294
sample estimates:
      cor 
0.6403144 

cor.test(rating,learning) # 上司への評価と研修機会

    Pearson's product-moment correlation

data:  rating and learning
t = 4.2219, df = 28, p-value = 0.0002311
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3397475 0.8034243
sample estimates:
      cor 
0.6236782 

偏相関係数を計算する。


#install.packages("ppcor")
library(ppcor)
pcor.test(rating,raises,learning)

   estimate    p.value statistic  n gp  Method
1 0.3177593 0.09300174  1.741379 30  1 pearson

つまり研修機会をコントロールした後の,成果に応じた昇進と上司の総合的評価との偏相関係数は,0.3177593となり,前に計算した相関係数0.590139と比べて小さな値となり,研修機会の提供が影響を与えていることがわかる。

課題

上記の分析で,learningの代わりにprivilegesを用いて再検証してみる。

まずは,ratingraisesprivilegesの相関係数を計算してみる。


cor.test(raises,learning) # 成果昇進と研修機会

    Pearson's product-moment correlation

data:  raises and learning
t = 4.4111, df = 28, p-value = 0.0001384
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3640191 0.8130294
sample estimates:
      cor 
0.6403144 

cor.test(rating,learning) # 上司への評価と研修機会

    Pearson's product-moment correlation

data:  rating and learning
t = 4.2219, df = 28, p-value = 0.0002311
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3397475 0.8034243
sample estimates:
      cor 
0.6236782 

次に,「部下をえこひいきしないことへの評価」を表すprivilegesをコントロールした場合の,成果昇進と上司に対する総合的評価の偏相関係数を計算する。


pcor.test(rating,raises,privileges)

   estimate     p.value statistic  n gp  Method
1 0.4942488 0.006425654  2.954252 30  1 pearson

偏相関係数は0.494となり,えこひいきしないことも少しは影響しているが,成果昇進と上司に対する総合的評価の関係に強い影響を与えているわけではない。


#install.packages("lavaan")
#install.packages("semPlot")
library(lavaan)
library(semPlot)

# 回帰
res1 <- lm(rating ~ raises*privileges, data = d9)
#res2 <- lm(rating ~ privileges, data = d9)
res3 <- lm(privileges ~ raises, data = d9)
# パス図を描画
semPaths(res1 + res3, "model", "est", intercepts = FALSE)