iv-regression-guide

Apply instrumental variables, 2SLS, and address endogeneity issues

191 stars

Best use case

iv-regression-guide is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Apply instrumental variables, 2SLS, and address endogeneity issues

Teams using iv-regression-guide should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/iv-regression-guide/SKILL.md --create-dirs "https://raw.githubusercontent.com/wentorai/research-plugins/main/skills/analysis/econometrics/iv-regression-guide/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/iv-regression-guide/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How iv-regression-guide Compares

Feature / Agentiv-regression-guideStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Apply instrumental variables, 2SLS, and address endogeneity issues

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Instrumental Variables Regression Guide

A skill for applying instrumental variables (IV) estimation to address endogeneity in regression models. Covers the logic of IV, two-stage least squares (2SLS), instrument validity tests, weak instrument diagnostics, and reporting standards.

## The Endogeneity Problem

### Why OLS Fails

```
Ordinary Least Squares assumes:  E[u | X] = 0
(Regressors are uncorrelated with the error term)

This assumption is violated when:
  - Omitted variable bias: A confound affects both X and Y
  - Simultaneity: X affects Y and Y affects X
  - Measurement error: X is measured with noise

Consequence: OLS estimates are biased and inconsistent.
No amount of data will fix this.
```

### The IV Solution

An instrumental variable Z satisfies two conditions:

```
1. Relevance:  Z is correlated with the endogenous regressor X
               Cov(Z, X) != 0

2. Exclusion:  Z affects Y ONLY through X (not directly)
               Cov(Z, u) = 0

   Z --> X --> Y
   Z -/-> Y  (no direct path)
```

## Two-Stage Least Squares (2SLS)

### How 2SLS Works

```
Stage 1: Regress the endogenous variable on the instrument(s)
         X = gamma_0 + gamma_1 * Z + controls + v
         Save the fitted values: X_hat

Stage 2: Regress the outcome on the fitted values
         Y = beta_0 + beta_1 * X_hat + controls + e

The coefficient beta_1 is the IV estimate of the causal effect.
```

### Implementation in Python

```python
from linearmodels.iv import IV2SLS
import pandas as pd


def run_2sls(data: pd.DataFrame, dependent: str,
             endogenous: str, instruments: list[str],
             controls: list[str] = None) -> dict:
    """
    Run a 2SLS instrumental variables regression.

    Args:
        data: DataFrame with all variables
        dependent: Name of the dependent variable (Y)
        endogenous: Name of the endogenous regressor (X)
        instruments: List of instrument variable names (Z)
        controls: List of exogenous control variable names
    """
    controls = controls or []
    exog_str = " + ".join(["1"] + controls) if controls else "1"
    endog_str = endogenous
    instr_str = " + ".join(instruments)

    formula = f"{dependent} ~ {exog_str} + [{endog_str} ~ {instr_str}]"

    model = IV2SLS.from_formula(formula, data)
    result = model.fit(cov_type="robust")

    return {
        "coefficients": dict(result.params),
        "std_errors": dict(result.std_errors),
        "p_values": dict(result.pvalues),
        "f_statistic_first_stage": result.first_stage.diagnostics,
        "summary": str(result.summary)
    }
```

### Implementation in R

```r
library(ivreg)

# 2SLS estimation
iv_model <- ivreg(
  log(wage) ~ education + experience | parent_education + experience,
  data = df
)

summary(iv_model, diagnostics = TRUE)
```

## Instrument Validity Tests

### First-Stage F-Statistic (Relevance)

```python
def check_weak_instruments(first_stage_f: float) -> dict:
    """
    Evaluate instrument strength using first-stage F-statistic.

    Args:
        first_stage_f: F-statistic from the first-stage regression
    """
    return {
        "f_statistic": first_stage_f,
        "rule_of_thumb": (
            "Strong instruments" if first_stage_f > 10
            else "Potentially weak instruments"
        ),
        "interpretation": (
            "Stock & Yogo (2005) suggest F > 10 as a minimum for "
            "one endogenous variable. For more precise thresholds, "
            "consult the Stock-Yogo critical values table based on "
            "the number of instruments and desired maximal bias."
        ),
        "if_weak": [
            "Use LIML (Limited Information Maximum Likelihood) instead of 2SLS",
            "Report Anderson-Rubin confidence intervals (robust to weak IV)",
            "Consider finding stronger instruments",
            "Use the Lee et al. (2022) tF procedure for valid inference"
        ]
    }
```

### Overidentification Test (Exclusion Restriction)

When you have more instruments than endogenous variables, the Hansen J test (or Sargan test) checks whether the extra instruments are valid:

```
H0: All instruments are valid (uncorrelated with the error)
H1: At least one instrument is invalid

If p < 0.05: Reject -> at least one instrument may violate exclusion
If p > 0.05: Fail to reject -> instruments appear valid
             (but this test has low power)
```

## Classic IV Examples

### Famous Instruments in Economics

```
Research Question          | Endogenous Var | Instrument
---------------------------|---------------|------------------
Returns to education       | Years of school| Quarter of birth (Angrist & Krueger)
Effect of institutions     | Institutions   | Settler mortality (Acemoglu et al.)
Colonial origins of trade  | Trade openness | Geography (Frankel & Romer)
Effect of military service | Veteran status | Draft lottery number (Angrist)
Price elasticity of demand | Price          | Supply shifters (cost, weather)
```

## Reporting IV Results

### Required Elements

```
1. Justify instrument choice with economic/theoretical reasoning
2. Report first-stage regression results:
   - Coefficient of Z on X with standard error
   - First-stage F-statistic
3. Report second-stage (2SLS) results:
   - IV coefficient with robust standard errors
   - Compare with OLS estimate (discuss direction of bias)
4. Report diagnostic tests:
   - Weak instrument test (F-statistic or Kleibergen-Paap)
   - Overidentification test if applicable (Hansen J)
   - Endogeneity test (Hausman or Durbin-Wu-Hausman)
5. Discuss threats to instrument validity
   - Can the exclusion restriction be challenged?
   - Are there plausible alternative channels?
```

Always present both OLS and IV estimates side by side. The comparison helps readers understand the direction and magnitude of endogeneity bias and assess whether the IV correction is meaningful.