El ejercicio pide analizar la relación entre el Gasto en Comida (\(Y\)) y el Ingreso Total (\(X\)). Según la teoría económica, esperamos que la proporción del gasto en comida disminuya a medida que aumenta el ingreso (Ley de Engel).
ggplot(engel_data, aes(x = Ingreso_Total_X, y = Gasto_Comida_Y)) +
geom_point(color = "#2c3e50") +
geom_smooth(method = "loess", se = FALSE, color = "#e74c3c") +
theme_minimal() +
labs(title = "Curva de Engel: Comida vs Ingreso Total",
x = "Ingreso Total (X)", y = "Gasto en Comida (Y)")
Se nos pide estimar 5 modelos diferentes.
Procederemos a crear las variables transformadas y correr las regresiones:
# Crear transformaciones
df_models <- engel_data %>%
mutate(
inv_X = 1/Ingreso_Total_X,
ln_Y = log(Gasto_Comida_Y),
ln_X = log(Ingreso_Total_X)
)
# Ajustar modelos
m_lineal <- lm(Gasto_Comida_Y ~ Ingreso_Total_X, data = df_models)
m_inverso <- lm(Gasto_Comida_Y ~ inv_X, data = df_models)
m_doble_log <- lm(ln_Y ~ ln_X, data = df_models)
m_log_inverso <- lm(ln_Y ~ inv_X, data = df_models)
m_log_lineal <- lm(Gasto_Comida_Y ~ ln_X, data = df_models)
Extraemos las estadísticas clave (\(R^2\) ajustado y significancia) para comparar.
Nota: No podemos comparar directamente el \(R^2\) de modelos con diferente variable dependiente (\(Y\) vs \(\ln Y\)).
# Función para extraer métricas rápidas
get_metrics <- function(model, name) {
glance(model) %>%
select(r.squared, adj.r.squared, AIC, p.value) %>%
mutate(Modelo = name)
}
bind_rows(
get_metrics(m_lineal, "Lineal (Y)"),
get_metrics(m_inverso, "Inverso (Y)"),
get_metrics(m_log_lineal, "Log-Lineal (Y)"),
get_metrics(m_doble_log, "Doble-Log (ln Y)"),
get_metrics(m_log_inverso, "Log-Inverso (ln Y)")
) %>%
select(Modelo, everything()) %>%
kable(digits = 20, caption = "Comparación de Ajuste de Modelos")
| Modelo | r.squared | adj.r.squared | AIC | p.value |
|---|---|---|---|---|
| Lineal (Y) | 0.3698237 | 0.3579336 | 622.32507 | 0.00000084513287 |
| Inverso (Y) | 0.3757518 | 0.3639735 | 621.80523 | 0.00000065311797 |
| Log-Lineal (Y) | 0.3769377 | 0.3651818 | 621.70065 | 0.00000062012910 |
| Doble-Log (ln Y) | 0.4124688 | 0.4013833 | -30.66612 | 0.00000012553283 |
| Log-Inverso (ln Y) | 0.4216199 | 0.4107071 | -31.52952 | 0.00000008197808 |
Para elegir el mejor modelo, debemos mirar no solo la estadística, sino la teoría económica. Para un bien necesario como la comida, esperamos que la elasticidad ingreso sea positiva pero menor a 1 (inelástica) y que posiblemente disminuya con el ingreso.
Las fórmulas de elasticidad ingreso (\(\eta\)) para cada modelo son:
tidy(m_doble_log) %>% filter(term == "ln_X") %>% select(estimate, p.value) %>%
kable(caption = "Coeficiente Doble-Log (Elasticidad Constante)")
| estimate | p.value |
|---|---|
| 0.7363263 | 0.0000001 |
tidy(m_log_inverso) %>% filter(term == "inv_X") %>% select(estimate, p.value) %>%
kable(caption = "Coeficiente Log-Inverso")
| estimate | p.value |
|---|---|
| -415.9105 | 0.0000001 |
Considerando el \(R^2\) más alto dentro de los grupos comparables y la lógica económica:
Recomendación: Si buscamos simplicidad, el Doble-Log. Si buscamos rigor teórico sobre la saciedad del consumidor, el Log-Inverso.