Closed bshiller closed 4 years ago
We need to do a better job with the tutorials for the micro-moments interface.
It should look something like this:
the key is that the micro-moments are stored in a tuple rather than a list.
mkt_ids=df_product.market_ids.unique() mm1=pyblp.FirstChoiceCovarianceMoment(1, 1, 0.4, mkt_ids) mm2=pyblp.FirstChoiceCovarianceMoment(0, 1, 0.3 ,mkt_ids) all_mm =(mm1,mm2)
problem.solve( ... micro_moments= all_mm, ... )
Also: the issue with the original code is that (x)
doesn't define a single-element tuple in Python -- you need (x,)
(note the comma) or to get a single-element list, you can do [x]
.
And the demographics_index
is the index in the agent formulation. If you print
your problem after you initialize with micro moments, it should output some information where you can confirm that you've set it up right.
Thanks Chris!
On Fri, Feb 7, 2020 at 12:46 PM Chris Conlon notifications@github.com wrote:
We need to do a better job with the tutorials for the micro-moments interface.
It should look something like this:
the key is that the micro-moments are stored in a tuple rather than a list.
mkt_ids=df_product.market_ids.unique() mm1=pyblp.FirstChoiceCovarianceMoment(1, 1, 0.4, mkt_ids) mm2=pyblp.FirstChoiceCovarianceMoment(0, 1, 0.3 ,mkt_ids) all_mm =(mm1,mm2)
problem.solve( sigma=init_sigma,pi=init_pi, micro_moments= our_mm, )
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jeffgortmaker/pyblp/issues/46?email_source=notifications&email_token=AEYDVKPXFJ2BQHKGK3LZVITRBWNAXA5CNFSM4KRSCN3KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOELD54OY#issuecomment-583523899, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEYDVKNYNE62WKDIBQWED3DRBWNAXANCNFSM4KRSCN3A .
-- Benjamin Shiller Assistant Professor Brandeis University
Thanks Jeff!
On Fri, Feb 7, 2020 at 1:42 PM Jeff Gortmaker notifications@github.com wrote:
Also: the issue with the original code is that (x) doesn't define a single-element tuple in Python -- you need (x,) (note the comma) or to get a single-element list, you can do [x].
And the demographics_index is the index in the agent formulation. If you print your problem after you initialize with micro moments, it should output some information where you can confirm that you've set it up right.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jeffgortmaker/pyblp/issues/46?email_source=notifications&email_token=AEYDVKMLPG6T5M64RJEZ6HLRBWTRPA5CNFSM4KRSCN3KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOELED4QI#issuecomment-583548481, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEYDVKLQVL422PTY2KEW5I3RBWTRPANCNFSM4KRSCN3A .
-- Benjamin Shiller Assistant Professor Brandeis University
Posting here given the topic, but I can move it to its own if best.
I've not gotten too much into the weeds on micro-moments (in theory or in PyBLP), but how would I use PyBLP to implement something akin to Petrin's conditional moments? It does not seem obvious to me that one could. There is no equation number but page 714 of the JPE article has his moments; e.g., E[ agent i buys new vehicle | y_i < y1 ] or E[ f_i | i buys minivan ].
Maybe I am just not understanding the micro moments? One issue is that pyblp.DemographicExpectationMoment
seems to be product-by-product and pyblp.DemographicCovarianceMoment
seems like it is a different moment type.
Without getting into too much detail:
On Wed, Jul 15, 2020 at 8:34 PM C.Luke Watson notifications@github.com wrote:
Posting here given the topic, but I can move it to its own if best.
I've not gotten too much into the weeds on micro-moments (in theory or in PyBLP), but how would I use PyBLP to implement something akin to Petrin's conditional moments? It does not seem obvious to me that one could. There is no equation number but page 714 of the JPE article has his moments; e.g., E[ agent i buys new vehicle | y_i < y1 ] or E[ f_i | i buys minivan ].
Maybe I am just not understanding the micro moments? One issue is that pyblp.DemographicExpectationMoment seems to be product-by-product and pyblp.DemographicCovarianceMoment seems like it is a different moment type.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/jeffgortmaker/pyblp/issues/46#issuecomment-659085798, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA7IOWPQTKYIPXWIHYWE5ULR3ZDHVANCNFSM4KRSCN3A .
I'll add a couple things to what Chris said:
You should be able to encode most types of "product-agent" information into DemographicCovarianceMoment
s by adding extra variables to your agent_formulation
and to your formulation for X2. (Note that including such extra variables does not require extra parameters in sigma
or pi
-- you can set these to zero.) For example, you can think of "agent i buys new vehicle" as a constant column in X2, and "y_i < y1" as a dummy variable in your matrix of demographics. Covariances between such characteristics can provide many types of micro moments.
I think in points 6 and 6a, Chris is referring to an older API, e.g. the classes mentioned at the top of this thread are outdated. As Chris mentioned we're still working on this stuff, so the API is subject to change again (and any comments on it are really appreciated). With the current API, setting product_id=None
for DemographicExpectationMoment
means that you're matching a demographic for purchasers of the outside good, not of all inside goods. In my mind this is the primary purpose (other than convenience for some moments) of using DemographicExpectationMoment
s instead of DemographicCovarianceMoment
s, the latter of which is always computed conditional on the purchase of an inside good.
Hi Jeff,
I was wondering if you wouldn't mind helping me understand the syntax for adding micro moments. I tried this (as well as a number of other attempts at figuring out the syntax):
Micro_formulations = pyblp.FirstChoiceCovarianceMoment(1, 1, 0.45744) results1 = pr_problem.solve(...,micro_moments=(Micro_formulations))
and got the error:
File "", line 2, in
results1 = pr_problem.solve(initial_sigma1,initial_pi1,sigma_bounds=sigma_bounds, pi_bounds = pi_bounds, method='1s',iteration=iteration,W_type='clustered',se_type='clustered',optimization=optimization,micro_moments=(Micro_formulations))
File "C:\Users\shiller.USERS\AppData\Local\Continuum\anaconda3\lib\site-packages\pyblp-0.8.1-py3.6.egg\pyblp\economies\problem.py", line 441, in solve moments = EconomyMoments(self, micro_moments)
File "C:\Users\shiller.USERS\AppData\Local\Continuum\anaconda3\lib\site-packages\pyblp-0.8.1-py3.6.egg\pyblp\moments.py", line 183, in init raise TypeError("micro_moments must be a sequence of micro moment instances.")
TypeError: micro_moments must be a sequence of micro moment instances.
Also, one other quick question. Is the demographics_index in the micro moments formulation the column of agent data loaded from a CSV (where the first column might identify market) or the index of the agent formulation?
Thanks!