Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_final/grupo8/Grupo_8.R
2714 views
1
# Trabajo Final GRUPO 8
2
3
# Clear environment
4
rm(list=ls(all=TRUE))
5
6
# Cargamos librerías
7
install.packages("librarian")
8
install.packages("read_dta")
9
library(haven)
10
install.packages("magrittr")
11
library(magrittr)
12
library(dplyr)
13
14
librarian::shelf(
15
tidyverse # dplyr, tidyr, stringr, ggplot2, etc in unique library
16
, haven # to read datset: .dta (stata), .spss, .dbf
17
, fastDummies # for dummies
18
, stargazer # for summary and econometrics tables
19
, sandwich # for linear models
20
, lmtest # for robust standar error
21
, estimatr # for iv, cluster, robust standar error
22
, lfe # for fixed effects, cluster standar error
23
, caret # for easy machine learning workflow (mse, rmse)
24
, texreg # library for export table
25
, xtable, mfx # probit , logit model marginal effects
26
)
27
28
# Modificamos la ruta donde se encuentra la data
29
user <- Sys.getenv("USERNAME") # username
30
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_final/grupo8") ) # set directorio
31
data <- read_dta("../datos/mss_repdata.dta")
32
33
"
34
Datos que vamos a usar:
35
- NDVI g (Tasa de variación del índice de vegetación),
36
- tot 100 (t´erminos de intercambio), trade pGDP (porcentaje de las exportaciones recpecto al PBI),
37
- pop den rur (Densidad poblacional rural),
38
- land crop (porcentaje de tierra cultivable en uso),
39
- va agr (Valor agregado del sectoragr´ıculta respecto PBI) y va ind manf (Valor agregado del sector manufacturero respecto PBI).
40
"
41
42
# ----1 MODELOS LINEALES----
43
# ----Tabla de estadísticas----
44
# Definimos las variables que vamos a tomar en cuenta para la tabla
45
list_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")
46
47
table1 <- data %>% dplyr::select(NDVI_g, tot_100,trade_pGDP,
48
pop_den_rur, land_crop, va_agr, va_ind_manf) %>% as.data.frame()
49
50
# Código para exportar a Latex
51
stargazer(table1, title = "Descriptive Statistics", digits = 2, # decimales con 2 dígitos
52
covariate.labels = list_vars, # Lista de etiquetas
53
summary.stat = c("mean", "sd", "n"), # se especifica el orden de los estadísticos
54
min.max = F, # borrar el estadístico de maximo y mínimo
55
notes.append = FALSE, # TRUE append the significance levels
56
notes.align = 'l')
57
58
# ----Replicar tabla 3----
59
# Creamos dummies
60
data <- dummy_cols(data, select_columns = 'ccode')
61
index <- grep("ccode_", colnames(data))
62
data$time_year <- data$year - 1978
63
list_vars <- names(data)[index]
64
list_vars[1]
65
i = 1
66
while(i < 42){
67
var <- paste0(list_vars[i],"_","time")
68
data[var] <- data[list_vars[i]]*data["time_year"]
69
i = i + 1
70
}
71
72
# Seteamos los efectos fijos y la tendencia en el tiempo
73
data$ccode_factor <- as.factor(data$ccode)
74
class(data$ccode_factor)
75
class(data$ccode)
76
index_country_time <- grep("_time$", colnames(data))
77
country_time_trend <-names(data)[index_country_time]
78
79
# Especificamos la fórmula del MODELO 1 a regresionar
80
model1_formula <- as.formula(
81
paste("any_prio",
82
"~",
83
paste("GPCP_g","GPCP_g_l", "ccode_factor",
84
paste(country_time_trend, collapse = "+")
85
, sep="+")
86
)
87
)
88
89
# Especificamos la fórmula del MODELO 2 a regresionar
90
model2_formula <- as.formula(
91
paste("war_prio",
92
"~",
93
paste("GPCP_g","GPCP_g_l", "ccode_factor",
94
paste(country_time_trend, collapse = "+")
95
, sep="+")
96
)
97
)
98
99
# Estimamos el MODELO 1 mediante el método OLS
100
ols_model1 <- lm(model1_formula, data = data)
101
102
# Estimamos el MODELO 2 mediante el método OLS
103
ols_model2 <- lm(model2_formula, data = data)
104
105
# Obtenemos los root mean square errors de cada modelo y los redondeamos al segundo (o tercer) decimal
106
rmse1 <- round(RMSE(ols_model1$fitted.values, data$any_prio ),2)
107
rmse2 <- round(RMSE(ols_model2$fitted.values, data$war_prio ),3)
108
109
# Obtenemos los errores estándares del MODELO 1 y los redondeamos al tercer decimal
110
robust_model1 <- coeftest(ols_model1,
111
vcov = vcovCL,
112
type = "HC1",
113
cluster = ~ ccode)
114
sd_robust_model1 <- round(robust_model1[,2],3)
115
116
# Obtenemos los errores estándares del MODELO 2 y los redondeamos al tercer decimal
117
robust_model2 <- coeftest(ols_model2,
118
vcov = vcovCL,
119
type = "HC1",
120
cluster = ~ ccode)
121
sd_robust_model2 <- round(robust_model2[,2],3)
122
123
# Redondeamos los R cuadrados al segundo decimal
124
r21<-round(summary(ols_model1)$ r.squared,2)
125
r22<-round(summary(ols_model2)$ r.squared,2)
126
127
# customizamos la tabla con los resultados de las regresiones para exportar a Latex
128
stargazer( ols_model1, ols_model2,
129
se=list( sd_robust_model1, sd_robust_model2),
130
dep.var.labels = c("Civil Conflict 25", "Civil Conflict 1,000"),
131
column.labels=c("Deaths (OLS)","Deaths (OLS)"),
132
title = "Rainfall and Civil Conflict (Reduced-Form)",
133
keep = c("GPCP_g","GPCP_g_l"),
134
covariate.labels=c("Growth in rainfall, t","Growth in rainfall, t-1"),
135
align = T, no.space = T,
136
add.lines=list(c("Country fixed effects","yes","yes"),
137
c("Country-specific time trends","yes","yes"),
138
c("Root mean square error",rmse1,rmse2)),
139
keep.stat = c("n", "rsq"),
140
notes.append = FALSE, notes.align = "l",
141
notes ="Huber robust standard errors are in parentheses.", style = "qje"
142
)
143
144
# ----Coeft plot----
145
146
# Establecemos las condiciones iniciales como los upper bounds y lower bounds
147
# para ambos modelos y los organizamos en una matriz
148
model1_lower = coefci(ols_model1, df = Inf, vcov. = vcovHC, type = "HC1")[2,1]
149
model1_upper = coefci(ols_model1, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]
150
151
model2_lower = coefci(ols_model2, df = Inf, vcov. = vcovHC, type = "HC1")[2,1]
152
model2_upper = coefci(ols_model2, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]
153
154
model1.tab <- coeftest(ols_model1, vcov=vcovHC(ols_model1, type='HC1'))
155
model2.tab <- coeftest(ols_model2, vcov=vcovHC(ols_model2, type='HC1'))
156
157
model1_coef <- model1.tab[2,1]
158
model2_coef <- model2.tab[2,1]
159
160
model1_coef_se = model1.tab[2,2]
161
model2_coef_se = model2.tab[2,2]
162
163
table<- matrix(0, 2, 4)
164
165
table[1,1]<- model1_coef
166
table[1,2]<- model1_coef_se
167
168
table[2,1]<- model2_coef
169
table[2,2]<- model2_coef_se
170
171
table[1,3]<- model1_lower
172
table[1,4]<- model1_upper
173
174
table[2,3]<- model2_lower
175
table[2,4]<- model2_upper
176
177
# Editamos los nombres de la matriz
178
colnames(table)<- c("Estimate","se","lower_bound","upper_bound")
179
rownames(table)<- c("≥25 Deaths (OLS)", "≥1000 Deaths (OLS)")
180
181
# Customizamos el plot
182
theme_set(theme_bw(20)) # tema con fondo blanco y cuadro con bordes en negro
183
options(repr.plot.width = 8, repr.plot.height =5) # tamaño del gráfico
184
xtable(table)
185
tab <- as.data.frame(table)
186
187
# Coef Plot
188
tab %>% ggplot(aes(x=rownames(tab), y=Estimate)) +
189
geom_point(size=2, color = 'black') +
190
geom_errorbar(aes(ymin=lower_bound, ymax=upper_bound) , width = 0.05,color="black", size = 0.8) +
191
labs(x="", y="") + ggtitle("Coef plot GPCP_g") +
192
theme(text=element_text(size =15), plot.title = element_text(hjust = 0.5)) +
193
geom_hline(yintercept=0, linetype="dashed", color = "black", size=1) +
194
scale_x_discrete(limits = c("≥25 Deaths (OLS)", "≥1000 Deaths (OLS)")) + # order x - axis
195
theme(panel.grid.major = element_blank(), # borras las cuadrículas en el fondo
196
panel.grid.minor = element_blank())
197
198
# Guardamos la imagen del plot
199
ggsave("coefplot.png")
200