Changes

Jump to navigation Jump to search
Main Project here: [[Estimating Unobserved Complementarities between Entrepreneurs and Venture Capitalists]]
 
==Important contractions==
 
*GMM: Generalized Method of Moments
*MSM: Method of Simulated Moments
*MLE: Maximum Likelihood Estimation
*GA: Genetic Algorithm
*SE: Standard Error
==How to run==
 
First, you need a gurobi license, which can be obtained (free) [http://www.gurobi.com/registration/academic-license-reg here].
In master.m, edit the options section to reflect what you want the code to do. Then run it.
'''task:''' Can take the values {'data', 'monte', 'monte_data'}.
 '''estimator:''' Can take the values {'MLE', 'MSM', 'compare'}.(other estimators removed in readjusted code)* MSM stands for Markov State Model* MLE stands for Maximum Likelihood Estimation* compare** compare is valid only under task='monte''''use_solver:''' Can take the values {'fminuncga'}. (other solvers removed in readjusted code) '''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'ga') = 1/4*sig^2. 2 for agent specific errors, with the error structure of match <i, j> as sig*ei*ej. ===gmm_2stage_estimation.m=== Does the majority of the work for this problem. Runs the GA, saves the results to 'patternsearchempirics_match_specific_1st_stage_ga', then runs it again with different globals, and saves it to 'cmaesempirics_match_specific_2nd_stage_ga'}.* ===nonlinearcons_msm.m=== Constraints on GA. For [c,ceq] = nonlinearcons_msm(x), GA stands constrains x such that c ≤ 0 and ceq = 0. c and ceq are row vectors when there are multiple constraints. ceq is unused for genetic algorithmour purposes.* fminunc* patternsearch===msmf_corr_coeff.m=== This is the fitness function. Takes a vector and returns a scalar. GA minimizes this function. ===moments.m=== * cmaesGenerates the moments needed for the GMM.
==Location/Structure of Data==
and
E:\McNair\Projects\MatchingEntrepsToVC\OriginalCode\FVEIC5 data
 
The one wanted should be copied into the code directory:
E:\McNair\Projects\MatchingEntrepsToVC\AdjustedCode
'''psdata.mat''' contains
*m_match: contains the matching outcome: for each dyad (firm VC pair), 0 means not matched and 1 means matched. The variable asg in the code contains the matching outcomes of all markets. The matching outcomes are delineated by firms using the position data N1 (vc' from psdata)and N2 (firm' from psdata).
==Location/Structure of Output==
 
'''empirics_match_specific_1st_stage_ga''':
'''empirics_match_specific_2nd_stage_ga''': '''empirics_match_specific_with_se''': '''type_(error_type)_monte_mktsize_(mktsize)_K_(K)_S_(S)_rep_(montenn)''': ==Location/Structure 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 gmm_2stage_estimation (line 65) EV(:, :, m) = EV(:, :, m) + temp2; 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 Outputmkt_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 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