ME715 - Econometria

Métodos simples de dados em painel

Prof. Carlos Trucíos
ctrucios@unicamp.br

Instituto de Matemática, Estatística e Computação Científica (IMECC),
Universidade Estadual de Campinas (UNICAMP).

Introdução

Introdução

  • Até agora temos aprendido algumas técnicas para trabalhar com: (a) dados de corte transversal e (b) dados de séries temporais
  • Embora ambas as estruturas mencionadas acima sejam as mais utilizadas, em algumas situações precisaremos lidar com conjuntos de dados que possuem tanto corte transversal quando estrutura temporal.
  • Estas estruturas podem ser divididas em:
    • Corte transversal agrupados (ou agrupamento independente de cortes transversais)
    • Dados em painel (ou longitudinais)

Agrupamento independente de cortes transversais

Agrupamento independente de cortes transversais

Um agrupamento independente de cortes transversais é obtido fazendo-se uma amostragem aleatória de uma população em diferentes periodos de tempo (geralmente, mas não necessáriamente, em anos diferentes)
  • Agrupar amostras aleatórias extraídas da mesma população, mas em períodos de tempo diferentes, pode nos ajudar a melhorar a qualidade dos estimadores.
  • Contudo, o agrupamento apenas é util se a relação entre a variável dependente e pelo menos uma das variáveis independentes, permanecer constante ao longo do tempo.

Importante

\[\text{Agrupamento independente de cortes transversais} \neq \text{amostra aleatória}\]

A diferença é que ao fazer amostragem de uma população em períodos diferentes pode acontecer que observações não serão mais identicamente distribuidas

Agrupamento independente de cortes transversais

Importante

\[\text{Agrupamento independente de cortes transversais} \neq \text{dados em painel}\]

Nos dados em painel ou longitudinais, a mesma amostra é acompanhada ao longo do tempo. Já no agrupamento independente de cortes transversais, as amostras são independentes.

Agrupamento independente de cortes transversais

  • Pesquisas sobre pessoas, famílias, empresas, etc são repetidas a intervalos regulares (geralmente um ano).
  • Se uma amostra aleatória for extraida a cada período de tempo, teremos um agrupamento independente de cortes transversais.
  • Quando utilizamos agrupamentos independentes de cortes transversais?
    • Quando queremos aumentar o tamanho da amostra!
  • Cuidado! não devemos analisar os dados como vindo de uma única amostra, mas em geral são necessárias apenas pequenas modificações.
  • Em geral, para incorporar o fato de que a população pode ter distribuições diferentes em períodos de tempo diferentes, permitimos que o intercepto mude ao longo dos períodos.
  • Isto é feito com a inclusão de variáveis dummy (o primeiro ano da amostra é considerado o ano base).

Agrupamento independente de cortes transversais

Exemplo 1

O dataset fertil1 provém da Pesquisa Social Geral (realizada de dois em dois anos, começando em 1972) do Centro de Pesquisa e Opinião Nacional. Utilizaremos este conjunto de dados para construir um modelo que explique o número total de nascimentos por mulheres (kids).

Em particular, estamos interessados em saber o que aconteceu com as taxas de fertilidade ao longo do tempo após termos controlado os outros fatores observáveis (anos de educação, idade, raça, região do país onde as mulherem moravam quando tinham 16 anos e o ambiente em que viviam quando tinham a mesma idade).

Code
library(dplyr)
library(wooldridge)
glimpse(fertil1)
Rows: 1,129
Columns: 27
$ year     <int> 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 7…
$ educ     <int> 12, 17, 12, 12, 12, 8, 12, 10, 12, 12, 14, 11, 12, 11, 18, 14…
$ meduc    <int> 8, 8, 7, 12, 3, 8, 12, 12, 8, 6, 16, 12, 5, 4, 10, 16, 1, 16,…
$ feduc    <int> 8, 18, 8, 10, 8, 8, 10, 5, 8, 13, 13, 10, 3, 8, 18, 12, 6, 16…
$ age      <int> 48, 46, 53, 42, 51, 50, 47, 46, 41, 36, 36, 39, 49, 53, 38, 3…
$ kids     <int> 4, 3, 2, 2, 2, 4, 0, 1, 2, 4, 2, 4, 5, 5, 5, 5, 5, 4, 3, 2, 1…
$ black    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0…
$ east     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1…
$ northcen <int> 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0…
$ west     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0…
$ farm     <int> 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0…
$ othrural <int> 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0…
$ town     <int> 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0…
$ smcity   <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y74      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y76      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y78      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y80      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y82      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y84      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ agesq    <int> 2304, 2116, 2809, 1764, 2601, 2500, 2209, 2116, 1681, 1296, 1…
$ y74educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y76educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y78educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y80educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y82educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ y84educ  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

Agrupamento independente de cortes transversais

Exemplo 1

Code
library(wooldridge)
modelo <- lm(kids  ~ educ + age + I(age^2) + black + east + northcen + west + 
               farm + othrural + town + smcity + y74 + y76 + y78 + y80 + y82 +
               y84, data = fertil1)
summary(modelo)

Call:
lm(formula = kids ~ educ + age + I(age^2) + black + east + northcen + 
    west + farm + othrural + town + smcity + y74 + y76 + y78 + 
    y80 + y82 + y84, data = fertil1)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.9878 -1.0086 -0.0767  0.9331  4.6548 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -7.742457   3.051767  -2.537 0.011315 *  
educ        -0.128427   0.018349  -6.999 4.44e-12 ***
age          0.532135   0.138386   3.845 0.000127 ***
I(age^2)    -0.005804   0.001564  -3.710 0.000217 ***
black        1.075658   0.173536   6.198 8.02e-10 ***
east         0.217324   0.132788   1.637 0.101992    
northcen     0.363114   0.120897   3.004 0.002729 ** 
west         0.197603   0.166913   1.184 0.236719    
farm        -0.052557   0.147190  -0.357 0.721105    
othrural    -0.162854   0.175442  -0.928 0.353481    
town         0.084353   0.124531   0.677 0.498314    
smcity       0.211879   0.160296   1.322 0.186507    
y74          0.268183   0.172716   1.553 0.120771    
y76         -0.097379   0.179046  -0.544 0.586633    
y78         -0.068666   0.181684  -0.378 0.705544    
y80         -0.071305   0.182771  -0.390 0.696511    
y82         -0.522484   0.172436  -3.030 0.002502 ** 
y84         -0.545166   0.174516  -3.124 0.001831 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.555 on 1111 degrees of freedom
Multiple R-squared:  0.1295,    Adjusted R-squared:  0.1162 
F-statistic: 9.723 on 17 and 1111 DF,  p-value: < 2.2e-16

Agrupamento independente de cortes transversais

Exemplo 2

Estamos interessados em estudar as mudanças no retorno da educação (sob o salário) e a diferença salarial por gênero. Utilizaremos o dataset cps78_85 e utilizaremos o seguinte modelo:

\[\log(wage) = \beta_0 + \gamma_0 y85 + \beta_1 educ + \gamma_1 y85 \times educ + \beta_2 exper +\] \[\beta_3 exper^2 + \beta_4 union + \beta_5 female + \gamma_5 y85 \times female + u\]

  • \(union:\) 1 se a pessoa é sindicalizada.
  • \(y85:\) 1 se observação corresponde a 1985 e 0 se corresponde a 1978 (ano base)

Observação: o poder de compra em 1978 e em 1985 não é o mesmo. Ou seja, o salario hora em 1978 e o salário hora em 1985, mesmo que tenham o mesmo valor (nominal) não representam o mesmo. De forma semelhantes, diferenças de valores podem não significar muito devido às correções da inflação. O que devemos fazer nestes casos?

Considerar a inflação!

Agrupamento independente de cortes transversais

  • O procedimento padrão é deflacionar os dados, ou seja, passar tudo para valores correntes do ano base.
  • Isto é feito considerando algúm índice que permita termos ideia da inflação (IPC, por exemplo).
  • O livro texto utiliza o IPC do (Tabela B-58).
    • IPC 1978: 65.2,
    • IPC: 1985: 107.6
    • Deflator = \(107.6 / 65.2 = 1.65\) (devemos dividir os salário de 1985 por 1.65)

Importante

Neste caso particular, como temos incluido uma dummy (y85) que altera o intercepto e como estamos trabalhando com \(\log(wage)\), não será necessário fazer a deflação. Veja que se denotarmos por \(P85\) o fator de deflação para os salário hora de 1985, temos que \(\log(wage_i / P85) = \log(wage_i) - \log(P85)\)

Agrupamento independente de cortes transversais

Code
modelo <- lm(lwage ~ y85*educ + exper + I(exper^2) + union + y85*female, data = cps78_85)
summary(modelo)

Call:
lm(formula = lwage ~ y85 * educ + exper + I(exper^2) + union + 
    y85 * female, data = cps78_85)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.56098 -0.25828  0.00864  0.26571  2.11669 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  4.589e-01  9.345e-02   4.911 1.05e-06 ***
y85          1.178e-01  1.238e-01   0.952   0.3415    
educ         7.472e-02  6.676e-03  11.192  < 2e-16 ***
exper        2.958e-02  3.567e-03   8.293 3.27e-16 ***
I(exper^2)  -3.994e-04  7.754e-05  -5.151 3.08e-07 ***
union        2.021e-01  3.029e-02   6.672 4.03e-11 ***
female      -3.167e-01  3.662e-02  -8.648  < 2e-16 ***
y85:educ     1.846e-02  9.354e-03   1.974   0.0487 *  
y85:female   8.505e-02  5.131e-02   1.658   0.0977 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4127 on 1075 degrees of freedom
Multiple R-squared:  0.4262,    Adjusted R-squared:  0.4219 
F-statistic:  99.8 on 8 and 1075 DF,  p-value: < 2.2e-16

Agrupamento independente de cortes transversais

Code
coef(summary(modelo))
                 Estimate   Std. Error    t value     Pr(>|t|)
(Intercept)  0.4589328832 9.344850e-02  4.9110781 1.046281e-06
y85          0.1178062179 1.237817e-01  0.9517254 3.414502e-01
educ         0.0747209129 6.676431e-03 11.1917443 1.399530e-27
exper        0.0295843067 3.567312e-03  8.2931650 3.266999e-16
I(exper^2)  -0.0003994278 7.753912e-05 -5.1513072 3.075711e-07
union        0.2021318735 3.029449e-02  6.6722331 4.025626e-11
female      -0.3167086481 3.662145e-02 -8.6481733 1.876348e-17
y85:educ     0.0184605323 9.354169e-03  1.9735085 4.869344e-02
y85:female   0.0850519706 5.130896e-02  1.6576435 9.768121e-02

Interpretação: V ou F?

  • O retorno da educação é de \(\approx\) 0.075 centavos por ano de educação formal.
  • O retorno da educação é de 7.5% por ano de educação formal.
  • A diferença salarial é de 31%
  • O retorno da educação em 1978 era de 7.5% e em 1985 e 9.35%
  • A diferença salarial em 1978 era de 31% e em 1985 esta diferença era de 23.2%

Agrupamento independente de cortes transversais

Para pensar

O que acontece se ajustarmos um modelo incluindo a interação de \(y85\) com todas as outras variáveis independentes?
Code
modelo <- lm(lwage ~ y85*(educ + exper + I(exper^2) + union + female), data = cps78_85)
summary(modelo)

Call:
lm(formula = lwage ~ y85 * (educ + exper + I(exper^2) + union + 
    female), data = cps78_85)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.55317 -0.25818  0.00812  0.26686  2.14184 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)     0.4582570  0.1021541   4.486 8.04e-06 ***
y85             0.1219978  0.1509545   0.808  0.41917    
educ            0.0768148  0.0069137  11.110  < 2e-16 ***
exper           0.0249177  0.0050303   4.954 8.46e-07 ***
I(exper^2)     -0.0002844  0.0001083  -2.625  0.00879 ** 
union           0.2039824  0.0393500   5.184 2.60e-07 ***
female         -0.3155108  0.0367901  -8.576  < 2e-16 ***
y85:educ        0.0139270  0.0101560   1.371  0.17057    
y85:exper       0.0095289  0.0071382   1.335  0.18219    
y85:I(exper^2) -0.0002399  0.0001553  -1.544  0.12277    
y85:union      -0.0018095  0.0617285  -0.029  0.97662    
y85:female      0.0846136  0.0518164   1.633  0.10277    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4128 on 1072 degrees of freedom
Multiple R-squared:  0.4276,    Adjusted R-squared:  0.4217 
F-statistic: 72.79 on 11 and 1072 DF,  p-value: < 2.2e-16
Code
modelo_01 <- lm(lwage ~ educ + exper + I(exper^2) + union + female, weights = y85, data = cps78_85)
modelo_02 <- lm(lwage ~ educ + exper + I(exper^2) + union + female, weights = 1- y85, data = cps78_85)
summary(modelo_01)

Call:
lm(formula = lwage ~ educ + exper + I(exper^2) + union + female, 
    data = cps78_85, weights = y85)

Weighted Residuals:
   Min     1Q Median     3Q    Max 
-2.194  0.000  0.000  0.000  2.142 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.5802548  0.1179364   4.920 1.16e-06 ***
educ         0.0907418  0.0078944  11.494  < 2e-16 ***
exper        0.0344467  0.0053743   6.409 3.24e-10 ***
I(exper^2)  -0.0005243  0.0001181  -4.438 1.11e-05 ***
union        0.2021730  0.0504693   4.006 7.07e-05 ***
female      -0.2308973  0.0387206  -5.963 4.53e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.438 on 528 degrees of freedom
Multiple R-squared:  0.3175,    Adjusted R-squared:  0.3111 
F-statistic: 49.13 on 5 and 528 DF,  p-value: < 2.2e-16
Code
summary(modelo_02)

Call:
lm(formula = lwage ~ educ + exper + I(exper^2) + union + female, 
    data = cps78_85, weights = 1 - y85)

Weighted Residuals:
     Min       1Q   Median       3Q      Max 
-2.55317  0.00000  0.00000  0.01828  1.29929 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.4582570  0.0957004   4.788 2.17e-06 ***
educ         0.0768148  0.0064769  11.860  < 2e-16 ***
exper        0.0249177  0.0047125   5.288 1.80e-07 ***
I(exper^2)  -0.0002844  0.0001015  -2.802  0.00526 ** 
union        0.2039824  0.0368640   5.533 4.89e-08 ***
female      -0.3155108  0.0344658  -9.154  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.3867 on 544 degrees of freedom
Multiple R-squared:  0.3833,    Adjusted R-squared:  0.3776 
F-statistic: 67.61 on 5 and 544 DF,  p-value: < 2.2e-16

Teste de Chow

  • Utilizado para determinar se uma função de regressão multipla difere entre dois grupos (ou, em nosso caso, em dois períodos de tempo).
  • É basicamente um teste F.
  • Procedimento:
    • Seja SQRr (restrito) a SQR da estimação agrupada.
    • Seja SQRi (irrestrita) a soma da SQR dos modelos estimados por separado
    • \(F = \dfrac{SQRr - SQRi}{SQRi} \times \dfrac{n - 2(k + 1)}{k + 1}\), em que \(k\) é o número de variáveis explicativas (sem incluir os interceptos das dummies) na equação.

Cases

Cortes transversais agrupados poder ser muito úteis para avaliar o impacto de determinados eventos ou decisões políticas.

Exemplo: Efeito da localização de um incinerador de lixo sobre os preços do imóveis

O objetivo estudar o efeito que um novo incinerador de lixo teve sobre os valores dos imóveis em uma determinada região. O rumor de que um novo incinerador seria construido começou após 1978 e a construção começou em 1981. Utilizaremos dados de preços de imóveis vendidos em dois períodos de tempo: 1978 e 1981. A hipótese é que os preços dos imóveis localizados próximos (raio de 4.8km) ao incinerador cairiam em relação aos preços dos imóveis mais distantes. A variável rprice representa os preços dos imóveis já em termos reais e o conjunto de dados a utilizar é o kielmc do pacote wooldridge

Cases

Code
modelo_01 <- lm(rprice ~ nearinc, data = kielmc, subset = (year==1981))
summary(modelo_01)

Call:
lm(formula = rprice ~ nearinc, data = kielmc, subset = (year == 
    1981))

Residuals:
   Min     1Q Median     3Q    Max 
-60678 -19832  -2997  21139 136754 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   101308       3093  32.754  < 2e-16 ***
nearinc       -30688       5828  -5.266 5.14e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 31240 on 140 degrees of freedom
Multiple R-squared:  0.1653,    Adjusted R-squared:  0.1594 
F-statistic: 27.73 on 1 and 140 DF,  p-value: 5.139e-07

Infelizmente, as conclusões anteriores não são o que parecem. De fato, se analizarmos apenas os dados de 1978 (quando nem rumores do incinerador existiam), veremos que imóveis nessa mesma região já eram mais baratos.

Code
modelo_02 <- lm(rprice ~ nearinc, data = kielmc, subset = (year==1978))
summary(modelo_02)

Call:
lm(formula = rprice ~ nearinc, data = kielmc, subset = (year == 
    1978))

Residuals:
   Min     1Q Median     3Q    Max 
-56517 -16605  -3193   8683 236307 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    82517       2654  31.094  < 2e-16 ***
nearinc       -18824       4745  -3.968 0.000105 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 29430 on 177 degrees of freedom
Multiple R-squared:  0.08167,   Adjusted R-squared:  0.07648 
F-statistic: 15.74 on 1 and 177 DF,  p-value: 0.0001054

Da análise anterior, é mais coerente pensar que o incinerador foi contruido em uma área de imóveis de menor valor.

  • Como então podemos verificar se a construção do novo incinerador reduz os valores dos imóveis?
  • A clave está em verificar como o coeficiente associado a nearinc mudou entre 1978 e 1981.
  • A diferença na média dos valores dos imóveis em 1981 era muito maior ($. 30688,27) do que em 1978 ($.18824,37).
  • A diferença destes valores (\(\hat{\gamma}_1\) = $. 30688,27 - $. 18824,37 = $. 11863,9) é a estimativa do efeito do incinerador sobre os valores dos imóveis próximos ao incinerador.
  • \(\hat{\gamma}_1\) tornou-se conhecido como estimador de diferenças em diferenças (diff-in-diff) pois pode ser escrito como \[\hat{\gamma}_1 = (\bar{rprice}_{81, próximo} - \bar{rprice}_{81, afastado}) - (\bar{rprice}_{78, próximo} - \bar{rprice}_{78, afastado}) \]
  • \(\hat{\gamma}_1\) é a diferença, ao longo do tempo, das diferenças das médias dos preços dos imóveis nas duas localizações.
  • Falta apenas determinar se \(\gamma_1\) é significativo, o que poder ser feito através de uma regressão com efeito de interação.
Code
modelo_03 <- lm(rprice ~ nearinc * y81 , data = kielmc)
summary(modelo_03)

Call:
lm(formula = rprice ~ nearinc * y81, data = kielmc)

Residuals:
   Min     1Q Median     3Q    Max 
-60678 -17693  -3031  12483 236307 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    82517       2727  30.260  < 2e-16 ***
nearinc       -18824       4875  -3.861 0.000137 ***
y81            18790       4050   4.640 5.12e-06 ***
nearinc:y81   -11864       7457  -1.591 0.112595    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 30240 on 317 degrees of freedom
Multiple R-squared:  0.1739,    Adjusted R-squared:  0.1661 
F-statistic: 22.25 on 3 and 317 DF,  p-value: 4.224e-13

Repare que o foco no termo de interação está em saber se a presença do incinerador fez os preços cairem, o que leva a um teste unilateral (p-valor = 0.0562975).

Cases

O que acontece se trabalharmos com \(\log(rprice)\) e com controles?

Code
modelo_04 <- lm(log(rprice) ~ nearinc*y81 + age + I(age^2) + log(intst) + 
                  log(land) + log(area) + rooms + baths, data = kielmc)
summary(modelo_04)

Call:
lm(formula = log(rprice) ~ nearinc * y81 + age + I(age^2) + log(intst) + 
    log(land) + log(area) + rooms + baths, data = kielmc)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.18440 -0.09946  0.01478  0.10984  0.74873 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.652e+00  4.159e-01  18.399  < 2e-16 ***
nearinc      3.224e-02  4.749e-02   0.679 0.497713    
y81          1.621e-01  2.850e-02   5.687 2.99e-08 ***
age         -8.359e-03  1.411e-03  -5.924 8.37e-09 ***
I(age^2)     3.763e-05  8.668e-06   4.342 1.92e-05 ***
log(intst)  -6.144e-02  3.151e-02  -1.950 0.052081 .  
log(land)    9.984e-02  2.449e-02   4.077 5.81e-05 ***
log(area)    3.508e-01  5.149e-02   6.813 4.98e-11 ***
rooms        4.733e-02  1.733e-02   2.732 0.006662 ** 
baths        9.428e-02  2.773e-02   3.400 0.000761 ***
nearinc:y81 -1.315e-01  5.197e-02  -2.531 0.011884 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2038 on 310 degrees of freedom
Multiple R-squared:  0.7326,    Adjusted R-squared:  0.7239 
F-statistic: 84.91 on 10 and 310 DF,  p-value: < 2.2e-16

Em razão do incinerador próximo, os imóveis perderam 13.15% do seu valor.

Análise de dados em painel de dois períodos

Análise de dados em painel de dois períodos

  • O conjunto de dados crime2 contém, entre outras coisas, informação sobre as taxas de criminalidade (crmrte) e desemprego (unem) de 46 cidades entre 1982 e 1987.
  • O que acontece se utilizarmos o corte transversal de 1987 e ajustarmos a regressão de crmrte sobre unem?
Code
modelo_01 <- lm(crmrte ~ unem, data = crime2, subset = (year == 87))
coef(summary(modelo_01))
              Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 128.378121  20.756628  6.184922 1.804270e-07
unem         -4.161134   3.416456 -1.217968 2.297273e-01
  • Como sabemos, esse modelo pode ter variáveis omitidas e uma maneira de solucionar o problema é incluir todas as variáveis relevantes no modelo.
  • Infelizmente, isto pode ser dificil de se fazer.
  • Uma solução é incluir a variável dependente defasada.

Análise de dados em painel de dois períodos

  • Outra solução é separar os fatores não observados que afetam a variável dependente em dois tipos:
    • os que são constantes,
    • os que variam ao longo do tempo.
  • Assim, se \(i\) representar a unidade de corte transversal e \(t\) o período de tempo, podemos escrever um modelo da forma \[y_{it} = \beta_0 + \gamma_0D_t + \beta_1 x_{it} + a_i + u_{it},\] em que \(y_{it}\) representa a \(i\)-éssima unidade experimental no tempo \(t\), \(D_t\) é uma dummy igual a zero quando \(t=1\), \(a_i\) capta todos os fatores não observados (mas constantes no tempo) que afetam \(y_{it}\) (\(a_i\) é também conhecido como efeito não observado, efeito fixo ou heterogeneidade não observada) e \(u_{it}\) é chamado de erro idiossincrático (ou de variação temporal) e representa os fatores não observados que mudam ao longo do tempo.

Análise de dados em painel de dois períodos

  • O Modelo apresentado é chamado de modelos de efeitos não observados ou modelo de efeitos fixos
  • Para o exemplo das taxas de crimialidade de uma cidade em 1982 e 1987, um modelo de efeito fixos (ou de efeitos não observados) é dado por \[crmrte_{it} = \beta_0 + \gamma_0 d87_t + \beta_1 unem_{it} + a_i + u_{it},\] em que \(d87\) é uma dummy para 1987 (recebe o valor 1 se o ano for 1987 e zero se o ano for 1982) e, neste caso, \(a_i\) é o efeito não observado (ou fixo) da cidade (todos os fatores que afetam a taxa de criminalidade da cidade que não mudam ao longo do tempo).
  • Como estimamos o parâmetro de interesse \(\beta_1\)?

Análise de dados em painel de dois períodos

Alternativa 1

  • Agrupar e usar MQO como na primeira parte da aula.
  • O problema? precisamos assumir que \(a_i\) e \(x_{it}\) são não correlacionados. Se isso não for verdade teremos um \(\hat{\beta}\) viesado e inconsistente.
  • Para ver isto, basta notar que \[y_{it} = \beta_0 + \gamma_0D_t + \beta_1 x_{it} + \underbrace{a_i + u_{it}}_{v_{it}}\]

Alternativa 2

  • A razão principal para coletar dados em painel é considerar que o efeito não observado (\(a_i\)) é correlacionado com as variáveis explicativas.
  • Isso pode ser feito através da diferenciação!
    • \(y_{i2} = \beta_0 + \gamma_0 + \beta_1 x_{i2} + a_i + u_{i2}\),
    • \(y_{i1} = \beta_0 + \beta_1 x_{i1} + a_i + u_{i1}\),
    • \(y_{i2} - y_{i} = \gamma_0 + \beta_1 (x_{i2} - x_{i1}) + (u_{i2} - u_{i1})\),
    • \(\Delta y_i = \gamma_0 + \beta_1 + \Delta x_i + \Delta u_i\)
  • Aplicamos MQO (o estimador resultante é chamado de estimador de primeiras diferenças)

Análise de dados em painel de dois períodos

Code
library(plm)
library(dplyr)
glimpse(crime2)
Rows: 92
Columns: 34
$ pop      <dbl> 229528, 246815, 814054, 933177, 374974, 406297, 176496, 20172…
$ crimes   <dbl> 17136, 17306, 75654, 83960, 31352, 31364, 15698, 16953, 31202…
$ unem     <dbl> 8.2, 3.7, 8.1, 5.4, 9.0, 5.9, 12.6, 5.7, 12.6, 7.4, 13.9, 5.7…
$ officers <int> 326, 321, 1621, 1803, 633, 685, 245, 259, 504, 563, 186, 232,…
$ pcinc    <int> 8532, 12155, 7551, 11363, 8343, 11729, 7592, 10802, 7558, 106…
$ west     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ nrtheast <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ south    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ year     <int> 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 82, 8…
$ area     <dbl> 44.6, 44.6, 375.0, 375.0, 49.8, 49.8, 74.0, 74.0, 97.3, 97.3,…
$ d87      <int> 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0…
$ popden   <dbl> 5146.368, 5533.969, 2170.811, 2488.472, 7529.599, 8158.574, 2…
$ crmrte   <dbl> 74.65756, 70.11729, 92.93487, 89.97221, 83.61113, 77.19476, 8…
$ offarea  <dbl> 7.309417, 7.197309, 4.322667, 4.808000, 12.710844, 13.755020,…
$ lawexpc  <dbl> 850.8599, 2262.4399, 875.0800, 1069.6400, 1121.8999, 1545.600…
$ polpc    <dbl> 1.420306, 1.300569, 1.991268, 1.932109, 1.688117, 1.685959, 1…
$ lpop     <dbl> 12.34378, 12.41639, 13.60978, 13.74635, 12.83461, 12.91484, 1…
$ loffic   <dbl> 5.786897, 5.771441, 7.390799, 7.497207, 6.450470, 6.529419, 5…
$ lpcinc   <dbl> 9.051579, 9.405496, 8.929436, 9.338118, 9.029179, 9.369820, 8…
$ llawexpc <dbl> 6.746247, 7.724199, 6.774315, 6.975078, 7.022779, 7.343167, 6…
$ lpopden  <dbl> 8.546046, 8.618661, 7.682856, 7.819424, 8.926597, 9.006824, 7…
$ lcrimes  <dbl> 9.748937, 9.758808, 11.233926, 11.338096, 10.353033, 10.35341…
$ larea    <dbl> 3.797734, 3.797734, 5.926926, 5.926926, 3.908015, 3.908015, 4…
$ lcrmrte  <dbl> 4.312912, 4.250169, 4.531899, 4.499501, 4.426177, 4.346332, 4…
$ clcrimes <dbl> NA, 0.0098714828, NA, 0.1041698456, NA, 0.0003833771, NA, 0.0…
$ clpop    <dbl> NA, 0.0726137161, NA, 0.1365680695, NA, 0.0802278519, NA, 0.1…
$ clcrmrte <dbl> NA, -0.06274271, NA, -0.03239822, NA, -0.07984495, NA, -0.056…
$ lpolpc   <dbl> 0.3508723, 0.2628021, 0.6887718, 0.6586123, 0.5236138, 0.5223…
$ clpolpc  <dbl> NA, -0.088070214, NA, -0.030159533, NA, -0.001279354, NA, -0.…
$ cllawexp <dbl> NA, 0.9779520, NA, 0.2007623, NA, 0.3203883, NA, 0.1313882, N…
$ cunem    <dbl> NA, -4.5000000, NA, -2.7000003, NA, -3.0999999, NA, -6.900000…
$ clpopden <dbl> NA, 0.0726146698, NA, 0.1365680695, NA, 0.0802278519, NA, 0.1…
$ lcrmrt_1 <dbl> NA, 4.312912, NA, 4.531899, NA, 4.426177, NA, 4.487990, NA, 4…
$ ccrmrte  <dbl> NA, -4.540268, NA, -2.962654, NA, -6.416374, NA, -4.901543, N…

Análise de dados em painel de dois períodos

Code
crime2_panel <- pdata.frame(crime2, index = 46)
glimpse(crime2_panel)
Rows: 92
Columns: 36
$ pop      <pseries> 229528, 246815, 814054, 933177, 374974, 406297, 176496, 2…
$ crimes   <pseries> 17136, 17306, 75654, 83960, 31352, 31364, 15698, 16953, 3…
$ unem     <pseries> 8.2, 3.7, 8.1, 5.4, 9.0, 5.9, 12.6, 5.7, 12.6, 7.4, 13.9,…
$ officers <pseries> 326, 321, 1621, 1803, 633, 685, 245, 259, 504, 563, 186, …
$ pcinc    <pseries> 8532, 12155, 7551, 11363, 8343, 11729, 7592, 10802, 7558,…
$ west     <pseries> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ nrtheast <pseries> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ south    <pseries> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ year     <pseries> 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 82, 87, 8…
$ area     <pseries> 44.6, 44.6, 375.0, 375.0, 49.8, 49.8, 74.0, 74.0, 97.3, 9…
$ d87      <pseries> 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, …
$ popden   <pseries> 5146.368, 5533.969, 2170.811, 2488.472, 7529.599, 8158.57…
$ crmrte   <pseries> 74.65756, 70.11729, 92.93487, 89.97221, 83.61113, 77.1947…
$ offarea  <pseries> 7.309417, 7.197309, 4.322667, 4.808000, 12.710844, 13.755…
$ lawexpc  <pseries> 850.8599, 2262.4399, 875.0800, 1069.6400, 1121.8999, 1545…
$ polpc    <pseries> 1.420306, 1.300569, 1.991268, 1.932109, 1.688117, 1.68595…
$ lpop     <pseries> 12.34378, 12.41639, 13.60978, 13.74635, 12.83461, 12.9148…
$ loffic   <pseries> 5.786897, 5.771441, 7.390799, 7.497207, 6.450470, 6.52941…
$ lpcinc   <pseries> 9.051579, 9.405496, 8.929436, 9.338118, 9.029179, 9.36982…
$ llawexpc <pseries> 6.746247, 7.724199, 6.774315, 6.975078, 7.022779, 7.34316…
$ lpopden  <pseries> 8.546046, 8.618661, 7.682856, 7.819424, 8.926597, 9.00682…
$ lcrimes  <pseries> 9.748937, 9.758808, 11.233926, 11.338096, 10.353033, 10.3…
$ larea    <pseries> 3.797734, 3.797734, 5.926926, 5.926926, 3.908015, 3.90801…
$ lcrmrte  <pseries> 4.312912, 4.250169, 4.531899, 4.499501, 4.426177, 4.34633…
$ clcrimes <pseries> NA, 0.0098714828, NA, 0.1041698456, NA, 0.0003833771, NA,…
$ clpop    <pseries> NA, 0.0726137161, NA, 0.1365680695, NA, 0.0802278519, NA,…
$ clcrmrte <pseries> NA, -0.06274271, NA, -0.03239822, NA, -0.07984495, NA, -0…
$ lpolpc   <pseries> 0.3508723, 0.2628021, 0.6887718, 0.6586123, 0.5236138, 0.…
$ clpolpc  <pseries> NA, -0.088070214, NA, -0.030159533, NA, -0.001279354, NA,…
$ cllawexp <pseries> NA, 0.9779520, NA, 0.2007623, NA, 0.3203883, NA, 0.131388…
$ cunem    <pseries> NA, -4.5000000, NA, -2.7000003, NA, -3.0999999, NA, -6.90…
$ clpopden <pseries> NA, 0.0726146698, NA, 0.1365680695, NA, 0.0802278519, NA,…
$ lcrmrt_1 <pseries> NA, 4.312912, NA, 4.531899, NA, 4.426177, NA, 4.487990, N…
$ ccrmrte  <pseries> NA, -4.540268, NA, -2.962654, NA, -6.416374, NA, -4.90154…
$ id       <fct> 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10,…
$ time     <fct> 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1…

Análise de dados em painel de dois períodos

Code
modelo_01 <- lm(crmrte ~ unem, data = crime2, subset = (year == 87))
coef(summary(modelo_01))
              Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 128.378121  20.756628  6.184922 1.804270e-07
unem         -4.161134   3.416456 -1.217968 2.297273e-01
Code
modelo_02 <- lm(crmrte ~ d87 + unem, data = crime2)
coef(summary(modelo_02))
              Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 93.4202496  12.739471 7.3331339 9.916069e-11
d87          7.9404159   7.975325 0.9956228 3.221327e-01
unem         0.4265473   1.188279 0.3589622 7.204735e-01
Code
crime2_panel$dcrmrte <- diff(crime2_panel$crmrte)
crime2_panel$dunem <- diff(crime2_panel$unem)
modelo_03 <- lm(dcrmrte ~ dunem, data = crime2_panel)
coef(summary(modelo_03))
            Estimate Std. Error  t value    Pr(>|t|)
(Intercept)  15.4022  4.7021169 3.275589 0.002060469
dunem         2.2180  0.8778658 2.526581 0.015189318

Análise de dados em painel de dois períodos

Exemplo: Dormir vs. Trabalhar

O conjunto de dados slp75_81, contém dados em painel de dois anos. O objetivo é estimar a relação de substituição entre o tempo gasto dormindo e trabalhando. Um modelo de efeitos não observados, é da forma \[slpnap_{it} = \beta_0 + \gamma_0 d81_{t} + \beta_1 totwrk_{it} + \beta_2 educ_{it} + \beta_3 marr_{it} + \beta_4 yngkid_{it} + \beta_5 gdhlth_{it} + a_i + u_{it},\] em que

  • d81: dummy (0: 1975, 1: 1981)
  • educ: anos de escolaridade
  • marr: dummy que indica estado civil
  • yngkid: dummy que indica a presença de crianças pequenas
  • gdhlth: dummy que indica boa saude
  • totwrk: tempo gasto dormindo (em mim)
  • slpnap: tempo gastor dormindo (em mim)
  • \(a_i\): efeito individual não observado

Análise de dados em painel de dois períodos

Code
dslpnap <- slp75_81$slpnap81 - slp75_81$slpnap75
dtotwrk <- slp75_81$totwrk81 - slp75_81$totwrk75
deduc <- slp75_81$educ81 - slp75_81$educ75
dmarr <- slp75_81$marr81 - slp75_81$marr75
dyngkid <- slp75_81$yngkid81 - slp75_81$yngkid75
dgdhlth <- slp75_81$gdhlth81 - slp75_81$gdhlth75
slp75_81_panel = data.frame(dslpnap, dtotwrk, deduc, dmarr, dyngkid, dgdhlth)

modelo <- lm(dslpnap ~ dtotwrk + deduc + dmarr + dyngkid + dgdhlth, data = slp75_81_panel)
coef(summary(modelo))
                Estimate Std. Error       t value     Pr(>|t|)
(Intercept) -92.63403669  45.865899 -2.0196712092 4.456246e-02
dtotwrk      -0.22666941   0.036054 -6.2869419485 1.580443e-09
deduc        -0.02447166  48.759376 -0.0005018863 9.996000e-01
dmarr       104.21394957  92.855362  1.1223255919 2.628792e-01
dyngkid      94.66539870  87.652521  1.0800077148 2.812554e-01
dgdhlth      87.57784792  76.599133  1.1433268882 2.540762e-01

Análise de dados em painel de dois períodos

Code
glimpse(slp75_81)
Rows: 239
Columns: 20
$ age75    <int> 46, 39, 55, 39, 54, 32, 30, 27, 33, 51, 23, 46, 38, 30, 39, 5…
$ educ75   <int> 16, 16, 15, 16, 17, 16, 16, 16, 17, 14, 16, 17, 12, 10, 12, 1…
$ educ81   <int> 16, 16, 15, 16, 17, 16, 16, 16, 19, 14, 16, 19, 12, 10, 12, 1…
$ gdhlth75 <int> 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ gdhlth81 <int> 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1…
$ male     <int> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1…
$ marr75   <int> 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1…
$ marr81   <int> 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1…
$ slpnap75 <int> 3991, 2243, 3285, 3158, 3743, 3680, 3778, 3390, 3298, 3601, 2…
$ slpnap81 <int> 4695, 2195, 3115, 3387, 3800, 3320, 3067, 3910, 3172, 3634, 3…
$ totwrk75 <int> 2050, 2713, 2493, 2778, 3118, 2348, 1571, 3421, 1853, 0, 2700…
$ totwrk81 <int> 2430, 2610, 0, 1787, 552, 2567, 2272, 400, 2617, 1312, 3292, …
$ yngkid75 <int> 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ yngkid81 <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ ceduc    <int> 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0…
$ cgdhlth  <int> 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0,…
$ cmarr    <int> 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ cslpnap  <int> 704, -48, -170, 229, 57, -360, -711, 520, -126, 33, 651, 64, …
$ ctotwrk  <int> 380, -103, -2493, -991, -2566, 219, 701, -3021, 764, 1312, 59…
$ cyngkid  <int> 0, 0, 0, 0, 0, -1, -1, 0, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0…