情報統計研究所をWeb上に開設して、間もなく、最初の依頼者は中学校の先生でした。分析結果の発表で賞を頂いたとか、また、ある医学学会の発表では人生初の1等賞を頂いただとか、大層お喜び頂いて恐縮すると共に、統計分析の重要性を改めて認識した次第です。さて、
前号(55)の続きで、回帰分析での外れ値についてです。
まずは、「R」環境で次のパッケージを事前にインストールしておいて下さい。
「robustbase」、「MASS」、「ggplot2」
まずは、「R」環境で次のパッケージを事前にインストールしておいて下さい。
「robustbase」、「MASS」、「ggplot2」
そして、次のプログラムを実行しますが、データは前回の原データ"dat"です。
***
ibrary(robustbase)
fit.rob<- lmrob(dat$y~ dat$x, method="MM") # ロバスト重回帰分析(lmrob:MM法)
summary(fit.rob)
ibrary(robustbase)
fit.rob<- lmrob(dat$y~ dat$x, method="MM") # ロバスト重回帰分析(lmrob:MM法)
summary(fit.rob)
library(MASS)
fit.rlm<- rlm(dat$y~ dat$x, method="MM") # ロバスト重回帰分析(rlm:MM法)
stat<- summary(fit.rlm)
rr= data.frame(stat$coefficients)
rr$p.value = pt(rr$t.value, stat$df[2], lower.tail=FALSE)
rr
***
fit.rlm<- rlm(dat$y~ dat$x, method="MM") # ロバスト重回帰分析(rlm:MM法)
stat<- summary(fit.rlm)
rr= data.frame(stat$coefficients)
rr$p.value = pt(rr$t.value, stat$df[2], lower.tail=FALSE)
rr
***
原データによるロバスト回帰分析の結果を表1と表2に示します。
表1 lmrob(MM法:積率法による推定値)の結果
------------------------------------------------------------------
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.004737 0.481313 0.01 0.992
dat$x 7.384300 0.193199 38.22 <2e-16 ***
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.004737 0.481313 0.01 0.992
dat$x 7.384300 0.193199 38.22 <2e-16 ***
-----------------------------------------------------------------
表2 rlm(MM法:積率法による推定値)の結果
----------------------------------------------------------------------------
Value Std..Error t.value p.value
(Intercept) 0.004707031 0.7132836 0.006599102 4.974037e-01
dat$x 7.384246485 0.3081548 23.962780398 2.081652e-15
Value Std..Error t.value p.value
(Intercept) 0.004707031 0.7132836 0.006599102 4.974037e-01
dat$x 7.384246485 0.3081548 23.962780398 2.081652e-15
----------------------------------------------------------------------------
回帰係数はよくにていますが、標準誤差に違いがあります。
次により、
標準誤差の違いを3方法の回帰直線(95%信頼区間)で見てみましょう。
標準誤差の違いを3方法の回帰直線(95%信頼区間)で見てみましょう。
***
library(ggplot2)
ggplot(data=dat, aes(x, y)) + geom_point() +
geom_smooth(method = "lm", color = "black", level = 0.95) # lm法
library(ggplot2)
ggplot(data=dat, aes(x, y)) + geom_point() +
geom_smooth(method = "lm", color = "black", level = 0.95) # lm法
ggplot(data=dat, aes(x, y)) + geom_point() +
geom_smooth(method = "rlm", level = 0.95) # rlm法
geom_smooth(method = "rlm", level = 0.95) # rlm法
ggplot(data=dat, aes(x, y)) + geom_point() +
geo
geo
m_smooth(method = "lmrob", level = 0.95) # lmrob法
***
***
図1 lm法による95%信頼限界
図2 rlm法による信頼限界
図3 lmrob法による信頼限界
ロバスト回帰分析は外れ値に小さな重みを与える統計手法と言えます。
"重み"は次により見ることが出来ます。
***
# lmrob法のweight
# lmrob法のweight
weights(fit.rob, type=c("robustness"))
出力結果:
1 2 3 4 5 6 7
0.95918112 0.95355889 0.91893577 0.99990569 0.99913249 0.90772106 0.96249181
8 9 10 11 12 13 14
0.97532552 0.00000000 0.98648925 0.99762937 0.99503501 0.99322134 0.06315755
15 16 17 18 19 20
0.89642137 0.98025138 0.99947000 0.96902151 0.87153821 0.00000000
***
1 2 3 4 5 6 7
0.95918112 0.95355889 0.91893577 0.99990569 0.99913249 0.90772106 0.96249181
8 9 10 11 12 13 14
0.97532552 0.00000000 0.98648925 0.99762937 0.99503501 0.99322134 0.06315755
15 16 17 18 19 20
0.89642137 0.98025138 0.99947000 0.96902151 0.87153821 0.00000000
***
***
# rlmの法weight
# rlmの法weight
fit.rlm$w
出力結果:
[1] 0.95917520 0.95355297 0.91893080 0.99990484 0.99913013 0.90765097
[7] 0.96246191 0.97529891 0.00000000 0.98647332 0.99763235 0.99503818
[13] 0.99323711 0.06295043 0.89639547 0.98023447 0.99946700 0.96902983
[19] 0.87144220 0.00000000
***
[1] 0.95917520 0.95355297 0.91893080 0.99990484 0.99913013 0.90765097
[7] 0.96246191 0.97529891 0.00000000 0.98647332 0.99763235 0.99503818
[13] 0.99323711 0.06295043 0.89639547 0.98023447 0.99946700 0.96902983
[19] 0.87144220 0.00000000
***
上記の出力結果(weight)から、原データの9行と20行が除かれていることが分かります。すなわち、外れ値として除外された訳です。
ロバスト推定は普通の最小2乗法より複雑です。ここでは、ほんのサワリ程度のご紹介です。ただ単に、外れ値があるからと言ってロバスト回帰を無暗に用いるべきではないと思っています。
情報統計研究所はここから!