Tag

regressão linear Archives - Análise Macro

Introdução à Econometria

By | Data Science

Neste post mostraremos como construir modelos de regressão linear de maneira aplicada. Se você já se perguntou em como replicar no R aqueles modelos introdutórios, comuns em disciplinas de estatística e econometria, este post é pra você!

Dessa forma, usaremos a econometria - que é um conjunto de métodos estatísticos utilizados para estimar relações econômicas, testar teorias e avaliar políticas públicas ou de negócios - para explorar um problema aplicado ao mercado de trabalho. Nada melhor do que entender como utilizar algo com um exemplo prático, certo?

Portanto, assumimos que você já possui algum conhecimento teórico sobre modelos de regressão linear, pois daremos ênfase no aspecto prático de como implementar este tipo de modelo usando o R. Você pode conferir o curso de Introdução à Econometria (em R e Python) para explorar mais a fundo os pormenores dos modelos, assim como tópicos mais avançados que fogem do escopo deste post. É uma ótima oportunidade se você acha o assunto "assustador", pois o curso traz exemplos intuitivos e práticos do dia a dia.

Ademais, nossa referência base sobre o assunto é o livro-texto do Wooldridge (2020), que é muito utilizado em disciplinas de econometria de cursos de graduação.

Pacotes

Para reproduzir os códigos deste exercício, você precisará dos seguintes pacotes de R:

O problema e os dados

Para começar a entender o assunto, e exemplificar a estimação de um modelo linear, vamos recorrer a um conjunto de dados clássico do Wooldridge, que traz informações de uma pesquisa populacional. Mais especificamente, iremos investigar um problema de economia do mercado de trabalho: suponha que você seja contratado para determinar o efeito de um programa de aperfeiçoamento profissional na produtividade de trabalhadores. Sem se aprofundar muito na teoria econômica e especializada da área, podemos dizer que fatores como escolaridade, experiência profissional e treinamentos podem afetar a produtividade do trabalhador e, portanto, seus salários. Com esse simples entendimento em mente, podemos então definir um modelo econômico como:

onde é o salário por hora, são os anos de educação formal, são os anos de experiência no mercado de trabalho e é o tempo despendido em aperfeiçoamento profissional. Outros fatores podem afetar , mas este modelo simples capta a essência do problema em questão.

Essa formulação básica que elaboramos carrega a hipótese de que esses fatores especificados estão, de alguma forma, relacionados com o dos trabalhadores. O que precisamos fazer agora é investigar esse "modelinho" de forma empírica.

Dado que estes fatores e variáveis podem ser observados - e se não fossem teríamos que levar isso em consideração -, o próximo passo é transformarmos esta especificação de modelo econômico para um modelo econométrico, como:

onde as constantes , , ..., são parâmetros do modelo que descrevem as direções (sinal) e as magnitudes (tamanho) da relação entre e as demais variáveis utilizadas para explicar no modelo; e o termo de erro contém fatores como "habilidade inata", qualidade da educação, histórico familiar e outros que podem influenciar o salário de um trabalhador, ou seja, o erro é comumente chamado de "medida do nosso desconhecimento". Se estivermos especialmente interessados no efeito do programa de aperfeiçoamento profissional, então  é o parâmetro de interesse.

Para uma análise empírica deste modelo precisamos de dados, portanto, após essa breve introdução vamos partir para a prática! No R, o conjunto de dados para usarmos nesse modelo vem do pacote {wooldridge} e pode ser carregado conforme abaixo:

Exploração dos dados

Os dados são do tipo cross-section e contém variáveis de 526 indivíduos referente ao ano de 1976. Deste conjunto de dados, usaremos apenas as variáveis wage (salário por hora), educ (anos de educação) e exper (anos de experiência). Para facilitar o entendimento, utilizaremos a transformação logarítmica na variável dependente (wage), de forma a obter uma interpretação percentual dos parâmetros do modelo.

No R, com um simples comando também é possível obter uma tabela de estatísticas descritivas das variáveis:

Com o pacote ggplot2 podemos facilmente visualizar, em um gráfico de dispersão, a relação entre as variáveis do modelo:

Estimar o modelo

Conforme dito, iremos estimar o modelo econométrico acima mas com algumas modificações: sem o fator e com transformação logarítmica na variável . Com estes ajustes, comuns em exercícios empíricos, chegamos a uma especificação como esta:

Ou seja, queremos saber a relação entre a escolaridade e experiência profissional dos trabalhares sobre os seus salários (em log). Dessa forma, devemos agora estimar os coeficientes que medem esses efeitos.

No R, estimamos este modelo de regressão com a função lm() especificando os termos por uma fórmula e o objeto com os dados:

Resultados do modelo

Para obter os resultados do modelo estimado use a função summary(), que é uma função genérica para obter resultados de diversas famílias de modelos:

A interpretação dos resultados deste modelo deve ser feita ceteris paribus e os parâmetros, neste caso, possuem uma intepretação percentual. Por exemplo, o coeficiente educ (escolaridade) com valor 0,097 significa que, mantendo exper (experiencia) constante, um ano adicional de escolaridade aumenta wage (salario) em 9,7%. É isso que os economistas querem dizer quando se referem ao “retorno a mais por um ano de educação”.

Pode ser mais fácil utilizar essa saída de resultados, especialmente para usuários do {tidyverse}, se a mesma for transformada em tabela. Para organizar dessa maneira o pacote {broom} possui excelentes funções:

Diagnóstico do modelo

Além disso, no R existem diversos pacotes focados em análise estatística. Por exemplo, com o pacote {performance} podemos facilmente investigar visualmente as hipóteses do modelo com um simples comando:

Reportando resultados

Para reportar estes resultados, seja em um artigo, em uma apresentação, etc., também existem diversas facilidades no R. Por exemplo, você pode construir a representação da equação, já em LaTeX, com base no objeto que contém o modelo estimado:

E essa expressão do LaTeX pode ser renderizada, com o R Markdown por exemplo, para:

Já com o pacote {report} é possível criar um texto (em inglês) com alguns parágrafos que já interpretam os resultados do modelo de forma automatizada:

Gerando:

We fitted a linear model (estimated using OLS) to predict wage with educ and exper (formula: log(wage) ~ educ + exper). The model explains a statistically significant and moderate proportion of variance (R2 = 0.25, F(2, 523) = 86.86, p < .001, adj. R2 = 0.25). The model's intercept, corresponding to educ = 0 and exper = 0, is at 0.22 (95% CI [3.52e-03, 0.43], t(523) = 2.00, p = 0.046). Within this model:

- The effect of educ is statistically significant and positive (beta = 0.10, 95% CI [0.08, 0.11], t(523) = 12.85, p < .001; Std. beta = 0.17, 95% CI [0.15, 0.20])
- The effect of exper is statistically significant and positive (beta = 0.01, 95% CI [7.29e-03, 0.01], t(523) = 6.65, p < .001; Std. beta = 0.09, 95% CI [0.06, 0.12])

Standardized parameters were obtained by fitting the model on a standardized version of the dataset. 95% Confidence Intervals (CIs) and p-values were computed using the Wald approximation.

Para criar um tabela de resultados, usualmente presente em papers, use a variante *_table():

Por fim, gráficos de parâmetros do modelo também podem ser gerados facilmente:

Saiba mais

Para saber mais e se aprofundar no assunto, confira o curso de Introdução à Econometria (em R e Python). Além disso, existem alguns materiais gratuitos sobre modelos disponíveis no blog:

Regressões Lineares em R e Python

By | mercado financeiro

É comum em nossas vidas construirmos raciocínios lógicos, a partir de acontecimentos do passado, de que tal variável afetou outra. Muitas vezes, lidamos com diversas teorias que demonstram esses raciocínios de forma cuidadosa de acordo com uma história de acontecimentos e de relações entre as variáveis. Mas, e se tivesse uma forma de conseguir estimar, numericamente o efeito dessas relações? Saber se há significância, ou até mesmo, conseguir a partir do efeito numérico prever um resultado? Tudo isso é possível a partir de uma regressão linear, como mostraremos no post de hoje utilizando o R e  o Python.

Regressão Linear

O objetivo principal da Regressão Linear, é a partir de uma equação matemática, definir o efeito de uma ou mais variável independente em uma variável dependente. O nome linear vem justamente da forma de sua equação, no qual define que esse efeito de relacionamentos é uma função linear dos seus parâmetros. Definimos a equação da seguinte forma:

 Y = a + bx+ erro

Nesta equação definimos uma Regressão Linear Simples, pois há somente uma variável independente x, que afeta a variável dependente Y. Ou seja, através desta equação, definimos o efeito de x em Y. O a é uma constante, que mensura o valor da estimativa caso x seja zero. O b (beta) é o parâmetro (ou coeficiente) que mensura a magnitude de uma variação de x em Y. O erro (também conhecido como resíduo) é simplesmente a diferente entre o valor observado de y com o valor estimado pela equação construída de Y, contendo basicamente as variáveis omitidas do modelo.

Para que não  possamos incorrer de muitos erros na Regressão, de forma contenha muitas variáveis omitidas e o valor predito não seja cheio de erros, podemos aumentar o número de variáveis independente de forma que diminua o valor do erro. Sendo assim, construímos uma Regressão Linear Múltipla, denotada pela equação, um pouco mais formal da seguinte forma:

 y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \dots + \beta_k x_k + \varepsilon

Para estimar o valor de  \beta , o método mais comum é através do Mínimo Quadrados Ordinários, que através do conjunto de dados, minimiza o erro, através soma dos quadrados das diferenças entre o valor estimado e os dados observados. Esse tipo de método é mais comum, devido ao fato de que seus pressuposto são menos rígidos. A equação para Beta segue como:

 \hat{\beta} =arg min_{\beta}\sum_{i = 1}^n (y_i - {\beta} x_i)^2

Feito todas as considerações iniciais, podemos partir para um exemplo real no R e Python para exemplificar melhor o conceito de Regressão.

Regressão Linear no R

Criar uma Regressão Linear no R é algo extremamente simples. O que precisamos ter em mãos são os dados da variável dependente e da(s) variável(is) independente(s) e utilizar a função lm() com a fórmula da Regressão como argumento.

Regressão Linear no R: modelo simples de precificação de ativos

Um exemplo para mostrar o efeito de x sobre y ocorre no contexto de finanças, no qual podemos estimar o retorno de um ativo com base no retorno do mercado. Este é um modelo básico que se utiliza a Regressão Linear Simples e é útil para aqueles que queiram entender melhor sobre o efeito prático das relações entre duas variáveis.

Não iremos discorrer muito sobre a importação e transformação de dados. Essa parte ensinamos por completo no nosso curso de R para o Mercado Financeiro.

Importamos os preços de um ativo no R, bem como os pontos do Ibovespa no mesmo período. Transformamos ambos em forma de retorno diário (isto é, a variação do preço de um dia para o outro). O que queremos saber: o quanto a variação do retorno do Ibovespa, tido aqui como o Retorno do Mercado, afeta o Retorno do Ativo?

Após obter nossos dados, podemos utilizar a função lm() para calcular a regressão. Veja que usamos o simbolo ~, significando que o lado esquerdo (PETR4) é em função da direita (^BVSP). Com a função summary(), sumarizamos os resultados da regressão, obtendo os coeficientes, a significância e o R².

A grosso modo, a leitura dos resultados fica como: A estimativa da constante (intercepto) é igual a 0.001769, a estimativa do coeficiente beta dos retornos da Ibovespa é igual a 1.467227. O intercepto possui um p-valor de 0.16, ou seja, não é significante. Já o coeficiente dos retornos do Ibovespa possui um valor de 2e-16, ou seja, é significante. Medido pelo R², a variabilidade do Ibovespa explica 49,13% da PETR4. Por óbvio, não devemos tirar nenhuma relação de causalidade aqui, apenas de relacionamento entre as variáveis.

Um ponto interessante da Regressão Linear é também poder visualizar a relação de duas variáveis. Utilizando um gráfico de dispersão, é possível ver o relacionamento entre as observações das variáveis, também é possível criar uma Reta de Regressão, na qual realiza o ajuste entre a dispersão dos dados.

No R, criamos um gráfico de dispersão com reta de regressão através do pacote {ggplot2}.

Regressão Linear no Python

No Python, seguiremos o processo igual, retirando os mesmo dados da internet e transformando-os em retornos. Para criar a regressão, utilizaremos a função ols() da biblioteca statsmodels e de sey API formula.api.

No código abaixo seguiremos passos iguais que fizemos no R, importando os preços dos ativos e calculando os retornos diários, além de outros tratamentos.

Por fim, criamos a regressão utilizando a smf.ols com a respectiva formula como argumento. Visualizamos os resultados com fit() e summary(). Apesar de ligeiramente diferente do output do R, os principais resultados estão contidos. Há também uma ligeira diferença dos resultado também, devido ao arredondamento dos dados, porém, bem próximos.

Também é possível criar facilmente um gráfico de dispersão com um Reta de Regressão no Python, para isso, utilizamos a biblioteca {seaborn}.

Quer saber mais sobre R e Python?

Veja nossos cursos de aplicados de R e Python para Economistas. Também oferecemos cursos aplicado ao mercado financeiro através do nosso cursos R para o Mercado Financeiro

Criando modelos no R

By | Data Science

Neste post mostraremos como construir modelos de regressão linear de maneira aplicada. Se você já se perguntou em como replicar no R aqueles modelos introdutórios, comuns em disciplinas de estatística e econometria, este post é pra você!

Dessa forma, usaremos a econometria - que é um conjunto de métodos estatísticos utilizados para estimar relações econômicas, testar teorias e avaliar políticas públicas ou de negócios - para explorar um problema aplicado ao mercado de trabalho.

Portanto, assumimos que você já possui algum conhecimento teórico sobre modelos de regressão linear, pois daremos ênfase no aspecto prático de como implementar este tipo de modelo usando o R. Caso necessário, sugerimos como referência para revisão teórica o livro-texto do Wooldridge (2020), que é muito utilizado em disciplinas de econometria de cursos de graduação e será nossa base aqui.

Pacotes

Para reproduzir os códigos deste exercício, você precisará dos seguintes pacotes de R:

O problema e os dados

Para exemplificar a estimação de um modelo linear vamos recorrer a um conjunto de dados clássico do Wooldridge, que traz informações de uma pesquisa populacional. Mais especificamente, iremos investigar um problema de economia do mercado de trabalho: suponha que você seja contratado para determinar o efeito de um programa de aperfeiçoamento profissional na produtividade de trabalhadores. Sem se aprofundar muito na teoria econômica e especializada da área, podemos dizer que fatores como escolaridade, experiência profissional e treinamentos podem afetar a produtividade do trabalhador e, portanto, seus salários. Com esse simples entendimento podemos definir um modelo econômico como:

onde é o salário por hora, são os anos de educação formal, são os anos de experiência no mercado de trabalho e é o tempo despendido em aperfeiçoamento profissional. Outros fatores podem afetar , mas este modelo simples capta a essência do problema em questão.

Dado que estes fatores e variáveis podem ser observados - e se não fossem teríamos que levar isso em consideração -, o próximo passo é transformarmos esta especificação de modelo econômico para um modelo econométrico, como:

onde as constantes , , ..., são parâmetros do modelo que descrevem as direções (sinal) e as magnitudes (tamanho) da relação entre e as demais variáveis utilizadas para explicar no modelo; e o termo de erro contém fatores como "habilidade inata", qualidade da educação, histórico familiar e outros que podem influenciar o salário de um trabalhador. Se estivermos especialmente interessados no efeito do programa de aperfeiçoamento profissional, então  é o parâmetro de interesse.

Para uma análise empirica deste modelo precisamos de dados, portanto, após essa breve introdução vamos partir para a prática! No R, o conjunto de dados para usarmos nesse modelo vem do pacote {wooldridge} e pode ser carregado conforme abaixo:

Exploração dos dados

Os dados são do tipo cross-section e contém variáveis de 526 indivíduos referente ao ano de 1976. Deste conjunto de dados, usaremos apenas as variáveis wage (salário por hora), educ (anos de educação) e exper (anos de experiência). Para facilitar o entendimento, utilizaremos a transformação logarítmica na variável dependente, obtendo uma interpretação percentual dos parâmetros do modelo.

No R, com um simples comando também é possível obter uma tabela de estatísticas descritivas das variáveis:

Com o pacote ggplot2 podemos facilmente visualizar, em um gráfico de dispersão, a relação entre as variáveis do modelo:

Estimar o modelo

Conforme dito, iremos estimar o modelo econométrico acima mas com algumas modificações: sem o fator e com transformação logarítmica na variável . Com estes ajustes, comuns em exercícios empíricos, chegamos a uma especificação como esta:

No R, estimamos este modelo com a função lm() especificando os termos por uma fórmula e o objeto com os dados:

Resultados do modelo

Para obter os resultados do modelo estimado use a função summary(), que é uma função genérica para obter resultados de diversas famílias de modelos:

A interpretação dos resultados deste modelo deve ser feita ceteris paribus e os parâmetros possuem uma intepretação percentual. Por exemplo, o coeficiente educ (escolaridade) com valor 0,097 significa que, mantendo exper (experiencia) constante, um ano adicional de escolaridade aumenta wage (salario) em 9,7%. É isso que os economistas querem dizer quando se referem ao “retorno a mais por um ano de educação”.

Pode ser mais fácil utilizar essa saída de resultados, especialmente para usuários do {tidyverse}, se a mesma for transformada em tabela. Para organizar dessa maneira o pacote {broom} possui excelentes funções:

Diagnóstico do modelo

Além disso, no R existem diversos pacotes focados em análise estatística. Por exemplo, com o pacote {performance} podemos facilmente investigar visualmente as hipóteses do modelo com um simples comando:

Reportando resultados

Para reportar estes resultados, seja em um artigo, em uma apresentação, etc., também existem diversas facilidades no R. Por exemplo, você pode construir a representação da equação, já em LaTeX, com base no objeto que contém o modelo estimado:

E essa expressão do LaTeX pode ser renderizada, com o R Markdown por exemplo, para:

Já com o pacote {report} é possível criar um texto (em inglês) com alguns parágrafos que já interpretam os resultados do modelo de forma automatizada:

Gerando:

We fitted a linear model (estimated using OLS) to predict wage with educ and exper (formula: log(wage) ~ educ + exper). The model explains a statistically significant and moderate proportion of variance (R2 = 0.25, F(2, 523) = 86.86, p < .001, adj. R2 = 0.25). The model's intercept, corresponding to educ = 0 and exper = 0, is at 0.22 (95% CI [3.52e-03, 0.43], t(523) = 2.00, p = 0.046). Within this model:

- The effect of educ is statistically significant and positive (beta = 0.10, 95% CI [0.08, 0.11], t(523) = 12.85, p < .001; Std. beta = 0.17, 95% CI [0.15, 0.20])
- The effect of exper is statistically significant and positive (beta = 0.01, 95% CI [7.29e-03, 0.01], t(523) = 6.65, p < .001; Std. beta = 0.09, 95% CI [0.06, 0.12])

Standardized parameters were obtained by fitting the model on a standardized version of the dataset. 95% Confidence Intervals (CIs) and p-values were computed using the Wald approximation.

Para criar um tabela de resultados, usualmente presente em papers, use a variante *_table():

Por fim, gráficos de parâmetros do modelo também podem ser gerados facilmente:

Saiba mais

Para saber mais e se aprofundar no assunto, confira os cursos aplicados de R e Python da Análise Macro disponíveis neste outono. Além disso, existem alguns materiais gratuitos sobre modelos disponíveis no blog:

[Dicas de R] Regressão Múltipla

By | Hackeando o R

Em post anterior das Dicas de R, vimos o modelo de regressão simples, onde y pode ser explicado por uma única variável x. O problema básico desse tipo de análise é que ela faz uma suposição bastante forte, qual seja, que x não está correlacionado com o erro, dificultando a aplicação da condição ceteris paribus. A análise de regressão múltipla, por outro lado, é mais receptiva a esse tipo de condição, uma vez que ela permite que controlemos outros fatores que afetam y, adicionando os mesmos na equação. Assim, por suposto, se queremos explicar y, podemos utilizar k variáveis, como abaixo:

(1)   \begin{align*} y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 x_3 + ... + \beta_k x_k + u,  \end{align*}

onde \beta_0 é o intercepto, \beta_k é o parâmetro associado a x_k. De modo a obter uma estimativa para 1, devemos observar que

(2)   \begin{align*} E(u|x_1, x_2, ..., x_k) = 0. \end{align*}

Isto é, que todos os fatores no termo de erro não observado u sejam não correlacionados com as variáveis explicativas. De modo a obter estimativas para os \beta_k parâmetros, é possível recorrer ao método de mínimos quadrados ordinários. Isto é, dado

(3)   \begin{align*} \hat{y} = \hat{\beta_0} + \hat{\beta_1} x_1 + \hat{\beta_2} x_2 + ... + \hat{\beta_k} x_k, \end{align*}

onde \hat{\beta_k} é a estimativa de \beta_k, o método de MQO escolhe as estimativas \hat{\beta_k} que minimizam a soma dos quadrados dos resíduos:

(4)   \begin{align*} \sum_{i=1}^{n} (y_i - \hat{\beta_0} - \hat{\beta_1} x_{i1} - ... - \hat{\beta_k} x_{ik})^2. \end{align*}

O problema acima pode ser resolvido por meio de cálculo multivariado, de onde obtemos as condições de primeira ordem

(5)   \begin{align*} \sum_{i=1}^{n} (y_i - \hat{\beta_0} - \hat{\beta_1} x_{i1} - ... - \hat{\beta_k} x_{ik}) = 0 \nonumber \\ \sum_{i=1}^{n} x_{i1} (y_i - \hat{\beta_0} - \hat{\beta_1} x_{i1} - ... - \hat{\beta_k} x_{ik}) = 0 \nonumber \\ \sum_{i=1}^{n} x_{i2}(y_i - \hat{\beta_0} - \hat{\beta_1} x_{i1} - ... - \hat{\beta_k} x_{ik}) = 0 \nonumber \\ \sum_{i=1}^{n} x_{ik}(y_i - \hat{\beta_0} - \hat{\beta_1} x_{i1} - ... - \hat{\beta_k} x_{ik}) = 0, \nonumber \end{align*}

ou simplesmente, E(u) = 0 e E(x_j u) = 0.

# Interpretação da equação de regressão de MQO

Suponha que tenhamos

(6)   \begin{align*} \hat{y} = \hat{\beta_0} + \hat{\beta_1} x_1 + \hat{\beta_2} x_2. \end{align*}

O intercepto \beta_0 será então o valor previsto de y quando x_1 = x_2 = 0. Já as estimativas \hat{\beta_1} e \hat{\beta_2} devem ser interpretadas como efeito parcial ou simplesmente ceteris paribus. Isto é,

(7)   \begin{align*} \Delta \hat{y} = \hat{\beta_1} \Delta x_1 + \hat{\beta_2} \Delta x_2, \nonumber \end{align*}

de modo que obtemos a variação prevista em y dadas as variações em x_1 e x_2. Em particular, quando x_2 é mantido fixo, de modo que \Delta x_2 = 0, teremos

(8)   \begin{align*} \Delta \hat{y} = \hat{\beta_1} \Delta x_1. \nonumber \end{align*}

Ou, simplesmente,

(9)   \begin{align*} \frac{\partial \hat{y}}{\partial \hat{x_1}} = \hat{\beta_1}, \nonumber \end{align*}

onde \hat{\beta_1} irá medir o efeito da variação de x_1 em y, mantido x_2 constante.

# Exemplo: equação do salário-hora

De modo a ilustrar, vamos considerar o exemplo 3.2 de Wooldridge (2003), em que o mesmo utiliza o conjunto de dados wage1, disponível no pacote wooldridge. Ele pode ser acessado como abaixo.


library(wooldridge)
data(wage1)

modelo = lm(log(wage) ~ educ+exper+tenure, data=wage1)

E abaixo, o nosso modelo.

Dependent variable:
log(wage)
educ 0.092***
(0.007)
exper 0.004**
(0.002)
tenure 0.022***
(0.003)
Constant 0.284***
(0.104)
Observations 526
R2 0.316
Adjusted R2 0.312
Residual Std. Error 0.441 (df = 522)
F Statistic 80.391*** (df = 3; 522)
Note: *p<0.1; **p<0.05; ***p<0.01

De modo a obter a seguinte reta de regressão para o log do salário-hora

(10)   \begin{align*} \hat{log(wage)} = 0.284 + 0.092 educ + 0.0041 exper + 0.022 tenure. \end{align*}

De onde se conclui, por exemplo, que o aumento de um ano na educação formal equivale a um aumento de 9.2% no salário-hora, mantidos exper e tenure fixos.

Quer aprender mais sobre econometria? Conheça nosso Curso de Introdução à Econometria usando o R.

_______________________

Wooldridge, J. M. 2013. Introductory Econometrics: A Modern Approach. Editora Cengage.

Implementando regressões simples no R

By | Hackeando o R

Regredir um variável x contra uma variável y é um poderoso recurso estatístico. De modo a explicar o método, suponha que estamos interessados em estimar os parâmetros populacionais \beta_0 e \beta_1 de um modelo de regressão simples

(1)   \begin{align*} y = \beta_0 + \beta_1 x + u  \end{align*}

a partir de uma amostra aleatória de y e x. Os estimadores de Mínimos Quadrados Ordinários (MQO) serão

(2)   \begin{align*} \hat{\beta}_0 &= \hat{y} - \hat{\beta_1} \bar{x} \\ \hat{\beta_1} &= \frac{Cov(x,y)}{Var{x}}. \end{align*}

Baseado nos parâmetros estimados, a reta de regressão será

(3)   \begin{align*} \hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x. \end{align*}

Para uma dada amostra, nós precisaremos calcular as quatro estatísticas \bar{y}, \bar{x}, Cov(x,y) e Var(x) e colocá-las nessas equações. Para ilustrar, vamos considerar o exemplo 2.3 de Wooldridge (2013) sobre Salários de CEOs e Retornos sobre o patrimônio. Para isso, considere o seguinte modelo

(4)   \begin{align*} salary = \beta_0 + \beta_1 roe + u \end{align*}

onde salary é o salário anual de CEO em milhares de dólares e roe é o retorno médio sobre o patrimônio em percentual. O parâmetro \beta_1 irá medir a variação no salário anual quando o retorno médio sobre o patrimônio aumentar em um ponto percentual. Para estimar esse modelo, podemos utilizar o conjunto de dados ceosal1. Podemos dar uma olhada nas variáveis do conjunto de dados cesal1 a partir do pacote wooldridge como abaixo.


data(ceosal1, package='wooldridge')
attach(ceosal1)

Uma vez que tenhamos carregado o conjunto de dados, podemos calcular manualmente os parâmetros \beta_0 e \beta_1, como abaixo.


# Cálculo manual dos parâmetros
b1hat = cov(roe,salary)/var(roe)
b0hat = mean(salary) - b1hat*mean(roe)

Isto é, a reta de regressão será dada por

(5)   \begin{align*} \hat{salary} = 963,191 + 18,501 * roe \end{align*}

o que pode ser facilmente obtido com o código abaixo:


lm(salary ~ roe)

Implicando que para um roe = 0, teremos um salário previsto de 963,19 ou US$ 963.191, que é o intercepto. Ademais, se \Delta roe = 1, então \Delta salary = 18,5 ou US$ 18.501. Podemos, por fim, desenhar a reta de regressão com o código abaixo.


CEOregress = lm(salary ~ roe)
plot(roe, salary, ylim=c(0,4000))
abline(CEOregress, col='red')

Vamos continuar nossa revisão de modelos de regressão simples com o conjunto de dados wage1. Estamos interessados agora em estudar a relação entre educação e salários, de modo que o nosso modelo de regressão será

(6)   \begin{align*} wage = \beta_0 + \beta_1 education + u. \end{align*}

O que pode ser obtido com o código abaixo.


modelo = lm(wage ~ educ, data=wage1)
modelo

Isto é, teremos a seguinte reta de regressão

(7)   \begin{align*} \hat{wage} = -0,9 + 0,54 * education \end{align*}

de modo que um ano adicional de estudo implica em mais 54 centavos à hora de trabalho. O objeto obtido com a função lm contém todas as informações relevantes de uma regressão. Abaixo, acessamos os elementos do objeto CEOregress:


names(CEOregress)
CEOregress$coefficients

Podemos obter os valores ajustados:


plot(CEOregress$fitted.values)

E os resíduos:


plot(CEOregress$residuals)

Por fim, podemos ainda obter um sumário de todas as estatísticas relevantes da regressão com a função abaixo.


summary(CEOregress)

O que podemos gerar como tabela com o pacote stargazer como abaixo.

Dependent variable:
salary
roe 18.501*
(11.123)
Constant 963.191***
(213.240)
Observations 209
R2 0.013
Adjusted R2 0.008
Residual Std. Error 1,366.555 (df = 207)
F Statistic 2.767* (df = 1; 207)
Note: *p<0.1; **p<0.05; ***p<0.01

Gostou? Isso e muito mais você aprende em nosso Curso de Introdução à Econometria usando o R.

__________________

(*) Wooldridge, J. M. Introductory Econometrics: A Modern Approach. Editora Cengage, 2013.

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente