No.02889 2つの回帰係数の有意差検定  【けんちち】 2007/03/01(Thu) 13:56

お邪魔いたします。
お尋ねしたいのは掲題のとおりですが,比較する一方の回帰係数が想定値でありデータは存在しません。
実際に得られた回帰直線の傾き(例えば0.8)が想定される傾き(例えば0.5)と有意に異なるという検定をできないかと思っています。
t検定において定数と一つの条件の平均値との差を検定する要領でよいのかと思ったのですが,実測データ側の分散をどのように扱えばよいのか分かりません。
ご教示よろしくお願いいたします。

No.02890 Re: 2つの回帰係数の有意差検定  【青木繁伸】 2007/03/01(Thu) 14:05

直線回帰の場合ですか?

1) 直線回帰(つまり,従属変数と,独立変数が1つ,計2個の変数)の傾きの検定(H0:傾き=0)
2) 同じく直線回帰で,重相関係数の検定
3) 同じく直線回帰で,回帰の分散分析の検定
4) 2変数の相関係数の検定(H0:ρ=0)
:
これらは,全部同じ結果(P値)を返します。
それを考慮すれば,4) の場合の相関係数の検定で,普通は無相関検定(H0:ρ=0)だが,相関係数がある特定の母相関係数と異なるかどうかの検定があるので,それをやればよいのではないでしょうか?
あるいは,直線回帰(重回帰)の結果で,偏回帰係数と,その標準誤差が示されていると思うので (偏回帰係数-特定の回帰係数値)/標準誤差 がt分布に従うだろうから,検定ができるのでは?
R などで,実際に計算してみると分かるのではないかな?

No.02894 Re: 2つの回帰係数の有意差検定  【青木繁伸】 2007/03/01(Thu) 15:07

> # gendat2, mreg, rtest は,http://aoki2.si.gunma-u.ac.jp/R/index.html にある関数
> n <- 1000
> r <- 0.1
> rho <- 0.13
> d <- gendat2(n, r)*10+50 # テストデータを生成
> y <- d[,2]
> x <- d[,1]*6
> cor.test(x, y) # 無相関検定

Pearson's product-moment correlation

data: x and y
t = 3.175, df = 998, p-value = 0.001544 # ★ ここの3つのP値が同じになる
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.03824400 0.16099502
sample estimates:
cor
0.1

> mreg(cbind(x, y)) # 偏回帰係数の検定と回帰の分散分析
$result
偏回帰係数 標準誤差 t 値 P 値
x 0.01666667 0.005249296 3.175029 1.544116e-03 # ★ ここの3つのP値が同じになる
定数項 45.00000000 1.605944930 28.020886 6.320937e-128
標準化偏回帰係数 トレランス
x 0.1 1
定数項 NA NA

$anova
平方和 自由度 平均平方 F 値 P 値
回帰 999 1 999.0000 10.08081 0.001544116 # ★ ここの3つのP値が同じになる
残差 98901 998 99.0992 NA NA
全体 99900 999 100.0000 NA NA

$Rs
重相関係数 重相関係数の二乗
0.100000000 0.010000000
自由度調整済重相関係数の二乗
0.009008016

# 以下は,母回帰係数が0と異なる特定の値であるかどうかの検定と
# 母相関係数が0と異なる特定の値であるかどうかの検定を比較するもの
> ans <- lm(y ~ x)
> ans2 <- summary(ans)
> slope0 <- rho*sd(y)/sd(x) # 母相関係数が傾きの幾つに相当するかの近似値
> (t <- abs(ans$coefficients[2]-slope0)/ans2$coefficients[2,2]) # 近似検定
x
0.9525086
> pt(t, n-2, lower=FALSE)*2 # 0とは異なる母回帰係数の検定
x
0.3410697
> rtest(r, rho, n) # 0とは異なる相関係数の検定
r rho n z P
0.1000000 0.1300000 1000.0000000 0.9600315 0.3370394
> # 最後の2つの検定結果がほぼ等しい(「ほぼ」というのは気にくわないが)

No.02895 Re: 2つの回帰係数の有意差検定  【けんちち】 2007/03/01(Thu) 17:20

青木様
早速のご回答ありがとうございます。
回帰はご指摘のとおり直線回帰です。
青木様の 超高レベル回答についていってないのですが,「(偏回帰係数-特定の回帰係数値)/標準誤差 がt分布に従うだろう」という解説にもとづけば,添付図の左 矢印に示す数値(0.807)から想定回帰係数(0.5)を引き,それを右矢印の数値(0.067)で割ったもの(0.458)をt値として,自由度 (データ数は24なのでdf=23)と照らし合わせればよろしいでしょうか。だとしたら有意差はありませんね。
まったく意味不明なこと言ってますでしょうか。

fig


No.02896 Re: 2つの回帰係数の有意差検定  【けんちち】 2007/03/01(Thu) 17:25

割り算の値の桁を間違っていました。
4.58ですね。だとしたら1%水準でも有意かな。
でも依然として意味不明な数値です。
失礼しました。

No.02904 Re: 2つの回帰係数の有意差検定  【takahashi】 2007/03/01(Thu) 21:02

自由度は23ではなく22ですが,それ以外はそれでいいでしょう。

または,元のデータからy=0.5xを引いてしまう,というのもひとつの手ですね。
> x<-1:10 ##オリジナルデータのx
> y1<-1:10+rnorm(10) ##オリジナルデータのy
> y2<-y1-0.5*x ##オリジナルデータとy=0.5xとの差
> (y1cf<-summary(lm(y1~x))$coef) ##オリジナルデータの回帰
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.3233173 0.8522140 0.3793851 0.7142741665
x 0.9702771 0.1373467 7.0644356 0.0001056457
> 2*pt(abs((y1cf[2,1]-0.5)/y1cf[2,2]),8,lower.tail=FALSE) ##estとSEを使って0.5との差を検定
[1] 0.00903427 # <-これと
> summary(lm(y2~x))$coef ##変形したデータの回帰
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.3233173 0.8522140 0.3793851 0.71427417
x 0.4702771 0.1373467 3.4240138 0.00903427 # <-これ
が一緒。

No.02912 Re: 2つの回帰係数の有意差検定  【けんちち】 2007/03/02(Fri) 11:26

青木様
ありがとうございました。
根本の原理を理解せずに上っ面だけの理解ではなかなか応用がききませんね。
恥ずかしく思っているしだいです。
自由度がなぜN-2なのか,回帰係数や相関係数を検定する上での共分散の意味など,もう少し勉強することにいたします。
ところで検定の最初から,前提とされる回帰で予測される値を生データから差っぴいてしまうというのは結果の理解に役立ちますね。
回帰係数の有意性については同じ結果になりましたが,相関については係数がかなり劣化してしまいました。
なかなか奥が深いです。

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