分析結果の解釈については、書籍をご参照ください。以下はWindows10、R version 4.2.1で実行しています。

データを読み込むにあたって、作業場所の指定とそこにデータが置いてあることが前提になります。 R本体を操作している場合は、「ファイル」→「ディレクトリの変更」でデータの置いてある場所を指定するのが簡単です。 RStudioを操作している場合は、例えばデスクトップの「R」という名前のフォルダにデータがあるとすると

setwd("C:/Users/ユーザー名/Desktop/R")

を最初に実行するのがよいでしょう。ユーザー名は各自異なるので注意です。

使用するデータを読み込み、表示します。なお、R version 4.1以前で読み込む際には

data1 <- read.csv("ファイル名.csv", fileEncoding = "UTF-8-BOM")

のように、エンコードのオプションを指定する必要があります。version 4.2以降では必要ありませんので、以下ではオプションを指定していません。

data1 <- read.csv("ch7.csv")

表7-1 賃金の属性別集計データ

data1
##    agecl  age  exp   sal    bon   educ eduy
## 1    -19 18.5  1.4 214.8   68.0   中学    9
## 2  20-24 22.7  2.6 224.8  164.4   中学    9
## 3  25-29 27.5  4.3 250.1  332.4   中学    9
## 4  30-34 32.5  5.7 270.1  397.9   中学    9
## 5  35-39 37.5  8.0 297.3  475.8   中学    9
## 6  40-44 42.7 10.7 313.7  548.0   中学    9
## 7  45-49 47.5 12.9 322.5  569.7   中学    9
## 8  50-54 52.3 15.2 319.0  595.5   中学    9
## 9  55-59 57.5 18.3 307.5  618.6   中学    9
## 10   -19 19.1  0.9 190.9  132.6   高校   12
## 11 20-24 22.5  3.1 220.3  468.2   高校   12
## 12 25-29 27.5  5.4 248.1  536.7   高校   12
## 13 30-34 32.5  7.7 271.4  623.3   高校   12
## 14 35-39 37.6 10.0 294.6  708.9   高校   12
## 15 40-44 42.6 12.7 316.7  795.0   高校   12
## 16 45-49 47.6 15.6 331.8  889.2   高校   12
## 17 50-54 52.4 17.3 334.0  881.1   高校   12
## 18 55-59 57.4 19.9 335.3  917.4   高校   12
## 19 20-24 22.8  1.8 230.9  332.6   専門   14
## 20 25-29 27.4  4.1 256.4  515.6   専門   14
## 21 30-34 32.7  6.6 283.0  641.8   専門   14
## 22 35-39 37.5  8.9 304.4  740.2   専門   14
## 23 40-44 42.6 11.1 323.6  824.7   専門   14
## 24 45-49 47.4 14.3 345.2  971.1   専門   14
## 25 50-54 52.2 15.1 349.0  960.2   専門   14
## 26 55-59 57.3 16.9 351.2  975.9   専門   14
## 27 20-24 22.7  2.0 219.5  436.9   短大   14
## 28 25-29 27.4  4.7 251.1  699.0   短大   14
## 29 30-34 32.6  7.5 273.0  777.4   短大   14
## 30 35-39 37.6  9.9 296.5  875.9   短大   14
## 31 40-44 42.6 12.2 311.6  946.5   短大   14
## 32 45-49 47.5 14.3 326.1 1053.7   短大   14
## 33 50-54 52.3 17.1 350.2 1187.6   短大   14
## 34 55-59 57.4 18.8 344.8 1150.0   短大   14
## 35 20-24 23.6  1.3 244.6  349.0   大学   16
## 36 25-29 27.5  3.7 285.4  799.2   大学   16
## 37 30-34 32.5  6.7 330.9  983.5   大学   16
## 38 35-39 37.5  9.8 376.3 1206.8   大学   16
## 39 40-44 42.5 12.7 416.8 1407.1   大学   16
## 40 45-49 47.5 16.3 458.1 1639.0   大学   16
## 41 50-54 52.4 20.5 521.0 1986.1   大学   16
## 42 55-59 57.4 22.8 511.1 1864.4   大学   16
## 43 20-24 24.5  0.6 256.5   68.1 大学院   18
## 44 25-29 27.6  2.7 316.0  953.5 大学院   18
## 45 30-34 32.4  5.8 378.1 1325.8 大学院   18
## 46 35-39 37.4  9.2 463.6 1774.2 大学院   18
## 47 40-44 42.4 12.2 518.9 2152.6 大学院   18
## 48 45-49 47.4 15.4 571.6 2391.9 大学院   18
## 49 50-54 52.4 18.7 636.2 2838.0 大学院   18
## 50 55-59 57.3 20.1 701.8 2926.3 大学院   18

年齢階級(agecl)、年齢(age)、勤続年数(exp)、月給(sal)、ボーナス(bon)、学歴(edu)、修学年数(eduy)となっています。

本章で使用するパッケージを読み込みますが、パッケージはインストールしておく必要があります。 以下のようにコマンドでインストールするか、RやRStudioからクリックでインストールすることもできます。

install.packages(“stargazer”, dependencies = TRUE)

これまで、パッケージdummiesがダミー変数を作成する際に有用でしたが、2022年11月5日現在、公開されていないため、ここでは素朴な方法でダミー変数を作成します。 パッケージdummiesでダミー変数を作成する方法は、最後に付録として紹介します。

パッケージの機能が使えるように読み込みます。

library(ggplot2)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer

年収(ainc)を作成します。

data1$ainc <- (data1$sal*12+data1$bon)/10

学歴(educ)から高校以外の学歴ダミーを作成します。 1、0で示すためにas.integerを使います。

data1$jhigh <- as.integer(data1$educ=="中学")
data1$voca <- as.integer(data1$educ=="専門")
data1$jcol <- as.integer(data1$educ=="短大")
data1$univ <- as.integer(data1$educ=="大学")
data1$grad <- as.integer(data1$educ=="大学院")

表7-2 年収と学歴ダミーを追加したデータセット

data1
##    agecl  age  exp   sal    bon   educ eduy    ainc jhigh voca jcol univ grad
## 1    -19 18.5  1.4 214.8   68.0   中学    9  264.56     1    0    0    0    0
## 2  20-24 22.7  2.6 224.8  164.4   中学    9  286.20     1    0    0    0    0
## 3  25-29 27.5  4.3 250.1  332.4   中学    9  333.36     1    0    0    0    0
## 4  30-34 32.5  5.7 270.1  397.9   中学    9  363.91     1    0    0    0    0
## 5  35-39 37.5  8.0 297.3  475.8   中学    9  404.34     1    0    0    0    0
## 6  40-44 42.7 10.7 313.7  548.0   中学    9  431.24     1    0    0    0    0
## 7  45-49 47.5 12.9 322.5  569.7   中学    9  443.97     1    0    0    0    0
## 8  50-54 52.3 15.2 319.0  595.5   中学    9  442.35     1    0    0    0    0
## 9  55-59 57.5 18.3 307.5  618.6   中学    9  430.86     1    0    0    0    0
## 10   -19 19.1  0.9 190.9  132.6   高校   12  242.34     0    0    0    0    0
## 11 20-24 22.5  3.1 220.3  468.2   高校   12  311.18     0    0    0    0    0
## 12 25-29 27.5  5.4 248.1  536.7   高校   12  351.39     0    0    0    0    0
## 13 30-34 32.5  7.7 271.4  623.3   高校   12  388.01     0    0    0    0    0
## 14 35-39 37.6 10.0 294.6  708.9   高校   12  424.41     0    0    0    0    0
## 15 40-44 42.6 12.7 316.7  795.0   高校   12  459.54     0    0    0    0    0
## 16 45-49 47.6 15.6 331.8  889.2   高校   12  487.08     0    0    0    0    0
## 17 50-54 52.4 17.3 334.0  881.1   高校   12  488.91     0    0    0    0    0
## 18 55-59 57.4 19.9 335.3  917.4   高校   12  494.10     0    0    0    0    0
## 19 20-24 22.8  1.8 230.9  332.6   専門   14  310.34     0    1    0    0    0
## 20 25-29 27.4  4.1 256.4  515.6   専門   14  359.24     0    1    0    0    0
## 21 30-34 32.7  6.6 283.0  641.8   専門   14  403.78     0    1    0    0    0
## 22 35-39 37.5  8.9 304.4  740.2   専門   14  439.30     0    1    0    0    0
## 23 40-44 42.6 11.1 323.6  824.7   専門   14  470.79     0    1    0    0    0
## 24 45-49 47.4 14.3 345.2  971.1   専門   14  511.35     0    1    0    0    0
## 25 50-54 52.2 15.1 349.0  960.2   専門   14  514.82     0    1    0    0    0
## 26 55-59 57.3 16.9 351.2  975.9   専門   14  519.03     0    1    0    0    0
## 27 20-24 22.7  2.0 219.5  436.9   短大   14  307.09     0    0    1    0    0
## 28 25-29 27.4  4.7 251.1  699.0   短大   14  371.22     0    0    1    0    0
## 29 30-34 32.6  7.5 273.0  777.4   短大   14  405.34     0    0    1    0    0
## 30 35-39 37.6  9.9 296.5  875.9   短大   14  443.39     0    0    1    0    0
## 31 40-44 42.6 12.2 311.6  946.5   短大   14  468.57     0    0    1    0    0
## 32 45-49 47.5 14.3 326.1 1053.7   短大   14  496.69     0    0    1    0    0
## 33 50-54 52.3 17.1 350.2 1187.6   短大   14  539.00     0    0    1    0    0
## 34 55-59 57.4 18.8 344.8 1150.0   短大   14  528.76     0    0    1    0    0
## 35 20-24 23.6  1.3 244.6  349.0   大学   16  328.42     0    0    0    1    0
## 36 25-29 27.5  3.7 285.4  799.2   大学   16  422.40     0    0    0    1    0
## 37 30-34 32.5  6.7 330.9  983.5   大学   16  495.43     0    0    0    1    0
## 38 35-39 37.5  9.8 376.3 1206.8   大学   16  572.24     0    0    0    1    0
## 39 40-44 42.5 12.7 416.8 1407.1   大学   16  640.87     0    0    0    1    0
## 40 45-49 47.5 16.3 458.1 1639.0   大学   16  713.62     0    0    0    1    0
## 41 50-54 52.4 20.5 521.0 1986.1   大学   16  823.81     0    0    0    1    0
## 42 55-59 57.4 22.8 511.1 1864.4   大学   16  799.76     0    0    0    1    0
## 43 20-24 24.5  0.6 256.5   68.1 大学院   18  314.61     0    0    0    0    1
## 44 25-29 27.6  2.7 316.0  953.5 大学院   18  474.55     0    0    0    0    1
## 45 30-34 32.4  5.8 378.1 1325.8 大学院   18  586.30     0    0    0    0    1
## 46 35-39 37.4  9.2 463.6 1774.2 大学院   18  733.74     0    0    0    0    1
## 47 40-44 42.4 12.2 518.9 2152.6 大学院   18  837.94     0    0    0    0    1
## 48 45-49 47.4 15.4 571.6 2391.9 大学院   18  925.11     0    0    0    0    1
## 49 50-54 52.4 18.7 636.2 2838.0 大学院   18 1047.24     0    0    0    0    1
## 50 55-59 57.3 20.1 701.8 2926.3 大学院   18 1134.79     0    0    0    0    1

図7-2 勤続年数と年収の散布図

ggplot(data1,aes(x=exp,y=ainc))+geom_point()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()

図7-3 学歴で区別した勤続年数と年収の散布図

ggplot(data1,aes(x=exp,y=ainc, shape=educ))+geom_point()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()+labs(shape="学歴")+scale_shape_discrete(limits=c("中学","高校","専門","短大","大学","大学院"))

(7.1)式の推定

reg1 <-lm(ainc~exp+eduy, data=data1)
summary(reg1)
## 
## Call:
## lm(formula = ainc ~ exp + eduy, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -150.29  -55.52  -26.63   35.97  288.01 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -196.982     67.811  -2.905  0.00558 ** 
## exp           19.583      2.217   8.832  1.5e-11 ***
## eduy          36.118      4.745   7.612  9.7e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 96.22 on 47 degrees of freedom
## Multiple R-squared:  0.765,  Adjusted R-squared:  0.755 
## F-statistic: 76.52 on 2 and 47 DF,  p-value: 1.652e-15

図7-4 就学年数を使った回帰による年収の予測値

data1$painc1 <- predict(reg1)
ggplot(data1,aes(x=exp,y=painc1, shape=educ))+geom_point()+geom_line()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()+labs(shape="学歴")+scale_shape_discrete(limits=c("中学","高校","専門","短大","大学","大学院"))

(7.2)式の推定

reg2 <-lm(ainc~exp+jhigh+voca+jcol+univ+grad, data=data1)
summary(reg2)
## 
## Call:
## lm(formula = ainc ~ exp + jhigh + voca + jcol + univ + grad, 
##     data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -240.98  -24.58   15.82   35.39  186.38 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  197.949     29.349   6.745 3.02e-08 ***
## exp           20.145      1.658  12.148 1.71e-15 ***
## jhigh          2.865     33.862   0.085    0.933    
## voca          44.705     34.817   1.284    0.206    
## jcol          29.242     34.820   0.840    0.406    
## univ         165.421     34.891   4.741 2.35e-05 ***
## grad         345.552     34.813   9.926 1.08e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 71.64 on 43 degrees of freedom
## Multiple R-squared:  0.8808, Adjusted R-squared:  0.8642 
## F-statistic: 52.97 on 6 and 43 DF,  p-value: < 2.2e-16

図7-6 学歴ダミーを使った推定による予測値

data1$painc2 <- predict(reg2)
ggplot(data1,aes(x=exp,y=painc2, shape=educ))+geom_point()+geom_line()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()+labs(shape="学歴")+scale_shape_discrete(limits=c("中学","高校","専門","短大","大学","大学院"))

(7.3)式の推定

reg3 <-lm(ainc~exp*jhigh+exp*voca+exp*jcol+exp*univ+exp*grad, data=data1)
summary(reg3)
## 
## Call:
## lm(formula = ainc ~ exp * jhigh + exp * voca + exp * jcol + exp * 
##     univ + exp * grad, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -52.726 -18.806   7.298  16.190  34.835 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 271.0066    16.8302  16.102  < 2e-16 ***
## exp          13.0443     1.4010   9.311 2.39e-11 ***
## jhigh        13.7208    23.4371   0.585  0.56172    
## voca         31.1783    26.1738   1.191  0.24096    
## jcol         29.1465    26.3305   1.107  0.27527    
## univ         63.6186    24.2616   2.622  0.01250 *  
## grad         72.9331    23.9705   3.043  0.00424 ** 
## exp:jhigh    -2.4470     2.1047  -1.163  0.25223    
## exp:voca      1.0569     2.2867   0.462  0.64659    
## exp:jcol      0.3527     2.1780   0.162  0.87223    
## exp:univ      9.5522     1.8885   5.058 1.11e-05 ***
## exp:grad     25.9494     1.9505  13.304 7.06e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26.06 on 38 degrees of freedom
## Multiple R-squared:  0.9861, Adjusted R-squared:  0.982 
## F-statistic: 244.4 on 11 and 38 DF,  p-value: < 2.2e-16

図7-8 学歴を定数項ダミーと係数ダミーでとらえた推定からの予測値

data1$painc3 <- predict(reg3)
ggplot(data1,aes(x=exp,y=painc3, shape=educ))+geom_point()+geom_line()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()+labs(shape="学歴")+scale_shape_discrete(limits=c("中学","高校","専門","短大","大学","大学院"))

(7.4)式の推定

reg4 <-lm(ainc~exp+exp:jhigh+exp:voca+exp:jcol+exp:univ+exp:grad, data=data1)
summary(reg4)
## 
## Call:
## lm(formula = ainc ~ exp + exp:jhigh + exp:voca + exp:jcol + exp:univ + 
##     exp:grad, data = data1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -72.99 -19.17   4.38  17.93  56.55 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 305.8265     7.9760  38.343  < 2e-16 ***
## exp          10.5618     0.9762  10.819 7.50e-14 ***
## exp:jhigh    -1.6841     1.2161  -1.385   0.1732    
## exp:voca      3.2478     1.2106   2.683   0.0103 *  
## exp:jcol      2.4191     1.1503   2.103   0.0414 *  
## exp:univ     13.8079     1.0828  12.752 3.31e-16 ***
## exp:grad     30.9825     1.1300  27.418  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 28.6 on 43 degrees of freedom
## Multiple R-squared:  0.981,  Adjusted R-squared:  0.9784 
## F-statistic: 370.3 on 6 and 43 DF,  p-value: < 2.2e-16

図7-9 学歴を係数ダミーのみでとらえた推定からの予測値

data1$painc4 <- predict(reg4)
ggplot(data1,aes(x=exp,y=painc4, shape=educ))+geom_point()+geom_line()+xlab("勤続年数")+ylab("年収(万円)")+theme_classic()+labs(shape="学歴")+scale_shape_discrete(limits=c("中学","高校","専門","短大","大学","大学院"))

表7-3 推定結果のまとめ

stargazer(reg1,reg2,reg3,reg4,type="text",digits=3,star.cutoffs=c(0.1,0.05,0.01),keep.stat = c("n","rsq","adj.rsq"))
## 
## =========================================================
##                          Dependent variable:             
##              --------------------------------------------
##                                  ainc                    
##                  (1)        (2)        (3)        (4)    
## ---------------------------------------------------------
## exp           19.583***  20.145***  13.044***  10.562*** 
##                (2.217)    (1.658)    (1.401)    (0.976)  
##                                                          
## eduy          36.118***                                  
##                (4.745)                                   
##                                                          
## jhigh                      2.865      13.721             
##                           (33.862)   (23.437)            
##                                                          
## voca                       44.705     31.178             
##                           (34.817)   (26.174)            
##                                                          
## jcol                       29.242     29.146             
##                           (34.820)   (26.330)            
##                                                          
## univ                     165.421***  63.619**            
##                           (34.891)   (24.262)            
##                                                          
## grad                     345.552*** 72.933***            
##                           (34.813)   (23.970)            
##                                                          
## exp:jhigh                             -2.447     -1.684  
##                                      (2.105)    (1.216)  
##                                                          
## exp:voca                              1.057     3.248**  
##                                      (2.287)    (1.211)  
##                                                          
## exp:jcol                              0.353     2.419**  
##                                      (2.178)    (1.150)  
##                                                          
## exp:univ                             9.552***  13.808*** 
##                                      (1.888)    (1.083)  
##                                                          
## exp:grad                            25.949***  30.983*** 
##                                      (1.950)    (1.130)  
##                                                          
## Constant     -196.982*** 197.949*** 271.007*** 305.827***
##               (67.811)    (29.349)   (16.830)   (7.976)  
##                                                          
## ---------------------------------------------------------
## Observations     50          50         50         50    
## R2              0.765      0.881      0.986      0.981   
## Adjusted R2     0.755      0.864      0.982      0.978   
## =========================================================
## Note:                         *p<0.1; **p<0.05; ***p<0.01

付録

2022年11月5日時点でパッケージdummiesが公開されていませんが、持っている場合は以下のように実行できます。

library(dummies)
data1$edu <- as.factor(data1$educ)
data1 <- dummy.data.frame(data1, names = c("edu") , sep = ".", all = TRUE)