Dear Stata users,
I would like to use a loop to run the code for GMM estimation following De Locker. I need the loop because I would like to run my code for every industry in my data.
The code I am using without a loop works well:
Adding the loop, however, did not work:
The error would be like this:
Please could help with this and let me know what is wrong with my loop?
Thanks a lot,
JL
I would like to use a loop to run the code for GMM estimation following De Locker. I need the loop because I would like to run my code for every industry in my data.
The code I am using without a loop works well:
Code:
mata: void GMM_DLW(todo,betas,crit,g,H) { PHI=st_data(.,("phi")) PHI_LAG=st_data(.,("phi_lag")) Z=st_data(.,("const","l_lag","k")) X=st_data(.,("const","l","k")) X_lag=st_data(.,("const","l_lag","k_lag")) Y=st_data(.,("y")) C=st_data(.,("const")) OMEGA=PHI-X*betas' OMEGA_lag=PHI_LAG-X_lag*betas' OMEGA_lag_pol=(C,OMEGA_lag) g_b = invsym(OMEGA_lag_pol'OMEGA_lag_pol)*OMEGA_lag_pol'OMEGA XI=OMEGA-OMEGA_lag_pol*g_b crit=(Z'XI)'(Z'XI) } void GMM_DLW_TL(todo,betas,crit,g,H) { PHI=st_data(.,("phi")) PHI_LAG=st_data(.,("phi_lag")) Z=st_data(.,("const","l_lag","k","l_lag2","k2","l_lagk")) X=st_data(.,("const","l","k","l2","k2","lk")) X_lag=st_data(.,("const","l_lag","k_lag","l_lag2","k_lag2","l_lagk_lag")) Y=st_data(.,("y")) C=st_data(.,("const")) OMEGA=PHI-X*betas' OMEGA_lag=PHI_LAG-X_lag*betas' OMEGA_lag_pol=(C,OMEGA_lag) g_b = invsym(OMEGA_lag_pol'OMEGA_lag_pol)*OMEGA_lag_pol'OMEGA XI=OMEGA-OMEGA_lag_pol*g_b crit=(Z'XI)'(Z'XI) } void DLW() { S=optimize_init() optimize_init_evaluator(S, &GMM_DLW()) optimize_init_evaluatortype(S,"d0") optimize_init_technique(S, "nm") optimize_init_nmsimplexdeltas(S, 0.1) optimize_init_which(S,"min") optimize_init_params(S,(1,0.8,0.2)) /**optimize_init_params(S,("OLS"))*/ p=optimize(S) p st_matrix("beta_dlw",p) } void DLW_TRANSLOG() { S=optimize_init() optimize_init_evaluator(S, & GMM_DLW_TL()) optimize_init_evaluatortype(S,"d0") optimize_init_technique(S, "nm") optimize_init_nmsimplexdeltas(S, 0.1) optimize_init_which(S,"min") optimize_init_params(S,(0,0,0,0,0,0)) p=optimize(S) p st_matrix("beta_dlwtranslog",p) } end cap program drop dlw program dlw, rclass preserve sort ordinal year mata DLW() end cap program drop dlw_translog program dlw_translog, rclass preserve sort ordinal year mata DLW_TRANSLOG() end reg y l k i.year gen beta_lols=_b[l] gen beta_kols=_b[k] gen Markup_ols=_b[l]/alpha_l dlw gen beta_c1=beta_dlw[1,1] gen beta_l1=beta_dlw[1,2] gen beta_k1=beta_dlw[1,3] gen Markup_dlw1=beta_l1/alpha_l gen omega_dlw1=phi-beta_l1*l-beta_k1*k dlw_translog gen betal_tl1=beta_dlwtranslog[1,2] gen betal_tl2=beta_dlwtranslog[1,4] gen betak_tl1=beta_dlwtranslog[1,3] gen betak_tl2=beta_dlwtranslog[1,5] gen betalk_tl=beta_dlwtranslog[1,6] gen betal_tl=betal_tl1+2*betal_tl2*l+betalk_tl*k gen Markup_DLWTL=betal_tl/alpha_l gen mark1=Markup_dlw1 gen mark12=Markup_DLWTL
Adding the loop, however, did not work:
Code:
forvalues j=1/N { keep if UK_indus==`j' mata: void GMM_DLW(todo,betas,crit,g,H) { PHI=st_data(.,("phi")) PHI_LAG=st_data(.,("phi_lag")) Z=st_data(.,("const","l_lag","k")) X=st_data(.,("const","l","k")) X_lag=st_data(.,("const","l_lag","k_lag")) Y=st_data(.,("y")) C=st_data(.,("const")) OMEGA=PHI-X*betas' OMEGA_lag=PHI_LAG-X_lag*betas' OMEGA_lag_pol=(C,OMEGA_lag) g_b = invsym(OMEGA_lag_pol'OMEGA_lag_pol)*OMEGA_lag_pol'OMEGA XI=OMEGA-OMEGA_lag_pol*g_b crit=(Z'XI)'(Z'XI) } void GMM_DLW_TL(todo,betas,crit,g,H) { PHI=st_data(.,("phi")) PHI_LAG=st_data(.,("phi_lag")) Z=st_data(.,("const","l_lag","k","l_lag2","k2","l_lagk")) X=st_data(.,("const","l","k","l2","k2","lk")) X_lag=st_data(.,("const","l_lag","k_lag","l_lag2","k_lag2","l_lagk_lag")) Y=st_data(.,("y")) C=st_data(.,("const")) OMEGA=PHI-X*betas' OMEGA_lag=PHI_LAG-X_lag*betas' OMEGA_lag_pol=(C,OMEGA_lag) g_b = invsym(OMEGA_lag_pol'OMEGA_lag_pol)*OMEGA_lag_pol'OMEGA XI=OMEGA-OMEGA_lag_pol*g_b crit=(Z'XI)'(Z'XI) } void DLW() { S=optimize_init() optimize_init_evaluator(S, &GMM_DLW()) optimize_init_evaluatortype(S,"d0") optimize_init_technique(S, "nm") optimize_init_nmsimplexdeltas(S, 0.1) optimize_init_which(S,"min") optimize_init_params(S,(1,0.8,0.2)) /**optimize_init_params(S,("OLS"))*/ p=optimize(S) p st_matrix("beta_dlw",p) } void DLW_TRANSLOG() { S=optimize_init() optimize_init_evaluator(S, & GMM_DLW_TL()) optimize_init_evaluatortype(S,"d0") optimize_init_technique(S, "nm") optimize_init_nmsimplexdeltas(S, 0.1) optimize_init_which(S,"min") optimize_init_params(S,(0,0,0,0,0,0)) p=optimize(S) p st_matrix("beta_dlwtranslog",p) } end cap program drop dlw program dlw, rclass preserve sort ordinal year mata DLW() end cap program drop dlw_translog program dlw_translog, rclass preserve sort ordinal year mata DLW_TRANSLOG() end reg y l k i.year gen beta_lols=_b[l] gen beta_kols=_b[k] gen Markup_ols=_b[l]/alpha_l dlw gen beta_c1=beta_dlw[1,1] gen beta_l1=beta_dlw[1,2] gen beta_k1=beta_dlw[1,3] gen Markup_dlw1=beta_l1/alpha_l gen omega_dlw1=phi-beta_l1*l-beta_k1*k dlw_translog gen betal_tl1=beta_dlwtranslog[1,2] gen betal_tl2=beta_dlwtranslog[1,4] gen betak_tl1=beta_dlwtranslog[1,3] gen betak_tl2=beta_dlwtranslog[1,5] gen betalk_tl=beta_dlwtranslog[1,6] gen betal_tl=betal_tl1+2*betal_tl2*l+betalk_tl*k gen Markup_DLWTL=betal_tl/alpha_l gen mark1=Markup_dlw1 gen mark12=Markup_DLWTL }
Code:
. void DLW_TRANSLOG() 51. { 52. S=optimize_init() 53. optimize_init_evaluator(S, & GMM_DLW_TL()) 54. optimize_init_evaluatortype(S,"d0") 55. optimize_init_technique(S, "nm") 56. optimize_init_nmsimplexdeltas(S, 0.1) 57. optimize_init_which(S,"min") 58. optimize_init_params(S,(0,0,0,0,0,0)) 59. p=optimize(S) 60. p 61. st_matrix("beta_dlwtranslog",p) 62. } 63. end --Break-- r(1); end of do-file --Break-- r(1); .
Thanks a lot,
JL
Comment