skills/11-James-Traina-compound-science/skills/structural-modeling/SKILL.md
This skill covers structural econometric models. Use when the user is building, estimating, or debugging structural models — including BLP demand estimation, dynamic discrete choice, auction models, or any workflow involving moment conditions, nested fixed-point algorithms, or MPEC formulations. Triggers on "structural model", "moment conditions", "NFXP", "MPEC", "BLP", "random coefficients", "dynamic discrete choice", "CCP", "Rust model", "auction estimation", "GMM objective", "inner loop", "contraction mapping", or convergence/starting value problems in optimization-based estimation.
npx skillsauth add brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research structural-modelingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reference for implementing structural econometric models: from economic model to moment conditions to estimated parameters. Covers the full workflow of taking a theoretical model, deriving its empirical content, and recovering structural parameters from data.
Use when the user is:
Skip when:
causal-inference skill)numerical-auditor agent)| Method | Use Case | Key Package | Estimator |
|--------|----------|-------------|-----------|
| NFXP | Dynamic discrete choice (small state space) | scipy.optimize | MLE / GMM |
| MPEC | Dynamic discrete choice (large state space, slow inner loop) | cyipopt (IPOPT) | MLE / GMM |
| BLP | Differentiated products demand with RC logit | pyblp | GMM (2-step) |
| CCP (Hotz-Miller) | Dynamic models, counterfactuals not needed | scipy | 2-step semiparametric |
| GPV | First-price auctions, nonparametric values | scipy | Nonparametric |
| Ascending auction | English auctions, private values | scipy | MLE on order statistics |
Every structural estimation follows the same logical arc:
Economic Model → Equilibrium/Decision Rule → Observable Implications
→ Moment Conditions → Estimator → Optimization → Inference
Define primitives clearly before writing any code:
# model_spec.py — Document structural primitives
"""
Model: Single-agent optimal stopping (Rust 1987 bus engine replacement)
State: x_t ∈ {0, 1, ..., X_max} (mileage bin)
Action: a_t ∈ {0, 1} (0 = maintain, 1 = replace)
Flow payoff:
u(x, 0; θ) = -θ_1 * x - θ_2 * x² (maintenance cost)
u(x, 1; θ) = -RC (replacement cost)
Discount: β = 0.9999 (fixed)
Shocks: ε ~ Type 1 Extreme Value (logit errors)
"""
Document these before writing estimation code: agents, information, timing, payoff functional form, equilibrium concept.
| Source | Example | Estimator | |--------|---------|-----------| | Optimality conditions (FOCs) | Euler equations, Bellman optimality | GMM | | Equilibrium restrictions | Market clearing, Nash conditions | GMM / ML | | Distributional assumptions | Choice probabilities under logit errors | MLE | | Exclusion restrictions | Cost shifters excluded from demand | IV-GMM |
Key question: Just-identified → method of moments; over-identified → GMM with optimal weighting matrix; under-identified → revisit assumptions.
Two dominant paradigms for models with latent quantities (unobserved heterogeneity, future expectations, equilibrium objects):
NFXP (Nested Fixed-Point): Solve the model in an inner loop for each parameter guess, evaluate likelihood/moments in an outer loop. Conceptually simple; inner loop must fully converge at every iteration — requires tight tolerance (1e-12, not 1e-6; see Su & Judd 2012).
MPEC (Mathematical Programming with Equilibrium Constraints): Reformulate as a single constrained optimization. No inner loop — solver handles everything; can be faster for large state spaces; requires IPOPT or KNITRO.
| Factor | Favors NFXP | Favors MPEC |
|--------|-------------|-------------|
| State space | Small (< 500 states) | Large (> 1000 states) |
| Inner loop | Fast convergence (rate < 0.9) | Slow or fragile |
| Solver availability | scipy.optimize sufficient | IPOPT/KNITRO available |
| Debugging | Easier — isolate inner vs outer | Harder to diagnose constraint violations |
For full NFXP and MPEC code (Rust 1987 bus engine model), see references/estimation-methods.md.
BLP (Berry, Levinsohn, Pakes 1995) is the workhorse for differentiated products demand. Use PyBLP whenever possible — it handles the difficult numerical details correctly.
import pyblp
# Define the problem
problem = pyblp.Problem(
product_formulations=(
pyblp.Formulation('1 + prices + x1 + x2'), # linear (β)
pyblp.Formulation('1 + prices + x1'), # random coefficients (Σ)
),
product_data=product_data,
agent_data=agent_data
)
# Solve — always use multiple starting values; BLP objective is non-convex
results = problem.solve(
sigma=sigma_init,
optimization=pyblp.Optimization('l-bfgs-b', {'gtol': 1e-8}),
iteration=pyblp.Iteration('squarem', {'atol': 1e-14}),
method='2s'
)
For the full multi-start loop, two-step GMM, elasticity checks, instrument selection, and marginal cost computation, see references/estimation-methods.md.
BLP Diagnostics Checklist:
results.compute_elasticities('prices')results.fp_converged.all()results.compute_costs()Rust (1987) NFXP: Full solution — solve the Bellman equation by value function iteration at every outer iteration. Use for models where counterfactuals require the full model.
Hotz-Miller CCP: Two-step semiparametric approach. Step 1: estimate conditional choice probabilities nonparametrically. Step 2: form pseudo-value functions for a linear regression. Faster; less efficient; sufficient when counterfactuals are not needed.
| Feature | Full Solution (NFXP/MPEC) | CCP (Hotz-Miller) | |---------|---------------------------|---------------------| | Computational cost | High (solve DP at each θ) | Low (no DP solving) | | Efficiency | Efficient (MLE) | Less efficient (2-step) | | Counterfactuals | Natural (full model available) | Must resolve for new policies |
For full CCP implementation code, see references/estimation-methods.md.
First-price sealed-bid (GPV): Guerre, Perrigne, Vuong (2000) — invert the bidding equilibrium condition v(b) = b + G(b)/((n-1)g(b)) to recover latent values nonparametrically from observed bids.
Ascending (English): In IPV setting, transaction price = second-highest value. Use MLE on order statistics to recover the value distribution.
Common value: Requires accounting for winner's curse. Li-Perrigne-Vuong (2002) approach; typically requires parametric assumptions.
For full GPV estimator code, ascending auction MLE, and validation diagnostics, see references/estimation-methods.md.
When to use structural vs. reduced-form:
Within structural:
game-theory skill)| Anti-Pattern | Problem | Better Approach | |--------------|---------|-----------------| | Estimating β jointly with payoff parameters | Notoriously poorly identified; flat objective | Fix β at reasonable value (0.95, 0.99) or calibrate externally | | Loose inner loop tolerance (1e-6) | Optimizer sees noise; spurious convergence | Use 1e-12 or tighter; see Su & Judd (2012) | | Single starting value | Structural objectives are non-convex | Use 10+ random starts plus grid search | | Ignoring simulation error in simulated MLE/MSM | Biased standard errors | Use enough draws (R >> N) or bias-correct | | Numerical gradients with default step size | Inaccurate for poorly scaled problems | Use central differences or analytic gradients (JAX) | | Hard-coding state space discretization | Results sensitive to grid coarseness | Test sensitivity to grid refinement |
For GPU-accelerated structural estimation (JIT compilation, autodiff, vmap for simulated moments, differentiable fixed-point iteration with lax.while_loop), see references/jax-guide.md.
numerical-auditor — Systematic convergence review: gradient norms, conditioning, tolerance sensitivitynumerical-auditor — DGP formalization, Monte Carlo studies, convergence reviewidentification-critic — Verify equilibrium existence, uniqueness, stability, comparative staticseconometric-reviewer — Reviews moment-matching strategy, parameter identification, sensitivity to targets/estimate — Full estimation pipeline with quality gatesreferences/estimation-methods.md — Full code: BLP multi-start, NFXP Bellman solver, MPEC cyipopt formulation, Hotz-Miller CCP, GPV auction estimatorreferences/diagnostics-and-se.md — Convergence failure diagnosis, numerical safeguards (logsumexp, conditioning), GMM sandwich SEs, parametric bootstrapreferences/jax-guide.md — JAX JIT/autodiff for structural objectives, vmap for simulation, lax.while_loop for differentiable contraction mappingstools
Recommend AND run open-source AI tools, agents, Claude Code / Codex skills, and MCP servers for any stage of a literature review — searching, reading, extracting, synthesizing, screening, citation-checking, and paper writing. Use when the user asks "what tool should I use to..." OR "install/run/use <tool> to ..." for research/lit-review work: automating a survey or related-work section, PDF→Markdown extraction for LLMs (MinerU/marker/docling), PRISMA / systematic review (ASReview), citation-backed Q&A over PDFs (PaperQA2), wiring papers into Claude/Cursor via MCP (arxiv/paper-search/zotero servers), or chatting with a Zotero library. Ships a launcher (scripts/litrun.py) that installs each tool in an isolated venv and runs it. Curated catalog of 70+ vetted projects. 支持中英文(用于「文献综述工具选型」与「一键安装/运行」)。
development
Route empirical-research requests through the Auto-Empirical Research Skills catalog when this whole repository is installed as one skill in Codex, CodeBuddy, Claude Code, or another IDE. Use to choose and load the right vendored AERS skill for causal inference, econometrics, replication, data acquisition, manuscript writing, peer review and referee responses, citation checking, de-AIGC editing, or full empirical-paper workflows without reading the entire repository at once.
documentation
Use when the project collects primary data or runs a field, lab, or survey experiment, before the intervention begins — write the pre-analysis plan, size the sample from a power calculation, and register with the AEA RCT Registry. Apply after the design is chosen in aer-identification and before any outcome data are seen.
tools
Guide economists to authoritative data sources with explicit, confirmed data specifications before retrieval; interfaces with Playwright MCP to navigate portals and extract real data, not articles about data.