本章で使用する東大社研・若年パネル調査(JLPS-Y)wave1のオープンデータ(u001)は以下のURLで公開されていますので、取得してください。
https://csrda.iss.u-tokyo.ac.jp/infrastructure/urd/
分析結果の解釈については、書籍をご参照ください。以下は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("u001.csv")
本章で使用するパッケージを読み込みますが、パッケージはインストールしておく必要があります。 以下のようにコマンドでインストールするか、RやRStudioからクリックでインストールすることもできます。
install.packages(“stargazer”, dependencies = TRUE)
パッケージの機能が使えるように読み込みます。
library(dplyr)
##
## 次のパッケージを付け加えます: 'dplyr'
## 以下のオブジェクトは 'package:stats' からマスクされています:
##
## filter, lag
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## intersect, setdiff, setequal, union
library(car)
## 要求されたパッケージ carData をロード中です
##
## 次のパッケージを付け加えます: 'car'
## 以下のオブジェクトは 'package:dplyr' からマスクされています:
##
## recode
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
library(mfx)
## 要求されたパッケージ sandwich をロード中です
## 要求されたパッケージ lmtest をロード中です
## 要求されたパッケージ zoo をロード中です
##
## 次のパッケージを付け加えます: 'zoo'
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## as.Date, as.Date.numeric
## 要求されたパッケージ MASS をロード中です
##
## 次のパッケージを付け加えます: 'MASS'
## 以下のオブジェクトは 'package:dplyr' からマスクされています:
##
## select
## 要求されたパッケージ betareg をロード中です
library(MASS)
library(erer)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
使用する変数の準備をします。
data1 <- data1 %>% mutate(
fem=recode(sex,'1=0;2=1'),
marr=recode(ZQ50,'1=0;2:4=1'),
mar=recode(ZQ50,'2=1;1=0;3:4=0'),
age=ifelse(mbirth<=4,2007-ybirth,2007-ybirth-1),
edu3=recode(ZQ23A,'1:2=1;3:4=2;5:6=3;7:9=NA'),
ZQ23Ar=recode(ZQ23A,'1:2=1;3:4=2;5:6=3;7:9=NA'),
edu=as.factor(ifelse(ZQ24<=2, ZQ23Ar, NA)),
gend=as.factor(recode(ZQ39A,'1:2=1;3=2;4:5=3;6:9=NA')),
wtyp=as.factor(recode(JC_1,'1:2=1;3:8=2;10=3;11:99=NA')),
lsat=as.factor(recode(ZQ30D,'1=5;2=4;3=3;4=2;5=1;9=NA')),
lsatq=recode(ZQ30D,'1=5;2=4;3=3;4=2;5=1;9=NA'))
リコードができているか確認します。
性別
table(data1$sex,data1$fem,useNA = "ifany")
##
## 0 1
## 1 499 0
## 2 0 501
既婚
table(data1$ZQ50,data1$marr,useNA = "ifany")
##
## 0 1
## 1 637 0
## 2 0 345
## 4 0 18
有配偶
table(data1$ZQ50,data1$mar,useNA = "ifany")
##
## 0 1
## 1 637 0
## 2 0 345
## 4 18 0
学歴
table(data1$ZQ24,data1$edu,useNA = "ifany")
##
## 1 2 3 <NA>
## 1 220 278 271 3
## 2 26 15 22 0
## 3 0 0 0 144
## 9 0 0 0 21
table(data1$ZQ23A,data1$edu,useNA = "ifany")
##
## 1 2 3 <NA>
## 1 12 0 0 2
## 2 234 0 0 7
## 3 0 171 0 20
## 4 0 122 0 9
## 5 0 0 264 104
## 6 0 0 29 15
## 7 0 0 0 2
## 9 0 0 0 9
生活満足度
table(data1$ZQ30D,data1$lsat,useNA = "ifany")
##
## 1 2 3 4 5 <NA>
## 1 0 0 0 0 163 0
## 2 0 0 0 431 0 0
## 3 0 0 257 0 0 0
## 4 0 103 0 0 0 0
## 5 37 0 0 0 0 0
## 9 0 0 0 0 0 9
性別役割意識
table(data1$ZQ39A,data1$gend,useNA = "ifany")
##
## 1 2 3 <NA>
## 1 47 0 0 0
## 2 211 0 0 0
## 3 0 260 0 0
## 4 0 0 182 0
## 5 0 0 283 0
## 6 0 0 0 10
## 9 0 0 0 7
現在の仕事
table(data1$JC_1,data1$wtyp,useNA = "ifany")
##
## 1 2 3 <NA>
## 1 7 0 0 0
## 2 489 0 0 0
## 3 0 150 0 0
## 4 0 31 0 0
## 5 0 5 0 0
## 6 0 18 0 0
## 7 0 24 0 0
## 8 0 6 0 0
## 10 0 0 126 0
## 11 0 0 0 48
## 12 0 0 0 92
## 99 0 0 0 4
ロジットモデルを推定します。
logit <- glm(marr~age+fem+edu+wtyp+gend, family=binomial(link=logit), data=data1)
summary(logit)
##
## Call:
## glm(formula = marr ~ age + fem + edu + wtyp + gend, family = binomial(link = logit),
## data = data1)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2188 -0.8401 -0.4370 0.9628 2.2546
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.20751 0.73982 -11.094 < 2e-16 ***
## age 0.27882 0.02406 11.588 < 2e-16 ***
## fem 0.41360 0.18383 2.250 0.02446 *
## edu2 -0.42951 0.20962 -2.049 0.04046 *
## edu3 -0.54938 0.20914 -2.627 0.00862 **
## wtyp2 -0.16154 0.19900 -0.812 0.41694
## wtyp3 1.29774 0.25974 4.996 5.84e-07 ***
## gend2 -0.19767 0.22517 -0.878 0.38000
## gend3 -0.23543 0.20269 -1.162 0.24541
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1120.21 on 817 degrees of freedom
## Residual deviance: 892.23 on 809 degrees of freedom
## ( 182 個の観測値が欠損のため削除されました )
## AIC: 910.23
##
## Number of Fisher Scoring iterations: 4
マクファデンの疑似決定係数を計算します。
1-(logit$deviance/logit$null.deviance)
## [1] 0.2035181
プロビットモデルを推定します。
probit <- glm(marr~age+fem+edu+wtyp+gend, family=binomial(link=probit), data=data1)
summary(probit)
##
## Call:
## glm(formula = marr ~ age + fem + edu + wtyp + gend, family = binomial(link = probit),
## data = data1)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2628 -0.8482 -0.4097 0.9670 2.3221
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.00032 0.42100 -11.877 < 2e-16 ***
## age 0.16950 0.01368 12.394 < 2e-16 ***
## fem 0.24778 0.10925 2.268 0.02332 *
## edu2 -0.24717 0.12467 -1.983 0.04740 *
## edu3 -0.32356 0.12478 -2.593 0.00951 **
## wtyp2 -0.09080 0.11826 -0.768 0.44260
## wtyp3 0.78092 0.15180 5.145 2.68e-07 ***
## gend2 -0.12018 0.13402 -0.897 0.36989
## gend3 -0.14600 0.12065 -1.210 0.22624
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1120.21 on 817 degrees of freedom
## Residual deviance: 889.94 on 809 degrees of freedom
## ( 182 個の観測値が欠損のため削除されました )
## AIC: 907.94
##
## Number of Fisher Scoring iterations: 5
マクファデンの疑似決定係数を計算します。
1-(probit$deviance/probit$null.deviance)
## [1] 0.2055625
線形確率モデルを推定します。
lpm <- lm(marr~age+fem+edu+wtyp+gend, data=data1)
summary(lpm)
##
## Call:
## lm(formula = marr ~ age + fem + edu + wtyp + gend, data = data1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.96830 -0.33399 -0.05329 0.38846 0.97117
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.091854 0.118617 -9.205 < 2e-16 ***
## age 0.054351 0.003872 14.037 < 2e-16 ***
## fem 0.075950 0.033837 2.245 0.02507 *
## edu2 -0.085842 0.038726 -2.217 0.02692 *
## edu3 -0.116948 0.039096 -2.991 0.00286 **
## wtyp2 -0.028089 0.036592 -0.768 0.44292
## wtyp3 0.248055 0.046287 5.359 1.09e-07 ***
## gend2 -0.035842 0.041590 -0.862 0.38906
## gend3 -0.043555 0.037519 -1.161 0.24603
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4318 on 809 degrees of freedom
## ( 182 個の観測値が欠損のため削除されました )
## Multiple R-squared: 0.2497, Adjusted R-squared: 0.2423
## F-statistic: 33.65 on 8 and 809 DF, p-value: < 2.2e-16
表12-1 結婚経験の有無に関する推定結果
stargazer(logit, probit, lpm, type="text",star.cutoffs=c(0.1,0.05,0.01),keep.stat = c("n","ll","rsq"))
##
## ============================================
## Dependent variable:
## -----------------------------
## marr
## logistic probit OLS
## (1) (2) (3)
## --------------------------------------------
## age 0.279*** 0.170*** 0.054***
## (0.024) (0.014) (0.004)
##
## fem 0.414** 0.248** 0.076**
## (0.184) (0.109) (0.034)
##
## edu2 -0.430** -0.247** -0.086**
## (0.210) (0.125) (0.039)
##
## edu3 -0.549*** -0.324*** -0.117***
## (0.209) (0.125) (0.039)
##
## wtyp2 -0.162 -0.091 -0.028
## (0.199) (0.118) (0.037)
##
## wtyp3 1.298*** 0.781*** 0.248***
## (0.260) (0.152) (0.046)
##
## gend2 -0.198 -0.120 -0.036
## (0.225) (0.134) (0.042)
##
## gend3 -0.235 -0.146 -0.044
## (0.203) (0.121) (0.038)
##
## Constant -8.208*** -5.000*** -1.092***
## (0.740) (0.421) (0.119)
##
## --------------------------------------------
## Observations 818 818 818
## R2 0.250
## Log Likelihood -446.115 -444.970
## ============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
表12-2
平均的な限界効果
logitmfx(marr~age+fem+edu+wtyp+gend, data=data1, atmean=FALSE)
## Call:
## logitmfx(formula = marr ~ age + fem + edu + wtyp + gend, data = data1,
## atmean = FALSE)
##
## Marginal Effects:
## dF/dx Std. Err. z P>|z|
## age 0.0511405 0.0060835 8.4064 < 2.2e-16 ***
## fem 0.0759803 0.0335095 2.2674 0.023364 *
## edu2 -0.0778624 0.0371848 -2.0939 0.036266 *
## edu3 -0.1009618 0.0379023 -2.6637 0.007728 **
## wtyp2 -0.0296003 0.0363835 -0.8136 0.415896
## wtyp3 0.2465307 0.0471572 5.2279 1.715e-07 ***
## gend2 -0.0360236 0.0406958 -0.8852 0.376054
## gend3 -0.0432318 0.0371564 -1.1635 0.244622
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## dF/dx is for discrete change for the following variables:
##
## [1] "fem" "edu2" "edu3" "wtyp2" "wtyp3" "gend2" "gend3"
平均での限界効果
logitmfx(marr~age+fem+edu+wtyp+gend, data=data1, atmean=TRUE)
## Call:
## logitmfx(formula = marr ~ age + fem + edu + wtyp + gend, data = data1,
## atmean = TRUE)
##
## Marginal Effects:
## dF/dx Std. Err. z P>|z|
## age 0.0676135 0.0057313 11.7971 < 2.2e-16 ***
## fem 0.0998524 0.0440362 2.2675 0.023359 *
## edu2 -0.1026049 0.0491060 -2.0895 0.036666 *
## edu3 -0.1304636 0.0483281 -2.6995 0.006944 **
## wtyp2 -0.0388863 0.0475030 -0.8186 0.413011
## wtyp3 0.3127506 0.0570833 5.4788 4.281e-08 ***
## gend2 -0.0475023 0.0535470 -0.8871 0.375017
## gend3 -0.0569446 0.0488466 -1.1658 0.243702
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## dF/dx is for discrete change for the following variables:
##
## [1] "fem" "edu2" "edu3" "wtyp2" "wtyp3" "gend2" "gend3"
オッズ比
logitor(marr~age+fem+edu+wtyp+gend, data=data1)
## Call:
## logitor(formula = marr ~ age + fem + edu + wtyp + gend, data = data1)
##
## Odds Ratio:
## OddsRatio Std. Err. z P>|z|
## age 1.321563 0.031798 11.5878 < 2.2e-16 ***
## fem 1.512250 0.277997 2.2499 0.024455 *
## edu2 0.650828 0.136426 -2.0490 0.040462 *
## edu3 0.577310 0.120737 -2.6269 0.008617 **
## wtyp2 0.850834 0.169317 -0.8117 0.416938
## wtyp3 3.661019 0.950903 4.9964 5.842e-07 ***
## gend2 0.820639 0.184780 -0.8779 0.380002
## gend3 0.790228 0.160169 -1.1616 0.245413
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
順序のある3値以上の質的従属変数の回帰
線形モデルを推定します。
lm <- lm(lsatq~age+fem+mar+edu+wtyp, data=data1)
summary(lm)
##
## Call:
## lm(formula = lsatq ~ age + fem + mar + edu + wtyp, data = data1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0806 -0.5705 0.1548 0.6149 1.9618
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.872674 0.270837 14.299 < 2e-16 ***
## age -0.023841 0.009398 -2.537 0.011375 *
## fem 0.221707 0.074024 2.995 0.002826 **
## mar 0.535325 0.077356 6.920 9.1e-12 ***
## edu2 0.261437 0.084933 3.078 0.002152 **
## edu3 0.246689 0.084763 2.910 0.003708 **
## wtyp2 -0.291406 0.080600 -3.615 0.000318 ***
## wtyp3 -0.283835 0.103557 -2.741 0.006262 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9573 on 819 degrees of freedom
## ( 173 個の観測値が欠損のため削除されました )
## Multiple R-squared: 0.09269, Adjusted R-squared: 0.08493
## F-statistic: 11.95 on 7 and 819 DF, p-value: 1.442e-14
順序ロジットモデルを推定します。
ologit <- polr(lsat~age+fem+mar+edu+wtyp, data=data1, method = "logistic")
summary(ologit)
##
## Re-fitting to get Hessian
## Call:
## polr(formula = lsat ~ age + fem + mar + edu + wtyp, data = data1,
## method = "logistic")
##
## Coefficients:
## Value Std. Error t value
## age -0.04276 0.01835 -2.330
## fem 0.43123 0.14372 3.000
## mar 1.03753 0.15533 6.680
## edu2 0.50194 0.16581 3.027
## edu3 0.47593 0.16467 2.890
## wtyp2 -0.53462 0.15517 -3.445
## wtyp3 -0.56579 0.20313 -2.785
##
## Intercepts:
## Value Std. Error t value
## 1|2 -3.8654 0.5579 -6.9287
## 2|3 -2.3692 0.5339 -4.4374
## 3|4 -0.8926 0.5279 -1.6907
## 4|5 1.3020 0.5308 2.4529
##
## Residual Deviance: 2177.539
## AIC: 2199.539
## ( 173 個の観測値が欠損のため削除されました )
data1$used <- TRUE;
data1$used[na.action(ologit)] <- FALSE;
table(data1$used)
##
## FALSE TRUE
## 173 827
ologitn <- polr(lsat~1, data=data1, subset=used==1, method = "logistic")
summary(ologitn)
##
## Re-fitting to get Hessian
## Call:
## polr(formula = lsat ~ 1, data = data1, subset = used == 1, method = "logistic")
##
## No coefficients
##
## Intercepts:
## Value Std. Error t value
## 1|2 -3.2456 0.1831 -17.7289
## 2|3 -1.7932 0.0994 -18.0357
## 3|4 -0.4095 0.0710 -5.7668
## 4|5 1.6521 0.0947 17.4540
##
## Residual Deviance: 2256.12
## AIC: 2264.12
マクファデンの疑似決定係数を計算します。
1-(logLik(ologit)/logLik(ologitn))
## 'log Lik.' 0.0348303 (df=11)
表12-3 生活満足度の推定結果
stargazer(ologit, lm, type="text",star.cutoffs=c(0.1,0.05,0.01),keep.stat = c("n","rsq"))
##
## =========================================
## Dependent variable:
## ----------------------------
## lsat lsatq
## ordered OLS
## logistic
## (1) (2)
## -----------------------------------------
## age -0.043** -0.024**
## (0.018) (0.009)
##
## fem 0.431*** 0.222***
## (0.144) (0.074)
##
## mar 1.038*** 0.535***
## (0.155) (0.077)
##
## edu2 0.502*** 0.261***
## (0.166) (0.085)
##
## edu3 0.476*** 0.247***
## (0.165) (0.085)
##
## wtyp2 -0.535*** -0.291***
## (0.155) (0.081)
##
## wtyp3 -0.566*** -0.284***
## (0.203) (0.104)
##
## Constant 3.873***
## (0.271)
##
## -----------------------------------------
## Observations 827 827
## R2 0.093
## =========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
ologitやstargazerでは閾値の有意性が表示できないので、念のため以下で確認します。
ctable <- coef(summary(ologit))
##
## Re-fitting to get Hessian
p <- pnorm(abs(ctable[, "t value"]), lower.tail=FALSE)*2
(ctable <- cbind(ctable, "p value"=p))
## Value Std. Error t value p value
## age -0.0427615 0.0183502 -2.330302 1.979020e-02
## fem 0.4312341 0.1437242 3.000428 2.696009e-03
## mar 1.0375291 0.1553288 6.679568 2.396470e-11
## edu2 0.5019418 0.1658078 3.027251 2.467887e-03
## edu3 0.4759306 0.1646740 2.890138 3.850731e-03
## wtyp2 -0.5346155 0.1551677 -3.445405 5.702034e-04
## wtyp3 -0.5657916 0.2031318 -2.785342 5.347129e-03
## 1|2 -3.8654154 0.5578869 -6.928672 4.248080e-12
## 2|3 -2.3691896 0.5339114 -4.437421 9.104315e-06
## 3|4 -0.8926044 0.5279479 -1.690706 9.089303e-02
## 4|5 1.3019746 0.5307890 2.452904 1.417080e-02
表12-4 生活満足度に対する各属性のオッズ比
exp(coef(ologit))
## age fem mar edu2 edu3 wtyp2 wtyp3
## 0.9581399 1.5391558 2.8222349 1.6519259 1.6095113 0.5858945 0.5679104
表12-5 生活満足度に対する平均での限界効果
me_ol <- ocME(w = ologit, digits=4)
##
## Re-fitting to get Hessian
me_ol
## effect.1 effect.2 effect.3 effect.4 effect.5
## age 0.0013 0.0035 0.0054 -0.0049 -0.0053
## fem -0.0136 -0.0353 -0.0539 0.0490 0.0537
## mar -0.0307 -0.0799 -0.1274 0.0987 0.1394
## edu2 -0.0147 -0.0389 -0.0637 0.0511 0.0662
## edu3 -0.0140 -0.0370 -0.0604 0.0488 0.0626
## wtyp2 0.0189 0.0472 0.0638 -0.0685 -0.0613
## wtyp3 0.0214 0.0522 0.0650 -0.0772 -0.0615