Informações Gerais

Última atualização: 18/09/2021

Licença

Licença Creative Commons
Este material do Prof. Adriano M. R. Figueiredo está licenciado com uma Licença Creative Commons - Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional. Isso quer dizer:

  1. Você tem o direito de copiar e redistribuir o material em qualquer suporte ou formato;

  2. Você tem o direito de remixar, transformar e criar a partir deste material;

  3. Você deve dar crédito apropriado, fornecer um link para a licença e indicar se foram feitas alterações. Você pode fazê-lo de qualquer maneira razoável, mas de nenhuma maneira que sugira que o licenciador endossa você ou seu uso;

  4. Você não poderá utilizar o material para fins comerciais;

  5. Se você remixar, transformar, ou criar a partir do material, tem de distribuir as suas contribuições sob a mesma licença que o original. Sendo assim, não poderá aplicar termos jurídicos ou medidas de caráter tecnológico que restrinjam legalmente outros de fazerem algo que a licença permita.

Maiores detalhes a respeito da licença em: https://creativecommons.org/licenses/by-nc-sa/4.0/.

Prefácio

Este é um livro de econometria aplicada baseado no exemplo básico de um livro em R Markdown e bookdown (https://github.com/rstudio/bookdown). É o resultado de um trabalho com alunos de graduação em ciências econômicas e que pode ser adaptado a outras ciências sociais aplicadas, destinado a auxiliar na análise de fenômenos sociais com ênfase em modelos de regressão múltipla.

1 Aspectos gerais

A Econometria é um ramo da ciência econômica que trata da quantificação das relações econômicas. Combina a teoria econômica, a matemática e a estatística para a análise de problemas econômicos como a oferta e demanda de moeda, oferta e demanda de produtos, a função investimento, o emprego e a renda entre outros.

O objetivo básico da econometria é Analisar conjuntos de dados econômicos de modo a poder verificar e dar sustentação às teorias econômicas. Da teoria econômica elaboram-se hipóteses, traduzidas em linguagem pelas ferramentas da matemática [ex.: uma função \(y=f(x_1, x_2, x_3,..., x_n)\)] e faz-se a inferência ou dedução pelo raciocínio, tirando por conclusão com técnicas da estatística.

Tem como instrumento fundamental a análise de regressão, que consiste na obtenção dos parâmetros para uma dada relação existente entre as variáveis dependentes e independentes. Muitas vezes trabalha-se com uma amostra de dados obtidos de uma população. Assim, têm-se alguns conceitos importantes aqui detalhados.

A população, ou também chamada de universo, é o conjunto de indivíduos com características comuns para um determinado fenômeno. O fenômeno é definido pela variável, no presente caso, um fenômeno econômico definido por uma ou mais variáveis econômicas. Estas variáveis são as características medidas, podendo ser quantitativas como a produção e a renda, ou qualitativas como o gênero e a religião (Figura 1.1).

A amostra é um subconjunto da população, uma parte do todo. Normalmente se utiliza a amostra quando existe algum empecilho (financeiro, prático ou outro) para o uso da população. Neste caso, espera-se que a amostra tenha características tais que representem adequadamente o todo, e de preferência que seja ao acaso. Para tanto, utilizam-se técnicas estatísticas para garantir maior representatividade da amostra. Muitas vezes a amostra é estratificada ou separada em estratos, de acordo com a necessidade de se detalhar os diferentes grupos.

População (Universo) e Amostra (parte da população).

Figure 1.1: População (Universo) e Amostra (parte da população).

Fonte: elaboração própria.

As variáveis podem ser chamadas de aleatórias quando seus valores estiverem relacionados com uma probabilidade de ocorrência. A probabilidade é a relação entre os casos favoráveis entre todos os possíveis. Serão variáveis discretas quando não houver probabilidade de ocorrência.

Uma técnica para analisar a relação entre variáveis econômicas é por meio da regressão. Na regressão linear simples (RLS), estima-se a relação existente entre apenas duas (2) variáveis: uma dependente (ou também chamada de endógena ou explicada), Y; e uma independente (ou também chamada de exógena ou explicativa ou explicadora), X. Com o uso da matemática, a relação se expressa como uma função \(f\) qualquer: \(Y = f(X)\).

No caso mais geral, com mais de duas variáveis, tem-se a regressão linear múltipla (RLM), estimando-se a relação \(Y = f(X_1, X_2, ..., X_n)\). Neste caso, portanto, tem-se \(n\) variáveis explicativas \(X\) para uma variável explicada \(Y\), sendo que existem situações em que se pode ter mais de uma variável explicada assim como mais de uma equação dentro do modelo analítico em estudo.

Para melhor compreensão da econometria, convém explicar a estrutura do método de análise empírica conforme a Figura 1.2.

Estrutura da análise empírica método.

Figure 1.2: Estrutura da análise empírica método.

Fonte: elaboração própria.

A estrutura da análise empírica do método é composta inicialmente por um problema – uma questão a ser investigada. Com base na teoria econômica referendada em artigos, livros e observação, elaboram-se hipóteses teóricas (que poderão ou não ser aceitas) compondo o modelo teórico.

A validação e verificação do modelo e confirmação ou não das hipóteses requer o uso de dados e técnicas estatísticas e matemáticas as quais compõem o que aqui chamamos de estimação do modelo, além de critérios econômicos e estatísticos. A validação do modelo também pode ser realizada com economia política e uso de argumentos não quantitativos, normalmente associados aos enfoques da sociologia, do direito, das ciências políticas as quais se relacionarão com a econometria na fase de análise e interpretação dos resultados. Assim, na análise dos resultados pode-se ter um detalhamento da consistência do modelo teórico adotado, refutação ou indicação de modelos teóricos, e principalmente a sugestão de políticas econômicas para tratar o fenômeno econômico estudado.

Portanto, o método implica na origem numa teoria e numa linguagem teórica econômica, passando por uma tradução desta para a linguagem matemática, muitas vezes com o uso de estatística descritiva e emprego de tabelas, gráficos, cartogramas ou outros objetos que melhoram a visualização dos resultados. É importante frisar que a base teórica deve ser a origem da investigação do problema. Os dados serão associados às variáveis detectadas nesta teoria. Ao passar para a linguagem matemática, compõe-se o que chamamos de modelo analítico ou modelo operacional ou ainda modelo econométrico.

O modelo econométrico será uma representação simplificada de um processo real, ou ainda, o conjunto de equações comportamentais derivadas do modelo econômico (VASCONCELOS, 2000: p.14) . É a operacionalização do modelo em linguagem matemática.

O modelo a ser estimado normalmente possui componente aleatório, requerendo a inclusão de um erro que captará os efeitos das variáveis importantes para explicar \(Y\), mas que não estão no modelo. Representa-se então, o efeito das demais variáveis explicativas por um termo aditivo \(u_i\), denominado resíduo ou erro da observação \(i\). O modelo torna-se:

\(Y_i = f (X_i) + u_i,\)

cuja expressão geral matricial é

\(Y = Xβ + ε\)

em que \(\beta\) é uma matriz de parâmetros a serem estimados (incluindo o intercepto e os coeficientes angulares) e ε é um vetor de resíduos ou erros aleatórios. Os parâmetros são constantes às quais cabem papéis particulares em termos de efeitos de uma variável sobre outra.

O formato matricial linear aberto será, para n observações e k variáveis explicativas:

\[\left[ {\begin{array}{*{20}{c}} {{Y_1}}\\ {{Y_2}}\\ \vdots \\ {{Y_n}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} 1&{{X_{11}}}& \cdots &{{X_{1k}}}\\ 1&{{X_{21}}}& \cdots &{{X_{2k}}}\\ \vdots & \vdots & \ddots & \vdots \\ 1&{{X_{n1}}}& \cdots &{{X_{nk}}} \end{array}} \right] \bullet \left[ {\begin{array}{*{20}{c}} {{\beta _0}}\\ {{\beta _1}}\\ \vdots \\ {{\beta _k}} \end{array}} \right] + \left[ {\begin{array}{*{20}{c}} {{\varepsilon _1}}\\ {{\varepsilon _2}}\\ \vdots \\ {{\varepsilon _n}} \end{array}} \right]\]

Portanto, têm-se as matrizes assim nomeadas:

\[Y = {\left[ {\begin{array}{*{20}{c}} {{Y_1}}\\ {{Y_2}}\\ \vdots \\ {{Y_n}} \end{array}} \right]_{n{\rm{ x }}1}};X = {\left[ {\begin{array}{*{20}{c}} 1&{{X_{11}}}& \cdots &{{X_{1k}}}\\ 1&{{X_{21}}}& \cdots &{{X_{2k}}}\\ \vdots & \vdots & \ddots & \vdots \\ 1&{{X_{n1}}}& \cdots &{{X_{nk}}} \end{array}} \right]_{n{\rm{ x }}(k + 1)}};\\ \beta = {\left[ {\begin{array}{*{20}{c}} {{\beta _0}}\\ {{\beta _1}}\\ \vdots \\ {{\beta _k}} \end{array}} \right]_{(k + 1){\rm{ x }}1}};\varepsilon = {\left[ {\begin{array}{*{20}{c}} {{\varepsilon _1}}\\ {{\varepsilon _2}}\\ \vdots \\ {{\varepsilon _n}} \end{array}} \right]_{n{\rm{ x }}1}}\]

Neste cenário, tem-se uma relação entre variáveis \(X\) e a \(Y\), podendo-se ilustrar graficamente como uma dispersão de pontos em dois eixos. A dispersão dos pontos em torno de uma reta de tendência é o resultado de um grande número de pequenas causas, cada uma delas produzindo um desvio positivo (+) ou negativo (–). O desvio será a diferença entre o valor observado e o valor estimado da variável dependente do modelo. Portanto, tem-se \(u_i\) devido a:

Pode-se dizer que \(Y\) nunca pode ser previsto com exatidão, ou seja, sem resíduo. Portanto, para cada valor de \(X\), existe uma distribuição de probabilidade dos valores de \(Y\), com média \(E(Y_i) = Y = \beta X\) e variância constante \(\sigma^2\).

O objetivo da análise de regressão é estimar uma curva através da nuvem de pontos, relacionando uma variável dependente como função de outras variáveis ditas independentes, sendo que a forma funcional deve ser pressuposta pelo pesquisador. Neste caso, a teoria a respeito da relação estudada, a análise da dispersão dos pontos e os estudos anteriores acerca desta relação ajudarão nesta definição.

Por exemplo, pode-se observar a relação entre o PIB dos municípios de Mato Grosso do Sul e e o valor adicionado bruto da agropecuária para o ano de 2014 na Figura 1.3.

Relação entre o PIB dos municípios de Mato Grosso do Sul e o valor adicionado bruto da agropecuária para o ano de 2014 (SCN 2010).

Figure 1.3: Relação entre o PIB dos municípios de Mato Grosso do Sul e o valor adicionado bruto da agropecuária para o ano de 2014 (SCN 2010).

Fonte: Elaboração própria com dados básicos do IBGE.

A mera descrição gráfica destes valores indica uma dispersão mais concentrada entre os valores de PIB inferiores a R$5 bilhões e de agropecuária inferior a R$200 milhões, mesmo havendo valores atípicos maiores que os mencionados, mas para poucos municípios. A mesma observação poderia ser conduzida com cartogramas, ou com tabelas, mas que talvez não permitissem ao leitor a mesma impressão que o gráfico de dispersão.

Uma inspeção visual nos dados, como nos gráficos ou com uso de medidas estatísticas descritivas como média, mediana, moda, máximos e mínimos, é importante para o investigador ter maior conhecimento do comportamento das variáveis, o que permitirá melhor especificação do modelo analítico. A ocorrência de valores atípicos é uma preocupação que o investigador deve tentar “tratar” adequadamente e melhorando as estimações.

As variáveis como mencionadas anteriormente, podem ser quantitativas ou qualitativas. Os dados a ela associados, portanto, poderão ter diferentes características, diferenciando-se entre séries temporais, de seção cruzada, ou combinação entre estes dois tipos.

Podem-se ter dados de uma variável acompanhada no tempo, ou seja, o que se chama de série temporal como no gráfico do índice do PIB nominal de Campo Grande - MS, 2002-2014 (SCN 2010), dados anuais em valores correntes, na Figura 1.4.

Valor do PIB nominal de Campo Grande - MS, 2002-2014 (SCN 2010).

Figure 1.4: Valor do PIB nominal de Campo Grande - MS, 2002-2014 (SCN 2010).

Fonte: Elaboração própria com dados básicos do IBGE.


Outro exemplo é o preço de uma ação ou a renda de um indivíduo pode ser acompanhada semanalmente, ou mensalmente ou anualmente, e neste caso procura-se avaliar as alterações desta no tempo, ou a dinâmica da série. Neste caso, não se trata de uma amostra aleatória, embora o pesquisador deva ter argumentos para a escolha do período analisado.
As investigações das relações entre séries temporais têm ocupado vasto espaço na literatura econométrica recente, preocupando-se principalmente com a possibilidade de relações espúrias, quando a relação decorre do comportamento temporal (tendência e sazonalidade) e não precisamente do efeito entre as variáveis, dando origem aos modelos autoregressivos, médias móveis e outros a serem desenvolvidos mais a frente.

Alguns dados podem estar relacionados ao mesmo período de tempo, para diferentes indivíduos, empresas, regiões. Neste caso, dá-se o nome de séries de seção cruzada. Cada observação é um novo indivíduo, firma ou município com informação em um ponto no tempo. São típicos os casos de dados municipais, como o PIB dos municípios de Mato Grosso do Sul para um dado ano. Nestes dados, em geral se preocupa com a variabilidade entre as unidades da série, ou seja, entre os municípios. Os dados neste caso ficam melhor expressos em cartogramas como na Figura 1.5 para o ICMS de Mato Grosso, ou em gráficos de barras ou colunas como na Figura 1.6 para o PIB municipal de Mato Grosso do Sul, pois não é possível “unir pontos” como num gráfico no tempo.

Arrecadação de ICMS de combustíveis em Mato Grosso em 2008.

Figure 1.5: Arrecadação de ICMS de combustíveis em Mato Grosso em 2008.

Fonte: Elaboração própria com dados básicos da SEPLAN-MT.

PIB dos municípios de Mato Grosso do Sul em 2014 (SCN 2010) em Bilhões de Reais correntes.

Figure 1.6: PIB dos municípios de Mato Grosso do Sul em 2014 (SCN 2010) em Bilhões de Reais correntes.

Fonte: Elaboração própria com dados básicos do IBGE.
Os dados podem ainda relacionar os dois tipos anteriores, ou seja, dados de diferentes unidades ou indivíduos acompanhados para diferentes períodos de tempo, originando o que se chama de combinação de séries temporais e seção cruzada (STSC), ou dados longitudinais. Como exemplo, pode-se ter uma amostra de consumidores de Mato Grosso como no caso da Pesquisa Nacional de Amostragem por Domicílio (PNAD) conduzida pelo IBGE, cujos detalhes do consumo são investigados anualmente. Neste caso, a preocupação é tanto na variabilidade entre indivíduos como na dinâmica ou no comportamento temporal de cada individuo. No caso de se ter os mesmos indivíduos nos mesmos períodos de tempo, tem-se a especificidade de uma combinação STSC chamada painel.

A forma de relacionar as variáveis no modelo econométrico observará aspectos matemáticos e estatísticos, sempre com base na teoria. As previsões a serem obtidas devem ser olhadas com cautela, pois o uso de funções matemáticas ou escolhas de variáveis inadequadas poderá resultar em má especificação do modelo e outros problemas estatísticos que invalidarão as estimativas. Por este motivo, é fundamental ter uma boa revisão de literatura investigando o que outros pesquisadores realizaram, de que modo trabalharam, e quais os principais resultados, tudo isto previamente ao desenvolvimento do modelo econométrico. Este modelo ainda estará sujeito a verificações estatísticas de pressupostos importantes, detalhados no próximo capítulo.

2 Pressuposições do Modelo de Regressão Linear

O modelo clássico de análise de regressão é construído com base numa série de pressuposições referentes ao comportamento da população. Conhecidas essas pressuposições, será possível estimar os parâmetros do modelo, assim como a matriz de variância e covariância dos mesmos e a respectiva matriz para os resíduos. A seguir faz-se a descrição rápida das pressuposições do modelo clássico de regressão.

2.1 Pressuposição 1: especificação

O modelo de regressão é linear nos parâmetros

A relação entre Y e X é linear

Esta pressuposição em princípio implica na consideração de uma reta estimada, ou seja, uma função linear nas variáveis do tipo

\[{Y_i} = {\beta _0} + {\beta _1}{X_{1i}} + {\beta _2}{X_{2i}} + \ldots + {\beta _k}{X_{ki}} + {\varepsilon _i}\]

ou pela forma matricial:

\[ Y = X\beta + \varepsilon , \]
em que \(Y\) é o vetor de variáveis explicadas, \(X\) é uma matriz de variáveis explicativas (incluindo uma coluna de uns para o intercepto) e \(\varepsilon\) é um vetor de resíduos aleatórios. Os resíduos são a parte inexplicada da regressão (das variações em \(Y\)), enquanto a parte de \(X\beta\) é a parte explicada das variações em \(Y\).
Entretanto, deve-se atentar para outros tipos de linearidades implícitas na pressuposição. Têm-se os seguintes tipos de linearidades: linearidade das variáveis explicativas (\(X\)) e linearidade dos parâmetros (\(\beta\)). A não linearidade nas variáveis às vezes pode ser contornada por transformações nas variáveis, mas a não linearidade dos parâmetros é mais complicada e requer outros métodos de estimação não lineares.
É fácil imaginar que o comportamento de um fenômeno econômico não siga a relação retilínea, como por exemplo, as tradicionais relações de oferta e demanda não necessariamente serão retas que se cruzam. É muito mais fácil admitir que o comportamento de variáveis econômicas seja curvilíneo. Na Figura 2.1, dos retornos das ações das Lojas Americanas em função de uma variável \(Z\) qualquer, observa-se que as possibilidades de ajustamentos em reta ou em parábola apresentam diferentes resultados em termos de melhor representar a nuvem de pontos.

Retornos das ações das Lojas Americanas em função de uma variável Z qualquer.

Figure 2.1: Retornos das ações das Lojas Americanas em função de uma variável Z qualquer.

Fonte: Elaboração própria com dados do Yahoo Finance.

Quando as variáveis explicativas são elevadas a alguma potência diferente de um, a função que relaciona o comportamento dessas variáveis com a variável explicada será diferente de uma reta e os estimadores tradicionais de Mínimos Quadrados Ordinários (MQO) não mais serão válidos. O estimador de um parâmetro é uma “regra” ou “expressão” que resultará de uma amostra selecionada. Por exemplo, um estimador simples comumente utilizado é o da média aritmética de uma amostra.

Outro exemplo de modelo linear, agora nos parâmetros, refere-se ao que pode-se chamar de “intrinsecamente lineares”, ou que podem se tornar lineares por transformação das variáveis.

\[ Y = \alpha + \left( \beta_1 * X_1 \right) + \left( \beta_2 * X_2^2 \right) \]

\[{Y_i} = {\beta _0} + {\beta _1}{X_{1i}} + {\beta _2}{X_{2i}^2} + \ldots + {\beta _k}{X_{ki}} + {\varepsilon _i}\]

Neste caso, a variável \(X_{2i}\) está ao quadrado, e a equação é dita linear nos parâmetros mas não linear nas variáveis. Ainda é satisfatória nesse caso, se houver uma transformação da variável não-linear (\(X_{2i}\)).

O caso mais comum na literatura econômica é o de funções do tipo Cobb-Douglas, ou seja,

\[Y = AX_1^{\beta 1}X_2^{\beta 2}X_3^{\beta 3}{e^\varepsilon }\]

em que os parâmetros podem assumir valores diferentes de um e, ainda, tem-se a multiplicação de variáveis explicativas. A função acima pode ser linearizada transformando-se as variáveis em logaritmos, obtendo:

\[\ln Y = \ln A + {\beta _1}\ln {X_1} + {\beta _2}\ln {X_2} + {\beta _3}\ln {X_3} + \varepsilon \]

ou, simbolizando o \(ln\) por \(*\):

\[{Y^*} = {\beta _0} + {\beta _1}X_1^* + {\beta _2}X_2^* + {\beta _3}X_3^* + \varepsilon \]

A função linearizada pode ser estimada da forma tradicional lembrando que os parâmetros estimados serão agora da função transformada, que no caso log-log (Cobb-Douglas), equivalem às elasticidades. A função transformada pode ser vista como linear nos parâmetros (os parâmetros \(\beta\) são todos em primeira potência) e nas variáveis transformadas (\(X^*=\ln X\)).
Outros modelos não podem ser transformados e são os chamados intrinsecamente não lineares. Por exemplo, é possível perceber que a função abaixo não pode ser linearizada:

\[Y = A{\beta _1} + {\beta _2}{e^{{\beta _3}{X_1}}} + {\beta _4}{e^{{\beta _5}{X_2}}} + {e^\varepsilon }\]

Esses modelos devem ser estimados por Mínimos Quadrados não lineares ou Máxima Verossimilhança não linear. Algumas formas funcionais utilizadas em economia da produção podem ser:

  • Cobb-Douglas logaritmizada: \[\log y = {a_0} + \sum\limits_{i = 1}^n {{a_i}\log {x_i}} \]
  • Elasticidade Constante de Substituição ou CES: \[{y^\rho } = {a_0} + \sum\limits_{i = 1}^n {{a_i}x_i^\rho } \]
  • Generalizada Leontief: \[y = {a_0} + \sum\limits_{i = 1}^n {{a_i}\sqrt {{x_i}} } + \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {{a_{ij}}\sqrt {{x_i}{x_j}} } } \]
  • Transcendental Logaritmica ou Translog: \[\log y = {a_0} + \sum\limits_{i = 1}^n {{a_i}\log {x_i}} + \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {{a_{ij}}\log {x_i}\log {x_j}} } \]
  • Quadrática: \[y = {a_0} + \sum\limits_{i = 1}^n {{a_i}{x_i}} + \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {{a_{ij}}{x_i}{x_j}} } \]

A utilização de uma forma mais complexa em detrimento de uma mais simples dependerá da disposição dos dados e do rigor científico desejado. A função Cobb-Douglas de modo geral oferece um ajustamento satisfatório e é fácil de executar. As funções elasticidade de substituição constante (CES), Generalizada Leontief, Transcendental Logarítmica e Quadrática são generalizações da função Cobb-Douglas para contornar pressuposições econômicas de substitutibilidade dos fatores e produtos ou ainda de concorrência perfeita, entre outras situações.

Juntamente ao problema da forma funcional (linearidade dos parâmetros e variáveis), quando se especifica um modelo, automaticamente estão sendo cometidos outros dois tipos de erros que poderão ou não comprometer a análise. Um está associado à “omissão de uma variável relevante” e outro associado à “inclusão de variável irrelevante”.
- Omissão de variável relevante

Imagine que a revisão de literatura, revisão teórica, indique que a quantidade demandada (\(Q\)) de um produto seja função do preço do produto (\(P\)) e da renda (\(R\)), e que o comportamento da demanda do produto analisado na realidade está em conformidade com a teoria. O modelo “correto” seria o modelo A:

\[(A) \space Q_t = \beta_0 + \beta_1.P_t + \beta_2.R_t + \varepsilon_t^* \]

em que os \(\beta\) são parâmetros estimados e \(\epsilon\) é o resíduo aleatório.

Imagine agora que, por algum motivo, estimou-se a demanda em função apenas do preço do produto (modelo B), fazendo:

\[(B) \space Q_t = \alpha_0 + \alpha_1.P_t + \varepsilon_t. \]

em que \(\alpha\) são parâmetros e as demais variáveis como anteriormente citadas.

A questão é: quais as consequências sobre os estimadores de MQO (ou sobre os \(\beta\) estimados)? Qual o efeito sobre \(\alpha_0\) e \(\alpha_1\) em razão da exclusão(ou omissão) de \(R\) do modelo?

Se \(P_t\) for altamente correlacionado com \(R_t\), a retirada de \(R_t\) trará um alto viés (alta tendenciosidade) e os parâmetros estimados serão muito diferentes do valor esperado:

\[\beta_{estimado} ≠ E(\beta), \]

ou seja, os parâmetros estimados serão inconsistentes e no limite \(E(\beta) ≠ \beta\). Os testes de hipóteses não serão válidos e as estimativas de variâncias também serão tendenciosas.

  • Inclusão de variável irrelevante

Imagine agora a situação inversa: o modelo estimado contempla mais variáveis explicativas do que as que deveriam estar no modelo “correto”. Imagine que o modelo deveria ter apenas \(P\) (modelo A) e que foi estimado com \(P\) e \(Z\) (modelo B), sendo \(Z\) uma variável irrelevante no modelo.

\[(A) \space Q_t = \beta_0 + \beta_1.P_t + \varepsilon_t, \] - modelo correto

\[(B) \space Q_t = \alpha_0 + \alpha_1.P_t + \alpha_2.Z_t + \varepsilon_t^*. \] - modelo estimado

e que Z não tem relevância teórica.

A questão é: quais as consequências de \(\alpha\), em razão da inclusão de \(Z_t\), sobre \(\beta\)?

As consequências da inclusão de uma variável irrelevante serão menos problemáticas que no caso da omissão de uma variável relevante. Primeiro, a presença das variáveis “irrelevantes” não viesa as outras estimativas. Segundo, aumentam-se a variância dos parâmetros e o desvio-padrão. Tende, portanto, a fazer com que o parâmetro\(\alpha\)seja não significativo, mas aumenta o coeficiente de determinação (a proporção explicada da variância total - medida usualmente chamada de \(R^2\)).

2.2 Pressuposição 2: média residual

O resíduo aleatório tem média zero

Significa que o resíduo (\(\varepsilon_i\)) tem uma distribuição de probabilidade centralizada em zero (com média zero). O resíduo é o efeito das variáveis que não consigo explicar no modelo. A média pode ser considerada como o valor esperado do erro, ou seja,

\(E(\varepsilon_i) = 0\), para \(i = 1,2,...,n\).

Ou na forma matricial,
\[E(\varepsilon) = 0. \] Dado que \(E(\epsilon) = 0\), então
\[E(Y) = E[ X\beta + \varepsilon] = E[X\beta] +E[\varepsilon] = E[X\beta] + 0 \]

Portanto, \(E(Y) = X\beta\) e o modelo fornece soluções adequadas estatisticamente. Essa pressuposição é importante para ter confiança na estimação por mínimos quadrados ordinários (\(MQO\)) em que (veremos mais adiante) o estimador dos parâmetros será \(\hat\beta_{MQO} = (X^\prime X)^{-1} X^\prime Y\). Caso os erros não tenham média zero, o estimador \(\hat\beta_{MQO}\) será tendencioso. Mais a frente serão discutidas as propriedades dos estimadores de \(MQO\).

Observe na Figura 2.1 (anteriormente mostrada) que traz as taxas de retorno observadas e estimadas para a ação das Lojas Americanas S.A. (LAME4), e verifique que existem momentos em que os pontos vermelhos (com marcador quadrado) estão acima que os verdes (com marcador de x) e em outros momentos estão abaixo. O gráfico dos resíduos (neste gráfico representados por \(u_i\)) obtidos fazendo resíduo igual a diferença entre o retorno observado e o estimado, têm-se valores positivos e negativos. A pressuposição prevê que estes, na média, sejam nulos. Ainda, no gráfico de dispersão dos retornos mensais dos ativos das Lojas Americanas (LAME4) e Lojas Renner (LREN3), Jan/2005 a Mar/2012 (aqui denominados RLAME x RREN, Figura 2.2), pode-se observar que existem resíduos \(u_i\) positivos e negativos e que a reta de regressão estimada como a reta de tendência passa aproximadamente no meio da nuvem de pontos.

Gráfico de dispersão dos retornos mensais dos ativos das Lojas Americanas (LAME4) e Lojas Renner (LREN3), Jan/2005 a Mar/2012.

Figure 2.2: Gráfico de dispersão dos retornos mensais dos ativos das Lojas Americanas (LAME4) e Lojas Renner (LREN3), Jan/2005 a Mar/2012.

Fonte: Elaboração própria com dados do Yahoo Finance.


Outra situação pode ser observada na Figura 2.3, com os resultados de uma estimação dos retornos mensais do ativo Lojas Americanas (LAME4) contra os do ativo Lojas Renner (LREN3) e os do índice da Bolsa de Valores e Mercadorias e Futuros de São Paulo (BMF-BOVESPA), Jan/2005 a Mar/2012. São mostrados os resíduos (linha azul), resultado da diferença entre os valores observados (linha vermelha) e os valores estimados (linha verde).

Representação dos resultados de uma estimação dos retornos mensais do ativo Lojas Americanas (LAME4) contra os do ativo Lojas Renner (LREN3) e os do índice da Bolsa de Valores e Mercadorias e Futuros de São Paulo (B3), Jan/2005 a Mar/2012.

Figure 2.3: Representação dos resultados de uma estimação dos retornos mensais do ativo Lojas Americanas (LAME4) contra os do ativo Lojas Renner (LREN3) e os do índice da Bolsa de Valores e Mercadorias e Futuros de São Paulo (B3), Jan/2005 a Mar/2012.

Fonte: Elaboração própria com dados do Yahoo Finance.

Mais a frente traremos o capítulo específico onde faremos a checagem dessa pressuposição e como tratar o modelo em caso de violação do pressuposto.

2.3 Pressuposição 3: homocedasticidade

O resíduo aleatório tem variância constante (presença de homocedasticidade)

A variância é calculada com base no valor esperado do quadrado da diferença entre a média da variável e o valor esperado da média desta variável. Ou seja, a definição estatística para um resíduo \(\varepsilon_i\) é

\[V(\varepsilon_i) = E[\varepsilon_i – E(\varepsilon_i)]^2\],

\[V(\varepsilon_i) = E(\varepsilon_i^2) = \sigma^2\] (populacional) para todo \(i\),

ou seja, presença de Homocedasticidade nos resíduos. A presença da homocedasticidade implica que a variância para todos os resíduos é a mesma.

O caso contrário será:

\[V(e_i) = E(e_i^2) = \sigma^2_i \] - presença de Heterocedasticidade, ou uma variância para cada \(i\).

O problema de heterocedasticidade é típico de dados de seção cruzada. Pode significar, por exemplo, uma heterogeneidade da amostra. A dispersão dos valores para cada observação é diferente entre as observações. A amostra vem de uma população onde os erros não são homogêneos. Na Figura 2.4, observa-se que a nuvem de pontos não tem uma dispersão constante em torno da reta estimada, o que caracteriza a variabilidade distinta ao longo da amostra de \(X\). Com o aumento de \(X\), a variância dos resíduos (a dispersão em torno da reta estimada) reduz no valores menores e volta a aumentar para os vaores mais elevados de \(X\), caracterizando a presença de heterocedasticidade.

Representação da dispersão dos pontos em torno de uma reta estimada – ilustração da heterocedasticidade.

Figure 2.4: Representação da dispersão dos pontos em torno de uma reta estimada – ilustração da heterocedasticidade.

Fonte: Elaboração própria com dados aleatórios.


Mais a frente, em capítulo próprio, serão discutidas as formas de checar a presença de homocedasticidade e a correção no caso de violação desse pressuposto.

2.4 Pressuposição 4: autocorrelação

Os resíduos aleatórios são independentes (ou não autocorrelacionados)

Também chamada de ausência de correlação serial, neste caso pressupõe-se que os resíduos \(\varepsilon_i\) de uma observação \(i\) não afetam outros resíduos. Ou seja, matematicamente, isso equivale a

\[ COV\left( {{\varepsilon_i},{\varepsilon_j}} \right){\rm{ }} = {\rm{ }}E{\rm{ }}\left\{ {{\rm{ }}\left[ {{\varepsilon_i}-{\rm{ }}E\left( {{\varepsilon_i}} \right)} \right]{\rm{ }}\left[ {{\varepsilon_j}-{\rm{ }}E\left( {{\varepsilon_j}} \right)} \right]{\rm{ }}} \right\}\]

\[E\left( {{\varepsilon_i},{\rm{ }}{\varepsilon_j}} \right){\rm{ }} = {\rm{ }}0,\;\;{\rm{ }}i \ne j.\]

Esta pressuposição é denominada “ausência de autocorrelação”. A violação desta pressuposição é um problema típico de séries temporais. A correlação é, de modo simplificado, “a relação entre duas séries”. Pode ser positiva (diretamentte proporcional) ou negativa (inversa), ou mesmo nula. O valor da correlação varia então entre -1 e +1. Diz-se “auto” correlação porque estamos relacionando a série dos resíduos com ela mesma, para observações distintas. No caso de séries temporais, serão resíduos em um período \(t\) relacionados com resíduos em alguma defasagem temporal (valor passado) ou \(t-p\) em que \(p\) seria o número de períodos defasados. Ou seja, existe alguma dependência temporal entre o valor presente e valores passados, gerando um padrão inexplicado na variável explicada \(Y\) e que aparecerá nos resíduos.

Quando se trabalha com ajustamentos de séries temporais, essa pressuposição em geral não é obedecida, visto que nas séries temporais como, por exemplo, as séries de preços, de salários e de produção têm no seu comportamento o reflexo de movimentos cíclicos e/ou sazonais. Observa-se na Figura 2.5 que existem relações entre os resíduos das observações à medida que X aumenta – correlação negativa (caso a) e positiva (caso b).

Representações da dispersão dos pontos em torno de uma reta estimada – ilustração da correlação serial.

Figure 2.5: Representações da dispersão dos pontos em torno de uma reta estimada – ilustração da correlação serial.

Fonte: Figura 3.3 de Pindyck e Rubinfeld (2004).

Algumas causas da autocorrelação nos resíduos estão relacionadas a variáveis não especificadas no modelo, forma funcional inadequada e inércia temporal no fenômeno.

A principal consequência da violação desta pressuposição é a ineficiência dos estimadores de \(MQO\), mas continuam não tendenciosos. Nesta situação, da mesma forma que para a heterocedasticidade, é melhor utilizar o método de Mínimos Quadrados Generalizados (\(MQG\)).

Uma forma usual é olhar os gráficos de dispersão entre os resíduos da regressão. Padrões geométricos podem indicar o tipo de correlação, como na Figura 2.6.

Padrões de correlação entre os distúrbios. (a) correlação serial positiva; (b) correlação serial negativa; e (c) correlação nula.

Figure 2.6: Padrões de correlação entre os distúrbios. (a) correlação serial positiva; (b) correlação serial negativa; e (c) correlação nula.

Fonte: Adaptado da Figura 3.6 de Gujarati (2006).

2.4.1 Olhando a Variância e Covariância dos resíduos

A análise da Matriz de Variância e Covariância dos resíduos, doravante chamada de \(Var-cov(\varepsilon\varepsilon^\prime)\), permite interpretar as pressuposições de presença de homocedasticidade dos resíduos e presença da não autocorrelação dos resíduos numa mesma matriz.

Seja o vetor de resíduos \(\epsilon\) do tipo:

\[\varepsilon = {\left[ {\begin{array}{*{20}{c}} {{\varepsilon _1}}\\ {{\varepsilon _2}}\\ \vdots \\ {{\varepsilon _n}} \end{array}} \right]_{n{\rm{ x }}1}}\]

Então, sua transposta será: \[\varepsilon ' = {\left[ {\begin{array}{*{20}{c}}{{\varepsilon _1}}&{{\varepsilon _2}}& \cdots &{{\varepsilon _n}}\end{array}} \right]_{1{\rm{ x }}n}}\]. Assim, a matriz \(Var-cov(\varepsilon\varepsilon^\prime)\) será:

\[\begin{array}{l} Var - Cov\left( {\varepsilon \varepsilon '} \right) = E\left( {\varepsilon \varepsilon '} \right) = E\left[ {\begin{array}{*{20}{c}} {\varepsilon _{_1}^2}&{{\varepsilon _1}{\varepsilon _2}}& \cdots &{{\varepsilon _1}{\varepsilon _n}}\\ {{\varepsilon _2}{\varepsilon _1}}&{\varepsilon _{_2}^2}& \cdots &{{\varepsilon _2}{\varepsilon _n}}\\ \vdots & \vdots & \ddots & \vdots \\ {{\varepsilon _n}{\varepsilon _1}}&{{\varepsilon _n}{\varepsilon _2}}& \cdots &{\varepsilon _{_n}^2} \end{array}} \right]\\ E\left( {\varepsilon \varepsilon '} \right) = {\sigma ^2}I = E\left[ {\begin{array}{*{20}{c}} {{\sigma ^2}}&0& \cdots &0\\ 0&{{\sigma ^2}}& \cdots &0\\ \vdots & \vdots & \ddots & \vdots \\ 0&0& \cdots &{{\sigma ^2}} \end{array}} \right] \end{array}\]

Assim, ao escrever que \[Var - Cov\left( {\varepsilon \varepsilon '} \right) = \sigma^2I\], ao mesmo tempo se diz que as variâncias são homocedásticas iguais a \(\sigma^2\) (diagonal principal tem todos os valores iguais a \(\sigma^2\), \(i=j\)) e que as autocorrelações entre resíduos de observações distintas são nulas (valores nulos fora da diagonal principal, \(i≠j\)).

2.5 Pressuposição 5: exogeneidade

As variáveis explicativas são não aleatórias (são fixas)

Também pode ser expressa como as variáveis \(X\) e os resíduos são não correlacionados, ou ausência de correlação entre \(X\) e \(\varepsilon\). Neste caso, pressupõem-se fixos os valores da variável explicativa e observa-se o que ocorre com a variável dependente. Se o \(X\) é aleatório, mas independente do resíduo, pode-se mostrar que os parâmetros estimados serão não tendenciosos. Assim, a confirmação desta pressuposição significa dizer que as variáveis explicativas são distribuídas independentemente dos resíduos.

Em linguagem matemática, pode-se dizer que a covariância entre os resíduos \(\varepsilon_i\) e \(X_i\) é igual a zero (\(cov(\varepsilon_i,X_i)=0\)). Formalmente,

\(cov(\varepsilon_i,X_i)=E[\varepsilon_i-E(\varepsilon_i )][X_i-E(X_i )]\);

\(cov(\varepsilon_i,X_i)=E[\varepsilon_i (X_i-E(X_i ))]\) pois \(E(\varepsilon_i )=0\);

\(cov(\varepsilon_i,X_i)=E(\varepsilon_i X_i )-E(X_i )E(\varepsilon_i )\) pois \(E(X_i )\) é não estocástica;

\(cov(\varepsilon_i,X_i)=E(\varepsilon_i X_i )\) pois \(E(\varepsilon_i )=0\);

\(cov(\varepsilon_i,X_i)=0\) por pressuposição.

Entretanto, se as variáveis explicativas e os termos aleatórios forem correlacionados, haverá inconsistência dos estimadores de mínimos quadrados ordinários. Deve-se utilizar o estimador de variáveis instrumentais. O método de Variáveis instrumentais (VI) prevê que \(\beta_{VI} = (Z^\prime X)^{-1} Z^\prime Y\), e \(Z\) é uma matriz de instrumentos independentes dos resíduos aleatórios.

2.6 Pressuposição 6: normalidade

Os resíduos têm distribuição normal, com média zero e variância constante:

As vezes expressa simplesmente por os resíduos têm distribuição normal, usualmente se especifica essa pressuposição da forma:

\(\varepsilon_i ∼ N (0, \sigma^2)\), para toda observação \(i = 1, 2, ..., n\).

As consequências associadas à não normalidade dos resíduos são parâmetros estimados não normais e não será possível fazer os testes de hipóteses com distribuições baseadas na normal, como os usuais testes \(t\) e \(F\) para avaliar a qualidade dos ajustamentos, e para construir intervalos de confiança para os parâmetros conforme exposto ao longo do capítulo de regressão. Em termos gráficos, pode-se plotar o histograma da série de resíduos e comparar com a distribuição normal teórica como na Figura 2.7.

Histograma dos resíduos e a curva normal.

Figure 2.7: Histograma dos resíduos e a curva normal.

Fonte: Elaboração própria.

Os estimadores continuam sendo os Melhores Estimadores Lineares Não-Tendenciosos (\(MELNT\)), como será melhor exemplificado na seção das propriedades dos estimadores de \(MQO\).

2.7 Pressuposição 7: multicolinearidade

Ausência de multicolinearidade prejudicial entre as variáveis explicativas

Neste caso, pode-se interpretar como ausência de multicolinearidade perfeita assim como multicolinearidade expressiva entre as variáveis explicativas (\(X\)), a ponto de prejudicar a devida interpretação da significância dos parâmetros, como explicado a seguir.

A multicolinearidade é um problema relacionado com fortes relações entre as variáveis explicativas (\(X\)) no modelo de regressão. O que espera-se é que a matriz \(X\) explique \(Y\), mas não que \(X_k\) esteja relacionado com outro(s) \(X_l\) (\(k\ne l\)). Considere a matriz de variáveis explicativas como composta por colunas das variáveis \(X_1, X_2, ... , X_k\) e ainda uma coluna de uns (1) para incluir o intercepto.

A pressuposição prevê a inexistência de qualquer relação linear entre as variáveis explicativas \(X\), como por exemplo,

\[X_1 = 2.X_2 \\ X_1 + 3.X_2 = X_5\]

No método de mínimos quadrados ordinários, a existência de uma relação linear entre colunas de \(X\) representa uma redução no posto da matriz (\(X\)) e o determinante de \(X^\prime X\) será próximo de zero. No caso de uma relação linear exata, haverá uma singularidade perfeita na matriz (\(X^\prime X\)) e seu determinante será zero. Como o método de mínimos quadrados ordinários prevê a inversão da matriz \(X^\prime X\), o determinante próximo de zero fará com que os parâmetros sejam indeterminados. A matriz \((X^\prime X)^{-1}\) não existirá e não será possível estimar o modelo. No caso exato (multicolinearidade perfeita), o software interrompe e acusará erro. Em muitos casos aplicados, o que se observa são valores de determinantes muito próximo de zeros (por Ex.: 1e-5 = 0,00001), e muitas vezes o sistema não interrompe, requerendo a observação das estatísticas de teste.

O problema da correlação entre as variáveis explicativas pode ser visto da seguinte maneira:

  1. ausência de correlação ou ausência de multicolinearidade: a regressão múltipla dá o mesmo resultado que as regressões simples quando as correlações parciais entre as variáveis explicativas forem nulas;

  2. correlação perfeita ou multicolinearidade perfeita: a relação linear perfeita entre os X´s causa a indeterminação de \(\hat \beta = (X^\prime X)^{-1}X^\prime Y\) pois \((X^\prime X)^{-1}\) é singular; e,

  3. alto grau de correlação entre as colunas de \(X\) ou multicolinearidade imperfeita: multicolinearidade que prejudica a significância dos parâmetros estimados..

O enfoque é diferente das outras pressuposições: trata-se de um problema da amostra. Enquanto as outras pressuposições se referiam mais ao resíduo e à população, esta se refere mais à amostra, ao número de variáveis relativo ao tamanho da amostra. Por isto, muitas vezes se fala do problema como micronumerosidade, ou que o número de observações é pequeno relativamente ao número de variáveis. Não se trata, portanto, de testar a pressuposição, mas sim de pensar como lidar com o problema.

2.7.1 Consequências da multicolinearidade:

Teóricas:

Consequências sobre as propriedades dos estimadores de \(MQO\); a multicolinearidade não afeta em nada as propriedades dos estimadores de \(MQO\), que continuam os melhores estimadores lineares não tendenciosos (\(MELNT\)); conforme Gujarati e Porter (2011, p.335), haverá maior dificuldade na estimação dos parâmetros com erros-padrões muito pequenos, mas as propriedades de \(MELNT\) permanecem.

Práticas:

  1. Aumenta as variâncias dos parâmetros estimados:
  • aumenta \({\rm{Var}}(\hat \beta ) = {s^2}{(X^\prime X)^{ - 1}}\)

  • \({({X^\prime }X)^{ - 1}} = (1/|({X^\prime }X)|).{\rm{Adj}}({X^\prime }X)\)

  • como \(|(X^\prime X)| → 0\) então \((X^\prime X)^{-1}→ \infty\) e \(\rm{Var}(\hat \beta) → \infty\);

  1. Aumenta erro-padrão;

  2. Reduz \(t\), logo, induz à não significância, ou seja, estarei aceitando o fato de que a variável não é importante no modelo em virtude da multicolinearidade, mas que na realidade a variável poderá ser importante ao corrigir o modelo; e,

  3. Estimativas muito sensíveis: tirando uma ou duas observações, as estimativas alteram muito - é melhor ter um modelo onde as alterações não alteram muito as estimativas, uma certa estabilidade do modelo em termos de magnitudes e sinais.

2.8 Resumo das Pressuposições:

Apresentadas as pressuposições, o Quadro 2.1 tem um resumo com a expressão matemática em forma escalar e matricial, assim como o problema que se tem caso as pressuposições sejam violadas ou não atendidas. Em geral, pode-se dizer que se testará o modelo e, em caso de violação, se “tratará” ou corrigirá adequadamente.

Quadro 2.1 Pressuposições do Modelo de Regressão Linear Clássico Normal. Fonte: Elaboração própria. Notas:\(^*\) Em que \(Y = [Y_i]\) é um vetor (n x 1) das observações da variável dependente; \(X = [X_{ij}]\) é uma matriz (n x p) das observações das variáveis independentes; \(\varepsilon = [\varepsilon_i]\) é um vetor (nx1) dos resíduos aleatórios; \(\beta = [\beta_j]\), \(j = 0, 1, 2, ..., k\) é um vetor (p x 1) de parâmetros a serem estimados; \(\sigma^2\) é a variância do erro, também a ser estimada; \(I\) é uma matriz identidade de ordem (m x n); \(k\) é o número de variáveis independentes; \(p= (k + 1)\) é o número de parâmetros; \(n\) é o número de observações; \(E\) significa valor esperado ou esperança matemática.

\(^+\) PROBLEMA (o que acontece se as pressuposições não forem atendidas).

3 Regressão Linear Múltipla: Estimação

A regressão linear é utilizada para estimar o valor de uma variável de resposta \(Y\) como função de preditores \(X\). O objetivo é encontrar uma relação matemática linear que permitirá calcular a variável \(Y\) para valores conhecidos de \(X\).

3.1 Introdução

A estimação dos parâmetros do modelo linear pressupõe a satisfação aos pressupostos básicos anteriormente mencionados. O princípio que norteia os cálculos é obter valores de parâmetros que minimizem a Soma dos Quadrados dos Resíduos - SQRes, ou comumente chamado de Mínimos Quadrados Ordinários - MQO.

Ou seja, para o modelo \[Y=X\beta+\varepsilon\]

em que, \(\beta\) é um vetor de parâmetros com um \(\beta\) associado a cada variável da matriz de variáveis explicativas \(X\). O conjunto dos parâmetros \(\beta\) será o conjunto de coeficientes da regressão. O \(\varepsilon\) é o termo de resíduos (muitas vezes chamado de termo de erros), ou a parte inexplicada de \(Y\) no modelo de regressão.
A estimação requer a minimização conforme a seguir:

  • Forma algébrica: \[ \min \left( SQRes = \sum {\varepsilon _i^2} = \sum {\left( {Y_i-\beta _0 -\beta _1 X_{1i}-\beta _2 X_{2i}-...-\beta _k X_{ki}} \right)}^2 \right) \]

ou

  • Forma matricial: \[ \min \left( SQRes = {\varepsilon}' \varepsilon \right) \]

O problema matemático é de otimizar, ou seja, minimizar um produto de um vetor linha por um vetor coluna. Portanto, deriva-se e iguala a zero obtendo a solução para o vetor de parâmetros. Segue abaixo:

\[\varepsilon '\varepsilon = {\left( {Y - X\hat \beta } \right)^\prime }\left( {Y - X\hat \beta } \right)\]

\[\varepsilon '\varepsilon = Y'Y - Y'X\hat \beta - \hat \beta 'X'Y + \hat \beta 'X'X\hat \beta \]

\[\frac{{\partial (\varepsilon '\varepsilon )}}{{\partial \hat \beta }} = - 2X'Y + 2X'X\hat \beta = 0\]

A partir dessa solução tem-se o sistema de equações normais dos mínimos quadrados e o estimador dos parâmetros (\(\hat\beta\)) por MQO. O estimador é válido para uma matriz não multicolinear de \(X\).

\[X'X\hat \beta = X'Y\]

\[\hat \beta = {\left( {X'X} \right)^{ - 1}}X'Y\]

O vetor de \(\hat\beta\) terá dimensão \((k+1)\) x \(1\) sendo \(k\) o número de variáveis explicativas. Assim, com as matrizes \(X\) e \(Y\) obtêm-se os parâmetros estimados. O estimador da variância dos resíduos será \(s^2\), para os \((n-p)\) graus de liberdade (simbolizado por \(GL\), igual ao número de observações, \(n\), menos o número de parâmetros, \(p\)):

\[ s^2 = \frac{e'e}{n - p} = \frac{SQRes}{n - p} = \frac{SQRes}{G.L.} \]

A matriz de variância-covariância dos parâmetros será:

\[\widehat {Var - Cov\left( {\hat \beta } \right)} = E\left[ {\left( {\hat \beta - \beta } \right){{\left( {\hat \beta - \beta } \right)}^\prime }} \right]\]

mas, se

\[\hat \beta = {\left( {X'X} \right)^{ - 1}}X'Y\]

então,

\[ \hat \beta = {\left( {X'X} \right)^{ - 1}}X'\left( {X\beta + \varepsilon } \right) = {\left( {X'X} \right)^{ - 1}}X'X\beta + {\left( {X'X} \right)^{ - 1}}X'\varepsilon \]

\[ \hat \beta = I.\beta + {\left( {X'X} \right)^{ - 1}}X'\varepsilon \]

\[ \hat \beta - \beta = {\left( {X'X} \right)^{ - 1}}X'\varepsilon \]

\[ Var - Cov(\hat \beta ) = E\left[ {\left( {{{\left( {X'X} \right)}^{ - 1}}X'\varepsilon } \right){{\left( {{{\left( {X'X} \right)}^{ - 1}}X'\varepsilon } \right)}^\prime }} \right]\]

\[Var - Cov(\hat \beta ) = E\left[ {{{\left( {X'X} \right)}^{ - 1}}X'\varepsilon \varepsilon 'X{{\left( {X'X} \right)}^{ - 1}}} \right]\]

Mas como as variáveis \(X\) são fixas, independentes dos resíduos (pressuposição clássica do modelo de regressão linear), o valor esperado se reduz a:

\[ Var - Cov(\hat \beta ) = {\left( {X'X} \right)^{ - 1}}X'E\left[ {\varepsilon \varepsilon '} \right]X{\left( {X'X} \right)^{ - 1}}\]

\[ Var - Cov(\hat \beta ) = {\left( {X'X} \right)^{ - 1}}X'{\sigma ^2}IX{\left( {X'X} \right)^{ - 1}}\]

Ou seja,

\[ Var - Cov(\hat \beta ) = {\sigma ^2}{\left( {X'X} \right)^{ - 1}}X'X{\left( {X'X} \right)^{ - 1}}\]

\[ Var - Cov(\hat \beta ) = {\sigma ^2}I{\left( {X'X} \right)^{ - 1}}\]

\[ Var - Cov(\hat \beta ) = {\sigma ^2}{\left( {X'X} \right)^{ - 1}}\]

ou

\[ Var - Cov(\hat \beta ) = {s^2}{\left( {X'X} \right)^{ - 1}}\]

Desta forma, têm-se as equações essenciais para a estimação. Segue a Figura 3.1 com um resumo dos estimadores de MQO.

Figura 3.1 Estimadores de Mínimos Quadrados Ordinários.

Fonte: Elaboração própria.

O valor dos erros padrões dos parâmetros será obtido a partir da raiz da variância dos parâmetros, ou seja, tirando-se a raiz da diagonal principal da \(Var-Cov(\hat \beta )\). Os parâmetros devem ter análise de significância, por meio de um teste de hipótese do tipo t:

\[ H_0:{\beta _j} = 0 \] \[ H_1:{\beta _j} \ne 0 (bilateral) \]

\[ t_{calculado} = \frac{{{{\hat \beta }_j}}}{{{s_{{{\hat \beta }_j}}}}}\sim\mathop {{t_{n - p}}}\limits_{G.L.} \]

O teste t bicaudal prevê a área de rejeição de \({H_0}\) para valores em módulo maiores que \(t_c = t_{n-p}\) para o nível de significância escolhido, que geralmente é 1%, 5% ou 10% (Figura 3.2).

Figura 3.2 Ilustração da área de rejeição do teste de hipótese bicaudal da distribuição t-Student.

Fonte: Elaboração própria.

Na Figura 3.3, têm-se as áreas para a distribuição de t para um exemplo genérico com 20 graus de liberdade e três graus de confiança: 90% (área vermelha), 95% (área vermelha mais azul), e 99% (áreas vermelha mais azul mais verde).

As áreas coloridas são de não-rejeição de \({H_0}:{\beta} = 0\), ou seja, nos bordos se têm as áreas de rejeição e no centro as áreas de não-rejeição. O que os softwares reportam são as os valores das probabilidades para valores maiores que os limites críticos, ou seja, os softwares como R, Stata e Eviews reportam os valores das probabilidades de +infinito (\(+\infty\)) ou –infinito (\(-\infty\)) até os limites das áreas pintadas. Os limites para 90% (área vermelha), 95%(área vermelha mais azul), e 99% (áreas vermelha mais azul mais verde), para por exemplo, 20 graus de liberdade serão, respectivamente: \({\pm}\) 1,724718;\({\pm}\) 2,085963; \({\pm}\) 2,845340.

Figura 3.3 Áreas para a distribuição de t para um exemplo genérico com 20 graus de liberdade e três graus de confiança: 90%, 95% e 99%.

Fonte: Elaboração própria.

Para maiores graus de liberdade, a distribuição de \(t\) converge para a distribuição normal, como pode ser observado na Figura 3.4. A distribuição teórica para df = 30 já é praticamente sobreposta à normal. Por esse motivo muitos livros falam de ter mais de 30 observações para uma regressão confiável, mas isto dependerá do número de parâmetros a estimar.

x <- seq(-4, 4, length=100)
hx <- dnorm(x)
degf <- c(1, 3, 8, 30)
colors <- c("red", "blue", "darkgreen", "gold", "black")
labels <- c("df=1", "df=3", "df=8", "df=30", "normal")
plot(x, hx, type="l", lty=2, xlab="valor da estatística",
     ylab="Densidade", main="Comparação de Distribuições t")
for (i in 1:4){
  lines(x, dt(x,degf[i]), lwd=2, col=colors[i])
}
legend("topright", inset=.05, title="Distribuições",
       labels, lwd=2, lty=c(1, 1, 1, 1, 2), col=colors)

Figura 3.4 Comparação de distribuições t-Student com a normal, em diferentes graus de liberdade (df).

Fonte: Elaboração própria a partir do script.

Os softwares econométricos em geral disponibilizam o valor da probabilidade (p-value) associado ao valor de t calculado. Desta forma, pode-se comparar com níveis predeterminados de significância para rejeitar ou não a hipótese nula. Em geral, costuma-se observar os valores das probabilidades comparando a 10%, 5% ou 1% para concluir a respeito da hipótese nula. Espera-se, para que a variável X tenha efeito não nulo sobre Y, que se rejeite a hipótese nula e que assim, os valores calculados dos parâmetros permitam uma interpretação econômica deste efeito.

Pr(>|t|) ou p-value ou valor-p é a probabilidade associada ao valor de \(t\) calculado ser maior que \(|t|\). Portanto, se Pr(>|t|) é pequeno, os coeficientes são ditos estatisticamente significativos diferentes de zero. Se Pr(>|t|), a probabilidade de \(t\) é elevada (leia-se \(>0.10\)), então os coeficientes são ditos não significativos.
> Resumo: um valor de \(t\) grande indica ser mais provável que o coeficiente estimado seja não nulo. Portanto, se desejar que haja efeitos de \(X\) sobre \(Y\), deseja-se maiores valores de t. Por sua vez, maiores valores de t indicam menores valores da probabilidade de t.

3.2 Decomposição da Variação de \(Y\)

Para auxiliar o entendimento, é possível decompor a variação de \(Y\) como na Figura.

Figura 3.5 Decomposição da variação de Y em função de X.

Fonte: Elaboração própria.

Então pode-se escrever como

\[{y_i} = {Y_i} - \bar Y\]

\[{y_i} = {\hat Y_i} + {\hat e_i} - \bar Y\]

A variação total (\(y_i\) ) será a variação explicada por \(X\) (\(\hat y_i\)) [em que \(\hat y_i=\hat Y_i-\bar Y\) é a variação devida à regressão] mais a variação não explicada (decorrente do resíduo), de modo que \(y_i=(\hat y_i+ \hat e_i)\). Assim,

\[ SQTot=SQReg+SQRes \]

em que \(SQTot\) é a soma dos quadrados totais (relativa à variação total, \(y_i^2\)); \(SQRes\) é a soma dos quadrados dos resíduos (relativa à variação não explicada) e \(SQReg\) é a soma dos quadrados da regressão (relativa à variação explicada por \(X\)). Portanto,

\[{y_i}^2 = {({\hat y_i} + {\hat e_i})^2}\]

\[\begin{array}{l} {\rm{SQTot}} = \sum\limits_{}^{} {y_i^2} = \sum {\hat y_i^2 + 2\sum\limits_{}^{} {\hat y_i^{}\hat e_i^{}} + } \sum\limits_{}^{} {\hat e_i^2} = \sum\limits_{}^{} {\left( {{Y_i} - \bar Y} \right)_{}^2} = Y'Y - n{{\bar Y}^2}\\ {\rm{SQRes}} = \sum\limits_{}^{} {\hat e_i^2} = e'e = Y'Y - \hat \beta 'X'Y\\ {\rm{SQReg}} = \sum {\hat y_i^2 = } \sum\limits_{}^{} {\left( {{{\hat Y}_i} - \bar Y} \right)_{}^2} = \hat Y'\hat Y - n{{\bar Y}^2}\\ {\rm{SQTot}} = {\rm{SQReg + SQRes}} \end{array}\].

O coeficiente de determinação (\(R^2\) = R-squared ou R quadrado) é utilizado para avaliar quanto da variação total é explicada. Define-se como:

\[{R^2} = \frac{{SQReg}}{{SQTot}} = 1 - \frac{{SQRes}}{{SQTot}}\]

Seu intervalo de variação é de zero a um em condições normais: \(0 < R^2 < 1\). Não necessariamente se descarta modelos com baixos valores de \(R^2\), mas deve-se olhar os critérios de informação (no próximo capítulo), as significâncias dos parâmetros estimados e outros indicadores de testes do modelo. Se \(SQRes=SQTot\), então \(R^2=0\); Se \(SQRes\approx 0\) então \(R^2=1\).

Ou seja, mede quanto da variação de \(Y\) está sendo explicada por variações de \(X\), ou seja, mede a qualidade do ajustamento. Procura-se estimar um modelo com o maior \(R^2\) possível. Em geral, acredita-se ter um modelo bem ajustado para valores maiores que 0,8, mas sempre se deve ter cautela quanto a esses indicadores usualmente aceitos.

Na forma matricial, o cálculo será;

\[{R^2} = \frac{{\hat \beta 'X'Y - n{{\bar Y}^2}}}{{Y'Y - n{{\bar Y}^2}}} = 1 - \frac{{Y'Y - \hat \beta 'X'Y}}{{Y'Y - n{{\bar Y}^2}}}\]
Outro indicador útil, principalmente para comparações entre modelos é o \(R^2\) ajustado ( adjusted R-squared). Ele recebe este nome, pois se faz um ajustamento de \(SQRes\) e de \(SQTot\) quanto aos graus de liberdade da respectiva variação. Assim, tem-se:

\[{\bar R^2} = 1 - \frac{{\frac{{{\rm{SQRes}}}}{{\left( {{\rm{n - p}}} \right)}}}}{{\frac{{{\rm{SQTot}}}}{{\left( {{\rm{n - 1}}} \right)}}}}\]

Em geral, quanto maior o número de variáveis \(X\), maior é o valor de \(R^2\), mas para o \(R^2\) ajustado esta regra não vale. Justamente para evitar a inclusão equivocada de variáveis explicativas é que se usa o \(R^2\) ajustado. Assim, a inclusão de uma variável irrelevante poderá elevar o valor de \(R^2\), mas não necessariamente elevará o valor de \(R^2\) ajustado.

Se \(n\) for grande e o número de parâmetros (\(p\)) pequeno em relação a \(n\), a diferença entre \(\bar R^2\) (R quadrado ajustado) e \(R^2\) será pequena. Se \(n\) for pequeno e \(p\) grande em relação a \(n\), a diferença entre ambos pode ser grande e o valor ajustado será mais importante.

Outro indicador é o Teste F da regressão ( F-statistic). Procura-se saber se o modelo tem suporte estatístico. É o Teste de significância global da regressão: os \(X^\prime s\) em conjunto explicam \(Y\) de forma significativa. A hipótese nula é de que todos os parâmetros em conjunto são nulos. A Hipótese alternativa prevê pelo menos um parâmetro não nulo:

\({H_0}:{\beta _1} = 0,{\beta _2} = 0,...,{\beta _k} = 0\);

\({H_1}:\) pelo menos um \({\beta _i} \ne 0\).

Define-se a estatística de teste \(F\) como:

\[F_{calculado} = \frac{{\frac{{{\rm{SQReg}}}}{{{\rm{p - 1}}}}}}{{\frac{{{\rm{SQRes}}}}{{{\rm{n - p}}}}}} \]

e \(F_{calculado}\) é distribuído como \(F_{(p - 1,n - p)}\) graus de liberdade.

Se \(F_{calculado} > F_{tabelado}\) , então rejeita-se H0 e concluo pela existência de ao menos um \(X\) explicando \(Y\). Deseja-se um P-value (F de significação) menor que 10%, 5% ou 1%, similarmente ao teste de \(t\) dos parâmetros.

O teste \(F\) muitas vezes é usado para outras hipóteses como para testar a especificação do modelo, ou a omissão de variáveis. Estes testes alternativos serão apresentados na seção de teste da especificação do modelo.

Esses indicadores em geral são obtidos em todos os softwares econométricos ou estatísticos. Podem-se mencionar alguns: R/RStudio, Python, Excel, Eviews, Stata, Gretl, SAS, SPSS, Gauss, e MatLab.

3.3 Propriedades dos estimadores de \(MQO\)

Os estimadores do \(MQO\) são os Melhores Estimadores Lineares Não-Tendenciosos (\(MELNT\)), ou no inglês, \(BLUE\) ( Best Linear Unbiased Estimator). Como os estimadores do modelo do Quadro 3.1 são obtidos a partir de uma amostra aleatória, os estimadores dos parâmetros (\(\hat\beta\) ), da variância-covariância dos resíduos (\(s^2\)) e dos parâmetros (\(\rm {Var-Cov}(\hat\beta)\) ) terão distribuições de probabilidade associadas, e seus valores normalmente se alteram conforme o tamanho da amostra, ou seja, com o número de observações.

Tendenciosidade

Uma propriedade desejável é a da não-tendenciosidade, ou seja, os valores esperados dos parâmetros estimados por meio da expressão \(\hat \beta=(X^\prime X)^{-1}(X^\prime Y)\) são iguais ao verdadeiro valor de \(\beta\). Ou seja, para cada \(\beta_i\), o valor esperado do estimador \(E(\hat \beta_i)=\beta_i\). Intuitivamente, ao coletar várias amostras para um fenômeno, e ao calcular os parâmetros pela expressão de \(MQO\) ( \(\hat \beta_{MQO}=(X^\prime X)^{-1}(X^\prime Y)\)), então o valor médio das estimativas das várias amostras será \(\beta\) , para um modelo estatisticamente correto, ou que suas pressuposições clássicas sejam válidas. De outro modo, se não convergir para \(\beta\), então a estimativa obtida por \(\hat \beta_{MQO}\) (pelo \(MQO\)) será dita tendenciosa ou viesada (Figura 3.6).

Figura 3.6 Estimadores: com tendenciosidade (\(\beta_{MQ2}\)) e sem tendenciosidade (\(\beta_{MQO}\)).

Fonte: Adaptado de Wooldridge (2016).

O viés de um estimador será exatamente a medida da diferença entre o valor esperado e seu valor observado. Ou seja, para uma variável \(Y\), o viés será a diferença entre o valor estimado \(\hat Y\) e o próprio \(Y\) (ou o \(Y_{observado}\)). Portanto, \({\rm viés} = E(Y)-Y=\hat Y-Y\).

Consistência

Embora tenha sido falado sobre estimadores não-tendenciosos, há casos em séries temporais, nos quais o estimador de \(MQO\) não é não-tendencioso. Neste caso, em geral os pesquisadores costumam observar a propriedade da Consistência dos estimadores, dentro do espectro chamado de propriedades assintóticas dos estimadores, ou propriedades dos estimadores para grandes amostras, ou quando \(n\) tender ao infinito (\(n\) = número de observações). Faz-se uma explicação intuitiva ao leitor. Demonstrações formais podem ser obtidas, entre outros lugares, no Apêndice C de Wooldridge (2016). Se aumentar o tamanho da amostra e o estimador \(\hat \beta\) convergir para o valor verdadeiro, então se tem matematicamente que \(\hat \beta\) é o limite de probabilidade de \(\beta\) , ou seja,
\[\mathop {{\rm{plim}}(\hat \beta )}\limits_{n \to \infty } = \beta \].

A distribuição de \(\hat \beta\) está cada vez mais concentrada em torno de seu valor verdadeiro \(\beta\) . Ou seja, para grandes amostras, a estimativa está ficando cada vez mais próxima do valor verdadeiro (Figura 3.7).

Figura 3.7 Consistência: Distribuições amostrais do parâmetro para tamanhos de amostras diferentes.

Fonte: Adaptado de Wooldridge (2016).

Eficiência

Entre os estimadores da classe dos estimadores lineares não tendenciosos, o de \(MQO\) tem a menor variância, e a isto se deve a ideia de melhor estimador. Espera-se que quanto maior a amostra, tendendo ao infinito, os estimadores de \(MQO\) tenderão aos valores verdadeiros, aos que se teria para a população, não tendenciosos, de variância mínima. Esta ideia está explicada pelo Teorema de Gauss-Markov: Em um modelo estatisticamente correto, ou seja, cujas pressuposições clássicas sejam válidas, os estimadores de Mínimos Quadrados são os melhores, os de variância mínima, quando comparados a outros estimadores lineares não-tendenciosos. Este Teorema independe da satisfação ao pressuposto da normalidade dos resíduos. Será mostrado nos capítulos de violação dos pressupostos clássicos que as variâncias estimadas, na presença daqueles problemas de violação, não serão as mínimas.

Seja a Figura 3.8. Se tiver para a distribuição de \(\beta_2\) , dois estimadores \(\hat \beta_2\) e \(\hat \beta^*_2\) , o estimador eficiente será o de menor variância. Por exemplo, sejam duas distribuições de \(\beta_2\) : a distribuição da Figura 3.8 (fdp de \(\hat \beta_2\)) ; e a distribuição da Figura 3.8 (fdp de \(\hat \beta^*_2\)). A distribuição de variância mínima será a de \(\hat \beta_2\) , a mais concentrada em torno da média \(E(\hat \beta_2)=\beta_2\) . Portanto, \(\hat \beta_2\) será dito o estimador eficiente de \(\beta_2\) , posto que \(Var({\hat \beta _2}) \le Var(\hat \beta _2^*)\) . No caso de estimadores em que algum deles é viesado, uma forma de comparar é olhando o erro quadrático médio (\(EQM\)), pois este pode ser demonstrado como a soma da variância com o quadrado do viés. O \(EQM\) medirá o quanto o estimador está longe de seu valor esperado.

Figura 3.8 Exemplificação do melhor estimador não-tendencioso dos parâmetros.

Fonte: Adaptado de Wooldridge (2016) e Gujarati (2011, p.92).

O modelo clássico de análise de regressão é construído com base numa série de pressuposições referentes ao comportamento da população. Estas pressuposições foram descritas nas seções anteriores e no próximo capítulo se inicia a discussão das violações das pressuposições.

3.4 Avaliando o(s) modelo(s)

Ante o exposto anteriormente, as principais medidas para avaliar e decidir pelo modelo são:

ESTATÍSTICA CRITÉRIO
R-Squared (\(R^2\)) Quanto maior melhor (> 0.70)
Adj R-Squared (\(R^2 ajustado\)) Quanto maior melhor
F-Statistic (Estatística \(F\) da regressão ) Quanto maior melhor
Erro padrão da regressão mais próximo de zero é melhor
t-statistic (valor de \(t\)) desejo p-value (valor da probabilidade) menor que 0.10 ou 0.05 ou 0.01
\(AIC\) Quanto menor melhor
\(BIC\) Quanto menor melhor

3.5 Apêndice - Estimação com matrizes

Neste arquivo utilizo uma série fictícia da Tabela 2.4 do livro de Gujarati e Porter (2011: p.67) das Despesas familiares de consumo semanal Y e renda familiar semanal X. É um exercício rápido de regressão com uso de matrizes e comparativamente à saída da função lm() nativa do R. O leitor pode carregar direto na Tabela 2.4 do livro de Gujarati e Porter (2011: p.67) como abaixo ou usar a saída do dput(dados) conforme colocado abaixo.

# os dados também podem ser chamados fazendo a rotina abaixo `dput(dados)`:
# A execução da linha abaixo fornece exatamente o mesmo que a linha 2
dados<-structure(list(y = c(70, 65, 90, 95, 110, 115, 120, 140, 155, 150), 
                      x = c(80, 100, 120, 140, 160, 180, 200, 220, 240, 260), 
                      obs = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)), 
                 row.names = c(NA, -10L), 
                 class = c("tbl_df", "tbl", "data.frame"))
print(dados)      # funcao para visualizar os dados na tela do RStudio
##      y   x obs
## 1   70  80   1
## 2   65 100   2
## 3   90 120   3
## 4   95 140   4
## 5  110 160   5
## 6  115 180   6
## 7  120 200   7
## 8  140 220   8
## 9  155 240   9
## 10 150 260  10
library(knitr)   # pacote para a funcao kable
attach(dados)    # funcao para que o RStudio entenda os rótulos de 'dados'

# Estatisticas Descritivas

summary(dados)
##        y                x            obs       
##  Min.   : 65.00   Min.   : 80   Min.   : 1.00  
##  1st Qu.: 91.25   1st Qu.:125   1st Qu.: 3.25  
##  Median :112.50   Median :170   Median : 5.50  
##  Mean   :111.00   Mean   :170   Mean   : 5.50  
##  3rd Qu.:135.00   3rd Qu.:215   3rd Qu.: 7.75  
##  Max.   :155.00   Max.   :260   Max.   :10.00

3.5.1 Pela função nativa do R lm()

reg1<-lm(y~x,data=dados)    
# sumario de resultados do objeto reg1: 
# saída da regressao
summary(reg1)    
## 
## Call:
## lm(formula = y ~ x, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.364  -4.977   1.409   4.364   8.364 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 24.45455    6.41382   3.813  0.00514 ** 
## x            0.50909    0.03574  14.243 5.75e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.493 on 8 degrees of freedom
## Multiple R-squared:  0.9621, Adjusted R-squared:  0.9573 
## F-statistic: 202.9 on 1 and 8 DF,  p-value: 5.753e-07

Para obter uma saída mais organizada, pode-se utilizar o pacote stargazer, que fornece várias opções para a saída em formato científico.

# criterios de informacao
reg1$AIC <- AIC(reg1)
reg1$BIC <- BIC(reg1)
suppressMessages(library(stargazer))
stargazer(reg1, 
          title = "Título: Resultado da Regressão OLS ou 
          Mínimos Quadrados Ordinários", 
          align = TRUE,type = "text", 
          style = "all", 
          keep.stat = c("AIC", "BIC", "rsq", "adj.rsq","n"))
## 
## Título: Resultado da Regressão OLS o
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                  y             
## -----------------------------------------------
## x                            0.509***          
##                               (0.036)          
##                             t = 14.243         
##                             p = 0.00000        
## Constant                     24.455***         
##                               (6.414)          
##                              t = 3.813         
##                              p = 0.006         
## -----------------------------------------------
## Observations                    10             
## R2                             0.962           
## Adjusted R2                    0.957           
## Akaike Inf. Crit.             69.562           
## Bayesian Inf. Crit.           70.470           
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

3.5.2 Por matrizes

# Para que o R entenda os rótulos, usarei attach(dados)
attach(dados)
# Para criar a matriz X 
# coluna 1 com valores unitários e x1
X<-as.matrix.data.frame(cbind(1,dados[,2]))
print(X)
##       [,1] [,2]
##  [1,]    1   80
##  [2,]    1  100
##  [3,]    1  120
##  [4,]    1  140
##  [5,]    1  160
##  [6,]    1  180
##  [7,]    1  200
##  [8,]    1  220
##  [9,]    1  240
## [10,]    1  260
# Para transformar a variavel (y) em vetor:
y1<-as.matrix(dados[,1])
print(y1)
##       [,1]
##  [1,]   70
##  [2,]   65
##  [3,]   90
##  [4,]   95
##  [5,]  110
##  [6,]  115
##  [7,]  120
##  [8,]  140
##  [9,]  155
## [10,]  150
# Para estimar o vetor (X'X) da equacao, 
# primeiro se obtem o parametro pelo seguintes passos:
# 1) transposta de X: (X')
trX<-(t(X))
# 2) Produto da transposta de X por X, 
#    com o codigo %*%: (X'X)
X_X<-trX %*% X
X_X
##      [,1]   [,2]
## [1,]   10   1700
## [2,] 1700 322000
# Para obter a inversa (X'X)-1 se deve primeiro ativar 
# o pacote library(MASS), e usar ginv() para inverter 
# a matriz
det(X_X)     
## [1] 330000
library(MASS)
invX_X<-(ginv(X_X))
invX_X                 # (X'X)-1
##              [,1]          [,2]
## [1,]  0.975757576 -5.151515e-03
## [2,] -0.005151515  3.030303e-05
# Uma vez que se tem a inversa (X'X)-1, 
# se procede o produto X'y:
Xy<-trX %*% y1
Xy                    # X'y
##        [,1]
## [1,]   1110
## [2,] 205500
#Para calcular o vetor beta:
beta<-invX_X %*% Xy   # beta = (X'X)-1 X'y
beta
##            [,1]
## [1,] 24.4545455
## [2,]  0.5090909
summary(reg1) # comparar beta com coefficients do summary
## 
## Call:
## lm(formula = y ~ x, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.364  -4.977   1.409   4.364   8.364 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 24.45455    6.41382   3.813  0.00514 ** 
## x            0.50909    0.03574  14.243 5.75e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.493 on 8 degrees of freedom
## Multiple R-squared:  0.9621, Adjusted R-squared:  0.9573 
## F-statistic: 202.9 on 1 and 8 DF,  p-value: 5.753e-07
  • Cálculos para testes dos parâmetros
# agora calculamos os desvios-padrões
# obtencao de sigma quadrado estimado
yly<-t(y)%*%y
blXy<-t(beta)%*%Xy
ulu<-yly - blXy
ulu                  # Soma dos Quadrados dos Residuos
##          [,1]
## [1,] 337.2727
uhat<-y-X%*%(beta)
uhat                 # residuos estimados
##              [,1]
##  [1,]   4.8181818
##  [2,] -10.3636364
##  [3,]   4.4545455
##  [4,]  -0.7272727
##  [5,]   4.0909091
##  [6,]  -1.0909091
##  [7,]  -6.2727273
##  [8,]   3.5454545
##  [9,]   8.3636364
## [10,]  -6.8181818
# obter sigma quadrado para gl=n-p=8
n<-nrow(dados)       # numero de observacoes
k<-ncol(X)          # numero de parametros a estimar
sigsqhat<-as.numeric(ulu/(n-k))
sigsqhat            # s2 - variancia estimada do residuo
## [1] 42.15909
# variancia-covariancia de beta
varcovbeta<-sigsqhat*invX_X     
varcovbeta 
##            [,1]         [,2]
## [1,] 41.1370523 -0.217183196
## [2,] -0.2171832  0.001277548
# obtendo a raiz da variancia da diagonal de varcovbeta
#desvio padrao de beta
sebeta<-sqrt(diag(varcovbeta))  
sebeta
## [1] 6.41381730 0.03574281
# parametros beta
beta
##            [,1]
## [1,] 24.4545455
## [2,]  0.5090909
# estatistica t dos parametros
tbeta<-beta/sebeta
tbeta                         
##           [,1]
## [1,]  3.812791
## [2,] 14.243171
#obtendo a probabilidade de tbeta para 5% e df=n-k
pvalue<-2*pt(-abs(tbeta),n-k)
pvalue        # probabilidade de t dos parametros
##              [,1]
## [1,] 5.142172e-03
## [2,] 5.752746e-07
  • obtendo \(R^2\) e \(R^2 ajustado\)
# soma dos quadrados totais 
sqtot<- yly-n*mean(y1)^2
sqtot     
##      [,1]
## [1,] 8890
# soma dos quadrados dos residuos
sqres<- ulu
sqres      
##          [,1]
## [1,] 337.2727
# soma dos quadrados da regressao
sqreg<- sqtot-sqres
sqreg    
##          [,1]
## [1,] 8552.727
# coeficiente de determinação R2
r2<-sqreg/sqtot
r2               
##           [,1]
## [1,] 0.9620616
# coeficiente de determinação ajustado R2-ajustado
r2aj<-1-(sqres/(n-k))/(sqtot/(n-1))
r2aj                          
##           [,1]
## [1,] 0.9573193
  • coeficiente F de significação
F<-(sqreg/(k-1))/(sqres/(n-k))
F                        
##          [,1]
## [1,] 202.8679
# probabilidade de F para H0: betas iguais a zero
probF<-1-pf(F,k-1,n-k)
probF                         
##              [,1]
## [1,] 5.752746e-07

4 Violação dos pressupostos: especificação

A pressuposição associada à especificação do modelo pode ser escrita como: A relação entre \(Y\) e \(X\) é linear e o modelo está bem especificado (\(Y=X\beta+\varepsilon\)). Conforme exposto anteriormente, a pressuposição em análise implica que os modelo tem uma forma funcional linear ou linearizada nas variáveis e nos coeficientes, e ainda, que não existem problemas de omissão de variável relevante (o que geraria um viés nas estimativas).

Em geral, recomendo fortemente observar o conjunto de fatores envolvidos no modelo, desde os aspectos teóricos de escolha das variáveis, a escolha de formas flexíveis como as log-log ou outras transformações, as significâncias dos parâmetros estimados, os valores das estatísticas \(R^2\) e \(R^2 ajustado\), e ainda a satisfação de outras pressuposições que têm relação com a especificação do modelo, como veremos mais a frente.

Portanto, a preocupação é saber se existe violação do pressuposto, ou seja, se o modelo está mal especificado, o que requereria alteração na especificação. A identificação do problema é normalmente feita por testes do tipo proposto por @ramsey1969tests.

4.1 Teste RESET

Entre outros testes, o teste \(RESET\) de @ramsey1969tests é um dos mais aplicados na literatura. O nome vem do pesquisador Ramsey para o Regression Specification Error Test ou Teste de Erro de Especificação da Regressão. O teste é baseado na regressão aumentada

\[Y = X\beta + Z\alpha + \varepsilon ,\]

em que \(X\) é uma matriz das variáveis explicativas e \(Z\) é uma matriz das variáveis dependentes estimadas e elevadas a uma potência tal que, \(Z = [ \hat Y^2, \hat Y^3, \hat Y^4]\), (neste exemplo, para três fitted terms, três termos acrescentados na regressão aumentada, em que \(\hat Y\) é a variável \(Y\) prevista pelo modelo estimado originalmente: \(Y = X\beta + \varepsilon\)).

A ideia é olhar a significância do vetor de parâmetros \(\alpha\) para ver se os termos acrescentados são relevantes no modelo, indicando erro de especificação.

O procedimento do teste será:

  1. Estima-se \(Y = X\beta + \varepsilon\); nesta regressão inicial, será obtido o \(R_{velho}^2\);

  2. Obtêm-se os valores previstos de \(Y\) e gera-se \(Z = [ \hat Y^2, \hat Y^3, \hat Y^4]\) ou mais se desejar. Recomenda-se no máximo até 3 termos, ou seja, até \(\hat Y^4]\);

  3. Ajusta-se a regressão aumentada, colocando-se os \(X\) e as variáveis do item 2 : \(Y = f(X, \hat Y^2, \hat Y^3\) ); nesta regressão aumentada, será obtido o \(R_{novo}^2\);

  4. Com as regressões de 1 e de 3, observam-se os valores de \(R_{novo}^2\) (de 3) e \(R_{velho}^2\) (de 1) e calcula-se a estatística de teste;

  5. Estatística de Teste;

\[\begin{equation} $$F = \frac{{\frac{{R_{novo}^2 - R_{velho}^2}}{{{\rm{número\ de \ novos\ regressores }}(m)}}}}{{\frac{{1 - R_{novo}^2}}{{n - {\rm{número \ de \ parâmetros\ no\ novo\ modelo (p)}}}}}};$$ \end{equation}\]

em que \(F ∼ F_{(m, n-p)}\) ; \(m\) é o número de novos regressores (potências incluídas); \((n-p)\) é o número de observações menos o número de parâmetros no novo modelo.

  1. Comparar o \(F\) do item 5 com o \(F\) da tabela teórica de distribuição de \(F\) , para o nível de significância, e graus de liberdade do numerador \(m\) e denominador \((n-p)\). Como a hipótese nula (\(H_0\)) é de que não há erro de especificação, espera-se que a hipótese nula não seja rejeitada, ou seja, que \(F-statistic\) seja muito pequena e sua respectiva probabilidade (\(p-value\)) seja elevada.

O teste \(RESET\) indica apenas se o modelo está especificado incorretamente, mas não diz qual seria a solução. A solução para um problema envolverá: incluir outras variáveis relevantes no modelo (variáveis novas ou as \(X\) nas potências); retirar as irrelevantes; ou mudar a forma funcional (por exemplo, alterando para log, CES, Translog ou outra). Portanto, o bom senso indica que é melhor incluir variáveis do que excluir, pois a exclusão pode causar viés, enquanto a inclusão tende a melhorar o modelo, a não ser pela possibilidade de não-significância dos parâmetros.

A inclusão de variáveis pode envolver o uso de dummies para melhorar o detalhamento e/ou discriminar grupos ou categorias de interesse, ou ainda o uso de variável de tendência em séries temporais, ou mesmo para destacar possíveis outliers. A exclusão ou transformação de variáveis pode ser uma opção caso esteja havendo multicolinearidade ou outra violação de pressuposto como resíduos não normais.

No software \(R\), o teste \(RESET\) pode ser feito manualmente, por meio de ajustamento da regressão, obtenção dos valores ‘ajustados’ ou ‘estimados’ e estimação da regressão de teste como nos procedimentos 1 a 6 mencionados nesta seção. Outra forma é usar o comando resettest do pacote (library) lmtest. Serão mostrados no script os dois procedimentos.

4.1.1 Exemplo soja_apostila:

RESET test: Usando o arquivo ‘soja_apostila.xlsx’, que contém os dados do valor de produção de soja, sabendo que a variável dependente \(QSOJA\) é a quantidade produzida de soja, a variável \(FERTILIZANTE\) é a quantidade utilizada de fertilizantes, a variável \(TRATOR\) é o número de horas-máquina utilizadas, e \(MO\) é a quantidade de mão-de-obra em número de pessoas (script ao final).

4.1.1.1 Passo 1: estimar o modelo

library(readxl)
# library(foreign)
dados <- read_excel("soja_apostila.xlsx", 
                    sheet = "dados")
summary(dados)
##       OBS          QSOJA        FERTILIZANTE        TRATOR     
##  Min.   :  1   Min.   :204.6   Min.   : 8.974   Min.   :2.218  
##  1st Qu.: 30   1st Qu.:294.9   1st Qu.:16.592   1st Qu.:3.269  
##  Median : 59   Median :316.7   Median :18.450   Median :4.059  
##  Mean   : 59   Mean   :322.3   Mean   :18.404   Mean   :4.317  
##  3rd Qu.: 88   3rd Qu.:350.2   3rd Qu.:21.392   3rd Qu.:5.455  
##  Max.   :117   Max.   :506.5   Max.   :27.079   Max.   :6.677  
##        MO         
##  Min.   :0.04820  
##  1st Qu.:0.05539  
##  Median :0.07085  
##  Mean   :0.08165  
##  3rd Qu.:0.09346  
##  Max.   :0.26126
attach(dados)
# QSOJA = quantidade produzida de soja; 
# FERTILIZANTE = quantidade utilizada de fertilizantes, 
# TRATOR = número de horas-máquina utilizadas, e 
# MO = quantidade de mão-de-obra em número de pessoas 

## RESET de Ramsey
### Execucao manual do RESET de Ramsey para especificação

regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
summary(regressao1)
## 
## Call:
## lm(formula = QSOJA ~ FERTILIZANTE + TRATOR + MO)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -66.714 -33.171   1.768  24.894 149.637 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   494.9657    25.5723  19.356  < 2e-16 ***
## FERTILIZANTE   -0.5535     1.0589  -0.523   0.6022    
## TRATOR        -33.6899     3.7410  -9.006 6.09e-15 ***
## MO           -209.1407   107.8926  -1.938   0.0551 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 41.51 on 113 degrees of freedom
## Multiple R-squared:  0.4651, Adjusted R-squared:  0.4509 
## F-statistic: 32.75 on 3 and 113 DF,  p-value: 2.608e-15
### fazendo os criterios de informacao de Akaike e Schwarz
regressao1$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
#mostrando os valores de AIC e SIC
suppressMessages(library(stargazer))

Quadro 4.1. Resultados da regressão original de Qsoja, usando R.

star.1 <- stargazer(regressao1,
                    title="Título: Resultado da Regressão",
                    align=TRUE,
                    type = "text", style = "all",
                    keep.stat=c("aic","bic","rsq", "adj.rsq","n"))
## 
## Título: Resultado da Regressão
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                QSOJA           
## -----------------------------------------------
## FERTILIZANTE                  -0.554           
##                               (1.059)          
##                             t = -0.523         
##                              p = 0.603         
## TRATOR                      -33.690***         
##                               (3.741)          
##                             t = -9.006         
##                              p = 0.000         
## MO                           -209.141*         
##                              (107.893)         
##                             t = -1.938         
##                              p = 0.056         
## Constant                    494.966***         
##                              (25.572)          
##                             t = 19.356         
##                              p = 0.000         
## -----------------------------------------------
## Observations                    117            
## R2                             0.465           
## Adjusted R2                    0.451           
## Akaike Inf. Crit.            1,209.807         
## Bayesian Inf. Crit.          1,223.617         
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

4.1.1.2 Passo 2: obtencao dos valores ajustados

Utilizaremos o recurso I(fitted(regressao1)) para gerar automaticamente e já estimar a regressão de teste.

4.1.1.3 Passo 3: colocar variável \(Z\)

Variável \(Z\) com valores ajustados ao quadrado e ao cubo e a quarta potências: \(Z = [ \hat Y^2, \hat Y^3, \hat Y^4]\):

I(fitted(regressao1)^2)+
I(fitted(regressao1)^3)+
I(fitted(regressao1)^4)

4.1.1.4 Passo 4: estimar regressão de teste

Primeiro faremos uma regressão com os três termos estimados (reg_RESET_3 - \(Z = [ \hat Y^2, \hat Y^3, \hat Y^4]\)) e também com dois termos (reg_RESET - \(Z = [ \hat Y^2, \hat Y^3\)):

reg_RESET_3<-lm(QSOJA~FERTILIZANTE+TRATOR+MO+I(fitted(regressao1)^2)+
                  I(fitted(regressao1)^3)+I(fitted(regressao1)^4),data=dados)

reg_RESET<-lm(QSOJA~FERTILIZANTE+TRATOR+MO+
                I(fitted(regressao1)^2)+I(fitted(regressao1)^3),data=dados)

Quadro 4.2. Regressão auxiliar para o Teste RESET em R, soja.R, três termos.

results<-stargazer(list(regressao1,reg_RESET_3),
                   column.labels = c("regressao","RESET3"),
                   type="text",style="all",
                   keep.stat=c("aic","bic","rsq", "adj.rsq","n"))
## 
## ===================================================
##                            Dependent variable:     
##                        ----------------------------
##                                   QSOJA            
##                          regressao       RESET3    
##                             (1)           (2)      
## ---------------------------------------------------
## FERTILIZANTE              -0.554       304.130**   
##                           (1.059)      (135.047)   
##                         t = -0.523     t = 2.252   
##                          p = 0.603     p = 0.027   
## TRATOR                  -33.690***    18,591.290** 
##                           (3.741)     (8,231.767)  
##                         t = -9.006     t = 2.258   
##                          p = 0.000     p = 0.026   
## MO                       -209.141*   115,237.700** 
##                          (107.893)    (51,069.360) 
##                         t = -1.938     t = 2.256   
##                          p = 0.056     p = 0.027   
## I(fitted(regressao1)2)                  2.665**    
##                                         (1.165)    
##                                        t = 2.287   
##                                        p = 0.025   
## I(fitted(regressao1)3)                  -0.006**   
##                                         (0.002)    
##                                        t = -2.300  
##                                        p = 0.024   
## I(fitted(regressao1)4)                 0.00000**   
##                                        (0.00000)   
##                                        t = 2.303   
##                                        p = 0.024   
## Constant                494.966***   -230,604.700**
##                          (25.572)    (101,861.300) 
##                         t = 19.356     t = -2.264  
##                          p = 0.000     p = 0.026   
## ---------------------------------------------------
## Observations                117           117      
## R2                         0.465         0.532     
## Adjusted R2                0.451         0.507     
## Akaike Inf. Crit.        1,209.807                 
## Bayesian Inf. Crit.      1,223.617                 
## ===================================================
## Note:                   *p<0.1; **p<0.05; ***p<0.01

4.1.1.5 Passos 5 e 6: calcular estatisticas de teste

Vamos calcular as estatísticas do teste RESET em que \(H_0\): o modelo está bem especificado, ou de forma equivalente, \(H_0\): os coeficientes incluindo fitted são nulos. O teste computacional será conduzido utilizando a função linearHypothesis do pacote car.

  • cálculo manual

Observa-se agora que no modelo original, o \(R^2\), agora chamado de \(R^2_{velho}\) = 0,46511. No modelo novo, aumentado, o \(R^2\) chamado de \(R^2_{novo}\) = 0,532456. Observar que aqui, para efeito de demonstração, optei por utilizar mais dígitos de \(R^2\) do que os mostrados na saída do R, de modo a demonstrar a precisão dos cálculos entre o método manual e o pelas funções do R. Foram adicionadas 3 variáveis, portanto, \(m =3\). E o modelo tem 117 observações (\(n=117\)) e ficou após aumentado, contendo 7 parâmetros. Assim, \((n-p) = 110\) no modelo novo. Calculando a expressão: \[F = \frac{{\frac{{R_{novo}^2 - R_{velho}^2}}{{{\rm{número\ de \ novos\ regressores }}(m)}}}}{{\frac{{1 - R_{novo}^2}}{{n - {\rm{número \ de \ parâmetros\ no\ novo\ modelo (p)}}}}}}\]

\[F = \frac{{\frac{{0,532456 - 0,46511}}{3}}}{{\frac{{1 - 0,532456}}{{117 - 7}}}} = 5,281\]

Para a distribuição de \(F = 5,281\), o valor da probabilidade é \((1-0,9981)\). Assim, o que se deseja é o valor do complemento (1-p acumulado).

F<- ((0.532456 - 0.46511)/3)/((1 - 0.532456)/(117-7))
F
## [1] 5.281542
# probabilidade de F para H0: betas iguais a zero
probF<-1-pf(F,3,117-7)
probF                         
## [1] 0.001932346

Ou seja, para probabilidade de F (probF) menor que 1%, rejeita-se \(H_0\), a hipótese nula de que os coeficientes das variáveis elevadas às potências são nulas. Desta forma, elas apresentam algum poder explicativo e o modelo é dito mal especificado.

  • cálculo computacional

Fazendo agora com a função linearHypothesis, do pacote car, para o caso das três regressoras adicionadas, a \(H_0\) testada será

RESETH0<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)",        
"I(fitted(regressao1)^4)") 
suppressMessages(library(car))
RESETH0<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)",
        "I(fitted(regressao1)^4)")
Tabela_RESET<-linearHypothesis(reg_RESET_3,RESETH0)
# outra alternativa é usar a linha abaixo com o matchCoefs
#Tabela_RESET<-linearHypothesis(reg_RESET_3, matchCoefs(reg_RESET,"fitted"))
Tabela_RESET

O teste para o \(R\) acusou erro de matriz singular, provavelmente devido a diferenças no número de casas utilizadas pelo \(R\), e foi feito o teste para quadrado e cubo, com resultados abaixo. Observar que agora a regressão de teste foi refeita para apenas estas potências. Mais a frente apresentam-se os resultados com as três potências pelo comando resettest.

Para o caso de apenas duas regressoras, será:

RESETH0<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)")

Quadro 4.3. Regressão auxiliar para o Teste RESET em R, soja.R, dois termos.

results<-stargazer(list(regressao1,reg_RESET),
                   type="text",style="all",
                   column.labels = c("regressao1","RESET"),
                   keep.stat=c("aic","bic","rsq", "adj.rsq","n") )
## 
## ===================================================
##                            Dependent variable:     
##                        ----------------------------
##                                   QSOJA            
##                          regressao1       RESET    
##                             (1)            (2)     
## ---------------------------------------------------
## FERTILIZANTE               -0.554        -5.647    
##                           (1.059)       (12.003)   
##                          t = -0.523    t = -0.470  
##                          p = 0.603      p = 0.639  
## TRATOR                   -33.690***     -291.821   
##                           (3.741)       (727.987)  
##                          t = -9.006    t = -0.401  
##                          p = 0.000      p = 0.690  
## MO                       -209.141*     -1,914.940  
##                          (107.893)     (4,501.175) 
##                          t = -1.938    t = -0.425  
##                          p = 0.056      p = 0.672  
## I(fitted(regressao1)2)                   -0.014    
##                                          (0.068)   
##                                        t = -0.205  
##                                         p = 0.839  
## I(fitted(regressao1)3)                   0.00000   
##                                         (0.0001)   
##                                         t = 0.057  
##                                         p = 0.955  
## Constant                 494.966***     3,168.566  
##                           (25.572)     (8,428.683) 
##                          t = 19.356     t = 0.376  
##                          p = 0.000      p = 0.708  
## ---------------------------------------------------
## Observations                117            117     
## R2                         0.465          0.510    
## Adjusted R2                0.451          0.488    
## Akaike Inf. Crit.        1,209.807                 
## Bayesian Inf. Crit.      1,223.617                 
## ===================================================
## Note:                   *p<0.1; **p<0.05; ***p<0.01

Quadro 4.4. Teste RESET pelo Linear Hypothesis test em R.

suppressMessages(library(car))
RESETH0<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)")
Tabela_RESET<-linearHypothesis(reg_RESET,RESETH0)
# outra alternativa é usar a linha abaixo com o matchCoefs
#Tabela_RESET<-linearHypothesis(reg_RESET, matchCoefs(reg_RESET,"fitted"))
Tabela_RESET
## Linear hypothesis test
## 
## Hypothesis:
## I(fitted(regressao1)^2) = 0
## I(fitted(regressao1)^3) = 0
## 
## Model 1: restricted model
## Model 2: QSOJA ~ FERTILIZANTE + TRATOR + MO + I(fitted(regressao1)^2) + 
##     I(fitted(regressao1)^3)
## 
##   Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
## 1    113 194668                                
## 2    111 178360  2     16308 5.0746 0.007783 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ou seja, o teste acusou probabilidade de \(F\) menor que 1%, rejeita-se \(H_0\), conclui-se que algum dos coeficientes de fitted é diferente de zero. Desta forma, elas apresentam algum poder explicativo e o modelo é dito mal especificado.

4.1.2 RESET pelo comando resettest da library(lmtest)

Outra alternativa é usar o pacote lmtest e a função resettest. Neste caso, o default é colocar duas variáveis de potências 2 e 3, e se desejar colocar a quarta potência será necessário alterar a opção power = 2:4. Neste caso, apenas pede-se o comando e especifica-se o objeto que contém a regressão original. A interpretação e resultados são idênticos. Foi apresentado também o teste RESET para potências 2,3 e 4, com resultados abaixo.

Quadro 4.5. Teste RESET pelo pacote lmtest em R.

suppressMessages(library(lmtest))
# default é power = 2:3
TesteRESET<-resettest(regressao1, power = 2:3) 
TesteRESET
## 
##  RESET test
## 
## data:  regressao1
## RESET = 5.0746, df1 = 2, df2 = 111, p-value = 0.007783
#alterando as potencias
TesteRESET.power<-resettest(regressao1, power = 2:4)
TesteRESET.power
## 
##  RESET test
## 
## data:  regressao1
## RESET = 5.2816, df1 = 3, df2 = 110, p-value = 0.001932

4.2 Testes para omissão de variáveis

O teste para inclusão ou omissão de variáveis é um teste clássico de distribuição \(F\) em que se compara um modelo irrestrito com outro restrito, ou seja, cujas variáveis tenham coeficientes nulos. O modelo irrestrito será aquele com todas as variáveis que se deseja testar, enquanto o restrito terá menos variáveis.

Para exemplificar estes testes, faz-se uso do exercício 7.19 de Gujarati (2011, p.236) para os dados da tabela 7.9 com a Demanda por frangos nos Estados Unidos, de 1960 a 1982, com os dados do arquivo <gujarati 5ed p236 frangos tabela7_9.xlsx>. O leitor pode fazer uso também do arquivo complementar disponível em http://www.rpubs.com/amrofi/exercicio_gujarati_7_19. Observe que são colocadas quatro possíveis especificações, com as variáveis em logaritmos e a variável \(Y\) sendo dependente em todas. As alterações são para as variáveis \(X_2\) até \(X_5\). Neste exemplo, não se está preocupado com a interpretação econômica, para fins do exemplo e, portanto, apenas trata-se das variáveis como \(X\).

Figura 4.1 QR Code para o exemplo de Demanda de frangos. X.

  • Exemplo gujarati_7_19_frangos:

7.19. Demanda por frangos nos Estados Unidos, 1960-1982. Para estudar o consumo per capita de frango nos Estados Unidos, use os dados da Tabela 7.9, em que Y = consumo per capita de frango em libras (peso) X2= renda real disponível per capita, em $ X3= preço real do frango no varejo, em centavos de dólar por libra (peso) ¢ X4= preço real da carne suína no varejo, em centavos de dólar por libra (peso) ¢ X5= preço real da carne bovina no varejo, em centavos de dólar por libra (peso) ¢ X6= preço real dos substitutos da carne de frango, em centavos de dólar por libra (peso), que é uma média ponderada dos preços reais das carnes suína e bovina, usando como pesos o consumo relativo de cada uma dessas carnes em relação ao consumo total delas. Agora, considere as seguintes funções de demanda:

  1. \[ ln{Y_t} = \alpha _1 + \alpha_2 X_{2t} + \alpha _3 X_{3t} + u_t \]
  2. \[ ln{Y_t} = \gamma _1 + \gamma _2 X_{2t} + \gamma _3 X_{3t} + \gamma _4 X_{4t} + u_t \]
  3. \[ ln{Y_t} = \lambda _1 + \lambda _2 X_{2t} + \lambda _3 X_{3t} + \lambda _4 X_{5t} + u_t \]
  4. \[ ln{Y_t} = \theta _1 + \theta _2 X_{2t} + \theta _3 X_{3t} + \theta _4 X_{4t} + \theta _5 X_{5t} + u_t \]
  5. \[ ln{Y_t} = \beta _1 + \beta _2 X_{2t} + \beta _3 X_{3t} + \beta _4 X_{6t} + u_t \]

Chamando os dados de gujarati 5ed p236 frangos tabela7_9.xlsx:

suppressMessages(library(readxl))
frangos <- read_excel("gujarati 5ed p236 frangos tabela7_9.xlsx", 
                                 sheet = "dados")
#Y  Per Capita Consumption of Chickens, Pounds                      
#X2 Real Disposable Income Per Capita, $                        
#X3 Real Retail Price of Chicken Per Pound, Cents                       
#X4 Real Retail Price of Pork Per Pound, Cents                      
#X5 Real Retail Price of Beef Per Pound, Cents                      
#X6 Composite Real Price of Chicken Substitutes Per Pound, Cents                        
attach(dados)

Vamos ver como está a tabela importada:

library(knitr)
kable(frangos[,1:7],
      caption="Dados da tabela 7-9","latex", booktabs = T)

Estimando o modelo linear de regressao múltipla fazendo as regressões de \(Y\) contra as variáveis \(X_2, X_3, X_4, X_5\) e \(X_6\) com logs. Agora estimam-se as regressões com uso da função lm e com operadores de logaritmos. As equações tomam a forma:

EQ1<-lm(log(Y)~log(X2)+log(X3),data = frangos)
EQ2<-lm(log(Y)~log(X2)+log(X3)+log(X4),data = frangos)
EQ3<-lm(log(Y)~log(X2)+log(X3)+        log(X5),
        data = frangos)
EQ4<-lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
        data = frangos)
EQ5<-lm(log(Y)~log(X2)+log(X3)+                +log(X6),
        data = frangos)

As equações são como a seguir:

  1. log(Y)~log(X2)+log(X3);

  2. log(Y)~log(X2)+log(X3)+log(X4)

  3. log(Y)~log(X2)+log(X3) +log(X5))

  4. log(Y)~log(X2)+log(X3)+log(X4)+log(X5))

Os resultados de diferentes especificações pode ser visto:

Quadro 4.14. Resultados das estimações com diferentes especificações.

library(stargazer)
resultados<-stargazer(EQ1,EQ4,
                      type="text",style=("all"),
                      column.labels = c("EQ1","EQ4"),
                    keep.stat=c("aic","bic","rsq", "adj.rsq","n"))
## 
## =========================================
##                  Dependent variable:     
##              ----------------------------
##                         log(Y)           
##                   EQ1            EQ4     
##                   (1)            (2)     
## -----------------------------------------
## log(X2)         0.452***      0.343***   
##                 (0.025)        (0.083)   
##                t = 18.284     t = 4.114  
##                p = 0.000      p = 0.001  
## log(X3)        -0.372***      -0.505***  
##                 (0.063)        (0.111)   
##                t = -5.865    t = -4.550  
##               p = 0.00001    p = 0.0003  
## log(X4)                         0.149    
##                                (0.100)   
##                               t = 1.490  
##                               p = 0.154  
## log(X5)                         0.091    
##                                (0.101)   
##                               t = 0.905  
##                               p = 0.378  
## Constant        2.033***      2.190***   
##                 (0.116)        (0.156)   
##                t = 17.497    t = 14.063  
##                p = 0.000      p = 0.000  
## -----------------------------------------
## Observations       23            23      
## R2               0.980          0.982    
## Adjusted R2      0.978          0.978    
## =========================================
## Note:         *p<0.1; **p<0.05; ***p<0.01

Assim, formalmente, a equação irrestrita será a equação 4 (contendo todas as variáveis) e os testes de especificação serão para as hipóteses a saber:

\(H_0\): coeficientes iguais a zero para \(X_4\) e \(X_5\).

A rejeição de “\(H_0\): coeficientes iguais a zero para \(X_4\) e \(X_5\)” implica que a escolha pela equação 1 (portanto, restrita ao não incluir \(X_4\) e \(X_5\)) representará erro de especificação por omissão de variável e estará viesando o modelo.

O teste \(F\) é dado pela expressão a seguir em que \(SSR\) é a soma dos quadrados dos resíduos, respectivamente dos modelos restrito (\(SSR_r\)) e irrestrito (\(SSR_{ur}\)), para \(n\) observações, \(k\) variáveis explicativas e \(q\) restrições. A expressão pode ser calculada em termos das estatísticas \(R^2\) dos modelos irrestrito (\(R_{ur}^2\)) e restrito (\(R_r^2\)). O script está colocado na sequência das fórmulas.

\(F = \frac{{SSRr - SSRur}}{{SSRur}}.\frac{{n - k - 1}}{q} = \;\frac{{\frac{{SSRr - SSRur}}{q}}}{{\frac{{SSRur}}{{n - k - 1}}}}\)

ou

\(F = \frac{{R_{ur}^2 - R_r^2}}{{1 - R_{ur}^2}}.\frac{{n - k - 1}}{q} = \;\frac{{\frac{{R_{ur}^2 - R_r^2}}{q}}}{{\frac{{1 - R_{ur}^2}}{{n - k - 1}}}}\)

\(F ∼ F\left( {q,n - k - 1} \right)\) e nível de confiança.

4.2.1 Testes de restrição do modelo

Esses testes fazem uma estatística para avaliar um modelo restrito contra o modelo irrestrito:

  • cálculo manual de F:
#modelo irrestrito é o da EQ4
# Regressão OLS irrestrita
res.ur <- lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
             data = frangos)

#modelo restrito para X4 e X5 serem nulos, equivalente ao EQ1
# Regressão OLS restrita
res.r <- lm(log(Y)~log(X2)+log(X3),data = frangos)

# extração dos R2 de cada expressão:
( r2.ur <- summary(res.ur)$r.squared )
## [1] 0.9823133
( r2.r <- summary(res.r)$r.squared )
## [1] 0.9800744
# Cálculo da estatística F para (n-k-1) no numerador 
# e q restrições no denominador:
( F <- (r2.ur-r2.r) / (1-r2.ur) * (23-4-1)/2 )
## [1] 1.139245
# p value = 1-cdf da distribuição F:
1-pf(F, 2,18)
## [1] 0.3420835
  • cálculo computacional com pacote car:

Neste caso, apenas especifico em myH0 as variáveis que terão teste de omissão, e a regressão irrestrita (completa).

res.ur<- lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
            data = frangos)
# Load package "car" (deve estar instalado em seu micro)
suppressMessages(library(car))

# F test: 
myH0 <- c("log(X4)","log(X5)")
linearHypothesis(res.ur, myH0)
## Linear hypothesis test
## 
## Hypothesis:
## log(X4) = 0
## log(X5) = 0
## 
## Model 1: restricted model
## Model 2: log(Y) ~ log(X2) + log(X3) + log(X4) + log(X5)
## 
##   Res.Df      RSS Df Sum of Sq      F Pr(>F)
## 1     20 0.015437                           
## 2     18 0.013703  2 0.0017345 1.1392 0.3421

4.3 Critérios de Informação de Akaike (\(AIC\)) e Schwarz (\(BIC\))

Outra forma de avaliar diferentes modelos é olhar os diferentes resultados e comparar o \(R^2ajustado\). Quanto mais próximo de 1 melhor será a estimação. Entretanto, este indicador é deficiente para o caso de variável omitida.

Outras opções são observar os valores dos chamados critérios de informação de Akaike (\(AIC\) de Akaike’s Information Criterion) e Schwarz (\(SIC\) de Schwarz’s Information Criterion ou \(BIC\) para a sigla de Bayesian Information criteria). Menores coeficientes \(AIC\) e \(SIC\) indicam melhores ajustamentos da regressão, mas só podem ser comparados se as unidades das variáveis das diferentes regressões forem as mesmas (por exemplo, não se aplica numa comparação entre \(Y\) e outra com \({\rm Log}Y\)). Deve-se olhar todos os critérios para melhor análise dos resultados.

Os Critérios de Informação de Akaike (ou \(AIC\)) (Akaike, 1974) ou de Schwarz (\(BIC\) - usaremos \(BIC\) para ficar aderente à função do R) (Schwarz, 1978) dependem da maximização da função de log verossimilhança do modelo. Desta forma, podem ser definidos como:

\(AIC = - \frac{{2l}}{n} + \frac{{2k}}{n}\)

\(SIC = - \frac{{2l}}{n} + \frac{{k.\log n}}{n}\)

\(l = - \frac{n}{2}\left( {1 + {\rm{log}}\left( {2\pi } \right) + \log \left( {\frac{{{{\hat \varepsilon }^{\rm{'}}}\hat \varepsilon }}{n}} \right)} \right)\)

em que \(k\) é o número de regressores incluindo-se o intercepto; \(n\) é o número de observações; \(l\) é o log Verossimilhança da regressão; e \(\hat \varepsilon\) são os resíduos estimados do modelo. No formato mais simplificado exposto por Greene (2002), tem-se:

\(AIC = \log \left( {\frac{{{{\hat \varepsilon }^{\rm{'}}}\hat \varepsilon }}{n}} \right) + \frac{{2k}}{n}\)

\(SIC = BIC = \log \left( {\frac{{{{\hat \varepsilon }^{\rm{'}}}\hat \varepsilon }}{n}} \right) + \frac{{k.\log n}}{n}\)

  • critérios de informação pelo R

Já utilizamos as funções para o cálculo do critério de informação de Akaike e de Schwarz para os exemplos da soja e da demanda de frangos. As funções básicas chamam-se AIC e BIC. Assim, basta fazer, para obter os resultados de cada regressão:

AIC(regressao)
BIC(regressao)

Para o exemplo da soja, a regressão é reproduzida e o cálculo dos critérios e feito de forma a incluir no objeto de regressão os respectivos valores (a inclusão é feita pelo comando regressao1$AIC para o AIC e regressao1$BIC para o BIC). Esta inclusão no mesmo objeto da regressao1 facilitará a extração das tabelas contendo já o AIC e BIC na função stargazer. O leitor poderá observar que no summary da regressão não aparece nenhum critério de informação. Eles são calculados a partir do objeto resultado da função lm.

regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
summary(regressao1)
## 
## Call:
## lm(formula = QSOJA ~ FERTILIZANTE + TRATOR + MO)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -66.714 -33.171   1.768  24.894 149.637 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   494.9657    25.5723  19.356  < 2e-16 ***
## FERTILIZANTE   -0.5535     1.0589  -0.523   0.6022    
## TRATOR        -33.6899     3.7410  -9.006 6.09e-15 ***
## MO           -209.1407   107.8926  -1.938   0.0551 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 41.51 on 113 degrees of freedom
## Multiple R-squared:  0.4651, Adjusted R-squared:  0.4509 
## F-statistic: 32.75 on 3 and 113 DF,  p-value: 2.608e-15
### fazendo os criterios de informacao de Akaike e Schwarz
regressao1$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
regressao1$AIC
## [1] 1209.807
regressao1$BIC
## [1] 1223.617

Deve-se esclarecer que o objetivo Não é comparar o \(AIC\) com o \(BIC\). O objetivo é comparar o \(AIC\) de um modelo com o de outro modelo.

Assim, faremos uso do exemplo da demanda de frangos para comparar modelos alternativos. Sejam modelos com especificações de forma funcional distintas como log-log, lin-log, log-lin e translog. Para simplificar, considero apenas as variáveis \(X_2\) e \(X_3\) por questões didáticas. Os modelos serão do tipo:

# especificação
EQloglog<-lm(log(Y)~log(X2)+log(X3),data = frangos)
EQlinlog<-lm(Y~log(X2)+log(X3),data = frangos)
EQloglin<-lm(log(Y)~X2+X3,data = frangos)
EQtranslog<-lm(log(Y)~log(X2)+log(X3)+I(log(X2)*log(X3))
               +I(0.5*(log(X2)^2))+I(0.5*(log(X3)^2)),data = frangos)

Uma alternativa é extrair os resultados passo a passo para construir uma tabela resumo. Isto requer conhecimento das posições dos valores desejados em cada caso. Por exemplo, armazenei os quatro valores de AIC e os quatro de BIC dentro dos respectivos vetores AIC e BIC. Da mesma forma peguei os \(R^2\) e \(R^2ajustado\) de cada modelo e armazenei em vetores r2 e r2.adj. Veja, para o modelo 1, que o \(R^2\) estava dentro do summary(mod1)$r.squared; similarmente, para o \(R^2ajustado\) estava dentro de summary(mod1)$adj.r.squared. As colunas foram então combinadas (cbind) lado a lado na tab2 e posteriormente exibidas pelo knitr::kable.

# alternativa de extrair resultados
mod1<-EQloglog
mod2<-EQlinlog
mod3<-EQloglin
mod4<-EQtranslog
AIC<-rbind(AIC(mod1),AIC(mod2),AIC(mod3),AIC(mod4))
BIC<-rbind(BIC(mod1),BIC(mod2),BIC(mod3),BIC(mod4))
r2<-rbind(summary(mod1)$r.squared,
          summary(mod2)$r.squared,
          summary(mod3)$r.squared,
          summary(mod4)$r.squared)
r2.adj<-rbind(summary(mod1)$adj.r.squared,
              summary(mod2)$adj.r.squared,
              summary(mod3)$adj.r.squared,
              summary(mod4)$adj.r.squared)
tab2<-data.frame(cbind(r2,r2.adj,AIC,BIC))
row.names(tab2)<-c("log-log","lin-log","log-lin","translog")
library(knitr)
kable(tab2,
      caption = "Comparação de Modelos, 'Gujarati-frangos'", digits = 3,
      col.names=c("R²","R²Aj","AIC","BIC"),
      "latex", 
      booktabs = T)  

Primeira observação importante: Não se compara valores dos critérios AIC e BIC entre modelos com log e sem log. Assim, cabe comparação de AIC entre os modelos log-log e translog, assim como para o BIC. Já as estatísticas de \(R^2ajustado\) podem ser comparadas. Assim, o modelo de melhor ajuste considerando o \(R^2ajustado\) resultou empate entre o log-log e o translog com \(R^2ajustado=0.978\). Olhando o \(R^2\), o translog foi um pouco melhor que o log-log. Como ambos são log dos dois lados da expressão, podemos comparar seus AIC: o menor foi o do log-log (por causa do sinal negativo), \(AIC=-94.777\). Considerando o BIC, temos a mesma interpretação: log-log foi menor \(BIC=-90.235\). A escolha seria nesse caso para o log-log. Isto indica que a inclusão dos termos cruzados entre \(X_2\) e \(X_3\) assim como seus quadrados, não resultou em melhor especificação. Fazendo a emissão da tabela comparativa dos dois modelos temos a tabela abaixo. É possível constatar que nenhum dos termos cruzados e quadráticos não foram significativos estatisticamente, assim como das variáveis \(X_2\) e \(X_3\). Suspeita-se de uma multicolinearidade neste modelo translog.

mod1$AIC <- AIC(mod1) # incluir AIC no objeto da regressao
mod1$BIC <- BIC(mod1) # incluir BIC no objeto da regressao
mod4$AIC <- AIC(mod4) # incluir AIC no objeto da regressao
mod4$BIC <- BIC(mod4) # incluir BIC no objeto da regressao
resultados<-stargazer(mod1,mod4,type="text",style=("all"),
           keep.stat=c("aic","bic","rsq", "adj.rsq","n"),
           column.labels = c("log-log","translog"))
## 
## =================================================
##                          Dependent variable:     
##                      ----------------------------
##                                 log(Y)           
##                         log-log       translog   
##                           (1)            (2)     
## -------------------------------------------------
## log(X2)                 0.452***        1.050    
##                         (0.025)        (0.787)   
##                        t = 18.284     t = 1.333  
##                        p = 0.000      p = 0.200  
## log(X3)                -0.372***       -2.306    
##                         (0.063)        (3.161)   
##                        t = -5.865    t = -0.729  
##                       p = 0.00001     p = 0.476  
## I(log(X2) * log(X3))                    0.088    
##                                        (0.470)   
##                                       t = 0.187  
##                                       p = 0.855  
## I(0.5 * (log(X2)2))                    -0.142    
##                                        (0.182)   
##                                      t = -0.779  
##                                       p = 0.447  
## I(0.5 * (log(X3)2))                     0.364    
##                                        (1.514)   
##                                       t = 0.240  
##                                       p = 0.813  
## Constant                2.033***        3.698    
##                         (0.116)        (4.098)   
##                        t = 17.497     t = 0.902  
##                        p = 0.000      p = 0.380  
## -------------------------------------------------
## Observations               23            23      
## R2                       0.980          0.983    
## Adjusted R2              0.978          0.978    
## Akaike Inf. Crit.       -94.777        -92.306   
## Bayesian Inf. Crit.     -90.235        -84.357   
## =================================================
## Note:                 *p<0.1; **p<0.05; ***p<0.01

4.4 Variáveis especiais e outliers: dummies e tendência

4.4.1 Variáveis dummy, binárias ou categóricas

As variáveis dummy ou categóricas ou binárias, são variáveis atípicas que buscam diferenciar grupos ou estados ou características comuns a partes da amostra. São atípicas pois a ordem não indica superioridade ou grandeza do valor, por exemplo, uma variável categórica com valor igual 2 numa observação e 1 na outra não quer dizer que uma é duas vezes a outra, mas que uma é da categoria associada ao valor 2 e outra ao valor 1.

Explicando melhor, imagine um cenário em que a questão em uma entrevista pergunte a religião. Imagine que as possíveis respostas sejam: católico, presbiteriano, espírita ou muçulmano. Neste caso, o atributo religião possui quatro (4) possíveis respostas para este exemplo. Seria possível imaginar uma variável que assumiria valores 1, 2, 3 ou 4 conforme a religião respondida. Neste caso, seria uma variável multinomial, mas observe que o valor 4 (muçulmano) não quer dizer que é quatro vezes a resposta de uma observação com valor 1 (católico). Ainda, também não quer dizer que o 4 é maior que o 1. Apenas indica que um é do grupo 4 e outro do 1.

Neste caso, seria interessante trabalhar com variáveis binárias, normalmente associadas às respostas 0 e 1, no sentido de pertencer ou não a um grupo. Por exemplo, uma dummy (ou binária) para indicar católico (\(D_c\) = 1 se for e 0 se não for). Assim, similarmente para as demais respostas, têm-se outras três dummies binárias, uma para cada resposta (presbiteriano – \(D_p\), espírita – \(D_{es}\) ou muçulmano – \(D_{mu}\)).

Uma ideia seria fazer a regressão incluindo estas binárias na expressão:

\[ Y = {\alpha _0} + {\alpha _1}{X_1} + {\alpha _2}{X_2} + {\alpha _3}{D_1} + {\alpha _4}{D_1}{X_1} \\ + {\alpha _5}{D_2} + {\alpha _6}{D_2}{X_1} + {\alpha _7}{D_3} + {\alpha _8}{D_3}{X_1} \\ + {\alpha _9}{D_4} + {\alpha _{10}}{D_4}{X_1} + \varepsilon \]

ou

\[Y = {\alpha _0} + {\alpha _1}{X_1} + {\alpha _2}{X_2} + {\alpha _3}{D_c} + {\alpha _4}{D_c}{X_1} \\ + {\alpha _5}{D_p} + {\alpha _6}{D_p}{X_1} + {\alpha _7}{D_{es}} + {\alpha _8}{D_{es}}{X_1} \\ + {\alpha _9}{D_{mu}} + {\alpha _{10}}{D_{mu}}{X_1} + \varepsilon \]

O leitor poderia observar que em alguns termos a dummy aparece associada apenas ao coeficiente \(\alpha\) e noutros ao \(\alpha X_1\), ou seja, ao coeficiente e a variável \(X_1\). Imagine aqui que \(X_1\) seja uma variável quantitativa contínua. Em uma estimação cujo coeficiente \(\alpha\) fosse não significativo, seria o equivalente a ter um termo nulo, pois a dummy e a variável \(X\) multiplicada pelo coeficiente não significativo retornaria um valor não diferente de zero.

De outra forma, quando o \(\alpha\) for significativo para algum termo contendo a dummy, se está não estiver multiplicada por \(X_1\), seria o equivalente a uma alteração do intercepto \(\alpha_0\). Se estiver multiplicada por \(X_1\), seria o equivalente a uma alteração do coeficiente associado à inclinação de \(X_1\), somando-se o \(\alpha\) da dummy ao \(\alpha_1\). Neste caso, a presença da característica cujo coeficiente da dummy foi significativo, diferente de zero, indica uma curva estimada distinta das demais (no intercepto ou na inclinação ou em ambos).

Entretanto, uma estimação desta forma do exemplo, contendo quatro dummies para as quatro possíveis respostas, geraria um problema de multicolinearidade perfeita com o termo do intercepto. Recorde-se que na matriz de variáveis explicativas também está a coluna de 1 para o intercepto. Mas a soma das colunas das dummies também será 1. Ou seja, não será possível estimar o vetor de coeficientes, pois não será possível computar \((X’X)^{-1}\). Assim, o procedimento normal é excluir uma das dummies, ou seja, sempre que tiver \(m\) possíveis respostas, acrescentam-se \(m-1\) dummies. A dummy excluída do modelo será do grupo básico, e a estimação do modelo quando todos os coeficientes das dummies forem nulos retornará o resultado do grupo básico. Portanto, as observações do grupo básico terão valores zero para as dummies, por não fazer parte daqueles grupos.

Assim, para cada categoria, seria o equivalente a ter as equações como abaixo:

equação católico (\({D_c} = 1\)): \[Y = \left( {{\alpha _0} + {\alpha _3}} \right) + \left( {{\alpha _1} + {\alpha _4}} \right){X_1} + {\alpha _2}{X_2}\]

equação presbiteriano (\({D_p} = 1\)): \[Y = \left( {{\alpha _0} + {\alpha _5}} \right) + \left( {{\alpha _1} + {\alpha _6}} \right){X_1} + {\alpha _2}{X_2}\]

equação espírita (\({D_{es}} = 1\)): \[Y = \left( {{\alpha _0} + {\alpha _7}} \right) + \left( {{\alpha _1} + {\alpha _8}} \right){X_1} + {\alpha _2}{X_2}\]

equação muçulmano (\({D_c} = {D_p} = {D_{es}} = 0\))(BASE): \[Y = {\alpha _0} + {\alpha _1}{X_1} + {\alpha _2}{X_2}\]

Seja o exemplo abaixo, cujas observações respondem a uma pergunta indicando respostas de a até g. Imagine que os nomes sejam os setores de vendas em uma loja de varejo:

Nome Resp
a b c d e f g
Marcelo x
Antônio x
Tassiany x
Elenir x
Joice x
Alexandre x
Adriano x
João x
Pedro x

Para representar estas respostas em variáveis binárias, no exemplo, adota-se o g como o grupo básico. Se forem feitas uma dummy para cada resposta, o quadro ficaria, colocando 1 para pertence e zero para não pertence:

Observação \(D_a\) \(D_b\) \(D_c\) \(D_d\) \(D_e\) \(D_f\) \(D_g\) Soma
Marcelo 1 0 0 0 0 0 0 1
Antônio 0 1 0 0 0 0 0 1
Tassiany 1 0 0 0 0 0 0 1
Elenir 0 0 1 0 0 0 0 1
Joice 0 0 0 1 0 0 0 1
Alexandre 0 0 0 0 1 0 0 1
Adriano 0 0 0 0 0 1 0 1
João 0 0 0 0 0 0 1 1
Pedro 0 0 0 0 0 0 1 1

Observe que a soma da linha é sempre igual a 1. Assim, uma coluna adicional para representar o intercepto seria exatamente igual a soma das colunas de dummies. A solução seria excluir a coluna de \(D_g\), e todas as observações do grupo g ficariam com zeros nas dummies de a até f (João e Pedro).

Observação \(D_a\) \(D_b\) \(D_c\) \(D_d\) \(D_e\) \(D_f\)
Marcelo 1 0 0 0 0 0
Antônio 0 1 0 0 0 0
Tassiany 1 0 0 0 0 0
Elenir 0 0 1 0 0 0
Joice 0 0 0 1 0 0
Alexandre 0 0 0 0 1 0
Adriano 0 0 0 0 0 1
João 0 0 0 0 0 0
Pedro 0 0 0 0 0 0

Estimando um modelo do tipo acima, alterando apenas intercepto, cada grupo teria a equação estimada como abaixo, ou seja, alterando o intercepto relativamente ao grupo básico g:

\[Y = {\alpha _0} + {\alpha _1}{X_1} + {\alpha _2}{X_2} + {\alpha _3}{D_a} + {\alpha _4}{D_b} \\ + {\alpha _5}{D_c} + {\alpha _6}{D_d} + {\alpha _7}{D_e} + {\alpha _8}{D_f} + \varepsilon \]

Quando as dummies forem todas com coeficientes nulos, \(D_a=D_b=D_c=D_d=D_e=D_f=0\), então o modelo se reduz a curva para o grupo g, quando as dummies são nulas:

\[Y = {\alpha _0} + {\alpha _1}{X_1} + {\alpha _2}{X_2} + \varepsilon \]

Assim, os coeficientes \({\alpha _0},{\alpha _1},{\alpha _2}\) representam exatamente o grupo básico g.

Suponha que os coeficientes estimados associados as dummies, sejam significativos, ou \({\alpha _d} \ne0\), d= 3, 4, 5, 6, 7 e 8. Então a expressão para os grupos serão:

para a: \({Y_a} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_3}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

para b: \({Y_b} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_4}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

para c: \({Y_c} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_5}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

para d: \({Y_d} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_6}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

para e: \({Y_e} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_7}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

para f: \({Y_f} = \left( {{{\hat \alpha }_0} + {{\hat \alpha }_8}} \right) + {{\hat \alpha }_1}{X_1} + {{\hat \alpha }_2}{X_2}\)

Os valores de \({\alpha _d} \ne0\), d= 3, 4, 5, 6, 7 e 8, podem ser positivos ou negativos. Quando positivos, indicarão interceptos maiores para o grupo, comparativamente ao grupo básico g. Valores negativos indicarão interceptos menores do que o de g. Similarmente se teria para as inclinações, indicando reações maiores ou menores de \(Y\) com respeito a \(X\).

  • Exemplo producao_de_algodão:

Figura 4.2 QR Code para o exemplo da produção de algodão nos estados. X.

Seja uma estimação da quantidade de algodão (\(Qalg\)) em função da área de algodão (\(Aalg\)), do preço do algodão (\(Palg\)), do preço da soja (\(Psoja\)), para municípios de Mato Grosso do Sul, Mato Grosso e Goiás. É possível dizer que a quantidade de algodão tem um comportamento distinto entre os estados MS, MT e GO?

A rotina para chamar os dados de uma arquivo Excel encontra-se a seguir, porém, optamos por colocá-los dentro do arquivo RMarkdown. A rotina do embeded data está logo na sequência.

# chamando os dados de producao de algodao dos estados do
# centro-oeste com dados da PAM IBGE 1990 a 2000, para 
# cada estado MS MT GO ou seja 33 observacoes
library(readxl); library(foreign)
dados <- read_excel("dados_centro_oeste.xlsx", 
                    sheet = "dados")
# Qalg = quantidade produzida de algodao
# Aalg = área total colhida de algodao 
# Palg = preco do algodao
# Psoja = preco da soja 
# DMS e DMT sao dummies para os estados em que GO é a base
# estado é uma variável indicadora contendo a sigla do estado

A opção gerada pelo dput() dos dados básicos está abaixo:

dados<-structure(list(ano = c(1990, 1991, 1992, 1993, 1994, 1995, 1996, 
1997, 1998, 1999, 2000, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 
1997, 1998, 1999, 2000, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 
1997, 1998, 1999, 2000), Qalg = c(59754, 83650, 83710, 94560, 
101368, 157031, 173796, 189699, 260452, 278363, 254476, 73559, 
90561, 85119, 64735, 77409, 105791, 87952, 56027, 93229, 114521, 
127839, 57634, 73458, 67862, 85641, 91828, 87458, 73553, 78376, 
271038, 630406, 1002836), Aalg = c(35459, 42990, 53772, 38172, 
53773, 69533, 81659, 83234, 186661, 117056, 96718, 44570, 51888, 
73333, 39643, 41135, 60011, 59637, 26604, 49151, 46231, 48450, 
43422, 68443, 53836, 69584, 66059, 69390, 55075, 42259, 106483, 
200182, 257762), Palg = c(0.356572484593691, 0.28548486348212, 
0.18460421844633, 0.206416737228048, 0.415961827791941, 0.306940214830232, 
0.355443864081562, 0.426290579971575, 0.345460690410503, 0.369425952314763, 
0.372826913527653, 0.370110836978266, 0.337634829251245, 0.19012070963983, 
0.18883532150463, 0.514823904914612, 0.340196812424667, 0.303950608442499, 
0.399129289604689, 0.340215816862215, 0.407992489922868, 0.362518549919648, 
0.268432114188467, 0.248378441722003, 0.171583759997412, 0.214788618467748, 
0.511497661369565, 0.304906963153987, 0.28341715278882, 0.359730772000928, 
0.355262834733223, 0.369540331161043, 0.326479031442301), 
Psoja = c(0.129725363498433, 
0.116121616325159, 0.112620111592226, 0.0873969828327483, 0.176972146441714, 
0.103769694520009, 0.149613452870967, 0.1663861049096, 0.143011987528068, 
0.14175993084962, 0.137533111256611, 0.150873051860415, 0.138236213975033, 
0.12167602921687, 0.129874022775396, 0.207511199152738, 0.108008706367883, 
0.154946820778127, 0.172922997949505, 0.138872367383235, 0.148515655529693, 
0.136549826243949, 0.113535605629564, 0.117219268828656, 0.0968498706796199, 
0.0719258443192821, 0.208422118749737, 0.104896138231911, 0.135136436052929, 
0.150488044032018, 0.123091268671333, 0.11957295449546, 0.130580697047997
), DMS = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), DMT = c(0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1), estado = c("go", "go", "go", "go", 
"go", "go", "go", "go", "go", "go", "go", "ms", "ms", "ms", "ms", 
"ms", "ms", "ms", "ms", "ms", "ms", "ms", "mt", "mt", "mt", "mt", 
"mt", "mt", "mt", "mt", "mt", "mt", "mt")), row.names = c(NA, 
-33L), class = c("tbl_df", "tbl", "data.frame"))
attach(dados)

Vamos ver como está a tabela importada:

library(knitr)
kable(dados,caption="Dados do Exercício")
Table 4.1: Dados do Exercício
ano Qalg Aalg Palg Psoja DMS DMT estado
1990 59754 35459 0.3565725 0.1297254 0 0 go
1991 83650 42990 0.2854849 0.1161216 0 0 go
1992 83710 53772 0.1846042 0.1126201 0 0 go
1993 94560 38172 0.2064167 0.0873970 0 0 go
1994 101368 53773 0.4159618 0.1769721 0 0 go
1995 157031 69533 0.3069402 0.1037697 0 0 go
1996 173796 81659 0.3554439 0.1496135 0 0 go
1997 189699 83234 0.4262906 0.1663861 0 0 go
1998 260452 186661 0.3454607 0.1430120 0 0 go
1999 278363 117056 0.3694260 0.1417599 0 0 go
2000 254476 96718 0.3728269 0.1375331 0 0 go
1990 73559 44570 0.3701108 0.1508731 1 0 ms
1991 90561 51888 0.3376348 0.1382362 1 0 ms
1992 85119 73333 0.1901207 0.1216760 1 0 ms
1993 64735 39643 0.1888353 0.1298740 1 0 ms
1994 77409 41135 0.5148239 0.2075112 1 0 ms
1995 105791 60011 0.3401968 0.1080087 1 0 ms
1996 87952 59637 0.3039506 0.1549468 1 0 ms
1997 56027 26604 0.3991293 0.1729230 1 0 ms
1998 93229 49151 0.3402158 0.1388724 1 0 ms
1999 114521 46231 0.4079925 0.1485157 1 0 ms
2000 127839 48450 0.3625185 0.1365498 1 0 ms
1990 57634 43422 0.2684321 0.1135356 0 1 mt
1991 73458 68443 0.2483784 0.1172193 0 1 mt
1992 67862 53836 0.1715838 0.0968499 0 1 mt
1993 85641 69584 0.2147886 0.0719258 0 1 mt
1994 91828 66059 0.5114977 0.2084221 0 1 mt
1995 87458 69390 0.3049070 0.1048961 0 1 mt
1996 73553 55075 0.2834172 0.1351364 0 1 mt
1997 78376 42259 0.3597308 0.1504880 0 1 mt
1998 271038 106483 0.3552628 0.1230913 0 1 mt
1999 630406 200182 0.3695403 0.1195730 0 1 mt
2000 1002836 257762 0.3264790 0.1305807 0 1 mt

Neste exemplo, para \(m=3\) respostas, colocam-se \(m-1=2\) dummies: \(DMS\) e \(DMT\). Goiás ficou como grupo básico, ou seja, para \(DMS=DMT=0\). Conforme a estimação do Quadro 4.13, as dummies foram inseridas alterando o intercepto, com valores das probabilidades, respectivamente: 0,98 e 0,09, DMS e DMT. Assim, não foram coeficientes significativos diferentes de zero para \(log(Psoja)\) e \(DMS\), e pode-se dizer que não houve diferença entre os interceptos de MS e o grupo básico de GO. Mas pode-se dizer que existe diferença do intercepto de MT em relação a GO pois o valor da probabilidade de 0,09 indica que a \(DMT\) teve coeficiente significativo diferente de zero para MT.

attach(dados)
reg.empilhada<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja))
summary(reg.empilhada)
## 
## Call:
## lm(formula = log(Qalg) ~ log(Aalg) + log(Palg) + log(Psoja))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.46795 -0.14723  0.03913  0.14962  0.51140 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.08883    1.10940  -0.981   0.3345    
## log(Aalg)    1.15505    0.09816  11.767 1.46e-12 ***
## log(Palg)    0.63658    0.26442   2.407   0.0227 *  
## log(Psoja)  -0.35201    0.33259  -1.058   0.2986    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2711 on 29 degrees of freedom
## Multiple R-squared:  0.854,  Adjusted R-squared:  0.8389 
## F-statistic: 56.56 on 3 and 29 DF,  p-value: 3.118e-12
# incluindo Akaike e Schwarz no objeto reg.empilhada
reg.empilhada$AIC<- AIC(reg.empilhada)
reg.empilhada$BIC<- BIC(reg.empilhada)

reg.dint<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+DMS+DMT, 
             data=dados)
summary(reg.dint)
## 
## Call:
## lm(formula = log(Qalg) ~ log(Aalg) + log(Palg) + log(Psoja) + 
##     DMS + DMT, data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.58105 -0.13666 -0.00039  0.19076  0.57450 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.800698   1.251232  -1.439   0.1616    
## log(Aalg)    1.204696   0.103819  11.604 5.33e-12 ***
## log(Palg)    0.653454   0.258398   2.529   0.0176 *  
## log(Psoja)  -0.475624   0.336745  -1.412   0.1693    
## DMS         -0.002898   0.121463  -0.024   0.9811    
## DMT         -0.202506   0.114617  -1.767   0.0886 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2637 on 27 degrees of freedom
## Multiple R-squared:  0.8714, Adjusted R-squared:  0.8476 
## F-statistic: 36.58 on 5 and 27 DF,  p-value: 3.33e-11
reg.dint$AIC<- AIC(reg.dint)
reg.dint$BIC<- BIC(reg.dint)

stargazer::stargazer(list(reg.empilhada,reg.dint),
          title="Título: Resultados das Regressões",
          align=TRUE,
          type = "text", 
          style="commadefault",
          keep.stat=c("aic","bic","rsq", "adj.rsq","n")
          )
## 
## Título: Resultados das Regressões
## ================================================
##                         Dependent variable:     
##                     ----------------------------
##                              log(Qalg)          
##                          (1)            (2)     
## ------------------------------------------------
## log(Aalg)              1,155***      1,205***   
##                        (0,098)        (0,104)   
##                                                 
## log(Palg)              0,637**        0,653**   
##                        (0,264)        (0,258)   
##                                                 
## log(Psoja)              -0,352        -0,476    
##                        (0,333)        (0,337)   
##                                                 
## DMS                                   -0,003    
##                                       (0,121)   
##                                                 
## DMT                                   -0,203*   
##                                       (0,115)   
##                                                 
## Constant                -1,089        -1,801    
##                        (1,109)        (1,251)   
##                                                 
## ------------------------------------------------
## Observations              33            33      
## R2                      0,854          0,871    
## Adjusted R2             0,839          0,848    
## Akaike Inf. Crit.       13,233        13,061    
## Bayesian Inf. Crit.     20,716        23,536    
## ================================================
## Note:                *p<0,1; **p<0,05; ***p<0,01

A representação das equações para cada grupo serão, partindo da equação geral:

Log(Qalg) = 1.205* Log(Aalg) + 0.653* Log(Palg) - 0.476* Log(Psoja) - 0.003* DMS - 0.203*DMT - 1.801

Para GO, DMS=DMT=0, com PSOJA e intercepto C não significativos:

Log(Qalg) = 1.205* Log(Aalg) + 0.653*Log(Palg)

Para MS: DMT=0, mas DMS não teve coeficiente significativo:

Log(Qalg) = 1.205* Log(Aalg) + 0.653*Log(Palg)

Para MT: DMS=0, ou seja, esta curva está pouco abaixo das curvas de MS e GO:

Log(Qalg) = 1.205* Log(Aalg) + 0.653*Log(Palg) - 0.203

Para uma estimação contendo alterações nas inclinações de \(Aalg\) e no intercepto, faremos uso da variável estado e das opções com DMS e DMT. A variável estado é obtida pela função dummy do pacote dummies:

# o pacote cria estadogo, estadoms,estadomt
# 
library(dummies)
dummies<-dummy(estado, drop=FALSE)
colnames(dummies)<-c("estadogo", "estadoms","estadomt")
dados<-cbind(dados,dummies)
# o pacote cria dummies usando o nome da variável 
# justaposto com o codigo das observacoes: 
# estadogo, estadoms,estadomt
#print(dados)

reg.dum<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+
              estado+I(log(Aalg)*DMS)+I(log(Aalg)*DMT), 
            data=dados)
reg.dum$AIC<- AIC(reg.dum)
reg.dum$BIC<- BIC(reg.dum)
#summary(reg.dum)
reg.dum2<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+
               DMS+DMT+I(log(Aalg)*DMS)+I(log(Aalg)*DMT), 
             data=dados)
reg.dum2$AIC<- AIC(reg.dum2)
reg.dum2$BIC<- BIC(reg.dum2)
stargazer::stargazer(list(reg.dum,reg.dum2),
          title="Título: Resultados das Regressões",
          align=TRUE,
          type = "text", 
          style="commadefault",
          keep.stat=c("aic","bic","rsq", "adj.rsq","n")
          )
## 
## Título: Resultados das Regressões
## ================================================
##                         Dependent variable:     
##                     ----------------------------
##                              log(Qalg)          
##                          (1)            (2)     
## ------------------------------------------------
## log(Aalg)              0,926***      0,926***   
##                        (0,134)        (0,134)   
##                                                 
## log(Palg)              0,499**        0,499**   
##                        (0,207)        (0,207)   
##                                                 
## log(Psoja)              -0,339        -0,339    
##                        (0,272)        (0,272)   
##                                                 
## estadoms                2,855                   
##                        (3,272)                  
##                                                 
## estadomt              -7,201***                 
##                        (1,952)                  
##                                                 
## DMS                                    2,855    
##                                       (3,272)   
##                                                 
## DMT                                  -7,201***  
##                                       (1,952)   
##                                                 
## I(log(Aalg) * DMS)      -0,276        -0,276    
##                        (0,301)        (0,301)   
##                                                 
## I(log(Aalg) * DMT)     0,624***      0,624***   
##                        (0,174)        (0,174)   
##                                                 
## Constant                1,408          1,408    
##                        (1,625)        (1,625)   
##                                                 
## ------------------------------------------------
## Observations              33            33      
## R2                      0,926          0,926    
## Adjusted R2             0,906          0,906    
## Akaike Inf. Crit.       -1,353        -1,353    
## Bayesian Inf. Crit.     12,115        12,115    
## ================================================
## Note:                *p<0,1; **p<0,05; ***p<0,01

Observe que neste caso, não foram significativos os coeficientes de DMS*Log(Aalg), Log(Psoja), DMS e Constante. Assim, as expressões serão, omitindo os termos não significativos:

Log(Qalg) = 0.926* Log(Aalg) + 0.624* DMT* LOG(AALG) + 0.499* Log(Palg) - 7.201*DMT

Para GO: Log(Qalg) = 0.926* Log(Aalg) + 0.624* DMT* Log(Aalg) + 0.499* Log(Palg)
Para MS: Log(Qalg) = 0.926* Log(Aalg) + 0.624* DMT* Log(Aalg) + 0.499* Log(Palg)
Para MT: Log(Qalg) = (0.926+ 0.624)* Log(Aalg) + 0.499* Log(Palg) - 7.201

Assim, conclui-se que a reação de QALG a AALG para MT é maior que em GO e MS, mas a curva de MT está em nível mais baixo que os demais.

4.4.2 Variável tendência

Este tipo de variável é típico dos modelos de série temporal, ou seja, com dados organizados no tempo. Uma variável tendência será criada para considerar a evolução temporal de modo explícito e evitar regressões espúrias.

É uma variável com característica básica de que ao passar da observação 1 para 2, tem-se exatamente a mudança de um período de tempo. Assim, o fato de ser um valor, por exemplo, 30, indica 2 períodos a frente de outro igual a 28. Existe uma ordem implícita e também a cada observação se tem a mudança de um período igual.

Normalmente se usa esta variável em cálculos da taxa geométrica de crescimento. Seja uma variável V de periodicidade anual que se deseja saber a variação anual num período. Faz a regressão log linear de logv = f(t), em que t é a variável tendência, que pode ser 1,2,3, … ou por exemplo 1990,1991, 1992, … . O que importa é que a alteração é sempre de um período de tempo e sequencial.

Agora calcularei a \(TGC\) (taxa geométrica de crescimento) para a variável \(Qalg\). Também chamado de growth model em Gujarati (2015,p.33-35, Econometrics by example), para o modelo log-linear (ou modelo semilog) do tipo:

\[ \ln Qalg_t= \beta_{1}+ \beta_{2}t+\varepsilon_t \]

em que \(t\) é a variável tendência para os anos de 1990 a 2000. O parâmetro \(\beta_{2}\) é o coeficiente de interesse, da inclinação, o qual mede a mudança relativa no regressando para uma dada mudança absoluta no regressor - é a taxa instantânea de crescimento. A \(TGC\) será a taxa composta (para um período de tempo) de crescimento. A \(TGC\) será

\[ TGC = [e^{\beta_{2}}-1)]*100 \]

# sejam as variáveis v para a serie que se quer 
# a TGC e t para o ano

# para Qalg MT
vmt<-dados[23:33,2]
vmt
##  [1]   57634   73458   67862   85641   91828   87458   73553   78376  271038
## [10]  630406 1002836
t<-dados[23:33,1]   # anos 1990 a 2000
logv<-log(vmt)
eq=lm(logv~t)
summary(eq)
## 
## Call:
## lm(formula = logv ~ t)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.99807 -0.25869  0.05916  0.38977  0.82456 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)   
## (Intercept) -471.29928  113.40011  -4.156  0.00246 **
## t              0.24215    0.05684   4.260  0.00211 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5962 on 9 degrees of freedom
## Multiple R-squared:  0.6685, Adjusted R-squared:  0.6316 
## F-statistic: 18.15 on 1 and 9 DF,  p-value: 0.002111
# pego o segundo parâmetro - o primeiro é o intercepto
beta <- summary(eq)$coefficients[2]  
# Calculo da TGC
TGC=I((exp(beta)-1)*100)
TGC
## [1] 27.39809

Ou seja, neste caso temos uma TGC de 27.39% ao ano para Qalg de MT. Deve-se atentar que o parâmetro de \(t\) na regressão (\(\beta_{2}\)) foi estatisticamente significativo (Pr(>|t|) =0.00211, ou seja, menor que 10% de significância). Se o coeficiente (\(\beta_{2}\)) não for significativo, isto significará que a TGC não é estatisticamente diferente de zero.

Por exemplo, na rotina a seguir, o parâmetro não é estatisticamente significativo:

tgc.dados<-structure(
  list(v = c(100, 112, 145, 178, 134, 104, 108, 112, 110), 
       t2 = c(91, 92, 93, 94, 95, 96, 97, 98, 99)), 
  row.names = c(NA, -9L), 
  class = c("tbl_df", "tbl", "data.frame"))
attach(tgc.dados)
logv<-log(v)
eq<- lm(logv~t2)
summary(eq)
## 
## Call:
## lm(formula = logv ~ t2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.23625 -0.11049 -0.04155  0.10611  0.37764 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  5.97187    2.43596   2.452    0.044 *
## t2          -0.01242    0.02563  -0.485    0.643  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1985 on 7 degrees of freedom
## Multiple R-squared:  0.03247,    Adjusted R-squared:  -0.1058 
## F-statistic: 0.2349 on 1 and 7 DF,  p-value: 0.6427
beta <- summary(eq)$coefficients[2]
(TGC=I((exp(beta)-1)*100))
## [1] -1.234577
#[1] -1.234577

Como o coeficiente não foi significativo estatisticamente a 10% de significância, ou seja, o coeficiente da variável \(t\) foi -0.012 com probabilidade do teste de significância igual a 0.643 (portanto, maior que 10%), então a taxa geométrica de crescimento deve ser considerada zero!

4.4.3 Identificação de outliers do modelo

Os valores atípicos ou outliers são observações com valores muito diferentes da maioria, ou da média. Estes valores poderão alterar os valores estimados dos coeficientes e invalidar os resultados obtidos caso não sejam tratados adequadamente.

Em geral se utilizam gráficos tipo scatter (dispersão) ou box-plot associados aos valores do desvio-padrão e seus múltiplos como critérios para julgar se os valores estão muito distintos da média. Por exemplo, na Figura 4.4, observam-se alguns pontos muito destacados dos demais, ou valores atípicos. Tratam-se de observações dos setores censitários de Sinop-MT, Brasil, a partir do Censo Agropecuário de 2006. Maiores detalhes podem ser encontrados em http://rpubs.com/amrofi/exercicio_sinop.

  • Exemplo sinop:

Figura 4.3 QR Code para o exemplo da produção de soja nos setores censitários de Sinop-MT em 2006. X.

O exercício traz dados dos 59 setores censitários de Sinop-MT, a partir do Censo Agropecuário de 2006. As variaveis foram logaritmizadas no excel. VP = valor total da produção; AREA = terra (medida através da área total colhida); QTMAQ = capital (medido através da quantidade total de maquinários), QMO = trabalho (medido através da mão de obra ocupada por pessoas com mais de 14 anos), PCALC = tecnologia (medida através da proporção do uso de calcário); PADUB = tecnologia (medida através da proporção do uso de adubo); PAGROT = tecnologia (medida através da proporção do uso de agrotóxico); PNIVEL = tecnologia (medida através da proporção do uso de curva de nível); PPRAGA = tecnologia (medida através da proporção do uso de controle geral de pragas); e, PROT = tecnologia (medida através da proporção do uso de rotação de culturas).

Gráfico de dispersão para identificação de outliers.

#Buscando os outliers
dispersao<-plot(PADUB~VP)

Os gráficos de box-plot mostram o centro e a dispersão dos dados. O box refere-se aos limites dados pelo primeiro e terceiro quartis. O ponto ao meio, dentro do box, indica a média. A mediana é o traço horizontal no box. Os traços horizontais denotam os inner fences e o staple: limites a partir dos quais são detectados outliers (ver Figura 4.4).

Figura 4 4. Detalhamento dos limites do box-plot.

Figura 4.5 Gráfico de box-plot para identificação de outliers.

Quando se tem dados com outliers, uma alternativa é distinguir grupos utilizando as dummies. Esta situação poderá auxiliar a melhor incorporar esta informação no modelo sem, no entanto excluir a observação. Esta opção de excluir a observação atípica poderá gerar problemas de viés de seleção da amostra.

No R, por meio do comando bp1_vp<-boxplot(VP) tem-se:

bp1_vp<-boxplot(VP, names=c("VP"))

# retorna os valores de VP outliers
(bp1_vp_out<-bp1_vp$out)  
## [1] 105352999  69309029  79804101 110434855  66886216  52673412  58868284
## [8]  73931129

Para as demais variáveis seria com o comando abaixo e gerando a Figura 4.7.

bp2_proportions<-boxplot(PCALC,PADUB,
      PAGROT,PNIVEL,PPRAGA,PROT,horizontal = TRUE,
      names = c("PCALC","PADUB","PAGROT","PNIVEL","PPRAGA","PROT"),
      main = "Figura 4 7. Box-plot das variáveis de proporções 
      de práticas tecnológicas PCALC, PADUB, PAGROT, 
      PNIVEL, PPRAGA, PROT.")

Um boxplot que julgo mais útil é por meio do pacote car, que reporta qual a observação atípica.

library(car)
Boxplot(VP,label=dados$obs)

## [1]  6  7 34 35 37 38 44 45

Vamos utilizar o pacote stargazer para organizar as saídas de resultados. Se a saída fosse apenas pelo comando summary, sairia da forma:

regressao1<-lm(log(VP)~log(AREA)+log(QMO)+log(PPRAGA)+log(PROT))
regressao1$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
suppressMessages(library(stargazer))
stargazer(regressao1, 
          title = "Título: Resultado da Regressão OLS", 
          align = TRUE, type = "text", 
          style = "all", 
          keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))
## 
## Título: Resultado da Regressão OLS
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                               log(VP)          
## -----------------------------------------------
## log(AREA)                    1.041***          
##                               (0.025)          
##                             t = 41.000         
##                              p = 0.000         
## log(QMO)                      -0.020           
##                               (0.039)          
##                             t = -0.514         
##                              p = 0.610         
## log(PPRAGA)                   -0.006           
##                               (0.007)          
##                             t = -0.904         
##                              p = 0.370         
## log(PROT)                    -0.018**          
##                               (0.008)          
##                             t = -2.197         
##                              p = 0.033         
## Constant                     6.496***          
##                               (0.279)          
##                             t = 23.279         
##                              p = 0.000         
## -----------------------------------------------
## Observations                    59             
## R2                             0.971           
## Adjusted R2                    0.969           
## Akaike Inf. Crit.             36.063           
## Bayesian Inf. Crit.           48.528           
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01
summary(regressao1)
## 
## Call:
## lm(formula = log(VP) ~ log(AREA) + log(QMO) + log(PPRAGA) + log(PROT))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.35851 -0.15577 -0.03277  0.08441  1.80533 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.495877   0.279044  23.279   <2e-16 ***
## log(AREA)    1.041318   0.025398  41.000   <2e-16 ***
## log(QMO)    -0.020008   0.038909  -0.514   0.6092    
## log(PPRAGA) -0.006484   0.007170  -0.904   0.3698    
## log(PROT)   -0.018056   0.008217  -2.197   0.0323 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3101 on 54 degrees of freedom
## Multiple R-squared:  0.9713, Adjusted R-squared:  0.9691 
## F-statistic: 456.2 on 4 and 54 DF,  p-value: < 2.2e-16

Outra alternativa é observar os gráficos dos diagnósticos da regressão, em que se podem ver os outliers 51 e 54 na Figura 4.9.

split.screen(c(2,2))
## [1] 1 2 3 4
screen(1)
reg1.plot1<-plot(regressao1, which = 1)

screen(2)
reg1.plot2<-plot(regressao1, which = 2)

screen(3)
reg1.plot3<-plot(regressao1, which = 3) 

screen(4)
reg1.plot4<-plot(regressao1, which = 4)

close.screen(all = TRUE)    # exit split-screen mode

Estes outliers (observações 51 e 54) são outliers da regressão e não outliers da série de dados.

Outra opção para investigar outliers é o teste de Bonferroni do pacote ‘car’ do R, em que tem-se H0: a observação i não difere das demais observações, e portanto, i não é um outlier. Se o P-value foi menor que 0.10, rejeito H0 e tem-se um outlier! O ideal é retirar ou “controlar” a observação (por exemplo, por meio de uma dummy) e depois refazer o teste até não ter mais outliers (quando a probabilidade será detectada maior que 0.10).O teste acusa apenas a observação 54 como outlier.

library(car)
outlierTest(regressao1)
##    rstudent unadjusted p-value Bonferroni p
## 54 9.789123         1.7633e-13   1.0404e-11

Conforme o box-plot da variável VPROD, excluindo-se os outliers 1 e 2, tem-se a Figura 4.10. Para retirá-los, criaremos um novo dataset e farei a nova regressão.

# criando dataset excluindo as observacoes 51 e 54
dados2<-dados[dados$D51_54==0, ]
attach(dados2)
#View(dados2)
regressao2<-lm(log(VP)~log(AREA)+log(QMO)+
                 log(PPRAGA)+log(PROT),data=dados2)
results<-stargazer::stargazer(
  list(regressao1,regressao2),
  align = TRUE, type = "text", 
  style = "all", 
  keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))
## 
## ================================================
##                         Dependent variable:     
##                     ----------------------------
##                               log(VP)           
##                          (1)            (2)     
## ------------------------------------------------
## log(AREA)              1.041***      1.052***   
##                        (0.025)        (0.013)   
##                       t = 41.000    t = 80.874  
##                       p = 0.000      p = 0.000  
## log(QMO)                -0.020        -0.038*   
##                        (0.039)        (0.020)   
##                       t = -0.514    t = -1.858  
##                       p = 0.610      p = 0.069  
## log(PPRAGA)             -0.006       -0.010**   
##                        (0.007)        (0.004)   
##                       t = -0.904    t = -2.655  
##                       p = 0.370      p = 0.011  
## log(PROT)              -0.018**      -0.019***  
##                        (0.008)        (0.004)   
##                       t = -2.197    t = -4.475  
##                       p = 0.033     p = 0.00005 
## Constant               6.496***      6.423***   
##                        (0.279)        (0.144)   
##                       t = 23.279    t = 44.591  
##                       p = 0.000      p = 0.000  
## ------------------------------------------------
## Observations              59            57      
## R2                      0.971          0.993    
## Adjusted R2             0.969          0.992    
## Akaike Inf. Crit.       36.063                  
## Bayesian Inf. Crit.     48.528                  
## ================================================
## Note:                *p<0.1; **p<0.05; ***p<0.01
# montando os vários gráficos de diagnosticos da regressao
# rodando novo teste de Bonferroni para outlier 
# na regressao sem obs 51 e 54
car::outlierTest(regressao2)
## No Studentized residuals with Bonferroni p < 0.05
## Largest |rstudent|:
##    rstudent unadjusted p-value Bonferroni p
## 8 -2.375175           0.021338           NA
u.hat2<-resid(regressao2)
t.test(u.hat2)
## 
##  One Sample t-test
## 
## data:  u.hat2
## t = 4.4084e-17, df = 56, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.04051635  0.04051635
## sample estimates:
##    mean of x 
## 8.916136e-19
hist.reg2<- hist(u.hat2, freq = FALSE)
curve(dnorm, add = TRUE,col="red")

split.screen(c(2,2))
## [1] 1 2 3 4
screen(1)
reg2.plot1<-plot(regressao2, which = 1)

screen(2)
reg2.plot2<-plot(regressao2, which = 2)

screen(3)
reg2.plot3<-plot(regressao2, which = 3) 

screen(4)
reg2.plot4<-plot(regressao2, which = 4)

close.screen(all = TRUE)    # exit split-screen mode
  • Opção com dummies para os outliers

Neste caso, optaremos por manter o dataset com todas as observações e controlaremos os efeitos para os outliers 51 e 54. Observe que agora o modelo fica melhor que sem as dummies para outliers.

mod51_54<-lm(log(VP)~log(AREA)+log(QMO)+
               log(PPRAGA)+log(PROT)+D51_54, 
             data = dados)
summary(mod51_54)
## 
## Call:
## lm(formula = log(VP) ~ log(AREA) + log(QMO) + log(PPRAGA) + log(PROT) + 
##     D51_54, data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.53609 -0.12275  0.02064  0.11632  0.53609 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.521749   0.170251  38.307  < 2e-16 ***
## log(AREA)    1.049127   0.015515  67.619  < 2e-16 ***
## log(QMO)    -0.052553   0.023977  -2.192 0.032811 *  
## log(PPRAGA) -0.009423   0.004385  -2.149 0.036211 *  
## log(PROT)   -0.018117   0.005013  -3.614 0.000671 ***
## D51_54       1.323510   0.137910   9.597 3.48e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1892 on 53 degrees of freedom
## Multiple R-squared:  0.9895, Adjusted R-squared:  0.9885 
## F-statistic: 999.2 on 5 and 53 DF,  p-value: < 2.2e-16
mod51_54$AIC <- AIC(mod51_54)
mod51_54$BIC <- BIC(mod51_54)
#suppressMessages(library(stargazer))
stargazer(list(regressao1,mod51_54), 
          title = "Título: Resultado da Regressão OLS", 
          align = TRUE, type = "text", 
          style = "all", 
          keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))
## 
## Título: Resultado da Regressão OLS
## ================================================
##                         Dependent variable:     
##                     ----------------------------
##                               log(VP)           
##                          (1)            (2)     
## ------------------------------------------------
## log(AREA)              1.041***      1.049***   
##                        (0.025)        (0.016)   
##                       t = 41.000    t = 67.619  
##                       p = 0.000      p = 0.000  
## log(QMO)                -0.020       -0.053**   
##                        (0.039)        (0.024)   
##                       t = -0.514    t = -2.192  
##                       p = 0.610      p = 0.033  
## log(PPRAGA)             -0.006       -0.009**   
##                        (0.007)        (0.004)   
##                       t = -0.904    t = -2.149  
##                       p = 0.370      p = 0.037  
## log(PROT)              -0.018**      -0.018***  
##                        (0.008)        (0.005)   
##                       t = -2.197    t = -3.614  
##                       p = 0.033      p = 0.001  
## D51_54                               1.324***   
##                                       (0.138)   
##                                      t = 9.597  
##                                      p = 0.000  
## Constant               6.496***      6.522***   
##                        (0.279)        (0.170)   
##                       t = 23.279    t = 38.307  
##                       p = 0.000      p = 0.000  
## ------------------------------------------------
## Observations              59            59      
## R2                      0.971          0.990    
## Adjusted R2             0.969          0.989    
## Akaike Inf. Crit.       36.063        -21.358   
## Bayesian Inf. Crit.     48.528        -6.815    
## ================================================
## Note:                *p<0.1; **p<0.05; ***p<0.01
  • Alterando interceptos e inclinações da AREA para 51 e 54
mod51_54incl<-lm(log(VP)~log(AREA)+log(QMO)+log(PPRAGA)+
                   log(PROT)+D51_54+I(log(AREA)*D51_54), 
                 data = dados)
summary(mod51_54incl)
## 
## Call:
## lm(formula = log(VP) ~ log(AREA) + log(QMO) + log(PPRAGA) + log(PROT) + 
##     D51_54 + I(log(AREA) * D51_54), data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.30924 -0.11933  0.00000  0.09946  0.28607 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            6.422928   0.144040  44.591  < 2e-16 ***
## log(AREA)              1.052109   0.013009  80.874  < 2e-16 ***
## log(QMO)              -0.037739   0.020313  -1.858   0.0688 .  
## log(PPRAGA)           -0.009752   0.003673  -2.655   0.0105 *  
## log(PROT)             -0.018799   0.004201  -4.475 4.19e-05 ***
## D51_54                 9.003078   1.586565   5.675 6.26e-07 ***
## I(log(AREA) * D51_54) -0.862481   0.177712  -4.853 1.15e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1585 on 52 degrees of freedom
## Multiple R-squared:  0.9928, Adjusted R-squared:  0.9919 
## F-statistic:  1191 on 6 and 52 DF,  p-value: < 2.2e-16
mod51_54incl$AIC <- AIC(mod51_54incl)
mod51_54incl$BIC <- BIC(mod51_54incl)
#suppressMessages(library(stargazer))
stargazer(list(mod51_54incl,mod51_54), 
          title = "Título: Resultado da Regressão OLS", 
          align = TRUE, type = "text", 
          style = "all", 
          keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))
## 
## Título: Resultado da Regressão OLS
## ==================================================
##                           Dependent variable:     
##                       ----------------------------
##                                 log(VP)           
##                            (1)            (2)     
## --------------------------------------------------
## log(AREA)                1.052***      1.049***   
##                          (0.013)        (0.016)   
##                         t = 80.874    t = 67.619  
##                         p = 0.000      p = 0.000  
## log(QMO)                 -0.038*       -0.053**   
##                          (0.020)        (0.024)   
##                         t = -1.858    t = -2.192  
##                         p = 0.069      p = 0.033  
## log(PPRAGA)              -0.010**      -0.009**   
##                          (0.004)        (0.004)   
##                         t = -2.655    t = -2.149  
##                         p = 0.011      p = 0.037  
## log(PROT)               -0.019***      -0.018***  
##                          (0.004)        (0.005)   
##                         t = -4.475    t = -3.614  
##                        p = 0.00005     p = 0.001  
## D51_54                   9.003***      1.324***   
##                          (1.587)        (0.138)   
##                         t = 5.675      t = 9.597  
##                        p = 0.00000     p = 0.000  
## I(log(AREA) * D51_54)   -0.862***                 
##                          (0.178)                  
##                         t = -4.853                
##                        p = 0.00002                
## Constant                 6.423***      6.522***   
##                          (0.144)        (0.170)   
##                         t = 44.591    t = 38.307  
##                         p = 0.000      p = 0.000  
## --------------------------------------------------
## Observations                59            59      
## R2                        0.993          0.990    
## Adjusted R2               0.992          0.989    
## Akaike Inf. Crit.        -41.400        -21.358   
## Bayesian Inf. Crit.      -24.780        -6.815    
## ==================================================
## Note:                  *p<0.1; **p<0.05; ***p<0.01

5 Violação dos pressupostos: média e normalidade dos resíduos

5.1 Média zero dos resíduos

A maior dificuldade é que não existe teste formal para essa pressuposição. É similar a um erro de especificação do modelo, como por exemplo, com variáveis relevantes omitidas do modelo. O modelo com uma correta especificação provavelmente não terá problemas com média dos resíduos não nula.

Normalmente se faz o teste simples de “H0: média igual a zero” para investigar a violação ou não da pressuposição. Valores elevados para a probabilidade indicarão a não-rejeição da hipótese nula e confirmação da pressuposição.

No R, assim como será visto também em outros softwares, faz-se a estimação da regressão, gera-se a série de resíduos e testa se a média desta série é zero. Para obter os resíduos, faz-se resid(regressao).

  • Exemplo sinop (ver capítulo da violação da especificação):
#obtendo residuos do modelo
u.hat<-resid(regressao1)
u.hat
##            1            2            3            4            5            6 
## -0.174850609 -0.012678148 -0.020593163 -0.286070937  0.162888449 -0.096015009 
##            7            8            9           10           11           12 
## -0.120594387 -0.302767125 -0.223128321  0.045685710  0.246465497 -0.019311122 
##           13           14           15           16           17           18 
## -0.187851144 -0.115828370 -0.155105541 -0.230579713  0.096317031 -0.133384939 
##           19           20           21           22           23           24 
## -0.237323386  0.008075268  0.044066328  0.200870553  0.041872603 -0.061033219 
##           25           26           27           28           29           30 
## -0.184940788 -0.233421897 -0.289243771 -0.002670153 -0.156434505  0.072496831 
##           31           32           33           34           35           36 
## -0.113523308 -0.358511284  0.218644733  0.121759126 -0.153545584  0.172861769 
##           37           38           39           40           41           42 
## -0.033423018  0.004438535  0.006998865 -0.189545313 -0.064328543  0.148195994 
##           43           44           45           46           47           48 
## -0.141714385  0.017418670 -0.149733068  0.210476148  0.106280133 -0.022229403 
##           49           50           51           52           53           54 
##  0.211855004 -0.032769196  0.685646266 -0.184801630  0.018763768  1.805327879 
##           55           56           57           58           59 
##  0.206069915  0.195336677 -0.056312310 -0.091973193 -0.212575269

Uma primeira forma é ver os gráficos de diagnósticos já preparados pela função lm do R e fazendo graficamente os resíduos em função dos valores estimados da variável dependente (gráfico residual) ou em função dos valores de uma das variáveis independentes. Ou seja, faz-se o gráfico Residuals x fitted com: plot(regressao, which = 1).

Como exemplo, reproduz-se na Figura 5.1 o gráfico Residuals x fitted do exemplo da produção de soja em setores censitários de Sinop-MT:

reg1.plot1<-plot(regressao1, which = 1)
Figura 5.1 . Gráfico dos resíduos versus valores previstos da variável dependente.

Figure 5.1: Figura 5.1 . Gráfico dos resíduos versus valores previstos da variável dependente.


Figura 5.1 . Gráfico dos resíduos versus valores previstos da variável dependente.

Na Figura 5.1, os resultados devem se distribuir aleatoriamente ao longo de uma ‘reta’ com ‘dispersão’ uniforme, ou seja, dentro de alguma ‘banda’ de variação, em torno da abscissa ‘zero’. Havendo algum padrão tem-se indicação de presença de autocorrelação residual. Havendo dispersão variável tem-se indicação de presença de heterocedasticidade residual. Fora da abscissa zero, a média é não nula. A hipótese de teste H0: a média dos resíduos é zero. O script para R está na Figura 5.2.

# teste dos residuos do modelo
u.hat_reg1<-resid(regressao1)
t.test(u.hat_reg1)
## 
##  One Sample t-test
## 
## data:  u.hat_reg1
## t = -2.2888e-17, df = 58, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.07798565  0.07798565
## sample estimates:
##     mean of x 
## -8.917103e-19


Figura 5.2. Script para o teste de média zero dos resíduos no R, exemplo dos setores censitários de Sinop-MS.

Olhando os resultados para a hipótese H0: a média dos resíduos é zero, tem-se logo abaixo a hipótese alternativa: alternative hypothesis: true mean is not equal to 0. Para o valor da estatística de teste \(t = -2.2888e-17\), a probabilidade p-value = 1 indica pela não rejeição de H0, e a média pode ser considerada como zero.

5.2 Normalidade dos resíduos

Nesta seção, analisa-se a Pressuposição: O resíduo estimado tem distribuição normal, com média zero e variância constante. Um parágrafo bastante útil é o de Fox (2016, p.297):

The assumption of normally distributed errors is almost always arbitrary. Nevertheless, the central limit theorem ensures that, under very broad conditions, inference based on the leastsquares estimator is approximately valid in all but small samples. Why, then, should we be concerned about non-normal errors?

Ou seja, em geral, a violação deste pressuposto pode ser justificada em muitos casos pela alegação do Teorema do Limite Central, ou no inglês, \(CLT\) (Central Limit Theorem). A ideia de que no limite, quando se aumenta o tamanho da amostra, a distribuição tende à normalidade.

A teoria estatística, de outro lado, assegura que o estimador de \(MQO\) é o melhor estimador linear não tendencioso somente em presença de resíduos normais. As distribuições de resíduos com “caudas pesadas” (heavy-tailed), portanto, não-normais, poderão significar presença de outliers (observações atípicas). Muitas vezes o argumento é de que os estimadores de mínimos quadrados necessitam as propriedades de Gauss-Markov para eficiência e não-tendenciosidade, mas que não requerem a normalidade dos resíduos (FOX, 2016).

É um fato comumente confirmado que os testes formais de normalidade rejeitam a hipótese de normalidade dos resíduos em conjuntos amostrais grandes, como os big data. Pode-se provar que quando o tamanho da amostra (\(n\)) fica muito grande, o menor desvio da perfeita normalidade levará a um resultado significativo. Considerando que todo conjunto de dados tem algum grau de aleatoriedade, será improvável que um conjunto de dados será uma amostra perfeita normalmente distribuída. Na estatística aplicada, a questão não é se os resíduos são perfeitamente normais, mas distribuídos normalmente o suficiente para as suposições serem válidas. De outro lado, alguns testes como os t-Student e a ANOVA (Análise de Variância) serão robustos à normalidade em grandes amostras.

Em geral, os testes questionam: há evidência convincente de qualquer desvio do ideal gaussiano? Com conjuntos de dados reais moderadamente grandes, a resposta é quase sempre sim. Usualmente o procedimento de duas etapas recomenda a inspeção gráfica e posteriormente o teste estatístico.

Um método gráfico usual é por meio da comparação quantílica, ou o chamado Q-Q plot, em que se compara a distribuição amostral dos resíduos padronizados com a distribuição normal dos quantis, \(N(0,1)\), ou alternativamente, com a distribuição \(t\) dos quantis para \(n-k-2\) graus de liberdade. As duas possibilidades gerarão resultados convergentes para amostras maiores. Os resíduos padronizados são preferidos por terem variâncias semelhantes. A comparação gráfica do Q-Q plot será efetiva na identificação de outliers, assimetria (skewness), e caudas leves/pesadas presentes na curtose (kurtosis). Em amostras grandes, o histograma poderá dar uma boa ideia da distribuição.

A assimetria é o grau de distorção relativamente à curva de distribuição normal, simétrica. De modo geral, avalia-se: \(-0,5 \le skewness \le 0,5\) diz-se que os dados são bastante simétricos; \(-1,0 \le skewness \le -0,5\) diz-se que tem inclinação negativa; ou entre \(0,5 \le skewness \le 1,0\) diz-se inclinação positiva, e os dados são inclinados moderadamente. Se a assimetria for menor que -1 (inclinada negativamente) ou maior que 1 (inclinada positivamente), os dados serão considerados assimétricos.

Já com respeito à curtose, pode-se dizer ser uma medida da presença de outliers na distribuição, que podem ser tanto negativos como positivos. Curtoses elevadas indicam distribuições de dados com caudas pesadas e presença de outliers. A curtose próxima a 3 indica uma distribuição próxima da normal. A curtose maior que 3 indica uma distribuição leptocúrtica enquanto valores de curtose abaixo de 3 indicam a distribuição platicúrtica.

A curtose está associada ao achatamento da distribuição, quanto mais chata menor o valor da curtose (\(K\)). Exemplo: \(K>3\) (distribuição mais “em pé”), \(K<3\) (distribuição mais “achatada”). A curtose (em inglês kurtosis) é definida pela expressão de \(K\):

para

\[ {\hat \sigma ^2} = Var\left( \varepsilon \right) = \hat s\sqrt {\frac{{N - 1}}{N}} \]

\[ K = \frac{1}{N}\sum\nolimits_{t = 1}^N {{{\left[ {\frac{{{Y_i} - \bar Y}}{{Var\left( \varepsilon \right)}}} \right]}^4}} \]

A simetria (do inglês skewness) é dada pela expressão \(S\):

\[ S = \frac{1}{N}\sum\nolimits_{t = 1}^N {{{\left[ {\frac{{{Y_i} - \bar Y}}{{Var\left( \varepsilon \right)}}} \right]}^3}} \]

A normalidade multivariada pode ser difícil de avaliar graficamente e a convergência para distribuições assintóticas pode ser demorada para estatísticas multivariadas. Portanto, os testes para normalidade serão mais úteis em uma configuração multivariada.

O teste para detecção mais usual é o Bera-Jarque, ou teste \(BJ\) (muitas vezes aparece como Jarque-Bera ou \(JB\), referentes aos autores Carlos M. Jarque e Anil K. Bera), o qual testa a simetria e a curtose da distribuição dos resíduos em relação à curva normal.

A estatística do teste de normalidade de Jarque-Bera (\(JB\)) será:

\[ JB = \frac{1}{6} \left( {n - p} \right) \left[ {S^2 + {\textstyle {\frac {1}{4}}}{{\left( {K - 3} \right)}^2}} \right] ∼ \chi _{gl = 2}^2 \]

Se rejeitar H0: erros normais, ou seja, p-value menor que 10%, 5% ou 1% de significância, tenho que descobrir qual é a distribuição real dos resíduos e fazer nova dedução do estimador dos parâmetros. Em geral, para amostras grandes, aplica-se o Teorema do Limite Central argumentando-se que no limite tem-se a normalidade da distribuição dos resíduos.

Outros testes de normalidade podem ser listados, do pacote nortest do R: Kolmogorov-Smirnov (KS), Lilliefors, Cramér-von Mises, Shapiro-Wilk, Shapiro-Francia, Anderson-Darling.

  • Exemplo sinop:

Seja o projeto dummies.Rproj e o script dummies e outliers.R. Neste caso tem-se 59 observações dos setores censitários de Sinop-MT, o mesmo dataset utilizado para investigar os outliers. O script apresenta o teste de normalidade por meio do gráfico QQPlot, seguido do teste de Bera-Jarque e por testes alternativos variados. Vários pacotes podem ser utilizados em diferentes casos: car, tseries, moments, nortest, stats.

Existem dois tipos de gráficos de probabilidade normal: 1º tipo: representa a probabilidade acumulada que seria de esperar se a distribuição fosse normal, em função da probabilidade observada acumulada dos erros (Normal P-P Plot); 2º tipo: representa o quantil de probabilidade esperado se a distribuição fosse normal em função dos resíduos (Normal Q-Q Plot) (Figura 5.3.). Observe que pela função plot básica (à esquerda), o gráfico resultante apresenta a mesma informação que pelo pacote car e função qqPlot, mas esta última tem a vantagem de apresentar bandas de confiança. Neste caso específico, é possível suspeitar de que os pontos estão em torno da linha pontilhada, indicando pela normalidade, mas com outliers 51 e 54. A ilustração da direita, ao olhar as bandas tracejadas, verifica-se que a reta da normal sai das bandas, o que revela preocupação com a normalidade dos resíduos.

split.screen(c(1,2))
## [1] 1 2
screen(1)
reg1.plot2<-plot(regressao1, which = 2) 
screen(2)
car::qqPlot(regressao1)

## [1] 51 54
close.screen(all = TRUE)


Figura 5.3. Gráficos Q-Q Normal pela função plot da regressão (esquerda) e pelo pacote car, função qqPlot (direita), no R.

Pelo pacote tseries do R, o teste Jarque-Bera será como na Figura 5.4.

library(tseries)
JB.reg1<-jarque.bera.test(u.hat)
JB.reg1
## 
##  Jarque Bera Test
## 
## data:  u.hat
## X-squared = 1224.2, df = 2, p-value < 2.2e-16


Figura 5.4. Teste de normalidade Jarque-Bera pelo tseries em R.

A alternativa de teste pelo pacote moments usando o jarque.test(u.hat) para H0: resíduos normais, será como na Figura 5.5.

# criando dataset excluindo as observacoes 51 e 54
dados2<-dados[dados$D51_54==0, ]
attach(dados2)
#View(dados2)
regressao2<-lm(log(VP)~log(AREA)+log(QMO)+
                 log(PPRAGA)+log(PROT),data=dados2)
u.hat_reg2<-resid(regressao2)
library(moments)
(JB_reg1<-jarque.test(u.hat))
## 
##  Jarque-Bera Normality Test
## 
## data:  u.hat
## JB = 1224.2, p-value < 2.2e-16
## alternative hypothesis: greater
(JB_reg2<-jarque.test(u.hat_reg2))  # sem observacoes 51 e 54
## 
##  Jarque-Bera Normality Test
## 
## data:  u.hat_reg2
## JB = 2.1565, p-value = 0.3402
## alternative hypothesis: greater


Figura 5.5. Teste de normalidade Jarque-Bera pelo moments em R.

Outros testes são aqui apresentados: Kolmogorov-Smirnov (KS), Lilliefors, Cramér-von Mises, Shapiro-Wilk, Shapiro-Francia, Anderson-Darling, do pacote nortest do R (Figura 5.6.).

Figura 5.6. Script para diversos testes de normalidade em R.

# Pacote com alguns testes
library(nortest)
u.hat <- resid(regressao1)
# Testes para a regressao 1
t1.1 <- ks.test(u.hat,"pnorm",mean(u.hat),summary(regressao1)$sigma)# KS
t2.1 <- lillie.test(u.hat)       # Lilliefors
t3.1 <- cvm.test(u.hat)          # Cramér-von Mises
t4.1 <- shapiro.test(u.hat)      # Shapiro-Wilk
t5.1 <- sf.test(u.hat)           # Shapiro-Francia
t6.1 <- ad.test(u.hat)           # Anderson-Darling

O resultado do script será, para a regressão 1 do exemplo de Sinop-MT, contendo todas as observações, inclusive os outliers 51 e 54, a Tabela 4.2.

Tabela 4.2. Resultados de diversos testes de normalidade dos resíduos, em R, exemplo de Sinop-MT.

# Tabela de resultados
testes <- c(t1.1$method, t2.1$method, t3.1$method, 
             t4.1$method, t5.1$method,t6.1$method)
estt <- as.numeric(c(t1.1$statistic, t2.1$statistic, t3.1$statistic, 
                      t4.1$statistic, t5.1$statistic, t6.1$statistic))
valorp <- c(t1.1$p.value, t2.1$p.value, t3.1$p.value, 
             t4.1$p.value, t5.1$p.value,t6.1$p.value)
resultados <- cbind(estt, valorp)
rownames(resultados) <- testes
colnames(resultados) <- c("Estatística", "prob.")
knitr::kable(resultados, digits = 3)
Estatística prob.
One-sample Kolmogorov-Smirnov test 0.190 0.025
Lilliefors (Kolmogorov-Smirnov) normality test 0.182 0.000
Cramer-von Mises normality test 0.595 0.000
Shapiro-Wilk normality test 0.650 0.000
Shapiro-Francia normality test 0.629 0.000
Anderson-Darling normality test 3.880 0.000

Portanto, probabilidades baixas (menores que 0.10 = 10%) indicam a rejeição de H0 e conclui-se que a distribuição não é normal.

6 Violação dos pressupostos: heterocedasticidade residual

Nesta seção, analisa-se a Pressuposição: O resíduo estimado tem variância constante. Ou seja, não ocorre heterocedasticidade residual. A presença de heterocedasticidade não gera viés ou tendenciosidade nos parâmetros angulares. Entretanto, os parâmetros de M.Q.O. não serão os mais eficientes (pois o M.Q.O. superestimará o verdadeiro erro-padrão e presença de heterocedasticidade) e a estimação deverá ser feita por Mínimos Quadrados Generalizados (M.Q.G.), que consiste em um M.Q.O. para variáveis transformadas que satisfazem as hipóteses usuais de mínimos quadrados. A mecânica passa pela divisão de todas as variáveis, por exemplo, pelo respectivo desvio-padrão do resíduo, ou caso o desconheça, pela variável explicativa correlacionada ao resíduo.

Procede-se da seguinte forma. Para o teste de Glejser, que entre outros como o de Goldfeld-Quandt, auxilia na implementação da correção do problema. Esse teste permite que se indique a exata relação existente entre uma variável \(X_i\) e os resíduos (DIAZ, 2000)1.

Passos do teste de Glejser:

  1. Estimar o modelo inicial: \(Y=X\beta + \varepsilon\); a rigor, o teste prevê uma regressão simples, para cada \(X_i\) como único regressor;
  2. Com os resíduos \(e_i\) do passo 1, estimar as regressões auxiliares:
  1. \(|e_i| = \alpha_0 + \alpha_1X_i\);
  2. \(|e_i| = \alpha_0 + \alpha_1X_i^2\);
  3. \(|e_i| = \alpha_0 + \alpha_1(1/X_i)\);
  4. \(|e_i| = \alpha_0 + \alpha_1 \sqrt{(X_i)}\);
  5. \(|e_i| = \alpha_0 + \alpha_1X_i^h\), em que h denota uma potência.

Se o \(\alpha_1\) for diferente de zero em alguma das regressões auxiliares (pelo teste usual de \(t\)), então rejeita-se a hipótese nula de que não há heterocedasticidade. Portanto, existe heterocedasticidade. Caso todas as regressões tenham não significância de \(\alpha_1\), portanto, \(\alpha_1= 0\), então não existe heterocedasticidade.

Este problema de presença de heterocedasticidade também pode ser detectado por meio de análise gráfica. Pode-se estimar a função e fazer o gráfico dos resíduos ao longo da amostra: gráfico de \(e_i\) x \(X_i\); ou ainda, de \(e_i\) x \(Y_i\) ou \(Y_{i,estimado}\).

Conhecido o resultado do teste de Glejser, utiliza-se a variável da regressão auxiliar que acusou o problema para ponderar as variáveis, transformando-as, e procedendo a estimação de M.Q.G., ou seja, um M.Q.O. nas variáveis transformadas. A estimação por M.Q.G. será para o modelo (6.1):

\[\begin{equation} P.Y = PX\beta + P\varepsilon \end{equation}\] \tag{6.1}

e o vetor de parâmetros estimados será (6.2):

\[\begin{equation} \hat\beta_{MQG} = (X'P'PX)^{-1}X'P'PY \end{equation}\] \tag{6.2}

que é o mesmo que estimar o M.Q.O. para \(Y^* = X^*\beta + \varepsilon\).

O método como descrito acima é uma alternativa apresentada em vários livros de econometria, mas como a transformação fazendo \(Y/X_i\) pode gerar uma correlação espúria, indicando uma correlação entre \(Y/X\) que na realidade não ocorreria entre \(Y\) e \(X\) caso não fosse feita a transformação, sugere-se então os testes de White e de Breusch-Pagan-Godfrey e a correção de White.

6.1 Teste de White de Heterocedasticidade dos resíduos

Por exemplo, para uma regressão da forma (6.3):

\[\begin{equation} Y_i =\beta_1 + \beta_2 X_{2i} + \beta_3 X_{3i}+ \varepsilon_i, \end{equation}\] \tag{6.3}

o teste de White é implementado manualmente da seguinte forma:

  1. Estima-se a regressão inicial e obtêm-se os resíduos \(e_i\);

  2. Faz-se uma regressão auxiliar do tipo (6.4):

\[\begin{equation} e_i^2=\alpha_1 + \alpha_2 X_{2i} + \alpha_3 X_{3i}+ \alpha_4 X_{2i}^2+ \alpha_5 X_{3i}^2+ \alpha_6 X_{2i} X_{3i}+ \nu_i, \end{equation}\] \tag{6.4}

ou seja, o quadrado dos resíduos estimados como função das variáveis explicativas (neste caso, \(X_2\) e \(X_3\)), dos quadrados das variáveis explicativas (\(X_2^2\) e \(X_3^2\)) e do produto cruzado das variáveis explicativas (\(X_2 X_3\)). Deve-se incluir o termo do intercepto (\(\alpha_1\)) mesmo que na regressão original não o tenha.

  1. Analisa-se o \(R^2\) da regressão auxiliar multiplicado pelo tamanho da amostra (\(n\)) comparando com o valor da tabela qui-quadrado (\(\chi^2\)) para graus de liberdade iguais ao número total de regressores da equação auxiliar. No nosso exemplo,

\(nR^2 \sim \chi^2\) com gl = 5 (para \(X_{2i}, X_{3i},X_{2i}^2,X_{3i}^2,X_{2i}X_{3i}\))

  • Se \(nR^2 > \chi^2\) tabelado, então existe heterocedasticidade;

  • Se \(nR^2 < \chi^2\) tabelado, então \(\alpha_2 = \alpha_3 = \alpha_4 = \alpha_5 = \alpha_6 = 0\) , e não existe heterocedasticidade.

Deve-se tomar cuidado com este teste, pois ele prevê a inclusão de termos adicionais que, em presença de muitas variáveis \(X\), poderá comprometer o modelo com relação aos seus graus de liberdade.

6.1.1 Teste de White, com R

O teste de White, fazendo os passos como indicado acima, pode ser feito pelos comandos. Aqui aplica-se para o exemplo da produção de soja em função de fertilizante, trator e mão-de-obra (MO) do capítulo 4: Exemplo soja_apostila.

Teste de White: Usando o arquivo ‘soja_apostila.xlsx’, que contém os dados do valor de produção de soja, sabendo que a variável dependente \(QSOJA\) é a quantidade produzida de soja, a variável \(FERTILIZANTE\) é a quantidade utilizada de fertilizantes, a variável \(TRATOR\) é o número de horas-máquina utilizadas, e \(MO\) é a quantidade de mão-de-obra em número de pessoas (script ao final).

A rotina vai estimar o modelo inicial, obter os resíduos ao quadrado \(u2\) e estimar a regressão auxiliar de White (reg.auxiliar).

library(readxl)
# library(foreign)
dados <- read_excel("soja_apostila.xlsx", 
                    sheet = "dados")
attach(dados)
# summary(dados) # omiti porque já consta do capítulo 4

O resultado da regressão auxiliar será:

# Teste de White para heterocedasticidade
regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
m <- regressao1
data <- dados
#rotina do teste com base em m e data
u2 <- m$residuals^2
#sem termos cruzados, no cross-terms
reg.auxiliar <- lm(u2 ~ FERTILIZANTE+TRATOR+MO+
                     I(FERTILIZANTE^2)+I(TRATOR^2)+I(MO^2))  
summary(reg.auxiliar)
## 
## Call:
## lm(formula = u2 ~ FERTILIZANTE + TRATOR + MO + I(FERTILIZANTE^2) + 
##     I(TRATOR^2) + I(MO^2))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3451.5 -1319.0  -345.4   365.3 18550.3 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)  
## (Intercept)          9516.00    6550.45   1.453   0.1491  
## FERTILIZANTE         -810.45     551.79  -1.469   0.1448  
## TRATOR              -2061.75    2106.30  -0.979   0.3298  
## MO                  76907.49   29850.12   2.576   0.0113 *
## I(FERTILIZANTE^2)      18.85      15.37   1.226   0.2227  
## I(TRATOR^2)           245.72     236.74   1.038   0.3016  
## I(MO^2)           -230942.82  103719.00  -2.227   0.0280 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2805 on 110 degrees of freedom
## Multiple R-squared:  0.1389, Adjusted R-squared:  0.09188 
## F-statistic: 2.956 on 6 and 110 DF,  p-value: 0.0103

Pela regressão auxiliar, pode-se observar que os termos em que aparece a \(MO\) são significativos, e prováveis causas da heterocedasticidade residual.

Agora pega-se o resultado de \(R^2\) (no script chamaremos de Ru2) da regressão auxiliar para cálculo da estatística de teste de White.

Ru2<- summary(reg.auxiliar)$r.squared
LM <- nrow(data)*Ru2
#obtendo o numero de regressores menos o intercepto
k <- length(coefficients(reg.auxiliar))-1
# O Teste tem k termos regressores em 'reg.auxiliar'
p.value <- 1-pchisq(LM, k) 
#c("LM","p.value")
c(LM, p.value)
## [1] 16.24547461  0.01249533

Agora com a função bptest para reproduzir o teste de White. Pelo pacote lmtest, o bptest dará o mesmo resultado, desde que especifique a mesma regressão auxiliar estimada no White acima, mas pelo bptest não se visualizará a regressão auxiliar. Ou seja, nesse caso não se teria a noção de que a variável \(MO\) é provável causa da heterocedasticidade residual.

library(lmtest)
bptest(regressao1,
       ~ FERTILIZANTE+TRATOR+MO+
         I(FERTILIZANTE^2)+I(TRATOR^2)+I(MO^2))
## 
##  studentized Breusch-Pagan test
## 
## data:  regressao1
## BP = 16.245, df = 6, p-value = 0.0125

O mesmo pode ser feito com cross-terms (inserindo termos quadráticos assim como termos multiplicados entre variáveis, ou covariados), quando o número de variáveis não for demasiado para prejudicar o grau de liberdade do modelo. O resultado da regressão auxiliar (reg.auxiliar2) agora será:

reg.auxiliar2 <- lm(u2 ~ FERTILIZANTE+I(FERTILIZANTE*FERTILIZANTE)+
                     I(FERTILIZANTE*TRATOR)+I(FERTILIZANTE*MO)+
                     TRATOR+I(TRATOR*TRATOR)+I(TRATOR*MO)+
                     MO+I(MO*MO)+I(FERTILIZANTE*TRATOR*MO))
summary(reg.auxiliar2)
## 
## Call:
## lm(formula = u2 ~ FERTILIZANTE + I(FERTILIZANTE * FERTILIZANTE) + 
##     I(FERTILIZANTE * TRATOR) + I(FERTILIZANTE * MO) + TRATOR + 
##     I(TRATOR * TRATOR) + I(TRATOR * MO) + MO + I(MO * MO) + I(FERTILIZANTE * 
##     TRATOR * MO))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5430.3 -1048.5  -411.8   702.2 14557.9 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     -54297.38   17767.60  -3.056 0.002839 ** 
## FERTILIZANTE                      2199.87     972.89   2.261 0.025790 *  
## I(FERTILIZANTE * FERTILIZANTE)      31.90      15.78   2.021 0.045763 *  
## I(FERTILIZANTE * TRATOR)          -621.37     237.26  -2.619 0.010113 *  
## I(FERTILIZANTE * MO)            -40494.73   12480.66  -3.245 0.001574 ** 
## TRATOR                            9647.85    4935.84   1.955 0.053258 .  
## I(TRATOR * TRATOR)                 374.98     250.52   1.497 0.137419    
## I(TRATOR * MO)                 -152774.51   58702.12  -2.603 0.010578 *  
## MO                              933331.63  240560.44   3.880 0.000182 ***
## I(MO * MO)                     -354820.55  127882.92  -2.775 0.006534 ** 
## I(FERTILIZANTE * TRATOR * MO)     7015.27    3094.79   2.267 0.025432 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2551 on 106 degrees of freedom
## Multiple R-squared:  0.3139, Adjusted R-squared:  0.2492 
## F-statistic:  4.85 on 10 and 106 DF,  p-value: 9.664e-06

Os novos cálculos para o teste de White serão:

Ru2<- summary(reg.auxiliar2)$r.squared
LM <- nrow(data)*Ru2
#obtendo o numero de regressores menos o intercepto
k <- length(coefficients(reg.auxiliar2))-1
k
## [1] 10
p.value <- 1-pchisq(LM, k) 
c(LM, p.value)
## [1] 3.672653e+01 6.310037e-05

Novamente, pelo bptest:

library(lmtest)
# reg.auxiliar <- lm(u2 ~ FERTILIZANTE+I(FERTILIZANTE*FERTILIZANTE)+
#                     I(FERTILIZANTE*TRATOR)+I(FERTILIZANTE*MO)+
#                     TRATOR+I(TRATOR*TRATOR)+I(TRATOR*MO)+
#                     MO+I(MO*MO)+I(FERTILIZANTE*TRATOR*MO))
bptest(regressao1,
       ~ FERTILIZANTE+I(FERTILIZANTE*FERTILIZANTE)+
         I(FERTILIZANTE*TRATOR)+I(FERTILIZANTE*MO)+
         TRATOR+I(TRATOR*TRATOR)+I(TRATOR*MO)+
         MO+I(MO*MO)+I(FERTILIZANTE*TRATOR*MO))
## 
##  studentized Breusch-Pagan test
## 
## data:  regressao1
## BP = 36.727, df = 10, p-value = 6.31e-05

O p-value menor que 1% indica a rejeição de “H0: resíduos homocedásticos” e o modelo deverá ser corrigido para a matriz de variância-covariância consistente com a heterocedasticidade, ou seja, a estimação com erros robustos.

6.1.2 Correção da heterocedasticidade

A correção da estimação, em caso de rejeição de “H0:erros homocedásticos”, ou seja, p-value inferior ao nível de significância adotado (10%, 5% ou 1%), prevê executar o \(MQP\). O \(MQP\) fará uma ponderação para recalcular a matriz de variância-covariância dos parâmetros como em (6.5):

\[\begin{equation} Var\left( {\hat \beta |X} \right) = {\left( {X'X} \right)^{ - 1}}X'\Omega X{\left( {X'X} \right)^{ - 1}} \end{equation}\] \tag{6.5}

No pacote car, tem-se a função hccm que corrige a matriz de variância-covariância dos modelos lineares sem ponderação, por meio das matrizes chamadas de matrizes de White. Existem várias alternativas denotadas por: “hc0”, “hc1”, “hc2”, “hc3”, ou “hc4”. A notação é hccm(model, type=c("hc3", "hc0", "hc1", "hc2", "hc4"), ...) (o padrão ou default do pacote é o “hc3”, enquanto no Stata o padrão é o “hc1”):

  • “hc0”: matriz clássica de correção de Eicker (1963) e popularizada por White (1980);
  • “hc1”, “hc2” e “hc3”: matrizes de correção sugeridas por MacKinnon e White (1985) e aperfeiçoadas para pequenas amostras conforme Long e Ervin (2000);
  • “hc4”: matriz de correção conforme Cribari-Neto (2004) para aperfeiçoar a performance em pequenas amostras com presença de observações influentes.

A correção clássica de White para a matriz de variância-covariância dos coeficientes (“hc0”) é como em (6.6):

\[\begin{equation} Var\left( {\hat \beta |X} \right) = {\left( {X'X} \right)^{ - 1}}X' diag(e^2) X{\left( {X'X} \right)^{ - 1}}, \end{equation}\] \tag{6.6}

em que \(e^2\) são os resíduos ao quadrado, e \(X\) é a matriz de variáveis explicativas do modelo. Os demais métodos são ajustamentos desta fórmula para a matriz de var-cov dos resíduos, denotada por \(\Omega\).

A opção que retorna os valores de \(MQO\) é a opção “const”, que retorna os resultados de \(\sigma^2(X'X)^{-1}\). As demais retornam estimadores de White na forma da expressão \({\left( {X'X} \right)^{ - 1}}X'\Omega X{\left( {X'X} \right)^{ - 1}}\) e diferem em termos de como é \(\Omega\). A diagonal de \(\Omega\) serão os elementos \(\omega_i\) conforme exposto para cada opção de \(HC = HC(hc0,hc1,hc2,hc3,hc4)\).

Conforme Zeileis (2006)2, na instrução do pacote sandwich, tem-se as expressões de para as diferentes especificações do modelo e alternativas de \(HC\) (heterocedasticidade corrigida). Para a expressão dos estimadores (6.7):

\[\begin{equation} \begin{array}{l} \hat \beta = {\left( {X'X} \right)^{ - 1}}X'y\\ \hat u = \left( {{I_n} - H} \right)y = \left( {{I_n} - X{{\left( {X'X} \right)}^{ - 1}}X'} \right)y \end{array}, \end{equation}\] \tag{6.7}

seja \(\hat \Omega = {\rm{diag}}\left( {{\omega _1}, \ldots ,{\omega _n}} \right)\), as opções serão como em (6.8):

\[\begin{equation} \begin{array}{l} const:{\omega _i} = {{\hat \sigma }^2}\\ HC0:{\omega _i} = \hat u_i^2\\ HC1:{\omega _i} = \frac{n}{{n - k}}\hat u_i^2\\ HC2:{\omega _i} = \frac{{\hat u_i^2}}{{1 - {h_i}}}\\ HC3:{\omega _i} = \frac{{\hat u_i^2}}{{{{\left( {1 - {h_i}} \right)}^2}}}\\ HC4:{\omega _i} = \frac{{\hat u_i^2}}{{{{\left( {1 - {h_i}} \right)}^{{\delta _i}}}}} \end{array}, \end{equation}\] \tag{6.8}

para \(h_i = H_{ii}\) como os elementos diagonais da matriz estimada, \(\bar h\) é sua média e \(\delta_i = min\){\(4, h_i/{\bar h}\)}. A opção que retorna os mesmos resultados que o “padrão” de correção de White no Stata e Eviews é a “hc1”. Ver Exemplo soja_apostila:

#regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
#library(car) 
#possibilidades: hccm(regressao1,type=c("hc0","hc1","hc2","hc3","hc4"))
vcov.white<-car::hccm(regressao1,type=c("hc1"))
coeftest(regressao1,vcov.white)
## 
## t test of coefficients:
## 
##                Estimate Std. Error t value  Pr(>|t|)    
## (Intercept)   494.96573   26.46010 18.7061 < 2.2e-16 ***
## FERTILIZANTE   -0.55354    1.27243 -0.4350   0.66437    
## TRATOR        -33.68994    3.79488 -8.8777 1.198e-14 ***
## MO           -209.14074  115.17696 -1.8158   0.07205 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Portanto, o resultado do modelo ‘robusto’ estimado por MQP com método de White e matriz ‘hc1’ é como acima. Outra possibilidade inclue o pacote sandwich com notação parecida e mesmos resultados. Ainda no pacote MASS tem-se alternativas interessantes para o MQ Generalizado com a função glm. Também o pacote estimatr fornece o modelo ‘robusto’ por meio da função lm_robust e apresenta a opção se_type = "stata" que retorna o mesmo que se especificar “HC1”.

library(estimatr)
library(car)
# Erros padrões robustos HC1 – padrão do Stata
reg.robust <- lm_robust(QSOJA~FERTILIZANTE+TRATOR+MO, 
                   data = dados,
                   se_type = "stata")
summary(reg.robust)
## 
## Call:
## lm_robust(formula = QSOJA ~ FERTILIZANTE + TRATOR + MO, data = dados, 
##     se_type = "stata")
## 
## Standard error type:  HC1 
## 
## Coefficients:
##               Estimate Std. Error t value  Pr(>|t|) CI Lower CI Upper  DF
## (Intercept)   494.9657     26.460  18.706 2.147e-36  442.543  547.388 113
## FERTILIZANTE   -0.5535      1.272  -0.435 6.644e-01   -3.074    1.967 113
## TRATOR        -33.6899      3.795  -8.878 1.198e-14  -41.208  -26.172 113
## MO           -209.1407    115.177  -1.816 7.205e-02 -437.327   19.046 113
## 
## Multiple R-squared:  0.4651 ,    Adjusted R-squared:  0.4509 
## F-statistic: 33.94 on 3 and 113 DF,  p-value: 1.021e-15

O pacote estimatr apresenta a opção para a saída no pacote stargazer, mas agora requer o uso da função starprep para compatibilizar o objeto lm_robust com o pacote stargazer (este pacote não aceita objetos lm_robust até esta data). Neste caso, agora faremos com a opção “HC3” na função lm_robust que resulta no mesmo que em car::hccm(regressao1,type=c("hc3")), e observar que na chamada do stargazer, a regressão inicial (regressao1) será especificada.

# alternativa HC3 - padrão do R
options("scipen"=0, "digits"=7) 
model <- lm_robust(QSOJA~FERTILIZANTE+TRATOR+MO, 
                   data = dados, 
                   se_type = "HC3")
summary(model)
## 
## Call:
## lm_robust(formula = QSOJA ~ FERTILIZANTE + TRATOR + MO, data = dados, 
##     se_type = "HC3")
## 
## Standard error type:  HC3 
## 
## Coefficients:
##               Estimate Std. Error t value  Pr(>|t|) CI Lower CI Upper  DF
## (Intercept)   494.9657     27.746 17.8390 1.194e-34  439.995  549.936 113
## FERTILIZANTE   -0.5535      1.308 -0.4233 6.729e-01   -3.144    2.037 113
## TRATOR        -33.6899      3.896 -8.6463 4.069e-14  -41.410  -25.970 113
## MO           -209.1407    129.250 -1.6181 1.084e-01 -465.208   46.927 113
## 
## Multiple R-squared:  0.4651 ,    Adjusted R-squared:  0.4509 
## F-statistic: 32.44 on 3 and 113 DF,  p-value: 3.334e-15
regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
stargazer::stargazer(regressao1,
          se = starprep(regressao1,se_type = "HC3"),
          p = starprep(regressao1,se_type = "HC3", stat = "p.value"),
          type="text",style="all",
          omit.stat = "f")
## 
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                QSOJA           
## -----------------------------------------------
## FERTILIZANTE                  -0.554           
##                               (1.308)          
##                             t = -0.423         
##                              p = 0.673         
## TRATOR                      -33.690***         
##                               (3.896)          
##                             t = -8.646         
##                              p = 0.000         
## MO                           -209.141          
##                              (129.250)         
##                             t = -1.618         
##                              p = 0.109         
## Constant                    494.966***         
##                              (27.746)          
##                             t = 17.839         
##                              p = 0.000         
## -----------------------------------------------
## Observations                    117            
## R2                             0.465           
## Adjusted R2                    0.451           
## Residual Std. Error      41.506 (df = 113)     
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Num outro exemplo, com os dados de Gujarati (2000:p.388, edição brasileira, ou em Exemplo 11.10 Gujarati (2004, p.424, edição norte-americana) http://rpubs.com/amrofi/Gujarati_salesp424), para gastos com P & D em relação às vendas, obteve-se o teste de White com cross terms e os resultados a seguir. Primeiro apresenta-se os resultados da estimação sem a correção para heterocedasticidade, faz-se o teste de White e depois se re-estima o modelo com a correção de White.

Teste de White: Aqui chamaremos os dados pela estrutura do dput() extraído previamente. Em seguida faremos a regressão dos gastos de P&D (R&D Expenses, ou PD) como função das vendas (Sales, VENDAS).

dados <- structure(list(obs = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
    15, 16, 17, 18), VENDAS = c(6375.3, 11626.4, 14655.1, 21869.2, 26408.3, 
    32405.6, 35107.7, 40295.4, 70761.6, 80552.8, 95294, 101314.1, 116141.3, 
    122315.7, 141649.9, 175025.8, 230614.5, 293543), PD = c(62.5, 92.9, 178.3, 
    258.4, 494.7, 1083, 1620.6, 421.7, 509.2, 6620.1, 3918.6, 1595.3, 6107.5, 
    4454.1, 3163.8, 13210.7, 1703.8, 9528.2), LUCROS = c(185.1, 1569.5, 276.8, 
    2828.1, 225.9, 3751.9, 2884.1, 4645.7, 5036.4, 13869.9, 4487.8, 10278.9, 
    8787.29999999999, 16438.8, 9761.4, 19774.5, 22626.6, 18415.4)), 
    row.names = c(NA,-18L), class = c("tbl_df", "tbl", "data.frame"))

library(stargazer);library(car);library(lmtest);library(AER)
# VENDAS = vendas setoriais PD = pesquisa e desenvolvimento LUCRO = lucro
# setorial
knitr::kable(dados)
obs VENDAS PD LUCROS
1 6375.3 62.5 185.1
2 11626.4 92.9 1569.5
3 14655.1 178.3 276.8
4 21869.2 258.4 2828.1
5 26408.3 494.7 225.9
6 32405.6 1083.0 3751.9
7 35107.7 1620.6 2884.1
8 40295.4 421.7 4645.7
9 70761.6 509.2 5036.4
10 80552.8 6620.1 13869.9
11 95294.0 3918.6 4487.8
12 101314.1 1595.3 10278.9
13 116141.3 6107.5 8787.3
14 122315.7 4454.1 16438.8
15 141649.9 3163.8 9761.4
16 175025.8 13210.7 19774.5
17 230614.5 1703.8 22626.6
18 293543.0 9528.2 18415.4
attach(dados)
options(scipen = 999, digits = 4)
regressao1 <- lm(PD ~ VENDAS)
summary(regressao1)
## 
## Call:
## lm(formula = PD ~ VENDAS)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -5846   -951   -402    346   7434 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept) 192.99311  990.98579    0.19   0.8480   
## VENDAS        0.03190    0.00833    3.83   0.0015 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2760 on 16 degrees of freedom
## Multiple R-squared:  0.478,  Adjusted R-squared:  0.446 
## F-statistic: 14.7 on 1 and 16 DF,  p-value: 0.00148

O teste de heterocedasticidade será obtido por partes. Para a opção de Glejser, obteremos os resíduos, os resíduos quadrados e os valores absolutos dos resíduos:

# gerar residuos
uhat <- regressao1$residuals
uhat 
##        1        2        3        4        5        6        7        8 
##  -333.87  -470.98  -482.20  -632.23  -540.73  -143.74   307.66 -1056.73 
##        9       10       11       12       13       14       15       16 
## -1941.11  3857.45   685.70 -1829.65  2209.56   359.20 -1547.87  7434.33 
##       17       18 
## -5845.87   -28.91
# residuos quadrados
uhat2 <- uhat^2
uhat2 
##          1          2          3          4          5          6          7 
##   111467.4   221821.3   232512.7   399712.1   292385.3    20661.9    94654.4 
##          8          9         10         11         12         13         14 
##  1116677.8  3767914.5 14879888.0   470179.8  3347606.6  4882159.0   129021.3 
##         15         16         17         18 
##  2395907.8 55269198.4 34174223.2      835.9
# residuos em valores absolutos
uhat.abs <- abs(uhat)
uhat.abs
##       1       2       3       4       5       6       7       8       9      10 
##  333.87  470.98  482.20  632.23  540.73  143.74  307.66 1056.73 1941.11 3857.45 
##      11      12      13      14      15      16      17      18 
##  685.70 1829.65 2209.56  359.20 1547.87 7434.33 5845.87   28.91
# Estimar “uhat.abs” em função de Vendas: ou seja, módulo dos resíduos em
# função de vendas:
reg.glejser <- lm(uhat.abs ~ VENDAS)
summary(reg.glejser)
## 
## Call:
## lm(formula = uhat.abs ~ VENDAS)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -4054   -714   -259    194   4766 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 578.5710   678.6950    0.85    0.407  
## VENDAS        0.0119     0.0057    2.09    0.053 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1890 on 16 degrees of freedom
## Multiple R-squared:  0.215,  Adjusted R-squared:  0.166 
## F-statistic: 4.38 on 1 and 16 DF,  p-value: 0.0526

O coeficiente significativo (Pr(>|t|) inferior a 10% de significância) para VENDAS indica que VENDAS causa heterocedasticidade no modelo.

O teste de White pela função bptest será:

options(scipen = 0,digits = 7)
library(lmtest)
bptest(regressao1, ~VENDAS + I(VENDAS^2))
## 
##  studentized Breusch-Pagan test
## 
## data:  regressao1
## BP = 5.2125, df = 2, p-value = 0.07381

Se desejar observar a regressão auxiliar de White, para melhor compreender a causa da heterocedasticidade, o pesquisador pode fazer o passo a passo:

m <- regressao1
data <- dados
# rotina do teste com base em m e data
u2 <- m$residuals^2
reg.auxiliar <- lm(u2 ~ VENDAS + I(VENDAS^2))  #Com termos cruzados, cross-terms
summary(reg.auxiliar)
## 
## Call:
## lm(formula = u2 ~ VENDAS + I(VENDAS^2))
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -14823352  -8256873   -830623   3687265  37800060 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -6.220e+06  6.460e+06  -0.963   0.3509  
## VENDAS       2.294e+02  1.262e+02   1.817   0.0892 .
## I(VENDAS^2) -5.371e-04  4.495e-04  -1.195   0.2507  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 13200000 on 15 degrees of freedom
## Multiple R-squared:  0.2896, Adjusted R-squared:  0.1949 
## F-statistic: 3.057 on 2 and 15 DF,  p-value: 0.07698
Ru2 <- summary(reg.auxiliar)$r.squared
LM <- nrow(data) * Ru2
# obtendo o numero de regressores menos o intercepto
k <- length(coefficients(reg.auxiliar)) - 1
p.value <- 1 - pchisq(LM, k)  # O TESTE TEM k TERMOS REGRESSORES EM reg.auxiliar
# c('LM','p.value')
out <- list(LM,p.value)  
names(out) <- c('LM','p.value')
out
## $LM
## [1] 5.212492
## 
## $p.value
## [1] 0.07381112

Neste caso, com os dados em seção cruzada (indústrias dos EUA), não foi possível deixar de rejeitar a hipótese nula de homocedasticidade ao nível de 10% de significância, como observado pelo valor da probabilidade de p.value = 0,073811, menor que 0,10. Existe problema de heterocedasticidade nos resíduos. Mostram-se agora os resultados com a correção de White.

A correção é aqui feita pelos erros robustos de White conforme a matriz de correção tipo “HC1”, como o padrão adotado pelo software Stata.

# regressao1<- lm(PD~VENDAS) library(car) possibilidades:
# hccm(regressao1,type=c('hc0','hc1','hc2','hc3','hc4'))
vcov.white0 <- car::hccm(regressao1, type = c("hc1"))
# 
coeftest(regressao1, vcov.white0)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value Pr(>|t|)   
## (Intercept) 192.993110 533.931735  0.3615 0.722487   
## VENDAS        0.031900   0.010147  3.1438 0.006276 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

É possível observar que o resultado é diferente do modelo inicial, regressão1, que pode ser colocado na tabela:

regressao1<- lm(PD~VENDAS)
cov <- car::hccm(regressao1, type = c("hc1"))
robust.se <- sqrt(diag(cov))

stargazer::stargazer(regressao1, regressao1,
            se=list(NULL, robust.se),
            column.labels=c("default","robusto HC1"), 
            align=TRUE, type="text",
            style="all",omit.stat = "f")
## 
## ==========================================================
##                                   Dependent variable:     
##                               ----------------------------
##                                            PD             
##                                  default      robusto HC1 
##                                    (1)            (2)     
## ----------------------------------------------------------
## VENDAS                           0.032***      0.032***   
##                                  (0.008)        (0.010)   
##                                 t = 3.830      t = 3.144  
##                                 p = 0.002      p = 0.002  
## Constant                         192.993        192.993   
##                                 (990.986)      (533.932)  
##                                 t = 0.195      t = 0.361  
##                                 p = 0.849      p = 0.718  
## ----------------------------------------------------------
## Observations                        18            18      
## R2                                0.478          0.478    
## Adjusted R2                       0.446          0.446    
## Residual Std. Error (df = 16)   2,759.153      2,759.153  
## ==========================================================
## Note:                          *p<0.1; **p<0.05; ***p<0.01

6.2 Teste de Breusch-Pagan-Godfrey

Neste caso, seguem-se os passos:

  1. Estima por \(MQO\) e obtém resíduos;

  2. Obtém a variância dos resíduos (\(Var(û)\));

  3. Constrói variáveis \(p = û²/Var(û)\);

  4. Faz regressão auxiliar de p contra variáveis \(Z\), em que podem ser alguns ou todos os X como parte de \(Z\);

  5. Obtém a soma dos quadrados da regressão, faz a divisão pela metade e compara com distribuição qui-quadrado (\(\chi^2\));

  1. Se a probabilidade de \(LM = SQReg/(2 \hat \sigma^4 )\) < 0.10, (10%), rejeita-se H0 e existirá heterocedasticidade;

  2. H0: não tem heterocedasticidade dos resíduos.

  1. Outra estatística é a LM (BP): \(LM (BP) = nR^2_{\hat u^2}\).
    No R, diferentes pacotes podem ser utilizados com a finalidade de fazer o teste de \(BPG\), ou às vezes chamado apenas de “BP Test”. São eles: library(AER) ou library(lmtest). Por padrão, o teste é feito com resíduos padronizados na forma de Student, ou ‘Studentizados’, assim como no EViews (seção 4.4.2.3) (Observar que no Stata o padrão do hettest (comando do Stata) é sem studentizar. Fazendo para o exemplo de Quantidade de soja em função de fertilizante, trator e Mão-de-obra, como feito para o teste RESET na seção 4.1.1.1.
regressao1<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
library(AER)
## teste de Breusch-Pagan - bptest simples
bp.het<-bptest(regressao1, studentize = TRUE)
bp.het
## 
##  studentized Breusch-Pagan test
## 
## data:  regressao1
## BP = 10.087, df = 3, p-value = 0.01784

Pelo pacote lmtest o resultado será o mesmo. Farei aqui com (studentized Breusch-Pagan test) e sem resíduos ‘Studentizados’(Breusch-Pagan test):

lmtest::bptest(regressao1, studentize = FALSE)
## 
##  Breusch-Pagan test
## 
## data:  regressao1
## BP = 15.652, df = 3, p-value = 0.001336
lmtest::bptest(regressao1)
## 
##  studentized Breusch-Pagan test
## 
## data:  regressao1
## BP = 10.087, df = 3, p-value = 0.01784

Para H0: erros são homocedásticos, o resultado de p-value inferior a 5% de significância leva, neste exemplo, à rejeição da hipótese nula. Deve-se então corrigir o modelo fazendo o MQP (mínimos quadrados ponderados).

7 Violação dos pressupostos: autocorrelação residual

Nesta seção, analisa-se a Pressuposição: Os resíduos estimados são independentes. Ou seja, não ocorre autocorrelação residual. A principal consequência da violação desta pressuposição é a ineficiência dos estimadores de M.Q.O. mas, continuam não-tendenciosos. Nesta situação, da mesma forma que para a heterocedasticidade, é melhor utilizar o método de Mínimos Quadrados Generalizados (M.Q.G.).

Imagine um modelo mais comum, com autocorrelação de 1ª. Ordem (7.1):

\[\begin{equation} \varepsilon_t=\rho\varepsilon_{t-1}+\nu_t \end{equation}\] \tag{7.1}:

em que \(\rho\) é o parâmetro de autocorrelação e \(\nu\) é um termo de erro “bem comportado”, ou seja, não autocorrelacionado normal de média zero e variância \(\sigma^2_{\nu}\), ou também chamado de ruído branco (white noise).

O coeficiente de autocorrelação \(\rho\) pode ser obtido pela expressão (7.2):

\[\begin{equation} \hat \rho = \frac{{Cov({\varepsilon _t},{\varepsilon _{t - 1}})}}{{{{[Var({\varepsilon _t})]}^{1/2}}{{[Var({\varepsilon _{t - 1}})]}^{1/2}}}} \end{equation}\] \tag{7.2}:

Alguns testes foram elaborados com base nessa ideia a fim de investigar a autocorrelação presente nos resíduos de uma regressão típica do tipo \(Y=X\beta+\varepsilon\). Inicia-se pela discussão dos testes de Durbin-Watson (\(DW\)) e h de Durbin.

7.1 Teste de Durbin-Watson e h de Durbin

O teste mais comum para detectar a presença de erros autocorrelacionados é o Teste de Durbin-Watson (\(DW\)). A hipótese nula a ser testada é que

\(H_0: \rho = 0\) , ou seja, não há autocorrelação residual de primeira ordem;

Contra a hipótese alternativa:

\(H_1: \rho \ne 0\) , ou seja, \(\rho>0\) e ocorre autocorrelação residual positiva de primeira ordem; ou \(\rho<0\) e ocorre autocorrelação negativa de primeira ordem.

A estatística de teste é o chamado DW, calculado como em (7.3):

\[\begin{equation} DW = \frac{{\sum\limits_{t = 2}^T {{{\left( {{{\hat \varepsilon }_t} - {{\hat \varepsilon }_{t - 1}}} \right)}^2}} }}{{\sum\limits_{t = 1}^T {{{\hat \varepsilon }_t}^2} }} = 2\left( {1 - \hat \rho } \right) \end{equation}\] \tag{7.3}:

em que
* \(\rho=0\) então \(DW=2\), indicando ausência de autocorrelação;
* \(\rho=+1\) então \(DW=0\), indicando autocorrelação positiva e perfeita; e,
* \(\rho=-1\) então \(DW=4\), indicando autocorrelação negativa e perfeita.
Portanto, deseja-se DW próximo de 2, ou seja, ausência de autocorrelação.
A análise requer a comparação dos valores de DW com valores tabelados, que prevêem duas distribuições de probabilidade entrelaçadas: uma distribuição inferior e outra superior. Elas determinam áreas de aceitação e rejeição da hipótese nula, como na figura a seguir:


Figura 6.1. Esquema do teste Durbin-Watson.

em que
dL = limite inferior: vem da tabela para n observações e k variáveis explanatórias; e,

dU = limite superior: vem da tabela para n observações e k variáveis explanatórias.

Exemplo:

Para k= 3 (referente a um modelo com X1, X2 e X3), para n = 30 observações, a tabela de DW para 5% de significância nos fornece dL = 1,214 e dU=1,650, e portanto,

4-dL = 4 – 1,214 = 2,786

4 – dU = 4 – 1,650 = 2,350

Para 0<DW<1,214 = rejeição de Ho e autocorrelação positiva

Para 1,214<DW<1,650 = área inconclusiva

Para 1,650<DW<2,350 = aceitação de Ho e não-autocorrelação

Para 2,350<DW<2,786 = área inconclusiva

As deficiências neste método são:

  • presença de áreas inconclusivas (esta deficiência tem sido reduzida pelas rotinas em R que permitem obter o valor da probabilidade associada à estatística de teste e assim facilitando a análise da rejeição de H0);    
  • só testa autocorrelação de primeira ordem;    
  • deve incluir intercepto na regressão; e,    
  • o teste não é válido quando o modelo tem variável dependente defasada como variável explicativa.    

Uma alternativa para contornar essas deficiências é via teste h de Durbin, para casos de variável dependente defasada como variável explicativa. O teste é calculado por (7.4):

\[\begin{equation} h = \rho \sqrt {\frac{T}{{1 - T.Var(\beta )}}} ∼ N(0,1) \end{equation}\] \tag{7.4}:

em que \(T\) é o número de observações e \(\beta\) é o parâmetro da variável dependente defasada. A estatística \(h\) será comparada com os valores críticos de \(\pm1,96\) para 5% de significância.

Teste de Durbin-Watson: Exemplo: seja um modelo de PNB em função da oferta de moeda, para os dados da tabela 5.6, conforme Gujarati (2011, p.157), PNB e estoque de moeda segundo quatro critérios, Estados Unidos, 1970-1983. Pode-se proceder com o script como no quadro. Primeiro se define o modelo como série temporal, realiza a regressão e depois realiza o teste de DW.

dados <- 
  structure(list(ANO = c(1970, 1971, 1972, 1973, 1974, 1975, 1976, 
1977, 1978, 1979, 1980, 1981, 1982, 1983), PNB = c(992.7, 1077.6, 
1185.9, 1326.4, 1434.2, 1549.2, 1718, 1918.3, 2163.9, 2417.8, 
2631.7, 2957.8, 3069.3, 3304.8), M1 = c(216.6, 230.8, 252, 265.9, 
277.6, 291.2, 310.4, 335.4, 363.1, 389.1, 414.9, 441.9, 480.5, 
525.4), M2 = c(628.2, 712.8, 805.2, 861, 908.5, 1023.3, 1163.6, 
1286.7, 1389.1, 1498.5, 1632.6, 1796.6, 1965.4, 2196.3), M3 = c(677.5, 
776.2, 886, 985, 1070.5, 1174.2, 1311.9, 1472.9, 1647.1, 1804.8, 
1990, 2238.2, 2462.5, 2710.4), L = c(816.3, 903.1, 1023, 1141.7, 
1249.3, 1367.9, 1516.6, 1704.7, 1910.6, 2117.1, 2326.2, 2599.8, 
2870.8, 3183.1)), row.names = c(NA, -14L), class = c("tbl_df", 
"tbl", "data.frame"))
attach(dados)
library(knitr)
kable(dados,caption="Dados da tabela 5.6")
Table 7.1: Dados da tabela 5.6
ANO PNB M1 M2 M3 L
1970 992.7 216.6 628.2 677.5 816.3
1971 1077.6 230.8 712.8 776.2 903.1
1972 1185.9 252.0 805.2 886.0 1023.0
1973 1326.4 265.9 861.0 985.0 1141.7
1974 1434.2 277.6 908.5 1070.5 1249.3
1975 1549.2 291.2 1023.3 1174.2 1367.9
1976 1718.0 310.4 1163.6 1311.9 1516.6
1977 1918.3 335.4 1286.7 1472.9 1704.7
1978 2163.9 363.1 1389.1 1647.1 1910.6
1979 2417.8 389.1 1498.5 1804.8 2117.1
1980 2631.7 414.9 1632.6 1990.0 2326.2
1981 2957.8 441.9 1796.6 2238.2 2599.8
1982 3069.3 480.5 1965.4 2462.5 2870.8
1983 3304.8 525.4 2196.3 2710.4 3183.1
dados.st<-ts(dados, start=c(1970), end=c(1983))
PNB.ts<-ts(PNB,start=c(1970), end=c(1983),frequency = 1)
regressao1<-lm(PNB~M1+M2+M3+L, data=dados.st)
summary(regressao1)
## 
## Call:
## lm(formula = PNB ~ M1 + M2 + M3 + L, data = dados.st)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -79.60 -24.04 -13.39  25.84 108.84 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept) 913.48812  720.11266   1.269    0.236
## M1           -6.01416    6.40016  -0.940    0.372
## M2           -0.36474    0.87823  -0.415    0.688
## M3            2.33646    1.98902   1.175    0.270
## L             0.03084    1.68708   0.018    0.986
## 
## Residual standard error: 65.03 on 9 degrees of freedom
## Multiple R-squared:  0.9952, Adjusted R-squared:  0.9931 
## F-statistic: 467.7 on 4 and 9 DF,  p-value: 1.992e-10

O cálculo para DW será para a situação de autocorrelação de primeira ordem, de uma regressão auxiliar como em (7.3). A função dwtest do pacote lmtest permite acessar os resultados do teste de Durbin-Watson com uma distribuição de probabilidade.

lmtest::dwtest(regressao1)
## 
##  Durbin-Watson test
## 
## data:  regressao1
## DW = 0.70426, p-value = 8.024e-05
## alternative hypothesis: true autocorrelation is greater than 0

No exemplo, DW=0.7, com certeza muito afastado de 2, indicando que existe rejeição de \(H_0\) para primeira ordem. Da tabela dos valores críticos de DW (por exemplo o usuário pode consultar as tabelas estatísticas usuais em livros de estatística) tem-se, para:

K=4 (número de variáveis explanatórias excluindo termo constante);
N=14 (tamanho da amostra)
dL = 0.632, logo, 4-dL = 3.368
dU = 2.030, logo, 4-dU = 1.970
Para DW = 0.70, o leitor verificará que se trata de uma área inconclusiva – o leitor deve atentar que neste exemplo, a área inconclusiva se estende por sobre a área de não rejeição de H0!

O resultado foi pela rejeição de \(H_0\), ou seja, rejeita-se que não tenha autocorrelação até 1ª ordem. Neste caso, a deficiência original de que existem áreas inconclusivas é superada pela função dwtest ao associar a uma distribuição de probabilidade e permitir a rejeição ou não da hipótese nula por meio da comparação do p-value = 8.024e-05, portanto menor que o nível de significância de 10% (o leitor pode optar por 5% ou 1%, se desejar).

7.2 Teste de Breusch-Godfrey ou de LM de Correlação Serial

Outro procedimento que contorna as deficiências do teste DW e tem sido incorporado à maioria dos softwares econométricos é o teste de Breusch-Godfrey de autocorrelação superior, ou de Multiplicador de Lagrange para Correlação Serial (Serial Correlation LM Test).

Este teste é bastante útil para detectar autocorrelação de ordens maiores que a primeira, ou seja, para AR(P>1) em que P é a ordem da autocorrelação. A hipótese nula será:

  • \(H_0\): não autocorrelação dos resíduos até ordem \(p\): todos os \(\rho_1,\rho_2,\rho_3,...,\rho_p\) são simultaneamente nulos;
  • \(H_1\): existe autocorrelação dos resíduos até ordem \(p\): pelo menos um dos coeficientes \(\rho_1,\rho_2,\rho_3,...,\rho_p\) é diferente de zero.

Por exemplo, suponha o seguinte processo auto-regressivo (7.5):

\[\begin{equation} {\varepsilon _t} = {\rho _1}{\varepsilon _{t - 1}} + {\rho _2}{\varepsilon _{t - 2}} + {\rho _3}{\varepsilon _{t - 3}} + \ldots + {\rho _p}{\varepsilon _{t - p}} + {\upsilon _t} \end{equation}\] \tag{7.5}:

A hipótese nula será de que todos os coeficientes de autocorrelação são simultaneamente nulos, ou seja, todos os \(\rho_i = 0\), \(i=(1,2,3,...,p)\) e não há autocorrelação de qualquer ordem. A estatística de teste será um multiplicador de Lagrange (\(LM\)) do tipo (7.6):

\[\begin{equation} LM =(n - p)R_0^2 = (n - p)\left( {\frac{{e'{X_0}{{(X_0'X_0)}^{-1}}X_0'e}}{{e'e}}} \right)∼\chi _p^2 \end{equation}\] \tag{7.6}:

O procedimento será:

  1. estimar o modelo de regressão (“a”) pelo método usual de MQO e obter resíduos \(\varepsilon_t\);
  2. estimar o modelo de \(\varepsilon_t\) como função das demais variáveis \(X\) do modelo “a” e também de variáveis \(\varepsilon_t\) defasadas (\(\varepsilon_{t-1},\varepsilon_{t-2},...,etc\)) (formando assim a matriz de regressores \(X_0\)), utilizando para estas defasagens os resíduos obtidos em “a”;
  3. obter o valor de \(R^2\) desta regressão “b” (\(R^2_0\));
  4. A estatística de teste será \(LM_{BG} = (n-p).R^2 ∼ \chi _p^2\) graus de liberdade. \(P\) é o número de defasagens incluídas na regressão “b”.

Se a estatística de teste \(LM_{BG}\) for maior que o valor crítico de \(\chi _p^2\) então se rejeita a hipótese nula e existe autocorrelação serial de ordem \(P\), ou seja, pelo menos um \(\rho_i \ne 0\). Neste teste, podem-se ter variáveis \(X\) ou mesmo \(Y\) defasadas, o que representa uma vantagem sobre o teste \(DW\).

7.2.1 Teste de LM de Correlação Serial no R

Seja o exemplo da definição de moeda afetando o PNB, o script para realizar o teste de \(LM\) de correlação serial até ordem \(p\) é feito pela função bgtest do pacote lmtest. No caso, estabeleceram-se seis (6) testes (ou lags), ou seja, procedeu-se o mesmo teste para ordens 1, 2, … ,6. O usuário poderá realizar o mesmo teste para a estatística de teste tipo F fazendo type = c("F"), se desejar.

require(lmtest)
bgteste1<-bgtest(regressao1, order = 1, type = c("Chisq"), data = dados.st)
bgteste2<-bgtest(regressao1, order = 2, type = c("Chisq"), data = dados.st)
bgteste3<-bgtest(regressao1, order = 3, type = c("Chisq"), data = dados.st)
bgteste4<-bgtest(regressao1, order = 4, type = c("Chisq"), data = dados.st)
bgteste5<-bgtest(regressao1, order = 5, type = c("Chisq"), data = dados.st)
bgteste6<-bgtest(regressao1, order = 6, type = c("Chisq"), data = dados.st)
bgteste1
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  regressao1
## LM test = 9.4239, df = 1, p-value = 0.002142
bgteste2
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  regressao1
## LM test = 9.95, df = 2, p-value = 0.006908
bgteste3
## 
##  Breusch-Godfrey test for serial correlation of order up to 3
## 
## data:  regressao1
## LM test = 12.242, df = 3, p-value = 0.006599
bgteste4
## 
##  Breusch-Godfrey test for serial correlation of order up to 4
## 
## data:  regressao1
## LM test = 12.352, df = 4, p-value = 0.01492
bgteste5
## 
##  Breusch-Godfrey test for serial correlation of order up to 5
## 
## data:  regressao1
## LM test = 12.556, df = 5, p-value = 0.02791
bgteste6
## 
##  Breusch-Godfrey test for serial correlation of order up to 6
## 
## data:  regressao1
## LM test = 12.707, df = 6, p-value = 0.04794

Neste caso, as saídas foram todas pela rejeição de não autocorrelação residual nos seis casos. Deve-se então corrigir o modelo para tal violação de pressuposto clássico. A função retorna no “default” a estatística para a distribuição qui-quadrado. Quando se solicita a saída da estatística “F”, esta tem uma distribuição F para amostra finita.

Uma forma é rodar um script dentro de um loop conforme o script abaixo. No exemplo, o objeto ‘bgorder’ foi definido de 1 até 6, ou seja, serão realizados bgtest de ordem 1 até ordem 6 e os resultados são armazenados no objeto “d”.

# padrao do teste de BG, com distribuição qui-quadrado
bgorder = 1:6  # definindo até a máxima ordem do bgtest
d=NULL
for (p in bgorder) {
   bgtest.chi<-bgtest(regressao1,
                      order = p,type=c("Chisq"), data = dados.st)
   print(bgtest.chi) 
   d = rbind(d,
             data.frame(bgtest.chi$statistic,bgtest.chi$p.value))
   }
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  regressao1
## LM test = 9.4239, df = 1, p-value = 0.002142
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  regressao1
## LM test = 9.95, df = 2, p-value = 0.006908
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 3
## 
## data:  regressao1
## LM test = 12.242, df = 3, p-value = 0.006599
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 4
## 
## data:  regressao1
## LM test = 12.352, df = 4, p-value = 0.01492
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 5
## 
## data:  regressao1
## LM test = 12.556, df = 5, p-value = 0.02791
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 6
## 
## data:  regressao1
## LM test = 12.707, df = 6, p-value = 0.04794
d
##          bgtest.chi.statistic bgtest.chi.p.value
## LM test              9.423914        0.002141738
## LM test1             9.950036        0.006908395
## LM test2            12.241923        0.006598754
## LM test3            12.352221        0.014915519
## LM test4            12.556160        0.027912726
## LM test5            12.706543        0.047940113

Manualmente, é interessante fazer a regressão auxiliar do teste BG e assim observar as significâncias dos termos dos resíduos defasados. Esta regressão, por ser dinâmica, pode ser estimada com os comandos do pacote (library) dynlm.

Fazendo a regressão auxiliar do \(LM_{BG}\) de correlação serial para 1 lag.

u.hat<-residuals(regressao1)
library(dynlm)
reg.aux<-dynlm(u.hat~lag(u.hat,1), data=dados.st)
summary(reg.aux)
## 
## Time series regression with "ts" data:
## Start = 1, End = 14
## 
## Call:
## dynlm(formula = u.hat ~ lag(u.hat, 1), data = dados.st)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -8.337e-16 -3.118e-16 -2.053e-16 -8.430e-17  3.322e-15 
## 
## Coefficients:
##                Estimate Std. Error   t value Pr(>|t|)    
## (Intercept)   0.000e+00  2.741e-16 0.000e+00        1    
## lag(u.hat, 1) 1.000e+00  5.257e-18 1.902e+17   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.026e-15 on 12 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 3.619e+34 on 1 and 12 DF,  p-value: < 2.2e-16

7.2.2 Exemplo: importações de bário

Seja o modelo de explicação das importações chinesas de Bário no julgamento de um processo de acusação de dumping, conforme Wooldridge (2016), exemplos 10.5 e 12.3.


Figura 6.2. QR Code para exemplo importações de bário via Rpubs.

O dataset contém a seguinte descrição das variáveis, embora nem todas sejam utilizadas no exemplo:

-     chnimp: importações de cloreto de bário chinês    
-     bchlimp: importações totais de cloreto de bário dos EUA    
-     befile6: =1 para todos os 6 meses anteriores ao processo    
-     affile6: =1 para todos os 6 meses posteriores ao processo    
-     afdec6: =1 para todos os 6 meses posteriores à decisão    
-     befile12: =1 para todos os 12 meses anteriores ao processo    
-     affile12: =1 para todos os 12 meses posteriores ao processo    
-     afdec12: =1 para todos os 12 meses posteriores à decisão    
-     chempi: índice de produção de químicos     
-     gas: produção de gasolina    
-     rtwex: índice da taxa cambial    
-     spr: =1 para os meses da primavera dos EUA         
-     sum: =1 para os meses do verão dos EUA         
-     fall: =1 para os meses do outono dos EUA     
-     lchnimp: log(chnimp)    
-     lgas: log(gas)    
-     lrtwex: log(rtwex)    
-     lchempi: log(chempi)    
-     t: time trend    
-     feb: =1 se for mês de fevereiro    
-     mar: =1 se for mês de março    
-     apr: ...    
-     may:    
-     jun:    
-     jul:    
-     aug:    
-     sep:    
-     oct:    
-     nov: ...    
-     dec: =1 se for mês de dezembro    
-     percchn: porcentagem de importações oriundas da China

Segue o script para o exemplo 10.5 de Wooldridge (2016): Ações anti-dumping e importações de produtos químicos. As variáveis foram logaritmizadas, exceto as dummies.

library(dynlm);library(stargazer);library(wooldridge)
data(barium, package='wooldridge')
dados=barium
attach(dados)
tsdata <- ts(dados, start=c(1978,2), frequency=12)
mod1 <- dynlm(log(chnimp)~log(chempi)+log(gas)+log(rtwex)+
                               befile6+affile6+afdec6,
              data=tsdata )
summary(mod1)
## 
## Time series regression with "ts" data:
## Start = 1978(2), End = 1988(12)
## 
## Call:
## dynlm(formula = log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) + 
##     befile6 + affile6 + afdec6, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.03356 -0.39080  0.03048  0.40248  1.51720 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -17.80277   21.04537  -0.846   0.3992    
## log(chempi)   3.11719    0.47920   6.505 1.72e-09 ***
## log(gas)      0.19634    0.90662   0.217   0.8289    
## log(rtwex)    0.98302    0.40015   2.457   0.0154 *  
## befile6       0.05957    0.26097   0.228   0.8198    
## affile6      -0.03241    0.26430  -0.123   0.9026    
## afdec6       -0.56524    0.28584  -1.978   0.0502 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5974 on 124 degrees of freedom
## Multiple R-squared:  0.3049, Adjusted R-squared:  0.2712 
## F-statistic: 9.064 on 6 and 124 DF,  p-value: 3.255e-08

Vamos utilizar o pacote stargazer para organizar as saídas de resultados. Agora, criando uma tabela com as várias saídas de modelos, com a geração de AIC e BIC:

require(stargazer)
mod1$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)
star.1 <- stargazer(mod1, 
            title="Título: Resultado da Regressão",
            align=TRUE,
            type = "text", style = "all",
            keep.stat=c("aic","bic","rsq", "adj.rsq","n"))
## 
## Título: Resultado da Regressão
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                             log(chnimp)        
## -----------------------------------------------
## log(chempi)                  3.117***          
##                               (0.479)          
##                              t = 6.505         
##                              p = 0.000         
## log(gas)                       0.196           
##                               (0.907)          
##                              t = 0.217         
##                              p = 0.829         
## log(rtwex)                    0.983**          
##                               (0.400)          
##                              t = 2.457         
##                              p = 0.016         
## befile6                        0.060           
##                               (0.261)          
##                              t = 0.228         
##                              p = 0.820         
## affile6                       -0.032           
##                               (0.264)          
##                             t = -0.123         
##                              p = 0.903         
## afdec6                        -0.565*          
##                               (0.286)          
##                             t = -1.978         
##                              p = 0.051         
## Constant                      -17.803          
##                              (21.045)          
##                             t = -0.846         
##                              p = 0.400         
## -----------------------------------------------
## Observations                    131            
## R2                             0.305           
## Adjusted R2                    0.271           
## Akaike Inf. Crit.             245.573          
## Bayesian Inf. Crit.           268.575          
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

A estimação da regressão auxiliar então será:

library(car); library(lmtest);library(sandwich)
#armazenando o valor de n=numero de observacoes
n<-nrow(dados)  
#obtendo o numero de regressores menos o intercepto
k <- length(coefficients(mod1))-1   
c("núm. de observações: n=",n)
## [1] "núm. de observações: n=" "131"
c("núm. de regressores k=",k)
## [1] "núm. de regressores k=" "6"

Saída do teste “manual” para (como exemplo) até 3 lags:

# Breusch-Godfrey LM Serial Correlation test:
residual <- resid(mod1)
resreg <- dynlm(residual ~
                  L(residual)+L(residual,2)+L(residual,3)+
                   log(chempi)+log(gas)+log(rtwex)+befile6+
                   affile6+afdec6, data=tsdata )
summary(resreg)
## 
## Time series regression with "ts" data:
## Start = 1978(5), End = 1988(12)
## 
## Call:
## dynlm(formula = residual ~ L(residual) + L(residual, 2) + L(residual, 
##     3) + log(chempi) + log(gas) + log(rtwex) + befile6 + affile6 + 
##     afdec6, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.89072 -0.32250  0.05873  0.36376  1.19650 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)  
## (Intercept)    -14.36906   20.65566  -0.696   0.4880  
## L(residual)      0.22149    0.09166   2.417   0.0172 *
## L(residual, 2)   0.13404    0.09216   1.454   0.1485  
## L(residual, 3)   0.12554    0.09112   1.378   0.1709  
## log(chempi)     -0.14316    0.47203  -0.303   0.7622  
## log(gas)         0.62330    0.88597   0.704   0.4831  
## log(rtwex)       0.17867    0.39103   0.457   0.6486  
## befile6         -0.08592    0.25101  -0.342   0.7327  
## affile6         -0.12212    0.25470  -0.479   0.6325  
## afdec6          -0.06683    0.27437  -0.244   0.8080  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5704 on 118 degrees of freedom
## Multiple R-squared:  0.1159, Adjusted R-squared:  0.04848 
## F-statistic: 1.719 on 9 and 118 DF,  p-value: 0.09202

Um teste F seria utilizando a função linearHypothesis que investiga se todos os coeficientes dos resíduos são nulos, ou seja,

linearHypothesis(resreg,
       c("L(residual)","L(residual, 2)","L(residual, 3)"))
## Linear hypothesis test
## 
## Hypothesis:
## L(residual) = 0
## L(residual, 2) = 0
## L(residual, 3) = 0
## 
## Model 1: restricted model
## Model 2: residual ~ L(residual) + L(residual, 2) + L(residual, 3) + log(chempi) + 
##     log(gas) + log(rtwex) + befile6 + affile6 + afdec6
## 
##   Res.Df    RSS Df Sum of Sq      F  Pr(>F)   
## 1    121 43.394                               
## 2    118 38.394  3    5.0005 5.1229 0.00229 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Veja que neste caso, F=5.1229 e p-value = 0.002289, levando à rejeição de \(H_0\): ausência de autocorrelação serial até ordem 3. Ou seja, existe evidência de autocorrelação serial AR(3). Entretanto, não foi possível observar qual o lag com coeficiente significativo. Isto será possível observando o “summary(resreg)” exibido anteriormente, onde o coeficiente de L(residual) foi significativo com p-value = 0.0172.

Olhando a saída da estimação da regressão auxiliar, é possível verificar que apenas o coeficiente de ordem 1 (apenas uma defasagem do resíduo) se mostra significativo. A estatística do teste \(BG\) por qui-quadrado seria \(n.R^2_{aux} = 131*0.1159 = 15,18\) (em valores aproximados). O valor exato da estatística é obtido pela função bgtest:

bgtest3.chi<-bgtest(mod1,
                    order = 3,type=c("Chisq"), 
                    data = tsdata)
# padrao do teste de BG, com distribuição qui-quadrado
bgtest3.chi   
## 
##  Breusch-Godfrey test for serial correlation of order up to 3
## 
## data:  mod1
## LM test = 14.768, df = 3, p-value = 0.002026

Pela estatística “F”, tem-se o resultado em amostra finita, como demonstrado em Wooldridge (2016):

#alternativa do teste de BG com versão para amostra finita
bgtest3.F<-bgtest(mod1,
                  order = 3,
                  type=c("F"), 
                  data = tsdata)
bgtest3.F     
## 
##  Breusch-Godfrey test for serial correlation of order up to 3
## 
## data:  mod1
## LM test = 5.1247, df1 = 3, df2 = 121, p-value = 0.002264

Portanto, conclue-se pela presença de resíduos autocorrelacionados, e observando a regressão auxiliar, percebe-se que estão associados ao resíduo com uma defasagem. Entretanto, deve-se ter cautela, pois a retirada/inclusão de lags da equação de teste pode indicar outros resultados significativos. Sugere-se começar a análise com lags elevados e devem-se retirar os termos um a um, observar a estabilidade dos resultados a fim de avaliar a inclusão de um ou outro lag e alguma justificativa do fenômeno para estes períodos de interferência.

7.2.3 Exemplo: taxa de retorno

Seja um estudo da taxa de retorno (RR) em função da inflação (Inflation) e do crescimento (Growth), conforme o os dados da tabela 12.10 de Gujarati e Porter (2011, 5ed.).

t1210<-
  structure(list(Observation = c(1954, 1955, 1956, 1957, 1958, 
1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 
1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 
1981), RR = c(53, 31.2, 3.7, -13.8, 41.7, 10.5, -1.3, 26.1, -10.5, 
21.2, 15.5, 10.2, -13.3, 21.3, 6.8, -13.5, -0.4, 10.5, 15.4, 
-22.6, -37.3, 31.2, 19.1, -13.1, -1.3, 8.6, -22.2, -12.2), Growth = c(6.7, 
2.1, 1.8, -0.4, 6, 2.1, 2.6, 5.8, 4, 5.3, 6, 6, 2.7, 4.6, 2.8, 
-0.2, 3.4, 5.7, 5.8, -0.6, -1.2, 5.4, 5.5, 5, 2.8, -0.3, 2.6, 
-1.9), Inflation = c(-0.4, 0.4, 2.9, 3, 1.7, 1.5, 1.8, 0.8, 1.8, 
1.6, 1, 2.3, 3.2, 2.7, 4.3, 5, 4.4, 3.8, 3.6, 7.9, 10.8, 6, 4.7, 
5.9, 7.9, 9.8, 10.2, 7.3)), row.names = c(NA, -28L), class = c("tbl_df", 
"tbl", "data.frame"))
knitr::kable(t1210)
Observation RR Growth Inflation
1954 53.0 6.7 -0.4
1955 31.2 2.1 0.4
1956 3.7 1.8 2.9
1957 -13.8 -0.4 3.0
1958 41.7 6.0 1.7
1959 10.5 2.1 1.5
1960 -1.3 2.6 1.8
1961 26.1 5.8 0.8
1962 -10.5 4.0 1.8
1963 21.2 5.3 1.6
1964 15.5 6.0 1.0
1965 10.2 6.0 2.3
1966 -13.3 2.7 3.2
1967 21.3 4.6 2.7
1968 6.8 2.8 4.3
1969 -13.5 -0.2 5.0
1970 -0.4 3.4 4.4
1971 10.5 5.7 3.8
1972 15.4 5.8 3.6
1973 -22.6 -0.6 7.9
1974 -37.3 -1.2 10.8
1975 31.2 5.4 6.0
1976 19.1 5.5 4.7
1977 -13.1 5.0 5.9
1978 -1.3 2.8 7.9
1979 8.6 -0.3 9.8
1980 -22.2 2.6 10.2
1981 -12.2 -1.9 7.3

A regressão original fornece os resultados a seguir, para o modelo linear (mod2).

mod2<-lm((RR)~(Growth)+(Inflation),data=t1210)
summary(mod2)
## 
## Call:
## lm(formula = (RR) ~ (Growth) + (Inflation), data = t1210)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.3061  -9.1276  -0.8433   5.8148  30.7456 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)    3.532      8.111   0.435  0.66700   
## Growth         3.943      1.293   3.049  0.00537 **
## Inflation     -2.499      1.082  -2.310  0.02944 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 14.2 on 25 degrees of freedom
## Multiple R-squared:  0.5724, Adjusted R-squared:  0.5382 
## F-statistic: 16.73 on 2 and 25 DF,  p-value: 2.445e-05

A estatística Durbin-Watson é:

lmtest::dwtest(mod2)
## 
##  Durbin-Watson test
## 
## data:  mod2
## DW = 1.8966, p-value = 0.3123
## alternative hypothesis: true autocorrelation is greater than 0

O p-value = 0.31 não permite rejeitar H0. É possível que não haja autocorrelação de primeira ordem, mas o teste de Breusch-Godfrey permite olhar outras ordens. Neste caso, fazendo para 4 lags, não se rejeita que não existe autocorrelação até p=4 pois \(Obs*R^2=\chi^2=3.903\) com probabilidade de 0.42, indicando aceitação de Ho: não-autocorrelação até quarta ordem.

lmtest::bgtest(mod2,order=4,type = c("Chisq"))
## 
##  Breusch-Godfrey test for serial correlation of order up to 4
## 
## data:  mod2
## LM test = 3.903, df = 4, p-value = 0.4193

7.2.4 Exemplo: preço do cobre

Seja uma regressão do preço do cobre (C) explicado por um índice da indústria (I), do preço do cobre na bolsa (L), de um índice da construção (H) e do preço do alumínio (A), conforme o os dados da tabela 12.7 de Gujarati e Porter (2011, 5ed.).

t127<-
  structure(list(YEAR = c(1951, 1952, 1953, 1954, 1955, 1956, 1957, 
1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 
1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 
1980), C = c(21.89, 22.29, 19.63, 22.85, 33.77, 39.18, 30.58, 
26.3, 30.7, 32.1, 30, 30.8, 30.8, 32.6, 35.4, 36.6, 38.6, 42.2, 
47.9, 58.2, 52, 51.2, 59.5, 77.3, 64.2, 69.6, 66.8, 66.5, 98.3, 
101.4), G = c(330.2, 347.2, 366.1, 366.3, 399.3, 420.7, 442, 
447, 483, 506, 523.3, 563.8, 594.7, 635.7, 688.1, 753, 796.3, 
868.5, 935.5, 982.4, 1063.4, 1171.1, 1306.6, 1412.9, 1528.8, 
1700.1, 1887.2, 2127.6, 2628.8, 2633.1), I = c(45.1, 50.9, 53.3, 
53.6, 54.6, 61.1, 61.9, 57.9, 64.8, 66.2, 66.7, 72.2, 76.5, 81.7, 
89.8, 97.8, 100, 106.3, 111.1, 107.8, 109.6, 119.7, 129.8, 129.3, 
117.8, 129.8, 137.1, 145.2, 152.5, 147.1), L = c(220.4, 259.5, 
256.3, 249.3, 352.3, 329.1, 219.6, 234.8, 237.4, 245.8, 229.2, 
233.9, 234.2, 347, 468.1, 555, 418, 525.2, 620.7, 588.6, 444.4, 
427.8, 727.1, 877.6, 556.6, 780.6, 750.7, 709.8, 935.7, 940.9
), H = c(1491, 1504, 1438, 1551, 1646, 1349, 1224, 1382, 1553.7, 
1296.1, 1365, 1492.5, 1634.9, 1561, 1509.7, 1195.8, 1321.9, 1545.4, 
1499.5, 1469, 2084.5, 2378.5, 2057.5, 1352.5, 1171.4, 1547.6, 
1989.8, 2023.3, 1749.2, 1298.5), A = c(19, 19.41, 20.93, 21.78, 
23.68, 26.01, 27.52, 26.89, 26.85, 27.23, 25.46, 23.88, 22.62, 
23.72, 24.5, 24.5, 24.98, 25.58, 27.18, 28.72, 29, 26.67, 25.33, 
34.06, 39.79, 44.49, 51.23, 54.42, 61.01, 70.87)), row.names = c(NA, 
-30L), class = c("tbl_df", "tbl", "data.frame"))
knitr::kable(t127)
YEAR C G I L H A
1951 21.89 330.2 45.1 220.4 1491.0 19.00
1952 22.29 347.2 50.9 259.5 1504.0 19.41
1953 19.63 366.1 53.3 256.3 1438.0 20.93
1954 22.85 366.3 53.6 249.3 1551.0 21.78
1955 33.77 399.3 54.6 352.3 1646.0 23.68
1956 39.18 420.7 61.1 329.1 1349.0 26.01
1957 30.58 442.0 61.9 219.6 1224.0 27.52
1958 26.30 447.0 57.9 234.8 1382.0 26.89
1959 30.70 483.0 64.8 237.4 1553.7 26.85
1960 32.10 506.0 66.2 245.8 1296.1 27.23
1961 30.00 523.3 66.7 229.2 1365.0 25.46
1962 30.80 563.8 72.2 233.9 1492.5 23.88
1963 30.80 594.7 76.5 234.2 1634.9 22.62
1964 32.60 635.7 81.7 347.0 1561.0 23.72
1965 35.40 688.1 89.8 468.1 1509.7 24.50
1966 36.60 753.0 97.8 555.0 1195.8 24.50
1967 38.60 796.3 100.0 418.0 1321.9 24.98
1968 42.20 868.5 106.3 525.2 1545.4 25.58
1969 47.90 935.5 111.1 620.7 1499.5 27.18
1970 58.20 982.4 107.8 588.6 1469.0 28.72
1971 52.00 1063.4 109.6 444.4 2084.5 29.00
1972 51.20 1171.1 119.7 427.8 2378.5 26.67
1973 59.50 1306.6 129.8 727.1 2057.5 25.33
1974 77.30 1412.9 129.3 877.6 1352.5 34.06
1975 64.20 1528.8 117.8 556.6 1171.4 39.79
1976 69.60 1700.1 129.8 780.6 1547.6 44.49
1977 66.80 1887.2 137.1 750.7 1989.8 51.23
1978 66.50 2127.6 145.2 709.8 2023.3 54.42
1979 98.30 2628.8 152.5 935.7 1749.2 61.01
1980 101.40 2633.1 147.1 940.9 1298.5 70.87

A regressão original fornece os resultados a seguir, para o modelo linear (mod3).

mod3<-lm(log(C)~log(I)+log(L)+log(H)+log(A),data=t127)
summary(mod3)
## 
## Call:
## lm(formula = log(C) ~ log(I) + log(L) + log(H) + log(A), data = t127)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.23624 -0.06926  0.03014  0.07209  0.22490 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.500441   1.003020  -1.496 0.147192    
## log(I)       0.467509   0.165987   2.817 0.009340 ** 
## log(L)       0.279443   0.114726   2.436 0.022328 *  
## log(H)      -0.005152   0.142947  -0.036 0.971538    
## log(A)       0.441449   0.106508   4.145 0.000341 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1217 on 25 degrees of freedom
## Multiple R-squared:  0.9361, Adjusted R-squared:  0.9259 
## F-statistic: 91.54 on 4 and 25 DF,  p-value: 1.491e-14

Os testes de autocorrelação fornecem as estatísticas de DW e de LM de correlação serial para 4 lags.

lmtest::dwtest(mod3)
## 
##  Durbin-Watson test
## 
## data:  mod3
## DW = 0.95494, p-value = 6.388e-05
## alternative hypothesis: true autocorrelation is greater than 0
lmtest::bgtest(mod3,order=4,type = c("Chisq"))
## 
##  Breusch-Godfrey test for serial correlation of order up to 4
## 
## data:  mod3
## LM test = 13.754, df = 4, p-value = 0.008123

Fazendo para todos os lags até 4, temos:

# padrao do teste de BG, com distribuição qui-quadrado
bgorder = 1:4  # definindo até a máxima ordem do bgtest
d=NULL
for (p in bgorder) {
   bgtest.chi<-bgtest(mod3,
                      order = p,type=c("Chisq"), data = t127)
   print(bgtest.chi) 
   d = rbind(d,
             data.frame(bgtest.chi$statistic,bgtest.chi$p.value))
   }
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  mod3
## LM test = 8.8406, df = 1, p-value = 0.002946
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  mod3
## LM test = 13.507, df = 2, p-value = 0.001167
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 3
## 
## data:  mod3
## LM test = 13.707, df = 3, p-value = 0.003332
## 
## 
##  Breusch-Godfrey test for serial correlation of order up to 4
## 
## data:  mod3
## LM test = 13.754, df = 4, p-value = 0.008123
d
##          bgtest.chi.statistic bgtest.chi.p.value
## LM test              8.840634        0.002945967
## LM test1            13.506831        0.001166887
## LM test2            13.706948        0.003332440
## LM test3            13.754136        0.008122541

Existe problema pois rejeita-se \(H_0\) a 1% desde o primeiro lag. Rejeitando para p=1 rejeitará para todos os seguintes! Observe que começa a aumentar a probabilidade após lag=3. Posso fazer a regressão auxiliar do resíduo em função das variáveis X e dos resíduos defasados.

# Breusch-Godfrey LM Serial Correlation test:
residual <- resid(mod3)
resreg <- dynlm(residual ~
                  L(residual)+L(residual,2)+
                  L(residual,3)+L(residual,4)+
                  log(I)+log(L)+log(H)+log(A), data=t127 )
summary(resreg)
## 
## Time series regression with "numeric" data:
## Start = 1, End = 30
## 
## Call:
## dynlm(formula = residual ~ L(residual) + L(residual, 2) + L(residual, 
##     3) + L(residual, 4) + log(I) + log(L) + log(H) + log(A), 
##     data = t127)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -3.176e-17 -1.089e-17 -1.355e-18  3.025e-18  1.191e-16 
## 
## Coefficients: (3 not defined because of singularities)
##                  Estimate Std. Error    t value Pr(>|t|)    
## (Intercept)    -1.636e-16  2.284e-16 -7.170e-01    0.481    
## L(residual)     1.000e+00  4.554e-17  2.196e+16   <2e-16 ***
## L(residual, 2)         NA         NA         NA       NA    
## L(residual, 3)         NA         NA         NA       NA    
## L(residual, 4)         NA         NA         NA       NA    
## log(I)         -3.259e-17  3.780e-17 -8.620e-01    0.397    
## log(L)          2.128e-17  2.612e-17  8.150e-01    0.423    
## log(H)          2.670e-17  3.255e-17  8.200e-01    0.420    
## log(A)         -4.362e-18  2.425e-17 -1.800e-01    0.859    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.772e-17 on 24 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 9.643e+31 on 5 and 24 DF,  p-value: < 2.2e-16

Neste caso, percebe-se que o modelo já acusa ajuste “perfeito” desde a primeira defasagem, o que indica que já para primeiro laga tem-se correlação importante causando uma matriz singular, ou multicolinearidade (outro pressuposto a ser avaliado).

7.3 Correção do problema de autocorrelação - FGLS:

As alternativas que aparecem para correção da autocorrelação são sugeridas entre os procedimentos de Cochrane-Orcutt, Prais-Winsten e Newey-West. Outras abordagens incluem procedimentos autoregressivos e médias móveis em séries temporais, que fogem ao escopo deste capítulo.

7.3.1 Cochrane-Orcutt

Estima-se o modelo inicial por M.Q.O. e depois segue um procedimento iterativo até alcançar a convergência nos parâmetros. Este procedimento é chamado também de Feasible Generalized Least Squares (FGLS). Abaixo estão os passos da estimação de Cochrane-Orcutt:

  1. Estima-se modelo inicial por MQO e obtém \(DW\);
  2. Calcula-se \(\rho = 1 – 0,5.DW\);
  3. Estima a equação transformada:

\[ {Y_t} - \rho {Y_{t - 1}} = {\beta _1}\left( {1 - \rho } \right) + {\beta _2}\left( {{X_t} - \rho {X_{t - 1}}} \right) + {\mu _t} \] ou

\[Y^*= \beta_1^* + \beta_2^*X_1^* + \mu_t^* \] 4. Recalcula-se (2) e verifica-se a convergência para \(\rho\);
5. Repetem-se os passos (2) a (4) até que a convergência seja menor que 0,01.

A implementação no Eviews prevê a inserção de um termo AR(1) na especificação das variáveis da equação. O programa fará a estimação considerando a correção para o autoregressivo de primeira ordem.

7.3.1.1 Exemplo importação de bário por Cochrane-Orcutt:

Seja o mesmo exemplo de feito para identificação da autocorrelação, de explicação das importações chinesas de Bário no julgamento de um processo de acusação de dumping, conforme Wooldridge (2016), exemplos 10.5 e 12.3.

Os dados básicos foram utilizados por C.M. Krupp and P.S. Pollard (1999), Market Responses to Antidumpting Laws: Some Evidence from the U.S. Chemical Industry, Canadian Journal of Economics 29, 199-227. São dados mensais de fevereiro de 1978 a dezembro de 1988, e 131 observações. O modelo é estimado como anteriormente por MQO fazendo uso do script que segue. O leitor poderá ver a tabela de dados em http://rpubs.com/amrofi/ex_wooldridge_12_3_autocorrelation.

library(dynlm);library(stargazer);library(wooldridge)
data(barium, package='wooldridge')
dados=barium
attach(dados)
tsdata <- ts(dados, start=c(1978,2), frequency=12)
# estimação de MQO
mod1 <- dynlm(log(chnimp)~log(chempi)+log(gas)+log(rtwex)+
                               befile6+affile6+afdec6,
              data=tsdata )

Agora, fazendo a correção pela rotina de Cochrane-Orcutt, pelo Mínimos Quadrados Generalizados Factível, ou em inglês Feasible Generalized Least Squares (FGLS). Para tanto, utiliza-se o pacote orcutt indicando a função cochrane.orcutt(mod1) sobre o modelo do MQO, aqui nomeado de mod1.

library(orcutt) 

# estimação de Cochrane-Orcutt  
cochrane.orcutt(mod1)
## Cochrane-orcutt estimation for first order autocorrelation 
##  
## Call:
## dynlm(formula = log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) + 
##     befile6 + affile6 + afdec6, data = tsdata)
## 
##  number of interaction: 8
##  rho 0.293362
## 
## Durbin-Watson statistic 
## (original):    1.45841 , p-value: 1.688e-04
## (transformed): 2.06330 , p-value: 4.91e-01
##  
##  coefficients: 
## (Intercept) log(chempi)    log(gas)  log(rtwex)     befile6     affile6 
##  -37.322241    2.947434    1.054858    1.136918   -0.016372   -0.033082 
##      afdec6 
##   -0.577158

É possível ver que o procedimento de estimação de Cochrane-Orcutt realizou um modelo autoregressivo de primeira ordem chamando a expressão inicial do MQO (ver em Call:) e realizou oito iterações até convergir o valor do parâmetro de autocorrelação (\(\rho\)) aqui chamado de rho, cujo valor foi 0.293362. A estatística de Durbin-Watson auxilia o analista a perceber que houve a correção para autocorrelação residual: o DW original (da expressão do MQO) era 1.45 com p-valor de 0.0001688, portanto rejeitando \(H_0\) de que a autocorrelação era inexistente; o DW transformado, corrigido para AR(1), passou para 2.06 com p-valor de 0.49, portanto, não rejeitando \(H_0\) e indicando que não existe mais correlação residual de primeira ordem. Os coeficientes serão portanto os apontados na saída do modelo, por exemplo, por meio do sumário com a correção de Cochrane-Orcutt.

summary(cochrane.orcutt(mod1))
## Call:
## dynlm(formula = log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) + 
##     befile6 + affile6 + afdec6, data = tsdata)
## 
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -37.322241  23.221406  -1.607  0.11057    
## log(chempi)   2.947434   0.645559   4.566 1.19e-05 ***
## log(gas)      1.054858   0.990903   1.065  0.28917    
## log(rtwex)    1.136918   0.513511   2.214  0.02867 *  
## befile6      -0.016372   0.320722  -0.051  0.95937    
## affile6      -0.033082   0.323152  -0.102  0.91863    
## afdec6       -0.577158   0.343454  -1.680  0.09541 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5756 on 123 degrees of freedom
## Multiple R-squared:  0.1924 ,  Adjusted R-squared:  0.153
## F-statistic: 4.9 on 6 and 123 DF,  p-value: < 1.65e-04
## 
## Durbin-Watson statistic 
## (original):    1.45841 , p-value: 1.688e-04
## (transformed): 2.06330 , p-value: 4.91e-01

7.3.2 Inferência robusta de Newey-West

A correção fazendo inferência robusta tem por objetivo contemplar as deficiências do método de Cochrane-Orcutt, uma vez que este apenas corrige para AR(1). O cálculo dos erros-padrão por estimativas robustas serão desejáveis para formas mais gerais de correlação serial, diga-se, com autocorrelações de ordens superiores (Wooldridge, 2006, p.388).

Desta forma, estima-se o modelo padrão de regressão linear por MQO. Em seguida, a partir desta regressão de MQO, obtenha os resíduos \({\hat r_t}\) de uma regressão auxiliar de \(x_{1t}\) em função dos demais \(x_{kt}\), [\({x_{1t}} = f\left( {{x_{2t}},...,{x_{kt}}} \right)\)], e calcula-se \({\hat a_t} = {\hat r_t}.{\hat u_t}\) em que \(\hat u_t\) são os resíduos da estimação original por MQO. Para uma escolha de \(g\), que pode variar entre a parte inteira de \(4(n/100)^{2/9}\) ou \(n^{1/4}\), calcular

\(\hat v = \sum\limits_{t = 1}^n {\hat a_t^2} + 2\sum\limits_{h = 1}^g {\left[ {1 - h/(g + 1)} \right]} \left( {\sum\limits_{t = h + 1}^n {{{\hat a}_t}{{\hat a}_{t - h}}} } \right)\)

e

\({\rm{ }}ep\left( {{{\hat \beta }_1}} \right) = {\left[ {SE/\hat \sigma } \right]^2}\sqrt {\hat v} {\rm{.}}\)

em que \(SE\) é o erro padrão usual do MQO para \({\hat \beta _{\rm{j}}}\).

Desta forma obtêm-se os erros-padrões robustos dos parâmetros. Fazendo uso do pacote sandwich, e a opção para a matriz de variância-covariância consistente com heterocedasticidade e autocorrelação vcovHAC conforme o script abaixo. Conforme a ordem da autocorelação (se acima da primeira ordem), pode ser mais indicado considerar o tratamento para a estrutura geral de Newey e West (1987) e Wooldridge (1989), citados por Wooldridge (2016, seção 12.5).

# resultados com Erros-padrões HAC 
# (robusto a heterocedasticidade e autocorrelação)
library(sandwich)
coeftest(mod1, vcovHAC)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value  Pr(>|t|)    
## (Intercept) -17.802768  26.497047 -0.6719   0.50291    
## log(chempi)   3.117194   0.654191  4.7650 5.188e-06 ***
## log(gas)      0.196341   1.196616  0.1641   0.86994    
## log(rtwex)    0.983016   0.450206  2.1835   0.03088 *  
## befile6       0.059574   0.153259  0.3887   0.69815    
## affile6      -0.032406   0.233788 -0.1386   0.88998    
## afdec6       -0.565245   0.249559 -2.2650   0.02525 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

A versão do sumário com a correção especificada será obtida fazendo:

summary(mod1,vcov. = vcovHAC)
## 
## Time series regression with "ts" data:
## Start = 1978(2), End = 1988(12)
## 
## Call:
## dynlm(formula = log(chnimp) ~ log(chempi) + log(gas) + log(rtwex) + 
##     befile6 + affile6 + afdec6, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.03356 -0.39080  0.03048  0.40248  1.51720 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -17.80277   26.49705  -0.672   0.5029    
## log(chempi)   3.11719    0.65419   4.765 5.19e-06 ***
## log(gas)      0.19634    1.19662   0.164   0.8699    
## log(rtwex)    0.98302    0.45021   2.183   0.0309 *  
## befile6       0.05957    0.15326   0.389   0.6982    
## affile6      -0.03241    0.23379  -0.139   0.8900    
## afdec6       -0.56524    0.24956  -2.265   0.0253 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5974 on 124 degrees of freedom
## Multiple R-squared:  0.3049, Adjusted R-squared:  0.2712 
## F-statistic:   5.8 on 6 and 124 DF,  p-value: 2.366e-05

7.3.3 Procedimento de Prais-Winsten (1954)

Neste caso, se o modelo MQO era \[{Y_t} = \alpha + {X_t}\beta + {\varepsilon _t}\] , semelhante ao procedimento de Cochrane-Orcutt, Prais-Winsten propõe transformar as variáveis com um \(\rho\) tal que

\[\left( {\sqrt {1 - {\rho ^2}} } \right){Y_t} = \alpha \left( {\sqrt {1 - {\rho ^2}} } \right) + \left( {\sqrt {1 - {\rho ^2}} } \right){X_t}\beta + \left( {\sqrt {1 - {\rho ^2}} } \right){\varepsilon _t}\]

em uma estimação recursiva até a convergência de \(\rho\), similarmente a Cochrane-Orcutt, para um modelo autoregressivo de primeira ordem. Neste caso, a matriz de variância-covariância $$ do modelo será tal que \({\Omega ^{ - 1}} = {G^T}G\) do tipo

\[\Omega = \left[ {\begin{array}{*{20}{c}} {\frac{1}{{1 - {\rho ^2}}}}&{\frac{\rho }{{1 - {\rho ^2}}}}&{\frac{{{\rho ^2}}}{{1 - {\rho ^2}}}}& \cdots &{\frac{{{\rho ^{T - 1}}}}{{1 - {\rho ^2}}}}\\ {\frac{\rho }{{1 - {\rho ^2}}}}&{\frac{1}{{1 - {\rho ^2}}}}&{\frac{\rho }{{1 - {\rho ^2}}}}& \cdots &{\frac{{{\rho ^{T - 2}}}}{{1 - {\rho ^2}}}}\\ {\frac{{{\rho ^2}}}{{1 - {\rho ^2}}}}&{\frac{\rho }{{1 - {\rho ^2}}}}&{\frac{1}{{1 - {\rho ^2}}}}& \cdots &{\frac{{{\rho ^{T - 3}}}}{{1 - {\rho ^2}}}}\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ {\frac{{{\rho ^{T - 1}}}}{{1 - {\rho ^2}}}}&{\frac{{{\rho ^{T - 2}}}}{{1 - {\rho ^2}}}}&{\frac{{{\rho ^{T - 3}}}}{{1 - {\rho ^2}}}}& \cdots &{\frac{1}{{1 - {\rho ^2}}}} \end{array}} \right]\]
e

\[{\rm{G}} = \left[ {\begin{array}{*{20}{c}} {\sqrt {1 - {\rho ^2}} }&0&0& \cdots &0\\ { - \rho }&1&0& \cdots &0\\ 0&{ - \rho }&1& \cdots &0\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0&0&0& \cdots &1 \end{array}} \right]\].

Do ponto de vista de código em R, utiliza-se o pacote prais para realizar a estimação.

library(prais)
barium_prais_winsten <- prais_winsten(log(chnimp)~log(chempi)+log(gas)+
                 log(rtwex)+befile6+affile6+afdec6, data=tsdata)
## Iteration 0: rho = 0
## Iteration 1: rho = 0.2708
## Iteration 2: rho = 0.291
## Iteration 3: rho = 0.293
## Iteration 4: rho = 0.2932
## Iteration 5: rho = 0.2932
## Iteration 6: rho = 0.2932
## Iteration 7: rho = 0.2932

Os resultados estimados serão:

summary(barium_prais_winsten)
## 
## Call:
## prais_winsten(formula = log(chnimp) ~ log(chempi) + log(gas) + 
##     log(rtwex) + befile6 + affile6 + afdec6, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.99386 -0.32219  0.03747  0.40226  1.50281 
## 
## AR(1) coefficient rho after 7 Iterations: 0.2932
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -37.07742   22.77831  -1.628   0.1061    
## log(chempi)   2.94095    0.63284   4.647 8.46e-06 ***
## log(gas)      1.04637    0.97734   1.071   0.2864    
## log(rtwex)    1.13279    0.50666   2.236   0.0272 *  
## befile6      -0.01648    0.31938  -0.052   0.9589    
## affile6      -0.03316    0.32181  -0.103   0.9181    
## afdec6       -0.57681    0.34199  -1.687   0.0942 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5733 on 124 degrees of freedom
## Multiple R-squared:  0.2021, Adjusted R-squared:  0.1635 
## F-statistic: 5.235 on 6 and 124 DF,  p-value: 7.764e-05
## 
## Durbin-Watson statistic (original): 1.458 
## Durbin-Watson statistic (transformed): 2.087

8 Violação dos pressupostos: multicolinearidade

Nesta seção, analisa-se a Pressuposição: \(H_0\): Ausência de multicolinearidade entre as variáveis explicativas. Ou seja, as variáveis explicativas não apresentam relação linear perfeita ou quase perfeita. A hipótese alternativa será: \(H_1\): existe relação linear entre as variáveis explicativas. Conforme o capítulo das Pressuposições do Modelo de Regressão Linear, principal consequência da violação desta pressuposição, no caso de uma relação perfeita é a indeterminação de \(\hat \beta = (X'X)^{-1}(X'Y)\) pois \((X'X)^{-1}\) é singular. No caso de uma multicolinearidade imperfeita, ocorrerá uma inflação da variância dos parâmetros tal que poderá conduzir à equivocada conclusão pela insignificância dos parâmetros.

As estimativas dos parâmetros ficam muito sensíveis, ou seja, retirando uma ou poucas observações as estimativas alteram muito em termos de magnitudes e sinais.

As consequências sobre as propriedades dos estimadores de M.Q.O.: a multicolinearidade não afeta em nada as propriedades dos estimadores de M.Q.O., que continuam os melhores estimadores lineares não tendenciosos (MELNT, ou do inglês BLUE = Best Linear Unbiased Estimator); conforme Gujarati e Porter (2011, p.335), haverá maior dificuldade na estimação dos parâmetros com erros-padrões muito pequenos, mas as propriedades de MELNT permanecem.

Olhando o problema da multicolinearidade com respeito à singularidade da matriz \((X'X)^{-1}\), pode-se verificar o quadro.

Matrix X Determinante de \(X'X\) Variância: \({\sigma ^2}{\left( {X'X} \right)^{ - 1}}\)
\(\left[ {\begin{array}{*{20}{c}}1&0\\0&1\end{array}} \right]\) \(1,00\) \(\left[ {\begin{array}{*{20}{c}} 1&0\\0&1\end{array}} \right]\)
\(\left[ {\begin{array}{*{20}{c}}1&{0,5}\\{0,5}&1\end{array}} \right]\) \(0,75\) \(\left[ {\begin{array}{*{20}{c}}{1,333}&{ - 0,666}\\{ - 0,666}&{1,333}\end{array}} \right]\)
\(\left[ {\begin{array}{*{20}{c}}1&{0,8}\\{0,8}&1\end{array}} \right]\) \(0,36\) \(\left[ {\begin{array}{*{20}{c}}{2,777}&{ - 2,222}\\{ - 2,222}&{2,777}\end{array}} \right]\)
\(\left[ {\begin{array}{*{20}{c}}1&{0,99}\\{0,99}&1\end{array}} \right]\) \(0,02\) \(\left[ {\begin{array}{*{20}{c}}{50,251}&{ - 49,749}\\{ - 49,749}&{50,251}\end{array}} \right]\)
\(\vdots\) \(\vdots\) \(\vdots\)
\(\left[ {\begin{array}{*{20}{c}}1&1\\1&1\end{array}} \right]\) \(0,00\) indefinida

A identificação de eventual problema da multicolinearidade, conforme Gujarati (2015), pode ser feita de várias formas, várias análises:

  1. Ocorrência de \(R^2\) alto e estatísticas “t”´s não-significativas (lembrar que t na regressão será \(\hat \beta_i/s_{\hat\beta_i}\), ou seja, o parâmetro estimado dividido pelo seu respectivo erro-padrão);

  2. Altas correlações simples entre as variáveis explicativas, por exemplo, acima de 0,8: A análise de correlação permitirá ter uma ideia inicial de possível multicolinearidade. As correlações em módulo com valores acima de 0,8 podem indicar presença de relação linear entre as variáveis. Neste caso, preocupa-se com as variáveis que estão no modelo e a correlação entre as variáveis explicativas do modelo. Isto não exclui as correlações “múltiplas”, ou seja, a possível relação entre mais de duas variáveis, ou seja, a multicolinearidade;

  3. Altas correlações parciais entre os X´s: verificar o coeficiente de correlação parcial quando algumas variáveis são consideradas constantes. Esse caso é útil para mais de duas variáveis explicativas, pois permite avaliar eventuais relações além de duas a duas;

  4. Regressões auxiliares: fazer a regressão auxiliar considerando o \(X_i\) como variável dependente das demais variáveis \(X_j\) para \(j \ne i\). Esta alternativa permite identificar quais variáveis estão mais relacionadas. Se o \(R^2_{X_i|X_j}\) da regressão auxiliar (\(X_i=f(X_j, X_k)\) para todo \(j,k \ne i\)) for alto, então se tem a indicação de multicolinearidade:

para \(i\) e \(j\) de 1 a \(k\):

\[ X_1 = f(X_2, X_3, X_4, ... , X_k)\\ X_2 = g(X_1, X_3, X_4, ... , X_k)\\ X_3 = h(X_1, X_2, X_4, ... , X_k)\\ Etc \]

  1. Regra de Klein: a multicolinearidade não é prejudicial se

\[\begin{equation} R_{Y|{X_1},{X_2}, \ldots ,{X_k}}^2 > R_{{X_i}|{X_1},{X_2}, \ldots ,{X_k}}^2 \end{equation}\] para todo \(i \ne k\).

Ou seja, se o \(R^2\) da regressão principal (\(R^2_{Y∙{X_1},{X_2}}\) do modelo em estudo) for maior que o R² da regressão auxiliar da variável X em análise (\(R_{{X_i}∙{X_1},{X_2}, \ldots ,{X_k}}^2\)).

  1. Verificar a estabilidade das estimativas dos \(\hat \beta_i\) de cada variável em cada equação auxiliar, aumentando um X de cada vez:

\[ Y = f(X_1)\\ Y = f(X_1, X_2)\\ Y = f(X_1, X_2, X_3)\\ Etc \]

  1. Verificar os fatores de inflação da variância (FIV) centrados.
    As soluções para a presença de multicolinearidade passam pela retirada de variáveis problemáticas, ou omissão de variáveis, deixando aquela mais relevante para a pesquisa. As regressões auxiliares ajudarão na escolha entre as variáveis para decidir qual(is) será(ão) retirada(s) do modelo. O problema com a omissão de variáveis é a inserção de erro de especificação.

Outra opção é aumentar o tamanho da amostra, caso possível. O aumento da amostra é o mesmo que reduzir a micronumerosidade e com isto se ganham observações que tendem a não estar com uma perfeita relação com outras variáveis.

Uma terceira opção é transformar as variáveis problemáticas, fazendo razões entre elas (\(X_i/X_j\)), como os preços relativos. A limitação deste procedimento é que se perde a relação direta, ficando apenas com parâmetros que refletem relações para a razão.

O cálculo das correlações parciais não é direto nem simples quando se tratar de regressão múltipla. Uma alternativa é usar pacotes que já contêm a rotina como, por exemplo o R ou o Stata, fazendo uso de comandos como a seguir, para o exemplo dado em Greene (2002:p.22-30), dados de investimento dos Estados Unidos de 1968-1982.

8.1 Exemplo de Greene (2002:p.22-30)

Figura QR Code para o exemplo de Greene (2002)

(#fig:qrcode_greene)Figura QR Code para o exemplo de Greene (2002)

Seja o modelo de regressão múltipla de Greene (2002:p.22-30), com dados de investimento dos Estados Unidos de 1968-1982 (Tabela do Apêndice F3.1). Para estimar uma equação de investimento.

Chamando os dados de http://pages.stern.nyu.edu/~wgreene/Text/Edition7/TableF3-1old.txt a partir do arquivo ou a partir do resultado do dput().

dados <- structure(list(year = c(1968, 1969, 1970, 1971, 1972, 1973,  
1974,1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982), index = c(1, 
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), gnp = c(873.4, 
944, 992.7, 1077.6, 1185.9, 1326.4, 1434.2, 1549.2, 1718, 1918.3, 
2163.9, 2417.8, 2633.1, 2937.7, 3057.5), invest = c(133.3, 149.3, 
144.2, 166.4, 195, 229.8, 228.7, 206.1, 257.9, 324.1, 386.6, 
423, 402.3, 471.5, 421.9), cpi = c(82.54, 86.79, 91.45, 96.01, 
100, 105.75, 115.08, 125.79, 132.34, 140.05, 150.42, 163.42, 
178.64, 195.51, 207.23), interest = c(5.16, 5.87, 5.95, 4.88, 
4.5, 6.44, 7.83, 6.25, 5.5, 5.46, 7.46, 10.28, 11.77, 13.42, 
11.02), y = c(0.1614975, 0.1720244, 0.1576818, 0.1733153, 0.195, 
0.217305, 0.1987313, 0.1638445, 0.1948768, 0.2314174, 0.2570137, 
0.2588423, 0.2252015, 0.2411641, 0.2035902), g = c(1.058154, 
1.087683, 1.085511, 1.122383, 1.1859, 1.254279, 1.246264, 1.231576, 
1.298171, 1.369725, 1.438572, 1.479501, 1.47397, 1.502583, 1.475414
), p = c(4.4, 5.149019, 5.369282, 4.986331, 4.155817, 5.75, 8.822695, 
9.306569, 5.207091, 5.825903, 7.404499, 8.642467, 9.313425, 9.443574, 
5.994578)), row.names = c(NA, -15L), class = c("tbl_df", "tbl", 
"data.frame"))
attach(dados)
## The following object is masked _by_ .GlobalEnv:
## 
##     p

São dados de investimento dos Estados Unidos da América em http://people.stern.nyu.edu/wgreene/Text/Edition7/TableF3-1old.txt), contendo as seguintes variáveis: - year: ano - invest = investimento nominal;
- index = tendência;
- gnp = PNB nominal;
- interest = r = taxa de juros;
- cpi = indice de preco - p = rate of inflation computed as the percentage change in the CPI: taxa de inflação; - y = investimento real - g = PNB real

Vamos ver como está a tabela importada:

library(knitr)
kable(dados,caption="Dados da tabela F3-1")
Table 8.1: Dados da tabela F3-1
year index gnp invest cpi interest y g p
1968 1 873.4 133.3 82.54 5.16 0.1614975 1.058154 4.400000
1969 2 944.0 149.3 86.79 5.87 0.1720244 1.087683 5.149019
1970 3 992.7 144.2 91.45 5.95 0.1576818 1.085511 5.369282
1971 4 1077.6 166.4 96.01 4.88 0.1733153 1.122383 4.986331
1972 5 1185.9 195.0 100.00 4.50 0.1950000 1.185900 4.155817
1973 6 1326.4 229.8 105.75 6.44 0.2173050 1.254279 5.750000
1974 7 1434.2 228.7 115.08 7.83 0.1987313 1.246264 8.822695
1975 8 1549.2 206.1 125.79 6.25 0.1638445 1.231576 9.306569
1976 9 1718.0 257.9 132.34 5.50 0.1948768 1.298171 5.207091
1977 10 1918.3 324.1 140.05 5.46 0.2314174 1.369725 5.825903
1978 11 2163.9 386.6 150.42 7.46 0.2570137 1.438572 7.404499
1979 12 2417.8 423.0 163.42 10.28 0.2588423 1.479501 8.642467
1980 13 2633.1 402.3 178.64 11.77 0.2252015 1.473970 9.313425
1981 14 2937.7 471.5 195.51 13.42 0.2411641 1.502583 9.443574
1982 15 3057.5 421.9 207.23 11.02 0.2035902 1.475414 5.994578

Estimando o modelo linear de regressao multipla fazendo conforme a expressão do enunciado. Fazendo as regressoes com uso de logaritmo e depois sem logaritmos.

tsdata <- ts(dados, start=c(1968), frequency=1)
# regressao multipla de y~index+g+interest+p
mod1 <- lm(y~index+g+interest+p, data=tsdata )

Vamos utilizar o pacote stargazer para organizar as saídas de resultados. Se a saída fosse apenas pelo comando summary, sairia da forma:

summary(mod1)
## 
## Call:
## lm(formula = y ~ index + g + interest + p, data = tsdata)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -0.0100884 -0.0024963  0.0004332  0.0028830  0.0079355 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.5090669  0.0539329  -9.439 2.69e-06 ***
## index       -0.0165896  0.0019294  -8.598 6.23e-06 ***
## g            0.6703021  0.0537996  12.459 2.05e-07 ***
## interest    -0.0024282  0.0011938  -2.034   0.0693 .  
## p            0.0000639  0.0013188   0.048   0.9623    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.006571 on 10 degrees of freedom
## Multiple R-squared:  0.9735, Adjusted R-squared:  0.9629 
## F-statistic: 91.83 on 4 and 10 DF,  p-value: 7.672e-08

Agora, criando uma tabela com a saída do modelo, com o pacote stargazer tem-se, com a geração de AIC e BIC:

library(stargazer)
mod1$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)

library(stargazer)
star.1 <- stargazer(mod1,
          title="Título: Resultado da Regressão",
          align=TRUE,
          type = "text", style = "all",
          keep.stat=c("aic","bic","rsq", "adj.rsq","n")
)
## 
## Título: Resultado da Regressão
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                  y             
## -----------------------------------------------
## index                        -0.017***         
##                               (0.002)          
##                             t = -8.598         
##                             p = 0.00001        
## g                            0.670***          
##                               (0.054)          
##                             t = 12.459         
##                             p = 0.00000        
## interest                      -0.002*          
##                               (0.001)          
##                             t = -2.034         
##                              p = 0.070         
## p                             0.0001           
##                               (0.001)          
##                              t = 0.048         
##                              p = 0.963         
## Constant                     -0.509***         
##                               (0.054)          
##                             t = -9.439         
##                             p = 0.00001        
## -----------------------------------------------
## Observations                    15             
## R2                             0.973           
## Adjusted R2                    0.963           
## Akaike Inf. Crit.            -102.265          
## Bayesian Inf. Crit.           -98.017          
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

8.1.1 Correlação Simples

A análise de correlação permitirá ter uma ideia inicial de possível multicolinearidade:

correlacao<-cor(dados)
correlacao
##               year     index       gnp    invest       cpi  interest         y
## year     1.0000000 1.0000000 0.9783635 0.9593932 0.9784008 0.8042624 0.7489120
## index    1.0000000 1.0000000 0.9783635 0.9593932 0.9784008 0.8042624 0.7489120
## gnp      0.9783635 0.9783635 1.0000000 0.9728115 0.9977459 0.8792517 0.7196194
## invest   0.9593932 0.9593932 0.9728115 1.0000000 0.9565138 0.8528462 0.8555747
## cpi      0.9784008 0.9784008 0.9977459 0.9565138 1.0000000 0.8710475 0.6776192
## interest 0.8042624 0.8042624 0.8792517 0.8528462 0.8710475 1.0000000 0.5855466
## y        0.7489120 0.7489120 0.7196194 0.8555747 0.6776192 0.5855466 1.0000000
## g        0.9786167 0.9786167 0.9609032 0.9856688 0.9473514 0.8039356 0.8628333
## p        0.6356942 0.6356942 0.6059782 0.6132829 0.6031172 0.7243053 0.4800352
##                  g         p
## year     0.9786167 0.6356942
## index    0.9786167 0.6356942
## gnp      0.9609032 0.6059782
## invest   0.9856688 0.6132829
## cpi      0.9473514 0.6031172
## interest 0.8039356 0.7243053
## y        0.8628333 0.4800352
## g        1.0000000 0.6362055
## p        0.6362055 1.0000000
# install.packages('corrplot')
library(corrplot)
## corrplot 0.89 loaded
corel <- cor(dados)
corrplot(corel, method = "number")

As correlações em módulo com valores acima de 0.8 podem indicar presença de relação linear entre as variáveis.

8.1.2 Correlação parcial

Fazendo uso do pacote ppcor, calculam-se as correlações parciais entre as variáveis.

library(ppcor)
round(pcor(dados)$estimate, 03)
## Warning in pcor(dados): The inverse of variance-covariance matrix is calculated
## using Moore-Penrose generalized matrix invers due to its determinant of zero.
##         [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]
##  [1,]  1.000 -1.000 -0.128  0.291  0.279 -0.650 -0.961 -0.838  0.601
##  [2,] -1.000  1.000 -0.128  0.291  0.279 -0.650 -0.961 -0.838  0.601
##  [3,] -0.128 -0.128  1.000  0.962  0.986  0.491 -0.364 -0.640 -0.443
##  [4,]  0.291  0.291  0.962  1.000 -0.963 -0.343  0.501  0.740  0.327
##  [5,]  0.279  0.279  0.986 -0.963  1.000 -0.360  0.506  0.749  0.329
##  [6,] -0.650 -0.650  0.491 -0.343 -0.360  1.000 -0.532 -0.196  0.841
##  [7,] -0.961 -0.961 -0.364  0.501  0.506 -0.532  1.000 -0.927  0.521
##  [8,] -0.838 -0.838 -0.640  0.740  0.749 -0.196 -0.927  1.000  0.177
##  [9,]  0.601  0.601 -0.443  0.327  0.329  0.841  0.521  0.177  1.000

8.1.3 Teste de restrição do modelo

Esse teste faz uma estatística para avaliar um modelo restrito contra o modelo irrestrito.

library(car)
# F test: APENAS ESPECIFICO AS QUE TERAO TESTE DE OMISSAO
myH0 <- c("p")
linearHypothesis(mod1, myH0)
## Linear hypothesis test
## 
## Hypothesis:
## p = 0
## 
## Model 1: restricted model
## Model 2: y ~ index + g + interest + p
## 
##   Res.Df        RSS Df  Sum of Sq      F Pr(>F)
## 1     11 0.00043191                            
## 2     10 0.00043181  1 1.0136e-07 0.0023 0.9623

Neste caso, não rejeitamos \(H_0\), Pr(>F)=0.96 e não estamos na área de rejeição, e concluímos que p não tem parâmetro significativo diferente de zero. Vamos trabalhar com um modelo reduzido, sem \(p\).

8.1.4 Fator de Inflação da Variância (FIV)

Outro método é a análise do Fator de variância inflacionária (FVI), ou no inglês Variance Inflation Factor (VIF), ou ainda, Fator de inflação da Variância (Gujarati, 2006: p.282), para cada variável explicativa. Neste caso, faz-se a estimação de \(x_i=f(x_1,x_2,x_3…x_j )\) (ou seja, a regressão auxiliar de uma variável explicativa x em função das demais explicativas) e obtém-se o \(R_i^2\) para cada variável (cada equação auxiliar). O FVI da variável \(i\) será dado pela expressão.

\[\begin{equation} FVI_i = \frac{1}{{1 - R_i^2}} \end{equation}\]

Se o conjunto de variáveis explicativas for independente, não-correlacionado, o \(FVI\) será igual a um (\(FVI=1\)). O Gretl estabelece uma comparação de \(FVI\) com 10, ou seja, valores superiores a \(FVI= 10\) indicariam multicolinearidade entre estas variáveis. Já Santana (2003: p.244) recomenda o valor de \(FVI = 5\). Já Greene (2002: p.58) cita autores os quais recomendam atenção para valores de \(FVI\) maiores que 20. Acredito ser mais prudente ficar com o valor de \(FIV = 5\), a favor da segurança! Gujarati (2006: p.284) faz uma análise interessante para averiguar a tolerância implícita no modelo.

No exemplo de Greene (2002), é possível verificar que o \(R^2 = 0,9735\) na equação original, e que à exceção de p, os demais parâmetros foram estatisticamente significativos a 10%. A estatística VIF poderá ser obtida fazendo:

# library(car)
reg1.vif<-vif(mod1)
reg1.vif
##     index         g  interest         p 
## 24.138403 24.113602  3.654118  2.141294

Da mesma forma que anteriormente, é possível ver valores acima de 5 para as variáveis index e g, que podem estar com respectivas variâncias dos parâmetros “inflacionadas”. Pela regra de Klein, estimam-se as regressões auxiliares alternando as variáveis explicativas na posição de variável explicada e observam-se os respectivos \(R^2\) das regressões auxiliares comparando com o \(R^2 = 0,9735\) da regressão principal.

8.1.4.1 regressões auxiliares para a regra de Klein, exemplo de Greene(2002)

Foram feitas as regressões de cada \(x_i\) como função dos demais \(x_j\).

  • Regressão de index:
reg1.index <- lm(index~g+interest+p, data=tsdata )
summary(reg1.index)
## 
## Call:
## lm(formula = index ~ g + interest + p, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.26201 -0.72377 -0.09786  0.46658  1.82371 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -26.31751    2.84076  -9.264 1.58e-06 ***
## g            26.16778    2.90406   9.011 2.07e-06 ***
## interest      0.07354    0.18523   0.397    0.699    
## p             0.01253    0.20606   0.061    0.953    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.027 on 11 degrees of freedom
## Multiple R-squared:  0.9586, Adjusted R-squared:  0.9473 
## F-statistic: 84.84 on 3 and 11 DF,  p-value: 6.885e-08
  • Regressão de g:
reg1.g <- lm(g~index+interest+p, data=tsdata )
summary(reg1.g)
## 
## Call:
## lm(formula = g ~ index + interest + p, data = tsdata)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.055715 -0.019970  0.006032  0.017044  0.049755 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.9953314  0.0360281  27.627 1.63e-11 ***
## index       0.0336554  0.0037350   9.011 2.07e-06 ***
## interest    0.0024341  0.0066499   0.366    0.721    
## p           0.0006912  0.0073883   0.094    0.927    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03683 on 11 degrees of freedom
## Multiple R-squared:  0.9585, Adjusted R-squared:  0.9472 
## F-statistic: 84.75 on 3 and 11 DF,  p-value: 6.924e-08
  • Regressão de interest:
reg1.interest <- lm(interest~index+g+p, data=tsdata )
summary(reg1.interest)
## 
## Call:
## lm(formula = interest ~ index + g + p, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.36627 -1.03928 -0.00877  1.21104  2.33681 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  -3.8159    13.5732  -0.281    0.784
## index         0.1921     0.4839   0.397    0.699
## g             4.9437    13.5062   0.366    0.721
## p             0.5063     0.2961   1.710    0.115
## 
## Residual standard error: 1.66 on 11 degrees of freedom
## Multiple R-squared:  0.7263, Adjusted R-squared:  0.6517 
## F-statistic: 9.732 on 3 and 11 DF,  p-value: 0.001986
  • Regressão de p:
reg1.p <- lm(p~index+g+interest, data=tsdata )
summary(reg1.p)
## 
## Call:
## lm(formula = p ~ index + g + interest, data = tsdata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.5409 -0.5644 -0.2925  0.4927  3.2182 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  1.86426   12.31724   0.151    0.882
## index        0.02683    0.44102   0.061    0.953
## g            1.15028   12.29468   0.094    0.927
## interest     0.41486    0.24257   1.710    0.115
## 
## Residual standard error: 1.502 on 11 degrees of freedom
## Multiple R-squared:  0.533,  Adjusted R-squared:  0.4056 
## F-statistic: 4.185 on 3 and 11 DF,  p-value: 0.03328

Resumindo os resultados de cada equação:

reg1.r2=summary(mod1)$'r.squared'
reg1.g.r2=summary(reg1.g)$'r.squared'
reg1.index.r2=summary(reg1.index)$'r.squared'
reg1.interest.r2=summary(reg1.interest)$'r.squared'
reg1.p.r2=summary(reg1.p)$'r.squared'
knitr::kable(col.names = c("R²"),
    rbind(reg1.r2,reg1.g.r2,reg1.index.r2,reg1.interest.r2,reg1.p.r2))
reg1.r2 0.9734974
reg1.g.r2 0.9585296
reg1.index.r2 0.9585722
reg1.interest.r2 0.7263362
reg1.p.r2 0.5329926

Portanto, nenhum dos \(R^2\) das regressões auxiliares foi acima de \(R^2 = 0,9735\) da regressão principal e não foi possível afirmar que existe um problema de multicolinearidade no modelo.

Com relação à correção, neste caso, deve-se optar por tirar uma das variáveis (index ou g), ou alterar o modelo fazendo alguma combinação entre as duas. No exemplo, a variável index é uma variável tendência, e a variável g é o GNP real (ou PNB real no português). Ou seja, é uma relação de tendência temporal dentro da g. O mais sensato é retirar a variável tendência. Faremos um exercício retirando a variável index do modelo original para ver se melhora o ajustamento. A ideia é retirar esta variável por causa do VIF acima de 20 e porque é melhor teoricamente ter a variável g neste modelo.

8.1.4.2 Retirando a variável index

Estimou-se o modelo sem a variável index. Percebe-se que o modelo fica com pior ajustamento, \(R^2\) mais baixo que o anterior, apenas uma variável explicativa tem parâmetro significativo e deste modo, percebe-se que é melhor manter o modelo da forma como estava.

reg2 <- lm(y~g+interest+p, data=tsdata )
summary(reg2)
## 
## Call:
## lm(formula = y ~ g + interest + p, data = tsdata)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.031352 -0.004970  0.003501  0.009404  0.020617 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.072471   0.050213  -1.443 0.176812    
## g            0.236190   0.051332   4.601 0.000763 ***
## interest    -0.003648   0.003274  -1.114 0.288942    
## p           -0.000144   0.003642  -0.040 0.969163    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01815 on 11 degrees of freedom
## Multiple R-squared:  0.7776, Adjusted R-squared:  0.7169 
## F-statistic: 12.82 on 3 and 11 DF,  p-value: 0.0006529
reg2.vif<-vif(reg2)
reg2.vif
##        g interest        p 
## 2.877086 3.602503 2.140574

Observe que, como esperado, \(R^2\) decresce para 0,7776. Ou seja, reduziu bastante o poder de explicação. Embora houvesse alguma indicação de multicolinearidade entre g e index, ao retirar a variável tendência, não apenas reduziu bastante o poder de explicação como também a variável interest perdeu poder de explicação. Existe uma relação importante de y com a variável index (tendência). Isto é natural, considerando que a variável explicada y é o investimento real. Ou seja, existe uma relação esperada do investimento no tempo (relação com a tendência, index) assim como com a taxa de juros (interest) e o GNP real (g). Assim, é mais plausível deixar o modelo com a variável index. Isto pode estar causando o problema chamado de regressão espúria devido à “não-estacionariedade” da série.

8.2 Exemplo forças armadas

Seja o exemplo da Tabela 10.8 de Gujarati (5ed.,p.354-357) com Dados de Longley (1967).

Figura QR Code para o exemplo de Longley (1967)

(#fig:qrcode_longley)Figura QR Code para o exemplo de Longley (1967)

Sejam as variáveis: Y (número de pessoas empregadas - Employed); X1 (deflator do PNB - GNP.deflator), x2 (PNB-GNP), x3 (desempregados - Unemployed), x4 (pessoas nas forças armadas - Armed.Forces), x5 (população maior de 14anos - Population) e x6 (tendência - Year) .

Primeiro se estima o modelo. Os dados podem ser obtidos em vários pacotes do R como o datasets, ou o AER. Os dados estão em formatos diferentes, porém similares. Os detalhes dos dados de datasets estão em https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/longley.html com sete variáveis. Os do AER estão em https://artax.karlin.mff.cuni.cz/r-help/library/AER/html/Longley.html com quatro variáveis.

O pacote datasets tem disponíveis distintos conjuntos de dados. Por exemplo, os dados de Longley referentes:

  • ao numero de pessoas empregadas (Employed),
  • ao deflator implícito do Produto Nacional Bruto (GNP.deflator),
  • ao Produto Nacional Bruto (GNP),
  • ao numero de desempregados (Unemployed),
  • ao numero de pessoas nas forças armadas (Armed.Forces),
  • à população ativa (>16 anos) (Population), y
  • uma tendencia linear (Year).
# help("Greene2003", package = "AER")
# Dados dos Estados Unidos - 1947-1962, anuais 
# Y (número de pessoas empregadas) = Employed; 
# X1 (deflator do PNB) = GNP.deflator, 
# x2 (PNB)= GNP, 
# x3 (desempregados) = Unemployed, 
# x4 (pessoas nas forças armadas) = Armed.Forces, 
# x5 (população maior de 14anos) = Population  
# x6 (tendência) = Year
# dados disponiveis no pacote datasets ou no AER ou abaixo

Obtendo os dados a partir do pacote, chamando diretamente ou pela opção do dput().

# attach(longley) # puxa direto do pacote

dados<-structure(list(obs = c(1947, 1948, 1949, 1950, 1951, 1952,  
1953,1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962), 
Employed = c(60323, 
61122, 60171, 61187, 63221, 63639, 64989, 63761, 66019, 67857, 
68169, 66513, 68655, 69564, 69331, 70551), GNP.deflator = c(83, 
88.5, 88.2, 89.5, 96.2, 98.1, 99, 100, 101.2, 104.6, 108.4, 110.8, 
112.6, 114.2, 115.7, 116.9), GNP = c(234289, 259426, 258054, 
284599, 328975, 346999, 365385, 363112, 397469, 419180, 442769, 
444546, 482704, 502601, 518173, 554894), Unemployed = c(2356, 
2325, 3682, 3351, 2099, 1932, 1870, 3578, 2904, 2822, 2936, 4681, 
3813, 3931, 4806, 4007), Armed.Forces = c(1590, 1456, 1616, 1650, 
3099, 3594, 3547, 3350, 3048, 2857, 2798, 2637, 2552, 2514, 2572, 
2827), Population = c(107608, 108632, 109773, 110929, 112075, 
113270, 115094, 116219, 117388, 118734, 120445, 121950, 123366, 
125368, 127852, 130081), Year = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12, 13, 14, 15, 16)), row.names = c(NA, -16L), 
class = c("tbl_df", "tbl", "data.frame"))
attach(dados)
## The following object is masked from dados (pos = 13):
## 
##     obs

Estima-se o modelo de regressão linear do número de pessoas empregadas em função do deflator do GNP, dos desempregos, do número de pessoas nas forças armadas, da população e da tendência anual.

  dados<-longley
  tsdata <- ts(dados, start=c(1947), frequency=1)
  reg1 = lm(Employed~GNP.deflator + GNP + Unemployed
           +Armed.Forces + Population+Year, data=tsdata)
  summary(reg1)
## 
## Call:
## lm(formula = Employed ~ GNP.deflator + GNP + Unemployed + Armed.Forces + 
##     Population + Year, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41011 -0.15767 -0.02816  0.10155  0.45539 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -3.482e+03  8.904e+02  -3.911 0.003560 ** 
## GNP.deflator  1.506e-02  8.492e-02   0.177 0.863141    
## GNP          -3.582e-02  3.349e-02  -1.070 0.312681    
## Unemployed   -2.020e-02  4.884e-03  -4.136 0.002535 ** 
## Armed.Forces -1.033e-02  2.143e-03  -4.822 0.000944 ***
## Population   -5.110e-02  2.261e-01  -0.226 0.826212    
## Year          1.829e+00  4.555e-01   4.016 0.003037 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3049 on 9 degrees of freedom
## Multiple R-squared:  0.9955, Adjusted R-squared:  0.9925 
## F-statistic: 330.3 on 6 and 9 DF,  p-value: 4.984e-10
  reg1$AIC <- AIC(reg1)
  reg1$BIC <- BIC(reg1)

Outra opção é estimar pela função dynlm do pacote de igual nome:

library(dynlm)
mod1 <- dynlm(Employed~GNP.deflator + GNP + Unemployed
           +Armed.Forces + Population+Year, data=tsdata )

Se a saída fosse apenas pelo comando summary, sairia da forma:

summary(mod1)
## 
## Time series regression with "ts" data:
## Start = 1947, End = 1962
## 
## Call:
## dynlm(formula = Employed ~ GNP.deflator + GNP + Unemployed + 
##     Armed.Forces + Population + Year, data = tsdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41011 -0.15767 -0.02816  0.10155  0.45539 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -3.482e+03  8.904e+02  -3.911 0.003560 ** 
## GNP.deflator  1.506e-02  8.492e-02   0.177 0.863141    
## GNP          -3.582e-02  3.349e-02  -1.070 0.312681    
## Unemployed   -2.020e-02  4.884e-03  -4.136 0.002535 ** 
## Armed.Forces -1.033e-02  2.143e-03  -4.822 0.000944 ***
## Population   -5.110e-02  2.261e-01  -0.226 0.826212    
## Year          1.829e+00  4.555e-01   4.016 0.003037 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3049 on 9 degrees of freedom
## Multiple R-squared:  0.9955, Adjusted R-squared:  0.9925 
## F-statistic: 330.3 on 6 and 9 DF,  p-value: 4.984e-10

Agora, criando uma tabela com a saída do modelo, com o pacote stargazer tem-se, com a geração de AIC e BIC. Pode-se observar que os resultados são equivalentes entre o dynlm e o lm, uma vez que nesse caso não se usou operadores de defasagem (serão explicados com mais detalhe no capítulo de séries temporais), que seriam as vantagens para utilizar o dynlm.

library(stargazer)
mod1$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)

library(stargazer)
star.1 <- stargazer(mod1,reg1,
          title="Título: Resultado da Regressão",
          align=TRUE,
          type = "text", style = "all",
          keep.stat=c("aic","bic","rsq", "adj.rsq","n")
)
## 
## Título: Resultado da Regressão
## ================================================
##                         Dependent variable:     
##                     ----------------------------
##                               Employed          
##                        dynamic          OLS     
##                         linear                  
##                          (1)            (2)     
## ------------------------------------------------
## GNP.deflator            0.015          0.015    
##                        (0.085)        (0.085)   
##                       t = 0.177      t = 0.177  
##                       p = 0.864      p = 0.864  
## GNP                     -0.036        -0.036    
##                        (0.033)        (0.033)   
##                       t = -1.070    t = -1.070  
##                       p = 0.313      p = 0.313  
## Unemployed            -0.020***      -0.020***  
##                        (0.005)        (0.005)   
##                       t = -4.136    t = -4.136  
##                       p = 0.003      p = 0.003  
## Armed.Forces          -0.010***      -0.010***  
##                        (0.002)        (0.002)   
##                       t = -4.822    t = -4.822  
##                       p = 0.001      p = 0.001  
## Population              -0.051        -0.051    
##                        (0.226)        (0.226)   
##                       t = -0.226    t = -0.226  
##                       p = 0.827      p = 0.827  
## Year                   1.829***      1.829***   
##                        (0.455)        (0.455)   
##                       t = 4.016      t = 4.016  
##                       p = 0.004      p = 0.004  
## Constant            -3,482.259***  -3,482.259***
##                       (890.420)      (890.420)  
##                       t = -3.911    t = -3.911  
##                       p = 0.004      p = 0.004  
## ------------------------------------------------
## Observations              16            16      
## R2                      0.995          0.995    
## Adjusted R2             0.992          0.992    
## Akaike Inf. Crit.       14.187        14.187    
## Bayesian Inf. Crit.     20.367        20.367    
## ================================================
## Note:                *p<0.1; **p<0.05; ***p<0.01

A análise de correlação permitirá ter uma ideia inicial de possível multicolinearidade:

# install.packages('corrplot')
library(corrplot)
corel <- cor(tsdata[,-7])
corrplot(corel, method = "number")

As correlações em módulo com valores acima de 0.8 podem indicar presença de relação linear entre as variáveis. Ou seja, existem relações importantes entre GNP.deflator, GNP, Population, e Year na primeira linha. Na segunda, GNP relaciona-se fortemente com Population, e Year. Na linha de Unemplyed e Armed.Forces não temos relação preocupante. Na linha de Population existe relção forte com GNP.deflator, GNP, e Year. E Year apresenta relações fortes com GNP.deflator, GNP, Population.

Os valores de correlação simples (par a par) acima de 0,8 são valores preocupantes para a multicolinearidade, mas a relação linear pode envolver mais de duas ao mesmo tempo, o que não é evidenciado na correlação par-a-par. Assim, parte-se para a análise do VIF, das regressões auxiliares e a regra de Klein. A análise do VIF está a seguir.

library(car);library(lmtest);library(sandwich)
# vif
reg1.vif<-vif(mod1)
knitr::kable(reg1.vif,col.names = "VIF")
VIF
GNP.deflator 135.53244
GNP 1788.51348
Unemployed 33.61889
Armed.Forces 3.58893
Population 399.15102
Year 758.98060

Os resultados indicam relações fortes entre GNP.deflator (VIF=135), GNP (VIF=1788), Unemployed (33), Population (VIF=399) O valor para comparação para a regra de Klein é \(R^2=0.9955\). Desta forma, estimam-se as regressões auxiliares e aquelas que acusam o problema são: reg1.GNP, reg1.pop, reg1.year.

#regressoes auxiliares
reg1.GNPdef <- lm(GNP.deflator ~ GNP + Unemployed
           +Armed.Forces + Population+Year, data=tsdata )
GNPdef.r2=summary(reg1.GNPdef)$'r.squared'
reg1.GNP <- lm(GNP~GNP.deflator   + Unemployed
                  +Armed.Forces + Population+Year, data=tsdata )
GNP.r2=summary(reg1.GNP)$'r.squared'
reg1.unemp <- lm(Unemployed~GNP+GNP.deflator   + 
               +Armed.Forces + Population+Year, data=tsdata )
unemp.r2=summary(reg1.unemp)$'r.squared'
reg1.armed <- lm(Armed.Forces~Unemployed+GNP+GNP.deflator   + 
                   +  Population+Year, data=tsdata )
armed.r2=summary(reg1.armed)$'r.squared'
reg1.pop <- lm(Population~Armed.Forces+Unemployed+GNP+GNP.deflator   + 
                   +  Year, data=tsdata )
pop.r2=summary(reg1.pop)$'r.squared'
reg1.year <- lm(Year~Population+Armed.Forces+Unemployed+
                  + GNP+GNP.deflator, data=tsdata )
year.r2=summary(reg1.year)$'r.squared'
knitr::kable(col.names = c("R²"),
    rbind(GNPdef.r2,GNP.r2,unemp.r2,armed.r2,pop.r2,year.r2))
GNPdef.r2 0.9926217
GNP.r2 0.9994409
unemp.r2 0.9702548
armed.r2 0.7213654
pop.r2 0.9974947
year.r2 0.9986824

Olhando essas equações, percebe-se uma relação significativa estatisticamente entre GNP (R²=0.9994) e pop (R²=0.9975) e tendência (year, R²=0.9987), em que seus \(R^2\) foram maiores que 0,9955. Conclusão: São evidenciados problemas de multicolinearidade entre PNB, Population (população maior de 14anos) e Year (tendência). Também é possível relacionar GNP.deflator (deflator do PNB) com GNP (PNB nominal), ou fazer a alteração teórica: PNB nominal / deflator = PNB real. Outra sugestão: retirar Year=tendência, pois a população aumenta à taxa natural de crescimento populacional (correlação de Year e Population = 0,99). Retirar Unemployed, pois não parece sensato relacionar Employed (pessoas empregadas) com Unemployed (pessoas desempregadas).

Segue o Modelo Corrigido retirando e transformando variáveis para solucionar a multicolinearidade. A transformação z=GNP/GNP.deflator, equivalente ao PNB real e retirando as variáveis tendência (Year) e Unemployed.

reg2<-lm(Employed~I(GNP/GNP.deflator)+Armed.Forces
         + Population, data=tsdata )
summary(reg2)
## 
## Call:
## lm(formula = Employed ~ I(GNP/GNP.deflator) + Armed.Forces + 
##     Population, data = tsdata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1318 -0.1395  0.0136  0.3063  0.6817 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         65.720366  10.624808   6.186 4.69e-05 ***
## I(GNP/GNP.deflator)  9.736496   1.791552   5.435 0.000151 ***
## Armed.Forces        -0.006880   0.003222  -2.135 0.054074 .  
## Population          -0.299537   0.141761  -2.113 0.056234 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5354 on 12 degrees of freedom
## Multiple R-squared:  0.9814, Adjusted R-squared:  0.9768 
## F-statistic: 211.1 on 3 and 12 DF,  p-value: 1.203e-10

De outra forma - fazendo z=I(GNP/GNP.deflator), o mesmo resultado.

z=I(GNP/GNP.deflator)
reg3<-lm(Employed~z+Armed.Forces
         + Population, data=tsdata )
summary(reg3)
## 
## Call:
## lm(formula = Employed ~ z + Armed.Forces + Population, data = tsdata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1318 -0.1395  0.0136  0.3063  0.6817 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  65.720366  10.624808   6.186 4.69e-05 ***
## z             0.009736   0.001792   5.435 0.000151 ***
## Armed.Forces -0.006880   0.003222  -2.135 0.054074 .  
## Population   -0.299537   0.141761  -2.113 0.056234 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5354 on 12 degrees of freedom
## Multiple R-squared:  0.9814, Adjusted R-squared:  0.9768 
## F-statistic: 211.1 on 3 and 12 DF,  p-value: 1.203e-10
reg3.vif<-vif(reg3)
knitr::kable(reg3.vif,col.names = "VIF")
VIF
z 58.447162
Armed.Forces 2.631026
Population 50.874690

Fazendo regressoes auxiliares para a reg3 e investigando pela regra de Klein, agora comparando com \(R^2 = 0.9814\). É possível perceber que ainda persiste algum problema entre z e Population, ou seja, do PNB real e a população, o que é esperado em praticamente todas as regiões. Entretanto, pode-se observar que o modelo tem alto grau de ajustamento e todos os parâmetros significativos a 10% de significância.

reg3.armed <- lm(Armed.Forces~z   + Population, data=tsdata )
armed.r2c=summary(reg3.armed)$'r.squared'
reg3.pop <- lm(Population~Armed.Forces+z, data=tsdata )
pop.r2c=summary(reg3.pop)$'r.squared'
reg3.z <- lm(z~Population+Armed.Forces, data=tsdata )
z.r2c=summary(reg3.z)$'r.squared'
knitr::kable(col.names = c("R²"),
    rbind(armed.r2c,pop.r2c,z.r2c))
armed.r2c 0.6199202
pop.r2c 0.9803439
z.r2c 0.9828905

9 Violação dos pressupostos: exogeneidade

A hipótese clássica aqui em discussão é de que os valores das variáveis explicativas são fixos, não correlacionados com os termos de erro. Assim, a covariância entre cada resíduo \(\varepsilon_i\) e cada \(X_i\) é nula. Também é chamada de Exogeneidade das variáveis explicativas.

Kmenta (1986, p.338) expôs que se a hipótese acima não for válida, ou se for relaxada, e admitir-se que X é estocástico, porém independente do resíduo, as propriedades desejáveis para estimação dos mínimos quadrados não se alteram.

Em casos em que as variáveis explicativas e os resíduos forem correlacionados, precisaremos do método de variáveis instrumentais, dos métodos de equações simultâneas, e de considerar o problema da identificação. Uma boa descrição do problema, e sua solução em R, está em Colonescu (2016, cap.10) e Hill, Griffiths e Lim (2011), ou ainda em Hanck et al (2019, cap.12), Gujarati e Porter (2011), Gujarati (2012, cap.19) e Wooldridge (2016, cap.15-16).

Se o modelo de regressão tiver variáveis omitidas, erros de medição, simultaneidade entre as variáveis, o termo de erro será correlacionado com as variáveis explicativas e o estimador de MQO será inconsistente. As variáveis explicativas correlacionados com o termo de erro serão ditas endógenas requerendo métodos de variáveis instrumentais, ou seja, se necessita de instrumentos ou variáveis que não estão diretamente associados à variável dependente mas são correlacionadas com o regressor endógeno em discussão.

9.1 O método de variáveis instrumentais (MVI)

O método de variáveis instrumentais (MVI ou no inglês IV - Instrumental Variables) é uma alternativa para contornar a violação do pressuposto das variáveis explicativas fixas. Seja uma regressão em que a variável explicativa \(X_i\) é correlacionada com os resíduos (\(cov(\varepsilon_i,X_i)\ne 0\)) em

\[\begin{equation} Y=\beta_{1}+\beta_{2}X_{2}+...+\beta_{k}X_{k}+\varepsilon. \end{equation}\]

Nesta situação, a utilização de instrumentos como regressores poderá auxiliar o modelo quanto à consistência dos estimadores. O instrumento deve ser fortemente correlacionado com o regressor endógeno (\(X_i\)) a que se refere, de modo a reduzir a variância do coeficiente \(\hat \beta_i\) estimado. O método de estimação será o de mínimos quadrados mas agora em seu formato de variáveis instrumentais compondo o método de estimação de mínimos quadrados em dois estágios (MQ2E, ou no inglês 2SLS - Two-Stages Least Squares). Os estágios serão: 1 - estimação do regressor endógeno \(X_i\) em função dos demais regressores exógenos (que serão os instrumentos) e obtém-se seus valores estimados \(\hat X_i\); e, 2 - estimação da \(Y=f(X)\) substituindo \(X_i\) por seus valores ajustados \(\hat X_i\) do primeiro estágio.

Uma situação típica deste problema é na equação de demanda de um produto, quando preço e quantidade demandada estão relacionados e fica difícil estabelecer uma causalidade entre preço e quantidade. O aumento do preço pode levar a menor demanda assim como menor demanda poderá pressionar por quedas no preço para ocorrer a transação. Relações parecidas são citadas em Levitt e Dubner (2005) quando questionam a causalidade entre crime e o efetivo policial. Maior criminalidade leva a reforçar o efetivo policial e maior efetivo policial pode exercer efeito reduzindo a criminalidade, a qual provocará redução no efetivo policial em períodos seguintes.
Um diagrama relacional simples pode auxiliar nesta associação entre variáveis, adaptado de Gujarati (2012,p.311). Em (a), existe apenas a relação do MQO clássico, com estimadores BLUE (Best Linear Unbiased Estimators). Em (b), existe a relação entre o regressor \(X\) e o termo de resíduo \(\varepsilon\), quando então o estimador de MQO será inconsistente. No caso (c), as mudanças no instrumento \(Z\) não causam mudanças diretas no regressando \(Y\), mas sim no regressor endógeno \(X\) que indiretamente transmite o efeito para \(Y\).

\[\begin{equation} \begin{array}{l} X \to Y \qquad X \to Y \qquad Z \to X \to Y\\ \varepsilon \nearrow \qquad \quad \varepsilon \uparrow \nearrow \qquad \qquad \quad \varepsilon \uparrow \nearrow \\ (a) \qquad \qquad (b) \qquad \qquad (c) \end{array} \end{equation}\]

9.1.1 O problema dos regressores estocásticos ou não fixos

Gujarati (2012, p.312) expõe três situações típicas para o relacionamento entre a variável explicativa \(X\) e a variável explicada \(Y\) com um termo de resíduo \(\varepsilon\).

O primeiro caso se situa com a independência entre \(X\) e \(\varepsilon\), quando podemos utilizar o estimador de MQO e este apresenta-se como o melhor estimador linear não-tendencioso (no inglês, BLUE). Neste caso, se \(X\) é ou não estocástico não faz diferença.

A segunda situação é aquela de \(X\) e \(\varepsilon\) contemporaneamente não-correlacionados. É uma situação mais fraca que a primeira de tal forma que os estimadores de MQO serão BLUE apenas assintoticamente, ou seja, válidas para grandes amostras.

A terceira situação é aquela em que \(X\) e \(\varepsilon\) não são distribuídos independentemente nem são não-correlacionados contemporaneamente, e os estimadores de MQO serão viesados, inconsistentes. Neste caso, a decomposição da variação total de \(Y\) (denotada na seção 3.2) entre as variações explicadas por \(X\) e as variações não explicadas (associada aos resíduos), será inadequada uma vez que a variável explicativa está correlacionada com o resíduo e a decomposição não leva em conta o efeito conjunto de \(X\) com \(\varepsilon\) sobre \(Y\). Como decorrência, os estimadores de MQO dos coeficientes serão inconsistentes.

Algumas razões podem ser apontadas para esta correlação entre \(X\) e \(\varepsilon\): erros de mensuração no regressor; variáveis relevantes omitidas; viés de simultaneidade associadas às variáveis; e modelos dinâmicos de regressão com correlação serial nos resíduos.

Os erros de mensuração podem originar de medidas aproximadas de variáveis não-observáveis diretamente (por exemplo a renda permanente na função consumo), e uma alternativa é estimar um modelo de variáveis instrumentais.

O problema com a variável omitida, comumente associado com a especificação do modelo, é um pouco mais complicado no sentido de que uma boa revisão de literatura prévia do fenômeno deveria ter corrigido esse problema. Ou ainda, a variável omitida pode ter sido o caso de ausência dos dados da variável desejada. Nesta situação, também o método de variáveis instrumentais pode auxiliar a ter um bom modelo.

O viés de simultaneidade associadas às variáveis em muitos casos (também associado ao clássico problema de quem nasceu primeiro: o ovo ou a galinha), é associado à estimação de sistemas de equações simultâneas (que não é objeto de estudo nesse livro), mas que também pode ter a ajuda do método de variáveis instrumentais para resolver o problema.

Em modelos dinâmicos de regressão com correlação serial nos resíduos (por exemplo, o modelo de expectativas adaptadas), as alterações nos resíduos em um momento de tempo ocasionam alterações nos resíduos dos momentos posteriores. Também aqui necessita-se uma alternativa para contornar a inconsistência dos estimadores de MQO. Explica-se então o método de variáveis instrumentais como sequência à ideia (c) exposta na ilustração 9.2, conforme Gujarati (2012).

9.1.2 O método

Tem-se então a seguinte situação em que \(Z\) explica \(X\) que explica \(Y\) de tal sorte que:

\[\begin{equation} \begin{array}{l} Z \to X \to Y\\ \qquad \varepsilon \uparrow \nearrow \\ \end{array} \end{equation}\]

É possível encontrar \(Z\) de tal forma que atue como uma proxy para \(X\) (em que este é suspeito de ser estocástico)? Como deve ser esta variável \(Z\), que a princípio não foi identificada como explicativa de \(Y\) no modelo teórico inicial? Como saber se \(Z\) serve como proxy para \(X\)?

Para ser uma boa proxy, \(Z\) deve ser fortemente correlacionada com \(X\): \(cov(X_i,Z_i)\ne 0\). A variável \(Z\) será então um instrumento e esta deve ser independente do resíduo \(\varepsilon\): \(cov(Z_i,\varepsilon_i)= 0\). A variável \(Z\) não deve ser uma variável explicativa do modelo teórico, visto que isto constituiria uma má especificação de variável omitida à priori por deficiências teóricas do modelo. Será necessário refletir à respeito da necessidade de instrumentos para cada variável regressora estocástica. E todas estas condições devem coexistir.

A estimação do método de variáveis instrumentais em forma matricial pode ser derivada conforme Gujarati e Porter (2011,p.712) e Kleiber e Zeileis (2008). Seja um modelo em que \(Y\) é uma variável dependente estocástica como função de \(X_1\) e \(X_2\) tais que \(X_1\) está correlacionado com o resíduo \(\varepsilon\) mas \(X_2\) não. Podemos escrever algebricamente como

\[\begin{equation} Y = {\Pi _0} + {\Pi _1}{X_1} + {\Pi _2}{X_2} + \varepsilon \end{equation}\]

Neste cenário, o instrumento \(Z_1\) pode ser usado para criar uma projeção de \(X_1\) no espaço de \(Z_1\).

Uma solução para o caso geral em que se têm vários regressores correlacionados com o resíduo, necessitam-se vários instrumentos. No caso de haver um instrumento para cada variável endógena, diz-se que o modelo é exatamente identificado. Se houver mais instrumentos que o número de variáveis endógenas, o modelo é dito superidentificado. Não é possível resolver o problema da endogeneidade caso o modelo tenha menos instrumentos que o número de variáveis endógenas explicativas conforme Greene (2018).

Seja o caso de \(Y=X\beta+\varepsilon\) em que a matriz \(X\) contém as variáveis exlicativas endógenas e a matriz \(Z\) contém os instrumentos. Cada coluna de \(Z\) é não correlacionada com o resíduo \(\varepsilon\). Assim, caso existam mais variáveis em \(Z\) do que em \(X\), então o produto \(Z'X\) não terá inversa. A melhor solução é utilizar todos os instrumentos fazendo-se a projeção das colunas de \(X\) no espaço de colunas de \(Z\) por meio da expressão

\[\begin{equation} \hat X = Z{(Z'Z)^{ - 1}}Z'X = ZF. \end{equation}\]

Os instrumentos são combinações lineares das variáveis em \(Z\) e o estimador de variáveis instrumentais será obtido a partir da expressão dos Mínimos Quadrados Ordinários e substituindo-se a matriz \(X\) por \(\hat X\) tal que

\[\begin{equation} \widehat {{\beta _{VI}}} = {\left( {\hat X'X} \right)^{ - 1}}\hat X'Y. \end{equation}\]

Substituindo-se a expressão de \(\hat X\) na expressão de \(\hat \beta\), tem-se o estimador de variáveis instrumentais:

\[\begin{equation} \widehat {{\beta _{VI}}} = {\left[ {X'Z{{(Z'Z)}^{ - 1}}Z'X} \right]^{ - 1}}X'Z{(Z'Z)^{ - 1}}Z'Y. \end{equation}\]

O estimador de variância-covariância assintótica será \(\hat \sigma^2\) vezes \({\left[ {X'Z{{(Z'Z)}^{ - 1}}Z'X} \right]^{ - 1}}\). O estimador pode ser demonstrado como consistente e normalmente distribuído em ambiente com instrumentos válidos correlacionados com \(X\) mas não com \(\varepsilon\).

É possível demonstrar que o procedimento de estimação de \(\widehat {\beta _{VI}}\) pode ser realizado em duas etapas, e daí o nome de Mínimos Quadrados em Dois Estágios (MQ2E ou no inglês 2SLS para Two-Stage Least Squares). Primeiro calcula-se \(\hat X\) e depois faz-se a estimação dos coeficientes.

Greene (2018, p.258) evidencia que a escolha dos instrumentos nem sempre é uma tarefa fácil e normalmente acaba sendo ad hoc. Para o caso de séries temporais, os candidatos natos serão as defasagens temporais das variáveis, mas nos demais casos, a escolha requer maior conhecimento do fenômeno envolvido nas variáveis endógenas.

Exemplo CollegeDistance - Esta aplicação acompanha a sugestão de Zeileis (2012). O dataset (parte do pacote AER, data("CollegeDistance")) tem Dados de seção transversal da pesquisa High School and Beyond, realizada pelo Departamento de Educação em 1980, com acompanhamento em 1986. A pesquisa incluiu estudantes de aproximadamente 1.100 escolas secundárias. São dados contendo 4.739 observações em 14 variáveis da figura - detalhes em https://rdrr.io/cran/AER/man/CollegeDistance.html.

Detalhamento do dataset `CollegeDistance` do pacote AER. Fonte: https://rdrr.io/cran/AER/man/CollegeDistance.html

Figure 9.1: Detalhamento do dataset CollegeDistance do pacote AER. Fonte: https://rdrr.io/cran/AER/man/CollegeDistance.html

O exemplo parte da ideia de explicar o salário (wage) como função de urban (se a escola está na área urbana), gender (gênero), ethnicity (etnia), unemp (taxa de desemprego), education (número de anos de escolaridade). A variável educação é aqui considerada como endógena e, portanto, executa-se o método de dois estágios ou de variáveis instrumentais.

Supõe-se que a educação explique o salário, mas a educação é função de vários fatores como gênero, raça, distância e outros. Ou seja, podemos imaginar uma função tipo

\[\begin{equation} \begin{array}{l} \log wage = {\beta _1} + \\ {\beta _2}education\left( {urban,gender,ethnicity,unemp,distance,outras} \right) + \\ {\beta _3}urban + {\beta _4}gender + {\beta _5}ethnicity + {\beta _6}unemp + {\beta _6}distance + \varepsilon \end{array} \end{equation}\]

em que \(education\) é uma variável explicativa endógena, e as demais explicativas são independentes \((urban, gender, ethnicity, unemp,distance)\). O termo residual depende de fatores não observados incluídos em \(outras\), que também afeta \(education\). Ou seja, o coeficiente \(\beta _2\) estará capturando o efeito de \(education\) assim como um efeito não-observado de \(outras\). Portanto, a ideia é encontrar um instrumento \(Z\) não relacionado com o resíduo \(\varepsilon(outras)\) mas aumentos em \(Z\) estão associados com aumentos em \(education\left( {urban,gender,ethnicity,unemp,distance,outras,Z} \right)\). Deste modo, o efeito de um aumento em \(Z\) sobre \(education\) será apenas um aumento em \(education\). Fazendo uso do instrumento \(Z\), conseguiremos então obter o efeito de \(education\) sobre \(wage\).

A primeira parte faz os dois estágios passo a passo: regressão simple.ed.1s com education em função dos instrumentos, gera os valores previstos de education (chamado de ed.pred) e depois o segundo estágio com wage em função dos regressores exógenos e de ed.pred.

# ver em 
suppressMessages(suppressWarnings(library(AER)))
suppressMessages(suppressWarnings(library(lmtest)))
data("CollegeDistance")
cd.d<-CollegeDistance
simple.ed.1s<- lm(education ~ 
                  urban + gender + ethnicity + unemp + distance,
                  data=cd.d)
cd.d$ed.pred<- predict(simple.ed.1s)
simple.ed.2s<- lm(wage ~ 
                  urban + gender + ethnicity + unemp + ed.pred ,
                  data=cd.d)

Esses dois estágios podem ser realizados automaticamente pela função ivreg do pacote AER ou pela função tsls do pacote sem.

m <- ivreg(wage ~ 
          urban + gender + ethnicity + unemp + education |
          urban + gender + ethnicity + unemp + distance, 
          data = CollegeDistance)
suppressMessages(suppressWarnings(library(stargazer)))
stargazer(simple.ed.2s,m,
          column.labels = c("simple.ed.2s","ivreg"),
          type = "text") 
## 
## ======================================================================
##                                          Dependent variable:          
##                                 --------------------------------------
##                                                  wage                 
##                                            OLS            instrumental
##                                                             variable  
##                                       simple.ed.2s           ivreg    
##                                            (1)                (2)     
## ----------------------------------------------------------------------
## urbanyes                                  0.046              0.046    
##                                          (0.045)            (0.060)   
##                                                                       
## genderfemale                             -0.071*             -0.071   
##                                          (0.037)            (0.050)   
##                                                                       
## ethnicityafam                           -0.227***           -0.227**  
##                                          (0.073)            (0.099)   
##                                                                       
## ethnicityhispanic                       -0.351***          -0.351***  
##                                          (0.057)            (0.077)   
##                                                                       
## unemp                                   0.139***            0.139***  
##                                          (0.007)            (0.009)   
##                                                                       
## ed.pred                                 0.647***                      
##                                          (0.101)                      
##                                                                       
## education                                                   0.647***  
##                                                             (0.136)   
##                                                                       
## Constant                                 -0.359              -0.359   
##                                          (1.412)            (1.908)   
##                                                                       
## ----------------------------------------------------------------------
## Observations                              4,739              4,739    
## R2                                        0.117              -0.612   
## Adjusted R2                               0.116              -0.614   
## Residual Std. Error (df = 4732)           1.263              1.706    
## F Statistic                     104.971*** (df = 6; 4732)             
## ======================================================================
## Note:                                      *p<0.1; **p<0.05; ***p<0.01
# pelo tsls():
  
m2 <- sem::tsls(wage ~ 
              urban + gender + ethnicity + unemp + education,
             ~ urban + gender + ethnicity + unemp + distance, 
             data = CollegeDistance)
summary(m2)
## 
##  2SLS Estimates
## 
## Model Formula: wage ~ urban + gender + ethnicity + unemp + education
## 
## Instruments: ~urban + gender + ethnicity + unemp + distance
## 
## Residuals:
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -5.20896 -1.14578 -0.02361  0.00000  1.33303  4.77571 
## 
##                       Estimate   Std. Error  t value   Pr(>|t|)    
## (Intercept)       -0.359031994  1.908299652 -0.18814   0.850773    
## urbanyes           0.046144402  0.060395344  0.76404   0.444882    
## genderfemale      -0.070752726  0.049971930 -1.41585   0.156885    
## ethnicityafam     -0.227239937  0.098630957 -2.30394   0.021269 *  
## ethnicityhispanic -0.351290603  0.077058167 -4.55877 5.2751e-06 ***
## unemp              0.139162515  0.009119739 15.25948 < 2.22e-16 ***
## education          0.647098596  0.135940586  4.76016 1.9921e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.7061773 on 4732 degrees of freedom

Referências 9

COLONESCU, Constantin. Principles of Econometrics with R. 2016. Disponível em: https://bookdown.org/ccolonescu/RPoE4/. Acesso em 17.Jul.2020. (cap 11 - https://bookdown.org/ccolonescu/RPoE4/random-regressors.html)

GREENE, William H. Econometric Analysis, 8th. ed. New York: Pearson. 2018.

GUJARATI, Damodar N. Econometrics by example. Macmillan Higher Education, 2012. (cap 19, p.359-387)

GUJARATI, Damodar N.; PORTER, Dawn C. Econometria básica. 5.ed. Porto Alegre: AMGH/Bookman/McGraw-Hill do Brasil, 2011. (cap 18)

HANCK, Christoph; ARNOLD, Martin; GERBER, Alexander; SCHMELZER, Martin. Introduction to Econometrics with R. Disponível em: https://www.econometrics-with-r.org/index.html. Acesso em 17.Jul.2020. (cap 12 - https://www.econometrics-with-r.org/12-1-TIVEWASRAASI.html)

HILL, Carter; GRIFFITHS, William; LIM, Guay. Principles of Econometrics, 4th ed. Wiley, 2011.

KMENTA, Jan. Elements of econometrics. 2. ed. Nova York: MacMillan, 1986.

KLEIBER, c.; ZEILEIS, A. Applied Econometrics with R. New York: Springer-Verlag, 2008.

LEVITT, S.D.; DUBNER, S.J. Freaknonomics. New York: William Morrow, 2005.

WOOLDRIDGE, Jeffrey M. Introductory econometrics: A modern approach. Nelson Education, 2016. (cap 15 e 16)

ZEILEIS, Achim. [R] instrumental variables regression using ivreg (AER) or tsls (sem). 2012. Disponível em: https://stat.ethz.ch/pipermail/r-help/2012-December/330913.html

10 Séries Temporais

O objetivo deste material é capacitar o estudante a realizar aplicações com séries temporais, previsões futuras e decomposição da sazonalidade, tendência e ciclos em séries econômicas. Também trabalha-se a modelagem multivariada de fenômenos econômicos temporais.

Faz-se a apresentação do histórico e a evolução do pensamento em séries temporais, além de detalhar alguns conceitos básicos em séries temporais. O leitor é encorajado a utilizar o RStudio, e desta forma, espera-se que já tenha instalado o R e o RStudio atualizados.

Neste sentido, partindo da teoria econômica para sua análise aplicada com instrumentos da matemática e estatística, tem-se a econometria com diferentes estruturas de dados econômicos. Os dados serão associados às variáveis detectadas nesta teoria. Ao passar para a linguagem matemática, compõe-se o que chamamos de modelo analítico ou modelo operacional ou ainda modelo econométrico.

As variáveis podem ser quantitativas ou qualitativas. Os dados a ela associados, portanto, poderão ter diferentes características, diferenciando-se entre séries temporais, de seção cruzada, ou combinação entre estes dois tipos.

10.1 Tipos de dados

10.1.1 Séries temporais

Podem-se ter dados de uma variável acompanhada no tempo, ou seja, o que se chama de série temporal como no gráfico do índice do PIB nominal de Campo Grande - MS, 2002-2016 (SCN 2010), dados anuais em valores correntes conforme a figura.

# Produto Interno Bruto
# Tabela 5938 - Produto interno bruto a preços correntes, 
# impostos, líquidos de subsídios, sobre produtos a preços 
# correntes e valor adicionado bruto a preços correntes total 
# e por atividade econômica, e respectivas participações - 
# Referência 2010 - <http://api.sidra.ibge.gov.br/values/t/
# 5938/n6/5002704/v/37/p/all/d/v37%200>
# na primeira vez, baixei o arquivo e depois fiz o dput()
# os dados estão colocados abaixo como na estrutura do dput()

library(sidrar)
tabela5938 = 
  get_sidra(api='/t/5938/n6/5002704/v/37/p/all/d/v37%200')
library(ggplot2);library(ggthemes)
pib_cg<-ts(I(tabela5938$Valor/1e+6),start = c(2002),frequency = 1)
datas <- seq(as.Date(paste(c(start(pib_cg), 1), collapse = "/")), 
             by = "year",length.out = length(pib_cg))
pibcg.df <- data.frame(ano = datas, valor = pib_cg)
p <- ggplot(pibcg.df) + geom_line(aes(ano, valor)) + 
  ggtitle("Produto Interno Bruto nominal de Campo Grande-MS, 
          2002-2017") + 
  labs(x ="Ano",
       y ="Valor em bilhões de Reais correntes",
       title= "PIB de Campo Grande-MS de 2002 a 2017",
       caption="Fonte: Dados do IBGE. Elaboração do autor.") 
p +  ggthemes::theme_stata()
Produto Interno Bruto nominal de Campo Grande-MS, 2002-2017

(#fig:PIB_campogrande)Produto Interno Bruto nominal de Campo Grande-MS, 2002-2017

Outro exemplo é o preço de uma ação ou a renda de um indivíduo pode ser acompanhada semanalmente, ou mensalmente ou anualmente, e neste caso procura-se avaliar as alterações desta no tempo, ou a dinâmica da série. Neste caso, não se trata de uma amostra aleatória, embora o pesquisador deva ter argumentos para a escolha do período analisado. As investigações das relações entre séries temporais têm ocupado vasto espaço na literatura econométrica recente, preocupando-se principalmente com a possibilidade de relações espúrias, quando a relação decorre do comportamento temporal (tendência e sazonalidade) e não precisamente do efeito entre as variáveis, dando origem aos modelos autoregressivos, médias móveis e outros a serem desenvolvidos mais a frente. Uma forma geralmente utilizada é a da explicação do comportamento futuro olhando os acontecimentos passados, ou seja, prever valores futuros das séries com base em seus próprios valores já ocorridos. Um exemplo comum em análise de séries temporais é a análise de dados do mercado de ações, como o indicador da Bolsa de Valores oficial do Brasil, a B3, que surge após a fusão da Bolsa de Valores, Mercadorias e Futuros de São Paulo (BM&FBOVESPA) com a Central de Custódia e de Liquidação Financeira de Títulos (CETIP), aprovada pela Comissão de Valores Mobiliários (CVM) e pelo Conselho Administrativo de Defesa Econômica (CADE) em 22 de março de 2017. Parte do script a seguir foi adaptado das notas de aulas do prof. Hudson Chaves Costa, disponível em https://rpubs.com/hudsonchavs/.

# Exemplo de Dados de série temporal
suppressMessages(suppressWarnings(library(quantmod)))
suppressMessages(suppressWarnings(library(highcharter)))
## ts2 = getSymbols('^BVSP', src = 'yahoo', warnings = FALSE)

# foi feito o .rds para agilizar a rotina
ts2 <- readRDS("BVSP.rds")
par(oma = c(5, 0, 0, 0))
chart_Series(ts2[, 4], name = NULL)
title("Fechamento 
      IBOVESPA", cex.main = 1.3, font.main = 2.7, col.main = "black")
mtext(text = "Fonte: 
  Dados extraídos usando o pacote quantmod do R.", side = 1,
    line = 9, cex = 0.75, font = 3, col = "black")
Fechamento BOVESPA.

Figure 10.1: Fechamento BOVESPA.

10.1.2 Séries de seção cruzada

Alguns dados podem estar relacionados a um mesmo período de tempo, para diferentes indivíduos, empresas, regiões. Neste caso, dá-se o nome de séries de seção cruzada. Cada observação é um novo indivíduo, firma ou município com informação em um ponto no tempo. A ordem nesse caso não é uma informação obrigatória, diferentemente de dados ordenados no tempo. São típicos os casos de dados municipais, como o PIB dos municípios de Mato Grosso do Sul para um dado ano. Nestes dados, em geral se preocupa com a variabilidade entre as unidades da série, ou seja, entre os municípios. A amostra pode ser aleatória ou não, dependendo das características como os dados foram coletados.

# Executei uma vez e fiz dput()
# PIB dos municípios de Mato Grosso do Sul, 2017
# colocar o código em sequência, 
# sem ENTER entre codigos dos municípios
suppressMessages(suppressWarnings(library(sidrar)))
tabela5938all = get_sidra(api='/t/5938/n6/5000708,5001102,5003207,
                  5005202,5005608,5006903,5002605,5003306,5006408,
                  5007406,5001003,5002902,5004403,5006309,5000906,
                  5002100,5002209,5002803,5004106,5005004,5005806,
                  5001508,5002704,5003108,5004908,5005400,5007109,
                  5007208,5007307,5007505,5007901,5008008,5000203,
                  5002308,5008305,5000609,5000807,5001904,5002001,
                  5002407,5003702,5003801,5004007,5004304,5004502,
                  5004700,5005103,5005707,5006200,5006606,5002159,
                  5003256,5007695,5007935,5002951,5003488,5007554,
                  5007802,5003504,5004601,5005152,5007703,5007950,
                  5007976,5008404,5003157,5006358,5000856,5001243,
                  5003454,5003751,5005681,5000252,5004809,5005251,
                  5006002,5006259,5003900,
                  5006275/v/37/p/2017/d/v37%200')
# Separamos em dados_ms apenas o valor e a identificação
# do município, em R$ Mil correntes do ano de 2017

Poderá ver que os dados saem como em um gráfico de dispersão, sem linhas, pois não se trata de série contínua.

plot(I(dados_ms$Valor/1e+6), 
     main = "PIB dos municípios de Mato Grosso do Sul em 2017", 
     ylab = "Bilhões de Reais", xlab = "Município",
     sub = "Fonte: IBGE, Elaboração própria.")
PIB dos municípios de Mato Grosso do Sul em 2017

Figure 10.2: PIB dos municípios de Mato Grosso do Sul em 2017

10.1.3 Dados em combinação de seção cruzada e série temporal

Os dados podem ainda relacionar os dois tipos anteriores, ou seja, dados de diferentes unidades ou indivíduos acompanhados para diferentes períodos de tempo, originando o que se chama de combinação de séries temporais e seção cruzada (STSC), ou dados longitudinais. Como exemplo, pode-se ter uma amostra de consumidores de Mato Grosso do Sul como no caso da Pesquisa Nacional de Amostragem por Domicílio (PNAD) conduzida pelo IBGE, cujos detalhes do consumo são investigados anualmente. Neste caso, a preocupação é tanto na variabilidade entre indivíduos como na dinâmica ou no comportamento temporal de cada indivíduo. No caso de se ter os mesmos indivíduos nos mesmos períodos de tempo, tem-se a especificidade de uma combinação STSC chamada “painel”. Um dos ganhos em trabalhar com dados em painel é a possibilidade da análise cruzada dos dados.

A análise de combinações de seção cruzada e série temporal auxilia no exame da dinâmica e efeito do tempo sobre os dados analisados, proporciona um maior número de observações, bem como mais variabilidade, aumento dos graus de liberdade e eficiência dos parâmetros estimados, redução da colinearidade/multicolinearidade e manutenção da heterogeneidade, o que evita a apuração de resultados enviesados (BALESTRA; NERLOVE, 1966, citados por GUJARATI e PORTER, 2011). Alia portanto, a vantagem dos dados em seção cruzada, com a vantagem da dinâmica temporal.

O “painel” poderá ser balanceado ou desbalanceado, no sentido de que se pode ter quantidades diferentes de indivíduos a cada período de tempo no caso desbalanceado, ou iguais quantidades em todos os períodos de tempo, no caso do painel balanceado.

Um exemplo típico de painel é o apresentado por Greene (2003, 2012): Example 14.1, com dados de Grunfeld Investment Data, disponível em http://people.stern.nyu.edu/wgreene/Text/Edition7/TableF13-1.txt, para 200 observações de 10 firmas nos anos entre 1935 e 1954, disponível também no pacote systemfit e no plm. São dados de:

-     firm = indicador da firma, 1 a 10;    
-     year = indicador do ano, 1935 a 1954;     
-     inv = investimento bruto, da Moody's Industrial 
      Manual e relatórios corporativos anuais;     
-     value = Valor da firma do "Bank and Quotation Record" 
      e do Moody's Industrial Manual; e,     
-     capital = Capital e equipamentos da firma, da Survey
      of Current Business.
# Exemplo de Dados de painel
suppressMessages(suppressWarnings(library(tidyr)))
suppressMessages(suppressWarnings(library(dplyr)))
suppressMessages(suppressWarnings(library(DT)))
suppressMessages(suppressWarnings(library(magrittr)))
suppressMessages(suppressWarnings(library(plm)))
suppressMessages(suppressWarnings(library(systemfit)))
# data( 'GrunfeldGreene', package = 'systemfit' ) # 5 empresas
data("Grunfeld", package = "plm")  # 10 empresas
Grunfeld %<>%
    dplyr::slice(1:200L)
knitr::kable(Grunfeld, caption = "Dados do exemplo Grunfeld")
Table 10.1: Dados do exemplo Grunfeld
firm year inv value capital
1 1935 317.60 3078.50 2.80
1 1936 391.80 4661.70 52.60
1 1937 410.60 5387.10 156.90
1 1938 257.70 2792.20 209.20
1 1939 330.80 4313.20 203.40
1 1940 461.20 4643.90 207.20
1 1941 512.00 4551.20 255.20
1 1942 448.00 3244.10 303.70
1 1943 499.60 4053.70 264.10
1 1944 547.50 4379.30 201.60
1 1945 561.20 4840.90 265.00
1 1946 688.10 4900.90 402.20
1 1947 568.90 3526.50 761.50
1 1948 529.20 3254.70 922.40
1 1949 555.10 3700.20 1020.10
1 1950 642.90 3755.60 1099.00
1 1951 755.90 4833.00 1207.70
1 1952 891.20 4924.90 1430.50
1 1953 1304.40 6241.70 1777.30
1 1954 1486.70 5593.60 2226.30
2 1935 209.90 1362.40 53.80
2 1936 355.30 1807.10 50.50
2 1937 469.90 2676.30 118.10
2 1938 262.30 1801.90 260.20
2 1939 230.40 1957.30 312.70
2 1940 361.60 2202.90 254.20
2 1941 472.80 2380.50 261.40
2 1942 445.60 2168.60 298.70
2 1943 361.60 1985.10 301.80
2 1944 288.20 1813.90 279.10
2 1945 258.70 1850.20 213.80
2 1946 420.30 2067.70 132.60
2 1947 420.50 1796.70 264.80
2 1948 494.50 1625.80 306.90
2 1949 405.10 1667.00 351.10
2 1950 418.80 1677.40 357.80
2 1951 588.20 2289.50 342.10
2 1952 645.50 2159.40 444.20
2 1953 641.00 2031.30 623.60
2 1954 459.30 2115.50 669.70
3 1935 33.10 1170.60 97.80
3 1936 45.00 2015.80 104.40
3 1937 77.20 2803.30 118.00
3 1938 44.60 2039.70 156.20
3 1939 48.10 2256.20 172.60
3 1940 74.40 2132.20 186.60
3 1941 113.00 1834.10 220.90
3 1942 91.90 1588.00 287.80
3 1943 61.30 1749.40 319.90
3 1944 56.80 1687.20 321.30
3 1945 93.60 2007.70 319.60
3 1946 159.90 2208.30 346.00
3 1947 147.20 1656.70 456.40
3 1948 146.30 1604.40 543.40
3 1949 98.30 1431.80 618.30
3 1950 93.50 1610.50 647.40
3 1951 135.20 1819.40 671.30
3 1952 157.30 2079.70 726.10
3 1953 179.50 2371.60 800.30
3 1954 189.60 2759.90 888.90
4 1935 40.29 417.50 10.50
4 1936 72.76 837.80 10.20
4 1937 66.26 883.90 34.70
4 1938 51.60 437.90 51.80
4 1939 52.41 679.70 64.30
4 1940 69.41 727.80 67.10
4 1941 68.35 643.60 75.20
4 1942 46.80 410.90 71.40
4 1943 47.40 588.40 67.10
4 1944 59.57 698.40 60.50
4 1945 88.78 846.40 54.60
4 1946 74.12 893.80 84.80
4 1947 62.68 579.00 96.80
4 1948 89.36 694.60 110.20
4 1949 78.98 590.30 147.40
4 1950 100.66 693.50 163.20
4 1951 160.62 809.00 203.50
4 1952 145.00 727.00 290.60
4 1953 174.93 1001.50 346.10
4 1954 172.49 703.20 414.90
5 1935 39.68 157.70 183.20
5 1936 50.73 167.90 204.00
5 1937 74.24 192.90 236.00
5 1938 53.51 156.70 291.70
5 1939 42.65 191.40 323.10
5 1940 46.48 185.50 344.00
5 1941 61.40 199.60 367.70
5 1942 39.67 189.50 407.20
5 1943 62.24 151.20 426.60
5 1944 52.32 187.70 470.00
5 1945 63.21 214.70 499.20
5 1946 59.37 232.90 534.60
5 1947 58.02 249.00 566.60
5 1948 70.34 224.50 595.30
5 1949 67.42 237.30 631.40
5 1950 55.74 240.10 662.30
5 1951 80.30 327.30 683.90
5 1952 85.40 359.40 729.30
5 1953 91.90 398.40 774.30
5 1954 81.43 365.70 804.90
6 1935 20.36 197.00 6.50
6 1936 25.98 210.30 15.80
6 1937 25.94 223.10 27.70
6 1938 27.53 216.70 39.20
6 1939 24.60 286.40 48.60
6 1940 28.54 298.00 52.50
6 1941 43.41 276.90 61.50
6 1942 42.81 272.60 80.50
6 1943 27.84 287.40 94.40
6 1944 32.60 330.30 92.60
6 1945 39.03 324.40 92.30
6 1946 50.17 401.90 94.20
6 1947 51.85 407.40 111.40
6 1948 64.03 409.20 127.40
6 1949 68.16 482.20 149.30
6 1950 77.34 673.80 164.40
6 1951 95.30 676.90 177.20
6 1952 99.49 702.00 200.00
6 1953 127.52 793.50 211.50
6 1954 135.72 927.30 238.70
7 1935 24.43 138.00 100.20
7 1936 23.21 200.10 125.00
7 1937 32.78 210.10 142.40
7 1938 32.54 161.20 165.10
7 1939 26.65 161.70 194.80
7 1940 33.71 145.10 222.90
7 1941 43.50 110.60 252.10
7 1942 34.46 98.10 276.30
7 1943 44.28 108.80 300.30
7 1944 70.80 118.20 318.20
7 1945 44.12 126.50 336.20
7 1946 48.98 156.70 351.20
7 1947 48.51 119.40 373.60
7 1948 50.00 129.10 389.40
7 1949 50.59 134.80 406.70
7 1950 42.53 140.80 429.50
7 1951 64.77 179.00 450.60
7 1952 72.68 178.10 466.90
7 1953 73.86 186.80 486.20
7 1954 89.51 192.70 511.30
8 1935 12.93 191.50 1.80
8 1936 25.90 516.00 0.80
8 1937 35.05 729.00 7.40
8 1938 22.89 560.40 18.10
8 1939 18.84 519.90 23.50
8 1940 28.57 628.50 26.50
8 1941 48.51 537.10 36.20
8 1942 43.34 561.20 60.80
8 1943 37.02 617.20 84.40
8 1944 37.81 626.70 91.20
8 1945 39.27 737.20 92.40
8 1946 53.46 760.50 86.00
8 1947 55.56 581.40 111.10
8 1948 49.56 662.30 130.60
8 1949 32.04 583.80 141.80
8 1950 32.24 635.20 136.70
8 1951 54.38 723.80 129.70
8 1952 71.78 864.10 145.50
8 1953 90.08 1193.50 174.80
8 1954 68.60 1188.90 213.50
9 1935 26.63 290.60 162.00
9 1936 23.39 291.10 174.00
9 1937 30.65 335.00 183.00
9 1938 20.89 246.00 198.00
9 1939 28.78 356.20 208.00
9 1940 26.93 289.80 223.00
9 1941 32.08 268.20 234.00
9 1942 32.21 213.30 248.00
9 1943 35.69 348.20 274.00
9 1944 62.47 374.20 282.00
9 1945 52.32 387.20 316.00
9 1946 56.95 347.40 302.00
9 1947 54.32 291.90 333.00
9 1948 40.53 297.20 359.00
9 1949 32.54 276.90 370.00
9 1950 43.48 274.60 376.00
9 1951 56.49 339.90 391.00
9 1952 65.98 474.80 414.00
9 1953 66.11 496.00 443.00
9 1954 49.34 474.50 468.00
10 1935 2.54 70.91 4.50
10 1936 2.00 87.94 4.71
10 1937 2.19 82.20 4.57
10 1938 1.99 58.72 4.56
10 1939 2.03 80.54 4.38
10 1940 1.81 86.47 4.21
10 1941 2.14 77.68 4.12
10 1942 1.86 62.16 3.83
10 1943 0.93 62.24 3.58
10 1944 1.18 61.82 3.41
10 1945 1.36 65.85 3.31
10 1946 2.24 69.54 3.23
10 1947 3.81 64.97 3.90
10 1948 5.66 68.00 5.38
10 1949 4.21 71.24 7.39
10 1950 3.42 69.05 8.74
10 1951 4.67 83.04 9.07
10 1952 6.00 74.42 9.93
10 1953 6.53 63.51 11.68
10 1954 5.12 58.12 14.33

10.2 Antecedentes

A análise estatística separa os conjuntos de observações com acompanhamento temporal como um tipo de série que requer análises específicas. Conforme Mattos(2016), a série temporal da variável aleatória Y apresentará uma dependência serial, uma ordenação específica que impedirá qualquer reordenação, diferentemente de uma amostra aleatória de observações independentes.

O modelo de série temporal aparece então como uma expressão matemática do comportamento da série e poderá ser utilizado para previsões de valores em determinados momentos no tempo, uma vez considerados seus padrões temporais. Na área econômica as séries temporais têm sido aplicadas em estudos principalmente onde se requer a variação temporal, estudos de mudança tecnológica, acompanhamentos macroeconômicos de inflação, contas nacionais, oferta e demanda de moeda, ativos financeiros, risco, cálculos de elasticidades entre outras variáveis econômicas temporais.

O material de Mattos (2016) ilustra os antecedentes históricos da análise de séries temporais, iniciada mais formalmente com os modelos de decomposição da tendência, do ciclo e a sazonalidade antes de 1955, aprofundada pelos modelos de Holt, Winters e Brown ou também chamados de modelos de alisamento ou suavização exponencial (do inglês exponential smoothing).

Já nas décadas de 1960-70, os modelos de Box e Jenkins (1976) e Granger e Newbold (1977) se tornaram predominantes, com análises incluindo termos autorregressivos e médias móveis nas análises, ou os chamados ARIMA (autorregressivo integrado média móvel).

Na década de 1980, os modelos estruturais e bayesianos começam a ser aplicados, simultaneamente aos desenvolvimentos relacionados a cointegração entre séries temporais. Com o passar dos anos, portanto, os econometristas perceberam a necessidade de livros técnicos específicos para tratar os problemas relacionados às séries temporais, surgindo célebres literaturas como o livro de Mills (1990), Hamilton (1994), Hendry (1995) e os brasileiros Morettin e Toloi (2006).

As séries temporais apresentam ênfase (mas não exclusividade) em métodos univariados, diferentemente da econometria em geral que se preocupa em explicar relações multivariadas, regressões múltiplas e mesmo sistema multiequacionais. A informação do modelo de séries temporais (ST) está nos dados, no comportamento ao longo do tempo, diferentemente da base teórica econômica a qual orienta o desenho dos modelos econométricos (Quadro 1).

Diferenciação entre os modelos de série temporal daqueles da econometria em geral.

Figure 10.3: Diferenciação entre os modelos de série temporal daqueles da econometria em geral.

10.3 Conceitos Básicos

A série temporal tipicamente faz a relação de uma entidade em vários períodos de tempo. Por exemplo, a Figura mostra os retornos das ações das Lojas Americanas (LAME4), das Lojas Renner (LREN3) e da Petrobras (PETR4).

O primeiro passo para tal é baixar os dados da empresa desejada. Usaremos como exemplo a Petrobras (PETR4), as Lojas Americanas (LAME4) e a Loja Renner (LREN3). O pacote quantmod nos auxiliará a obter os dados eletronicamente. O pesquisador deve conhecer os tickers do papel desejado.

# puxando ou instalando os pacotes
if (!require(quantmod)) { 
  install.packages('quantmod') 
  library(quantmod) 
}
if (!require(fpp2)) { 
  install.packages('fpp2') 
  library(fpp2) 
}
#if (!require(GetHFData)) { 
#  install.packages('GetHFData') 
#  library(GetHFData) 
#}
# os dados vieram originalmente do comando getSymbols abaixo
# getSymbols(c('PETR4.SA','LAME4.SA','LREN3.SA'),src='yahoo')
# foi feito o .rds para agilizar a rotina

# Salva objeto final
# saveRDS(LAME4.SA,"LAME4.rds")
# saveRDS(LREN3.SA,"LREN3.rds")
# saveRDS(PETR4.SA,"PETR4.rds")
# Carrega dados da LAME4, LREN3 E PETR4 
LAME4.SA <- readRDS("LAME4.rds")
LREN3.SA <- readRDS("LREN3.rds")
PETR4.SA <- readRDS("PETR4.rds")
PETR4.SA.A <- PETR4.SA$PETR4.SA.Adjusted
# mudarei os zeros por NA, depois uso locf para tirar os NA
PETR4_clean<-is.na(PETR4.SA.A) <- PETR4.SA.A == 0 
PETR4_clean<-na.locf(PETR4.SA.A,fromLast = FALSE,coredata = NULL)
max(PETR4_clean)
## [1] 42.20507
min(PETR4_clean)
## [1] 3.896428
LAME4.SA.A <- LAME4.SA$LAME4.SA.Adjusted
# mudarei os zeros por NA, depois uso locf para tirar os NA
LAME4_clean<-is.na(LAME4.SA.A) <- LAME4.SA.A == 0 
LAME4_clean<-na.locf(LAME4.SA.A,fromLast = FALSE,coredata = NULL)
max(LAME4_clean)
## [1] 10491.03
min(LAME4_clean)
## [1] 2.107383
LREN3.SA.A <- LREN3.SA$LREN3.SA.Adjusted
# mudarei os zeros por NA, depois uso locf para tirar os NA
LREN3_clean<-is.na(LREN3.SA.A) <- LREN3.SA.A == 0 
LREN3_clean<-na.locf(LREN3.SA.A,fromLast = FALSE,coredata = NULL)
max(LREN3_clean)
## [1] 60.07819
min(LREN3_clean)
## [1] 0.757578
# Calcular o retorno MENSAL
r_PETR4 <- monthlyReturn(PETR4_clean,type = "log")
r_LAME4 <- monthlyReturn(LAME4_clean,type = "log")
r_LREN3 <- monthlyReturn(LREN3_clean,type = "log")

# UNIFORMIZAR janela temporal para após 2010-01-01
r_PETR4_pos2010 <- window(r_PETR4, start = "2010-01-01")
r_LAME4_pos2010 <- window(r_LAME4, start = "2010-01-01")
r_LREN3_pos2010 <- window(r_LREN3, start = "2010-01-01")
dados_basicos<-
  cbind.xts(r_LAME4_pos2010,r_LREN3_pos2010,r_PETR4_pos2010)
colnames(dados_basicos) <- c("LAME4", "LREN3", "PETR4")
plot(dados_basicos, 
    main="Ativos da B3, Lojas Americanas (lame4),
    Lojas Renner (lren3) e Petrobras (petr4)",
    cex.main = 0.7,font.main = 1,col.main = "black",
    xlab="dia-mês-ano",ylab="Retorno mensal", 
    type="o",col = c(1,2,3),lwd=2,lty=1:3); 
legend(x="bottomleft",legend=c("LAME4", "LREN3", "PETR4"),
       lwd=2,lty=1:3,col=c(1,2,3),cex = 0.8,box.lty=0)
Ativos da B3, Lojas Americanas (lame4), Lojas Renner (lren3) e Petrobras (petr4). Fonte: Elaboração própria com dados básicos da B3.

Figure 10.4: Ativos da B3, Lojas Americanas (lame4), Lojas Renner (lren3) e Petrobras (petr4). Fonte: Elaboração própria com dados básicos da B3.

Outra forma de plotar os dados é pelo pacote dygraphs, que fica muito útil para páginas html, mas não em pdf.

library(dygraphs)
dygraph(dados_basicos,
    main="Retornos mensais - Ativos da B3: 
    LAME4,LREN3,PETR4
    ")%>%
  dyAxis("x",
    label = "Fonte: Yahoo Finance [https://finance.yahoo.com]",
    drawGrid = FALSE)%>%
  dyAxis("y",label = "Retorno mensal")%>%
  dyShading(from = "2018-12-31", to = "2020-05-31", 
            color = "#FAEBD7") %>%
  dyEvent("2018-12-31", "Posse Presidente Bolsonaro", 
          labelLoc = "bottom",strokePattern = "solid")%>%
  dyOptions(gridLineColor = "#B3B3B3",
            drawPoints = FALSE, pointShape = c("dot"))%>%
  dyRangeSelector()

Em geral, as primeiras análises procuram observar padrões no tempo, como a tendência de (de)crescimento, ciclos de altas(baixas), ou sazonalidade (padrões repetitivos no curto prazo) e eventuais irregularidades. Seja uma relação de séries temporais \(y\) e \(x_k\):

\[\begin{equation} y_t=b_0+b_1 x_{1t}+⋯+b_k x_{kt}+u_t \end{equation}\]

As séries temporais possuem uma ordenação explícita no tempo. As relações podem ser contemporâneas (mesmo tempo t) ou dinâmicas (tempos distintos):

  • contemporâneas \[\begin{equation} y_t=b_0+b_1 x_{1t}+⋯+b_k x_{kt}+u_t \end{equation}\]

  • dinâmicas ou defasadas \[\begin{equation} y_t=a_0+d_0 z_t+d_1 z_{(t-1)}+d_2 z_{(t-2)}+u_t \end{equation}\]

O exemplo anterior é típico de defasagem distribuída de ordem 2. O processo genérico poderia ser de q defasagens de z, ou ordem q, dado por:

\[\begin{equation} y_t=a_0+d_0 z_t+d_1 z_{(t-1)}+⋯+d_q z_{(t-q)}+u_t \end{equation}\]

10.3.1 Passeio aleatório

O passeio ou caminho aleatório (Figura 10.3) é um processo \(X_t\) tal que depende apenas de seus valores passados e de um processo puramente aleatório \(ε_t\) com média \(μ\) e variância \(σ_ε^2\) tal que:

  • caminho aleatório sem intercepto \[\begin{equation} X_t=X_{t-1}+ε_t \end{equation}\]

  • caminho aleatório com intercepto \[\begin{equation} X_t=δ+X_{t-1}+ε_t \end{equation}\]

Substituindo a expressão de \(X_{t-1}\) em \(X_t\) tem-se \(X_t=X_{t-2}+ε_{t-1}+ε_t\). Generalizando tem-se \(X_t\) como função do valor inicial \(X_0=0\).

Passeio Aleatório. Fonte: Adaptada de <http://scifun.chem.wisc.edu/WOP/RandomWalk.html>.

(#fig:figura_passeio)Passeio Aleatório. Fonte: Adaptada de http://scifun.chem.wisc.edu/WOP/RandomWalk.html.

O passeio aleatório no R é feito numa simulação, neste caso, para uma função normal genérica. Ver script e Figura.

# SIMULANDO UM PASSEIO ALEATORIO GENERICO (random walk) 
#
set.seed(321)
e = rnorm(250)
y.rw = cumsum(e)
ts.plot(y.rw, lwd=2, col="blue", 
        main="Random Walk - Passeio Aleatório",
        gpars=list(xlab="Tempo", ylab="y random walk")
        )
abline(h=0)
Random Walk - Passeio Aleatório. Fonte: Elaboração própria.

Figure 10.5: Random Walk - Passeio Aleatório. Fonte: Elaboração própria.

É possível verificar oscilações na série ao longo do tempo. A presença de eventuais tendências (se alterando ao longo de subamostras) e oscilações que indicam volatilidade ao longo das diferentes subamostras. Tais indicações, embora graficamente ainda representem apenas indicações, darão possíveis interpretações de não-estacionariedade da série.

Exemplo para a série do PIB Brasileiro. Neste exemplo utiliza-se a série n. 22109 do PIB a preços de mercado (SCN-2010, Trimestral, (1995=100), dados dessazonalizados ), de 1995T01 até 2016T04. Ver script e Figura. Por dificuldades operacionais com os pacotes BETS e ecoseries, optamos por baixar os dados diretamente do site do Banco Central do Brasil e chamar os dados para o R.

O site do Banco Central do Brasil é uma alternativa para coletar os dados diretamente e baixá-los em seu computador, conforme a imagem.

Site do Banco Central do Brasil. Fonte: Elaboração própria.

(#fig:figura_SGST_BCB)Site do Banco Central do Brasil. Fonte: Elaboração própria.

Alguns pacotes que serão úteis a partir deste ponto, a fim de reproduzir os chunks em R: BETS, ecoseries.

# ver http://api.bcb.gov.br
# exemplo banco central do Brasil
# serie 22109  PIB a preços de mercado SCN-2010 (Trimestral)
# dados dessazonalizados # 01/01/1996 até 4º Trim. 2017  
# (1995=100)
suppressMessages(suppressWarnings(library(BETS)))
bacen <- BETSget(22109,from = "31/12/1994", to = "01/01/2020")
bacen<-structure(c(100.48, 100.7, 104.32, 103.37, 104.39, 104.76,  
106.34,107.27, 104.7, 106.89, 106.9, 105.71, 105.4, 106.38, 106.39, 
108.01, 109.8, 110.53, 111.53, 113.01, 113.43, 113.08, 112.12, 
112.4, 114.57, 115.01, 116.93, 118.29, 116.87, 116.55, 117.63, 
119.05, 121.29, 123.83, 125.5, 126.57, 126.85, 128.69, 128.22, 
129.34, 131.46, 132.26, 134.11, 135.56, 138.12, 140.94, 142.11, 
144.55, 147.17, 149.21, 152.19, 145.96, 143.2, 146.55, 150.3, 
153.73, 156.21, 158.99, 160.79, 162.56, 164.14, 166.5, 166.53, 
166.84, 166.74, 168.2, 170.79, 171.11, 171.51, 174.46, 175.66, 
175.57, 176.3, 174.46, 174.64, 175.35, 173.16, 169.84, 167.21, 
165.67, 164.58, 163.44, 162.75, 161.67, 163.77, 164.72, 165.12, 
165.2), .Tsp = c(1996, 2017.75, 4), class = "ts")
head(bacen)
##        Qtr1   Qtr2   Qtr3   Qtr4
## 1996 100.48 100.70 104.32 103.37
## 1997 104.39 104.76
tail(bacen)
##        Qtr1   Qtr2   Qtr3   Qtr4
## 2016               162.75 161.67
## 2017 163.77 164.72 165.12 165.20
class(bacen) # confirmar que veio como ts
## [1] "ts"
plot(bacen,
  main="BCB série 22109: PIB a preços de mercado SCN-2010 
     \n (Trimestral) (1995=100)",
  type = "o",col="black",lwd=2,lty=1, cex.sub = 0.75,
  ylab = "Indice 1995=100",xlab="trimestre",
  sub = "Fonte: Banco Central do Brasil via pacote BETS,elaboração própria.")

# Estacionariedade do PIB
dpib<-diff(bacen,1)
dpib2<-diff(bacen,2)
plot(dpib2,main="Séries de Diferenças do PIB Brasileiro",
     type = "o",col="black",lwd=2,lty=1, ylab = "Indice",
     xlab="trimestre", sub = "Elaboração própria.")
lines(dpib,type="o",col = "red",lwd=2,lty=2)
legend("bottomleft",c("d(PIB,2)", "d(PIB)"),
       cex=0.7,lwd=2,lty=1:2,col=c(1,2))

10.3.2 Ruído Branco (White noise)

Assume-se em geral que os resíduos \(u_t\) sejam bem comportados, ou seja, Ruído Branco: série de resíduos que representa um processo gaussiano, ou seja, com distribuição normal, média zero, variância constante e não-autocorrelacionados. O conceito de ruído branco será importante para compreender o conceito de estacionariedade de séries temporais.

\({u_t} \sim N\left( {0,{\sigma ^2}} \right)\)

Utilizando o R/RStudio para gerar um White noise, pelo script. O resultado será como na Figura.

options(digits=4, width=70)
# simulate Gaussian White Noise process
set.seed(123)
y = rnorm(250)
ts.plot(y,
        main="Processo Gaussiano White Noise - Ruído Branco",
        xlab="Tempo",ylab="y(t)",col="blue", lwd=2,
        sub = "Fonte: Elaboração própria.")
abline(h=0)

10.3.3 Tendência determinística

Outro conceito é o de tendência (trend), que reflete as oscilações de longo prazo em uma série. No script e Figura, tem-se uma simulação de um processo de tendência determinística.

# SIMULANDO UMA TENDENCIA DETERMINÍSTICA
# 
set.seed(123)
e = rnorm(250)
y.dt = 0.2*seq(1,250) + e
ts.plot(y.dt, lwd=2, col="blue", 
        main="Tendência Determinística + Ruído",
        sub = "Fonte: Elaboração própria.")
abline(a=0, b=0.1)

10.3.4 Modelo temporal

Tipicamente, o modelo estático de série temporal ocorre quando as variáveis estão situadas em um mesmo período t

\[\begin{equation} {y_t} = {\beta _0} + {\beta _1}{z_t} + {u_t} \end{equation}\] para \(t=1,2,...,T\)

É dito Estático porque tanto y como z estão no período t – são ditas contemporâneas. O efeito de z sobre y no período t é \(\beta_1\).

O Modelo de defasagens distribuídas finitas (DDF) (Finite distributed lag - FDL) ou também chamado de modelo dinâmico é do tipo:

\[\begin{equation} {y_t} = {\alpha _0} + {\delta _0}{z_t} + {\delta _1}{z_{t - 1}} + {\delta _2}{z_{t - 2}} + {u_t} \end{equation}\]

Neste caso, as variáveis em t-1 e t-2 são ditas defasadas no tempo em hum e em dois períodos, ou seja, são valores passados de z afetando y. O parâmetro \(\delta_0\) será a propensão de mudança em curto prazo, o multiplicador de impacto de z em y: a mudança imediata. Fazendo um exemplo de uma mudança temporária (ou seja, se dissipa rapidamente – o contrário seria uma mudança permanente) de hum período, y retornará ao seu nível original no período seguinte t+1. Portanto, após algumas manipulações matemáticas, pode-se demonstrar que \(\delta_0 + \delta_1 +\dots+ \delta_q\) (para q defasagens) será a propensão de mudança em longo prazo (long-run propensity - LRP) – que reflete a mudança em longo prazo em y após uma mudança permanente. Atentar que não é ainda o mesmo que elasticidade.

Neste caso precisaremos usar o pacote dynlm invés do lm no R de modo a considerar adequadamente as variáveis defasadas no tempo. Utilizar o operador defasagem (lag no R básico ou L no dynlm)(Ver HEISS, 2016 ,p.173-174).

10.3.4.1 Exemplo do modelo de defasagens distribuídas defasadas

Seja o exemplo 10.4 de Wooldridge (2017, p.395), para analisar os Efeitos da dedução de impostos nas taxas de fertilidade. A taxa geral de fertilidade (sigla do inglês general fertility rate - gfr) é o número de crianças nascidas para cada 1.000 mulheres em idade fértil (15-44 anos) e pe é uma dedução de impostos pessoais (valor real em dólares). Para os anos de 1913 a 1984, deseja-se investigar se a redução de impostos está relacionada com a maior taxa de fertilidade. As variáveis \(ww2\) e \(pill\) são dummies binárias para 1 quando for, respectivamente, o período da Segunda Guerra Mundial (1941 to 1945) e o período após descoberta da pílula anticoncepcional, após 1963. O dataset básico chamado fertil3 pode ser obtido no pacote wooldridge e contempla mais variáveis, mas no presente caso utilizaremos apenas \(gfr=f(pe,ww2,pill)\). O dataset já contempla as variáveis \(pe_{t-1}\) e \(pe_{t-2}\), de nome pe_1 e pe_2. O leitor poderá verificar que a pe_1 está exatamente hum período atrasado de pe, e a pe_2 consequentemente dois períodos atrasados de pe:

library(dynlm);library(stargazer)
data(fertil3, package='wooldridge')
print(head(fertil3[1:10,c(1:3,6:7)],n=10L))
##      gfr    pe year  pe_1  pe_2
## 1  124.7  0.00 1913    NA    NA
## 2  126.6  0.00 1914  0.00    NA
## 3  125.0  0.00 1915  0.00  0.00
## 4  123.4  0.00 1916  0.00  0.00
## 5  121.0 19.27 1917  0.00  0.00
## 6  119.8 23.94 1918 19.27  0.00
## 7  111.2 20.07 1919 23.94 19.27
## 8  117.9 15.33 1920 20.07 23.94
## 9  119.8 34.32 1921 15.33 20.07
## 10 111.2 36.65 1922 34.32 15.33

As mesmas séries podem ser obtidas pelo operador lag do pacote stats. Em uma regressão, a defasagem pode ser obtida pelo operador \(L\) do pacote dynlm, dentro da regressão. Comparemos para os primeiros 10 anos do dataset:

# Definir time series anual iniciando em 1913 até 1922
attach(fertil3)
## The following object is masked _by_ .GlobalEnv:
## 
##     t
fertil3.ts <- ts(fertil3[1:10,1:3], start=1913)

Observe que pe começa a ser não nulo em 1917 e o valor de 1917 (igual a 19.27) aparecerá na linha de 1918 para pe1 e na linha de 1919 para pe2. Ou seja, quando t for 1919, pe em t-2 será igual a pe de 1917.

# fertil3.ts[,2] é a coluna de pe no objeto fertil3.ts
pe1<-lag(fertil3.ts[,2], -1)
pe2<-lag(fertil3.ts[,2], -2)
tabela<-cbind(fertil3.ts,pe1,pe2)
knitr::kable(tabela,caption="Dados do objeto fertil3.ts")
Table 10.2: Dados do objeto fertil3.ts
fertil3.ts.gfr fertil3.ts.pe fertil3.ts.year pe1 pe2
124.7 0.00 1913 NA NA
126.6 0.00 1914 0.00 NA
125.0 0.00 1915 0.00 0.00
123.4 0.00 1916 0.00 0.00
121.0 19.27 1917 0.00 0.00
119.8 23.94 1918 19.27 0.00
111.2 20.07 1919 23.94 19.27
117.9 15.33 1920 20.07 23.94
119.8 34.32 1921 15.33 20.07
111.2 36.65 1922 34.32 15.33
NA NA NA 36.65 34.32
NA NA NA NA 36.65

Portanto, matematicamente deseja-se estimar a expressão:

\[\begin{equation} gfr_t= \alpha _0 + \beta _0 pe_t +\beta _1 pe_{t-1} + \beta _2 pe_{t-2} + \beta _3 ww2_{t} + \beta _4 pill_{t} + \mu _t \end{equation}\]

O gráfico da variável dependente gfr (tgr - taxa geral de fertilidade) é:

require(forecast)
fertil3.ts <- ts(fertil3[,1:11], start=1913)
forecast::autoplot(fertil3.ts[,1], 
         main = "Gráfico da variável dependente gfr 
         (tgr - taxa geral de fertilidade)", 
         ylab = "Nascimentos por 1000 mulheres", xlab = "Ano",
         subcap = "Fonte: Elaboração própria.")
## Warning: Ignoring unknown parameters: subcap

Vamos estimar o modelo de regressão linear múltipla fazendo a regressão conforme a equação de defasagens distribuídas: \[gfr_t= \alpha _0 + \beta _0 pe_t +\beta _1 pe_{t-1} + \beta _2 pe_{t-2} + \beta _3 ww2_{t} + \beta _4 pill_{t} + \mu _t\].

# Regressao Linear :
library(dynlm);library(lmtest);library(car);library(stargazer)
reg1 <- dynlm(gfr ~ pe+L(pe)+L(pe,2)+ww2+pill, data=fertil3.ts)
reg1$AIC <- AIC(reg1)  # Akaike
reg1$BIC <- BIC(reg1)  # Schwarz
stargazer(reg1,
          title = "Título: Resultado da Regressão OLS", 
          align = TRUE, type = "text", 
          style = "all", 
          keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))
## 
## Título: Resultado da Regressão OLS
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                 gfr            
## -----------------------------------------------
## pe                             0.073           
##                               (0.126)          
##                              t = 0.579         
##                              p = 0.565         
## L(pe)                         -0.006           
##                               (0.156)          
##                             t = -0.037         
##                              p = 0.971         
## L(pe, 2)                       0.034           
##                               (0.126)          
##                              t = 0.268         
##                              p = 0.790         
## ww2                          -22.130**         
##                              (10.730)          
##                             t = -2.062         
##                              p = 0.044         
## pill                        -31.300***         
##                               (3.982)          
##                             t = -7.862         
##                              p = 0.000         
## Constant                     95.870***         
##                               (3.282)          
##                             t = 29.210         
##                              p = 0.000         
## -----------------------------------------------
## Observations                    70             
## R2                             0.499           
## Adjusted R2                    0.459           
## Akaike Inf. Crit.             578.500          
## Bayesian Inf. Crit.           594.300          
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

É possível testar a não significância conjunta da variável pe (contemporânea e suas defasagens) fazendo uso de um teste tipo F para \(H_0: \beta _0 = \beta _1 = \beta _2 = 0\).

library(car)
car::linearHypothesis(reg1, matchCoefs(reg1,"pe"))
## Linear hypothesis test
## 
## Hypothesis:
## pe = 0
## L(pe) = 0
## L(pe, 2) = 0
## 
## Model 1: restricted model
## Model 2: gfr ~ pe + L(pe) + L(pe, 2) + ww2 + pill
## 
##   Res.Df   RSS Df Sum of Sq    F Pr(>F)  
## 1     67 15460                           
## 2     64 13033  3      2427 3.97  0.012 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

O valor de F = 3.973 e probabilidade de F (Pr(>F) = 0.01165) indica que se deve rejeitar a hipótese nula, e algum dos termos de pe é estatisticamente diferente de zero. Conforme Wooldridge (2017, p.395), efetivamente temos que os termos defasados são conjuntamente não-significativos com Pr(>F) = 0.948. Podemos conferir fazendo

library(car)
myH0<-c("L(pe)","L(pe, 2)")
car::linearHypothesis(reg1, myH0)
## Linear hypothesis test
## 
## Hypothesis:
## L(pe) = 0
## L(pe, 2) = 0
## 
## Model 1: restricted model
## Model 2: gfr ~ pe + L(pe) + L(pe, 2) + ww2 + pill
## 
##   Res.Df   RSS Df Sum of Sq    F Pr(>F)
## 1     66 13054                         
## 2     64 13033  2      21.8 0.05   0.95

Ou seja, o melhor seria um modelo estático. Para fins ilustrativos, Wooldridge (2017, p.396) faz o cômputo do intervalo de confiança da propensão em longo prazo (PLP) do modelo, que indica o efeito cumulativo da mudança da variável independente sobre a dependente, e que será a soma dos coeficientes estimados dos períodos t e defasagens. Conforme Heiss (2016, p. 175), podemos obter o resultado diretamente dos coeficientes estimados pelo dynlm e refazer o teste linearHypothesis para avaliar se é estatisticamente diferente de zero. Assim, tem-se:

library(car)
# Cálculo da propensão em longo prazo (PLP) para o modelo DDF
b<-coef(reg1)
PLP=b["pe"]+b["L(pe)"]+b["L(pe, 2)"]
print(PLP)
##     pe 
## 0.1007
myH0plp<-"pe+L(pe)+L(pe, 2)"
car::linearHypothesis(reg1, myH0plp)
## Linear hypothesis test
## 
## Hypothesis:
## pe  + L(pe)  + L(pe, 2) = 0
## 
## Model 1: restricted model
## Model 2: gfr ~ pe + L(pe) + L(pe, 2) + ww2 + pill
## 
##   Res.Df   RSS Df Sum of Sq    F Pr(>F)   
## 1     65 15358                            
## 2     64 13033  1      2326 11.4 0.0012 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Portanto, pode-se afirmar que a PLP é igual a 0.1007, significativa a 0.1% de significância. Conforme sugestão de Wooldridge (2017,p.396), podemos obter esta PLP e o desvio-padrão fazendo uma regressão alternativa (o leitor pode olhar a dedução no autor citado) e estimando a expressão de \(gfr_t\) em função de \(pe_t\), \((pe_{t-1}-pe_t)\), \((pe_{t-2}-pe_t)\), \(ww2_t\) e \(pill_t\).

Portanto,

\[\begin{equation} gfr_t = \alpha_0 + (\Theta_0-\delta_1-\delta_2)pe_t + \delta_1 (pe_{t-1}-pe_t)+ \delta_2 (pe_{t-2}-pe_t) + \delta_3 ww2_t + \delta_4 pill_t + \mu_t \end{equation}\]

# Regressao Linear :
library(dynlm)
reg2 <- dynlm(gfr ~ pe + I(L(pe)-pe) + I(L(pe,2)-pe) +
                ww2+pill, data=fertil3.ts)
summary(reg2)
## 
## Time series regression with "ts" data:
## Start = 1915, End = 1984
## 
## Call:
## dynlm(formula = gfr ~ pe + I(L(pe) - pe) + I(L(pe, 2) - pe) + 
##     ww2 + pill, data = fertil3.ts)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -24.646  -9.541  -0.031   8.338  29.130 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       95.87050    3.28196   29.21  < 2e-16 ***
## pe                 0.10072    0.02980    3.38   0.0012 ** 
## I(L(pe) - pe)     -0.00578    0.15566   -0.04   0.9705    
## I(L(pe, 2) - pe)   0.03383    0.12626    0.27   0.7896    
## ww2              -22.12650   10.73197   -2.06   0.0433 *  
## pill             -31.30499    3.98156   -7.86  5.6e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 14.3 on 64 degrees of freedom
## Multiple R-squared:  0.499,  Adjusted R-squared:  0.459 
## F-statistic: 12.7 on 5 and 64 DF,  p-value: 1.35e-08

Ou seja, obtivemos o coeficiente da PLP = 0.1007, que será o coeficiente de pe na regressão alterada e o desvio-padrão estimado de 0.0298, cujo teste t indica pela significância a 0.1% (probabilidade Pr(>|t|) =0.00124), que foi exatamente o valor da probabilidade do teste F do chunk da PLP, anterior à regressão reg2. O intervalo de confiança desta estimativa será entre 0.041 e 0.160.

confint(reg2,"pe")
##      2.5 % 97.5 %
## pe 0.04118 0.1603

10.3.5 Estacionariedade

Em geral, a econometria tradicional (causa e efeito) pressupõe que todas as séries sejam estacionárias. Seja a seguinte série temporal \(X_t\):

\[\begin{equation} X_t = \mu + \varepsilon_t \end{equation}\]

10.4 Exemplo 1 - Varejo de São Paulo

library(fpp2)
library(readxl);library(dynlm) #; library(foreign)
library(sandwich);library(lmtest);library(car)
library(tseries); library(lattice)

dados<-
structure(list(obs = structure(c(441763200, 444441600, 446947200, 
449625600, 452217600, 454896000, 457488000, 460166400, 462844800, 
465436800, 468115200, 470707200, 473385600, 476064000, 478483200, 
481161600, 483753600, 486432000, 489024000, 491702400, 494380800, 
496972800, 499651200, 502243200, 504921600, 507600000, 510019200, 
512697600, 515289600, 517968000, 520560000, 523238400, 525916800, 
528508800, 531187200, 533779200, 536457600, 539136000, 541555200, 
544233600, 546825600, 549504000, 552096000, 554774400, 557452800, 
560044800, 562723200, 565315200, 567993600, 570672000, 573177600, 
575856000, 578448000, 581126400, 583718400, 586396800, 589075200, 
591667200, 594345600, 596937600, 599616000, 602294400, 604713600, 
607392000, 609984000, 612662400, 615254400, 617932800, 620611200, 
623203200, 625881600, 628473600, 631152000, 633830400, 636249600, 
638928000, 641520000, 644198400, 646790400, 649468800, 652147200, 
654739200, 657417600, 660009600, 662688000, 665366400, 667785600, 
670464000, 673056000, 675734400, 678326400, 681004800, 683683200, 
686275200, 688953600, 691545600, 694224000, 696902400, 699408000, 
702086400, 704678400, 707356800, 709948800, 712627200, 715305600, 
717897600, 720576000, 723168000, 725846400, 728524800, 730944000, 
733622400, 736214400, 738892800, 741484800, 744163200, 746841600, 
749433600, 752112000, 754704000, 757382400, 760060800, 762480000, 
765158400, 767750400, 770428800, 773020800, 775699200, 778377600, 
780969600, 783648000, 786240000, 788918400, 791596800, 794016000, 
796694400, 799286400, 801964800, 804556800, 807235200, 809913600, 
812505600, 815184000, 817776000, 820454400, 823132800, 825638400, 
828316800, 830908800, 833587200, 836179200, 838857600, 841536000, 
844128000), 
class = c("POSIXct", "POSIXt"), tzone = "UTC"), t = c(1, 
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 
126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 
152, 153, 154), 
consumo = c(114.13, 110.79, 116.46, 111.57, 120.66, 
121.15, 121.27, 127.02, 129.04, 133.3, 130.6, 179.39, 120.64, 
114.05, 130.6, 118.26, 145.54, 135.13, 153.35, 159.95, 150.01, 
164.93, 170.37, 220.96, 134.26, 133.11, 147.84, 164.46, 181.86, 
170.44, 186.64, 174.21, 181.62, 194.16, 181.9, 232.01, 140.16, 
130.78, 119.04, 120.73, 129.81, 111.04, 122.75, 133.95, 125.41, 
132.05, 129.54, 176.37, 110.09, 113.25, 124.03, 110.63, 116.72, 
124.63, 124.38, 130.27, 119.87, 115.75, 122.44, 162.43, 105.89, 
115.59, 147, 131.7, 131.32, 136.66, 126.43, 134.88, 128.26,  
125.32,124.61, 166.11, 116.25, 96.93, 89.27, 101.87, 125.57,  
113.31,109.39, 127.33, 120.56, 117.73, 113.81, 147.25, 100.15,  
95.11,112.26, 109.39, 114.2, 113.8, 126.47, 128.36, 115.71,116.09, 
99.53, 127.27, 87.08, 85.67, 82.02, 98.2, 96.44, 90.23, 97.15, 
95.08, 94, 93, 96.09, 129.21, 75.39, 77.7, 97.34, 84.97, 87.55, 
86.64, 90.52, 95.4, 95.2, 95.8, 101.23, 128.49, 85.63, 82.77, 
96.55, 81.33, 96.91, 83.76, 90.19, 114.84, 108.4, 106.05, 109.71, 
143.86, 99.12, 99.28, 114.75, 106.13, 110.02, 108.07, 112.52, 
113.87, 107.84, 112.12, 112.03, 139.37, 92.24, 93.56, 107.37, 
102.89, 114.78, 102.88, 118.41, 119.23, 117.36, 122.06)), 
row.names = c(NA, 
-154L), class = c("tbl_df", "tbl", "data.frame"))
attach(dados)
dados2<- matrix(consumo)
dados.ts<- ts(dados2,start=c(1984,1), frequency = 12)

10.4.1 Gráfico da série temporal do objeto ts

plot(dados.ts,main="Consumo do varejo de São Paulo, 
     Morettin e Toloi (2006)",
              xlab="Ano",ylab="índice",
     sub = "Fonte: Elaborado de Morettin e Toloi (2006).")

10.4.2 Gráfico comum sem objeto ts

Neste caso, sem especificar o objeto tipo ts, o R entenderá como um gráfico de dispersão (fiz esse exemplo para ressaltar esse aspecto ao leitor ).

plot(consumo, 
  main="Consumo do varejo de São Paulo, 
     Morettin e Toloi (2006)",
  xlab="Ano",ylab="índice",
  sub = "Fonte: Elaborado de Morettin e Toloi (2006)."
     )

10.4.3 Gráfico temporal no lattice

Neste caso, especificando o objeto tipo ts, e a função xyplot.ts do pacote lattice (fiz esse exemplo apenas para ressaltar ao leitor que existem vários pacotes e funções gráficas no R).

xyplot.ts(dados.ts,main="Consumo do varejo de São Paulo, 
     Morettin e Toloi (2006)",
  xlab="Ano",ylab="índice",
  sub = "Fonte: Elaborado a partir de Morettin e Toloi (2006)."
)

10.4.4 Gráfico temporal no ggplot2

Este é um dos pacotes mais poderosos mas o leitor deve atentar aos detalhes. Neste caso, cria-se a coluna de datas, especifica-se o objeto tipo data.frame, e a função ggplot do pacote ggplot2. Uma alternativa bastante interessante é, tão logo tenha gerado o objeto dados.df, experimentar o pacote esquisse e a função esquisser, que facilitará o trabalho de plotagem com o objeto data.frame. Neste exemplo, o gráfico foi gerado com o tema que reproduz o padrão do software Stata.

library(ggplot2)
datas <- seq(as.Date(paste(c(start(dados.ts),1), collapse="/")), 
             by = "month", length.out = length(consumo))
dados.df <- data.frame(date = datas, value = consumo)
# esquisse::esquisser()
ggplot(dados.df) +
 aes(x = date, y = value) +
 geom_line(size = 1L, colour = "#0c4c8a") +
 labs(x = "Ano", y = "Índice", 
    title = "Consumo do varejo de São Paulo,", 
    subtitle = "Morettin e Toloi (2006)", 
    caption = "Fonte: Elaboração própria a partir de Morettin e Toloi (2006)") +
 ggthemes::theme_stata()

10.4.5 Gráfico temporal no dygraphs

Opção muito interessante para movimentar o mouse sobre o gráfico. Funciona bem em formato html pois é dinâmico. Desta forma, no pdf ou word não apresenta sua exuberância (Mas não deixe de ver no formato html!!!).

library(dygraphs)
dygraph(dados.ts)

10.4.6 Decomposição clássica decompose

Neste momento, apresentamos uma forma rápida de realizar a decomposição clássica da série temporal em seus componentes de tendência (trend), sazonalidade (seasonal) e irregularidades (remainder). O pacote ggfortify e a função autoplot oferecem um bom resultado visual. A decomposição em si está na função decompose.

library(ggfortify)
autoplot(decompose(ts(dados2,start=c(1984,1), 
        frequency = 12)), ts.colour = 'blue')

10.4.7 Plots sazonais seasonplot

Agora faremos um exemplo acompanhando a indicação de Hyndman e Athanasopoulus (2014) para gerar gráficos sazonais. Eles auxiliarão a visualizar possíveis sazonalidades, mas não excluem a realização de testes específicos posteriormente.

#seasonal plots do Hyndman aplicado 
# ao consumo do Morettin e Toloi:
seasonplot(dados.ts,ylab="indice", xlab="Ano", 
    main="Seasonal plot: Consumo do varejo de São Paulo,
           Morettin e Toloi (2006)",
    year.labels=TRUE, year.labels.left=TRUE, col=1:20, pch=19)

10.4.8 Plots sazonais mensais monthplot

Similarmente, podem ser feitos plots sazonais mensais.

#Seasonal subseries plots: consumo do Morettin e Toloi:
monthplot(ts(dados2,start=c(1984,1), 
             frequency = 12),
     ylab="indice",xlab="Mês",xaxt="n",
     main="Seasonal deviation plot: Consumo do varejo de São Paulo,
          Morettin e Toloi (2006)")
axis(1,at=1:12,labels=month.abb,cex=0.8)

10.4.9 Correlogramas

Gráficos da função de autocorrelação da série de consumo do varejo de São Paulo, com intervalos de confiança de 95%.

autoplot(acf(ts(dados2,start=c(1984,1), 
                frequency = 12)), conf.int.fill = '#0000FF',
         conf.int.value = 0.90, conf.int.type = 'ma')

Referências 10

BOX, G.; JENKINS, G. Time Series Analysis: Forecasting and Control, revised edition. Holden Day, San Francisco-CA (USA). 1976.

BUSSAB, W.O.; MORETTIN, P.A. Estatística básica. Editora Saraiva, Oitava Edição, Sétima Tiragem, 2015.(códigos/scripts e dados em https://www.ime.usp.br/~pam/EstBas.html).

GRANGER, C.W.J.; NEWBOLD, P. Forecasting economic time series. Academic Press, Cambridge-MA (USA). 1977.

HAMILTON, J.D. Time series analysis, volume 2. Princeton, NJ: Princeton University Press. 1994.

HENDRY, D F. Dynamic econometrics. Oxford(UK).: Oxford University Press. 1995.

HYNDMAN, R.J.; ATHANASOPOULOS, George . Forecasting: principles and practice. Otexts, 2018. Disponível em: https://www.otexts.org/fpp2.

MATTOS, R.S. Decomposição com regressão (Apostila). Juiz de Fora-MG (BR): UFJF, 2016.

MILLS, T.C. Time series techniques for economists. Cambridge (UK): Cambridge University Press. 1990.

MORETTIN, P.A.; TOLOI, C.M.C. Análise de Séries Temporais. São Paulo: Edgard Blucher/ABE, 2006.

Referências

Apêndice: Passos básicos para o R e RStudio

Nesta seção faz-se uma breve sugestão de como instalar o R e o RStudio a fim de permitir seu uso nas rotinas do livro.

10.5 Instalação

Rstudio é um ambiente de desenvolvimento integrado (IDE) para a linguagem de programação R. Ou de um modo mais simples, é um software que permitirá rodar o R de um modo um pouco mais amigável. É possível obter o R e o RStudio de modo livre, para uso não comercial, e recordando as devidas permissões ou licenças autorais. Para mais detalhes sobre as licenças tipo Creative Commons, acessar https://creativecommons.org/licenses/?lang=pt_BR.

Os passos básicos são: 1. Instalar o R; 2. Instalar o RStudio; e, 3. Instalar os pacotes necessários (que pode ser sob demanda).

Para iniciar, instale o R, que pode ser obtido gratuitamente no site (para ambiente MS Windows) http://cran.r-project.org/bin/windows/base/. Uma tela deve abrir em seu navegador, clique em download R x.xx for Windows e siga as instruções, por exemplo, para escolher o idioma desejado.

Figura A.1 Tela de download do R para Windows).

O processo de instalação do R em geral ocorre em um diretório paralelo a uma eventual versão anterior. Sugere-se preservar a versão “estável” até ter a certeza de que a nova versão é a melhor. Embora o não uso da última versão possa gerar “avisos” (warnings) ao rodar scripts, na maior parte dos casos isso não impede que as funções do R funcionem. Após a instalação, se abrir o R (clicando sobre o ícone na tela de trabalho, referente ao arquivo executável RGui.exe), deve aparecer uma tela semelhante a figura A2.

Figura A.2 Tela de abertura do R para Windows).

A seguir, instale o RStudio a partir de https://www.rstudio.com/. Clique em Download RStudio, e depois escolha a versão desejada. Existem versões comerciais e/ou que conferem algumas opções de suporte (e requerem pagamentos) ou a versão livre, free, que pode ser para o desktop ou para um servidor (server). Sugere-se a versão desktop clicando em RStudio Desktop Free. https://www.rstudio.com/products/rstudio/download/#download. Escolha a plataforma adequada ao seu sistema operacional.

Figura A.3 Tela de download do RStudio Desktop Free).

Figura A.4 Tela de escolha do sistema operacional do RStudio Desktop Free).

Instalados os softwares R e RStudio, deve-se escolher o repositório dos pacotes de modo a permitir acessar os arquivos necessários para cada rotina.

A tela inicial do RStudio funciona em geral no modo de quadrantes, ou janelas de visualização (Figura A.5.)

Figura A.5 Tela do RStudio).

É possível ver uma tela do Console, onde serão colocados os comandos, ou a tela de execução dos comandos e funções. Outra tela consta o ambiente (Environment) onde serão apresentados os objetos e funções carregadas na memória do sistema. Há ainda o quadrante da visualização dos arquivos do diretório de trabalho (Files), gráficos (Plots), pacotes (Packages), o Help e o visualizador (Viewer).

Um passo importante é a escolha do repositório padrão a trabalhar, é a escolha do local onde serão obtidos os pacotes. No Brasil, encontram-se repositórios nos estados de São Paulo, Rio de Janeiro e Paraná. O RStudio possui o repositorio próprio, mas o R permite a escolha do repositorio entrando no R, na aba Arquivo/Escolher espelho CRAN.

Figura A.6 Tela do R - escolha do Espelho CRAN).

Figura A.7 Tela do R - CRAN mirror).

10.6 Iniciando um projeto

Recomenda-se trabalhar sempre com um projeto novo, específico para o que se pretende estudar. Desse modo, concentram-se os scripts, dados e outros arquivos no mesmo diretório de trabalho, o do projeto criado. Abre-se a aba File\New Project no RStudio.

Figura A.8 RStudio - Novo projeto).

Na sequência, deve-se escolher entre um novo diretório ou um diretório existente, o tipo de projeto (se um projeto vazio - empty - ou pacote R ou aplicativos Shiny), e depois especifica o nome do novo diretório e define a pasta onde será criado o novo projeto e novo diretório. U arquivo com o mesmo nome do projeto e com extensão .Rproj será criado e os arquivos deste diretório serão visualizados na aba Files do RStudio.
Figura A.9 RStudio - Novo projeto e diretório de trabalho).

É possível visualizar um exemplo na Figura A.10, onde na aba de arquivos, pacotes, plots e ajuda tem-se o arquivo com a extensão .Rproj menciobado anteriormente.

Figura A.10 RStudio - Diretório de trabalho).

A seguir, para iniciar os trabalhos, recomenda-se colocar o arquivo de dados (planilha MS Excel ou arquivo de texto - txt,csv - ou de outro formato como o arquivo de dados do R - .Rda) nesta mesma pasta do diretório de trabalho. Sugere-se fazer isso por meio do Explorador de arquivos do Windows. Feito isso, o arquivo de dados aparecerá na janela Files, Figura A.11.

Figura A.11 RStudio - arquivo de dados).

O próximo passo é pegar algum script para exemplo do que pretende e começar a adaptar as rotinas para o seu próprio estudo. Lembrar de que, em alguns casos, pode ser necessário citar e referenciar adequadamente de onde retirou o script para adaptar. Em outros, o script é livre e apenas deverá referenciar os pacotes utilizados. O script é o arquivo com extensão .R. Ele terá as linhas de comentários quando antecedidas pelo símbolo #. O arquivo de sessão será armazenado com extensão .RData.


  1. DIAZ, M.D.M. Problemas econométricos no modelo linear geral. In: VASCONCELLOS, M.A.S.; ALVES, D. (Coords.) Manual de econometria. São Paulo:Atlas, 2000. p.105-137.↩︎

  2. ZEILEIS, A (2006). “Object-Oriented Computation of Sandwich Estimators.” Journal of Statistical Software, 16(9), 1-16. doi: 10.18637/jss.v016.i09 (URL: https://doi.org/10.18637/jss.v016.i09).↩︎