14.4 Práctica
Los problemas de práctica del Capítulo 14 le piden ajustar modelos con error de medición y datos faltantes, y comparar los resultados con análisis ingenuos.
Problemas fáciles
14E1. ¿Qué es la dilución de la regresión? ¿Cómo afecta el error de medición en el predictor a la pendiente estimada?
14E2. ¿Cuáles son los tres tipos de datos faltantes (MCAR, MAR, MNAR)? ¿Cuál es el más fácil de manejar?
14E3. ¿Por qué la imputación por la media suele ser una mala idea?
14E4. ¿Por qué la imputación Bayesiana propaga la incertidumbre mejor que la imputación múltiple?
Problemas medios
14M1. Simule datos con error de medición en el predictor. Compare la pendiente ingenua con la pendiente verdadera. Muestre la atenuación.
# 14M1: Measurement error and attenuation
set.seed(42)
n <- 300
x_true <- runif(n, 0, 10)
y <- 1 + 0.6 * x_true + rnorm(n, 0, 1)
# Different levels of measurement error
for (sigma_x in c(0.5, 1.0, 2.0, 3.0)) {
x_obs <- x_true + rnorm(n, 0, sigma_x)
m <- lm(y ~ x_obs)
cat(sprintf(" sigma_x = %.1f: naive slope = %.3f (true = 0.600)\n",
sigma_x, coef(m)[2]))
}
cat("\n Larger measurement error -> more attenuation (slope closer to 0)\n")14M2. Cree datos faltantes bajo MAR. Compare el análisis de casos completos con la imputación condicional.
# 14M2: MAR missing data — complete-case vs imputation
set.seed(42)
n <- 400
x <- runif(n, 0, 10)
y <- 2 + 0.5 * x + rnorm(n, 0, 1)
# MAR: x missing when y is high
miss_idx <- which(y > quantile(y, 0.75))
x_obs <- x
x_obs[miss_idx] <- NA
# Complete-case
d_cc <- data.frame(y = y, x = x_obs)[complete.cases(data.frame(y = y, x = x_obs)), ]
m_cc <- lm(y ~ x, data = d_cc)
# Conditional imputation (use y to predict missing x)
d_obs <- data.frame(y = y[!is.na(x_obs)], x = x_obs[!is.na(x_obs)])
m_imp <- lm(x ~ y, data = d_obs)
x_imputed <- ifelse(is.na(x_obs),
predict(m_imp, newdata = data.frame(y = y)),
x_obs)
m_full <- lm(y ~ x_imputed)
cat("MAR missing data comparison:\n")
cat(" True slope: 0.500\n")
cat(" Complete-case slope:", round(coef(m_cc)[2], 3), "(biased)\n")
cat(" Imputed slope:", round(coef(m_full)[2], 3), "(closer to true)\n")
cat(" N complete cases:", nrow(d_cc), "out of", n, "\n")Problemas difíciles
14H1. Simule datos con error de medición tanto en el predictor como en el resultado. Ajuste un modelo que contemple ambos. ¿Cómo cambian los estimados?
# 14H1: Measurement error in both x and y
set.seed(42)
n <- 300
x_true <- runif(n, 0, 10)
y_true <- 1 + 0.5 * x_true
# Observed with error
x_obs <- x_true + rnorm(n, 0, 1.0)
y_obs <- y_true + rnorm(n, 0, 1.0)
# Naive model (ignores both errors)
m_naive <- lm(y_obs ~ x_obs)
# Corrected model (regression calibration for x)
reliability_x <- var(x_true) / var(x_obs)
x_corrected <- mean(x_obs) + reliability_x * (x_obs - mean(x_obs))
m_corrected <- lm(y_obs ~ x_corrected)
cat("Measurement error in both x and y:\n")
cat(" True slope: 0.500\n")
cat(" Naive slope:", round(coef(m_naive)[2], 3), "(attenuated)\n")
cat(" Corrected slope (x only):", round(coef(m_corrected)[2], 3), "\n")
cat("\n Error in y increases variance but does not bias slope.\n")
cat(" Error in x attenuates the slope.\n")
cat(" Full Bayesian model would handle both simultaneously.\n")14H2. Cree datos con falta MNAR (la falta depende del valor no observado mismo). Muestre que incluso la imputación Bayesiana es sesgada sin un modelo explícito de la falta.
14H3. Ajuste un modelo que maneje simultáneamente el error de medición en el predictor y los datos faltantes. Compare con un análisis ingenuo que ignora ambos.