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