Changes

Jump to navigation Jump to search
*GMM: Generalized Method of Moments
*MSM: Markov State ModelMethod of Simulated Moments
*MLE: Maximum Likelihood Estimation
*GA: Genetic Algorithm
*SE:Standard Error
==How to run==
'''error_type''' (currently hard coded as 1 and isn't fully written to support 2): 1 for match specific errors, with the error distribution following an exchangeable structure. var(e) = sig^2, and cov(e,e') = 1/4*sig^2. 2 for agent specific errors, with the error structure of match <i, j> as sig*ei*ej.
 
===strip_*.m (deleted in readjusted code)===
Versions of files that only use the parameters task = 'monte_data', use_solver = 'ga', and estimator = 'MSM' (which apparently are the only solvers and estimators that work, but unverified). Removed because could not handle task = 'data'.
===gmm_2stage_estimation.m===
This is the fitness function. Takes a vector and returns a scalar. GA minimizes this function.
 
===moments.m===
 
Generates the moments needed for the GMM.
==Location/Structure of Data==
'''empirics_match_specific_2nd_stage_ga''':
'''empirics_match_specific_1st_stage_cmaes''': '''empirics_match_specific_2nd_stage_cmaes''': '''empirics_match_specific_with_se''': Saved if task = 'data'
'''type_(error_type)_monte_mktsize_(mktsize)_K_(K)_S_(S)_rep_(montenn)''':
==Bugs==
Simulated moments matrix dimension mismatch. This bug (also in the adjusted code) does not allow the "optimal stage" to complete.
Assignment has more non-singleton rhs dimensions than non-singleton subscripts
Error in master (line 513)
gmm_2stage_estimation;
 
This is caused because temp2 is 166x166 in monte_data, but nm = M = 1, so EV is 1x1. nm is set to size(M0, 1), but M0 is sometimes a scalar?
 
This is solved by commenting out mkt_resample.m line 107:
% M0 = moments(M, 1, S, K, pv', asg, H, HK, G, FF, Hu, Hd, z1, z2, psa, ps1, ps2, N1, N2)
 
because it returns a scalar, but should return a 166x1 vector.
 
Better fix notes:
The problem is narrowed down to the section of mkt_resample.m before the call to moments. Somehow the parameters to moments are changed such that it returns a scalar.
 
Solution found (I think):
monte_M cannot be set to 1. For values greater than 1, the program seems to work. It doesn't crash, anyway.
==Profiling==
Ran first iteration with task='monte', use_solver='ga', estimator='MSM', gurobi output disabled (took 14 min, 39 42 sec to finish 1st iteration)
[[File:Unobserved comp profile monte.png]]
 
Monte_data and monte run much faster than data, because data is so large.
 
==Notes==
 
There is a lot of unused code. For example, monte_std and monte_x seem to only be assigned, not used.

Navigation menu