Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como implementar 'double selection' num problema de VI via lasso?

+1 voto
37 visitas
perguntada Jun 16 em Economia por Felipe Carneiro (26 pontos)  
editado Jun 26 por Felipe Carneiro

Considere o artigo “High-Dimensional Methods and Inference on Treatment and Structural Effects - Victor Chernozhukov, A. Belloni and C. Hansen (2014)”, replique o exercício empírico desenvolvido na Seção 8.

Compartilhe

3 Respostas

+1 voto
respondida Jun 16 por Felipe Carneiro (26 pontos)  
editado Jun 26 por Felipe Carneiro

O artigo, Belloni et al (2014), e seu data set podem ser acessados pelo link.

Este problema é discutido num minicurso de econometria do NBER. A questão no qual o exercício se trata, referente a seção 8, é o da estimativa do efeito das instituições sobre a produção agregada seguindo o trabalho de Acemoglu, Johnson e Robinson (2001).

Segundo eles, estimar o efeito das instituições na produção é complicado pelo claro potencial de simultaneidade entre instituições e produto: especificamente, melhores instituições podem conduzir a uma renda mais elevada, mas a renda mais elevada também podem levar ao desenvolvimento de melhores instituições - observa-se aqui um problema de causalidade reversa, o que nos obriga a lidar com endogeneidade. Para ajudar a solucionar isto, eles usam as taxas de mortalidade para os primeiros colonos europeus como um instrumento para a qualidade da instituição.

  • A restrição de relevância deste instrumento baseia-se no argumento de
    que os colonos estabeleceram melhores instituições em lugares onde
    eles foram mais propensos a estabelecer colônias de longo prazo; e
    que as instituições são altamente persistentes.

  • Já a restrição de exclusão para a variável instrumental é então
    motivada com o argumento de que o PIB, embora persistente, é
    improvável de ser fortemente influenciado pela mortalidade no século
    anterior, ou antes, exceto através de instituições.

Acemoglu, Johnson e Robinson (2001) observam que sua estratégia de variável instrumental será invalidada se outros fatores também forem altamente persistentes e relacionados ao desenvolvimento de instituições dentro de um país e ao PIB do país. Um dos principais candidatos a esse fator, conforme discutem, é a geografia.

Assim, eles controlam para a distância do equador (latitude) em seu modelo básico e também consideram um outro modelo com diferentes conjuntos de controles geográficos, como variáveis dummy para continentes; veja tabela:

A imagem será apresentada aqui.

  • A linha “First Stage” fornece a estimativa do primeiro estágio do
    coeficiente de mortalidade de colonos (lnmort) obtida pela
    regressão de Protection from Expropriation em Settler Mortality e o
    conjunto de variáveis de controle indicado no cabeçalho da coluna.
  • A linha “Second Stage” fornece a estimativa do efeito estrutural
    das instituições no log (PIB/GDP per capita) usando
    Settler Mortality como o instrumento e controlando as variáveis conforme indicado na coluna título. Cada coluna relata os resultados
    para diferentes conjuntos de variáveis de controle. A coluna
    Latitude” controla linearmente a distância do equador. A coluna
    All controls” inclui 16 controles definidos no artigo (como
    dummies para os continentes, latitude², latitude³, entre outros); ver Belloni et al (2014).
  • Note que existe uma terceira coluna, que neste caso representa o
    exercício dos autores sobre os dados do artigo de Acemoglu et al
    (2001). Este novo modelo baseia-se no método de double selection, o
    qual consiste no processo de regularização das regressões a partir do
    lasso; são três regressões regularizadas: de PIB (GDP), de
    Settler Mortality, e de Protection from Expropriation por todos os controles ( ver Belloni et al (2014)).

Aplicando este algoritmo chegamos ao resultado de que apenas a variável dummy para África tem seu coeficiente estatisticamente diferente de zero. Portanto, é aplicado uma regressão de dois estágios (como nos dois primeiros modelos), mas utilizando apenas como controle a variável dummy para África; os resultados são representados na tabela.

Para a implementação do exercício a linguagem escolhida foi Python 3.6.
Será necessário a importação das seguintes bibliotecas:

  • pandas: necessária para importação e manipulação dos dados;
  • statsmodels.formula.api: cálculo das regressões (mínimos quadrados de dois estágios);
  • sklearn.linear_model: cálculo do lasso e do BIC.
  • matplotlib.pyplot: plotagem
  • numpy: aplicação de logaritmo
  • time: funções de tempo

1) i) Começamos importando os dados a partir de um planilha de Excel (.xlsx) - note que os demais controles geográficos foram acrescentados no arquivo original:

import pandas as pd
import statsmodels.formula.api as smf
from sklearn.linear_model import Lasso, LassoLarsIC
import matplotlib.pyplot as plt
import time
import numpy as np

data = pd.read_excel('acemoglu_data.xlsx',  sheet_name='data')

print(data.head())

print(data.columns)

print(data.describe())

ii) Quatro primeiras linhas da tabela importada; índice de colunas da tabela, e suas respectivas estatísticas descritivas:

GDP  Exprop    Mort    ...     lat_c24  lat2_c24  lat3_c24
0  8.39    6.50   78.20    ...      0.0711  0.005055  0.000359
1  7.77    5.36  280.00    ...      0.0000  0.000000  0.000000
2  9.13    6.39   68.90    ...      0.1378  0.018989  0.002617
3  9.90    9.32    8.55    ...      0.0600  0.003600  0.000216
4  9.29    7.50   85.00    ...      0.0283  0.000801  0.000023

[5 rows x 21 columns]
Index(['GDP', 'Exprop', 'Mort', 'Latitude', 'Neo', 'Africa', 'Asia', 'Namer',
       'Samer', 'lnmort', 'lat2', 'lat3', 'lat_c08', 'lat2_c08', 'lat3_c08',
       'lat_c16', 'lat2_c16', 'lat3_c16', 'lat_c24', 'lat2_c24', 'lat3_c24'],
      dtype='object')
             GDP     Exprop    ...       lat2_c24   lat3_c24
count  64.000000  64.000000    ...      64.000000  64.000000
mean    8.062500   6.516094    ...       0.008961   0.002921
std     1.043701   1.468841    ...       0.032465   0.013627
min     6.110000   3.500000    ...       0.000000   0.000000
25%     7.302500   5.617500    ...       0.000000   0.000000
50%     7.950000   6.475000    ...       0.000000   0.000000
75%     8.852500   7.352500    ...       0.000735   0.000020
max    10.220000  10.000000    ...       0.182073   0.077691

[8 rows x 21 columns]
0 votos
respondida Jun 16 por Felipe Carneiro (26 pontos)  
editado Jun 26 por Felipe Carneiro

(Continuação...)

2) i) Logo depois, calculamos os dois primeiros modelos:

### IV REGRESSION (2SLS): 'latitude' as unique geographical control ###

result = smf.ols(formula = "Exprop ~ lnmort + Latitude", data = data).fit()
print(result.summary())

data['Exprop_fitted'] = result.predict()

print(data.head())

result = smf.ols(formula = "GDP ~ Exprop_fitted + Latitude", data=data).fit()

print(result.summary())


### IV REGRESSION (2SLS): all geographical controls ###

result = smf.ols(formula = "Exprop ~ lnmort + Latitude + Neo + Africa + Asia + Namer + Samer + lat2 + lat3 + lat_c08 + lat2_c08 + lat3_c08 + lat_c16 + lat2_c16 + lat3_c16 + lat_c24 + lat2_c24 + lat3_c24", data = data).fit()
print(result.summary())

data['Exprop_fitted2'] = result.predict()

print(data.head())

result = smf.ols(formula = "GDP ~ Exprop_fitted2 + Latitude + Neo + Africa + Asia + Namer + Samer + lat2 + lat3 + lat_c08 + lat2_c08 + lat3_c08 + lat_c16 + lat2_c16 + lat3_c16 + lat_c24 + lat2_c24 + lat3_c24", data = data).fit()
print(result.summary())

ii) Resultados do primeiro modelo de regressão:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 Exprop   R-squared:                       0.302
Model:                            OLS   Adj. R-squared:                  0.279
Method:                 Least Squares   F-statistic:                     13.17
Date:                Sat, 16 Jun 2018   Prob (F-statistic):           1.76e-05
Time:                        18:01:09   Log-Likelihood:                -103.43
No. Observations:                  64   AIC:                             212.9
Df Residuals:                      61   BIC:                             219.3
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      8.6660      0.751     11.534      0.000       7.164      10.168
lnmort        -0.5372      0.135     -3.991      0.000      -0.806      -0.268
Latitude       1.8177      1.162      1.564      0.123      -0.506       4.141
==============================================================================
Omnibus:                        0.185   Durbin-Watson:                   1.672
Prob(Omnibus):                  0.912   Jarque-Bera (JB):                0.346
Skew:                           0.102   Prob(JB):                        0.841
Kurtosis:                       2.703   Cond. No.                         40.0
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specifie

d.


                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    GDP   R-squared:                       0.482
Model:                            OLS   Adj. R-squared:                  0.465
Method:                 Least Squares   F-statistic:                     28.39
Date:                Sat, 16 Jun 2018   Prob (F-statistic):           1.93e-09
Time:                        18:01:09   Log-Likelihood:                -71.993
No. Observations:                  64   AIC:                             150.0
Df Residuals:                      61   BIC:                             156.5
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
=================================================================================
                    coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------
Intercept         1.8744      0.911      2.058      0.044       0.053       3.696
Exprop_fitted     0.9692      0.153      6.322      0.000       0.663       1.276
Latitude         -0.6696      0.852     -0.786      0.435      -2.374       1.035
==============================================================================
Omnibus:                        7.513   Durbin-Watson:                   2.194
Prob(Omnibus):                  0.023   Jarque-Bera (JB):                6.898
Skew:                          -0.652   Prob(JB):                       0.0318
Kurtosis:                       3.941   Cond. No.                         76.2
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

iii) Resultados do segundo modelo de regressão:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 Exprop   R-squared:                       0.594
Model:                            OLS   Adj. R-squared:                  0.431
Method:                 Least Squares   F-statistic:                     3.656
Date:                Tue, 19 Jun 2018   Prob (F-statistic):           0.000212
Time:                        23:33:06   Log-Likelihood:                -86.080
No. Observations:                  64   AIC:                             210.2
Df Residuals:                      45   BIC:                             251.2
Df Model:                          18                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      4.3769      1.543      2.836      0.007       1.269       7.485
lnmort        -0.0848      0.192     -0.441      0.661      -0.472       0.302
Latitude     261.3963    116.575      2.242      0.030      26.601     496.191
Neo            2.5811      0.890      2.899      0.006       0.788       4.374
Africa        -0.1755      0.974     -0.180      0.858      -2.136       1.785
Asia           0.7427      0.962      0.772      0.444      -1.194       2.680
Namer          0.1274      0.888      0.144      0.887      -1.661       1.916
Samer          0.1406      0.935      0.150      0.881      -1.742       2.023
lat2       -6163.4015   3223.834     -1.912      0.062   -1.27e+04     329.733
lat3         4.07e+04   2.55e+04      1.596      0.118   -1.07e+04    9.21e+04
lat_c08      -30.9048    193.808     -0.159      0.874    -421.255     359.445
lat2_c08   -4037.7925   3355.087     -1.203      0.235   -1.08e+04    2719.700
lat3_c08    -4.14e+04   4.28e+04     -0.968      0.338   -1.28e+05    4.48e+04
lat_c16       51.3524    218.702      0.235      0.815    -389.136     491.841
lat2_c16     771.0254   3032.442      0.254      0.800   -5336.626    6878.676
lat3_c16    2682.5509    4.5e+04      0.060      0.953   -8.79e+04    9.33e+04
lat_c24      -65.8576    103.528     -0.636      0.528    -274.374     142.659
lat2_c24    -577.7119   2838.199     -0.204      0.840   -6294.138    5138.715
lat3_c24   -2085.1709   2.52e+04     -0.083      0.934   -5.29e+04    4.87e+04
==============================================================================
Omnibus:                        2.526   Durbin-Watson:                   1.732
Prob(Omnibus):                  0.283   Jarque-Bera (JB):                1.755
Skew:                           0.238   Prob(JB):                        0.416
Kurtosis:                       3.657   Cond. No.                     2.20e+06
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 2.2e+06. This might indicate that there are
strong multicollinearity or other numerical problems.

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    GDP   R-squared:                       0.708
Model:                            OLS   Adj. R-squared:                  0.591
Method:                 Least Squares   F-statistic:                     6.054
Date:                Tue, 19 Jun 2018   Prob (F-statistic):           4.74e-07
Time:                        23:33:06   Log-Likelihood:                -53.682
No. Observations:                  64   AIC:                             145.4
Df Residuals:                      45   BIC:                             186.4
Df Model:                          18                                         
Covariance Type:            nonrobust                                         
==================================================================================
                     coef    std err          t      P>|t|      [0.025      0.975]
----------------------------------------------------------------------------------
Intercept         -0.7984      5.603     -0.143      0.887     -12.082      10.486
Exprop_fitted2     2.1548      1.365      1.578      0.122      -0.595       4.905
Latitude        -445.0589    368.523     -1.208      0.233   -1187.303     297.186
Neo               -4.9236      3.690     -1.334      0.189     -12.355       2.508
Africa            -0.3890      0.709     -0.549      0.586      -1.817       1.039
Asia              -1.8881      1.141     -1.654      0.105      -4.187       0.410
Namer             -0.0301      0.541     -0.056      0.956      -1.119       1.059
Samer             -0.1865      0.571     -0.327      0.745      -1.336       0.963
lat2            9763.1287   8751.724      1.116      0.271   -7863.748    2.74e+04
lat3           -6.214e+04   5.83e+04     -1.066      0.292    -1.8e+05    5.53e+04
lat_c08           54.3741    122.547      0.444      0.659    -192.449     301.197
lat2_c08        5587.6087   6092.666      0.917      0.364   -6683.650    1.79e+04
lat3_c08         6.43e+04   6.07e+04      1.060      0.295   -5.79e+04    1.87e+05
lat_c16          -49.2185    135.141     -0.364      0.717    -321.407     222.970
lat2_c16       -2522.5447   2092.069     -1.206      0.234   -6736.187    1691.098
lat3_c16        6181.7746   2.68e+04      0.230      0.819   -4.78e+04    6.02e+04
lat_c24           64.8029    108.687      0.596      0.554    -154.104     283.710
lat2_c24        -556.9371   1842.424     -0.302      0.764   -4267.770    3153.895
lat3_c24       -8144.0681   1.51e+04     -0.538      0.593   -3.86e+04    2.23e+04
==============================================================================
Omnibus:                        4.140   Durbin-Watson:                   2.249
Prob(Omnibus):                  0.126   Jarque-Bera (JB):                3.452
Skew:                          -0.360   Prob(JB):                        0.178
Kurtosis:                       3.881   Cond. No.                     6.77e+06
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The smallest eigenvalue is 6.29e-11. This might indicate that there are
strong multicollinearity problems or that the design matrix is singular.

Obs.:
É possível notar em iii) que os coeficientes obtidos no MQ2E do segundo modelo não são exatamente iguais aos do artigo - embora a interpretação não seja diferente: ao adicionar um modelo com o conjunto de controles mais completo resulta em um primeiro estágio muito impreciso. Deste modo, a estimativa do efeito das instituições não é confiável, dado o fraco estágio da primeira etapa.

0 votos
respondida Jun 16 por Felipe Carneiro (26 pontos)  
editado Jun 26 por Felipe Carneiro

(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:
A imagem será apresentada aqui.

2ª regressão:
A imagem será apresentada aqui.

3ª regressão:
A imagem será apresentada aqui.

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.

comentou Jul 4 por Julia Regina Scotti (31 pontos)  
Olá Felipe,

muito legal sua resposta!

Mas tenho dúvida: porque fazer alpha=0.1 ('arbitrariamente') quando você poderia suar o alpha sugerido pelo critério BIC (ou AIC).

Note que você tem acesso a esse alpha, no teu código ele está em: model_bic.alpha e em model_aic.alpha
comentou Jul 4 por Felipe Carneiro (26 pontos)  
Olá, Julia,
valeu!

Então, como comentei na última parte de minha resposta, quando utilizei o BIC como método de seleção do parâmetro de regularização (alpha), o resultado observado foi diferente ao dos autores. De maneira mais clara os parâmetros selecionados, respectivamente, foram: 0.014299679665624431, 0.04490265830815283, 0.02365232188737653.
Ou seja, ao utilizar esses valores do alpha não apenas o coeficiente da variável Africa era diferente de zero, mas também o coeficiente da variável Neo.
Adiante, pesquisando sobre esse problema encontrei um vídeo (o qual citei na resposta) em que o Hansen explica melhor a aplicação: lá ele diz que realizou uma validação cruzada utilizando k-fold (onde ele divide a amostra em 10-folds). Desta maneira, rodei essa rotina e o resultado continuou semelhante ao do BIC (sugiro que o resultado não foi diferente pelo tamanho pequeno da amostra).
Ele utilizou o STATA, talvez haja uma divergência dos resultados por isso (uma hipótese).
comentou Jul 5 por Pedro Campelo (31 pontos)  
Muito boa implementação, Felipe!

A pequena divergência ocorrida entre o valor do seu coeficiente da regressão do segundo modelo com o do artigo pode ser explicada por uma normalização das variáveis feitas no artigo. Isto é, se vc normalizasse as variáveis para x' = (xi - x_média)/desvio_padrão, provavelmente os resultados bateriam.
...