6.3 Modelo para la varianza
El código ajusta un modelo de regresión lineal múltiple (utilizando la función lm()), donde ln_sigma2 es la variable respuesta y las variables predictoras son pobreza, nd, y varias transformaciones de éstas. El objetivo de este modelo es estimar la función generalizada de varianza (FGV) para los dominios observados.
library(gtsummary)
FGV1 <- lm(ln_sigma2 ~ pobreza +
I(sqrt(nd)) +
I(sqrt(pobreza)) +
I(sqrt(nd^pobreza))
,
data = baseFGV)
tbl_regression(FGV1) %>%
add_glance_table(include = c(r.squared, adj.r.squared))| Characteristic | Beta | 95% CI1 | p-value |
|---|---|---|---|
| pobreza | -40 | -64, -15 | 0.002 |
| I(sqrt(nd)) | -0.06 | -0.08, -0.03 | <0.001 |
| I(sqrt(pobreza)) | 31 | 15, 47 | <0.001 |
| I(sqrt(nd^pobreza)) | 1.4 | 0.14, 2.7 | 0.030 |
| R² | 0.298 | ||
| Adjusted R² | 0.261 | ||
| 1 CI = Confidence Interval | |||
Después de tener la estimación del modelo se debe obtener el valor de la constante \(\Delta\) para lo cual se usa el siguiente código.
delta.hat = sum(baseFGV$vardir) /
sum(exp(fitted.values(FGV1)))De donde se obtiene que \(\Delta = 1.6825614\). Final es posible obtener la varianza suavizada ejecutando el siguiente comando.
hat.sigma <-
data.frame(dam2 = baseFGV$dam2,
hat_var = delta.hat * exp(fitted.values(FGV1)))
baseFGV <- left_join(baseFGV, hat.sigma)
tba(head(baseFGV, 10))| dam2 | pobreza | nd | vardir | ln_sigma2 | hat_var |
|---|---|---|---|---|---|
| 00101 | 0.2225 | 6796 | 0.0004 | -7.9505 | 0.0004 |
| 00201 | 0.1822 | 531 | 0.0004 | -7.7493 | 0.0039 |
| 00206 | 0.3366 | 230 | 0.0031 | -5.7661 | 0.0041 |
| 00301 | 0.4266 | 666 | 0.0043 | -5.4432 | 0.0050 |
| 00302 | 0.4461 | 261 | 0.0014 | -6.5697 | 0.0029 |
| 00303 | 0.5587 | 566 | 0.0142 | -4.2552 | 0.0075 |
| 00304 | 0.5406 | 412 | 0.0116 | -4.4550 | 0.0042 |
| 00401 | 0.3359 | 1219 | 0.0010 | -6.9320 | 0.0042 |
| 00402 | 0.1496 | 172 | 0.0007 | -7.2136 | 0.0047 |
| 00403 | 0.4644 | 309 | 0.0015 | -6.4935 | 0.0031 |
Validación del modelo para la FGV
par(mfrow = c(2, 2))
plot(FGV1)Comparación entre la varianza estimada versus la pronosticada por la FGV
ggplot(baseFGV ,
aes(y = vardir, x = hat_var)) +
geom_point() +
geom_smooth(method = "loess") +
labs(x = "FGV", y = "VarDirEst") +
ylab("Varianza del Estimador Directo")Predicción de la varianza suavizada
base_sae <- base_sae %>% left_join(hat.sigma, by = "dam2")Ahora, realizamos un gráfico de linea para ver la volatilidad es la estimaciones de las varianzas.
ggplot(base_sae %>%
arrange(nd), aes(x = 1:nrow(base_sae))) +
geom_line(aes(y = vardir, color = "VarDirEst")) +
geom_line(aes(y = hat_var, color = "FGV")) +
labs(y = "Varianzas", x = "Tamaño muestral", color = " ") +
scale_x_continuous(breaks = seq(1, nrow(base_sae), by = 10),
labels = base_sae$nd[order(base_sae$nd)][seq(1, nrow(base_sae), by = 10)]) +
scale_color_manual(values = c("FGV" = "Blue", "VarDirEst" = "Red"))El siguiente código utiliza la función mutate() del paquete dplyr para crear nuevas variables de la base de datos base_sae y luego guarda el resultado en un archivo RDS llamado base_FH_2018.rds.
En concreto, el código realiza las siguientes operaciones:
La variable
deff_dam2se ajusta a 1 cuando es NaN.La variable
deff_FGVse calcula a partir de otras dos variableshat_varyvardir.Sivardires 0, entoncesdeff_FGVse ajusta a 1. En caso contrario, se dividehat_varpor vardir / deff_dam2para obtenerdeff_FGV.La variable
deff_FGVse regulariza utilizando el criterio MDS: sideff_FGVes menor que 1, se ajusta a 1.Finalmente, se calcula la variable
n_eff_FGVdividiendond(el tamaño de la muestra) pordeff_FGV.
base_FH <- base_sae %>%
mutate(
deff_dam2 = ifelse(is.nan(deff_dam2), 1,
deff_dam2),
deff_FGV = ifelse(
vardir == 0 ,
1,
hat_var / (vardir / deff_dam2)
),
# Criterio MDS para regularizar el DeffFGV
deff_FGV = ifelse(deff_FGV < 1, 1, deff_FGV),
n_eff_FGV = nd / deff_FGV
)
saveRDS(object = base_FH, "Recursos/Día2/Sesion2/Data/base_FH_2018.rds")