library(AER) library(plm) data(Guns) Guns78 <- subset(Guns, year == "1978") Guns78$law <- as.numeric(Guns78$law) Guns84 <- subset(Guns, year == "1984") Guns84$law <- as.numeric(Guns84$law) # crear las variables necesarias para estimar el primer modelo diff_logv <- diff_law <- # estimar el primer modelo usando los datos diferenciados mod_diff <- coef_diff <- round(mod_diff$coef, 4) # estimar el segundo modelo usando plm () mod_plm <- coef_plm <- round(mod_plm$coef, 4) # verificar que ambas estimaciones sean numéricamente idénticas # crear las variables necesarias para estimar el primer modelo diff_logv <- log(Guns84$violent/Guns78$violent) diff_law <- Guns84$law - Guns78$law # estimar el primer modelo usando los datos diferenciados mod_diff <- lm(diff_logv ~ diff_law - 1) coef_diff <- round(mod_diff$coef, 4) # estimar el segundo modelo usando plm () mod_plm <- plm(log(violent) ~ law, data = Guns, subset = (year == "1978" | year == "1984"), index = c("state", "year"), model = "within") coef_plm <- round(mod_plm$coef, 4) # verificar que ambas estimaciones sean numéricamente idénticas coef_diff == coef_plm ex() %>% check_predefined_objects(c("Guns78", "Guns84")) ex() %>% check_object("diff_logv") %>% check_equal() ex() %>% check_object("diff_law") %>% check_equal() test_or({ ex() %>% check_object("mod_diff") %>% check_equal() },{ ex() %>% override_solution("lm(diff_logv ~ diff_law + 0)") %>% check_function("lm") %>% check_result() }) ex() %>% check_object("coef_diff") %>% check_equal() ex() %>% check_function("plm") %>% { check_arg(., "index") %>% check_equal() check_arg(., "model") %>% check_equal() } ex() %>% check_object("coef_plm") %>% check_equal() test_or({ test_student_typed("coef_diff == coef_plm") },{ test_student_typed("coef_plm == coef_diff") }) success_msg("¡Correcto! Para períodos de tiempo T = 2, la primera especificación del modelo surge como un caso especial del modelo de efectos fijos, por lo que ambas estimaciones coinciden.")