東京国際大学大学院

心理データ解析2(後期)

東京大学大学院農学生命科学研究科 大森宏


4.回帰分析

相関

 標本(サンプル)に対し,2つの変数 xy が測定されているとする. たとえば,x が身長(m)であり,y が体重(kg)である. 大きさ n の標本(サンプル)に対し,2つの変数の組のデータが,

x1y1 ), (x2y2 ), …, (xnyn
であったとする. 変数間の関連性の強さを測る量として共分散(Covariance),Cov[xy ] がある. これは,変数に対する平均を,
として,
と定義される.

 共分散は測定単位により大きさが変わるので,これをおのおのの変数の標本分散, Var[x],Var[y],

で標準化したものがピアソン(Peason)の積率 相関係数 r,-1≦r≦1,であり,

sokan

と定義される.これは,変数間の線形的関係の強さ, (x が大きいと y も大きく,x が小さいと y も小さい,) を測る指標で,|r|=1 のときは, 変数 xy は完全な直線関係にあり,r =0 のときは,線形的な関係 がない.r が 1 に近いときは,正の相関関係があるといい, r が -1 に近いときは,負の相関関係があるという.

データ散布図と相関係数
sokan sokan
sokan sokan

相関データダウンロード

# 相関係数の R スクリプト
r <- read.csv("r1.csv") # csv データ読み込み
x <- r[,1]; y <- r[,2] #
plot(x,y, xlim=c(2,8), ylim=c(0,6)) # x,y の散布図
title(main="相関係数 r = 0.23") #
cov(x, y) # x と y の共分散
cor(x, y) # x と y の相関係数
x <- 10*x #
plot(x,y, xlim=c(2,8), ylim=c(0,6)) # x,y の散布図
cov(x, y) # x と y の共分散
cor(x, y) # x と y の相関係数

直線回帰

モデル

 2つの変数 xy に対し,y の値が x の値の動きにつれて 線形的に変化すると仮定される,つまり,

yab x

という関係が成り立っていると考えられる場合である.これを yx に 対する直線回帰といい,ab を回帰係数という. また,変数 y を従属変数,目的変数といい,変数 x を独立変数,説明変数と いう.

最小2乗法

 データに最もよくあてはまる直線回帰式を得るには,データ点 (xiyi ), と回帰による推定点, (xiy^i ), y^iab xi , の間の距離の2乗和 S が最小になるような回帰係数 ab を求める.つまり,

minsqure

を最小化する ab を求める問題に帰着する.これを最小2乗法という.

 これは,S を ab で偏微分して 0 とおくことによって得られる.つまり,

partial

の連立方程式を ab で解けばよい.これより,

coef

が得られる.

回帰式の統計モデル

 推定された直線回帰式がどの程度現実のデータに適合しているかを調べるために, 回帰式が従う統計モデルを考える.標本の格データ点, (xiyi ), が,

yiab xieiei 〜 N( 0,σ2 )

であると仮定する.ei は誤差(error),あるいは, 残差(residual)で,直線回帰 式では説明がつかない部分を表し,これが互いに独立に平均 0,分散 σ2 の正規分布に従うと仮定する.誤差の大きさが大きいときは,直線回帰式ではデータが説明できない と考える.

残差分散と回帰係数の標準誤差

 回帰で説明がつかない残差平方和 Se は,

minsqure

で求められる.これの自由度は n−2 であるので(2つの回帰係数分の自由度を除く),回帰の 残差(誤差)分散は,
minsqure
で求められる.

 一般に,Var(yi ) = σ2 であるとき,その定数 倍の分散は,

Var(ayi ) = a2σ2, Var(Σiai yi ) = Σiai 2 σ2

であり,従属変数 y のデータ yi は,

yi 〜 N( ab xi ,σ2 )

と分布するので,回帰係数 b の分散は,
minsqure
となる.この分散の平方根を回帰係数 b の標準誤差という.

回帰係数の標準誤差による t 検定

目的変数 y が説明変数 x との回帰関係にないという 帰無仮説,

H0b = 0,

を考えてみよう.

回帰係数 b の推定値 b^ の分散は,

minsqure
と推定できるので,b^ の標準偏差(標準誤差)は, s b と推定 される.これより,回帰係数をその標準誤差で割った t 値が,帰無仮説のもとで,
minsqure
のように,自由度 n−2 の t 分布に従うことを利用して回帰係数の検定が行える.すなわち, 自由度 n−2 の t 分布の 97.5%点を t0 とすると,

|t | > t0 → 帰無仮 説を有意水準 5 %で棄却(回帰関係が有意に認められる)
|t | ≦ t0 → 帰無仮説を棄却しない(回帰関係が認められない)

と定式化できる.

分散分析

平方和分解

 回帰式により, 従属変数 y のデータ yi は,

yiy^i + (y^iyi ) = 回帰値 + 残差

のように分解される.この分解に対応して従属変数データの総平方和 ST は,

ST = Σiy iy- ) 2 = Σiy^iy- ) 2 + Σiy iy^i ) 2 = SR + Se
総平方和 = 回帰平方和 + 残差平方和

のように分解される.これを平方和の分解という.この分解に対応して自由度は,
n−1 = 1 + n−2
と分解される.

決定係数(重相関係数の2乗)

 データが直線回帰式でよく説明できるのは,回帰平方和が大きく,残差平方和 が小さい場合である.総平方和のうち回帰平方和で説明される割合を決定係数,もしくは 重相関係数の2乗といい,

minsqure
で定義される.なお,重相関係数 R とは,データ y i と回帰値 y^i との間の相関係数である.これより, 以下の分散分析表ができる.

回帰分析の分散分析表
変動因平方和自由度平均平方F 値
回帰 SR 1 SR F = SR/se2
残差 Se n−2 se2 = Se/n−2  
全体 ST n−1    

F 検定

従属変数 y が説明変数 x の回帰関係にないという 帰無仮説,

H0b = 0,

を考える.帰無仮説のもとでは,回帰平均平方 SR と残差分散 se2 がともに誤差 σ2 の不偏推定量になるので, その比 F 値が,

F = SR/se2 〜 F(1,n−2),

という F 分布に従うことを利用して検定ができる.すなわち,分子,分母 自由度が 1,n−2 である F 分布 F(1,n−2)の95%点を F0 とすると,

F > F0 → 帰無仮説を有意水準 5 %で棄却(回帰関係が有意に認められる)
F ≦ F0 → 帰無仮説を棄却しない(回帰関係が認められない)

と定式化できる.

# 回帰分析の詳細の R スクリプト
anova(mbaf.lm) # 分散分析表
n <- nrow(mbaf); n # データ数
st <- var(mbaf[,3])*(n-1); st # 総平方和
sr <- var(mbaf.lm$fitted.values)*(n-1); sr # 回帰平方和
se <- var(mbaf.lm$residuals)*(n-1); se # 残差平方和
s <- sqrt(se/(n-2)); s # 残差標準偏差
sx <- var(mbaf[,2])*(n-1); sx # x の総平方和
b <- cov(mbaf[,2],mbaf[,3])*(n-1)/sx; b # 回帰係数
sb <- s/sqrt(sx); sb # 回帰係数bの標準誤差
r2 <- sr/st; r2 # 重相関係数の2乗
r <- cor(mbaf[,3], mbaf.lm$fitted.values); r # 目的変数と回帰推定値の相関
fv <- sr/(se/(n-2)); fv # F値
tv <- b/sb; tv # t値

回帰式の信頼区間

回帰係数の信頼区間

 回帰係数の標準誤差 s b を用いて, 回帰係数 b の信頼区間がつくれる.すなわち, 自由度 n−2 の t 分布の 97.5%点を t0 とすると, 回帰係数 b の 95%信頼区間の幅 d は,d = t0 s b となるので, 95%信頼区間は,

b^ − t0 s bbb^ + t0 s b

となる.
回帰直線の信頼区間
 データから推定された回帰直線は,データの平均(x-y-) を通るので,

Y = y- + b^ (x - x-

とおける.これより,Y の分散は,
minsqure
となる.誤差分散 σ2 は, データの残差分散 se2 で推定されるので,Y の標準誤差は,
minsqure
となり,これが自由度 n - 2 を持つ.よって,推定回帰式にこの標準誤差の t0 倍を加えたものが,回帰式の 95%信頼幅となる.
回帰予測値の信頼幅
 回帰式から得られる予測値 y~ は,回帰式に誤差項が加わって,

y~ = y- + b^ (x - x-)+ e

となるので,その分散は,
minsqure
となる.先ほどと同様に,誤差標準偏差を残差標準偏差で置き換えると,回帰予測値 y~ の 標準誤差は,
minsqure
となり,回帰式の 95%信頼幅の外側に回帰予測値の 95%信頼幅が描ける.
minsqure

# 回帰式の信頼幅の R スクリプト
x <- mbaf[,2] # 入試得点
y <- mbaf[,3] # 初年度成績
d <- lm(y ~ x) # 回帰モデル
new <- data.frame(x=seq(400,700,by=2)) # 予測したい範囲の定義
dc <- predict(d, new, interval="confidence", level=0.95) # 回帰推定値(回帰直線)の 95 %信頼幅
dp <- predict(d, new, interval="prediction", level=0.95) # 回帰予測値の 95 %信頼幅
matplot(new$x, cbind(dc,dp[,-1]), lty=c(1,2,2,3,3), type="l", col=c("blue","blue","blue","red","red"), xlab="入試得点", ylab="初年度成績")
points(x, y) # データの表示
title(main="回帰式と予測値の 95 %信頼幅") #
# 信頼幅を詳しく計算
n <- nrow(mbaf); n # データ数
sx <- var(x)*(n-1); sx # x の偏差平方和
se <- summary(d)$sigma; se # 残差標準偏差
b <- d$coefficients[2]; b # 回帰係数
mx <- mean(x) # x の平均
my <- mean(y) # y の平均
t0 <- qt(0.975, df=(n-2)); t0 # 自由度 n - 2 の t 分布 97.5%点
plot(x, y, xlim=c(400,700), ylim=c(2,4)) # データ散布図
abline(d, col="blue") # 回帰直線
sr <- 1/n + (new$x-mx)^2/sx #
y1 <- my + b*(new$x-mx) + t0*se*sqrt(sr) # 回帰直線 95%信頼幅上限
y2 <- my + b*(new$x-mx) - t0*se*sqrt(sr) # 回帰直線 95%信頼幅下限
points(new$x, y1, type="l", lty=2, col="blue") #
points(new$x, y2, type="l", lty=2, col="blue") #
yp1 <- my + b*(new$x-mx) + t0*se*sqrt(sr+1) # 回帰予測値 95%信頼幅上限
yp2 <- my + b*(new$x-mx) - t0*se*sqrt(sr+1) # 回帰予測値 95%信頼幅下限
points(new$x, yp1, type="l", lty=3, col="red") #
points(new$x, yp2, type="l", lty=3, col="red") #
title(main="回帰式と予測値の 95 %信頼幅") #

重回帰分析

統計モデル
 説明変数が 2 つ以上になった場合である.いま,p 個の説明変数 x1x2,…,xp,により目的変数 y が,

y = b0 + b1x1 + b2x2 + … + bpxm + e

と表現できるとする.ここで,b0b1,…,bp は 回帰係数,e は,誤差である.
 ここで,n(n > p)個のデータがあり,目的変数が y = (y1,…,yn)',j 番目の説明変数 xj の値が, x1 = (x1j,…,xnj)' であったとする. 回帰係数ベクトルを b = (b0,…,bm)',誤差ベクトル を e = (e1,…,en)' とすると,データが満たす構造 モデルは,
minsqure
minsqure
となる.ここで,誤差ベクトルは,平均 0,分散共分散行列 σ2I の n 次元 正規分布に従うとする.これは,n 個の誤差 ei が互いに独立に平均 0 分散 σ2 の正規分布に従うと考えたとき(普通行う仮定)の多変量表現である.
 最小2乗法により,回帰係数の推定値は,
minsqure
と求められる.
多変量の線形関数の平均と分散
 p 変量確率変数 x の平均を μ,分散共分散行列を Σ とすると,任意の p×p スカラー 行列 A に対し,

E[Ax] = AE[x] = , Var[Ax] = AVar[x]A' = AΣA',

が成り立つ.
回帰係数の分散
 重回帰モデルの回帰係数ベクトルの推定量 b^ の分散は,
mreg
となる.残差分散 σ2 の推定値を se2 とすると, 回帰係数の分散は,se2(X'X)-1 で推定される.
ハット行列とてこ比
 さて,回帰推定値ベクトル y^ は,
と書ける.ここで,H は,説明変数データベクトル y から 回帰推定値ベクトル y^ を生成する行列なので,ハット行列(hat matrix)と 呼ばれている.ハット行列の対角成分 hii が大きいと i 番目のデータは推定値に大きな 影響を及ぼすので,これを「てこ比(leverage)」と呼んでいる.てこ比の平均的な値は,(p + 1)/n なので, たとえば,2(p + 1)/n より大きなてこ比をもつようなデータには注意を払う必要がある.すなわち, このデータの存在が回帰係数の推定に大きな影響を与えているからである.
標準化残差
 回帰残差推定量ベクトル e^ は,
とハット行列を用いて書ける.これより,その分散は,
となる.なお,I - H がべき等行列であることに注意せよ.従って,個々の 回帰残差推定量 e^i の分布は,
となる.この ri を標準化残差(standarized residual)と言う.
Cook 距離
 個々のデータが回帰係数の推定値に与える影響を調べるため,i 番目のデータを除いたときの回帰係数 推定値を b^-i として,これが全データを用いたときの回帰係数 推定値 b^ との違いの大きさで測る.これが Cook 距離で,以下のように 定義される.
mreg
ここで,y^-i = Xb^-i で ある.また,多少の計算により Cook 距離は標準化残差とてこ比で計算され,最後の式のように表せる.
Cook 距離が 0.5 を超えるとそのデータは影響が「大きい」とされ,1 を超えると影響が「特に大きい」と される.

回帰診断

 回帰分析を行ったときに,データが回帰モデルによくフィットしているかや,データの中に回帰モデル からはずれたも(異常値)がないか,などを調べた方がより安全である.これを 回帰診断(regression diagnostics)という. R などの統計ソフトが普及する以前は,手間がかかるので回帰診断まで行うことはあまりやらなかったが, 現在では手軽にできるので,行うのが普通になってきていると思われる.このため,回帰診断の考え方や 着目点などを理解する必要がでてきたと言える.  回帰診断は,以下の2点からなる.
diag diag
diag diag
# 回帰診断の R スクリプト
mba <- read.csv("mbagrade2.csv")  		# データ読み込み  
mbaf <- mba[mba[,1]=="F",]  		# 女性データのみ抽出   
mbaf.lm <- lm(初年度成績 ~ 入試得点, data=mbaf) # 
summary(mbaf.lm)  				# 結果表示   
plot(mbaf[,2:3], type="n", xlim=c(400,700), ylim=c(2.5,3.5))  # データ散布図   
text(mbaf[,2:3], rownames(mbaf))		# データ番号表示
abline(mbaf.lm, col="blue")  		# 回帰直線   
x11()					# 新しいグラフウィンドウ
plot(mbaf.lm)				# 回帰診断はたったこれだけ.(4枚のグラフが出てくる)
#
# 回帰診断を詳しくみる
# てこ比
lev <- hatvalues(mbaf.lm); lev		# てこ比
X <- model.matrix(mbaf.lm)			# 説明変数行列
H <- X %*% solve(t(X) %*% X) %*% t(X)	# ハット行列
diag(H)					# てこ比の計算による導出
# 標準化残差
rstd <- rstandard(mbaf.lm); rstd		# 標準化残差
se <- summary(mbaf.lm)$sigma		# 残差標準偏差
mbaf.lm$residuals/(se*sqrt(1-lev))		# 標準化残差の計算による導出
# Cook 距離
x <- mbaf$入試得点
y <- mbaf$初年度成績
cookd <- cooks.distance(mbaf.lm); cookd	# Cook 距離
b <- mbaf.lm$coefficients; b 		# 回帰係数
lm1 <- lm(y[-1] ~ x[-1])
b1 <- lm1$coefficients; b1 			# 1番目のデータを除いた回帰係数
t(b-b1) %*% t(X) %*% X %*% (b-b1)/se^2/2	# 1番目のデータの Cook 距離
rstd^2*lev/(1-lev)/2			# Cook 距離の計算による導出
# 回帰推定値 - 残差プロット
x0 <- mbaf.lm$fitted.values			# 回帰推定値
y0 <- mbaf.lm$residuals			# 回帰残差
plot(x0, y0, type="n", xlab="回帰推定値", ylab="残差")	# 
text(x0, y0, rownames(mbaf), cex=0.8)
abline(h=0, lty=3)
title(main="回帰推定値 - 残差プロット")
# 標準化残差 Q - Q プロット
a <- qqnorm(rstd, type="n", main="")		# 標準化残差の Q - Q プロット(正規分布からのずれ)
text(a, rownames(mbaf), cex=0.8)
qqline(rstd, col="red")
title("標準化残差正規 Q-Q プロット")
# S - L プロット
yr <- sqrt(abs(rstd))			# 標準化残差絶対値の平方根
plot(x0, yr, type="n", xlab="回帰推定値", ylab="残差絶対値の平方根")	# 
text(x0, yr, rownames(mbaf), cex=0.8)
title(main="S - L プロット")
# てこ比 - 標準化残差 プロット
plot(lev, rstd, type="n", xlim=c(0,0.5), xlab="てこ比", ylab="標準化残差")
text(lev, rstd, rownames(mbaf), cex=0.8)
abline(h=0, lty=3)
abline(v=0, lty=3)
title(main="てこ比 - 標準化残差 プロット")
xx <- seq(0, 0.5, by=0.01)
yc <- .5*2*(1-xx)/xx			# Cook 距離 0.5 となる標準化残差
yc1 <- sqrt(yc)
yc2 <- -yc1
points(xx, yc1, type="l", lty=2, col="red")		# Cook 距離 0.5 線
points(xx, -yc1, type="l", lty=2, col="red")

重回帰分析の例

モデル選択と AIC

 確率モデルのパラメータ推定には,通常,最尤法が用いられる.しかしながら,重回帰分析などで説明変数の 個数(パラメータ数)を決めようとすると,一般に,パラメータ数が多いほどデータへのモデルの当てはまり (fitting)が良くなるので,最尤法でパラメータ数を決めるとパラメータ数の多いモデルが「良い」とされて しまう.パラメータ数の多いモデルは,パラメータの値を推定したデータにはよく当てはまるが, 同様の状況から得られた別のデータへの当てはまりが悪くなることが知られている.このような現象を解釈 しすぎ(over fitting)という.
 これを避けるには,できるだけ単純なモデルを考えるのがよいとされている.これを実現するモデル選択 の基準として,

X = (モデルのデータへの当てはまり) + (モデルの複雑さへのペナルティ)

の形式のものがいくつか提案されている.この中で有名な基準の一つが AIC (Akaike Information Criterion) である.AIC は,

AIC = - 2×(モデルの最大対数尤度) + 2×(モデルの自由パラメータ数)

と定義される.モデルの最大対数尤度は,確率モデルの最尤推定値を確率モデルに代入したときの尤度の対数 を取ったものであり,モデルのデータへの当てはまりのよさを評価している.モデルの自由パラメータ数 は,モデルの複雑さの尺度の一つで,パラメータ数の少ないモデルほど単純でよいものと考えられる. 結局,AIC の小さなモデルがよいとされる.

 k 個のパラメータ θ を持つ回帰モデル

y = f(x ; θ) + e
において,残差 e が正規分布に従うモデルでは,n 個のデータから得られた 残差分散の最尤推定値を v2 とすると, 回帰モデルの最大対数尤度は,
l = -(1/2) [n log 2π + n log v2 + n ]
となる.これより,回帰モデルでの AIC は,
AIC = (n log 2π + n log v2 + n ) + 2k
となり,AIC の小さな回帰モデルがよいとされる.

説明変数の選択

すべての組み合わせの AIC
 全変数を使って重回帰分析を行ったが,経度(x2)の回帰係数の有意確率が小さくないので, 経度の情報は気温を説明するのに必要ないかも知れない.これは日本では,緯度が高く標高が高いほど気温 が低いと考えられることとも一致している.モデル選択の方法として AIC を利用してみる.
 3 個の説明変数があるので,説明変数の組み合わせは 23 = 8 通りある.このすべての組合わせ に対して AIC の値を計算し,最も小さな値をもつモデルを採用することにする.

# 変数選択の R スクリプト
kion0.lm <- lm(気温 ~ 1, data=kion) # 説明変数無し回帰
anova(kion0.lm) #
kion11.lm <- lm(気温 ~ 緯度, data=kion) # 説明変数:緯度,回帰
anova(kion11.lm) #
kion12.lm <- lm(気温 ~ 経度, data=kion) # 説明変数:経度,回帰
anova(kion12.lm) #
kion13.lm <- lm(気温 ~ 標高, data=kion) # 説明変数:標高,回帰
anova(kion13.lm) #
kion21.lm <- lm(気温 ~ 緯度 + 経度, data=kion) # 説明変数:緯度,経度,回帰
anova(kion21.lm) #
kion22.lm <- lm(気温 ~ 経度 + 標高, data=kion) # 説明変数:経度,標高,回帰
anova(kion22.lm) #
kion23.lm <- lm(気温 ~ 緯度 + 標高, data=kion) # 説明変数:緯度,標高,回帰
anova(kion23.lm) #
kion3.lm <- lm(気温 ~ 緯度 + 経度 + 標高, data=kion) # 説明変数:緯度,経度,標高,回帰
anova(kion3.lm) #
AIC(kion0.lm) # 説明変数無し回帰 AIC
AIC(kion11.lm) # 説明変数:緯度,回帰 AIC
AIC(kion12.lm) # 説明変数:経度,回帰 AIC
AIC(kion13.lm) # 説明変数:標高,回帰 AIC
AIC(kion21.lm) # 説明変数:緯度,経度,回帰 AIC
AIC(kion22.lm) # 説明変数:経度,標高,回帰 AIC
AIC(kion23.lm) # 説明変数:緯度,標高,回帰 AIC
AIC(kion3.lm) # 説明変数:緯度,経度,標高,回帰 AIC

変数増減法の AIC
 説明変数の数が多くなり,すべての組み合わせを調べることが大変な場合には,変数増加法,変数減少法, その組み合わせである変数増減法がある.ここでは,変数増減法もやってみる.

# 変数増減法の R スクリプト
library(MASS) # MASS ライブラリィー読み込み
null <- lm(気温 ~ 1, kion) # 説明変数無し
full <- lm(気温 ~ 緯度 + 経度 + 標高, kion) # 説明変数3つ
result <- stepAIC(null, scope=list(lower=null, upper=full), data=kion) # 変数増減法
summary(result) # 結果表示

多項式回帰

 目的変数 y と説明変数 x との関係が直線関係では説明できないようなときには, x の多項式で回帰することを考える.p 次までの多項式を考えると,

y = b0 + b1x + b2x2 + … + bpxp + e

というモデルとなる.ここで,x2 = x2,…, xp = xp と変数変換を行えば通常の重回帰分析と同じである.

多変量解析

に続く.

参考文献

  1. 心理・教育のための統計法(第 2 版),山内光哉,1998,サイエンス社
  2. 工学のためのデータサイエンス入門−フリーな統計環境Rを用いたデータ解析−,間瀬茂ら,2004, 数理工学社
  3. 実践生物統計学−分子から生態まで−(第 1 章,第 2 章), 東京大学生物測定学研究室編(大森宏ら), 2004,朝倉書店
  4. R で学ぶデータマインニング I −データ解析の視点から−,熊谷悦生・船尾暢男,2007,九天社
  5. R で学ぶデータマインニング II −シミュレーションの視点から−,熊谷悦生・船尾暢男,2007,九天社
  6. 生物統計学入門,上村賢治・高野泰・大森宏,2008,オーム社

Copyright (C) 2008, Hiroshi Omori. 最終更新:2008年10月 4日