Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Help with Double filter instrumental variable estimation of unblanced, dynamic data panels with xtdpdgmm

    Dear all, I am trying to estimate some unbalanced,dynamic panels using macroeconomic data at country level and quarterly frequency. The contributions depend the comparing regressor coefficients and characterizing country heterogeneity. Any credible claim will depend on the robustness of coefficient confidence intervals and of the regressors endogeneity assumptions. The challenge is small N (21 countries) and large T (84 quarters). Therefore, I found xtdpdgmm to be suitable implementation of double filter (DF) estimation. For sake of credibility and robustness, I have also repeated the same exercise, same data sample, same endogeneity assumptions, same instruments whenever possible, using both ivreg2 and xtabond2 (sys-GMM and Forward Orthogonal FO estimations).
    1. ivreg2 TSLS with lagged backward orthogonal instruments computed by tstransform "http://www.kripfganz.de/stata/" and with time dummy (3 Pre-GFC, 2 GFC, 1 Post-GFC), robust cluster(country, quarter)
    2. ivreg2 GMM2S ditto, robust cluster(country)
    3. ivreg2 GMM2S ditto, robust cluster(quarter)
    4. xtabond2 sys-GMM robust two svmat, with time dummy
    5. xtdpdgmm sys-GMM vce(robust) two w(un)
    6. xtabond2 sys-GMM robust two svmat, with time dummy instruments in level only.
    7. xtdpdgmm sys-GMM vce(robust) two w(un), with time dummy instruments in level only.
    8. xtabond2 FO robust two svmat, with forward orthogonal instruments (orthog option) and no time dummy
    9. xtdpdgmm FO vce(robust) two w(un), with model(FOD) and no time dummy
    10. xtdpdgmm DF sys-GMM vce(robust) two w(un), with model(FOD) and BODEV option on the instruments and with extra non-linear iid instrument and with time dummy
    11. xtdpdgmm DF with extra non-linear iid instrument
    Dependent and independent variables are filtered, hence they have very near zero mean.

    In all, I have kept lag order low in attention to the usual recommendation about the size of cross-section N=21. In all, specification where chosen according to a bit of theory and bit of attentions to autocorrelation, overidentification, and a slight miss of underidentification test. I never manage to satisfy both relevance and valid overidentifying restrictions. Weak instrument tests seem to be acceptable. I have loosely followed advices in [Kivet 2019], however minding model parsimony. I have also used MMSC and Hausman tests to guide specification choices, therefore mitigating arbitrary favorable options. I have learned a lot by reading [Kripfganz 2019] and his highly useful introduction in https://www.stata.com/meeting/uk19/s..._kripfganz.pdf

    The specifications (1)-(11) are as follows (postestimation tests omitted).

    Code:
    tstransform gdp_ , bdemean generate(b_gdp_)
    ...
    /// 1
    ivreg2 gdp_ L.gdp_ ext_impulse_ X_ i.dmy_te ( L.rra_ int_impulse_ = ///
       L1.b_gdp_ L2.b_gdp_ L3.b_gdp_  ///
       L1.b_rra_ L2.b_rra_ L3.b_rra_  ///
       L1.b_intIMP_ L2.b_intIMP_ L3.b_intIMP_ ///
       b_extIMP_ L1.b_extIMP_ L2.b_extIMP_ L3.b_extIMP_ ///
       b_X_ L1.b_X_ L2.b_X_ L3.b_X_  ///
       2bn.dmy_te 3.dmy_te ///
       D.rr_ D.ext_impulse_ ///
    ) , ///
    cluster(_cty _qdate) robust endog(int_impulse_ L.rra_) level(95) noconst
    /// 2
    ivreg2 gdp_ L.gdp_ ext_impulse_ X_ i.dmy_te ( L.rra_ int_impulse_ = ///
       L1.b_gdp_ L2.b_gdp_ L3.b_gdp_  ///
       L1.b_rra_ L2.b_rra_ L3.b_rra_  ///
       L1.b_intIMP_ L2.b_intIMP_ L3.b_intIMP_ ///
       b_extIMP_ L1.b_extIMP_ L2.b_extIMP_  ///
       b_X_ L1.b_X_ L2.b_X_  ///
       2bn.dmy_te 3.dmy_te ///
       D.rr_ D.ext_impulse_ ///
    ) , ///
    gmm2s cluster(_cty ) robust endog(int_impulse_ ) orthog(X_) partial(i.dmy_te) ffirst level(95) noconst
    /// 3        
    ivreg2 gdp_ L.gdp_ ext_impulse_ X_ i.dmy_te ( L.rra_ int_impulse_ = ///
       L1.b_gdp_ L2.b_gdp_ L3.b_gdp_  ///
       L1.b_rra_ L2.b_rra_ L3.b_rra_  ///
       L1.b_intIMP_ L2.b_intIMP_ L3.b_intIMP_ ///
       b_extIMP_ L1.b_extIMP_ L2.b_extIMP_ L3.b_extIMP_  ///
       b_X_ L1.b_X_ L2.b_X_ L3.b_X_ ///
       2bn.dmy_te 3.dmy_te ///
       D.rr_ D.ext_impulse_ ///
    ) , ///
    gmm2s cluster(_qdate ) robust endog(int_impulse_ ) orthog(X_) ffirst level(95) noconst
     
    gen d2_dmy_te = 2bn.dmy_te
    gen d3_dmy_te = 3.dmy_te
    /// 4
    xtabond2 L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             gmm(gdp_ rra_ int_impulse_, eq(diff)  collapse lag(1 3) ) /// 
             gmm(ext_impulse_ X_ , eq(diff)  collapse lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , eq(level)  collapse  lag(0 0) )  ///
             gmm((d2_dmy_te d3_dmy_te), eq(level)  lag(0 0))  ///         
             robust two level(95) noconst svmat
    /// 5
    xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             model(diff)  collapse ///
             gmm(gdp_ rra_  int_impulse_ , lag(1 3) ) /// 
             gmm(ext_impulse_ X_, lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , diff m(l) collapse lag(0 0) )  ///
             gmm((i.dmy_te ) , diff m(l)  lag(0 0) )  ///
             vce(robust) two w(un) level(95) overid noconst
    /// 6         
    xtabond2 L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             gmm(gdp_ rra_ int_impulse_, eq(diff)  collapse lag(1 3) ) /// 
             gmm(ext_impulse_ X_ , eq(diff)  collapse lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , eq(level)  collapse  lag(0 0) )  ///
             gmm((d2_dmy_te d3_dmy_te), passthru eq(level)  lag(0 0))  ///         
             robust two level(95) noconst svmat
    /// 7          
    xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             gmm(gdp_ rra_  int_impulse_ , model(diff)  collapse lag(1 3) ) /// 
             gmm(ext_impulse_ X_, model(diff)  collapse lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , diff model(level) collapse lag(0 0) )  ///
             gmm((d2_dmy_te d3_dmy_te ) , model(level) collapse lag(0 0) )  ///
             vce(robust) two w(un) level(95) overid noconst
    /// 8
    xtabond2 L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_)  , /// 
             gmm(gdp_ rra_ int_impulse_, eq(diff) orthog collapse lag(1 3) ) /// 
             gmm(ext_impulse_ X_ , eq(diff)  orthog collapse lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , eq(level)  collapse  lag(0 0) )  ///
             robust two level(95) svmat
    /// 9 
    xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_)  , /// 
             model(fod)  collapse ///
             gmm(gdp_ rra_  int_impulse_ , lag(1 3) ) /// 
             gmm(ext_impulse_ X_, lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , diff model(level) collapse lag(0 0) )  ///
             vce(robust) two w(un) level(95) overid 
    /// 10
    xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             model(fod)  collapse ///
             gmm(gdp_ rra_  int_impulse_ , bodev lag(1 3) ) /// 
             gmm(ext_impulse_ X_, bodev lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , diff m(l) collapse lag(0 0) )  ///
             iv((i.dmy_te ) ,  m(l)  lag(0 0) )  ///
             vce(robust) two w(un) level(95) overid noconst
    /// 11
    xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_impulse_) L(0/0).(ext_impulse_) L(0/0).(X_) i.dmy_te , /// 
             model(fod)  collapse ///
             gmm(gdp_ rra_  int_impulse_ , bodev lag(1 3) ) /// 
             gmm(ext_impulse_ X_, bodev lag(0 2) ) ///
             gmm((rr_ ext_impulse_) , diff m(l) collapse lag(0 0) )  ///
             iv((i.dmy_te ) ,  m(l)  lag(0 0) )  ///
             nl(iid) /// 
             vce(robust) two w(un) level(95) overid noconst
    For sake of space I summarize de results in the following table.

    Click image for larger version

Name:	rob.png
Views:	1
Size:	128.5 KB
ID:	1584744


    Qualitatively all results match in terms of signal and coefficient significance, however the magnitude of the point estimation of the coefficient of interest X varies wildly from -.0014 to -0.0093, sometimes out 95% of confidence band. They match for estimations (4) and (5), by following Kripfganz’s presentation. Then, restricting time dummy instrument to levels only output somewhat different coefficients (6) and (7). Using forward orthogonal instruments makes a big difference, but I failed to keep xtabond2 (8) and xtdpdgmm (9) more comparable . Finally, double filter really do make a difference, see (10). I was expecting a more precise estimation with double filter [Hayakawa et al. 2019], however the amount come to me as a surprise. Note that I have tried to use backward mean deviation instruments with ivreg2 see (1)-(3) with results far from comparable. Adding an extra non-linear instrument do not change much, see from (10) to (11), but helps with overidentification restrictions.

    Since there is no theoretical or empirical benchmark against which to contrast credibility of coefficient for regressor X, and since I am new to dynamic panels and to Stata, I am somewhat lost. I will much appreciate any comment that can help me understanding or perhaps justifying the estimation strategy based on DF. If I made any mistake, please, I would also be glad to know. I am happy to provide extra details if necessary, for now I kept the post more concise.

  • #2
    The models are quite complex, which makes it hard to make any meaningful statement about what might cause the differences between the estimates.

    The ivreg2 estimations (1)-(3) are using backward-orthogonally transformed instruments for the level model. It is not guaranteed that those instruments are uncorrelated with the group-specific effects (similar to first-differenced instruments for the level model).

    The two-step GMM estimators (4)-(11) may perform poorly given the large-T, small-N setup because their estimate of the optimal cluster-robust weighting matrix might be quite imprecise.

    A reason for the differences between the xtabond2 and xtdpdgmm estimates (6) and (7) might be that you used collapsed time dummies as instruments with xtdpdgmm but uncollapsed ones with xtabond2.

    The xtabond2 specification (8) uses backward-orthogonally transformed instruments for the first-differenced model (not a double-filtered estimation), which is a bit weird.

    Notice that if lag 1 of an instrument is valid for the first-differenced model, then already lag 0 of that instrument is valid for the forward-orthogonal model, at least when you use xtdpdgmm.

    I do not have much experience with double filtering, so not sure what to expect from it. I tend to be skeptical about the usefulness of backward-orthogonally transformed instruments. It is not clear to me what we really gain from it, in particular if your variables are already filtered with a mean near zero.
    https://www.kripfganz.de/stata/

    Comment


    • #3
      Dr. Kripfganz, it is very kind of you to take time to investigate these complex models with little context. I deeply appreciate your help!

      You quickly nailed, the collapsing of instruments cause the difference between estimates (6) and (7). That’s fixed! You very right about (8), it was a naïve mistake.
      The ivreg2 estimations (1)-(3) were meant for robustness checks against xtabond2 and xtdpdgmm, but mostly for me to understand more about backward-orthogonally transformed instruments, which are new to me.

      The large-T, small-N setup is usual for dynamic panels with macroeconomic variables, Unfortunately, as you pointed: “the two-step GMM estimators may perform poorly” in these settings. That was my rationale for seeking alternatives. When I have come across your presentation https://www.stata.com/meeting/uk19/s..._kripfganz.pdf, with following fragment in slide 72, it turned double filtering cogent and xtdpdgmm implementation very appealing:

      “For models with predetermined variables (and motivated for samples with large T), Hayakawa, Qi, and Breitung (2019) suggest a double-filter IV / GMM estimator that combines
      forward-orthogonal deviations of the error term with backward-orthogonal deviations of the instruments.”


      Your reply already help me and convinced me that I must dig deeper and learn more about this new approach for instrumental variables. I shall return to your paper, and at least the ones from Hayakawa et al 2019, and Kivet 2019. When I have something more solid, I shall post back here to share the learning with others.

      Many thanks again and best regards!

      Comment


      • #4
        After revisiting the literature, reflecting and trying to incorporate the kind and invaluable comments from Dr. Kripfganz in the previous post, I tried to did the following exercises over the same large T=84 small N=21 unbalanced dynamic panel of macroeconomic data at country level.
        Thus, I kept backward-orthogonally transformed instruments only for the variable of interest, which does not show a mean near zero in the sample.
        1. ivreg2 GMM2S, robust cluster(quarter), with lagged backward orthogonal instruments only computed by tstransform "http://www.kripfganz.de/stata/" and with time dummy (3 Pre-GFC, 2 GFC, 1 Post-GFC), robust cluster(country, quarter)
        2. xtabond2 sys-GMM robust two svmat, with time dummy instruments in level only.
        3. xtdpdgmm sys-GMM vce(robust) two w(un), with time dummy instruments in level only.
        4. xtabond2 FOD robust two svmat, with forward orthogonal instruments (orthog option), making explicit the distinction between predetermined variables and endogenous one s
        5. xtdpdgmm FOD vce(robust) two w(un), making explicit the distinction between, with model(FOD)
        6. xtdpdgmm DF sys-GMM vce(robust) two w(un), with model(FOD) and BODEV option on the instruments for X.
        7. xtdpdgmm DF ditto, with extra non-linear iid instrument
        I am aware of https://www.statalist.org/forums/for...to-do-xtdpdgmm. Hence, all exercises where run on Stata 16 and the latest versions of ivreg2, xtabond2 and xtdpdgmm packages, to rule out known bugs.
        The specifications (1)-(7) are as follows (postestimation tests omitted).

        Code:
        ....
        /// 1
        ivreg2 gdp_ L.gdp_ ext_ X_ i.dmy_te ( L.rra_ int_ = ///
               gdp_ L1.gdp_ L2.gdp_ L3.gdp_  ///
               L1.rr_ L2.rr_ L3.rr_   ///
               L1.int_ L2.int_ L3.int_  ///
               ext_ L1.ext_ L2.ext_ L3.ext_  ///
               b_X_ L1.b_X_ L2.b_X_  L3.b_X_ ///
               2bn.dmy_te 3.dmy_te ///
               d.X_ d.ext_ ///
        ) , ///
        gmm2s cluster(_qdate ) robust endog(int_ ) orthog(X_) ffirst level(95) noconst
        
        gen d2_dmy_te = 2bn.dmy_te
        gen d3_dmy_te = 3.dmy_te
        /// 2
        xtabond2 L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te , /// dmy_gfc dmy_covid, ///
                 gmm(gdp_ rra_ int_, eq(diff)  collapse lag(1 3) ) /// 
                 gmm(ext_ X_ , eq(diff)  collapse lag(0 2) ) ///
                 gmm((X_ ext_) , eq(level)  collapse  lag(0 0) )  ///
                 gmm((d2_dmy_te d3_dmy_te), passthru eq(level) collapse lag(0 0))  ///         
                 robust two level(95) noconst svmat 
        /// 3
        xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te , /// dmy_gfc dmy_covid, ///
                 gmm(gdp_ rra_  int_ , model(diff)  collapse lag(1 3) ) /// 
                 gmm(ext_ X_, model(diff)  collapse lag(0 2) ) ///
                 gmm((X_ ext_) , diff model(level) collapse lag(0 0) )  ///
                 gmm((d2_dmy_te d3_dmy_te ) , model(level) collapse lag(0 0) )  ///
                 vce(robust) two w(un) level(95) overid noconst
        /// 4
        xtabond2 L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te , /// dmy_gfc dmy_covid, ///
                orthogonal ///
                iv(L(1/3).gdp_ , eq(diff) passthru mz) /// 
                gmm(rr_ int_, eq(diff) collapse lag(2 4) ) /// 
                iv(L(1/4).ext_ , eq(diff) passthru mz ) ///
                iv(L(1/4).X_  , eq(diff) passthru mz ) ///
                iv(D.ext_ D.X_, eq(level) passthru mz )  ///
                iv(d2_dmy_te d3_dmy_te , eq(level)   )  ///
                robust two level(95) svmat  noconst
        /// 5          
        xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te  , /// dmy_gfc dmy_covid, ///
                model(fodev)   ///
                iv(gdp_ ,  lag(0 2) ) /// 
                gmm(rr_  int_ , collapse lag(1 3) ) /// 
                iv(ext_,  lag(0 3) ) ///
                iv(X_ ,  lag(0 3) ) ///
                iv(ext_ X_ , diff model(level) lag(0 0) )  ///
                iv(d2_dmy_te d3_dmy_te  ,  model(level)  lag(0 0) )  ///
                vce(robust) two w(un) level(95) noresc overid noconst
        /// 6
        xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te  , /// dmy_gfc dmy_covid, ///
                model(fodev)   ///
                iv(gdp_ ,  lag(0 2) ) /// 
                gmm(rr_  int_ , collapse lag(1 3) ) /// 
                iv(ext_,  lag(0 3) ) ///
                iv(X_ , bodev lag(0 3) ) ///
                iv(ext_ X_ , diff model(level) lag(0 0) )  ///
                iv(i.dmy_te  ,  model(level)  lag(0 0) )  ///
                vce(robust) two w(un) level(95) overid noconst
        /// 7
        xtdpdgmm L(0/1).gdp_ L(1/1).(rra_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_te  , /// dmy_gfc dmy_covid, ///
                model(fodev) collapse  ///
                iv(gdp_ ,  lag(0 2) ) /// 
                gmm(rr_  int_ , collapse lag(1 3) ) /// 
                iv(ext_,  lag(0 3) ) ///
                iv(X_ , bodev lag(0 3) ) ///
                iv(ext_ X_ , diff model(level) lag(0 0) )  ///
                iv(i.dmy_te  ,  model(level)  lag(0 0) )  ///
                nl(iid) ///
                vce(robust) two w(un) level(95) overid noconst
        For sake of space I summarize de results in the following table.

        Click image for larger version

Name:	robust.png
Views:	1
Size:	85.6 KB
ID:	1586087


        The outcomes from estimations (2) and (3) match for instruments in difference. The outcomes from estimations (4) and (5) are very up to 0.0001 precision, for forward-orthogonally transformed instruments. However, these are quite different from the outcomes from later pair of estimations. When I include option backward-orthogonally transformation for the instruments for X, I obtain again comparable magnitudes.

        The motivation and rationale for investing in Double-Filtering as a the need to bias correcting mechanism still persists [Hayakawa, Qi, and Breitung 2019]. They transcend the concrete example, since small N is quite often for macroeconomic set ups. I am still trying to learn and understand better the sweet spots of each technique and each implementation. Therefore, I shall much appreciate any further comment bringing about explanations, errors, or suggestions. Many thanks in advance!

        Comment


        • #5
          I am afraid I have no further explanation for the differences you observe.
          https://www.kripfganz.de/stata/

          Comment


          • #6
            Thank you very much for your kind and prompt attention!

            For this particular sample, I am squeezed into employing the most instruments possible but not exceeding the size of panel cross-section N=21. Moreover, I am also constrained by which variable can be defensibly taken as exogeneous (modulo robustness checks). Hence, I am inclined to drop alternatives (2) to (5) since none satisfy AB test for zero autocorrelation.
            I have also tried another estimation (8) where the instruments are assumed in level “mode(level)”, except my variable of interest X, which as instrumented as follows:

            Code:
            xtdpdgmm L(0/1).gdp_ L(1/1).(rr_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_,
                                        model(level) collapse   ///
                                        iv(gdp_ ,  lag(0 3) ) ///
                                        gmm(rr_  int _ , collapse lag(1 3) ) ///
                                        iv(ext _,  lag(0 3) ) ///
                                        iv(X_ , model(fodev) bodev lag(0 3) ) ///
                                        iv(ext_ X_ , diff model(level) lag(0 0) )  ///
                                        iv(i.dmy_te  ,  model(level)  lag(0 0) )  ///
                                        vce(robust) two w(un) level(95) overid noconst
            The estimation results are quite comparable to those of (6) and (7). In fact, by applying the Generalized Hausman test, I fail to reject that coefficients do not systematically differ for estimations (6), (7) with noser, and (8). This test reject and suggest differences between (6) and (7) iid only. Assessing Andrews-Lu model and moment selection criteria, I obtain the following:

            Code:
                   Model | ngroups          J  nmom  npar   MMSC-AIC   MMSC-BIC  MMSC-HQIC
            -------------+----------------------------------------------------------------
                   (6)   |      21    20.4833    21     7    -7.5167   -22.1400   -11.0020
               (7) iid   |      21    20.6709    22     7    -9.3291   -24.9969   -13.0634
               (7) noser |      21    20.4850    21     7    -7.5150   -22.1383   -11.0004
                   (8)   |      21    20.4169    21     7    -7.5831   -22.2064   -11.0685
            For every one of these, there is still room to improve on Sargan-Hansen overidentification test, by adding extra lags, but at the expenses of higher p-values for Kleibergen and Paap underindentification test. Little room for maneuvering here.

            I am still unsure if it is worthy having and extra nonlinear iid instrument for the default specification, or keep it for robustness comparison.
            Last edited by Mat Aragao; 15 Dec 2020, 12:52.

            Comment


            • #7
              What you do here does not work:
              Code:
              xtdpdgmm L(0/1).gdp_ L(1/1).(rr_) L(0/0).(int_) L(0/0).(ext_) L(0/0).(X_) i.dmy_,
                                          model(level) collapse   ///
                                          iv(gdp_ ,  lag(0 3) ) ///
                                          gmm(rr_  int _ , collapse lag(1 3) ) ///
                                          iv(ext _,  lag(0 3) ) ///
              ...
              You are specifying untransformed instruments for the level equation. In particular, you are specifying the contemporaneous dependent variable as it is in the set of instruments.

              The nonlinear moments can help with (under-)identification problems if you are not exploiting Blundell/Bond-style instruments for the level model.

              Like overidentification tests, a generalized Hausman test should only be applied to test nested models, when the model is potentially misspecified with the estimator that employs stronger assumptions (but possibly efficient if these additional assumptions are valid). This strategy is a bit what I am missing here. Similar to the section on model specification in my 2019 London Stata Conference presentation, you might want to start with a model that requires only a few weak assumptions.

              I am not a fan of experimenting with different specifications in an empirical application, such as forward-orthogonal deviations (with or without backward-orthogonally transformed instruments) or first differences. Observed differences between those estimators do not tell us anything about the underlying assumptions because they all rely on the same set of assumptions. Ideally, before you even look at the estimates, decide about FOD-BOD vs. FOD vs. DIFF etc and then stick to that decision.

              I understand that you are trying to make sense of these differences and would like to understand which approach works better given the nature of your data set. But you won't find that answer in your data. Besides looking at the theoretical discussions in the econometric literature, you could alternatively try to learn something from simulations where you know the true data-generating process.
              https://www.kripfganz.de/stata/

              Comment


              • #8
                Many thanks again for your time and attention! It is great to learn from you!
                You have observed rightly that I am trying to learn beyond the concrete example onto how to properly exploit dynamic panel estimators in macroeconomic setups.

                These clarifications are useful! Moreover, the last three guidelines are really enlightening, not only for me, but also to other readers of this forum!
                I shall restructure my course of actions accordingly!

                Best wishes for a season of peace and joy!

                Comment

                Working...
                X