第12章 回帰分析の前提と妥当性の診断

準備として、作業ディレクトリを指定する。 作業ディレクトリの指定にはsetwd()関数を利用する。 ディレクトリへのパス(引用符の中身)は、各自で設定する。

setwd("~/projects/Stata-R/")

この章で使うパッケージをあらかじめ読み込んでおく。

library("foreign")
library("dplyr")
## 
## Attaching package: 'dplyr'
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

12.2 Stata Rによる回帰診断

12.2.1 残差プロットによる診断 & 12.2.2 正規QQプロットによる診断

R で残差プロットと正規QQプロットを作ってみよう。 ここでも、2009年の衆院選における自民党候補の得票率を選挙費用と当選回数で説明する回帰モデルを例として使う。

まず、分析用のデータ (hr96-09.dta)を読み込む (第5章のRによる分析で作った hr96-09labeled.dat を使ってもよい)。

HR <- read.dta("data/hr96-09.dta")
## hr96-09labeled.dat を使う場合は、
# load("data/hr96-09labeled.dat")
## データが適切に読み込まれたどうか確認したいなら、
# head(HR)

今回の分析で利用する2009年の自民党議員のデータのみ抜き出し、HR09LDPとして保存する。

HR09LDP <- filter(HR, year == 2009, party == "LDP")

重回帰分析を行い、結果を fit.ldp.2009 として保存する。

fit.ldp.2009 <- lm(voteshare ~ I(exp / 1000000) + previous, data = HR09LDP)

(ここまでは11章までと同じなので、既に実行済みの場合は飛ばしてかまわない。)

この重回帰分析について、残差プロットと正規QQプロットを作図してみよう。 Rでは、回帰分析結果(ここでは fit.ldp.2009)に対してplot() 関数を使う事で、残差プロットを出力する事ができる。 ただし、この方法を使うと、残差プロットの他に、正規QQ プロット(pp.222-223を参照)、 標準化された残差(残差の平方根)プロット、残差と影響力のプロット(クック距離の測定:クック距離については、Cook, R. Dennis, and Sanford Weisberg. (1999) Applied Regression Including Computing and Graphics. (New York: Wiley) を参照されたい)の計4つの図が表示される。 4つを順番に表示してもよいが、par() 関数を使って2行2列のグラフィック環境を整備してから4つの図を1つの画面に表示してみよう。

par(mfrow = c(2,2))  ## 図を2行x2列で表示する
plot(fit.ldp.2009)

これで、残差プロットと正規QQプロットを作ることができた。

これらの図の読み方については、教科書 (pp.220-223) を参照されたい。

回帰モデルから残差 (residuals) を取り出したたいときは、resid() を関数を使う。 また、予測値 (fitted values) は、fitted() で取り出せる。 したがって、残差プロットだけを作りたいなら、次のようにすればよい。

res.ldp.2009 <- resid(fit.ldp.2009)  ## 残差を取り出す
pre.ldp.2009 <- fitted(fit.ldp.2009) ## 予測値を取り出す
par(mfrow = c(1,1))  ## 2行2列から1行1列(つまり1図だけ)に戻す
plot(pre.ldp.2009, res.ldp.2009, main = "残差プロット",
     xlab = "予測値", ylab = "残差")
abline(h = 0, col = "red")  ## 縦軸=0 に直線を引く

正規QQプロットだけを作りたいときは、次のようにする。

qqnorm(res.ldp.2009, main = "正規QQプロット",
       xlab = "正規分布", ylab = "残差") 
qqline(res.ldp.2009, col = "red")   ## 完全に正規分布に一致する場合の直線を引く

Rによる回帰診断についてより詳しくは、Fox, John, and Sanford Weisberg. (2011) An R Companion to Applied Regression, 2nd ed. (Thousand Oaks, CA: SAGE Publication) などを参照されたい。

『Stataによる計量政治学』のページに戻る