なんだかんだいってまだやったことがなかったので、諸々参考にしつつ、標準データセットでやってみました。
今回使用したのは、swissデータセット。1888年のスイスのフランス語圏の47自治体の社会経済的変数(出生率など六つ)が収められています。詳しくはhelp(swiss)で。それにしても『自殺論』チックですね~。
とりあえず記述統計を確認しましょう。
summary(swiss)
## Fertility Agriculture Examination Education
## Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00
## 1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00
## Median :70.40 Median :54.10 Median :16.00 Median : 8.00
## Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98
## 3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00
## Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00
## Catholic Infant.Mortality
## Min. : 2.150 Min. :10.80
## 1st Qu.: 5.195 1st Qu.:18.15
## Median : 15.140 Median :20.00
## Mean : 41.144 Mean :19.94
## 3rd Qu.: 93.125 3rd Qu.:21.70
## Max. :100.000 Max. :26.60
まあ各変数そこそこいい感じでばらついてるんじゃないでしょうか。
ヒストグラムとかも確認したいですが、今回調べて知ったのが、psych::pairs.panels関数。ヒストグラム、散布図行列、相関行列をすべてひとつの図の中に収めてくれます。
psych::pairs.panels(swiss)
わかりやすい!
とりあえず今回は慣れるのが目的なので仮説も何もなしに適当にやります。
従属変数はExamination(軍の試験で最高レベルで合格したその地域の出身者の数)がよさげです。
独立変数としてはAgriculture(男性労働者のうち農業従事者の割合)とEducation(中等教育以上を受けた人たちの教育年数の合計)にしてみましょう。たぶん、農業人口の多いところでは高い教育は必要がなく、それゆえ試験の値も低い、といった関係があるでしょう。
そこでモデル1として農業人口だけ投入、次にモデル2で教育程度を加え、標準偏回帰係数の値を比べたいと思います。
しかしこのままだと、予想される係数の正負が、農業人口はマイナスですが教育程度はプラスになってしまいます。これだと結果が直感的にわかりにくいので、農業人口を反転(最小値が最大値になるような感じで)させた新しい変数を作って分析に使いたいと思います。
数学だめなので少し考えたのですがわかりました。最小値に、最大値から当該の値を引いた数を足せばいいんですね。例としては以下のような感じです。
## ag ag2
## 1 1 9
## 2 1 9
## 3 7 3
## 4 8 2
## 5 9 1
たとえば\[ag2[4] = min(ag2)+(max(ag)-ag[4]) = min(ag)+max(ag)-ag[4]\]と表せます。
この塩梅でAgricultureを反転させた変数は以下のように作りました。
for (i in 1:nrow(swiss)) {
swiss$Agriculture.reverse[i] <- min(swiss$Agriculture) + max(swiss$Agriculture) - swiss$Agriculture[i]
}
summary()で比較すると、ちゃんと反転できてるみたいです。
summary(swiss)
## Fertility Agriculture Examination Education
## Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00
## 1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00
## Median :70.40 Median :54.10 Median :16.00 Median : 8.00
## Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98
## 3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00
## Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00
## Catholic Infant.Mortality Agriculture.reverse
## Min. : 2.150 Min. :10.80 Min. : 1.20
## 1st Qu.: 5.195 1st Qu.:18.15 1st Qu.:23.25
## Median : 15.140 Median :20.00 Median :36.80
## Mean : 41.144 Mean :19.94 Mean :40.24
## 3rd Qu.: 93.125 3rd Qu.:21.70 3rd Qu.:55.00
## Max. :100.000 Max. :26.60 Max. :89.70
では実際に分析します。lm()関数を使います。
lm1 <- lm(data = swiss, Examination ~ Agriculture.reverse)
summary(lm1)
##
## Call:
## lm(formula = Examination ~ Agriculture.reverse, data = swiss)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.1324 -3.0931 -0.0264 4.2817 10.5378
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.78477 1.75476 3.866 0.000352 ***
## Agriculture.reverse 0.24117 0.03807 6.334 9.95e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.865 on 45 degrees of freedom
## Multiple R-squared: 0.4713, Adjusted R-squared: 0.4596
## F-statistic: 40.12 on 1 and 45 DF, p-value: 9.952e-08
係数は0.1%水準で有意です。農業人口が1%上がると軍の試験がよくできる人が0.24人増えるらしい。決定係数も0.45くらいはありますね。
しかしこの効果は、教育程度に媒介されているはずです。果たして農業人口の効果は残るのか。
lm2 <- lm(data = swiss, Examination ~ Agriculture.reverse + Education)
summary(lm2)
##
## Call:
## lm(formula = Examination ~ Agriculture.reverse + Education, data = swiss)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.8751 -2.9823 -0.3439 4.4592 10.3453
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.75446 1.57203 4.297 9.43e-05 ***
## Agriculture.reverse 0.14258 0.04437 3.214 0.00245 **
## Education 0.36410 0.10479 3.474 0.00116 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.254 on 44 degrees of freedom
## Multiple R-squared: 0.5852, Adjusted R-squared: 0.5663
## F-statistic: 31.03 on 2 and 44 DF, p-value: 3.922e-09
結果は1%水準ではありますが有意です。予想通り農業人口の標準偏回帰係数は下がっており、教育程度のほうが大きな規定力を持っています。また決定係数は0.56へ上がっています。
ただし農業人口の効果も残っています。教育程度が同程度の地域でも農業人口が少ないほうが軍の試験の成績がいい人が多いようです。
この場合の農業人口は、工業化の度合いに基づく高学歴化の背景というよりは、都鄙度を表すものと解釈するのが適切ではないでしょうか。少しでも都会に近いほうが、たとえば試験勉強用の特別な教育を受ける機会も多い、というような関係が考えられます。
memisc::mtable()関数で簡単にモデルを並列させた結果の表が作れるようです。ミーミスクか。
library(memisc)
mtable(lm1, lm2)
##
## Calls:
## lm1: lm(formula = Examination ~ Agriculture.reverse, data = swiss)
## lm2: lm(formula = Examination ~ Agriculture.reverse + Education, data = swiss)
##
## =============================================
## lm1 lm2
## ---------------------------------------------
## (Intercept) 6.785*** 6.754***
## (1.755) (1.572)
## Agriculture.reverse 0.241*** 0.143**
## (0.038) (0.044)
## Education 0.364**
## (0.105)
## ---------------------------------------------
## R-squared 0.471 0.585
## N 47 47
## =============================================
## Significance: *** = p < 0.001;
## ** = p < 0.01; * = p < 0.05
まあこんなところでしょうか。
psych::pairs.panels()関数lm(data = data, data$dependent ~ data$independent)でmemisc::mtable()関数