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

Grupo 7: Trabajo Final

Pregunta 1: Modelos lineales

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 # import linear models 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 import datasets, linear_model # models from sklearn.metrics import mean_squared_error, r2_score import warnings warnings.filterwarnings('ignore') # eliminar warning messages #!pip install statsmodels # instalar stsatmodels # Export latex table from pystout import pystout user = os.getlogin() # Username os.chdir(f"/Users/{user}/Documents/GitHub/") # Set directorio
Importamos la data
data = pd.read_stata(r"/Users/henryandreumarquezsalinas/Documents/GitHub/First-Repository/Trabajo Final/mss_repdata.dta", convert_categoricals=False) # importamos la data sin leer las etiquetas de valor
data #mostramos su contenido

Tabla estadística

data.describe() # summmary statistics
# Tipo de variables data.info() data.dtypes
<class 'pandas.core.frame.DataFrame'> Int64Index: 743 entries, 0 to 742 Columns: 200 entries, ccode to soc dtypes: datetime64[ns](1), float32(104), float64(78), int32(9), int8(5), object(3) memory usage: 813.4+ KB
ccode float64 year datetime64[ns] country_name object country_code object GPCP float32 ... fh_pol float64 S float32 W float32 WoverS float32 soc float32 Length: 200, dtype: object
# Extraer year # con .month se puede extraer el mes # con .day se puede extraer el día data['time_year'] = pd.DatetimeIndex(data['year']).year - 1978 data['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
dummys = pd.get_dummies(data["ccode"].astype(int), prefix = "ccode", dummy_na=False) dummys.columns # se convierte a entero repdata["ccode"].astype(int) # ccode: código por país # dummy_na=False # capturar varibbles omitidas invariantes de cada país
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')
len(dummys.columns)
41
dummys
data = pd.concat([ data , dummys], axis = 1 ) # concantenar ambas bases de datos de manera horizontal
data
# Creación del trend_country effects : multiplicación de las dummy por país y la 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 data[var] = data[dummys.columns[i]]*data["time_year"] # multiplicación de variables: dummy país * variable temporal i = i + 1
# observamos para país y la variable temporal data[['ccode','time_year']].iloc[0:40,:]
# Seleccionamos las variables para las estadísticas descriptivas table1 = data.loc[:,["NDVI_g","tot_100", "trade_pGDP","pop_den_rur", "land_crop", "va_agr", "va_ind_manf"]] # selccionamos los estadísticos de interés: media, error estándar y cantidad de observaciones summary_table = table1.describe().loc[["mean","std","count"]] summary_table
summary_table = table1.describe().loc[["mean","std","count"]].T # .t permite tranponer el DataFrame # Personalizamos la tabla a crear columns_nuevos_nombres = { "mean": "Mean", "std": "Standard Deviation", "count": "Observations", } # Renombramos las filas y las columnas summary_table.rename(columns=columns_nuevos_nombres, inplace=True) summary_table
# Exportamos el DataFrame a LaTeX # \ permite escribir código extenso en líneas diferentes summary_table.style.format(subset="Mean", precision=2).format(subset="Standard Deviation", precision=2)\ .format(subset="Observations", precision=0)\ .to_latex( "summary2.tex", caption="Descriptive Statistics", column_format = "lccc" # l: left, c:center , ) # Formato de columnas summary_table.style.format(subset="Mean", precision=2).format(subset="Standard Deviation", precision=2).format(subset="Observations", precision=0) # Así obtenemos la tabla de estadísticos solicitada #
# Ahora podemos hacer la misma tabla, pero con otro formato summary_table = table1.describe().loc[["mean","std","count"]].T # .t permite tranponer el DataFrame 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 agricultura respecto al PBI", "Valor agregado del sector manufacturero respecto al PBI"] # unión de listas bajo la estructura diccionario dict( zip( table1.columns, new_names) )
{'NDVI_g': 'Tasa de variación del índice de vegetación', 'tot_100': 'Términos de intercambio', 'trade_pGDP': 'Porcentaje de las exportaciones respecto al PBI', 'pop_den_rur': 'Densidad poblacional rural', 'land_crop': 'Porcentaje de tierra cultivable en uso', 'va_agr': 'Valor agregado del sector agricultura respecto al PBI', 'va_ind_manf': 'Valor agregado del sector manufacturero respecto al PBI'}
# Personalizamos la nueva tabla index_nuevos_nombres = dict( zip( table1.columns, new_names) ) columns_nuevos_nombres = { "mean": "Mean", "std": "Standard Deviation", "count": "Observations", } # Renombramos las filas y las columnas summary_table.rename(index=index_nuevos_nombres, columns=columns_nuevos_nombres, inplace=True) summary_table
# Exportamos el DataFrame a LaTeX # \ permite escribir código extenso en líneas diferentes summary_table.style.format(subset="Mean", precision=2).format(subset="Standard Deviation", precision=2)\ .format(subset="Observations", precision=0)\ .to_latex( "summary2.tex", caption="Descriptive Statistics", column_format = "lccc" # l: left, c:center , )
# Formato de columnas summary_table.style.format(subset="Mean", precision=2).format(subset="Standard Deviation", precision=2).format(subset="Observations", precision=0) # Así obtenemos la nueva tabla con los nombres en las filas cambiados #

Replicando la Tabla 3

y = data['any_prio'] z = data['war_prio'] # añadimos constante X = sm.add_constant(data.loc[:,["GPCP_g", "GPCP_g_l"]]) X

Modelo 1:

# country fixed effect index_columns = np.where( data.columns.str.contains( '_time$'))[0] # indice con nombre de variables que terminan con _time country_trend = data.columns[index_columns] # se extrae el nombre de todas las variables que terminan con _time country_trend
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')
# Planteamos el modelo formula_model1 = "any_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) model1 = smf.ols(formula_model1, data).fit(cov_type = 'cluster', cov_kwds={'groups': data['ccode']}).summary2().tables[1] # Recolectamos los coeficientes model1_coef = model1.iloc[41,0] model1_coef_se = model1.iloc[41,1] model1_lower = model1.iloc[41,4] model1_upper = model1.iloc[41,5] model1
# Hallamos el error medio cuadrado formula_model1 = "any_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) ols_model1 = smf.ols(formula_model1, data).fit(cov_type='cluster', cov_kwds={'groups': data['ccode']}) rmse_ol1 = round(mean_squared_error( y, ols_model1.predict())**0.5,2) print(ols_model1.summary()) print(rmse_ol1)
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: Fri, 09 Dec 2022 Prob (F-statistic): 6.28e-20 Time: 20:47:48 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) 0.24

Modelo 2

# Planteamos el segundo modelo formula_model2 = "war_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) model2 = smf.ols(formula_model2, data).fit(cov_type = 'cluster', cov_kwds={'groups': data['ccode']}).summary2().tables[1] # Recolectamos los coeficientes model2_coef = model2.iloc[41,0] model2_coef_se = model2.iloc[41,1] model2_lower = model2.iloc[41,4] model2_upper = model2.iloc[41,5]
# Hallamos el error medio cuadrado formula_model2 = "war_prio ~ GPCP_g + GPCP_g_l + C(ccode)" + ' + ' + ' + '.join( country_trend ) ols_model2 = smf.ols(formula_model2, data).fit(cov_type='cluster', cov_kwds={'groups': data['ccode']}) rmse_ol2 = round(mean_squared_error( y, ols_model2.predict())**0.5,2) print(ols_model2.summary()) print(rmse_ol2)
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: Fri, 09 Dec 2022 Prob (F-statistic): 1.01e-25 Time: 20:48:43 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) 0.32

Elaboramos la tabla correspondiente

# Lista de explicativa a mostrarse en la tabla explicativas = ['gdp_g', 'gdp_g_l'] # etiquetas a las variables etiquetas = ['Economic growth rate, t','Economic growth rate, t-1'] labels = dict(zip(explicativas,etiquetas)) labels
{'gdp_g': 'Economic growth rate, t', 'gdp_g_l': 'Economic growth rate, t-1'}
pystout(models = [ols_model1,ols_model2], file='regression_table_2.tex', digits=3, endog_names=['OLS','OLS'], exogvars =explicativas , # sellecionamos las variables varlabels = labels, # etiquetas a las variables mgroups={'Dependent Variable: Civil Conflict 25 Deaths (OLS)':[1,5],'Dependent Variable: Civil Conflict 1000 Deaths (OLS)':[2,5]}, # titulo a las regresiones modstat={'nobs':'Observarions','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:'***'} )

Elaboramos la tabla a emplear para el gráfico

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 table_pandas = pd.DataFrame( table, columns = [ "Estimate","Std. Error","Lower_bound" , "Upper_bound"]) table_pandas.index = [ "Modelo 1","Modelo 2"] table_pandas.reset_index(inplace = True) table_pandas.rename(columns = {"index" : "Model"}, inplace = True) table_pandas.round(8)

Gráfico Coeft Plot

fig, ax = plt.subplots(figsize=(7, 6)) ax.scatter(x=table_pandas['Model'], marker='o', s=20, # s: modificar tamaño del point y=table_pandas['Estimate'], color = "black") eb1 = plt.errorbar(x=table_pandas['Model'], y=table_pandas['Estimate'], yerr = 0.5*(table_pandas['Upper_bound']- table_pandas['Lower_bound']), color = 'black', ls='', capsize = 4) # ls='': no une los puntos rojos # yerr genera el gráfico del intervalo de confianza plt.axhline(y=0, color = 'black').set_linestyle('--') # linea horizontal # Set title & labels plt.title('Coeficiente de la variable GDCP-g (95% CI)',fontsize=12)
Text(0.5, 1.0, 'Coeficiente de la variable GDCP-g (95% CI)')
Image in a Jupyter notebook