Informações Gerais
Última atualização: 18/09/2021
Licença
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:
Você tem o direito de copiar e redistribuir o material em qualquer suporte ou formato;
Você tem o direito de remixar, transformar e criar a partir deste material;
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;
Você não poderá utilizar o material para fins comerciais;
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.
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.
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:
omissão de variáveis
problemas de especificação
erros de medida da variável dependente
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.
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.
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.
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.
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.
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.
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).
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.
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).
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.
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.
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:
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;
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,
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:
- 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\);
Aumenta erro-padrão;
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,
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.
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.
<- seq(-4, 4, length=100)
x <- dnorm(x)
hx <- c(1, 3, 8, 30)
degf <- c("red", "blue", "darkgreen", "gold", "black")
colors <- c("df=1", "df=3", "df=8", "df=30", "normal")
labels 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",
lwd=2, lty=c(1, 1, 1, 1, 2), col=colors) labels,
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
<-structure(list(y = c(70, 65, 90, 95, 110, 115, 120, 140, 155, 150),
dadosx = 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()
<-lm(y~x,data=dados)
reg1# 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
$AIC <- AIC(reg1)
reg1$BIC <- BIC(reg1)
reg1suppressMessages(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
<-as.matrix.data.frame(cbind(1,dados[,2]))
Xprint(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:
<-as.matrix(dados[,1])
y1print(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')
<-(t(X))
trX# 2) Produto da transposta de X por X,
# com o codigo %*%: (X'X)
<-trX %*% X
X_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)
<-(ginv(X_X))
invX_X# (X'X)-1 invX_X
## [,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:
<-trX %*% y1
Xy# X'y Xy
## [,1]
## [1,] 1110
## [2,] 205500
#Para calcular o vetor beta:
<-invX_X %*% Xy # beta = (X'X)-1 X'y
beta 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
<-t(y)%*%y
yly<-t(beta)%*%Xy
blXy<-yly - blXy
ulu# Soma dos Quadrados dos Residuos ulu
## [,1]
## [1,] 337.2727
<-y-X%*%(beta)
uhat# residuos estimados uhat
## [,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
<-nrow(dados) # numero de observacoes
n<-ncol(X) # numero de parametros a estimar
k<-as.numeric(ulu/(n-k))
sigsqhat# s2 - variancia estimada do residuo sigsqhat
## [1] 42.15909
# variancia-covariancia de beta
<-sigsqhat*invX_X
varcovbeta 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
<-sqrt(diag(varcovbeta))
sebeta sebeta
## [1] 6.41381730 0.03574281
# parametros beta
beta
## [,1]
## [1,] 24.4545455
## [2,] 0.5090909
# estatistica t dos parametros
<-beta/sebeta
tbeta tbeta
## [,1]
## [1,] 3.812791
## [2,] 14.243171
#obtendo a probabilidade de tbeta para 5% e df=n-k
<-2*pt(-abs(tbeta),n-k)
pvalue# probabilidade de t dos parametros pvalue
## [,1]
## [1,] 5.142172e-03
## [2,] 5.752746e-07
- obtendo \(R^2\) e \(R^2 ajustado\)
# soma dos quadrados totais
<- yly-n*mean(y1)^2
sqtot sqtot
## [,1]
## [1,] 8890
# soma dos quadrados dos residuos
<- ulu
sqres sqres
## [,1]
## [1,] 337.2727
# soma dos quadrados da regressao
<- sqtot-sqres
sqreg sqreg
## [,1]
## [1,] 8552.727
# coeficiente de determinação R2
<-sqreg/sqtot
r2 r2
## [,1]
## [1,] 0.9620616
# coeficiente de determinação ajustado R2-ajustado
<-1-(sqres/(n-k))/(sqtot/(n-1))
r2aj r2aj
## [,1]
## [1,] 0.9573193
- coeficiente F de significação
<-(sqreg/(k-1))/(sqres/(n-k))
F F
## [,1]
## [1,] 202.8679
# probabilidade de F para H0: betas iguais a zero
<-1-pf(F,k-1,n-k)
probF 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á:
Estima-se \(Y = X\beta + \varepsilon\); nesta regressão inicial, será obtido o \(R_{velho}^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]\);
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\);
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;
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.
- 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)
<- read_excel("soja_apostila.xlsx",
dados 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
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
regressao1summary(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
$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
regressao1#mostrando os valores de AIC e SIC
suppressMessages(library(stargazer))
Quadro 4.1. Resultados da regressão original de Qsoja, usando R.
.1 <- stargazer(regressao1,
startitle="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\)):
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO+I(fitted(regressao1)^2)+
reg_RESET_3I(fitted(regressao1)^3)+I(fitted(regressao1)^4),data=dados)
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO+
reg_RESETI(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.
<-stargazer(list(regressao1,reg_RESET_3),
resultscolumn.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).
<- ((0.532456 - 0.46511)/3)/((1 - 0.532456)/(117-7))
F F
## [1] 5.281542
# probabilidade de F para H0: betas iguais a zero
<-1-pf(F,3,117-7)
probF 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))
<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)",
RESETH0"I(fitted(regressao1)^4)")
<-linearHypothesis(reg_RESET_3,RESETH0)
Tabela_RESET# 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.
<-stargazer(list(regressao1,reg_RESET),
resultstype="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))
<-c("I(fitted(regressao1)^2)","I(fitted(regressao1)^3)")
RESETH0<-linearHypothesis(reg_RESET,RESETH0)
Tabela_RESET# 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
<-resettest(regressao1, power = 2:3)
TesteRESET TesteRESET
##
## RESET test
##
## data: regressao1
## RESET = 5.0746, df1 = 2, df2 = 111, p-value = 0.007783
#alterando as potencias
<-resettest(regressao1, power = 2:4)
TesteRESET.power 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:
- \[ ln{Y_t} = \alpha _1 + \alpha_2 X_{2t} + \alpha _3 X_{3t} + u_t \]
- \[ ln{Y_t} = \gamma _1 + \gamma _2 X_{2t} + \gamma _3 X_{3t} + \gamma _4 X_{4t} + u_t \]
- \[ ln{Y_t} = \lambda _1 + \lambda _2 X_{2t} + \lambda _3 X_{3t} + \lambda _4 X_{5t} + u_t \]
- \[ ln{Y_t} = \theta _1 + \theta _2 X_{2t} + \theta _3 X_{3t} + \theta _4 X_{4t} + \theta _5 X_{5t} + u_t \]
- \[ 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))
<- read_excel("gujarati 5ed p236 frangos tabela7_9.xlsx",
frangos 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:
<-lm(log(Y)~log(X2)+log(X3),data = frangos)
EQ1<-lm(log(Y)~log(X2)+log(X3)+log(X4),data = frangos)
EQ2<-lm(log(Y)~log(X2)+log(X3)+ log(X5),
EQ3data = frangos)
<-lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
EQ4data = frangos)
<-lm(log(Y)~log(X2)+log(X3)+ +log(X6),
EQ5data = frangos)
As equações são como a seguir:
log(Y)~log(X2)+log(X3);
log(Y)~log(X2)+log(X3)+log(X4)
log(Y)~log(X2)+log(X3) +log(X5))
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)
<-stargazer(EQ1,EQ4,
resultadostype="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
<- lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
res.ur data = frangos)
#modelo restrito para X4 e X5 serem nulos, equivalente ao EQ1
# Regressão OLS restrita
<- lm(log(Y)~log(X2)+log(X3),data = frangos)
res.r
# extração dos R2 de cada expressão:
<- summary(res.ur)$r.squared ) ( r2.ur
## [1] 0.9823133
<- summary(res.r)$r.squared ) ( r2.r
## [1] 0.9800744
# Cálculo da estatística F para (n-k-1) no numerador
# e q restrições no denominador:
<- (r2.ur-r2.r) / (1-r2.ur) * (23-4-1)/2 ) ( F
## [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).
<- lm(log(Y)~log(X2)+log(X3)+log(X4)+log(X5),
res.urdata = frangos)
# Load package "car" (deve estar instalado em seu micro)
suppressMessages(library(car))
# F test:
<- c("log(X4)","log(X5)")
myH0 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
.
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
regressao1summary(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
$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
regressao1$AIC regressao1
## [1] 1209.807
$BIC regressao1
## [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
<-lm(log(Y)~log(X2)+log(X3),data = frangos)
EQloglog<-lm(Y~log(X2)+log(X3),data = frangos)
EQlinlog<-lm(log(Y)~X2+X3,data = frangos)
EQloglin<-lm(log(Y)~log(X2)+log(X3)+I(log(X2)*log(X3))
EQtranslog+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
<-EQloglog
mod1<-EQlinlog
mod2<-EQloglin
mod3<-EQtranslog
mod4<-rbind(AIC(mod1),AIC(mod2),AIC(mod3),AIC(mod4))
AIC<-rbind(BIC(mod1),BIC(mod2),BIC(mod3),BIC(mod4))
BIC<-rbind(summary(mod1)$r.squared,
r2summary(mod2)$r.squared,
summary(mod3)$r.squared,
summary(mod4)$r.squared)
<-rbind(summary(mod1)$adj.r.squared,
r2.adjsummary(mod2)$adj.r.squared,
summary(mod3)$adj.r.squared,
summary(mod4)$adj.r.squared)
<-data.frame(cbind(r2,r2.adj,AIC,BIC))
tab2row.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.
$AIC <- AIC(mod1) # incluir AIC no objeto da regressao
mod1$BIC <- BIC(mod1) # incluir BIC no objeto da regressao
mod1$AIC <- AIC(mod4) # incluir AIC no objeto da regressao
mod4$BIC <- BIC(mod4) # incluir BIC no objeto da regressao
mod4<-stargazer(mod1,mod4,type="text",style=("all"),
resultadoskeep.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:
<-structure(list(ano = c(1990, 1991, 1992, 1993, 1994, 1995, 1996,
dados1997, 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")
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)
<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja))
reg.empilhadasummary(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
$AIC<- AIC(reg.empilhada)
reg.empilhada$BIC<- BIC(reg.empilhada)
reg.empilhada
<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+DMS+DMT,
reg.dintdata=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
$AIC<- AIC(reg.dint)
reg.dint$BIC<- BIC(reg.dint)
reg.dint
::stargazer(list(reg.empilhada,reg.dint),
stargazertitle="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)
<-dummy(estado, drop=FALSE)
dummiescolnames(dummies)<-c("estadogo", "estadoms","estadomt")
<-cbind(dados,dummies)
dados# o pacote cria dummies usando o nome da variável
# justaposto com o codigo das observacoes:
# estadogo, estadoms,estadomt
#print(dados)
<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+
reg.dum+I(log(Aalg)*DMS)+I(log(Aalg)*DMT),
estadodata=dados)
$AIC<- AIC(reg.dum)
reg.dum$BIC<- BIC(reg.dum)
reg.dum#summary(reg.dum)
<-lm(log(Qalg)~log(Aalg)+log(Palg)+log(Psoja)+
reg.dum2+DMT+I(log(Aalg)*DMS)+I(log(Aalg)*DMT),
DMSdata=dados)
$AIC<- AIC(reg.dum2)
reg.dum2$BIC<- BIC(reg.dum2)
reg.dum2::stargazer(list(reg.dum,reg.dum2),
stargazertitle="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
<-dados[23:33,2]
vmt vmt
## [1] 57634 73458 67862 85641 91828 87458 73553 78376 271038
## [10] 630406 1002836
<-dados[23:33,1] # anos 1990 a 2000
t<-log(vmt)
logv=lm(logv~t)
eqsummary(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
<- summary(eq)$coefficients[2]
beta # Calculo da TGC
=I((exp(beta)-1)*100)
TGC 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:
<-structure(
tgc.dadoslist(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)
<-log(v)
logv<- lm(logv~t2)
eqsummary(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
<- summary(eq)$coefficients[2]
beta 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
<-plot(PADUB~VP) dispersao
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:
<-boxplot(VP, names=c("VP")) bp1_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.
<-boxplot(PCALC,PADUB,
bp2_proportionshorizontal = TRUE,
PAGROT,PNIVEL,PPRAGA,PROT,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:
<-lm(log(VP)~log(AREA)+log(QMO)+log(PPRAGA)+log(PROT))
regressao1$AIC <- AIC(regressao1)
regressao1$BIC <- BIC(regressao1)
regressao1suppressMessages(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)
<-plot(regressao1, which = 1)
reg1.plot1
screen(2)
<-plot(regressao1, which = 2)
reg1.plot2
screen(3)
<-plot(regressao1, which = 3)
reg1.plot3
screen(4)
<-plot(regressao1, which = 4) reg1.plot4
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
<-dados[dados$D51_54==0, ]
dados2attach(dados2)
#View(dados2)
<-lm(log(VP)~log(AREA)+log(QMO)+
regressao2log(PPRAGA)+log(PROT),data=dados2)
<-stargazer::stargazer(
resultslist(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
::outlierTest(regressao2) car
## No Studentized residuals with Bonferroni p < 0.05
## Largest |rstudent|:
## rstudent unadjusted p-value Bonferroni p
## 8 -2.375175 0.021338 NA
<-resid(regressao2)
u.hat2t.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(u.hat2, freq = FALSE)
hist.reg2curve(dnorm, add = TRUE,col="red")
split.screen(c(2,2))
## [1] 1 2 3 4
screen(1)
<-plot(regressao2, which = 1)
reg2.plot1
screen(2)
<-plot(regressao2, which = 2)
reg2.plot2
screen(3)
<-plot(regressao2, which = 3)
reg2.plot3
screen(4)
<-plot(regressao2, which = 4) reg2.plot4
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.
<-lm(log(VP)~log(AREA)+log(QMO)+
mod51_54log(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
$AIC <- AIC(mod51_54)
mod51_54$BIC <- BIC(mod51_54)
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
<-lm(log(VP)~log(AREA)+log(QMO)+log(PPRAGA)+
mod51_54incllog(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
$AIC <- AIC(mod51_54incl)
mod51_54incl$BIC <- BIC(mod51_54incl)
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
<-resid(regressao1)
u.hat 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:
<-plot(regressao1, which = 1) reg1.plot1
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
<-resid(regressao1)
u.hat_reg1t.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)
<-plot(regressao1, which = 2)
reg1.plot2screen(2)
::qqPlot(regressao1) car
## [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)
<-jarque.bera.test(u.hat)
JB.reg1 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
<-dados[dados$D51_54==0, ]
dados2attach(dados2)
#View(dados2)
<-lm(log(VP)~log(AREA)+log(QMO)+
regressao2log(PPRAGA)+log(PROT),data=dados2)
<-resid(regressao2)
u.hat_reg2library(moments)
<-jarque.test(u.hat)) (JB_reg1
##
## Jarque-Bera Normality Test
##
## data: u.hat
## JB = 1224.2, p-value < 2.2e-16
## alternative hypothesis: greater
<-jarque.test(u.hat_reg2)) # sem observacoes 51 e 54 (JB_reg2
##
## 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)
<- resid(regressao1)
u.hat # Testes para a regressao 1
.1 <- ks.test(u.hat,"pnorm",mean(u.hat),summary(regressao1)$sigma)# KS
t1.1 <- lillie.test(u.hat) # Lilliefors
t2.1 <- cvm.test(u.hat) # Cramér-von Mises
t3.1 <- shapiro.test(u.hat) # Shapiro-Wilk
t4.1 <- sf.test(u.hat) # Shapiro-Francia
t5.1 <- ad.test(u.hat) # Anderson-Darling t6
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
<- c(t1.1$method, t2.1$method, t3.1$method,
testes .1$method, t5.1$method,t6.1$method)
t4<- as.numeric(c(t1.1$statistic, t2.1$statistic, t3.1$statistic,
estt .1$statistic, t5.1$statistic, t6.1$statistic))
t4<- c(t1.1$p.value, t2.1$p.value, t3.1$p.value,
valorp .1$p.value, t5.1$p.value,t6.1$p.value)
t4<- cbind(estt, valorp)
resultados rownames(resultados) <- testes
colnames(resultados) <- c("Estatística", "prob.")
::kable(resultados, digits = 3) knitr
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:
- Estimar o modelo inicial: \(Y=X\beta + \varepsilon\); a rigor, o teste prevê uma regressão simples, para cada \(X_i\) como único regressor;
- Com os resíduos \(e_i\) do passo 1, estimar as regressões auxiliares:
- \(|e_i| = \alpha_0 + \alpha_1X_i\);
- \(|e_i| = \alpha_0 + \alpha_1X_i^2\);
- \(|e_i| = \alpha_0 + \alpha_1(1/X_i)\);
- \(|e_i| = \alpha_0 + \alpha_1 \sqrt{(X_i)}\);
- \(|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:
Estima-se a regressão inicial e obtêm-se os resíduos \(e_i\);
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.
- 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)
<- read_excel("soja_apostila.xlsx",
dados 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
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
regressao1<- regressao1
m <- dados
data #rotina do teste com base em m e data
<- m$residuals^2
u2 #sem termos cruzados, no cross-terms
<- lm(u2 ~ FERTILIZANTE+TRATOR+MO+
reg.auxiliar 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.
<- summary(reg.auxiliar)$r.squared
Ru2<- nrow(data)*Ru2
LM #obtendo o numero de regressores menos o intercepto
<- length(coefficients(reg.auxiliar))-1
k # O Teste tem k termos regressores em 'reg.auxiliar'
<- 1-pchisq(LM, k)
p.value #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á:
<- lm(u2 ~ FERTILIZANTE+I(FERTILIZANTE*FERTILIZANTE)+
reg.auxiliar2 I(FERTILIZANTE*TRATOR)+I(FERTILIZANTE*MO)+
+I(TRATOR*TRATOR)+I(TRATOR*MO)+
TRATOR+I(MO*MO)+I(FERTILIZANTE*TRATOR*MO))
MOsummary(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:
<- summary(reg.auxiliar2)$r.squared
Ru2<- nrow(data)*Ru2
LM #obtendo o numero de regressores menos o intercepto
<- length(coefficients(reg.auxiliar2))-1
k k
## [1] 10
<- 1-pchisq(LM, k)
p.value 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)+
+I(TRATOR*TRATOR)+I(TRATOR*MO)+
TRATOR+I(MO*MO)+I(FERTILIZANTE*TRATOR*MO)) 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"))
<-car::hccm(regressao1,type=c("hc1"))
vcov.whitecoeftest(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
<- lm_robust(QSOJA~FERTILIZANTE+TRATOR+MO,
reg.robust 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)
<- lm_robust(QSOJA~FERTILIZANTE+TRATOR+MO,
model 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
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
regressao1::stargazer(regressao1,
stargazerse = 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).
<- structure(list(obs = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
dados 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
::kable(dados) knitr
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)
<- lm(PD ~ VENDAS)
regressao1 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
<- regressao1$residuals
uhat 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
<- uhat^2
uhat2 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
<- abs(uhat)
uhat.abs 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:
<- lm(uhat.abs ~ VENDAS)
reg.glejser 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:
<- regressao1
m <- dados
data # rotina do teste com base em m e data
<- m$residuals^2
u2 <- lm(u2 ~ VENDAS + I(VENDAS^2)) #Com termos cruzados, cross-terms
reg.auxiliar 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
<- summary(reg.auxiliar)$r.squared
Ru2 <- nrow(data) * Ru2
LM # obtendo o numero de regressores menos o intercepto
<- length(coefficients(reg.auxiliar)) - 1
k <- 1 - pchisq(LM, k) # O TESTE TEM k TERMOS REGRESSORES EM reg.auxiliar
p.value # c('LM','p.value')
<- list(LM,p.value)
out 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'))
<- car::hccm(regressao1, type = c("hc1"))
vcov.white0 #
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:
<- lm(PD~VENDAS)
regressao1<- car::hccm(regressao1, type = c("hc1"))
cov <- sqrt(diag(cov))
robust.se
::stargazer(regressao1, regressao1,
stargazerse=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:
Estima por \(MQO\) e obtém resíduos;
Obtém a variância dos resíduos (\(Var(û)\));
Constrói variáveis \(p = û²/Var(û)\);
Faz regressão auxiliar de p contra variáveis \(Z\), em que podem ser alguns ou todos os X como parte de \(Z\);
Obtém a soma dos quadrados da regressão, faz a divisão pela metade e compara com distribuição qui-quadrado (\(\chi^2\));
Se a probabilidade de \(LM = SQReg/(2 \hat \sigma^4 )\) < 0.10, (10%), rejeita-se H0 e existirá heterocedasticidade;
H0: não tem heterocedasticidade dos resíduos.
- 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)
oulibrary(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.
<-lm(QSOJA~FERTILIZANTE+TRATOR+MO)
regressao1library(AER)
## teste de Breusch-Pagan - bptest simples
<-bptest(regressao1, studentize = TRUE)
bp.het 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):
::bptest(regressao1, studentize = FALSE) lmtest
##
## Breusch-Pagan test
##
## data: regressao1
## BP = 15.652, df = 3, p-value = 0.001336
::bptest(regressao1) lmtest
##
## 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:
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")
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 |
<-ts(dados, start=c(1970), end=c(1983))
dados.st<-ts(PNB,start=c(1970), end=c(1983),frequency = 1)
PNB.ts<-lm(PNB~M1+M2+M3+L, data=dados.st)
regressao1summary(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.
::dwtest(regressao1) lmtest
##
## 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á:
- estimar o modelo de regressão (“a”) pelo método usual de MQO e obter resíduos \(\varepsilon_t\);
- 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”;
- obter o valor de \(R^2\) desta regressão “b” (\(R^2_0\));
- 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)
<-bgtest(regressao1, order = 1, type = c("Chisq"), data = dados.st)
bgteste1<-bgtest(regressao1, order = 2, type = c("Chisq"), data = dados.st)
bgteste2<-bgtest(regressao1, order = 3, type = c("Chisq"), data = dados.st)
bgteste3<-bgtest(regressao1, order = 4, type = c("Chisq"), data = dados.st)
bgteste4<-bgtest(regressao1, order = 5, type = c("Chisq"), data = dados.st)
bgteste5<-bgtest(regressao1, order = 6, type = c("Chisq"), data = dados.st)
bgteste6 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
= 1:6 # definindo até a máxima ordem do bgtest
bgorder =NULL
dfor (p in bgorder) {
<-bgtest(regressao1,
bgtest.chiorder = p,type=c("Chisq"), data = dados.st)
print(bgtest.chi)
= rbind(d,
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.
<-residuals(regressao1)
u.hatlibrary(dynlm)
<-dynlm(u.hat~lag(u.hat,1), data=dados.st)
reg.auxsummary(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.
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')
=barium
dadosattach(dados)
<- ts(dados, start=c(1978,2), frequency=12)
tsdata <- dynlm(log(chnimp)~log(chempi)+log(gas)+log(rtwex)+
mod1 +affile6+afdec6,
befile6data=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)
$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)
mod1.1 <- stargazer(mod1,
startitle="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
<-nrow(dados)
n#obtendo o numero de regressores menos o intercepto
<- length(coefficients(mod1))-1
k 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:
<- resid(mod1)
residual <- dynlm(residual ~
resreg L(residual)+L(residual,2)+L(residual,3)+
log(chempi)+log(gas)+log(rtwex)+befile6+
+afdec6, data=tsdata )
affile6summary(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
:
<-bgtest(mod1,
bgtest3.chiorder = 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
<-bgtest(mod1,
bgtest3.Forder = 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.).
<-
t1210structure(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"))
::kable(t1210) knitr
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).
<-lm((RR)~(Growth)+(Inflation),data=t1210)
mod2summary(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 é:
::dwtest(mod2) lmtest
##
## 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.
::bgtest(mod2,order=4,type = c("Chisq")) lmtest
##
## 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.).
<-
t127structure(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"))
::kable(t127) knitr
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).
<-lm(log(C)~log(I)+log(L)+log(H)+log(A),data=t127)
mod3summary(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.
::dwtest(mod3) lmtest
##
## Durbin-Watson test
##
## data: mod3
## DW = 0.95494, p-value = 6.388e-05
## alternative hypothesis: true autocorrelation is greater than 0
::bgtest(mod3,order=4,type = c("Chisq")) lmtest
##
## 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
= 1:4 # definindo até a máxima ordem do bgtest
bgorder =NULL
dfor (p in bgorder) {
<-bgtest(mod3,
bgtest.chiorder = p,type=c("Chisq"), data = t127)
print(bgtest.chi)
= rbind(d,
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:
<- resid(mod3)
residual <- dynlm(residual ~
resreg 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:
- Estima-se modelo inicial por MQO e obtém \(DW\);
- Calcula-se \(\rho = 1 – 0,5.DW\);
- 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')
=barium
dadosattach(dados)
<- ts(dados, start=c(1978,2), frequency=12)
tsdata # estimação de MQO
<- dynlm(log(chnimp)~log(chempi)+log(gas)+log(rtwex)+
mod1 +affile6+afdec6,
befile6data=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)
<- prais_winsten(log(chnimp)~log(chempi)+log(gas)+
barium_prais_winsten 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:
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);
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;
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;
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 \]
- 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\)).
- 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 \]
- 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)
(#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()
.
<- structure(list(year = c(1968, 1969, 1970, 1971, 1972, 1973,
dados 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")
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.
<- ts(dados, start=c(1968), frequency=1)
tsdata # regressao multipla de y~index+g+interest+p
<- lm(y~index+g+interest+p, data=tsdata ) mod1
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)
$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)
mod1
library(stargazer)
.1 <- stargazer(mod1,
startitle="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:
<-cor(dados)
correlacao 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
<- cor(dados)
corel 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
<- c("p")
myH0 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)
<-vif(mod1)
reg1.vif 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
:
<- lm(index~g+interest+p, data=tsdata )
reg1.index 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
:
<- lm(g~index+interest+p, data=tsdata )
reg1.g 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
:
<- lm(interest~index+g+p, data=tsdata )
reg1.interest 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
:
<- lm(p~index+g+interest, data=tsdata )
reg1.p 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:
=summary(mod1)$'r.squared'
reg1.r2=summary(reg1.g)$'r.squared'
reg1.g.r2=summary(reg1.index)$'r.squared'
reg1.index.r2=summary(reg1.interest)$'r.squared'
reg1.interest.r2=summary(reg1.p)$'r.squared'
reg1.p.r2::kable(col.names = c("R²"),
knitrrbind(reg1.r2,reg1.g.r2,reg1.index.r2,reg1.interest.r2,reg1.p.r2))
R² | |
---|---|
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.
<- lm(y~g+interest+p, data=tsdata )
reg2 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
<-vif(reg2)
reg2.vif 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).
(#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
<-structure(list(obs = c(1947, 1948, 1949, 1950, 1951, 1952,
dados1953,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.
<-longley
dados<- ts(dados, start=c(1947), frequency=1)
tsdata = lm(Employed~GNP.deflator + GNP + Unemployed
reg1 +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
$AIC <- AIC(reg1)
reg1$BIC <- BIC(reg1) reg1
Outra opção é estimar pela função dynlm
do pacote de igual nome:
library(dynlm)
<- dynlm(Employed~GNP.deflator + GNP + Unemployed
mod1 +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)
$AIC <- AIC(mod1)
mod1$BIC <- BIC(mod1)
mod1
library(stargazer)
.1 <- stargazer(mod1,reg1,
startitle="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)
<- cor(tsdata[,-7])
corel 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
<-vif(mod1)
reg1.vif::kable(reg1.vif,col.names = "VIF") knitr
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
<- lm(GNP.deflator ~ GNP + Unemployed
reg1.GNPdef +Armed.Forces + Population+Year, data=tsdata )
=summary(reg1.GNPdef)$'r.squared'
GNPdef.r2<- lm(GNP~GNP.deflator + Unemployed
reg1.GNP +Armed.Forces + Population+Year, data=tsdata )
=summary(reg1.GNP)$'r.squared'
GNP.r2<- lm(Unemployed~GNP+GNP.deflator +
reg1.unemp +Armed.Forces + Population+Year, data=tsdata )
=summary(reg1.unemp)$'r.squared'
unemp.r2<- lm(Armed.Forces~Unemployed+GNP+GNP.deflator +
reg1.armed + Population+Year, data=tsdata )
=summary(reg1.armed)$'r.squared'
armed.r2<- lm(Population~Armed.Forces+Unemployed+GNP+GNP.deflator +
reg1.pop + Year, data=tsdata )
=summary(reg1.pop)$'r.squared'
pop.r2<- lm(Year~Population+Armed.Forces+Unemployed+
reg1.year + GNP+GNP.deflator, data=tsdata )
=summary(reg1.year)$'r.squared'
year.r2::kable(col.names = c("R²"),
knitrrbind(GNPdef.r2,GNP.r2,unemp.r2,armed.r2,pop.r2,year.r2))
R² | |
---|---|
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.
<-lm(Employed~I(GNP/GNP.deflator)+Armed.Forces
reg2+ 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.
=I(GNP/GNP.deflator)
z<-lm(Employed~z+Armed.Forces
reg3+ 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
<-vif(reg3)
reg3.vif::kable(reg3.vif,col.names = "VIF") knitr
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.
<- lm(Armed.Forces~z + Population, data=tsdata )
reg3.armed =summary(reg3.armed)$'r.squared'
armed.r2c<- lm(Population~Armed.Forces+z, data=tsdata )
reg3.pop =summary(reg3.pop)$'r.squared'
pop.r2c<- lm(z~Population+Armed.Forces, data=tsdata )
reg3.z =summary(reg3.z)$'r.squared'
z.r2c::kable(col.names = c("R²"),
knitrrbind(armed.r2c,pop.r2c,z.r2c))
R² | |
---|---|
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.
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")
<-CollegeDistance
cd.d.1s<- lm(education ~
simple.ed+ gender + ethnicity + unemp + distance,
urban data=cd.d)
$ed.pred<- predict(simple.ed.1s)
cd.d.2s<- lm(wage ~
simple.ed+ gender + ethnicity + unemp + ed.pred ,
urban 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
.
<- ivreg(wage ~
m + gender + ethnicity + unemp + education |
urban + gender + ethnicity + unemp + distance,
urban 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():
<- sem::tsls(wage ~
m2 + gender + ethnicity + unemp + education,
urban ~ 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)
<-ts(I(tabela5938$Valor/1e+6),start = c(2002),frequency = 1)
pib_cg<- seq(as.Date(paste(c(start(pib_cg), 1), collapse = "/")),
datas by = "year",length.out = length(pib_cg))
<- data.frame(ano = datas, valor = pib_cg)
pibcg.df <- ggplot(pibcg.df) + geom_line(aes(ano, valor)) +
p 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.")
+ ggthemes::theme_stata() p
(#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
<- readRDS("BVSP.rds")
ts2 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")
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)))
= get_sidra(api='/t/5938/n6/5000708,5001102,5003207,
tabela5938all 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.")
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 ::slice(1:200L)
dplyr::kable(Grunfeld, caption = "Dados do exemplo Grunfeld") knitr
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).
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
<- readRDS("LAME4.rds")
LAME4.SA <- readRDS("LREN3.rds")
LREN3.SA <- readRDS("PETR4.rds") PETR4.SA
<- PETR4.SA$PETR4.SA.Adjusted
PETR4.SA.A # mudarei os zeros por NA, depois uso locf para tirar os NA
<-is.na(PETR4.SA.A) <- PETR4.SA.A == 0
PETR4_clean<-na.locf(PETR4.SA.A,fromLast = FALSE,coredata = NULL)
PETR4_cleanmax(PETR4_clean)
## [1] 42.20507
min(PETR4_clean)
## [1] 3.896428
<- LAME4.SA$LAME4.SA.Adjusted
LAME4.SA.A # mudarei os zeros por NA, depois uso locf para tirar os NA
<-is.na(LAME4.SA.A) <- LAME4.SA.A == 0
LAME4_clean<-na.locf(LAME4.SA.A,fromLast = FALSE,coredata = NULL)
LAME4_cleanmax(LAME4_clean)
## [1] 10491.03
min(LAME4_clean)
## [1] 2.107383
<- LREN3.SA$LREN3.SA.Adjusted
LREN3.SA.A # mudarei os zeros por NA, depois uso locf para tirar os NA
<-is.na(LREN3.SA.A) <- LREN3.SA.A == 0
LREN3_clean<-na.locf(LREN3.SA.A,fromLast = FALSE,coredata = NULL)
LREN3_cleanmax(LREN3_clean)
## [1] 60.07819
min(LREN3_clean)
## [1] 0.757578
# Calcular o retorno MENSAL
<- monthlyReturn(PETR4_clean,type = "log")
r_PETR4 <- monthlyReturn(LAME4_clean,type = "log")
r_LAME4 <- monthlyReturn(LREN3_clean,type = "log")
r_LREN3
# UNIFORMIZAR janela temporal para após 2010-01-01
<- window(r_PETR4, start = "2010-01-01")
r_PETR4_pos2010 <- window(r_LAME4, start = "2010-01-01")
r_LAME4_pos2010 <- window(r_LREN3, start = "2010-01-01")
r_LREN3_pos2010 <-
dados_basicoscbind.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)
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\).
(#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)
= rnorm(250)
e = cumsum(e)
y.rw 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)
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.
(#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)))
<- 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,
bacen106.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
<-diff(bacen,1)
dpib<-diff(bacen,2)
dpib2plot(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)
= rnorm(250)
y 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)
= rnorm(250)
e = 0.2*seq(1,250) + e
y.dt 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
<- ts(fertil3[1:10,1:3], start=1913) fertil3.ts
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
<-lag(fertil3.ts[,2], -1)
pe1<-lag(fertil3.ts[,2], -2)
pe2<-cbind(fertil3.ts,pe1,pe2)
tabela::kable(tabela,caption="Dados do objeto fertil3.ts") knitr
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)
<- ts(fertil3[,1:11], start=1913)
fertil3.ts ::autoplot(fertil3.ts[,1],
forecastmain = "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)
<- dynlm(gfr ~ pe+L(pe)+L(pe,2)+ww2+pill, data=fertil3.ts)
reg1 $AIC <- AIC(reg1) # Akaike
reg1$BIC <- BIC(reg1) # Schwarz
reg1stargazer(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)
::linearHypothesis(reg1, matchCoefs(reg1,"pe")) car
## 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)
<-c("L(pe)","L(pe, 2)")
myH0::linearHypothesis(reg1, myH0) car
## 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
<-coef(reg1)
b=b["pe"]+b["L(pe)"]+b["L(pe, 2)"]
PLPprint(PLP)
## pe
## 0.1007
<-"pe+L(pe)+L(pe, 2)"
myH0plp::linearHypothesis(reg1, myH0plp) car
## 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)
<- dynlm(gfr ~ pe + I(L(pe)-pe) + I(L(pe,2)-pe) +
reg2 +pill, data=fertil3.ts)
ww2summary(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)
<-
dadosstructure(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)
<- matrix(consumo)
dados2<- ts(dados2,start=c(1984,1), frequency = 12) dados.ts
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)
<- seq(as.Date(paste(c(start(dados.ts),1), collapse="/")),
datas by = "month", length.out = length(consumo))
<- data.frame(date = datas, value = consumo)
dados.df # 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)") +
::theme_stata() ggthemes
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.
É 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
.
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.↩︎
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).↩︎