Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_final/grupo9/Grupo9_Pregunta1_R.R
2714 views
1
"TRABAJO FINAL"
2
3
"1. MODELOS LINEALES"
4
5
# clear environment
6
rm(list=ls(all=TRUE))
7
8
user <- Sys.getenv("USERNAME") # username
9
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_final") ) # set directorio
10
11
# Instalar y cargar librerías con shelf
12
13
librarian::shelf(
14
tidyverse # dplyr, tidyr, stringr, ggplot2, etc in unique library
15
, haven # to read datset: .dta (stata), .spss, .dbf
16
, fastDummies # for dummies
17
, stargazer # for summary and econometrics tables
18
, sandwich # for linear models
19
, lmtest # for robust standar error
20
, estimatr # for iv, cluster, robust standar error (LM_robust)
21
, lfe # for fixed effects, cluster standar error
22
, texreg # library for export table
23
, caret
24
, mfx # probit , logit model marginal effects
25
, xtable
26
)
27
28
#Leer data
29
repdata <- read_dta("datos/mss_repdata.dta")
30
31
############## PARTE 1 ###################################
32
"Estadísticas descriptivas"
33
34
#Hacer tabla con las variables seleccionadas y convertirlas como data frame
35
table1 <- repdata %>% dplyr::select(NDVI_g, tot_100, trade_pGDP,
36
pop_den_rur, land_crop, va_agr, va_ind_manf) %>% as.data.frame()
37
38
39
40
#Generar las etiquetas de las variables
41
list_vars <- c("Tasa de variación del índice de vegetación","términos de intercambio","porcentaje de las exportaciones respecto
42
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")
43
44
#Generar la tabla con opciones personalizadas en formato de latex
45
stargazer(table1, title = "Descriptive Statistics", digits = 2, # decimales con 2 digitos
46
covariate.labels = list_vars, # Lista de etiquetas
47
notes = "Note.—The source of most characteristics is the World Bank’s World Development Indicators (WDI)."
48
, notes.append = FALSE, # TRUE append the significance levels
49
notes.align = 'r')
50
51
52
#Leer data
53
repdata <- read_dta("datos/mss_repdata.dta")
54
55
############## PARTE 2 ###################################
56
57
#### 1. REGRESIÓN #########################
58
"• Replicar la tabla 3 (pág 737):
59
-Variable endógena 'Y' son:
60
----- primer modelo 'any_prio': conflictos civiles con 25 a 1000 fallecidos.
61
----- segundo modelo 'war_prio'; conflictos civiles con más de 1000 fallecidos.
62
-Variables explicativas 'x' son:
63
----- GPCP g 1: Tasa de variación de las lluvias en el periodo t
64
----- GPCP g l: Tasa de variación de las lluvias en el periodo t − 1
65
----- Incluir country trend y efectos fijos a nivel país. "
66
67
68
"1.*************** Construir variables de efectos fijos ********************"
69
70
#A. dummy por país para efectos fijos
71
repdata <- dummy_cols(repdata, select_columns = 'ccode')
72
73
74
#B. Country trend: Efectos fijos por el tiempo
75
# B.1 creando la variable temporal
76
repdata$time_year <- repdata$year - 1978
77
78
#B.2. Construir variable country trend = dummies por país x variable temporal
79
80
index <- grep("ccode_", colnames(repdata)) #colnames(repdata): saca los nombres de la columnas
81
list_vars <- names(repdata)[index] #filtra nombres con los q' me interesan (q' inciian con ccode)
82
list_vars[1] #sería solo el 1ero (ccode 404) ; Serviran para iterar por país
83
84
85
i = 1
86
87
while(i < 42){ #hay 41 dummy's (mientras sea menor a 42)
88
89
var <- paste0(list_vars[i],"_","time") #paste es concatenar
90
repdata[var] <- repdata[list_vars[i]]*repdata["time_year"]
91
92
i = i + 1
93
}
94
95
96
"2.*************** Regresiones: estimaciones ********************"
97
98
index_country_time <- grep("_time$", colnames(repdata))
99
country_time_trend <-names(repdata)[index_country_time] #de 404, y 625_time
100
country_time_trend[] #NOMBRE de las variables de efectos country trend
101
102
103
index_country <- grep("^ccode_\\d+$", colnames(repdata)) #halla número de columans que terminan en _time
104
country_fe <-names(repdata)[index_country] #sale el nombre de las variables ya con el número de columnas halladas anteriormente
105
country_fe[] #NOMBRE de las variables de efectos fijos temporales
106
107
repdata$ccode_factor <- as.factor(repdata$ccode)
108
class(repdata$ccode_factor) #especificar dummy por país como efectos fijos
109
class(repdata$ccode) #comparacion
110
111
112
"Regresion con y = any_prio************"
113
114
#Formula
115
model1_formula <- as.formula(
116
paste("any_prio", #variable y
117
"~",
118
paste("GPCP_g","GPCP_g_l","ccode_factor",
119
paste(country_time_trend, collapse = "+")
120
, sep="+") #en formato de suma
121
)
122
)
123
model1_formula #observar formula, notar que 'ccode_factor' sale como var. E.Fijo
124
125
#Estimacion
126
m1 <- lm(model1_formula, data = repdata)
127
m1
128
129
#RMSE
130
lm_rmse1 <- round(RMSE(m1$fitted.values, repdata$any_prio ) ,2 ) #redondear a 2 decimales
131
lm_rmse1
132
133
#Extraer errores estandar robustos
134
robust_model1 <- coeftest(m1,
135
vcov = vcovCL,
136
type = "HC1", #Huber White robust
137
cluster = ~ ccode) #errores estandar clusterizadas a nivel país
138
robust_model1
139
140
141
sd_robust_model1 <- robust_model1[,2]
142
sd_robust_model1
143
144
145
"Regresion con y = war_prio************"
146
147
#Formula
148
model2_formula <- as.formula(
149
paste("war_prio",
150
"~",
151
paste("GPCP_g","GPCP_g_l","ccode_factor", #este usa ccode_factor
152
paste(country_time_trend, collapse = "+")
153
, sep="+")
154
)
155
)
156
model2_formula #observar formula, notar que 'ccode_factor' sale como var. E.Fijo
157
158
#Estimacion
159
m2 <- lm(model2_formula, data = repdata)
160
m2
161
162
#RMSE
163
lm_rmse2 <- round(RMSE(m2$fitted.values, repdata$war_prio ) ,2 )
164
lm_rmse2
165
166
#Sacar errores estandar robustos
167
robust_model2 <- coeftest(m2,
168
vcov = vcovCL,
169
type = "HC1",
170
cluster = ~ ccode)
171
172
sd_robust_model2 <- robust_model2[,2]
173
sd_robust_model2
174
175
176
#### 2. EXPORTAR EN LATEX #########################
177
# Export tables ---- Export using Stagezer
178
179
180
181
stargazer( m1, m2,
182
se=list(sd_robust_model1, sd_robust_model2),
183
dep.var.labels = c(paste("Civil Conflict 25"), "Civil Conflict 1,000"), #nombres de columnas 2 y 3
184
title = "Rainfall and Civil Conflict (Reduced-Form)", #título de la tabla
185
column.labels = c("Death (OLS)", "Death (OLS)"), #para poner más información en referencia a dep.var.labels
186
keep = c("GPCP_g","GPCP_g_l"),
187
covariate.labels=c("Growth in rainfall, t","Growth in rainfall, t-1"), #etiquetas de las filas
188
align = T, no.space = F, #que este centrado y halla espacio entre las filas
189
add.lines=list(c("Country fixed effects","yes","yes"),
190
c("Country-specific time trends","yes","yes"),
191
c("Root mean square error",lm_rmse1,lm_rmse2)),
192
keep.stat = c("rsq","n"), #mostrar el número de observaciones
193
notes.append = FALSE, notes.align = "l", #notes.append: TRUE append the significance levels, alineación a la izquierda
194
notes ="Huber robust standard errors are in parentheses", style = "qje"
195
)
196
197
198
199
200
############## PARTE 3 ###################################
201
202
#Model 1, extraer: coefficients
203
model1_coef <- robust_model1[2,1]
204
model1_coef
205
206
# : standard deviation
207
model1_coef_se = robust_model1[2,2]
208
model1_coef_se
209
210
# : lower and upper bound
211
model1_lower = coefci(m1, df = Inf,
212
vcov. = vcovHC, type = "HC1")[2,1]
213
model1_lower
214
model1_upper = coefci(m1, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]
215
model1_upper
216
217
218
#Model 2, extraer: coefficients
219
model2_coef <- robust_model2[2,1]
220
model2_coef
221
222
# : standard deviation
223
model2_coef_se = robust_model2[2,2]
224
model2_coef_se
225
226
# : upper and lower bound
227
model2_lower = coefci(m2, df = Inf,
228
vcov. = vcovHC, type = "HC1")[2,1]
229
model2_lower
230
model2_upper = coefci(m2, df = Inf, vcov. = vcovHC, type = "HC1")[2,2]
231
model2_upper
232
233
# Armar tabla de resultados
234
235
table<- matrix(0, 2, 4)
236
table[1,1]<- model1_coef
237
table[1,2]<- model1_coef_se
238
table[1,3]<- model1_lower
239
table[1,4]<- model1_upper
240
241
table[2,1]<- model2_coef
242
table[2,2]<- model2_coef_se
243
table[2,3]<- model2_lower
244
table[2,4]<- model2_upper
245
246
colnames(table)<- c("Estimate","Std. Error","Lower_bound","Upper_bound")
247
rownames(table)<- c("Civil Conflict > 25", "Civil Conflict > 1000")
248
249
table
250
tab<- xtable(table)
251
252
# Gráfica Coef-plot
253
254
theme_set(theme_bw(20))
255
256
options(repr.plot.width = 8, repr.plot.height =10) # tamaño del gráfico
257
258
ggplot(tab, aes(x=rownames(tab), y=Estimate) ) +
259
geom_point(size=4, color= rgb(0.8, 0.5, 0) ) +
260
geom_errorbar(aes(ymin=Lower_bound, ymax=Upper_bound) , width = 0.1,color=rgb(0.4, 0.6, 0.8), size = 0.9) +
261
labs(x="", y="") + ggtitle("Coeficiente de tasa de variación de lluvia (95% CI)") +
262
theme(text=element_text(size =15), plot.title = element_text(hjust = 0.5)) +
263
geom_hline(yintercept=0, linetype="dashed", color = rgb(0, 0, 0.6), size=1) +
264
geom_text(aes(x=rownames(tab), y = Estimate, label = round(Estimate,2)), vjust = 1.5)
265
266
267
#Guardar coef plot
268
ggsave("grupo9/Coef_plot.png"
269
, height = 8 # alto
270
, width = 12 # ancho
271
, dpi = 320 # resolución (calidad de la imagen)
272
)
273