基本的には自分用のメモ。
それは回帰直線なのかということはひとまずおいておいて。
使い道としてはいろいろあるけど、この項の主旨と異なるのでひとまずおいておく。
まずはRのlmで線形回帰分析
データはRにもとも入っているOangeのデータを使います。
head(Orange)
## Tree age circumference
## 1 1 118 30
## 2 1 484 58
## 3 1 664 87
## 4 1 1004 115
## 5 1 1231 120
## 6 1 1372 142
ageは1968年12月31日からの樹齢(日)、circumferenceは樹の円周(mm)(要するに大きさ、正しい用語がわからない)。
プロットすると
plot(Orange$age,Orange$circumference)
で普通の線形回帰分析をlm行うならば、
lm(Orange$circumference~Orange$age)
と書いて、中身を見たければとりあえずsummary関数を使って
summary(lm(Orange$circumference~Orange$age))
##
## Call:
## lm(formula = Orange$circumference ~ Orange$age)
##
## Residuals:
## Min 1Q Median 3Q Max
## -46.310 -14.946 -0.076 19.697 45.111
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.399650 8.622660 2.018 0.0518 .
## Orange$age 0.106770 0.008277 12.900 1.93e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.74 on 33 degrees of freedom
## Multiple R-squared: 0.8345, Adjusted R-squared: 0.8295
## F-statistic: 166.4 on 1 and 33 DF, p-value: 1.931e-14
となります。
プロット図に重ねて描きたければ
plot(Orange$age,Orange$circumference)
abline(lm(Orange$circumference~Orange$age))
で線形回帰分析は終了。
Rのlmで切片のみの回帰直線(?)を描く方法
lmで切片のみ、つまり傾きなしの直線を描くには、lmの~の後ろに1をつければいい。
lm(Orange$circumference~1)
summaryで中身を見てみると
summary(lm(Orange$circumference~1))
##
## Call:
## lm(formula = Orange$circumference ~ 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -85.857 -50.357 -0.857 45.643 98.143
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 115.857 9.717 11.92 1.08e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 57.49 on 34 degrees of freedom
でちゃんとInterceptのみになっている
cricumferenceの1次元で見てるだけなので回帰といってもあたりまえだけど
mean(Orange$circumference)
## [1] 115.8571
とcricumferenceの平均値とInterceptのEstimateは一致する
なのでプロットに重ねるときには
plot(Orange$age,Orange$circumference)
abline(lm(Orange$circumference~1))
でy軸に直交する回帰直線(?)が描ける。
本当にただ、切片のみの直線を引きたいだけのときは
plot(Orange$age,Orange$circumference)
abline(a=mean(Orange$circumference),b=0)
でプロット上同じ結果がでる(a=、b=は省略可能)。
ただ、y軸の平均値のラインをひいているだけだけど。
ablineは
abline(h=mean(Orange$circumference))
でも同じ。
Rのlmで切片なしの回帰直線を描く方法
lmで切片なし、つまり原点を通る回帰直線(?)を描くためにはlmの~の最後に+0か-1書くといい。
lm(Orange$circumference~Orange$age+0)
または
lm(Orange$circumference~Orange$age-1)
で、中身を見るためにはsummaryで
summary(lm(Orange$circumference~Orange$age+0))
##
## Call:
## lm(formula = Orange$circumference ~ Orange$age + 0)
##
## Residuals:
## Min 1Q Median 3Q Max
## -52.297 -8.832 6.289 20.180 44.960
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## Orange$age 0.121553 0.004022 30.23 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.79 on 34 degrees of freedom
## Multiple R-squared: 0.9641, Adjusted R-squared: 0.9631
## F-statistic: 913.6 on 1 and 34 DF, p-value: < 2.2e-16
でInterceptなし、つまり切片なしの原点を通る回帰直線が求められる。 念のためもう一つも確認のためやってみると
summary(lm(Orange$circumference~Orange$age-1))
##
## Call:
## lm(formula = Orange$circumference ~ Orange$age - 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -52.297 -8.832 6.289 20.180 44.960
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## Orange$age 0.121553 0.004022 30.23 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.79 on 34 degrees of freedom
## Multiple R-squared: 0.9641, Adjusted R-squared: 0.9631
## F-statistic: 913.6 on 1 and 34 DF, p-value: < 2.2e-16
で同じ結果が出る。
プロットに重ねて書くなら、
plot(Orange$age,Orange$circumference,xlim = c(0,1600), ylim = c(0,210))
abline(lm(Orange$circumference~Orange$age+0))
で描ける。
ちなみに、2変量の場合、ageとcircumstanceのピアソンの相関係数
cor(Orange$age,Orange$circumference)
## [1] 0.9135189
と、ageとcircumstanceを標準化した原点を通る回帰直線の回帰係数は
Orange.z <- scale(Orange[,2:3])
Orange.z <- data.frame(Orange.z)
summary(lm(Orange.z$circumference~Orange.z$age+0))
##
## Call:
## lm(formula = Orange.z$circumference ~ Orange.z$age + 0)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.80556 -0.25999 -0.00133 0.34263 0.78471
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## Orange.z$age 0.91352 0.06977 13.09 7.74e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4068 on 34 degrees of freedom
## Multiple R-squared: 0.8345, Adjusted R-squared: 0.8296
## F-statistic: 171.5 on 1 and 34 DF, p-value: 7.74e-15
で同じになる。
あたり前田のクラッカー。
そもそも2変量とも標準化しているので、線形回帰分析は原点を通る設定を指定なくても切片は0になる。
summary(lm(Orange.z$circumference~Orange.z$age))
##
## Call:
## lm(formula = Orange.z$circumference ~ Orange.z$age)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.80556 -0.25999 -0.00133 0.34263 0.78471
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.00000 0.06980 0.0 1
## Orange.z$age 0.91352 0.07081 12.9 1.93e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4129 on 33 degrees of freedom
## Multiple R-squared: 0.8345, Adjusted R-squared: 0.8295
## F-statistic: 166.4 on 1 and 33 DF, p-value: 1.931e-14
ただし、その他のp値などはInterceptをいれるかどうかで変わってくる。
あたり前田のクラッカー(天丼)。
この記事は.Rmdでできたhtmlをそのまま貼ってみた。