pyblp.ProblemResults.importance_sampling¶
-
ProblemResults.
importance_sampling
(draws, ar_constant=1.0, seed=None, agent_data=None, integration=None, delta=None)¶ Use importance sampling to construct nodes and weights for integration.
Importance sampling is done with the accept/reject procedure of Berry, Levinsohn, and Pakes (1995). First,
agent_data
and/orintegration
are used to provide a large number of candidate sampling nodes \(\nu\) and any demographics \(d\).Out of these candidate agent data, each candidate agent \(i\) in market \(t\) is accepted with probability \(\frac{1 - s_{i0t}}{M}\) where \(M \geq 1\) is some accept-reject constant. The probability of choosing an inside good \(1 - s_{i0t}\), is evaluated at the estimated \(\hat{\theta}\) and \(\delta(\hat{\theta})\).
Optionally,
ProblemResults.compute_delta()
can be used to provide a more precise \(\delta(\hat{\theta})\) than the estimatedProblemResults.delta
. The idea is that more precise agent data (i.e., more integration nodes) would be infeasible to use during estimation, but is feasible here because \(\delta(\hat{\theta})\) only needs to be computed once given a \(\hat{\theta}\).Out of the remaining accepted agents, \(I_t\) equal to
draws
are randomly selected within each market \(t\) and assigned integration weights \(w_{it} = \frac{1}{I_t} \cdot \frac{1 - s_{0t}}{1 - s_{i0t}}\).If this procedure accepts fewer than
draws
agents in a market, an exception will be raised. A good rule of thumb is to provide more candidate draws in each market than \(\frac{M \times I_t}{1 - s_{0t}}\).- Parameters
draws (int, optional) – Number of draws to take from
sampling_agent_data
in each market.ar_constant (float, optional) – Accept/reject constant \(M \geq 1\), which is by default,
1.0
.seed (int, optional) – Passed to
numpy.random.RandomState
to seed the random number generator before importance sampling is done. By default, a seed is not passed to the random number generator.agent_data (structured array-like, optional) – Agent data from which draws will be sampled, which should have the same structure as
agent_data
inProblem
. Theweights
field does not need to be specified, and if it is specified it will be ignored. By default, the same agent data used to solve the problem will be used.integration (Integration, optional) –
Integration
configuration for how to build nodes from which draws will be sampled, which will replace anynodes
field insampling_agent_data
. This configuration is required ifsampling_agent_data
is specified without anodes
field.delta (array-like, optional) – More precise \(\delta(\hat{\theta})\) than the estimated
ProblemResults.delta
, which can be computed by passing a more precise integration rule toProblemResults.compute_delta()
. By default,ProblemResults.delta
is used.
- Returns
Computed
ImportanceSamplingResults
.- Return type
ImportanceSamplingResults
Examples