最終更新日: 2009.5.12
swissのデータセットを用いた重回帰分析の例
■ まずは変数同士の関係を散布図で確認する。
> pairs(swiss, panel=panel.smooth)
■ つづいて曲線関係がないかを加法モデルを当てはめて確認する。
# gam()を用いて、一般加法モデルの当てはめを行う > gam.result <- gam(Fertility ~ s(Agriculture) + s(Examination) + s(Education) + + s(Catholic) + s(Infant.Mortality)) # 新しいグラフウィンドウ > windows() # グラフウィンドウを2行3列に分割 > par(mfrow=c(2,3)) # スムージング曲線をプロット > plot(gam.result)
これを見ると、どうやらExaminationとEducationとに曲線関係があるようである。したがって、モデルにExamination^2とEducation^2という2次項を組み入れて考える必要がある。
■ 樹木図は描いてもよいが、、、 描くなら以下のようにする。
> tree.result <- tree(Fertility ~ ., data=swiss) > windows() > plot(tree.result) > text(tree.result)
それでは実際に解析の手順(の1例)を示す。
まず曲線関係が疑われるので、交互作用を含まないモデルにExamination^2とEducation^2の2つの2次項を入れて分析してみる。出力結果は係数表の部分のみで、あとの部分は省略してある。これによれば、どちらの2次項も有意ではないがEducation^2についてはp=0.14、Examination^2についてはp=0.06と、これらの項を取り除くには少々の不安が残る(gam()によって得られたグラフをみても、曲線関係がありそうなのは明らかである)。
> lm.res1 <- lm(Fertility ~ . + I(Education^2) + I(Examination^2), data=swiss) > summary(lm.res1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 65.59858 10.72032 6.119 3.54e-07 *** Agriculture -0.12237 0.07346 -1.666 0.10375 Examination -1.52247 0.70188 -2.169 0.03623 * Education -0.37282 0.41586 -0.896 0.37549 Catholic 0.07795 0.03724 2.093 0.04289 * Infant.Mortality 1.37971 0.40653 3.394 0.00159 ** I(Education^2) -0.01241 0.00828 -1.498 0.14208 I(Examination^2) 0.03542 0.01854 1.910 0.06347 . ---
確実に曲線関係が認められないわけでもなさそうなので、2次項を含めて、交互作用項を含めたモデルを解析してみる。モデル式の記述で ~ . という部分があるが、これは全ての変数を用いるという意味である。ピリオド(.)は全ての変数という意味である。また、それに ^2 と付け加えられているのは2次の交互作用を指定するという意味で、2次項(累乗項)を意味しているのではないことに注意すること。
まず明らかに有意でない交互作用項を取り除くことからはじめる。不要な交互作用項を取り除くことによって単一の変数が有意になることもあるので、ここでは交互作用項のみを取り除くべきである。ここではAgriculture:Education、Examination:Catholic、Education:Catholicは明らかに有意ではない。
> lm.result1 <- lm(Fertility ~ .^2 + I(Education^2) + I(Examination^2), data=swiss) > summary(lm.result1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 259.679228 68.381854 3.797 0.000691 *** Agriculture -1.966543 0.708890 -2.774 0.009581 ** Examination -8.943802 3.799544 -2.354 0.025565 * Education 0.568031 3.944942 0.144 0.886505 Catholic -0.380349 0.431479 -0.882 0.385294 Infant.Mortality -5.904220 3.283151 -1.798 0.082541 . I(Education^2) -0.039096 0.029672 -1.318 0.197956 I(Examination^2) 0.010867 0.057384 0.189 0.851122 Agriculture:Examination 0.032384 0.017709 1.829 0.077747 . Agriculture:Education 0.003455 0.019102 0.181 0.857714 Agriculture:Catholic 0.003454 0.002995 1.153 0.258170 Agriculture:Infant.Mortality 0.053439 0.031096 1.719 0.096365 . Examination:Education 0.106770 0.063367 1.685 0.102733 Examination:Catholic -0.004868 0.015071 -0.323 0.749038 Examination:Infant.Mortality 0.284293 0.160229 1.774 0.086515 . Education:Catholic 0.001836 0.013028 0.141 0.888911 Education:Infant.Mortality -0.123877 0.168556 -0.735 0.468286 Catholic:Infant.Mortality 0.015813 0.017787 0.889 0.381290 ---
モデルを更新する場合にはupdate()を用いる。なお、update()を用いずに、度々lm()で新たなモデルを解析しなおしてはいけない。すると今度はEducation:Infant.MortalityとCatholic:Infant.Mortalityが不要なのでこれらを取り除くことにする。
> lm.result2 <- update(lm.result1, ~. - Agriculture:Education - Examination:Catholic - + Education:Catholic) > summary(lm.result2) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 252.084973 59.495468 4.237 0.000179 *** Agriculture -1.889901 0.641679 -2.945 0.005971 ** Examination -9.165186 3.191009 -2.872 0.007178 ** Education 0.898174 2.982577 0.301 0.765256 Catholic -0.369139 0.338110 -1.092 0.283086 Infant.Mortality -5.342534 2.612026 -2.045 0.049115 * I(Education^2) -0.039263 0.020120 -1.951 0.059808 . I(Examination^2) 0.027501 0.036875 0.746 0.461229 Agriculture:Examination 0.034448 0.014430 2.387 0.023054 * Agriculture:Catholic 0.003538 0.002372 1.491 0.145714 Agriculture:Infant.Mortality 0.049577 0.027941 1.774 0.085527 . Examination:Education 0.092610 0.040554 2.284 0.029174 * Examination:Infant.Mortality 0.262715 0.119639 2.196 0.035465 * Education:Infant.Mortality -0.117195 0.147425 -0.795 0.432502 Catholic:Infant.Mortality 0.012764 0.012953 0.985 0.331834 ---
それではEducation:Infant.MortalityとCatholic:Infant.Mortalityの2つの交互作用項を取り除いたモデルを見てみよう。どうやら、さっきからExamination^2の項があることによって、Catholicの項が有意にならないような雰囲気である。具体的にいうと、Examination^2をモデルに組み込むことによって、Chatholicの説明率を下げているのである。
> lm.result3 <- update(lm.result2, ~ . - Education:Infant.Mortality - Catholic:Infant.Mortality) > summary(lm.result3) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 236.690821 53.193661 4.450 8.78e-05 *** Agriculture -2.047557 0.597358 -3.428 0.00161 ** Examination -6.731892 2.072904 -3.248 0.00262 ** Education -1.474926 0.524988 -2.809 0.00817 ** Catholic -0.070114 0.141614 -0.495 0.62371 Infant.Mortality -4.833092 2.284621 -2.115 0.04179 * I(Education^2) -0.032127 0.015133 -2.123 0.04112 * I(Examination^2) 0.022293 0.036147 0.617 0.54152 Agriculture:Examination 0.032234 0.013913 2.317 0.02667 * Agriculture:Catholic 0.003053 0.002285 1.336 0.19043 Agriculture:Infant.Mortality 0.060197 0.024142 2.493 0.01768 * Examination:Education 0.083535 0.035719 2.339 0.02537 * Examination:Infant.Mortality 0.160592 0.064505 2.490 0.01784 * ---
そこでExamnination^2の項を取り除いて、再度、モデルを解析してみよう。どうやら、Examination^2の項がCatholicの説明率を下げているようではないようである。すると、Chatolicの説明率を下げているのはAgriculture:Catholicなのだろうか、と疑えるのでExamination^2はそのままにして、Agriculture:Catholicの交互作用項のみを取り除いてみる。
> lm.result4 <- update(lm.result3, ~ . - I(Examination^2)) > summary(lm.result4) Call: lm(formula = Fertility ~ Agriculture + Examination + Education + Catholic + Infant.Mortality + I(Education^2) + Agriculture:Examination + Agriculture:Catholic + Agriculture:Infant.Mortality + Examination:Education + Examination:Infant.Mortality, data = swiss) Residuals: Min 1Q Median 3Q Max -11.7636 -2.8725 0.2969 2.4269 14.0546 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 228.385099 51.003026 4.478 7.68e-05 *** Agriculture -1.918621 0.554603 -3.459 0.001442 ** Examination -5.902973 1.564075 -3.774 0.000597 *** Education -1.642260 0.445441 -3.687 0.000764 *** Catholic -0.031804 0.126131 -0.252 0.802400 Infant.Mortality -4.814805 2.264116 -2.127 0.040582 * I(Education^2) -0.037335 0.012446 -3.000 0.004953 ** Agriculture:Examination 0.027386 0.011378 2.407 0.021499 * Agriculture:Catholic 0.002491 0.002077 1.199 0.238453 Agriculture:Infant.Mortality 0.058042 0.023675 2.452 0.019355 * Examination:Education 0.098905 0.025360 3.900 0.000416 *** Examination:Infant.Mortality 0.160501 0.063931 2.511 0.016827 * ---
やはり、Catholicの説明率を下げていたのはAgriculture:Catholicだったようである。しかし、それでも、結局Examination^2の項は不要なので取り除いてみよう。
> lm.result4 <- update(lm.result3, ~ . - Agriculture:Catholic) > summary(lm.result4) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 226.449866 53.225390 4.255 0.000149 *** Agriculture -1.786269 0.570728 -3.130 0.003519 ** Examination -5.808849 1.976168 -2.939 0.005789 ** Education -1.425913 0.529545 -2.693 0.010802 * Catholic 0.113057 0.035844 3.154 0.003299 ** Infant.Mortality -5.381088 2.272558 -2.368 0.023547 * I(Education^2) -0.040106 0.014060 -2.853 0.007233 ** I(Examination^2) 0.003042 0.033521 0.091 0.928215 Agriculture:Examination 0.018650 0.009603 1.942 0.060213 . Agriculture:Infant.Mortality 0.063326 0.024296 2.606 0.013351 * Examination:Education 0.090751 0.035702 2.542 0.015607 * Examination:Infant.Mortality 0.176270 0.064135 2.748 0.009405 ** ---
すると、全ての項が有意になったのでこれで最終的なモデルが出来上がったことになる。今回の場合、もっと初期の段階でExamination^2の2次項を取り除いてもよかったかもしれない。しかし、それをしなかったのは最初のgam()によって得られた図より、曲線関係が強く疑われたためである。ちなみに、step()関数を用いてモデル選択をすることもでき、その方法は間瀬ほか「工学のためのデータサイエンス入門」数理工学社(2004)p131-136に詳しい手順が書かれている。
step()はAICをモデル選択の判断基準にしているため、最終的に選択されるモデルはこのページで示したモデルとは異なる。ここで得られたモデルのAICは314であるのに対して、step()で得られるモデルのAICは317となっている(小数点以下は切り捨てた)。AICはその値が小さいほどよいモデルであることを示しているので、step()を用いてモデル選択をした参考書の例よりも、ここで示した方法(変数増減法)によって得られたモデルのほうがよいといえる。
> lm.result5 <- update(lm.result4, ~ . - Examination^2) > summary(lm.result5) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 225.408202 51.251845 4.398 9.3e-05 *** Agriculture -1.773153 0.544463 -3.257 0.002460 ** Examination -5.701934 1.564507 -3.645 0.000838 *** Education -1.454521 0.419562 -3.467 0.001381 ** Catholic 0.113804 0.034403 3.308 0.002139 ** Infant.Mortality -5.361763 2.231173 -2.403 0.021534 * I(Education^2) -0.040713 0.012197 -3.338 0.001971 ** Agriculture:Examination 0.018269 0.008518 2.145 0.038783 * Agriculture:Infant.Mortality 0.062883 0.023470 2.679 0.011054 * Examination:Education 0.093029 0.025033 3.716 0.000684 *** Examination:Infant.Mortality 0.175787 0.063028 2.789 0.008395 ** ---