まず、ライブラリを読み込んでおく。
library(lme4)#ロジット・パネル分析で使用
library(stargazer)#分析結果の表の出力に使用
データの読み込み
load("Replication data for The Oil Curse - Ross 2012.RData")#データ読み込み
パネルデータ 分析を行う際には、1列目をID、2列目を時間(この場合は年)にしておく。ロスのオリジナルのデータでは、6列目にid2があるのでこれをIDに利用し、7行目のyear
を時間(年)に使用する。このため、最初の5列を削除し、x2に格納してこれを使用する。
x2<-x[,-c(1:5)]#データ整形
ロスの解説にある通り、この分析では1960年から5年ごとので区切られた期間ダミーが投入される。これはロスのデータセットのYEAR1960_64
YEAR1965_69
YEAR1970_74
YEAR1975_79
YEAR1980_84
YEAR1985_89
YEAR1990_94
YEAR1995_99
YEAR2000_04
YEAR2005_09
に該当する。ただし、最後のYEAR2005_09
を投入しても共線性を産むために自動で削除されるので、以下のモデルには含んでいない。
#モデル1(統制変数のみ)
result1<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 + YEAR1960_64 + YEAR1965_69 + YEAR1970_74 +
YEAR1975_79+YEAR1980_84 + YEAR1985_89 + YEAR1990_94 + YEAR1995_99 +YEAR2000_04+(1|id2),data=x2,
family=binomial,control =glmerControl(optimizer = "bobyqa"),nAGQ = 12)
summary(result1)
Generalized linear mixed model fit by maximum likelihood (Adaptive
Gauss-Hermite Quadrature, nAGQ = 12) [glmerMod]
Family: binomial ( logit )
Formula: dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 + YEAR1960_64 +
YEAR1965_69 + YEAR1970_74 + YEAR1975_79 + YEAR1980_84 + YEAR1985_89 +
YEAR1990_94 + YEAR1995_99 + YEAR2000_04 + (1 | id2)
Data: x2
Control: glmerControl(optimizer = "bobyqa")
AIC BIC logLik deviance df.resid
795.8 876.4 -384.9 769.8 3626
Scaled residuals:
Min 1Q Median 3Q Max
-0.8869 -0.1446 -0.1061 -0.0693 10.1227
Random effects:
Groups Name Variance Std.Dev.
id2 (Intercept) 2.625 1.62
Number of obs: 3639, groups: id2, 125
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.3222185 1.3325368 -3.244 0.00118 **
logGDP_cap2000_sup_1 0.1392227 0.1505823 0.925 0.35519
log_authyrs_1 -0.0004891 0.1791622 -0.003 0.99782
YEAR1960_64 -1.8946762 0.7784805 -2.434 0.01494 *
YEAR1965_69 -2.1162789 0.7032924 -3.009 0.00262 **
YEAR1970_74 -2.2346520 0.6998821 -3.193 0.00141 **
YEAR1975_79 -1.5107291 0.5851695 -2.582 0.00983 **
YEAR1980_84 -1.4422578 0.5821806 -2.477 0.01324 *
YEAR1985_89 -0.7425178 0.5211552 -1.425 0.15423
YEAR1990_94 0.2523970 0.4498043 0.561 0.57471
YEAR1995_99 -0.9428532 0.5710373 -1.651 0.09871 .
YEAR2000_04 -0.2964313 0.4959482 -0.598 0.55004
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) lGDP_2 lg_t_1 YEAR1960 YEAR1965 YEAR1970 YEAR1975 YEAR1980
lGDP_2000__ -0.851
log_thyrs_1 -0.511 0.100
YEAR1960_64 -0.166 0.056 -0.014
YEAR1965_69 -0.155 0.037 -0.039 0.421
YEAR1970_74 -0.093 -0.006 -0.105 0.405 0.455
YEAR1975_79 -0.118 -0.010 -0.106 0.462 0.514 0.517
YEAR1980_84 -0.092 -0.022 -0.150 0.460 0.507 0.511 0.600
YEAR1985_89 -0.132 0.025 -0.195 0.449 0.499 0.504 0.595 0.630
YEAR1990_94 -0.303 0.106 -0.020 0.436 0.481 0.480 0.573 0.581
YEAR1995_99 -0.257 0.096 0.006 0.325 0.359 0.359 0.430 0.433
YEAR2000_04 -0.276 0.082 0.027 0.350 0.389 0.386 0.463 0.466
YEAR1985 YEAR1990 YEAR1995
lGDP_2000__
log_thyrs_1
YEAR1960_64
YEAR1965_69
YEAR1970_74
YEAR1975_79
YEAR1980_84
YEAR1985_89
YEAR1990_94 0.645
YEAR1995_99 0.482 0.564
YEAR2000_04 0.520 0.606 0.489
#モデル2(石油収入を追加)
result2<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 +logoil_gas_valuePOP_1+ YEAR1960_64 +
YEAR1965_69 +YEAR1970_74 + YEAR1975_79 + YEAR1980_84 + YEAR1985_89 + YEAR1990_94 + YEAR1995_99 +
YEAR2000_04+(1|id2),data=x2, family=binomial,control =glmerControl(optimizer = "bobyqa"),nAGQ = 12)
モデル1のlog_authyrs_1
の推定値はロスの分析結果と異なるが、おそらくStataとRの間での計算処理の違いだと思われる。統計ソフトが実行するパネル・ロジット分析には複雑な計算が採用されており、様々なオプションでこれを調整するが、その数学的背景は筆者の能力を超えるので、ここでは取り扱わ(え)ない。ただし、この変数の推定値の符号が負であり、また統計的に有意でないことはロスの分析と一致しているために、大きな問題ではないと思われる。モデル2以降の分析結果はほぼロスの分析と一致するので、summary( )
を使って結果を表示していない。
モデル3とモデル4では、サンプルの対象年を限定する。このため、ここではsubset
を使って対象年の異なる部分集合を二つ作成して使用する。なお、サンプルに期間の制限がかけられているため、それに合わせて投入する期間ダミーを調整した。
#モデル3(1960-1979年)
pre1980<-subset(x2,year<1980)
result3<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 +logoil_gas_valuePOP_1+ YEAR1960_64 + YEAR1965_69 +
YEAR1970_74 +(1|id2),data=pre1980, family=binomial,control = glmerControl(optimizer = "bobyqa"),nAGQ = 12)
#モデル4(1980-2006)
post1980<-subset(x2,year>1979)
result4<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 +logoil_gas_valuePOP_1+YEAR1980_84 + YEAR1985_89 +
YEAR1990_94 + YEAR1995_99 +YEAR2000_04+(1|id2),data=post1980, family=binomial,
control = glmerControl(optimizer = "bobyqa"), nAGQ = 12)
この二つのモデルの分析結果は、ロスの分析結果とほぼ同じである。
#モデル5(石油収入と南米ダミーの交差項)
result5<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 +logoil_gas_valuePOP_1+ latin_logoil_1+YEAR1960_64 +
YEAR1965_69 +YEAR1970_74 + YEAR1975_79 + YEAR1980_84 + YEAR1985_89 + YEAR1990_94 + YEAR1995_99 +
YEAR2000_04+(1|id2),data=x2, family=binomial,control = glmerControl(optimizer = "bobyqa"), nAGQ = 12)
#モデル6(過去の民主制、経済成長、ムスリム人口)
result6<-glmer(dem_transition ~ logGDP_cap2000_sup_1 + log_authyrs_1 +logoil_gas_valuePOP_1+latin_logoil_1+
dem_prior_update+ gdpgrowth_alt_new_1+ mus_pct_sup_1+YEAR1960_64+YEAR1965_69 +YEAR1970_74 +
YEAR1975_79 +YEAR1980_84 + YEAR1985_89 + YEAR1990_94 +YEAR1995_99 +YEAR2000_04+(1|id2),data=x2,
family=binomial, control = glmerControl(optimizer = "bobyqa"),nAGQ = 12)
Warning in optwrap(optimizer, devfun, start, rho$lower, control = control, :
convergence code 1 from bobyqa: bobyqa -- maximum number of function evaluations
exceeded
この二つのモデルも、ロスの分析結果とほぼ同じである。なお、モデル6には上記のwarningが表示されるが、ここでは無視する。
stargazer
を用いて分析結果を表で記述する。ロスの表は年次や国家数、観察数、欠損値の割合を含むが、この中で観察数以外はRでは別途算出する必要があるので、ここでは表示していない。
stargazer(result1,result2,result3,result4,result5,result6,keep =c("logGDP_cap2000_sup_1","log_authyrs_1",
"logoil_gas_valuePOP_1",
"latin_logoil_1","dem_prior_update",
"gdpgrowth_alt_new_1","mus_pct_sup_1"),
keep.stat = "n",type = "html")
Dependent variable: | ||||||
dem_transition | ||||||
(1) | (2) | (3) | (4) | (5) | (6) | |
logGDP_cap2000_sup_1 | 0.139 | 0.333* | 0.406 | 0.124 | 0.256 | 0.225 |
(0.151) | (0.171) | (0.254) | (0.134) | (0.168) | (0.162) | |
log_authyrs_1 | -0.0005 | -0.045 | -0.122 | -0.438*** | 0.010 | 0.387* |
(0.179) | (0.182) | (0.303) | (0.141) | (0.182) | (0.229) | |
logoil_gas_valuePOP_1 | -0.179** | -0.078 | -0.129** | -0.292*** | -0.197** | |
(0.079) | (0.114) | (0.059) | (0.092) | (0.090) | ||
latin_logoil_1 | 0.673*** | 0.414*** | ||||
(0.152) | (0.143) | |||||
dem_prior_update | 1.915*** | |||||
(0.465) | ||||||
gdpgrowth_alt_new_1 | -0.054*** | |||||
(0.017) | ||||||
mus_pct_sup_1 | -0.721 | |||||
(0.551) | ||||||
Observations | 3,639 | 3,507 | 1,297 | 2,210 | 3,507 | 3,422 |
Note: | p<0.1; p<0.05; p<0.01 |