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])なお,係数の和を0にするのではなく,度数も考慮して,平均値を0にするという調整もあります。このやり方は数量化理論のときの正規化カテゴリースコアの計算のときに採用される方法です。
> 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
参照: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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る