Module 5: When OLS Fails
Omitted Variable Bias & Measurement Error
1 Endogeneity
Consider a population model:
\[ y_i = \beta_0 + \beta_1 x_{1i} + u_i \]
where \(y \in Y\), \(x_1 \in X_1\), and \(u\) is the error term.
The independent variable \(x_1\) is endogenous if \(\text{Cov}(x_1, u) \neq 0\). Put another way, \(x_1\) is endogenous if it is correlated with the error term.
1.1 Why does it matter?
Endogeneity in \(x_1\) leads to violations of the zero conditional mean assumption: if \(\text{Cov}(x_1, u) \neq 0\), then \(E[u \mid x_1] \neq 0\). The expected value of the error differs across levels of \(x_1\). An OLS model with endogenous independent variables is neither unbiased nor consistent — the expected value of \(\hat{\beta}_1\) will not equal the population \(\beta_1\), regardless of how large our sample becomes.
1.2 Sources of endogeneity
There are three principal sources:
- Omitted Variable Bias (OVB)
- Measurement Error (ME)
- Simultaneity / Reverse Causality
This module focuses on the first two. We will explore each through theory and interactive simulation.
2 Omitted Variable Bias: Theory
2.1 The true vs. misspecified model
Suppose the true population model is:
\[ y_i = \beta_0 + \beta_1 x_{1i} + \beta_2 x_{2i} + u_i \]
The population model tells us that \(Y\) is a function of both \(X_1\) and \(X_2\). To estimate unbiased parameters, we need to observe and include both.
The correct specification is:
\[ E[y \mid x_1, x_2] = \hat{\beta}_0 + \hat{\beta}_1 x_1 + \hat{\beta}_2 x_2 \qquad \text{(long regression)} \]
But suppose we fail to record \(X_2\) and estimate only:
\[ E[y \mid x_1] = \hat{\alpha}_0 + \hat{\alpha}_1 x_1 \qquad \text{(short regression)} \]
How well does \(\hat{\alpha}_1\) approximate \(\hat{\beta}_1\)?
2.2 The OVB formula
OVB occurs when the omitted variable is correlated with both the dependent variable and the included independent variable(s). The short regression coefficient relates to the long regression coefficient by:
\[ \alpha_1 = \frac{\text{Cov}(y, x_1)}{\text{Var}(x_1)} = \beta_1 + \beta_2 \cdot \delta \]
where \(\delta\) is the coefficient from regressing \(x_2\) on \(x_1\). The term \(\beta_2 \cdot \delta\) is the omitted variable bias.
\(\hat{\alpha}_1 = \hat{\beta}_1\) under either of two conditions:
- (a) \(x_1\) and \(x_2\) are uncorrelated (\(\delta = 0\)), or
- (b) \(x_2\) has no effect on \(y\) conditional on \(x_1\) (\(\beta_2 = 0\))
2.3 Direction of OVB
OVB can be positive or negative. The direction depends on the signs of \(\beta_2\) and \(\delta\):
| True \(\beta_1\) | Sign of OVB (\(\beta_2 \cdot \delta\)) | Effect on \(\hat{\alpha}_1\) |
|---|---|---|
| \(+\) | \(+\) | Overestimates magnitude — \(\hat{\alpha}_1\) too large |
| \(-\) | \(+\) | Underestimates magnitude — \(\hat{\alpha}_1\) closer to zero |
| \(+\) | \(-\) | Underestimates magnitude — \(\hat{\alpha}_1\) closer to zero |
| \(-\) | \(-\) | Overestimates magnitude — \(\hat{\alpha}_1\) too negative |
A positive bias means the estimate is higher on the number line, not necessarily larger in magnitude.
3 OVB: Exercises
We use a simulated population where birth weight (dbwt) depends on gestational length (gl) and pre-pregnancy BMI (bmi). The true DGP is:
\[ \text{dbwt}_i = -1500 + 150 \cdot \text{gl}_i - 0.8 \cdot \text{bmi}_i + u_i \]
3.1 Exercise 1: Long regression (the correct model)
Draw a random sample of 1,000 observations and fit the correctly specified OLS model of birth weight on gestational length and BMI.
The dependent variable is dbwt. The two independent variables are gl and bmi.
The formula should be: dbwt ~ gl + bmi
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_long <- lm(dbwt ~ gl + bmi, data = data_sample)
summary(mod_long)
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_long <- lm(dbwt ~ gl + bmi, data = data_sample)
summary(mod_long)Are the coefficient estimates close to the true population parameters (\(\beta_0 = -1500\), \(\beta_1 = 150\), \(\beta_2 = -0.8\))? What might cause them to differ?
Discussion: The estimates should be close but not exact. Sampling variability means any single sample will produce estimates that deviate from the true values. Unbiasedness is a property in expectation — the average across many samples converges to the truth.
3.2 Exercise 2: Short regression (omitting gestational length)
Using the same sample, fit an OLS model of birth weight on BMI only, omitting gestational length.
You are regressing dbwt on bmi only — do not include gl.
The formula should be: dbwt ~ bmi
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_short <- lm(dbwt ~ bmi, data = data_sample)
summary(mod_short)
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_short <- lm(dbwt ~ bmi, data = data_sample)
summary(mod_short)Is the estimated coefficient on BMI different from what you found in Exercise 1? Which direction did it shift, and why?
Discussion: The coefficient on BMI should be much more negative in the short regression (around \(-75\) to \(-80\)) compared to the long regression (around \(-0.8\)). This is because the short regression attributes the effect of gestational length to BMI. Since BMI negatively affects gl (\(\delta = -0.5\)) and gl positively affects dbwt (\(\beta_2 = 150\)), the OVB is \(150 \times (-0.5) = -75\), which gets added to the true BMI coefficient.
3.3 Exercise 3: Calculate the OVB
Using the long regression results, compute the expected OVB and compare it to the actual difference between the short and long regression coefficients on BMI.
beta_2 is the coefficient on gl in the long regression. Extract it with coef(mod_long)["gl"].
The expected OVB is beta_2 * delta. You already computed delta from the auxiliary regression.
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_long <- lm(dbwt ~ gl + bmi, data = data_sample)
mod_short <- lm(dbwt ~ bmi, data = data_sample)
# Extract beta_2 (coefficient on gl from the long regression)
beta_2 <- coef(mod_long)["gl"]
# Extract delta (coefficient on bmi from regressing gl on bmi)
aux_reg <- lm(gl ~ bmi, data = data_sample)
delta <- coef(aux_reg)["bmi"]
# Calculate expected OVB
expected_ovb <- beta_2 * delta
# Compare with actual difference
actual_ovb <- coef(mod_short)["bmi"] - coef(mod_long)["bmi"]
cat("Expected OVB (beta_2 * delta):", round(expected_ovb, 2), "\n")
cat("Actual OVB (alpha_1 - beta_1):", round(actual_ovb, 2), "\n")
set.seed(123456789)
data_sample <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod_long <- lm(dbwt ~ gl + bmi, data = data_sample)
mod_short <- lm(dbwt ~ bmi, data = data_sample)
# Extract beta_2 (coefficient on gl from the long regression)
beta_2 <- coef(mod_long)["gl"]
# Extract delta (coefficient on bmi from regressing gl on bmi)
aux_reg <- lm(gl ~ bmi, data = data_sample)
delta <- coef(aux_reg)["bmi"]
# Calculate expected OVB
expected_ovb <- beta_2 * delta
# Compare with actual difference
actual_ovb <- coef(mod_short)["bmi"] - coef(mod_long)["bmi"]
cat("Expected OVB (beta_2 * delta):", round(expected_ovb, 2), "\n")
cat("Actual OVB (alpha_1 - beta_1):", round(actual_ovb, 2), "\n")Do the expected and actual OVB agree? Should they agree exactly?
Discussion: The expected OVB (\(\hat{\beta}_2 \cdot \hat{\delta}\)) and the actual difference (\(\hat{\alpha}_1 - \hat{\beta}_1\)) should agree exactly within a sample. This is not an approximation — it is an algebraic identity (the Frisch-Waugh-Lovell theorem guarantees this decomposition holds in any given sample).
3.4 Exercise 4: Predict the direction of OVB
Before looking at the results, reason through the direction of the OVB from omitting gestational length.
Fill in the sign of each component as "positive" or "negative":
Think about the DGP. Gestational length has a coefficient of \(+150\) on birth weight. What sign is that?
BMI enters the gestational length equation as \(-0.5 \cdot \text{bmi}\). So \(\delta\) is negative. A positive times a negative gives…
# Sign of beta_2: effect of gestational length on birth weight
sign_beta2 <- "positive"
# Sign of delta: effect of bmi on gestational length
sign_delta <- "negative"
# Sign of OVB = beta_2 * delta
sign_ovb <- "negative"
cat("beta_2 (gl -> dbwt):", sign_beta2, "\n")
cat("delta (bmi -> gl):", sign_delta, "\n")
cat("OVB = beta_2 * delta:", sign_ovb, "\n\n")
# Verify your reasoning
if (sign_beta2 == "positive" & sign_delta == "negative" & sign_ovb == "negative") {
cat("Correct! Longer gestation increases birth weight (positive beta_2),\n")
cat("but higher BMI reduces gestational length (negative delta),\n")
cat("so the OVB is negative: the short regression overestimates\n")
cat("the negative effect of BMI on birth weight.\n")
} else {
cat("Check your reasoning against the DGP:\n")
cat(" gl enters dbwt with coefficient +150 (positive)\n")
cat(" bmi enters gl with coefficient -0.5 (negative)\n")
}
# Sign of beta_2: effect of gestational length on birth weight
sign_beta2 <- "positive"
# Sign of delta: effect of bmi on gestational length
sign_delta <- "negative"
# Sign of OVB = beta_2 * delta
sign_ovb <- "negative"
cat("beta_2 (gl -> dbwt):", sign_beta2, "\n")
cat("delta (bmi -> gl):", sign_delta, "\n")
cat("OVB = beta_2 * delta:", sign_ovb, "\n\n")
# Verify your reasoning
if (sign_beta2 == "positive" & sign_delta == "negative" & sign_ovb == "negative") {
cat("Correct! Longer gestation increases birth weight (positive beta_2),\n")
cat("but higher BMI reduces gestational length (negative delta),\n")
cat("so the OVB is negative: the short regression overestimates\n")
cat("the negative effect of BMI on birth weight.\n")
} else {
cat("Check your reasoning against the DGP:\n")
cat(" gl enters dbwt with coefficient +150 (positive)\n")
cat(" bmi enters gl with coefficient -0.5 (negative)\n")
}3.5 Exercise 5: Sampling distribution of the biased estimator
Draw 200 random samples of 1,000 observations each. In each sample, fit the short regression (omitting gl). Plot the sampling distribution of \(\hat{\alpha}_1\) on BMI and compare the mean to the true \(\beta_2 = -0.8\).
The short regression formula is dbwt ~ bmi (omitting gl). Extract the coefficient with coef(mod)["bmi"].
Complete the three blanks:
lm(dbwt ~ bmi, ...)coef(mod)["bmi"]
beta1hat <- numeric(200)
for (i in 1:200) {
samp <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod <- lm(dbwt ~ bmi, data = samp)
beta1hat[i] <- coef(mod)["bmi"]
}
cat("Mean of sampling distribution:", round(mean(beta1hat), 2), "\n")
cat("True beta on bmi: -0.80\n")
cat("Expected biased value: ", round(-0.8 + 150 * (-0.5), 2), "\n")
ggplot(data.frame(estimate = beta1hat), aes(x = estimate)) +
geom_histogram(aes(y = after_stat(density)),
bins = 30, fill = slate_blue, color = "white", alpha = 0.8) +
geom_vline(xintercept = mean(beta1hat), color = terracotta,
linewidth = 1, linetype = "solid") +
geom_vline(xintercept = -0.8, color = sage,
linewidth = 1, linetype = "dashed") +
labs(
title = "Sampling Distribution of BMI Coefficient (gl omitted)",
subtitle = "Terracotta = sample mean | Sage dashed = true value (-0.8)",
x = "Estimated coefficient on BMI",
y = "Density"
) +
theme_house()
beta1hat <- numeric(200)
for (i in 1:200) {
samp <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
mod <- lm(dbwt ~ bmi, data = samp)
beta1hat[i] <- coef(mod)["bmi"]
}
cat("Mean of sampling distribution:", round(mean(beta1hat), 2), "\n")
cat("True beta on bmi: -0.80\n")
cat("Expected biased value: ", round(-0.8 + 150 * (-0.5), 2), "\n")
ggplot(data.frame(estimate = beta1hat), aes(x = estimate)) +
geom_histogram(aes(y = after_stat(density)),
bins = 30, fill = slate_blue, color = "white", alpha = 0.8) +
geom_vline(xintercept = mean(beta1hat), color = terracotta,
linewidth = 1, linetype = "solid") +
geom_vline(xintercept = -0.8, color = sage,
linewidth = 1, linetype = "dashed") +
labs(
title = "Sampling Distribution of BMI Coefficient (gl omitted)",
subtitle = "Terracotta = sample mean | Sage dashed = true value (-0.8)",
x = "Estimated coefficient on BMI",
y = "Density"
) +
theme_house()The sampling distribution should be centered around \(-75.8\) (i.e., \(-0.8 + 150 \times (-0.5)\)), far from the true value of \(-0.8\). What does this tell you about the estimator?
Discussion: The estimator is biased — no matter how many times we sample, the average does not converge to the true parameter. The estimator is also inconsistent: even as the sample size increases toward \(N = 10{,}000\), the bias persists because it is a property of the model specification, not sampling variability.
4 Measurement Error: Theory
Measurement error applies to all types of variables. We focus on the classical “errors-in-variables” model and distinguish ME that affects the independent variable versus the dependent variable.
4.1 Classical ME in the independent variable
Take a single-variable population model:
\[ y_i = \beta_0 + \beta_1 x_{1i} + u_i \]
Suppose we measure \(x_1\) with error: \(\tilde{x}_1 = x_1 + \varepsilon\)
Classical ME assumptions:
- \(E[\varepsilon] = 0\)
- \(\text{Cov}(y, \varepsilon) = 0\)
- \(\text{Cov}(x_1, \varepsilon) = 0\)
- \(\text{Cov}(u, \varepsilon) = 0\)
Substituting into the population model:
\[ y_i = \beta_0 + \beta_1(\tilde{x}_1 - \varepsilon) + u_i = \beta_0 + \beta_1 \tilde{x}_1 + (u_i - \beta_1 \varepsilon) \]
Since \(\text{Cov}(\tilde{x}_1, \varepsilon) \neq 0\) by construction, the new residual \((u_i - \beta_1 \varepsilon)\) is correlated with \(\tilde{x}_1\). This produces attenuation bias:
\[ \hat{\beta}_1 = \beta_1 \cdot \frac{\text{Var}(x)}{\text{Var}(x + \varepsilon)} \]
Since \(\text{Var}(x + \varepsilon) > \text{Var}(x)\), we multiply \(\beta_1\) by a factor less than 1, biasing the estimate toward zero.
4.2 Classical ME in the dependent variable
If instead \(\tilde{y} = y + \varepsilon\) with \(\text{Cov}(x, \varepsilon) = 0\):
\[ \tilde{y}_i = \beta_0 + \beta_1 x_{1i} + (u_i + \varepsilon_i) \]
The estimate \(\hat{\beta}_1\) remains unbiased and consistent. However, \(\text{Var}(u + \varepsilon) > \text{Var}(u)\), so standard errors increase — we lose precision but not accuracy.
- ME in X \(\rightarrow\) attenuation bias (coefficient biased toward zero)
- ME in Y \(\rightarrow\) no bias, but larger standard errors (loss of precision)
This asymmetry is one of the most important results in applied econometrics.
5 ME: Exercises
5.1 Exercise 6: Measurement error in the independent variable
Draw a sample of 1,000 observations. Create a mismeasured gestational length variable by adding classical ME with mean 0 and standard deviation 3. Fit OLS of birth weight on the mismeasured gl and (correctly measured) BMI.
Classical ME has mean 0 and some standard deviation. Here sd = 3. The noisy variable is gl + me_noise.
rnorm(1000, mean = 0, sd = 3)data_me$gl + me_noise- Regress on
gl_me(notgl)
set.seed(987654321)
data_me <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
# Create measurement error and noisy gl
me_noise <- rnorm(1000, mean = 0, sd = 3)
data_me$gl_me <- data_me$gl + me_noise
# Fit OLS with mismeasured gl
mod_me <- lm(dbwt ~ gl_me + bmi, data = data_me)
summary(mod_me)
set.seed(987654321)
data_me <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
# Create measurement error and noisy gl
me_noise <- rnorm(1000, mean = 0, sd = 3)
data_me$gl_me <- data_me$gl + me_noise
# Fit OLS with mismeasured gl
mod_me <- lm(dbwt ~ gl_me + bmi, data = data_me)
summary(mod_me)Is the coefficient on gestational length attenuated compared to the true value of 150? What about the BMI coefficient?
Discussion: The coefficient on gl_me should be smaller in magnitude than 150 (attenuated toward zero). The BMI coefficient may shift because the attenuation in gl gets partially absorbed by bmi. Keep in mind that attenuation is a property in expectation — a single sample may not show it clearly.
5.2 Exercise 7: Measurement error in the dependent variable
Now suppose you measured gestational length correctly but the instrument for measuring birth weight introduces random error with mean 0 and standard deviation 200. Create the mismeasured outcome and fit OLS.
The mismeasured outcome is dbwt + me_y_noise. The regression should use dbwt_me as the dependent variable.
data_me$dbwt + me_y_noiselm(dbwt_me ~ gl + bmi, ...)
set.seed(987654321)
data_me <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
# Create mismeasured birth weight
me_y_noise <- rnorm(1000, mean = 0, sd = 200)
data_me$dbwt_me <- data_me$dbwt + me_y_noise
# Fit OLS with mismeasured outcome
mod_me_y <- lm(dbwt_me ~ gl + bmi, data = data_me)
summary(mod_me_y)
set.seed(987654321)
data_me <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
# Create mismeasured birth weight
me_y_noise <- rnorm(1000, mean = 0, sd = 200)
data_me$dbwt_me <- data_me$dbwt + me_y_noise
# Fit OLS with mismeasured outcome
mod_me_y <- lm(dbwt_me ~ gl + bmi, data = data_me)
summary(mod_me_y)Are the point estimates biased? Compare the standard errors to what you got in Exercise 1.
Discussion: The coefficient estimates should be close to the true values (150 and \(-0.8\)) — ME in \(Y\) does not cause bias. However, the standard errors should be noticeably larger because the residual variance increased by \(\text{Var}(\varepsilon) = 200^2 = 40{,}000\). This is the precision cost of measurement error in the outcome.
5.3 Exercise 8: Attenuation bias sampling distribution
Demonstrate attenuation bias by fitting the OLS model with mismeasured gl across 200 random samples. Plot the sampling distribution and verify that the mean is attenuated toward zero.
Inside the loop, regress dbwt on the noisy variable gl_noisy (not gl), plus bmi.
lm(dbwt ~ gl_noisy + bmi, data = samp)coef(mod)["gl_noisy"]
beta_gl_me <- numeric(200)
for (i in 1:200) {
samp <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
samp$gl_noisy <- samp$gl + rnorm(1000, mean = 0, sd = 3)
mod <- lm(dbwt ~ gl_noisy + bmi, data = samp)
beta_gl_me[i] <- coef(mod)["gl_noisy"]
}
cat("Mean of sampling distribution:", round(mean(beta_gl_me), 2), "\n")
cat("True beta on gl: 150.00\n")
# Attenuation factor: Var(gl) / Var(gl + noise)
gl_var <- var(pop$gl)
noise_var <- 9 # sd = 3, so var = 9
cat("Expected attenuation factor: ", round(gl_var / (gl_var + noise_var), 3), "\n")
cat("Expected attenuated coef: ", round(150 * gl_var / (gl_var + noise_var), 2), "\n")
ggplot(data.frame(estimate = beta_gl_me), aes(x = estimate)) +
geom_histogram(aes(y = after_stat(density)),
bins = 30, fill = sage, color = "white", alpha = 0.8) +
geom_vline(xintercept = mean(beta_gl_me), color = terracotta,
linewidth = 1, linetype = "solid") +
geom_vline(xintercept = 150, color = slate_blue,
linewidth = 1, linetype = "dashed") +
labs(
title = "Sampling Distribution of GL Coefficient (ME in X)",
subtitle = "Terracotta = sample mean | Slate dashed = true value (150)",
x = "Estimated coefficient on gestational length",
y = "Density"
) +
theme_house()
beta_gl_me <- numeric(200)
for (i in 1:200) {
samp <- pop[sample(nrow(pop), 1000, replace = FALSE), ]
samp$gl_noisy <- samp$gl + rnorm(1000, mean = 0, sd = 3)
mod <- lm(dbwt ~ gl_noisy + bmi, data = samp)
beta_gl_me[i] <- coef(mod)["gl_noisy"]
}
cat("Mean of sampling distribution:", round(mean(beta_gl_me), 2), "\n")
cat("True beta on gl: 150.00\n")
# Attenuation factor: Var(gl) / Var(gl + noise)
gl_var <- var(pop$gl)
noise_var <- 9 # sd = 3, so var = 9
cat("Expected attenuation factor: ", round(gl_var / (gl_var + noise_var), 3), "\n")
cat("Expected attenuated coef: ", round(150 * gl_var / (gl_var + noise_var), 2), "\n")
ggplot(data.frame(estimate = beta_gl_me), aes(x = estimate)) +
geom_histogram(aes(y = after_stat(density)),
bins = 30, fill = sage, color = "white", alpha = 0.8) +
geom_vline(xintercept = mean(beta_gl_me), color = terracotta,
linewidth = 1, linetype = "solid") +
geom_vline(xintercept = 150, color = slate_blue,
linewidth = 1, linetype = "dashed") +
labs(
title = "Sampling Distribution of GL Coefficient (ME in X)",
subtitle = "Terracotta = sample mean | Slate dashed = true value (150)",
x = "Estimated coefficient on gestational length",
y = "Density"
) +
theme_house()How does the attenuation factor \(\frac{\text{Var}(x)}{\text{Var}(x + \varepsilon)}\) relate to the mean of the sampling distribution?
Discussion: The theoretical attenuation factor tells us exactly how much the coefficient will shrink. With \(\text{Var}(\text{gl}) \approx 6.5\) and \(\text{Var}(\varepsilon) = 9\), the factor is roughly \(6.5 / 15.5 \approx 0.42\), yielding an expected coefficient of \(150 \times 0.42 \approx 63\). The sampling distribution should be centered near this value — far from the true 150. More noise (larger \(\text{Var}(\varepsilon)\)) means more attenuation.
6 Extensions & Summary
6.1 Visualizing attenuation
The plot below shows how increasing measurement error in \(X\) attenuates the fitted slope, while ME in \(Y\) leaves the slope unchanged but increases scatter.
6.2 Multi-variable OVB (optional)
When multiple variables are omitted, the bias generalizes. If the true model includes \(x_1, x_2, \ldots, x_K\) but we only include \(x_1\):
\[ \text{Bias}(\hat{\beta}_1) = \sum_{k=2}^{K} \beta_k \cdot \delta_k \]
where \(\delta_k\) is the coefficient from regressing \(x_k\) on \(x_1\). Each omitted variable contributes independently to the total bias.
6.3 Non-classical ME (optional)
If measurement error is correlated with the true variable (\(\text{Cov}(x, \varepsilon) \neq 0\)), the bias takes the form:
\[ \text{plim} \; \hat{\beta}_1 = \beta_1 \cdot \frac{\text{Var}(x) + \text{Cov}(\varepsilon, x)}{\text{Var}(x + \varepsilon)} \]
This does not automatically imply attenuation. Depending on \(\text{Cov}(\varepsilon, x)\), the estimate could be amplified rather than attenuated. Example: shorter men over-reporting their height in NHANES produces non-classical ME where the error is negatively correlated with the true value.
6.4 Summary
| Problem | Bias in \(\hat{\beta}_1\)? | Direction | Consistency? | Precision? |
|---|---|---|---|---|
| OVB | Yes | \(\beta_2 \cdot \delta\) (either direction) | Inconsistent | Unchanged |
| ME in X (classical) | Yes | Toward zero (attenuation) | Inconsistent | Unchanged |
| ME in Y (classical) | No | — | Consistent | Reduced (larger SEs) |
The problems identified here — endogeneity from omitted variables and measurement error — motivate the identification strategies we study in the remainder of the course: instrumental variables (Module 9), regression discontinuity (Module 10), and difference-in-differences (Module 11). Each provides a way to obtain consistent estimates when OLS fails.
References
- Angrist, Joshua D., and Jorn-Steffen Pischke. 2009. Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton University Press.
- Wooldridge, Jeffrey M. 2020. Introductory Econometrics: A Modern Approach. 7th ed. Cengage Learning.
- Pischke, Steve. 2007. “Lecture Notes on Measurement Error.” London School of Economics.
- Cunningham, Scott. 2021. Causal Inference: The Mixtape. Yale University Press.