Difference between revisions of "Estimating Unobserved Complementarities between Entrepreneurs and Venture Capitalists Matlab Code"
Line 84: | Line 84: | ||
'''empirics_match_specific_2nd_stage_ga''': | '''empirics_match_specific_2nd_stage_ga''': | ||
− | |||
− | |||
− | |||
− | |||
'''empirics_match_specific_with_se''': Saved if task = 'data' | '''empirics_match_specific_with_se''': Saved if task = 'data' | ||
Line 95: | Line 91: | ||
==Bugs== | ==Bugs== | ||
− | Simulated moments matrix dimension mismatch. This bug does not allow the "optimal stage" to complete. | + | 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 | Assignment has more non-singleton rhs dimensions than non-singleton subscripts | ||
Line 102: | Line 98: | ||
Error in master (line 513) | Error in master (line 513) | ||
gmm_2stage_estimation; | 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. | ||
==Profiling== | ==Profiling== | ||
− | Ran first iteration with task='monte', use_solver='ga', estimator='MSM', gurobi output disabled (took | + | 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]] | [[File:Unobserved comp profile monte.png]] | ||
+ | |||
+ | Monte_data and monte run much faster than data, because data is so large. |
Revision as of 17:02, 29 January 2018
Main Project here: Estimating Unobserved Complementarities between Entrepreneurs and Venture Capitalists
Contents
Important contractions
- GMM: Generalized Method of Moments
- MSM: Markov State Model
- MLE: Maximum Likelihood Estimation
- GA: Genetic Algorithm
- SE:
How to run
First, you need a gurobi license, which can be obtained (free) here.
In master.m, edit the options section to reflect what you want the code to do. Then run it.
Location/structure of the code
The old codebase is located in
E:\McNair\Projects\MatchingEntrepsToVC\OriginalCode
The new codebase is located in
E:\McNair\Projects\MatchingEntrepsToVC\AdjustedCode
The new-new codebase is located in
E:\McNair\Projects\MatchingEntrepsToVC\ReAdjustedCode
Some of this code is just library code (prefix mtimesx).
master.m
options section
task: Can take the values {'data', 'monte', 'monte_data'}.
estimator: Can take the values {'MSM'}. (other estimators removed in readjusted code)
use_solver: Can take the values {'ga'}. (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') = 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
Does the majority of the work for this problem. Runs the GA, saves the results to 'empirics_match_specific_1st_stage_ga', then runs it again with different globals, and saves it to 'empirics_match_specific_2nd_stage_ga'.
nonlinearcons_msm.m
Constraints on GA. For [c,ceq] = nonlinearcons_msm(x), GA constrains x such that c ≤ 0 and ceq = 0. c and ceq are row vectors when there are multiple constraints. ceq is unused for our purposes.
msmf_corr_coeff.m
This is the fitness function. Takes a vector and returns a scalar. GA minimizes this function.
Location/Structure of Data
Pro tip: running the command
whos -file filename
from a matlab session will tell you the contents of any .mat file.
There are two of both psdata and dyad_tech_mkt_data, corresponding to 4 industries or 5 industries. You can find them in
E:\McNair\Projects\MatchingEntrepsToVC\OriginalCode\FVEIC4 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
- vc: the number of VC's in each market, in the form of (10, 12, 13, ...): the first market has 10 VC's, the second market has 12 VC's....
- firm: the number of firms in each market, (13, 14, ...): the first market has 13 downstream, the second 14 downstream... this is a one (VC) to many (firms) market, and the number of firms in each market is at least as many as the number of firms
- m_id: unused, I'm guessing the market id
dyad_tech_mkt_data.mat variables used include:
- pvc_exp_n, mean_pvc_exp_n, std_pvc_exp_n
- lnfpat, mean_lnfpat:
- mean_m_dist_1000, std_m_dist_1000:
- mean_exp_sector, std_exp_sector:
- 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: 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 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.
Profiling
Ran first iteration with task='monte', use_solver='ga', estimator='MSM', gurobi output disabled (took 42 sec to finish 1st iteration)
Monte_data and monte run much faster than data, because data is so large.