Path: blob/main/Trabajo_final/grupo8/Grupo_8.R
2714 views
# Trabajo Final GRUPO 812# Clear environment3rm(list=ls(all=TRUE))45# Cargamos librerías6install.packages("librarian")7install.packages("read_dta")8library(haven)9install.packages("magrittr")10library(magrittr)11library(dplyr)1213librarian::shelf(14tidyverse # dplyr, tidyr, stringr, ggplot2, etc in unique library15, haven # to read datset: .dta (stata), .spss, .dbf16, fastDummies # for dummies17, stargazer # for summary and econometrics tables18, sandwich # for linear models19, lmtest # for robust standar error20, estimatr # for iv, cluster, robust standar error21, lfe # for fixed effects, cluster standar error22, caret # for easy machine learning workflow (mse, rmse)23, texreg # library for export table24, xtable, mfx # probit , logit model marginal effects25)2627# Modificamos la ruta donde se encuentra la data28user <- Sys.getenv("USERNAME") # username29setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_final/grupo8") ) # set directorio30data <- read_dta("../datos/mss_repdata.dta")3132"33Datos que vamos a usar:34- NDVI g (Tasa de variación del índice de vegetación),35- tot 100 (t´erminos de intercambio), trade pGDP (porcentaje de las exportaciones recpecto al PBI),36- pop den rur (Densidad poblacional rural),37- land crop (porcentaje de tierra cultivable en uso),38- va agr (Valor agregado del sectoragr´ıculta respecto PBI) y va ind manf (Valor agregado del sector manufacturero respecto PBI).39"4041# ----1 MODELOS LINEALES----42# ----Tabla de estadísticas----43# Definimos las variables que vamos a tomar en cuenta para la tabla44list_vars <- c("Tasa de variación del índice de vegetación","Términos de intercambio","Porcentaje de las exportaciones respecto al PBI","Densidad poblacional rural","Porcentaje de tierra cultivable en uso","Valor agregado del sector agricultura respecto PBI","Valor agregado del sector manufacturero respecto PBI")4546table1 <- data %>% dplyr::select(NDVI_g, tot_100,trade_pGDP,47pop_den_rur, land_crop, va_agr, va_ind_manf) %>% as.data.frame()4849# Código para exportar a Latex50stargazer(table1, title = "Descriptive Statistics", digits = 2, # decimales con 2 dígitos51covariate.labels = list_vars, # Lista de etiquetas52summary.stat = c("mean", "sd", "n"), # se especifica el orden de los estadísticos53min.max = F, # borrar el estadístico de maximo y mínimo54notes.append = FALSE, # TRUE append the significance levels55notes.align = 'l')5657# ----Replicar tabla 3----58# Creamos dummies59data <- dummy_cols(data, select_columns = 'ccode')60index <- grep("ccode_", colnames(data))61data$time_year <- data$year - 197862list_vars <- names(data)[index]63list_vars[1]64i = 165while(i < 42){66var <- paste0(list_vars[i],"_","time")67data[var] <- data[list_vars[i]]*data["time_year"]68i = i + 169}7071# Seteamos los efectos fijos y la tendencia en el tiempo72data$ccode_factor <- as.factor(data$ccode)73class(data$ccode_factor)74class(data$ccode)75index_country_time <- grep("_time$", colnames(data))76country_time_trend <-names(data)[index_country_time]7778# Especificamos la fórmula del MODELO 1 a regresionar79model1_formula <- as.formula(80paste("any_prio",81"~",82paste("GPCP_g","GPCP_g_l", "ccode_factor",83paste(country_time_trend, collapse = "+")84, sep="+")85)86)8788# Especificamos la fórmula del MODELO 2 a regresionar89model2_formula <- as.formula(90paste("war_prio",91"~",92paste("GPCP_g","GPCP_g_l", "ccode_factor",93paste(country_time_trend, collapse = "+")94, sep="+")95)96)9798# Estimamos el MODELO 1 mediante el método OLS99ols_model1 <- lm(model1_formula, data = data)100101# Estimamos el MODELO 2 mediante el método OLS102ols_model2 <- lm(model2_formula, data = data)103104# Obtenemos los root mean square errors de cada modelo y los redondeamos al segundo (o tercer) decimal105rmse1 <- round(RMSE(ols_model1$fitted.values, data$any_prio ),2)106rmse2 <- round(RMSE(ols_model2$fitted.values, data$war_prio ),3)107108# Obtenemos los errores estándares del MODELO 1 y los redondeamos al tercer decimal109robust_model1 <- coeftest(ols_model1,110vcov = vcovCL,111type = "HC1",112cluster = ~ ccode)113sd_robust_model1 <- round(robust_model1[,2],3)114115# Obtenemos los errores estándares del MODELO 2 y los redondeamos al tercer decimal116robust_model2 <- coeftest(ols_model2,117vcov = vcovCL,118type = "HC1",119cluster = ~ ccode)120sd_robust_model2 <- round(robust_model2[,2],3)121122# Redondeamos los R cuadrados al segundo decimal123r21<-round(summary(ols_model1)$ r.squared,2)124r22<-round(summary(ols_model2)$ r.squared,2)125126# customizamos la tabla con los resultados de las regresiones para exportar a Latex127stargazer( ols_model1, ols_model2,128se=list( sd_robust_model1, sd_robust_model2),129dep.var.labels = c("Civil Conflict 25", "Civil Conflict 1,000"),130column.labels=c("Deaths (OLS)","Deaths (OLS)"),131title = "Rainfall and Civil Conflict (Reduced-Form)",132keep = c("GPCP_g","GPCP_g_l"),133covariate.labels=c("Growth in rainfall, t","Growth in rainfall, t-1"),134align = T, no.space = T,135add.lines=list(c("Country fixed effects","yes","yes"),136c("Country-specific time trends","yes","yes"),137c("Root mean square error",rmse1,rmse2)),138keep.stat = c("n", "rsq"),139notes.append = FALSE, notes.align = "l",140notes ="Huber robust standard errors are in parentheses.", style = "qje"141)142143# ----Coeft plot----144145# Establecemos las condiciones iniciales como los upper bounds y lower bounds146# para ambos modelos y los organizamos en una matriz147model1_lower = coefci(ols_model1, df = Inf, vcov. = vcovHC, type = "HC1")[2,1]148model1_upper = coefci(ols_model1, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]149150model2_lower = coefci(ols_model2, df = Inf, vcov. = vcovHC, type = "HC1")[2,1]151model2_upper = coefci(ols_model2, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]152153model1.tab <- coeftest(ols_model1, vcov=vcovHC(ols_model1, type='HC1'))154model2.tab <- coeftest(ols_model2, vcov=vcovHC(ols_model2, type='HC1'))155156model1_coef <- model1.tab[2,1]157model2_coef <- model2.tab[2,1]158159model1_coef_se = model1.tab[2,2]160model2_coef_se = model2.tab[2,2]161162table<- matrix(0, 2, 4)163164table[1,1]<- model1_coef165table[1,2]<- model1_coef_se166167table[2,1]<- model2_coef168table[2,2]<- model2_coef_se169170table[1,3]<- model1_lower171table[1,4]<- model1_upper172173table[2,3]<- model2_lower174table[2,4]<- model2_upper175176# Editamos los nombres de la matriz177colnames(table)<- c("Estimate","se","lower_bound","upper_bound")178rownames(table)<- c("≥25 Deaths (OLS)", "≥1000 Deaths (OLS)")179180# Customizamos el plot181theme_set(theme_bw(20)) # tema con fondo blanco y cuadro con bordes en negro182options(repr.plot.width = 8, repr.plot.height =5) # tamaño del gráfico183xtable(table)184tab <- as.data.frame(table)185186# Coef Plot187tab %>% ggplot(aes(x=rownames(tab), y=Estimate)) +188geom_point(size=2, color = 'black') +189geom_errorbar(aes(ymin=lower_bound, ymax=upper_bound) , width = 0.05,color="black", size = 0.8) +190labs(x="", y="") + ggtitle("Coef plot GPCP_g") +191theme(text=element_text(size =15), plot.title = element_text(hjust = 0.5)) +192geom_hline(yintercept=0, linetype="dashed", color = "black", size=1) +193scale_x_discrete(limits = c("≥25 Deaths (OLS)", "≥1000 Deaths (OLS)")) + # order x - axis194theme(panel.grid.major = element_blank(), # borras las cuadrículas en el fondo195panel.grid.minor = element_blank())196197# Guardamos la imagen del plot198ggsave("coefplot.png")199200