No.04687 Rで重回帰を行う際の問題点について  【Sai】 2007/11/12(Mon) 14:10

初めて投稿させていただきます。

現在,統計ソフトRを使って卒業論文用のデータを解析しているのですが,重回帰をしているときに3つほど問題が出てきてしまいました。もしどなたか解決法をご存知でしたら,ご教授のほどよろしくお願いします。

問題1.カテゴリカル型データの標準化偏回帰係数が計算されない。

私は連続型とカテゴリカル型を同時に重回帰にかけているのですが,連続型のほうは
res <- lm(y~x1+x2+x3)
sdd <- c(0,sd(x1),sd(x2),sd(x3))
stb <- coef(res)*sdd/sd(y)
のような形でできたのですが,カテゴリカル型データはできません。しかし種々の参考書を見ると,カテゴリカル型データでも標準化偏回帰係数が出力されており,途方に暮れております。

問題2.カテゴリカル型データで一つの項目に複数の場合があるとき,うち一つが表示されない。

正確には表示されないことが問題なのではなくて,計算できないことが問題です。
例えば,
Yield=fertile のような関係を調べたいときに,カテゴリカル型データであるfertileの中にfertile1,fertile2,fertile3があったとしま す。これをそのまま重回帰にかけると,fertile2,fertile3の偏回帰係数やp値は表示されるのですが,fertile1は表示されません。 Minitabの場合でしたら普通,fertile1の偏回帰係数はfertile1,fertile2,fertile3を足して,0になるように計算 できる(らしい)のですが,Rはどうもそうではないような気がします。おそらく基準点のとり方が違うと思うのですが,どなたかRでの基準点をご存知でした ら教えていただけないでしょうか。

問題3.重回帰を行った際に,result()で出力される結果に含まれるStd.Errorと,sd()で出力される結果が違う。

お そらく前者が傾きに対する標準誤差の計算結果で,後者がデータそのものの標準誤差ではないか,という予測はしているのですが私の調べた限り,その違いを述 べている参考書は見当たりませんでした。データがカテゴリカル型であった場合には,sd()では出力されないのに,Std.Errorでは出力されている ので,傾きに対する標準誤差なのかな,と。せめて傾きに対する標準誤差の計算方法がわかれば検算できるのですが,それもわからなかったため質問させていた だきました。

以上の3つです。もしどなたか解決法をご存知でしたら,ご教授のほどよろしくお願いします。

No.04689 Re: Rで重回帰を行う際の問題点について  【青木繁伸】 2007/11/12(Mon) 15:34

> 問題1.カテゴリカル型データの標準化偏回帰係数が計算されない。

自分でダミー変数を用意すれば(当然ながら)計算できます
RのAirPassengersのデータを使って例を示しましょう
まずは,factor を使ってRに計算してもらうところから
> AirPassengers <- as.vector(AirPassengers)# 旅客数 
> Month <- factor(month.abb,levels=month.abb) # 月
> x <- seq(length(AirPassengers)) #時間変数
> df <- data.frame(AirPassengers,Month,x)
> ans <- lm(AirPassengers ~ Month+x, df)
> summary(ans)

Call:
lm(formula = AirPassengers ~ Month + x, data = df)

Residuals:
Min 1Q Median 3Q Max
-42.121 -18.564 -3.268 15.189 95.085

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 63.50794 8.38856 7.571 5.88e-12 ***
MonthFeb -9.41033 10.74941 -0.875 0.382944
MonthMar 23.09601 10.74980 2.149 0.033513 *
MonthApr 17.35235 10.75046 1.614 0.108911
MonthMay 19.44202 10.75137 1.808 0.072849 .
MonthJun 56.61502 10.75254 5.265 5.58e-07 ***
MonthJul 93.62136 10.75398 8.706 1.17e-14 ***
MonthAug 90.71103 10.75567 8.434 5.32e-14 ***
MonthSep 39.38403 10.75763 3.661 0.000363 ***
MonthOct 0.89037 10.75985 0.083 0.934177
MonthNov -35.51996 10.76232 -3.300 0.001244 **
MonthDec -9.18029 10.76506 -0.853 0.395335
x 2.66033 0.05297 50.225 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 26.33 on 131 degrees of freedom
Multiple R-Squared: 0.9559, Adjusted R-squared: 0.9518
F-statistic: 236.5 on 12 and 131 DF, p-value: < 2.2e-16
しかし,これでは月を表すダミー変数の標準偏差を求めてくれないので,自分でダミー変数を作って標準偏差を計算しないといけません。
> m <- matrix(0, 144, 12) # 月のダミー変数(12ヶ月分)
> for (i in 1:12) {
+ for (j in 1:12) {
+ m[(i-1)*12+j, j] <- 1
+ }
+ }
> df2 <- cbind(AirPassengers, m[,-1], x) # 従属変数,2〜12月のダミー変数,x
> sdd <- sd(df2) # 標準偏差ベクトル
> (stb <- coef(ans)[-1]*sdd[2:13]/sd(df2[,1])) # 標準化回帰係数
MonthFeb MonthMar MonthApr MonthMay MonthJun MonthJul
-0.021755738 0.053395655 0.040116883 0.044947993 0.130888251 0.216443194
MonthAug MonthSep MonthOct MonthNov MonthDec x
0.209714804 0.091051935 0.002058446 -0.082118585 -0.021223907 0.925019075

No.04690 Re: Rで重回帰を行う際の問題点について  【青木繁伸】 2007/11/12(Mon) 15:50

> 問題2.カテゴリカル型データで一つの項目に複数の場合があるとき,うち一つが表示されない。

基準項目(ベースライン)は,回帰係数が0とされるからです。
これが不都合という場合にはベースラインの回帰係数0も含めて平行移動すればよいだけです(その分,定数項から削る)。
> coef2 <- c(MonthJan=0, coefficients(ans)[2:12])
> shift <- sum(coef2)/12 # 平行移動量の計算
> (coef2 <- c(coefficients(ans)[1]+shift, coef2-shift)) # 定数項の調整とベースラインへの係数追加
(Intercept) MonthJan MonthFeb MonthMar MonthApr MonthMay MonthJun
87.424740 -23.916800 -33.327129 -0.820792 -6.564455 -4.474784 32.698220
MonthJul MonthAug MonthSep MonthOct MonthNov MonthDec
69.704558 66.794228 15.467232 -23.026430 -59.436759 -33.097089
なお,係数の和を0にするのではなく,度数も考慮して,平均値を0にするという調整もあります。このやり方は数量化理論のときの正規化カテゴリースコアの計算のときに採用される方法です。
参照:http://aoki2.si.gunma-u.ac.jp/LaTeX/sreg-qt1.pdf

No.04691 Re: Rで重回帰を行う際の問題点について  【青木繁伸】 2007/11/12(Mon) 15:57

> 問題3.重回帰を行った際に,result()で出力される結果に含まれるStd.Errorと,sd()で出力される結果が違う。

"Residual standard error" のことですか?
> aov(ans)
Call:
aov(formula = ans)

Terms:
Month x Residuals
Sum of Squares 218382.2 1748841.9 90820.0
Deg. of Freedom 11 1 131

Residual standard error: 26.33026
Estimated effects may be unbalanced
> 90820/131 # 残差に対する平均平方
[1] 693.2824
> sqrt(90820/131) # 残差に対する平均平方の平方根ですよ。
[1] 26.33026
> anova(ans)
Analysis of Variance Table

Response: AirPassengers
Df Sum Sq Mean Sq F value Pr(>F)
Month 11 218382 19853 28.636 < 2.2e-16 ***
x 1 1748842 1748842 2522.553 < 2.2e-16 ***
Residuals 131 90820 693
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

No.04692 Re: Rで重回帰を行う際の問題点について  【青木繁伸】 2007/11/12(Mon) 16:07

Rが計算してくれないからと文句をいうより,理論がわかっているのだから(理論を理解してから),自分で計算できるようになるべきですね。

No.04700 Re: Rで重回帰を行う際の問題点について  【Sai】 2007/11/13(Tue) 16:54

丁寧な回答ありがとうございました。
おかげさまで理解できました。

>Rが計算してくれないからと文句をいうより,理論がわかっているのだから(理論を理解してから),自分で計算できるようになるべきですね。

ご指摘のとおりです。もう少しRを勉強させてください。申し訳ありませんでした。

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