Implementando regressões simples no 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.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que é um Vector Database e como criar um com LangChain

Nesta postagem, mostramos como construir um pipeline simples de RAG (Retrieval-Augmented Generation) usando o LangChain, o modelo Gemini 2.0 Flash e o Vector Database Chroma. Utilizamos como exemplo o Relatório de Inflação de junho de 2025 do Banco Central do Brasil. O fluxo envolve o download e leitura do PDF, divisão do texto com RecursiveCharacterTextSplitter, geração de embeddings com Gemini, armazenamento vetorial com Chroma e busca semântica para responder perguntas com base no conteúdo do relatório. É uma aplicação prática e didática para economistas que desejam integrar IA ao seu fluxo de análise.

Automatizando a Construção de Códigos em Python com LangGraph

Neste post, mostramos como construir um agente de código em Python utilizando LangGraph, LangChain e Gemini. A proposta é construir um protótipo para automatizar o ciclo completo de geração, execução e correção de código com o uso de LLMs, organizando o processo em um grafo de estados.

Análise de Dados com REPL Tool e LLM usando LangGraph

Neste post, vamos mostrar como você pode criar um agente que interpreta e executa código Python em tempo real, utilizando o REPL-Tool e um LLM da família Gemini. Começamos com um exemplo genérico e, em seguida, aplicamos a mesma estrutura à análise econômica de uma série histórica do IPCA.

Boletim AM

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

Boletim AM

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

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.