Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_final/grupo9/Grupo9_Pregunta1_Python.ipynb
2714 views
Kernel: Python 3 (ipykernel)

Pregunta 1

from IPython.display import display, HTML display(HTML(data=""" <style> div#notebook-container { width: 75%; } div#menubar-container { width: 95%; } div#maintoolbar-container { width: 65%; }a </style> """))

Importar librerías

# import libraries import pandas as pd import numpy as np import re from tqdm import tqdm # controlar el tiempo en un loop import os #plots library import matplotlib.pyplot as plt import seaborn as sns # linear model library import statsmodels.api as sm # linear regression utiliza todas las columnas de base de datos import statsmodels.formula.api as smf # linear regression usa uan formula from sklearn.metrics import mean_squared_error, r2_score from pystout import pystout #warnings library import warnings warnings.filterwarnings('ignore') # eliminar warning messages #export latex table library from pystout import pystout

Cargar Base

repdata = pd.read_stata(r"../datos/mss_repdata.dta", convert_categoricals=False) # convert_categoricals=False: No se lee las etiquetas de valor repdata.head(7) #panel de datos de 41 países de africa

1. Estadísticas descriptivas

• Exportar en latex una tabla de estadísticas (media, desviación estándar y total de observaciones) de las variables:

  • NDVI_g (Tasa de variación del índice de vegetación)
  • tot 100 (términos de intercambio)
  • trade pGDP (porcentaje de las exportaciones recpecto al PBI)
  • pop den rur (Densidad poblacional rural)
  • land crop (porcentaje de tierra cultivable en uso)
  • va agr (Valor agregado del sector agrícultura respecto PBI)
  • va ind manf (Valor agregado del sector manufacturero respecto PBI)
#1.1. Seleccionamos las variables para las estadísticas descriptivas table1 = repdata.loc[:,["NDVI_g", "tot_100", "trade_pGDP","pop_den_rur", "land_crop", "va_agr", "va_ind_manf"]] table1
#1.2. Seleccionamos los estadísticos de interés: media, error estándar y cantidad de observaciones summary_table = table1.describe().loc[["mean","std","count"]].T summary_table
#1.3. Generar las etiquetas de las variables new_names = ["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 agrícultura respecto PBI", "Valor agregado del sector manufacturero respecto PBI"] # unión de listas bajo la estructura diccionario dict( zip( table1.columns, new_names) ) index = dict( zip( table1.columns, new_names) )
#1.4. Exportar a latex columns = {"mean": "Media", "std": "Desviación Estándar", "count": "Total Obv.",} formatters = { "mean": "{:.2f}".format, "std": "{:.2f}".format, "count": "{:.0f}".format,} #1.5 Renombrar tabla de estadisticas con lo indicado en 1.4. summary_table.rename(index=index,columns=columns,inplace=True) summary_table
#1.6. Generar la tabla con opciones personalizadas en formato de latex summary_table.style.format(subset="Media", precision=2).format(subset="Desviación Estándar", precision=2)\ .format(subset="Total Obv.", precision=0)\ .to_latex("summary3.tex", caption="Estadisticas descriptivas", column_format = "lccc")

2. REGRESIÓN

• Replicar la tabla 3 (pág 737):

  • Variable endógena 'Y' son:
  • ----- primer modelo 'any_prio': conflictos civiles con 25 a 1000 muertos.
  • ----- segundo modelo 'war_prio'; conflictos civiles con más de 1000 muertos.
  • Variables explicativas 'x' son:
  • ----- GPCP g 1: Tasa de variación de las lluvias en el periodo t
  • ----- GPCP g l 2: Tasa de variación de las lluvias en el periodo t − 1
  • ----- Incluir country trend y efectos fijos a nivel país.
#INLCUIR EFECTOS FIJOS: #Si no se incluye los efectos fijos entonces se genera sesgo por #variables no observables omitidas

2.1. Efectos fijos por país

  • representa factores históricos, geografía e institucionales de los países, que se mantienen en el tiempo pero no son observables
  • es una dummy que es 1 cuando es el país x==> para ello se usa ccode que es el identificador de cada país, ya no se crea variable
#A. Efectos fijos #A.1. Obtener dummies por país dummys = pd.get_dummies(repdata["ccode"].astype(int), prefix = "ccode", dummy_na=False) print(dummys.columns, len(dummys.columns)) #Se comprueba que son 41 los países de África que están en la base. #lo que comprueba que las dummies estuvieron bien específicadas con ccode.
Index(['ccode_404', 'ccode_420', 'ccode_432', 'ccode_433', 'ccode_434', 'ccode_435', 'ccode_436', 'ccode_437', 'ccode_438', 'ccode_439', 'ccode_450', 'ccode_451', 'ccode_452', 'ccode_461', 'ccode_471', 'ccode_475', 'ccode_481', 'ccode_482', 'ccode_483', 'ccode_484', 'ccode_490', 'ccode_500', 'ccode_501', 'ccode_510', 'ccode_516', 'ccode_517', 'ccode_520', 'ccode_522', 'ccode_530', 'ccode_540', 'ccode_541', 'ccode_551', 'ccode_552', 'ccode_553', 'ccode_560', 'ccode_565', 'ccode_570', 'ccode_571', 'ccode_572', 'ccode_580', 'ccode_625'], dtype='object') 41
#A.2 Concatenar data 'dummies por pais' con data principal'repdata' # horizontalmente (axis = 1) repdata = pd.concat([ repdata , dummys], axis = 1 ) repdata.head(5) #Se evidencia que en la data principal están las dummmies por país

2.2. Country trend: Efectos fijos por el tiempo

  • Multiplicación de las 'dummy de país' x 'variable temporal'
  • Country trend busca capturar las variables omitidas variantes en el tiempo en cada país.
#B. Country trend: Efectos fijos por el tiempo # B.1 creando la variable temporal repdata['time_year'] = pd.DatetimeIndex(repdata['year']).year - 1978 repdata['time_year']
0 3 1 4 2 5 3 6 4 7 .. 738 17 739 18 740 19 741 20 742 21 Name: time_year, Length: 743, dtype: int64
# B.2. Construir variable country trend = dummies por país x variable temporal i = 0 while i < 41: # 41 por el tema de indexing pues en python la posición inicial es cero. var = dummys.columns[i]+"_"+"time" # creamos el nombre de cada variable repdata[var] = repdata[dummys.columns[i]]*repdata["time_year"] # multiplicacón de variables: dummy país * variable temporal i = i + 1 # observamos para país y la variable temporal. repdata[['ccode','time_year']].iloc[0:40,:]
#B.3. Extraer nombre de variables que terminan con _time index_columns = np.where(repdata.columns.str.contains('_time$'))[0] country_trend = repdata.columns[index_columns] #nombres de variables que terminan en _time #(representan las dummies temporal) country_trend #nombres de variables que terminan en _time
Index(['ccode_404_time', 'ccode_420_time', 'ccode_432_time', 'ccode_433_time', 'ccode_434_time', 'ccode_435_time', 'ccode_436_time', 'ccode_437_time', 'ccode_438_time', 'ccode_439_time', 'ccode_450_time', 'ccode_451_time', 'ccode_452_time', 'ccode_461_time', 'ccode_471_time', 'ccode_475_time', 'ccode_481_time', 'ccode_482_time', 'ccode_483_time', 'ccode_484_time', 'ccode_490_time', 'ccode_500_time', 'ccode_501_time', 'ccode_510_time', 'ccode_516_time', 'ccode_517_time', 'ccode_520_time', 'ccode_522_time', 'ccode_530_time', 'ccode_540_time', 'ccode_541_time', 'ccode_551_time', 'ccode_552_time', 'ccode_553_time', 'ccode_560_time', 'ccode_565_time', 'ccode_570_time', 'ccode_571_time', 'ccode_572_time', 'ccode_580_time', 'ccode_625_time'], dtype='object')

2.3. Estimación de modelos

Modelo con any_prio (conflictos civiles con menos de 1000 muertos)

# Modelo 1 #----------------------------------- y = repdata['any_prio'] # nuevo vector de la variable Y (any prio)
#Mostrar formula de regresion que se usará con any_prio formula_model1 = "any_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) formula_model1
'any_prio ~ GPCP_g + GPCP_g_l + C(ccode) + ccode_404_time + ccode_420_time + ccode_432_time + ccode_433_time + ccode_434_time + ccode_435_time + ccode_436_time + ccode_437_time + ccode_438_time + ccode_439_time + ccode_450_time + ccode_451_time + ccode_452_time + ccode_461_time + ccode_471_time + ccode_475_time + ccode_481_time + ccode_482_time + ccode_483_time + ccode_484_time + ccode_490_time + ccode_500_time + ccode_501_time + ccode_510_time + ccode_516_time + ccode_517_time + ccode_520_time + ccode_522_time + ccode_530_time + ccode_540_time + ccode_541_time + ccode_551_time + ccode_552_time + ccode_553_time + ccode_560_time + ccode_565_time + ccode_570_time + ccode_571_time + ccode_572_time + ccode_580_time + ccode_625_time'
#Estimación con y=any_prio ols_model1 = smf.ols(formula_model1, data=repdata).fit(cov_type='cluster', cov_kwds={'groups': repdata['ccode']}) print(ols_model1.summary()) #TABLA COMPLETA #se usa Hubert robust: cov_type #las perturbaciones están agrupadas por niveles: cov_kwds, por grupos de países
OLS Regression Results ============================================================================== Dep. Variable: any_prio R-squared: 0.708 Model: OLS Adj. R-squared: 0.672 Method: Least Squares F-statistic: 162.4 Date: Sun, 11 Dec 2022 Prob (F-statistic): 6.28e-20 Time: 12:30:53 Log-Likelihood: 8.6565 No. Observations: 743 AIC: 150.7 Df Residuals: 659 BIC: 538.0 Df Model: 83 Covariance Type: cluster ===================================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------------- Intercept -0.2458 0.004 -66.965 0.000 -0.253 -0.239 C(ccode)[T.420.0] 0.4921 0.001 468.956 0.000 0.490 0.494 C(ccode)[T.432.0] 0.2600 0.008 32.651 0.000 0.244 0.276 C(ccode)[T.433.0] -0.0986 0.002 -59.007 0.000 -0.102 -0.095 C(ccode)[T.434.0] 0.2438 0.004 57.888 0.000 0.236 0.252 C(ccode)[T.435.0] 0.2377 0.009 26.715 0.000 0.220 0.255 C(ccode)[T.436.0] 0.1243 0.013 9.406 0.000 0.098 0.150 C(ccode)[T.437.0] 0.2450 0.004 61.386 0.000 0.237 0.253 C(ccode)[T.438.0] -0.0061 0.003 -2.184 0.029 -0.012 -0.001 C(ccode)[T.439.0] 0.4443 0.004 105.272 0.000 0.436 0.453 C(ccode)[T.450.0] -0.3559 0.004 -92.197 0.000 -0.363 -0.348 C(ccode)[T.451.0] -0.2257 0.002 -120.766 0.000 -0.229 -0.222 C(ccode)[T.452.0] 0.6882 0.004 159.022 0.000 0.680 0.697 C(ccode)[T.461.0] 0.4129 0.005 88.451 0.000 0.404 0.422 C(ccode)[T.471.0] 0.4257 0.004 106.398 0.000 0.418 0.433 C(ccode)[T.475.0] 0.2433 0.005 44.966 0.000 0.233 0.254 C(ccode)[T.481.0] 0.2542 0.002 162.114 0.000 0.251 0.257 C(ccode)[T.482.0] 0.2466 0.003 72.125 0.000 0.240 0.253 C(ccode)[T.483.0] 1.3664 0.008 162.199 0.000 1.350 1.383 C(ccode)[T.484.0] -0.0916 0.002 -58.163 0.000 -0.095 -0.088 C(ccode)[T.490.0] 1.3481 0.001 1581.192 0.000 1.346 1.350 C(ccode)[T.500.0] 1.2554 0.002 743.377 0.000 1.252 1.259 C(ccode)[T.501.0] 0.4613 0.005 92.925 0.000 0.452 0.471 C(ccode)[T.510.0] 0.2446 0.004 60.659 0.000 0.237 0.252 C(ccode)[T.516.0] -0.1279 0.001 -184.968 0.000 -0.129 -0.127 C(ccode)[T.517.0] -0.1171 0.001 -198.672 0.000 -0.118 -0.116 C(ccode)[T.520.0] 1.2725 0.021 59.568 0.000 1.231 1.314 C(ccode)[T.522.0] -0.0132 0.008 -1.660 0.097 -0.029 0.002 C(ccode)[T.530.0] 1.3320 0.002 620.380 0.000 1.328 1.336 C(ccode)[T.540.0] 1.2494 0.002 611.501 0.000 1.245 1.253 C(ccode)[T.541.0] 1.7636 0.004 405.215 0.000 1.755 1.772 C(ccode)[T.551.0] 0.2440 0.005 53.114 0.000 0.235 0.253 C(ccode)[T.552.0] -0.0049 0.003 -1.585 0.113 -0.011 0.001 C(ccode)[T.553.0] 0.2460 0.005 44.830 0.000 0.235 0.257 C(ccode)[T.560.0] 1.7528 0.002 796.854 0.000 1.749 1.757 C(ccode)[T.565.0] -1.4419 0.030 -47.517 0.000 -1.501 -1.382 C(ccode)[T.570.0] 0.1329 0.002 74.355 0.000 0.129 0.136 C(ccode)[T.571.0] 0.2493 0.002 110.308 0.000 0.245 0.254 C(ccode)[T.572.0] 0.2519 0.001 329.982 0.000 0.250 0.253 C(ccode)[T.580.0] 0.2488 0.002 147.237 0.000 0.245 0.252 C(ccode)[T.625.0] 0.7557 0.003 246.088 0.000 0.750 0.762 GPCP_g -0.0238 0.043 -0.550 0.582 -0.108 0.061 GPCP_g_l -0.1219 0.052 -2.352 0.019 -0.224 -0.020 ccode_404_time 0.0295 0.000 185.142 0.000 0.029 0.030 ccode_420_time -0.0160 0.000 -143.094 0.000 -0.016 -0.016 ccode_432_time 0.0078 0.001 15.618 0.000 0.007 0.009 ccode_433_time 0.0595 5.87e-05 1014.282 0.000 0.059 0.060 ccode_434_time 0.0004 0.000 2.272 0.023 4.97e-05 0.001 ccode_435_time 0.0009 0.001 1.469 0.142 -0.000 0.002 ccode_436_time 0.0369 0.001 34.562 0.000 0.035 0.039 ccode_437_time -1.254e-05 5.51e-06 -2.276 0.023 -2.33e-05 -1.74e-06 ccode_438_time 0.0297 0.000 270.544 0.000 0.030 0.030 ccode_439_time -0.0032 0.000 -19.303 0.000 -0.004 -0.003 ccode_450_time 0.1090 0.000 656.335 0.000 0.109 0.109 ccode_451_time 0.0786 0.000 259.266 0.000 0.078 0.079 ccode_452_time -0.0281 0.000 -211.081 0.000 -0.028 -0.028 ccode_461_time -0.0052 0.000 -42.688 0.000 -0.005 -0.005 ccode_471_time -0.0106 8.85e-05 -119.747 0.000 -0.011 -0.010 ccode_475_time 0.0002 0.000 1.308 0.191 -0.000 0.001 ccode_481_time -0.0005 0.000 -2.518 0.012 -0.001 -0.000 ccode_482_time 4.412e-05 4.9e-05 0.901 0.368 -5.19e-05 0.000 ccode_483_time -0.0185 0.001 -31.860 0.000 -0.020 -0.017 ccode_484_time 0.0415 0.000 162.672 0.000 0.041 0.042 ccode_490_time -0.0379 0.000 -88.293 0.000 -0.039 -0.037 ccode_500_time -0.0095 0.000 -25.149 0.000 -0.010 -0.009 ccode_501_time -0.0133 0.000 -45.306 0.000 -0.014 -0.013 ccode_510_time -3.845e-05 2.79e-05 -1.376 0.169 -9.32e-05 1.63e-05 ccode_516_time 0.0662 0.000 249.253 0.000 0.066 0.067 ccode_517_time 0.0697 0.000 244.485 0.000 0.069 0.070 ccode_520_time -0.0015 0.002 -0.705 0.481 -0.006 0.003 ccode_522_time 0.0437 0.001 30.559 0.000 0.041 0.047 ccode_530_time -0.0246 6.17e-05 -398.471 0.000 -0.025 -0.024 ccode_540_time -0.0004 0.000 -2.421 0.015 -0.001 -6.67e-05 ccode_541_time -0.0737 0.000 -337.720 0.000 -0.074 -0.073 ccode_551_time 5.597e-05 5.52e-05 1.014 0.310 -5.22e-05 0.000 ccode_552_time 0.0301 0.000 159.587 0.000 0.030 0.030 ccode_553_time 7.894e-05 0.000 0.257 0.797 -0.001 0.001 ccode_560_time -0.0684 5.73e-05 -1192.513 0.000 -0.068 -0.068 ccode_565_time 0.1134 0.001 80.950 0.000 0.111 0.116 ccode_570_time 0.0142 0.000 100.113 0.000 0.014 0.014 ccode_571_time 0.0002 0.000 1.506 0.132 -6.68e-05 0.001 ccode_572_time -0.0001 5.78e-05 -2.521 0.012 -0.000 -3.24e-05 ccode_580_time -0.0002 0.000 -1.087 0.277 -0.001 0.000 ccode_625_time 0.0331 3.67e-05 901.316 0.000 0.033 0.033 ============================================================================== Omnibus: 91.156 Durbin-Watson: 1.478 Prob(Omnibus): 0.000 Jarque-Bera (JB): 421.027 Skew: 0.452 Prob(JB): 3.76e-92 Kurtosis: 6.575 Cond. No. 226. ============================================================================== Notes: [1] Standard Errors are robust to cluster correlation (cluster)
model1=ols_model1.summary2().tables[1] #solo las estimaciones de los coeficientes model1
# Guardar Root mean square error rmse_ol1 = round(mean_squared_error( y, ols_model1.predict())**0.5,2) print(rmse_ol1)
0.24

Modelo con war_prio (guerra civil con más de 1000 muertos)

# Modelo 2 #----------------------------------- y = repdata['war_prio']
formula_model2 = "war_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) formula_model2
'war_prio ~ GPCP_g + GPCP_g_l + C(ccode) + ccode_404_time + ccode_420_time + ccode_432_time + ccode_433_time + ccode_434_time + ccode_435_time + ccode_436_time + ccode_437_time + ccode_438_time + ccode_439_time + ccode_450_time + ccode_451_time + ccode_452_time + ccode_461_time + ccode_471_time + ccode_475_time + ccode_481_time + ccode_482_time + ccode_483_time + ccode_484_time + ccode_490_time + ccode_500_time + ccode_501_time + ccode_510_time + ccode_516_time + ccode_517_time + ccode_520_time + ccode_522_time + ccode_530_time + ccode_540_time + ccode_541_time + ccode_551_time + ccode_552_time + ccode_553_time + ccode_560_time + ccode_565_time + ccode_570_time + ccode_571_time + ccode_572_time + ccode_580_time + ccode_625_time'
#Estimación, Modelo de regresión con war_prio ols_model2 = smf.ols(formula_model2, data=repdata).fit(cov_type='cluster', cov_kwds={'groups': repdata['ccode']}) print(ols_model2.summary()) #RESULTADO FINAL #se usa Hubert robust: cov_type #las perturbaciones están agrupadas por niveles: cov_kwds, por países
OLS Regression Results ============================================================================== Dep. Variable: war_prio R-squared: 0.699 Model: OLS Adj. R-squared: 0.661 Method: Least Squares F-statistic: 335.5 Date: Sun, 11 Dec 2022 Prob (F-statistic): 1.01e-25 Time: 12:30:57 Log-Likelihood: 124.86 No. Observations: 743 AIC: -81.72 Df Residuals: 659 BIC: 305.6 Df Model: 83 Covariance Type: cluster ===================================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------------- Intercept -0.1101 0.002 -45.002 0.000 -0.115 -0.105 C(ccode)[T.420.0] 0.1149 0.001 199.754 0.000 0.114 0.116 C(ccode)[T.432.0] 0.1033 0.005 19.235 0.000 0.093 0.114 C(ccode)[T.433.0] -0.0023 0.001 -2.213 0.027 -0.004 -0.000 C(ccode)[T.434.0] 0.1096 0.003 40.431 0.000 0.104 0.115 C(ccode)[T.435.0] 0.1019 0.006 16.920 0.000 0.090 0.114 C(ccode)[T.436.0] 0.0952 0.009 10.702 0.000 0.078 0.113 C(ccode)[T.437.0] 0.1097 0.003 41.518 0.000 0.104 0.115 C(ccode)[T.438.0] -0.0040 0.002 -2.267 0.023 -0.008 -0.001 C(ccode)[T.439.0] 0.1620 0.003 58.445 0.000 0.157 0.167 C(ccode)[T.450.0] -0.0897 0.002 -36.815 0.000 -0.094 -0.085 C(ccode)[T.451.0] -0.1389 0.001 -129.586 0.000 -0.141 -0.137 C(ccode)[T.452.0] 0.1090 0.003 36.791 0.000 0.103 0.115 C(ccode)[T.461.0] 0.1085 0.003 34.498 0.000 0.102 0.115 C(ccode)[T.471.0] 0.1095 0.003 39.909 0.000 0.104 0.115 C(ccode)[T.475.0] 0.1073 0.004 29.411 0.000 0.100 0.114 C(ccode)[T.481.0] 0.1145 0.001 117.993 0.000 0.113 0.116 C(ccode)[T.482.0] 0.1105 0.002 48.065 0.000 0.106 0.115 C(ccode)[T.483.0] 1.2499 0.006 216.523 0.000 1.239 1.261 C(ccode)[T.484.0] -0.2316 0.001 -272.071 0.000 -0.233 -0.230 C(ccode)[T.490.0] 1.3097 0.001 2311.875 0.000 1.309 1.311 C(ccode)[T.500.0] 1.3184 0.001 1150.994 0.000 1.316 1.321 C(ccode)[T.501.0] 0.1104 0.003 38.947 0.000 0.105 0.116 C(ccode)[T.510.0] 0.1097 0.003 41.535 0.000 0.105 0.115 C(ccode)[T.516.0] -0.0009 0.000 -2.207 0.027 -0.002 -0.000 C(ccode)[T.517.0] -0.1895 0.000 -603.755 0.000 -0.190 -0.189 C(ccode)[T.520.0] -0.4516 0.015 -30.400 0.000 -0.481 -0.423 C(ccode)[T.522.0] 0.1279 0.006 23.040 0.000 0.117 0.139 C(ccode)[T.530.0] 1.6181 0.001 1209.520 0.000 1.615 1.621 C(ccode)[T.540.0] 1.2389 0.001 890.450 0.000 1.236 1.242 C(ccode)[T.541.0] 1.6248 0.003 537.619 0.000 1.619 1.631 C(ccode)[T.551.0] 0.1087 0.003 35.587 0.000 0.103 0.115 C(ccode)[T.552.0] -0.1417 0.002 -67.737 0.000 -0.146 -0.138 C(ccode)[T.553.0] 0.1072 0.004 28.201 0.000 0.100 0.115 C(ccode)[T.560.0] 1.6180 0.001 1190.509 0.000 1.615 1.621 C(ccode)[T.565.0] -1.6018 0.019 -83.329 0.000 -1.639 -1.564 C(ccode)[T.570.0] 0.1155 0.001 121.781 0.000 0.114 0.117 C(ccode)[T.571.0] 0.1122 0.002 72.342 0.000 0.109 0.115 C(ccode)[T.572.0] 0.1146 0.001 215.878 0.000 0.114 0.116 C(ccode)[T.580.0] 0.1135 0.001 107.970 0.000 0.111 0.116 C(ccode)[T.625.0] 0.6990 0.002 346.178 0.000 0.695 0.703 GPCP_g -0.0625 0.030 -2.088 0.037 -0.121 -0.004 GPCP_g_l -0.0687 0.032 -2.174 0.030 -0.131 -0.007 ccode_404_time 0.0138 0.000 136.685 0.000 0.014 0.014 ccode_420_time -0.0002 7.58e-05 -2.310 0.021 -0.000 -2.66e-05 ccode_432_time 0.0008 0.000 2.309 0.021 0.000 0.001 ccode_433_time 0.0139 3.9e-05 357.734 0.000 0.014 0.014 ccode_434_time 0.0002 9.92e-05 2.229 0.026 2.67e-05 0.000 ccode_435_time 0.0009 0.000 2.294 0.022 0.000 0.002 ccode_436_time 0.0017 0.001 2.316 0.021 0.000 0.003 ccode_437_time -7.637e-06 3.43e-06 -2.227 0.026 -1.44e-05 -9.15e-07 ccode_438_time 0.0139 7.64e-05 181.539 0.000 0.014 0.014 ccode_439_time 0.0003 0.000 2.314 0.021 3.88e-05 0.000 ccode_450_time 0.0361 0.000 315.758 0.000 0.036 0.036 ccode_451_time 0.0294 0.000 139.810 0.000 0.029 0.030 ccode_452_time 0.0001 8.65e-05 1.619 0.105 -2.95e-05 0.000 ccode_461_time 0.0002 8.42e-05 2.132 0.033 1.45e-05 0.000 ccode_471_time 8.159e-05 5.6e-05 1.457 0.145 -2.82e-05 0.000 ccode_475_time 0.0003 0.000 2.270 0.023 3.68e-05 0.001 ccode_481_time -0.0002 0.000 -1.828 0.068 -0.000 1.41e-05 ccode_482_time 7.448e-05 3.41e-05 2.186 0.029 7.7e-06 0.000 ccode_483_time -0.0465 0.000 -116.348 0.000 -0.047 -0.046 ccode_484_time 0.0418 0.000 275.958 0.000 0.041 0.042 ccode_490_time -0.0512 0.000 -178.531 0.000 -0.052 -0.051 ccode_500_time -0.0479 0.000 -192.114 0.000 -0.048 -0.047 ccode_501_time 0.0002 0.000 1.443 0.149 -8.18e-05 0.001 ccode_510_time -4.393e-05 1.93e-05 -2.281 0.023 -8.17e-05 -6.18e-06 ccode_516_time 0.0136 0.000 77.533 0.000 0.013 0.014 ccode_517_time 0.0469 0.000 242.507 0.000 0.047 0.047 ccode_520_time 0.1060 0.001 73.516 0.000 0.103 0.109 ccode_522_time -0.0022 0.001 -2.253 0.024 -0.004 -0.000 ccode_530_time -0.0773 4.27e-05 -1808.402 0.000 -0.077 -0.077 ccode_540_time -0.0195 8.62e-05 -225.947 0.000 -0.020 -0.019 ccode_541_time -0.0734 0.000 -497.796 0.000 -0.074 -0.073 ccode_551_time 8.487e-05 3.84e-05 2.213 0.027 9.7e-06 0.000 ccode_552_time 0.0301 0.000 231.268 0.000 0.030 0.030 ccode_553_time 0.0004 0.000 1.989 0.047 6.07e-06 0.001 ccode_560_time -0.0685 3.55e-05 -1928.554 0.000 -0.069 -0.068 ccode_565_time 0.1148 0.001 134.450 0.000 0.113 0.116 ccode_570_time -0.0001 8.9e-05 -1.419 0.156 -0.000 4.81e-05 ccode_571_time 0.0002 0.000 2.298 0.022 3.41e-05 0.000 ccode_572_time -4.777e-05 3.14e-05 -1.524 0.128 -0.000 1.37e-05 ccode_580_time -0.0003 0.000 -2.229 0.026 -0.000 -3.09e-05 ccode_625_time 0.0165 1.97e-05 840.404 0.000 0.016 0.017 ============================================================================== Omnibus: 138.515 Durbin-Watson: 1.311 Prob(Omnibus): 0.000 Jarque-Bera (JB): 1043.072 Skew: 0.609 Prob(JB): 3.16e-227 Kurtosis: 8.675 Cond. No. 226. ============================================================================== Notes: [1] Standard Errors are robust to cluster correlation (cluster)
model2=ols_model2.summary2().tables[1] model2
# Guardar Root mean square error rmse_ol2 = round(mean_squared_error( y, ols_model2.predict())**0.5,2) print( rmse_ol2 )
0.2

Exportar regresiones a latex

#_---------------------------------------------------------- # EXPORTAR EN LATEX #_---------------------------------------------------------- # Lista de explicativa a mostrarse en la tabla explicativas = ['GPCP_g','GPCP_g_l'] # etiquetas a las variables etiquetas = ['Growth in rainfall, t','Growth in rainfall, t-1'] labels = dict(zip(explicativas,etiquetas)) labels
{'GPCP_g': 'Growth in rainfall, t', 'GPCP_g_l': 'Growth in rainfall, t-1'}
pystout(models = [ols_model1,ols_model2], file='regression_table1.tex', digits=3, endog_names=['Civil Conflict 25 Death (1)','Civil Conflict 1000 Death (2)'], exogvars =explicativas , # sellecionamos las variables varlabels = labels, # etiquetas a las variables mgroups={'Ordinary Least Squares':[1,2]}, # titulo a las regresiones modstat={'nobs':'Observations','rsquared':'R\sym{2}'}, # estadísticos addrows={'Country fixed effects':['yes','yes'], 'Country-specific time trends' : ['yes','yes'], 'Root mean square error': [rmse_ol1,rmse_ol2]}, # añadimos filas addnotes=['Note.—Huber robust standard errors are in parentheses.', 'Regression disturbance terms are clustered at the country level.', 'A country-specific year time trend is included in all specifications (coefficient estimates not reported).', '* Significantly different from zero at 90 percent confidence.', '** Significantly different from zero at 95 percent confidence.', '*** Significantly different from zero at 99 percent confidence.'], title='Rainfall and Civil conflict (Reduced form)', stars={.1:'*',.05:'**',.01:'***'} )

3. Graficar el Coeft plot del coeficiente estimado que corresponde a la variable GPCP g.

  • El gráfico debe incluir el coeficiente e intervalo de confianza respectivo de cada modelo.

#3.1. Extraer # Modelo 1 #............... #Extraer coeficientes de modelo any_prio model1_coef = model1.loc['GPCP_g', 'Coef.'] model1_coef_se = model1.loc['GPCP_g', 'Std.Err.'] model1_lower = model1.loc['GPCP_g', '[0.025'] model1_upper = model1.loc['GPCP_g', '0.975]'] # Modelo 2 #............... #Extraer coeficientes de modelo war_prio model2_coef = model2.loc['GPCP_g', 'Coef.'] model2_coef_se = model2.loc['GPCP_g', 'Std.Err.'] model2_lower = model2.loc['GPCP_g', '[0.025'] model2_upper = model2.loc['GPCP_g', '0.975]']
#3.2. Construir tabla donde se coloca coeficientes e intervalo de confianza table = np.zeros( ( 2, 4 ) ) table[0,0] = model1_coef table[0,1] = model1_coef_se table[0,2] = model1_lower table[0,3] = model1_upper table[1,0] = model2_coef table[1,1] = model2_coef_se table[1,2] = model2_lower table[1,3] = model2_upper
#3.3. Tabla con estimadores y sus intervalos # 3.3.1. Colocar nombres de la tabla table_pandas = pd.DataFrame( table, columns = [ "Estimate","Std. Error","Lower_bound" , "Upper_bound"]) table_pandas.index = [ "Civil Conflict 25 Death (1)","Civil Conflict 1000 Death (2)"] # 3.3.2. Colocar indices de la tabla table_pandas.reset_index(inplace = True) table_pandas.rename(columns = {"index" : "Model"}, inplace = True) table_pandas.round(8)
#Tamaño de gráfico fig, ax = plt.subplots(figsize = (10, 8)) #Punto de coeficiente ax.scatter(x = table_pandas['Model'], #va en el eje x marker = 'D', s = 100, # s: modificar tamaño del point, tamaño del punto y = table_pandas['Estimate'], color = "#ff9800") #va en el eje y #Intervalo de confianza eb1 = plt.errorbar(x = table_pandas['Model'], y = table_pandas['Estimate'], yerr = 0.5*(table_pandas['Upper_bound'] - table_pandas['Lower_bound']), #construir intervalo color= '#6d6d6d', ls = '', capsize = 4) #color de lineas de intervalo # ls='': no une los puntos rojos #Línea en y=0 plt.axhline(y = 0, color = '#bdbdbd').set_linestyle('--') # linea horizontal #Agregar título y etiquetas font = {'family': 'serif', 'color': '#AB6B1E', 'weight': 'normal', 'size': 16, } plt.title('Coeficiente de tasa de variación de lluvia GPCP-g (95% CI)',fontdict=font) plt.ylabel('Valor de coeficientes', fontdict=font) plt.xlabel('Modelos estimados', fontdict=font) ax.xaxis.set_tick_params(labelsize=15) ax.tick_params(axis='x', colors='#AB6B1E') #Color de fondo ax.set_facecolor("#FCF3CF")
Image in a Jupyter notebook
#3.5. Guardar figura fig.savefig(r'../grupo9/imagen_coeficientes.png', dpi=800, bbox_inches='tight') # code to save graph