I want to replicate Blundell and Bond (2000) Table III in R. I'm using the function pgmm
from package plm
, which (apparently) replicates the approach of Stata's xtabond2
(Roonman, 2009). The estimates I get are qualitatively similar, but not the same, the Arellano-Bond test of serial correlation suggests the moment conditions are invalide....and I'm sad to say I don't yet see how to recover the production function coefficients.
The authors of plm
have a useful companion textbook: Millo and Croissant 2018 Panel Data Econometrics in R. I get the data from there (associated packaged pder), and follow section 7.5 for set-up and diagnostics. Here is a self-contained example:
library(plm)
library(pder) # contains the Blundell and Bond dataset
#detach(package:dplyr) # if loaded, dplyr::lag masks plm::lag
data('RDPerfComp')
str(RDPerfComp) #n.b. - variables already in logs (see ?RDPerfComp)
And now to replicate some of the columns from Blundell and Bond 2000 Table 3:
# "OLS levels"
ols<-plm(y~lag(y,1) + lag(n,0:1) + lag(k,0:1),
data=RDPerfComp, index=c("id","year"),
effect="twoways", model = "pooling")
summary(ols)
# "Within groups"
within_groups<-plm(y~lag(y,1) + lag(n,0:1) + lag(k,0:1),
data=RDPerfComp, index=c("id","year"),
effect="twoways", model = "within")
summary(within_groups)
# "SYS t-2"
sys_t2<-pgmm(
y ~ lag(y,1) + lag(n,0:1) + lag(k,0:1) |
lag(y,2:99) + lag(n,2:99) + lag(k,2:99),
data=RDPerfComp, index=c("id","year"),
effect="twoways",model="onestep",
transformation="ld"
)
summary(sys_t2,robust=TRUE,time.dummies=FALSE) # both options can be provided directly in pgmm()
# "SYS t-3"
sys_t3<-pgmm(
y ~ lag(y,1) + lag(n,0:1) + lag(k,0:1) |
lag(y,3:99) + lag(n,3:99) + lag(k,3:99),
data=RDPerfComp, index=c("id","year"),
effect="twoways",model="onestep",
transformation="ld"
)
summary(sys_t3,robust=TRUE)
The results are very similar for the pooled OLS model, almost identical for fixed effects/within model, and only "qualitatively similar" (magnitudes, signs) for the SYS-GMM models, with some exceptions (notable the estimate for the y_t-1 coefficient). More concerning, the Sargan-Hansen test appears to reject the null of valid instruments for both the SYS-GMM models:
sargan(sys_t2) # same statistic as reported by summary()
sargan(sys_t3)
...and the Arellano-Bond moment condition test appears to reject the null of no serial correlation, suggesting that the moment conditions are invalid
mtest(sys_t2) # you can make this robust using vcovc =
mtest(sys_t3)
So my questions:
- Am I specifying these wrong (probably - my first try with gmm) or are we just looking at the results of different machinery?
- What could explain the diagnostic test results, which appear to say the SYS-GMM models aren't valid?
- How do we get Beta_n, Beta_k, and rho (the production function parameters, as given in the middle panel of Table III) from these results? (EDIT: OK, as stated in the paper, via testing and imposing the coefficient restrictions using "a minimum distance estimator" see eq'n 2.3 and text below in original paper)
(yes these are 'advanced undergrad' type questions, no this is not coursework)