★ 決定係数の解釈 ★

4538. 決定係数の解釈 MK 2004/10/07 (木) 11:38
└4542. Re: 決定係数の解釈 青木繁伸 2004/10/07 (木) 12:21


4538. 決定係数の解釈 MK  2004/10/07 (木) 11:38
基本的な質問で恐縮ですが,
一つの被説明変数,二つの説明変数があるとして,説明変数を一つづつ,単回帰分析をします。
決定係数が例えばそれぞれ40%,50%となったとして,二つの説明変数を含んだ重回帰モデルの決定係数が70%となる,といったことがよくあります。(二つの変数同士は相関がありません。)
単回帰分析で40%,50%を説明するならば,重回帰では90%説明する,となってもよさそうと思うのですが,どうしてでしょうか?
二つの変数同士の相関は(t値などが低くても)あると考えたほうがいいでしょうか?

     [このページのトップへ]


4542. Re: 決定係数の解釈 青木繁伸  2004/10/07 (木) 12:21
> 決定係数が例えばそれぞれ40%,50%となったとして,二つの説明変数を含んだ重回帰モデルの決定係数が70%となる,といったことがよくあります。(二つの変数同士は相関がありません。)
> 単回帰分析で40%,50%を説明するならば,重回帰では90%説明する,となってもよさそうと思うのですが,どうしてでしょうか?

> 二つの変数同士の相関は(t値などが低くても)あると考えたほうがいいでしょうか?

二つの独立変数間の相関があるためです。
独立変数間の相関が0の場合には決定係数は単回帰の場合のそれぞれの決定係数の和になります。
では,単回帰の決定係数の和が1より大きくなることがないのかとのご心配もあるでしょうが,そのようなデータは存在しません(というか,少なくとも作成できないようです)。
独立変数間の相関がある場合にはその符号と大きさにより,決定係数は,単回帰の場合の決定係数の和より大きくなったり小さくなったりします。
以下のようなプログラムを書いてシミュレーションしてみるとよくわかります。
gen <- function(a, b, z=0.0)
{
	x <- matrix(c(1,a,b,a,1,z,b,z,1),nc=3)
	print(x)
	d <- as.data.frame(gendat(50, x))
	print(summary(lm(V1 ~ V2, d))$r.squared)
	print(summary(lm(V1 ~ V3, d))$r.squared)
	print(summary(lm(V1 ~ V2+V3, d))$r.squared)
}

gendat <- function(nc, r)
{
	nv <- ncol(r) 
	z <- matrix(rnorm(nv*nc), ncol=nv)
	res <- eigen(r2 <- cor(z))
	coeff <-  solve(r2) %*% (sqrt(matrix(res$values, nv, nv, byrow=TRUE))*res$vectors)
	z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*% coeff
	z %*% chol(r)
}
> gen(0.5,0.5,-0.1)
     [,1] [,2] [,3]
[1,]  1.0  0.5  0.5
[2,]  0.5  1.0 -0.1
[3,]  0.5 -0.1  1.0
[1] 0.25
[1] 0.25
[1] 0.5555556
> gen(0.5,0.5,0.1)
     [,1] [,2] [,3]
[1,]  1.0  0.5  0.5
[2,]  0.5  1.0  0.1
[3,]  0.5  0.1  1.0
[1] 0.25
[1] 0.25
[1] 0.4545455
> gen(0.5,0.5,0.0)
     [,1] [,2] [,3]
[1,]  1.0  0.5  0.5
[2,]  0.5  1.0  0.0
[3,]  0.5  0.0  1.0
[1] 0.25
[1] 0.25
[1] 0.5

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 030 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る