(Continuação...)
3) i) Note que é preciso utilizar algum método de seleção do parâmetro de regularização (alpha) - para tanto utilizamos o BIC; perceba que basta alterar a variável dependente para calcular o BIC nas três regressões:
from sklearn.linear_model import LassoLarsIC
import time
import numpy as np
## BIC to select an optimal value of the regularization parameter alpha of the lasso ##
model_bic = LassoLarsIC(criterion='bic')
t1 = time.time()
model_bic.fit(X_1, Y_2)
t_bic = time.time() - t1
alpha_bic_ = model_bic.alpha_
model_aic = LassoLarsIC(criterion='aic')
model_aic.fit(X_1, Y_2)
alpha_aic_ = model_aic.alpha_
def plot_ic_criterion(model, name, color):
alpha_ = model.alpha_
alphas_ = model.alphas_
criterion_ = model.criterion_
plt.plot(-np.log10(alphas_), criterion_, '--', color=color,
linewidth=3, label='%s criterion' % name)
plt.axvline(-np.log10(alpha_), color=color, linewidth=3,
label='alpha: %s estimate' % name)
plt.xlabel('-log(alpha)')
plt.ylabel('criterion')
plt.figure()
plot_ic_criterion(model_aic, 'AIC', 'b')
plot_ic_criterion(model_bic, 'BIC', 'r')
plt.legend()
plt.title('Information-criterion for model selection (training time %.3fs)'
% t_bic)
plt.show()
1ª regressão:

2ª regressão:

3ª regressão:

ii) Agora é preciso calcular as três regressões regularizadas via lasso - observe que foi atribuído arbitrariamente um alpha = 0,1:
### IV REGRESSION (2SLS w/ LASSO): double selection ###
Y_1 = data['GDP']
X_1 = data.drop(['GDP', 'Exprop', 'Mort', 'lnmort', 'Exprop_fitted', 'Exprop_fitted2'], axis = 1)
print(X_1)
alpha = 0.1
las1 = Lasso(alpha=alpha)
las1.fit(X_1,Y_1)
print(las1.coef_)
Y_2 = data['Exprop']
las2 = Lasso(alpha=alpha)
las2.fit(X_1,Y_2)
print(las2.coef_)
Y_3 = data['lnmort']
las3 = Lasso(alpha=alpha)
las3.fit(X_1,Y_3)
print(las3.coef_)
iii) Matriz dos controles (X_1) e matriz dos coeficientes das três regressões:
Latitude Neo Africa ... lat_c24 lat2_c24 lat3_c24
0 0.3111 0 1 ... 0.0711 0.005055 3.594254e-04
1 0.1367 0 1 ... 0.0000 0.000000 0.000000e+00
2 0.3778 0 0 ... 0.1378 0.018989 2.616662e-03
3 0.3000 1 0 ... 0.0600 0.003600 2.160000e-04
4 0.2683 0 0 ... 0.0283 0.000801 2.266519e-05
5 0.2667 0 0 ... 0.0267 0.000713 1.903416e-05
6 0.1889 0 0 ... 0.0000 0.000000 0.000000e+00
7 0.1111 0 0 ... 0.0000 0.000000 0.000000e+00
8 0.1444 0 1 ... 0.0000 0.000000 0.000000e+00
9 0.6667 0 1 ... 0.4267 0.182073 7.769050e-02
10 0.6667 1 0 ... 0.4267 0.182073 7.769050e-02
11 0.3333 0 0 ... 0.0933 0.008705 8.121662e-04
12 0.0444 0 0 ... 0.0000 0.000000 0.000000e+00
13 0.0111 0 1 ... 0.0000 0.000000 0.000000e+00
14 0.1111 0 0 ... 0.0000 0.000000 0.000000e+00
15 0.0889 0 1 ... 0.0000 0.000000 0.000000e+00
16 0.2111 0 0 ... 0.0000 0.000000 0.000000e+00
17 0.0222 0 0 ... 0.0000 0.000000 0.000000e+00
18 0.3000 0 1 ... 0.0600 0.003600 2.160000e-04
19 0.1500 0 0 ... 0.0000 0.000000 0.000000e+00
20 0.0889 0 1 ... 0.0000 0.000000 0.000000e+00
21 0.0111 0 1 ... 0.0000 0.000000 0.000000e+00
22 0.1476 0 1 ... 0.0000 0.000000 0.000000e+00
23 0.0889 0 1 ... 0.0000 0.000000 0.000000e+00
24 0.1700 0 0 ... 0.0000 0.000000 0.000000e+00
25 0.1222 0 1 ... 0.0000 0.000000 0.000000e+00
26 0.0556 0 0 ... 0.0000 0.000000 0.000000e+00
27 0.2111 0 0 ... 0.0000 0.000000 0.000000e+00
28 0.1667 0 0 ... 0.0000 0.000000 0.000000e+00
29 0.2461 0 0 ... 0.0061 0.000037 2.269810e-07
.. ... ... ... ... ... ... ...
34 0.2222 0 1 ... 0.0000 0.000000 0.000000e+00
35 0.0256 0 0 ... 0.0000 0.000000 0.000000e+00
36 0.1889 0 1 ... 0.0000 0.000000 0.000000e+00
37 0.3944 0 0 ... 0.1544 0.023839 3.680797e-03
38 0.2556 0 0 ... 0.0156 0.000243 3.796416e-06
39 0.3556 0 1 ... 0.1156 0.013363 1.544804e-03
40 0.4556 1 0 ... 0.2156 0.046483 1.002181e-02
41 0.1444 0 0 ... 0.0000 0.000000 0.000000e+00
42 0.1778 0 1 ... 0.0000 0.000000 0.000000e+00
43 0.1111 0 1 ... 0.0000 0.000000 0.000000e+00
44 0.3333 0 0 ... 0.0933 0.008705 8.121662e-04
45 0.1000 0 0 ... 0.0000 0.000000 0.000000e+00
46 0.2556 0 0 ... 0.0156 0.000243 3.796416e-06
47 0.1111 0 0 ... 0.0000 0.000000 0.000000e+00
48 0.1556 0 1 ... 0.0000 0.000000 0.000000e+00
49 0.0922 0 1 ... 0.0000 0.000000 0.000000e+00
50 0.0136 0 0 ... 0.0000 0.000000 0.000000e+00
51 0.3222 0 1 ... 0.0822 0.006757 5.554122e-04
52 0.0778 0 0 ... 0.0000 0.000000 0.000000e+00
53 0.1667 0 1 ... 0.0000 0.000000 0.000000e+00
54 0.0667 0 1 ... 0.0000 0.000000 0.000000e+00
55 0.0889 0 1 ... 0.0000 0.000000 0.000000e+00
56 0.1222 0 0 ... 0.0000 0.000000 0.000000e+00
57 0.3778 0 1 ... 0.1378 0.018989 2.616662e-03
58 0.0111 0 1 ... 0.0000 0.000000 0.000000e+00
59 0.3667 0 0 ... 0.1267 0.016053 2.033901e-03
60 0.4222 1 0 ... 0.1822 0.033197 6.048464e-03
61 0.0889 0 0 ... 0.0000 0.000000 0.000000e+00
62 0.1778 0 0 ... 0.0000 0.000000 0.000000e+00
63 0.0000 0 1 ... 0.0000 0.000000 0.000000e+00
[ 0. 0. -0.84164164 -0. 0. 0.
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. ]
[ 0. 1.43954682 -0.54360255 0. -0. 0.
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. ]
[-0. -0.16238596 1.06626713 -0. 0. -0.
-0. -0. -0. -0. -0. -0.
-0. -0. -0. -0. -0. ]
iv) Após o double selection, calculamos o terceiro modelo - note que consideramos apenas a variável dummy para África como controle geográfico (ver resultado em item ii) anterior):
# After control 'double selection': 2SLS w/ LASSO
result = smf.ols(formula = "Exprop ~ lnmort + Africa", data = data).fit()
print(result.summary())
data['Exprop_fitted3'] = result.predict()
print(data.head())
result = smf.ols(formula = "GDP ~ Exprop_fitted3 + Africa", data=data).fit()
print(result.summary())
v) Resultados do terceiro modelo de regressão:
OLS Regression Results
==============================================================================
Dep. Variable: Exprop R-squared: 0.280
Model: OLS Adj. R-squared: 0.257
Method: Least Squares F-statistic: 11.87
Date: Sat, 16 Jun 2018 Prob (F-statistic): 4.43e-05
Time: 18:01:09 Log-Likelihood: -104.40
No. Observations: 64 AIC: 214.8
Df Residuals: 61 BIC: 221.3
Df Model: 2
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 9.1648 0.669 13.698 0.000 7.827 10.503
lnmort -0.5429 0.158 -3.430 0.001 -0.860 -0.226
Africa -0.2982 0.398 -0.748 0.457 -1.095 0.498
==============================================================================
Omnibus: 0.072 Durbin-Watson: 1.584
Prob(Omnibus): 0.965 Jarque-Bera (JB): 0.146
Skew: 0.075 Prob(JB): 0.929
Kurtosis: 2.820 Cond. No. 22.2
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
OLS Regression Results
==============================================================================
Dep. Variable: GDP R-squared: 0.520
Model: OLS Adj. R-squared: 0.504
Method: Least Squares F-statistic: 33.01
Date: Sat, 16 Jun 2018 Prob (F-statistic): 1.92e-10
Time: 18:01:09 Log-Likelihood: -69.573
No. Observations: 64 AIC: 145.1
Df Residuals: 61 BIC: 151.6
Df Model: 2
Covariance Type: nonrobust
==================================================================================
coef std err t P>|t| [0.025 0.975]
----------------------------------------------------------------------------------
Intercept 3.2056 1.188 2.698 0.009 0.830 5.581
Exprop_fitted3 0.7710 0.169 4.557 0.000 0.433 1.109
Africa -0.3964 0.264 -1.500 0.139 -0.925 0.132
==============================================================================
Omnibus: 5.322 Durbin-Watson: 1.975
Prob(Omnibus): 0.070 Jarque-Bera (JB): 4.524
Skew: -0.629 Prob(JB): 0.104
Kurtosis: 3.338 Cond. No. 88.0
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Este método de seleção de variáveis é construído para produzir um trade-off razoável entre o segundo modelo, talvez excessivamente flexível, e o primeiro modelo, parcimonioso, ao permitir que funções flexíveis sejam consideradas, mas usando apenas termos que sejam úteis para entender como as variáveis se relacionam.
Obs.:
a) A partir dos parâmetros de regularização definidos através do BIC, observamos que dois coeficientes são diferentes de zero (Neo e Africa). O que difere do modelo calculado pelos autores. Neste caso, estimando o terceiro modelo a partir de duas características chegamos a estimativas diferentes.
Por isso em ii) foi definido arbitrariamente um alpha = 0,1. De modo que os resultados convirjam com o artigo.
b) Testei outro método de validação cruzada, o k-fold. Neste caso, o alpha selecionado foi semelhante ao do BIC.