第4章 線形単回帰モデルの推定と検定
実証例 4.1 (線形単回帰)
(pp.128-129)
lm()
関数を用いれば簡単に線形回帰モデルのパラメータを推定することができます.回帰モデルの推定に用いる関数は多くの場合,はじめの引数formula
で回帰式を指定します.たとえば,\(y = \beta_0 + \beta_1 x + \varepsilon\)というモデルなら,formula = y ~ x
のように式を表現します.その次にdata
という引数で,どのデータフレームを用いているかを指定します.
<- read.csv("ch04_wage.csv")
mydata
<- lm(formula = wage ~ productivity, data = mydata)
result
result##
## Call:
## lm(formula = wage ~ productivity, data = mydata)
##
## Coefficients:
## (Intercept) productivity
## 276.1296 0.5468
さらに,summary()
関数を用いることで簡単に\(t\)検定を行うことができます.
summary(result)
##
## Call:
## lm(formula = wage ~ productivity, data = mydata)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.618 -17.612 4.186 21.946 37.052
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 276.12961 87.61057 3.152 0.00525 **
## productivity 0.54682 0.02442 22.395 4.04e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.77 on 19 degrees of freedom
## Multiple R-squared: 0.9635, Adjusted R-squared: 0.9616
## F-statistic: 501.5 on 1 and 19 DF, p-value: 4.037e-15
教科書では不均一分散に頑健な標準誤差を用いています.estimatrパッケージを用いれば簡単に不均一分散に頑健な標準誤差を用いた検定が行えます.formula =
という箇所は毎回書くのが面倒ならば,省略することができます.
library(estimatr)
<- lm_robust(wage ~ productivity, data = mydata, se_type = "stata")
result_robust summary(result_robust)
##
## Call:
## lm_robust(formula = wage ~ productivity, data = mydata, se_type = "stata")
##
## Standard error type: HC1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|) CI Lower CI Upper DF
## (Intercept) 276.1296 71.25559 3.875 1.019e-03 126.990 425.2693 19
## productivity 0.5468 0.02046 26.722 1.553e-16 0.504 0.5896 19
##
## Multiple R-squared: 0.9635 , Adjusted R-squared: 0.9616
## F-statistic: 714.1 on 1 and 19 DF, p-value: < 2.2e-16
\(\beta_1 = 1\)という帰無仮説の下での\(t\)統計量は次のように求められます.
<- result_robust$coefficients["productivity"]
beta1 <- result_robust$std.error["productivity"]
se <- (beta1 - 1) / se
tstat
tstat## productivity
## -22.14628
区間推定は次の通り行えます.1.96
をqnorm(0.975)
としても構いません.qnorm(p)
関数は標準正規分布の\(100p\%\)分位点となる値を求める関数です.
<- beta1 + 1.96 * se
upper <- beta1 - 1.96 * se
lower
lower## productivity
## 0.506712
upper## productivity
## 0.5869272
練習問題 4-2
この練習問題のデータセットのln(2013人口)
という変数は最後の丸括弧が全角になっています.また,いくつかの変数名は数字から始まっていますが,Rでは変数の名前を数字から始めることは推奨されません.さらに,変数名に日本語を含めることもコーディングの効率性の観点から推奨されません.したがって,はじめにデータセットの変数名を変更します.後は実証例4.1と同じような手続きです.
library(readxl)
<- read_excel("data for chap 4 exercise 2.xlsx")
mydata2
colnames(mydata2) <- c("prefecture", "pop2013", "gdp2013", "log_pop2013", "log_gdp2013")