Hello everyone, I am looking to apply the method of De Loecker and Warzynski (2012) and use the "optimize" function in the Mata environment to estimate production functions, specifically the Cobb-Douglas (CD) and Translog functions. However, I am facing an issue where I obtain a convergent warning for some industries (for each industry estimating production function seperately). To illustrate the issue, I used the Cobb-Douglas production function as an example. The code is as follows:
The warning is following. What puzzles me is that (1)I can still get the estimated coefficients. Can I trust these coefficients(output elasticity respect to inputs)? (2) I would like to ask how to construct gradient vectors or hessian matrix of objective function "crit" which does not directly include the parameter betas to be estimated, so I can improve convergent efficiency. (3) Or is there another way I can make the objective function converge? Thanks very much.
Code:
clear mata mata: void GMM_DLW_CD(todo,betas,crit,g,H) { PHI=st_data(.,("phi")) PHI_LAG=st_data(.,("phi_lag")) Z=st_data(.,("const","m_lag","l_lag","k")) X=st_data(.,("const","m","l","k")) X_lag=st_data(.,("const","m_lag","l_lag","k_lag")) Y=st_data(.,("lnoutput")) C=st_data(.,("constant")) OMEGA=PHI-X*betas' //OMEGA denoting productivity, is equal to the residual of total output minus inputs. OMEGA_lag=PHI_LAG-X_lag*betas' OMEGA_lag_pol=(C,OMEGA_lag) //Productivity follows a first-order Markov process g_b = invsym(OMEGA_lag_pol'OMEGA_lag_pol)*OMEGA_lag_pol' OMEGA //least square method XI=OMEGA-OMEGA_lag_pol*g_b //Changes in productivity(residuals) that cannot be explained by the previous period crit=(Z'XI)'(Z'XI) //residuals is uncorrelated with previous period information } void DLW_CD() { initialvalue=st_data(1,("initialConst","initialm", "initiall","initialk")) S=optimize_init() optimize_init_evaluator(S, &GMM_DLW_CD()) 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,initialvalue) p=optimize(S) p st_matrix("beta_DLW_CD",p) }
The warning is following. What puzzles me is that (1)I can still get the estimated coefficients. Can I trust these coefficients(output elasticity respect to inputs)? (2) I would like to ask how to construct gradient vectors or hessian matrix of objective function "crit" which does not directly include the parameter betas to be estimated, so I can improve convergent efficiency. (3) Or is there another way I can make the objective function converge? Thanks very much.
Code:
Iteration 297: f(p) = 1.7590459 Iteration 298: f(p) = 1.7590459 Iteration 299: f(p) = 1.7590459 Iteration 300: f(p) = 1.7590459 convergence not achieved 1 2 3 4 +-------------------------------------------------------------+ 1 | 1.879356738 -.2856812546 .147107382 1.038800582 | +-------------------------------------------------------------+