Regressão Simples

Regressão simples por MQO

  • Seção 2.1 de Heiss (2020)
  • Considere o seguinte modelo empírico $$ y = \beta_0 + \beta_1 x + u \tag{2.1} $$
  • Os estimadores de mínimos quadrados ordinários (MQO), segundo Wooldridge (2006, Seção 2.2) é dado por
\begin{align} \hat{\beta}_0 &= \bar{y} - \hat{\beta}_1 \bar{x} \tag{2.2}\\ \hat{\beta}_1 &= \frac{Cov(x,y)}{Var(x)} \tag{2.3} \end{align}
  • E os valores ajustados/preditos, $\hat{y}$ é dado por $$ \hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x \tag{2.4} $$ tal que $$ y = \hat{y} + \hat{u} $$

Exemplo 2.3: Salário de Diretores Executivos e Retornos de Ações (Wooldridge, 2006)

  • Considere o seguinte modelo de regressão simples $$ \text{salary} = \beta_0 + \beta_1 \text{roe} + u $$ em que salary é a remuneração de um diretor executivo em milhares de dólares e roe é o retorno sobre o investimento em percentual.

Estimando regressão simples “na mão”

# Carregando a base de dados do pacote 'wooldridge'
data(ceosal1, package="wooldridge")

attach(ceosal1) # para não precisar escrever 'ceosal1$' antes de toda variável

cov(salary, roe) # covariância entre variável dependente e independente
## [1] 1342.538
var(roe) # variância do retorno sobre o investimento
## [1] 72.56499
mean(roe) # média do retorno sobre o investimento
## [1] 17.18421
mean(salary) # média do salário
## [1] 1281.12
# Cálculo "na mão" dos coeficientes de MQO
( b1_hat = cov(salary, roe) / var(roe) ) # por (2.3)
## [1] 18.50119
( b0_hat = mean(salary) - var(roe)*mean(salary) ) # por (2.2)
## [1] -91683.31
detach(ceosal1) # para parar de procurar variável dentro do objeto 'ceosal1'
  • Vemos que um incremento de uma unidade (porcento) no retorno sobre o investimento (roe), aumentar 18 unidades (milhares de dólares) nos salários dos diretores executivos.

Estimando regressão simples via lm()

  • Uma maneira mais conveniente de fazer a estimação por MQO é usando a função lm()
  • Em um modelo univariado, inserimos dois vetores (variáveis dependente e independente) separados por um til (~):
lm(ceosal1$salary ~ ceosal1$roe)
## 
## Call:
## lm(formula = ceosal1$salary ~ ceosal1$roe)
## 
## Coefficients:
## (Intercept)  ceosal1$roe  
##       963.2         18.5
  • Também podemos deixar de usar o prefixo ceosal1$ antes dos nomes do vetores preenchermos o argumento data = ceosal1
lm(salary ~ roe, data=ceosal1)
## 
## Call:
## lm(formula = salary ~ roe, data = ceosal1)
## 
## Coefficients:
## (Intercept)          roe  
##       963.2         18.5
  • Podemos usar a função lm() para incluir uma reta de regressão no gráfico
# Gráfico de dispersão (scatter)
plot(ceosal1$roe, ceosal1$salary)

# Adicionando a reta de regressão
abline(lm(salary ~ roe, data=ceosal1), col="red")

Coeficientes, Valores Ajustados e Resíduos

  • Seção 2.2 de Heiss (2020)
  • Podemos “guardar” os resultados da estimação em um objeto (da classe list) e, depois, extrair informações dele.
# atribuindo o resultado da regressão em um objeto
CEOregres = lm(salary ~ roe, data=ceosal1)

# verificando os "nomes" das informações contidas no objeto
names(CEOregres)
##  [1] "coefficients"  "residuals"     "effects"       "rank"         
##  [5] "fitted.values" "assign"        "qr"            "df.residual"  
##  [9] "xlevels"       "call"          "terms"         "model"
  • Podemos usar a função coef() para extrairmos um data frame com os coeficientes da regressão
( bhat = coef(CEOregres) )
## (Intercept)         roe 
##   963.19134    18.50119
bhat_0 = bhat["(Intercept)"] # ou bhat[1]
bhat_1 = bhat["roe"] # ou bhat[2]
  • Dados estes parâmetros estimados, podemos calcular os valores ajustados/preditos, $\hat{y}$, e os desvios, $\hat{u}$, para cada observação $i=1, ..., n$:
\begin{align} \hat{y}_i &= \hat{\beta}_0 + \hat{\beta}_1 . x_i \tag{2.5} \\ \hat{u}_i &= y_i - \hat{y}_i \tag{2.6} \end{align}
# Extraindo colunas de ceosal1 em vetores
sal = ceosal1$salary
roe = ceosal1$roe

# Calculando os valores ajustados/preditos
sal_hat = bhat_0 + (bhat_1 * roe)

# Calculando os desvios
u_hat = sal - sal_hat

# Visualizando as 6 primerias linhas de sal, roe, sal_hat e u_hat
head( cbind(sal, roe, sal_hat, u_hat) )
##       sal  roe  sal_hat     u_hat
## [1,] 1095 14.1 1224.058 -129.0581
## [2,] 1001 10.9 1164.854 -163.8543
## [3,] 1122 23.5 1397.969 -275.9692
## [4,]  578  5.9 1072.348 -494.3483
## [5,] 1368 13.8 1218.508  149.4923
## [6,] 1145 20.0 1333.215 -188.2151
  • Com as funções fitted() e resid() podemos extrair os valores ajustados e os resíduos do objeto com resultado da regressão:
head( cbind(fitted(CEOregres), resid(CEOregres)) )
##       [,1]      [,2]
## 1 1224.058 -129.0581
## 2 1164.854 -163.8543
## 3 1397.969 -275.9692
## 4 1072.348 -494.3483
## 5 1218.508  149.4923
## 6 1333.215 -188.2151
# Ou também
head( cbind(CEOregres$fitted.values, CEOregres$residuals) )
##       [,1]      [,2]
## 1 1224.058 -129.0581
## 2 1164.854 -163.8543
## 3 1397.969 -275.9692
## 4 1072.348 -494.3483
## 5 1218.508  149.4923
## 6 1333.215 -188.2151
  • Na seção 2.3 de Wooldridge (2006), vemos que a estimação por MQO assume as seguintes hipóteses: \begin{align} &\sum^n_{i=1}{\hat{u}_i} = 0 \quad \implies \quad \bar{\hat{u}} = 0 \tag{2.7} \\ &\sum^n_{i=1}{x_i \hat{u}_i} = 0 \quad \implies \quad Cov(x,\hat{u}) = 0 \tag{2.8} \\ &\bar{y}=\hat{\beta}_0 + \hat{\beta}_1.\bar{x} \tag{2.9} \end{align}

  • Podemos verificá-los em nosso exemplo:

# Verificando (2.7)
mean(u_hat) # bem próximo de 0
## [1] -2.666235e-14
# Verificando (2.8)
cor(ceosal1$roe, u_hat) # bem próximo de 0
## [1] -6.038735e-17
# Verificando (2.9)
mean(ceosal1$salary)
## [1] 1281.12
mean(sal_hat)
## [1] 1281.12
  • IMPORTANTE: Isso só quer dizer que o MQO escolhe $\hat{\beta}_0$ e $\hat{\beta}_1$ tais que 2.7, 2.8 e 2.9 sejam verdadeiros.
  • Isto NÃO quer dizer que, para o modelo empírico/populacional, as seguintes hipóteses sejam verdadeiras: \begin{align} &E(u) = 0 \tag{2.7'} \\ &Cov(x, u) = 0 \tag{2.8'} \end{align}
  • De fato, se 2.7’ e 2.8’ não forem válidos, a estimação por MQO (que assume 2.7, 2.8 e 2.9) será viesada.

Transformações log

  • Seção 2.4 de Heiss (2020)
  • Também podemos fazer estimações transformando variáveis em nível para logaritmo.
  • É especialmente importante para transformar modelos não-lineares em lineares - quando o parâmetro está no expoente ao invés estar multiplicando:

$$ y = A K^\alpha L^\beta\quad \overset{\text{log}}{\rightarrow}\quad \log(y) = \log(A) + \alpha \log(K) + \beta \log(L) $$

  • Também é frequentemente utilizada em variáveis dependentes $y \ge 0$
  • Há duas maneiras de fazer a transformação log:
    • Criar um novo vetor/coluna com a variável em log, ou
    • Usar a função log() diretamente no vetor dentro da função lm()

Exemplo 2.11: Salário de Diretores Executivos e Vendas das Empresas (Wooldridge, 2006)

  • Considere as variáveis:

    • wage: salário anual em milhares de dólares
    • sales: vendas em milhões de dólares
  • Modelo nível-nível:

# Carregando a base de dados
data(ceosal1, package="wooldridge")

# Estimando modelo nível-nível
lm(salary ~ sales, data=ceosal1)
## 
## Call:
## lm(formula = salary ~ sales, data = ceosal1)
## 
## Coefficients:
## (Intercept)        sales  
##   1.174e+03    1.547e-02
  • Um aumento em US$ 1 milhão em vendas está relacionado incremento de US$ 0,01547 milhares de dólares do salário do diretor executivo.
  • Modelo log-nível:
# Estimando modelo log-nível
lm(log(salary) ~ sales, data=ceosal1)
## 
## Call:
## lm(formula = log(salary) ~ sales, data = ceosal1)
## 
## Coefficients:
## (Intercept)        sales  
##   6.847e+00    1.498e-05
  • Um aumento em US$ 1 milhão em vendas tende a elevar em 0,0015% ($=100 \beta_1%$ ) o salário do diretor executivo.
  • Modelo log-log:
# Estimando modelo log-log
lm(log(salary) ~ log(sales), data=ceosal1)
## 
## Call:
## lm(formula = log(salary) ~ log(sales), data = ceosal1)
## 
## Coefficients:
## (Intercept)   log(sales)  
##      4.8220       0.2567
  • Um aumento em 1% das vendas aumenta o salário em cerca de 0,257% ($=\beta_1%$) maior.

Regressão a partir da origem e sobre uma constante

  • Seção 2.5 de Heiss (2020)
  • Para esstimar o modelo sem o intercepto (constante), precisamos adicionar 0 + nos regressores na função lm():
data(ceosal1, package="wooldridge")
lm(salary ~ 0 + roe, data=ceosal1)
## 
## Call:
## lm(formula = salary ~ 0 + roe, data = ceosal1)
## 
## Coefficients:
##   roe  
## 63.54
  • Ao regredirmos uma variável dependente sobre uma constante (1), obtemos a média desta variável.
lm(salary ~ 1, data=ceosal1)
## 
## Call:
## lm(formula = salary ~ 1, data = ceosal1)
## 
## Coefficients:
## (Intercept)  
##        1281
mean(ceosal1$salary, na.rm=TRUE)
## [1] 1281.12

Diferença de médias

  • Baseado no Exemplo C.6: Efeito de subsídios de treinamento corporativo sobre a produtividade do trabalhador (Wooldridge, 2006)
  • Poderíamos ter calculado a diferença de médias por meio de uma regressão sobre uma variável dummy, cujos valores são 0 ou 1.
  • Primeiro vamos criar um vetor único de taxas de refugo (vamos empilhar SR87 e SR88)
SR87 = c(10, 1, 6, .45, 1.25, 1.3, 1.06, 3, 8.18, 1.67, .98,
         1, .45, 5.03, 8, 9, 18, .28, 7, 3.97)
SR88 = c(3, 1, 5, .5, 1.54, 1.5, .8, 2, .67, 1.17, .51, .5, 
         .61, 6.7, 4, 7, 19, .2, 5, 3.83)

( SR = c(SR87, SR88) ) # empilhando SR87 e SR88 em único vetor
##  [1] 10.00  1.00  6.00  0.45  1.25  1.30  1.06  3.00  8.18  1.67  0.98  1.00
## [13]  0.45  5.03  8.00  9.00 18.00  0.28  7.00  3.97  3.00  1.00  5.00  0.50
## [25]  1.54  1.50  0.80  2.00  0.67  1.17  0.51  0.50  0.61  6.70  4.00  7.00
## [37] 19.00  0.20  5.00  3.83
  • Note que os 20 primeiros valores são relativos às taxas de refugo no ano de 1987 e os 20 últimos valores são de 1988.
  • Vamos criar uma variável dummy chamada de group88 que atribui valor 1 as observações do ano de 1988 e o valor 0 para as de 1987:
( group88 = c(rep(0, 20), rep(1, 20)) ) # valores 0/1 para 20 primeiras/últimas observações
##  [1] 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 1 1 1 1 1 1 1
## [39] 1 1
  • Ao regredirmos a taxa de refugo em relação à dummy obtemos a diferença das médias
lm(SR ~ group88)
## 
## Call:
## lm(formula = SR ~ group88)
## 
## Coefficients:
## (Intercept)      group88  
##       4.381       -1.154

Valores esperados, Variância e Erros padrão

  • Seção 2.6 de Heiss (2020)

  • Wooldridge (2006, Seção 2.5) deriva o estimador do termo de erro: $$ \hat{\sigma}^2 = \frac{1}{n-2} \sum^n_{i=1}{\hat{u}^2_i} = \frac{n-1}{n-2} Var(\hat{u}) \tag{2.14} $$ em que $Var(\hat{u}) = \frac{1}{n-1} \sum^n_{i=1}{\hat{u}^2_i}$.

  • Observe que precisamos considerar os graus de liberdade, dado que estamos estimando dois parâmetros ( $\hat{\beta}_0$ e $\hat{\beta}_1$).

  • Note que $\hat{\sigma} = \sqrt{\hat{\sigma}^2}$ é chamado de erro padrão da regressão (EPR). No R, é chamado de erro padrão residual

  • também podemos obter os erros padrão (EP) dos estimadores:

\begin{align} se(\hat{\beta}_0) &= \sqrt{\frac{\hat{\sigma}\bar{x}^2}{\sum^n_{i=1}{(x_i - \bar{x})^2}}} = \frac{1}{\sqrt{n-1}} \frac{\hat{\sigma}}{sd(x)} \sqrt{\bar{x^2}} \tag{2.15}\\ se(\hat{\beta}_1) &= \sqrt{\frac{\hat{\sigma}}{\sum^n_{i=1}{(x_i - \bar{x})^2}}} = \frac{1}{\sqrt{n-1}} \frac{\hat{\sigma}}{sd(x)} \tag{2.16} \end{align}

Exemplo 2.12: Desempenho em Matemática de Estudante e o Programa de Merenda Escolar (Wooldridge, 2006)

  • Sejam as variáveis

    • math10: o percentual de alunos de primeiro ano de ensino médio aprovados em exame de matemática
    • lnchprg: o percentual de estudante aptos para participar do programa de merenda escolar
  • O modelo de regressão simples é $$ \text{math10} = \beta_0 + \beta_1 \text{lnchprg} + u $$

data(meap93, package="wooldridge")

# Estimando o modelo e atribuindo no objeto 'results'
results = lm(math10 ~ lnchprg, data=meap93)

# Extraindo número de observações
( n = nobs(results) )
## [1] 408
# Calculando o Erro Padrão da Regressão (raiz quadrada de 2.14)
( SER = sqrt( (n-1)/(n-2) ) * sd(resid(results)) )
## [1] 9.565938
# Erro padrão de bhat_0 (2.15)
(1 / sqrt(n-1)) * (SER / sd(meap93$lnchprg)) * sqrt( mean(meap93$lnchprg^2) ) # Erro padrão de bhat_1 (2.16)
## [1] 0.9975824
(1 / sqrt(n-1)) * (SER / sd(meap93$lnchprg)) # bhat_1
## [1] 0.03483933
  • Os cálculos dos erros padrão podem ser obtidos via uso da função summary() sobre o objeto com resultado da regressão:
summary(results)
## 
## Call:
## lm(formula = math10 ~ lnchprg, data = meap93)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -24.386  -5.979  -1.207   4.865  45.845 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 32.14271    0.99758  32.221   <2e-16 ***
## lnchprg     -0.31886    0.03484  -9.152   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.566 on 406 degrees of freedom
## Multiple R-squared:  0.171,	Adjusted R-squared:  0.169 
## F-statistic: 83.77 on 1 and 406 DF,  p-value: < 2.2e-16
  • Observe também que, por padrão, são feitos testes de hipótese (bicaudais), cujas hipóteses nulas são $\beta_0 = 0$ e $\beta_1=0$.
  • Ou seja, avalia se as estimativas calculadas são estatisticamente nulas e também mostra as respectivas estatísticas t e p-valores.
  • Neste caso, como os p-valores são bem pequenos (<2e-16 = menor do que $2 \times 10^{-16}$), rejeitamos ambas hipóteses nulas e, portanto, as estimativas são estatisticamente significantes.
  • Também podemos calcular essas estimativas “na mão”:
# Extraindo as estimativas
( estim = coef(summary(results)) )
##               Estimate Std. Error   t value      Pr(>|t|)
## (Intercept) 32.1427116 0.99758239 32.220609 6.267302e-114
## lnchprg     -0.3188643 0.03483933 -9.152422  2.746609e-18
# Estatísticas t para H0: bhat = 0
( t_bhat_0 = (estim["(Intercept)", "Estimate"] - 0) / estim["(Intercept)", "Std. Error"] )
## [1] 32.22061
( t_bhat_1 = (estim["lnchprg", "Estimate"] - 0) / estim["lnchprg", "Std. Error"] )
## [1] -9.152422
# p-valores para H0: bhat = 0
2 * (1 - pt(abs(t_bhat_0), n-1)) # p-valor para bhat_0
## [1] 0
2 * (1 - pt(abs(t_bhat_1), n-1)) # p-valor para bhat_1
## [1] 0

Violações de hipótese

  • Subseção 2.7.3 de Heiss (2020), mas usando como exemplo o teste elaborado 1.
  • Simulating a linear model (John Hopkins/Coursera)
  • Na prática, fazemos regressões a partir de observações contidas em bases de dados e não sabemos qual é o modelo real que gerou essas observações.
  • No R, podemos supor um modelo real e simular suas observações no R para analisar o que ocorre quando há violação de hipótese de algum modelo econométrico ou estimador.
  • Usaremos o exemplo dado no Teste Elaborado 1, no qual queremos encontrar a relação das horas de prática em culinária com o número de queimaduras na cozinha.

Sem violação de hipótese: Exemplo 1

  • Sejam $y$ o número de queimaduras na cozinha e $x$ o número de horas gastas aprendendo a cozinhar.
  • Suponha o modelo real: $$ y = a_0 + b_0 x + \varepsilon, \qquad \varepsilon \sim N(0, 2^2) \tag{1}$$ em que $a_0=50$ e $b_0=-5$.
  1. Definindo $a_0$ e $b_0$ e gerando por simulação as “observações” de $x$ e $y$:
    • Apenas para facilitar, geraremos valores aleatórios $x \sim N(5; 0,5^2)$. Aqui, não importa a distribuição de $x$.
a0 = 50
b0 = -5
N = 200 # Número de observações

set.seed(1)
u = rnorm(N, 0, 2) # Desvios: 200 obs. de média 0 e desv pad 2
x = rnorm(N, 5, 0.5) # Gerando 200 obs. de média 5 e desv pad 1
y = a0 + b0*x + u # calculando observações y a partir de "e" e "x"

plot(x, y)
Simulamos as observações $x$ e $y$ que são, na prática, as informações que observamos.
  1. Estimando por MQO os parâmetros $\hat{a}$ e $\hat{b}$ a partir das observações simuladas de $y$ e $x$:
    • Um economista supôs a relação entre as variáveis pelo seguinte modelo empírico: $$ y = a + b x + u, \tag{1a}$$ assumindo que $E[u] = 0$ e $E[ux]=0$.
    • Para estimar o modelo por MQO, usamos a função lm()
lm(y ~ x) # regredindo por MQO a var. dependente y pela var. x
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##      50.463       -5.078
  • Note que foi possível recuperar os parâmetros populacionais ( $\hat{a} = 50,268 \approx 50 = a_0$ e $\hat{b} = -5,039 \approx -5 = b_0$).
plot(x, y) # Figura de x contra y
abline(a=50, b=-5, col="red") # reta do modelo real
abline(lm(y ~ x), col="blue") # reta estimada a partir das observações

Sem violação de hipótese: Exemplo 2

  • Agora, no modelo real, suponha que o número de queimaduras $y$ é determinado tanto pela quantidade de horas de aprendizado $x$ e pela quantidade de horas gastas cozinhando $z$:

$$ y = a_0 + b_0 x + c_0 z + u, \qquad u \sim N(0, 2^2) \tag{2} $$ em que $a_0=50$, $b_0=-5$ e $c_0=3$. Apenas para facilitar, usaremos geraremos valores aleatórios de $x \sim N(5; 0,5^2)$ e $z \sim N(1,875; 0,25^2)$. Note que $z$, por construção, não é correlacionada com $x$ no modelo real.

  • Primeiro, vamos simular as observações:
a0 = 50
b0 = -5
c0 = 3
N = 200 # Número de observações

set.seed(1)
u = rnorm(N, 0, 2) # Desvios: 200 obs. de média 0 e desv pad 2
x = rnorm(N, 5, 0.5) # Gerando 200 obs. de média 5 e desv pad 1
z = rnorm(N, 1.875, 0.25) # Gerando 200 obs. de média 1,875 e desv pad 0.25
y = a0 + b0*x + c0*z + u # calculando observações y a partir de "e", "x" e "z"
  • Considere que um economista suponha a relação entre as variáveis pelo seguinte modelo empírico: $$ y = a + b x + u, \tag{2a}$$ assumindo que $E[u] = 0$ e $E[ux] = 0$.

  • Note que o economista deixou a variável de horas cozinhando $z$ fora do modelo, então ela acaba ``entrando’’ no erro da estimação.

  • No entanto, como $z$ não tem relação com $x$, então isso não afeta a estimativa de $\hat{b}$:

cor(x, z) # correlação de x e z -> próxima de 0
## [1] -0.02625278
lm(y ~ x) # estimação por MQO
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##       56.27        -5.12
  • Note que $\hat{b} = -5,12 \approx -5 = b_0$, portanto a estimação por MQO conseguiu recuperar o parâmetro populacional $b_0$, apesar do economista não ter incluído $z$ no modelo.
  • Grande parte dos estudos econômicos tentam estabelecer a relação/causalidade entre $y$ e $x$, então não é necessário incluir todas possíveis variáveis que impactam $y$, desde que $E(ux) = 0$ (ou seja, que nenhuma variável explicativa correlacionada com $x$ tenha ``ficado de fora’’ e, portanto, compondo o termo de erro).

Violação de E(ux)=0

  • Agora, suponha que, no modelo real, quanto mais horas a pessoa pratica culinária, mais ele cozinha (ou seja, $x$ está relacionada com $z$).
    • Considere que $z \sim N(1,875x; (0,25)^2)$:
set.seed(1)
e = rnorm(N, 0, 2) # Desvios: 200 obs. de média 0 e desv pad 2
x = rnorm(N, 5, 0.5) # Gerando 200 obs. de média 5 e desv pad 1
z = rnorm(N, 1.875*x, 0.25) # Gerando 200 obs. de média 1,875x e desv pad 0.25x
y = a0 + b0*x + c0*z + e # calculando observações y a partir de "e", "x" e "z"
cor(x, z) # correlação de x e z
## [1] 0.9618748
  • Note que, agora, $x$ e $z$ são consideravalmente correlacionados
  • Vamos estimar o modelo empírico: $$ y = a + b x + u,$$ assumindo que $E[u] = 0$ e $E[ux]=0$.
lm(y ~ x) # estimação por MQO
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##     50.6406       0.5053
  • Observe que $\hat{b} = 0,5 \neq -5 = b_0$. Isto se dá porque $z$ não foi incluído no modelo e, portanto, ele acaba compondo o desvio $\hat{u}$. Como $z$ é correlacionado com $x$, então $E(ux)\neq 0$ (violando a hipótese do MQO).
  • Observe que, se incluíssemos a variável $z$ na estimação, conseguiríamos recuperar $\hat{b} \approx b_0$:
lm(y ~ x + z)
## 
## Call:
## lm(formula = y ~ x + z)
## 
## Coefficients:
## (Intercept)            x            z  
##      50.435       -5.953        3.470

Violação de E(u)=0

  • Agora, consideraremos que $E[u] = k$, sendo $k \neq 0$ uma constante.
  • Assuma que $k = 10$:
a0 = 50
b0 = -5
k = 10

set.seed(1)
u = rnorm(N, k, 2) # Desvios: 200 obs. de média k e desv pad 2
x = rnorm(N, 5, 0.5) # Gerando 200 obs. de média 5 e desv pad 1
y = a0 + b0*x + u # calculando observações y a partir de "e" e "x"
  • Caso um economista considere um modelo empírico com $E[u] = 0$, segue que:
lm(y ~ x) # estimação por MQO
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##      60.463       -5.078
  • Note que o fato de $E[u] \neq 0$ afeta apenas a estimação de $\hat{a} \neq a_0$, porém não afeta a de $\hat{b} \approx b_0$, que é normalmente o parâmetro de interesse em estudos econômicos.

Violação de Homocedasticidade

  • Agora, consideraremos que $u \sim N(0, (2x)^2)$, ou seja, a variância cresce com $x$ ( $u$ não é independente de $x$/não vale homocedasticidade).
a0 = 50
b0 = -5

set.seed(1)
x = rnorm(N, 5, 0.5) # Gerando 200 obs. de média 5 e desv pad 1
u = rnorm(N, 0, 2*x) # Desvios: 200 obs. de média k e desv pad 2x
y = a0 + b0*x + u # calculando observações y a partir de "e" e "x"

lm(y ~ x) # estimação por MQO
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##      51.221       -5.166
  • Note que, mesmo com heterocesdasticidade, é possível recuperar $\hat{b} \approx b_0$. Mas, observe também que, se a amostra for pequena, mais provável é que $\hat{b} \neq b_0$. Teste diversas vezes para $N$ menores.

Qualidade do ajuste

  • Seção 2.3 de Heiss (2020)
  • A soma de quadrados total (SQT), a soma de quadrados explicada (SQE) e a soma de quadrados dos resíduos (SQR) podem ser escritos como:

\begin{align} SQT &= \sum^n_{i=1}{(y_i - \bar{y})^2} = (n-1) . Var(y) \tag{2.10}\\ SQE &= \sum^n_{i=1}{(\hat{y}_i - \bar{y})^2} = (n-1) . Var(\hat{y}) \tag{2.11}\\ SQR &= \sum^n_{i=1}{(\hat{u}_i - 0)^2} = (n-1) . Var(\hat{u}) \tag{2.12} \end{align} em que $Var(x) = \frac{1}{n-1} \sum^n_{i=1}{(x_i - \bar{x})^2}$.

  • Wooldridge (2006) define o coeficiente de determinação como: \begin{align} R^2 &= \frac{SQE}{SQT} = 1 - \frac{SQR}{SQT}\\ &= \frac{Var(\hat{y})}{Var(y)} = 1 - \frac{Var(\hat{u})}{Var(y)} \tag{2.13} \end{align} pois $SQT = SQE + SQR$.
# Calculando R^2 de três maneiras:
var(sal_hat) / var(sal)
## [1] 0.01318862
1 - var(u_hat)/var(sal)
## [1] 0.01318862
cor(sal, sal_hat)^2 # correlação ao quadrado da variável dependente com valores ajustados
## [1] 0.01318862
  • Para obter o $R^2$ de forma mais conveniente, pode-se usar a função summary() sobre o objeto de resultado da regressão. Esta função fornece uma visualização dos resultados mais detalhada, incluindo o $R^2$:
summary(CEOregres)
## 
## Call:
## lm(formula = salary ~ roe, data = ceosal1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1160.2  -526.0  -254.0   138.8 13499.9 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   963.19     213.24   4.517 1.05e-05 ***
## roe            18.50      11.12   1.663   0.0978 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1367 on 207 degrees of freedom
## Multiple R-squared:  0.01319,	Adjusted R-squared:  0.008421 
## F-statistic: 2.767 on 1 and 207 DF,  p-value: 0.09777