Path: blob/main/Trabajo_final/grupo9/Grupo9_Pregunta1_R.R
2714 views
"TRABAJO FINAL"12"1. MODELOS LINEALES"34# clear environment5rm(list=ls(all=TRUE))67user <- Sys.getenv("USERNAME") # username8setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_final") ) # set directorio910# Instalar y cargar librerías con shelf1112librarian::shelf(13tidyverse # dplyr, tidyr, stringr, ggplot2, etc in unique library14, haven # to read datset: .dta (stata), .spss, .dbf15, fastDummies # for dummies16, stargazer # for summary and econometrics tables17, sandwich # for linear models18, lmtest # for robust standar error19, estimatr # for iv, cluster, robust standar error (LM_robust)20, lfe # for fixed effects, cluster standar error21, texreg # library for export table22, caret23, mfx # probit , logit model marginal effects24, xtable25)2627#Leer data28repdata <- read_dta("datos/mss_repdata.dta")2930############## PARTE 1 ###################################31"Estadísticas descriptivas"3233#Hacer tabla con las variables seleccionadas y convertirlas como data frame34table1 <- repdata %>% dplyr::select(NDVI_g, tot_100, trade_pGDP,35pop_den_rur, land_crop, va_agr, va_ind_manf) %>% as.data.frame()36373839#Generar las etiquetas de las variables40list_vars <- c("Tasa de variación del índice de vegetación","términos de intercambio","porcentaje de las exportaciones respecto41al PBI","Densidad poblacional rural", "Porcentaje de tierra cultivable en uso", "Valor agregado del sector agricultura respecto PBI", "Valor agregado del sector manufacturero respecto PBI")4243#Generar la tabla con opciones personalizadas en formato de latex44stargazer(table1, title = "Descriptive Statistics", digits = 2, # decimales con 2 digitos45covariate.labels = list_vars, # Lista de etiquetas46notes = "Note.—The source of most characteristics is the World Bank’s World Development Indicators (WDI)."47, notes.append = FALSE, # TRUE append the significance levels48notes.align = 'r')495051#Leer data52repdata <- read_dta("datos/mss_repdata.dta")5354############## PARTE 2 ###################################5556#### 1. REGRESIÓN #########################57"• Replicar la tabla 3 (pág 737):58-Variable endógena 'Y' son:59----- primer modelo 'any_prio': conflictos civiles con 25 a 1000 fallecidos.60----- segundo modelo 'war_prio'; conflictos civiles con más de 1000 fallecidos.61-Variables explicativas 'x' son:62----- GPCP g 1: Tasa de variación de las lluvias en el periodo t63----- GPCP g l: Tasa de variación de las lluvias en el periodo t − 164----- Incluir country trend y efectos fijos a nivel país. "656667"1.*************** Construir variables de efectos fijos ********************"6869#A. dummy por país para efectos fijos70repdata <- dummy_cols(repdata, select_columns = 'ccode')717273#B. Country trend: Efectos fijos por el tiempo74# B.1 creando la variable temporal75repdata$time_year <- repdata$year - 19787677#B.2. Construir variable country trend = dummies por país x variable temporal7879index <- grep("ccode_", colnames(repdata)) #colnames(repdata): saca los nombres de la columnas80list_vars <- names(repdata)[index] #filtra nombres con los q' me interesan (q' inciian con ccode)81list_vars[1] #sería solo el 1ero (ccode 404) ; Serviran para iterar por país828384i = 18586while(i < 42){ #hay 41 dummy's (mientras sea menor a 42)8788var <- paste0(list_vars[i],"_","time") #paste es concatenar89repdata[var] <- repdata[list_vars[i]]*repdata["time_year"]9091i = i + 192}939495"2.*************** Regresiones: estimaciones ********************"9697index_country_time <- grep("_time$", colnames(repdata))98country_time_trend <-names(repdata)[index_country_time] #de 404, y 625_time99country_time_trend[] #NOMBRE de las variables de efectos country trend100101102index_country <- grep("^ccode_\\d+$", colnames(repdata)) #halla número de columans que terminan en _time103country_fe <-names(repdata)[index_country] #sale el nombre de las variables ya con el número de columnas halladas anteriormente104country_fe[] #NOMBRE de las variables de efectos fijos temporales105106repdata$ccode_factor <- as.factor(repdata$ccode)107class(repdata$ccode_factor) #especificar dummy por país como efectos fijos108class(repdata$ccode) #comparacion109110111"Regresion con y = any_prio************"112113#Formula114model1_formula <- as.formula(115paste("any_prio", #variable y116"~",117paste("GPCP_g","GPCP_g_l","ccode_factor",118paste(country_time_trend, collapse = "+")119, sep="+") #en formato de suma120)121)122model1_formula #observar formula, notar que 'ccode_factor' sale como var. E.Fijo123124#Estimacion125m1 <- lm(model1_formula, data = repdata)126m1127128#RMSE129lm_rmse1 <- round(RMSE(m1$fitted.values, repdata$any_prio ) ,2 ) #redondear a 2 decimales130lm_rmse1131132#Extraer errores estandar robustos133robust_model1 <- coeftest(m1,134vcov = vcovCL,135type = "HC1", #Huber White robust136cluster = ~ ccode) #errores estandar clusterizadas a nivel país137robust_model1138139140sd_robust_model1 <- robust_model1[,2]141sd_robust_model1142143144"Regresion con y = war_prio************"145146#Formula147model2_formula <- as.formula(148paste("war_prio",149"~",150paste("GPCP_g","GPCP_g_l","ccode_factor", #este usa ccode_factor151paste(country_time_trend, collapse = "+")152, sep="+")153)154)155model2_formula #observar formula, notar que 'ccode_factor' sale como var. E.Fijo156157#Estimacion158m2 <- lm(model2_formula, data = repdata)159m2160161#RMSE162lm_rmse2 <- round(RMSE(m2$fitted.values, repdata$war_prio ) ,2 )163lm_rmse2164165#Sacar errores estandar robustos166robust_model2 <- coeftest(m2,167vcov = vcovCL,168type = "HC1",169cluster = ~ ccode)170171sd_robust_model2 <- robust_model2[,2]172sd_robust_model2173174175#### 2. EXPORTAR EN LATEX #########################176# Export tables ---- Export using Stagezer177178179180stargazer( m1, m2,181se=list(sd_robust_model1, sd_robust_model2),182dep.var.labels = c(paste("Civil Conflict 25"), "Civil Conflict 1,000"), #nombres de columnas 2 y 3183title = "Rainfall and Civil Conflict (Reduced-Form)", #título de la tabla184column.labels = c("Death (OLS)", "Death (OLS)"), #para poner más información en referencia a dep.var.labels185keep = c("GPCP_g","GPCP_g_l"),186covariate.labels=c("Growth in rainfall, t","Growth in rainfall, t-1"), #etiquetas de las filas187align = T, no.space = F, #que este centrado y halla espacio entre las filas188add.lines=list(c("Country fixed effects","yes","yes"),189c("Country-specific time trends","yes","yes"),190c("Root mean square error",lm_rmse1,lm_rmse2)),191keep.stat = c("rsq","n"), #mostrar el número de observaciones192notes.append = FALSE, notes.align = "l", #notes.append: TRUE append the significance levels, alineación a la izquierda193notes ="Huber robust standard errors are in parentheses", style = "qje"194)195196197198199############## PARTE 3 ###################################200201#Model 1, extraer: coefficients202model1_coef <- robust_model1[2,1]203model1_coef204205# : standard deviation206model1_coef_se = robust_model1[2,2]207model1_coef_se208209# : lower and upper bound210model1_lower = coefci(m1, df = Inf,211vcov. = vcovHC, type = "HC1")[2,1]212model1_lower213model1_upper = coefci(m1, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]214model1_upper215216217#Model 2, extraer: coefficients218model2_coef <- robust_model2[2,1]219model2_coef220221# : standard deviation222model2_coef_se = robust_model2[2,2]223model2_coef_se224225# : upper and lower bound226model2_lower = coefci(m2, df = Inf,227vcov. = vcovHC, type = "HC1")[2,1]228model2_lower229model2_upper = coefci(m2, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]230model2_upper231232# Armar tabla de resultados233234table<- matrix(0, 2, 4)235table[1,1]<- model1_coef236table[1,2]<- model1_coef_se237table[1,3]<- model1_lower238table[1,4]<- model1_upper239240table[2,1]<- model2_coef241table[2,2]<- model2_coef_se242table[2,3]<- model2_lower243table[2,4]<- model2_upper244245colnames(table)<- c("Estimate","Std. Error","Lower_bound","Upper_bound")246rownames(table)<- c("Civil Conflict > 25", "Civil Conflict > 1000")247248table249tab<- xtable(table)250251# Gráfica Coef-plot252253theme_set(theme_bw(20))254255options(repr.plot.width = 8, repr.plot.height =10) # tamaño del gráfico256257ggplot(tab, aes(x=rownames(tab), y=Estimate) ) +258geom_point(size=4, color= rgb(0.8, 0.5, 0) ) +259geom_errorbar(aes(ymin=Lower_bound, ymax=Upper_bound) , width = 0.1,color=rgb(0.4, 0.6, 0.8), size = 0.9) +260labs(x="", y="") + ggtitle("Coeficiente de tasa de variación de lluvia (95% CI)") +261theme(text=element_text(size =15), plot.title = element_text(hjust = 0.5)) +262geom_hline(yintercept=0, linetype="dashed", color = rgb(0, 0, 0.6), size=1) +263geom_text(aes(x=rownames(tab), y = Estimate, label = round(Estimate,2)), vjust = 1.5)264265266#Guardar coef plot267ggsave("grupo9/Coef_plot.png"268, height = 8 # alto269, width = 12 # ancho270, dpi = 320 # resolución (calidad de la imagen)271)272273