Monitoria 2 de Econometria I - Regressão Linear Simples

Introdução

Definição

O modelo de regressão linear é dado por

\[Y_i = \beta_0 + \beta_1 X_i + u_i\] onde,

  • o índice \(i\) percorre as observações, \(i=1,\dots,n\)
  • \(Y_i\) é a variável dependente
  • \(X_i\) é a variável independente
  • \(Y_i = \beta_0 + \beta_1 X\) é a função de regressão populacional
  • \(\beta_0\) é o intercepto da linha de regressão populacional
  • \(\beta_1\) é a inclinação da linha de regressão populacional
  • \(u_i\) é o termo de erro (ou)

Na regressão linear, o objetivo é modelar a relação entre uma variável dependente \(Y\) e uma ou mais variáveis explicativas denotadas por \(X_1, X_2, \dots, X_k\). Por enquanto focaremos no conceito de regressão linear simples, no qual existe apenas uma variável explicativa \(X_1\).

Na prática, o intercepto e a inclinação da reta de regressão populacional são desconhecidas. Portanto, devemos empregar dados para estimar ambos os parâmetros desconhecidos.

Contextualização e preparação da base de dados

A seguir, um exemplo do mundo real será utilizado. Queremos relacionar os resultados dos testes, \(score\), com a proporção aluno-professor, \(STR\) (student-teacher ratio), medida nas escolas californianas. A pontuação do teste é a média distrital de pontuações em leitura e matemática para alunos da quinta série.

Os dados vêm do conjunto de dados da California School (CASchools), do pacote AER, sigla para Applied Econometrics with R (Christian Kleiber e Zeileis 2022).

Depois de instalar o pacote com install.packages("AER") e anexá-lo com library(AER) o conjunto de dados pode ser carregado usando a função data() .

# instala o pacote AER (apenas uma vez)
## install.packages("AER")

## carrega o pacote AER 
library(AER)

# carrega o dataset para seu environment
data(CASchools)

Podemos observar as 6 primeiras observações do dataset com a função head

head(CASchools)
##   district                          school  county grades students teachers
## 1    75119              Sunol Glen Unified Alameda  KK-08      195    10.90
## 2    61499            Manzanita Elementary   Butte  KK-08      240    11.15
## 3    61549     Thermalito Union Elementary   Butte  KK-08     1550    82.90
## 4    61457 Golden Feather Union Elementary   Butte  KK-08      243    14.00
## 5    61523        Palermo Union Elementary   Butte  KK-08     1335    71.50
## 6    62042         Burrel Union Elementary  Fresno  KK-08      137     6.40
##   calworks   lunch computer expenditure    income   english  read  math
## 1   0.5102  2.0408       67    6384.911 22.690001  0.000000 691.6 690.0
## 2  15.4167 47.9167      101    5099.381  9.824000  4.583333 660.5 661.9
## 3  55.0323 76.3226      169    5501.955  8.978000 30.000002 636.3 650.9
## 4  36.4754 77.0492       85    7101.831  8.978000  0.000000 651.9 643.5
## 5  33.1086 78.4270      171    5235.988  9.080333 13.857677 641.8 639.9
## 6  12.3188 86.9565       25    5580.147 10.415000 12.408759 605.7 605.4

Análise Exploratória dos Dados

str()

str(CASchools)
## 'data.frame':    420 obs. of  14 variables:
##  $ district   : chr  "75119" "61499" "61549" "61457" ...
##  $ school     : chr  "Sunol Glen Unified" "Manzanita Elementary" "Thermalito Union Elementary" "Golden Feather Union Elementary" ...
##  $ county     : Factor w/ 45 levels "Alameda","Butte",..: 1 2 2 2 2 6 29 11 6 25 ...
##  $ grades     : Factor w/ 2 levels "KK-06","KK-08": 2 2 2 2 2 2 2 2 2 1 ...
##  $ students   : num  195 240 1550 243 1335 ...
##  $ teachers   : num  10.9 11.1 82.9 14 71.5 ...
##  $ calworks   : num  0.51 15.42 55.03 36.48 33.11 ...
##  $ lunch      : num  2.04 47.92 76.32 77.05 78.43 ...
##  $ computer   : num  67 101 169 85 171 25 28 66 35 0 ...
##  $ expenditure: num  6385 5099 5502 7102 5236 ...
##  $ income     : num  22.69 9.82 8.98 8.98 9.08 ...
##  $ english    : num  0 4.58 30 0 13.86 ...
##  $ read       : num  692 660 636 652 642 ...
##  $ math       : num  690 662 651 644 640 ...

summary()

summary(CASchools)
##    district            school                  county      grades   
##  Length:420         Length:420         Sonoma     : 29   KK-06: 61  
##  Class :character   Class :character   Kern       : 27   KK-08:359  
##  Mode  :character   Mode  :character   Los Angeles: 27              
##                                        Tulare     : 24              
##                                        San Diego  : 21              
##                                        Santa Clara: 20              
##                                        (Other)    :272              
##     students          teachers          calworks          lunch       
##  Min.   :   81.0   Min.   :   4.85   Min.   : 0.000   Min.   :  0.00  
##  1st Qu.:  379.0   1st Qu.:  19.66   1st Qu.: 4.395   1st Qu.: 23.28  
##  Median :  950.5   Median :  48.56   Median :10.520   Median : 41.75  
##  Mean   : 2628.8   Mean   : 129.07   Mean   :13.246   Mean   : 44.71  
##  3rd Qu.: 3008.0   3rd Qu.: 146.35   3rd Qu.:18.981   3rd Qu.: 66.86  
##  Max.   :27176.0   Max.   :1429.00   Max.   :78.994   Max.   :100.00  
##                                                                       
##     computer       expenditure       income          english      
##  Min.   :   0.0   Min.   :3926   Min.   : 5.335   Min.   : 0.000  
##  1st Qu.:  46.0   1st Qu.:4906   1st Qu.:10.639   1st Qu.: 1.941  
##  Median : 117.5   Median :5215   Median :13.728   Median : 8.778  
##  Mean   : 303.4   Mean   :5312   Mean   :15.317   Mean   :15.768  
##  3rd Qu.: 375.2   3rd Qu.:5601   3rd Qu.:17.629   3rd Qu.:22.970  
##  Max.   :3324.0   Max.   :7712   Max.   :55.328   Max.   :85.540  
##                                                                   
##       read            math      
##  Min.   :604.5   Min.   :605.4  
##  1st Qu.:640.4   1st Qu.:639.4  
##  Median :655.8   Median :652.5  
##  Mean   :655.0   Mean   :653.3  
##  3rd Qu.:668.7   3rd Qu.:665.9  
##  Max.   :704.0   Max.   :709.5  
## 

describe()

library(Hmisc)

describe(CASchools)
## CASchools 
## 
##  14  Variables      420  Observations
## --------------------------------------------------------------------------------
## district 
##        n  missing distinct 
##      420        0      420 
## 
## lowest : 61382 61457 61499 61507 61523, highest: 75051 75085 75119 75135 75440
## --------------------------------------------------------------------------------
## school 
##        n  missing distinct 
##      420        0      409 
## 
## lowest : Ackerman Elementary               Adelanto Elementary               Alexander Valley Union Elementary Alisal Union Elementary           Allensworth Elementary           
## highest: Woodlake Union Elementary         Woodside Elementary               Woodville Elementary              Wright Elementary                 Yreka Union Elementary           
## --------------------------------------------------------------------------------
## county 
##        n  missing distinct 
##      420        0       45 
## 
## lowest : Alameda      Butte        Calaveras    Contra Costa El Dorado   
## highest: Trinity      Tulare       Tuolumne     Ventura      Yuba        
## --------------------------------------------------------------------------------
## grades 
##        n  missing distinct 
##      420        0        2 
##                       
## Value      KK-06 KK-08
## Frequency     61   359
## Proportion 0.145 0.855
## --------------------------------------------------------------------------------
## students 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      391        1     2629     3378    139.9    164.0 
##      .25      .50      .75      .90      .95 
##    379.0    950.5   3008.0   7119.5  10351.1 
## 
## lowest :    81    92   101   103   104, highest: 19402 20927 21338 25151 27176
## --------------------------------------------------------------------------------
## teachers 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      374        1    129.1      163    7.076    9.000 
##      .25      .50      .75      .90      .95 
##   19.662   48.565  146.350  332.174  522.290 
## 
## lowest : 4.85    5       5.1     5.5     5.6    
## highest: 924.57  953.5   1051.58 1186.7  1429   
## --------------------------------------------------------------------------------
## calworks 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      411        1    13.25    11.93    0.745    1.996 
##      .25      .50      .75      .90      .95 
##    4.395   10.520   18.981   27.178   34.210 
## 
## lowest : 0       0.0506  0.08    0.1016  0.1517 
## highest: 52.2199 55.0323 58.7522 71.7131 78.9942
## --------------------------------------------------------------------------------
## lunch 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      407        1    44.71    31.23    2.416   10.082 
##      .25      .50      .75      .90      .95 
##   23.282   41.751   66.865   83.123   90.302 
## 
## lowest : 0       0.1239  0.1734  0.3033  0.5367 
## highest: 94.9712 97.7597 98.1308 98.6056 100    
## --------------------------------------------------------------------------------
## computer 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      270        1    303.4    384.5     15.0     25.0 
##      .25      .50      .75      .90      .95 
##     46.0    117.5    375.2    790.1   1248.6 
## 
## lowest :    0    4    7    8   10, highest: 2001 2232 2401 2889 3324
## --------------------------------------------------------------------------------
## expenditure 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      420        1     5312    677.4     4441     4616 
##      .25      .50      .75      .90      .95 
##     4906     5215     5601     6108     6540 
## 
## lowest : 3926.07 4016.42 4023.53 4079.13 4136.25
## highest: 7542.04 7593.41 7614.38 7667.57 7711.51
## --------------------------------------------------------------------------------
## income 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      337        1    15.32    7.013    7.751    8.930 
##      .25      .50      .75      .90      .95 
##   10.639   13.728   17.629   22.766   30.639 
## 
## lowest : 5.335   5.699   6.216   6.577   6.613  
## highest: 41.7341 43.23   49.939  50.677  55.328 
## --------------------------------------------------------------------------------
## english 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      372    0.998    15.77    18.77    0.000    0.000 
##      .25      .50      .75      .90      .95 
##    1.941    8.778   22.970   43.784   53.440 
## 
## lowest : 0         0.0633312 0.116414  0.132979  0.141643 
## highest: 76.6653   77.0058   80.1233   80.4201   85.5397  
## --------------------------------------------------------------------------------
## read 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      322        1      655    22.86    620.7    629.4 
##      .25      .50      .75      .90      .95 
##    640.4    655.8    668.7    680.5    688.5 
## 
## lowest : 604.5 605.5 605.7 608.9 610  , highest: 698.9 699.1 700.9 701.3 704  
## --------------------------------------------------------------------------------
## math 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      420        0      324        1    653.3    21.25    625.4    629.7 
##      .25      .50      .75      .90      .95 
##    639.4    652.4    665.8    676.8    685.0 
## 
## lowest : 605.4 609   612.5 613.4 616  , highest: 701.1 701.7 703.6 707.7 709.5
## --------------------------------------------------------------------------------

Cálculo das variáveis utilizadas

As duas variáveis nas quais estamos interessados não estão incluídas na base de dados. No entanto, é possível calcular ambas a partir dos dados fornecidos. Para obter a proporção aluno-professor (\(STR\)), basta dividir o número de alunos pelo número de professores. A pontuação média do teste (\(score\)) é a média aritmética da pontuação do teste de leitura e da pontuação do teste de matemática. O próximo trecho de código mostra como as duas variáveis podem ser construídas como vetores e como elas são anexadas a CASchools .

# tidyverse é útil para utilizar as principais funções de manipulação e limpeza de base de dados
library(tidyverse)

CASchools = CASchools %>% 
  mutate(STR = students/teachers,
         score = (read+math)/2)

Estatísticas

CASchools %>% 
  summarise(media_STR = mean(STR),
            media_score = mean(score),
            sd_STR = sd(STR),
            sd_score = sd(score))
##   media_STR media_score   sd_STR sd_score
## 1  19.64043    654.1565 1.891812 19.05335

Gráfico de Dispersão

CASchools %>% 
  ggplot(aes(x = STR, y = score)) +
  geom_point() +
  xlab("STR - Proporcao Aluno/Professor (X)") +
  ylab("Test Score (Y)")

Vemos que os pontos estão bem dispersos e que as variáveis parecem negativamente correlacionadas. Ou seja, esperamos observar pontuações mais baixas nos testes em turmas maiores.

Correlação

A função cor() pode ser usada para calcular a correlação entre dois vetores numéricos .

cor(CASchools$STR, CASchools$score)
## [1] -0.2263627

Estimando os coeficientes do modelo de Regressão Linear Simples por Mínimos Quadrados Ordinários

Os estimadores MQO (OLS, em inglês) da inclinação \(\beta_1\) e do intercepto \(\beta_0\) de regressão linear simples são

\[ \begin{align} \hat\beta_1 & = \frac{ \sum_{i = 1}^n (X_i - \overline{X})(Y_i - \overline{Y}) } { \sum_{i=1}^n (X_i - \overline{X})^2}, \\ \\ \hat\beta_0 & = \overline{Y} - \hat\beta_1 \overline{X}. \end{align} \]

e os valores previstos \(\widehat{Y}_i\) e o resíduo \(\hat{u}_i\) são

\[ \begin{align} \widehat{Y}_i & = \hat\beta_0 + \hat\beta_1 X_i,\\ \\ \hat{u}_i & = Y_i - \widehat{Y}_i. \end{align} \]

O intercepto estimado \(\hat\beta_0\), o parâmetro de inclinação \(\hat\beta_1\) e os resíduos (\(\hat u_i\)) são calculados a partir de uma amostra de \(n\) observações de \(X_i\) e \(Y_i\). Esses são estimadores populacionais desconhecidos de \(\beta_0\), \(\beta_1\) e \(u_i\)

Existem muitas maneiras de estimimar \(\hat\beta_0\) e \(\hat\beta_1\) no R. Vamos fazer manualmente e pela função lm()

Estimando Manualmente

\(\hat{\beta_1}\)

attach(CASchools) # permite utilizar as variáveis no dataset CASchools diretamente
#y = score
#x = STR

# computa o beta_1_hat
beta_1 <- sum((STR - mean(STR)) * (score - mean(score))) / sum((STR - mean(STR))^2)

beta_1
## [1] -2.279808

\(\hat{\beta_0}\)

beta_0 <- mean(score) - beta_1 * mean(STR)
beta_0
## [1] 698.9329

\(\hat{Y_i}\)

y_hat <- beta_0 + beta_1*STR

head(y_hat)
## [1] 658.1474 649.8608 656.3069 659.3620 656.3659 650.1308

\(\hat{u_i}\)

u_hat = score - y_hat

head(u_hat)
## [1]  32.65260  11.33917 -12.70686 -11.66198 -15.51590 -44.58079

Estimando pela função lm()

# estima o modelo e atribui o resultado a linear_model
linear_model <- lm(score ~ STR, data = CASchools)

# printa o output de linear_model
linear_model
## 
## Call:
## lm(formula = score ~ STR, data = CASchools)
## 
## Coefficients:
## (Intercept)          STR  
##      698.93        -2.28

Recuperando os valores de \(\hat{Y_i}\) e \(\hat{u_i}\) de linear_model

\(\hat{Y_i}\)

head(linear_model$fitted.values)
##        1        2        3        4        5        6 
## 658.1474 649.8608 656.3069 659.3620 656.3659 650.1308

\(\hat{u_i}\)

head(linear_model$residuals)
##         1         2         3         4         5         6 
##  32.65260  11.33917 -12.70686 -11.66198 -15.51590 -44.58079

Observe que os valores coincidem ao estimado manualmente!

Plotando o gráfico com a regressão

Vamos adicionar a linha de regressão estimada ao gráfico.

CASchools %>% 
  ggplot(aes(x = STR, y = score)) +
  geom_point() + 
  geom_smooth(method  = "lm") +
  xlab("STR - Proporcao Aluno/Professor (X)") +
  ylab("Test Score (Y)")

Medidas de Ajuste

Depois de ajustar um modelo de regressão linear, uma questão natural é quão bem o modelo descreve os dados. Visualmente, isto equivale a avaliar se as observações estão fortemente agrupadas em torno da linha de regressão. Tanto o coeficiente de determinação (\(R^2\)) quanto o erro padrão da regressão (\(SER\)) medem quão bem a linha de regressão OLS se ajusta aos dados.

Coeficiente de determinação (R^2)

\(R^2\), o coeficiente de determinação, é a fração da variância amostral de \(Y_i\) que é explicada por \(X_i\). Matematicamente, o \(R^2\) pode ser escrito como a razão entre a soma dos quadrados explicados e a soma dos quadrados totais.

A soma dos quadrados explicados (ESS) é a soma dos desvios quadrados dos valores previsto \(\hat{Y_i}\) da média de \(Y_i\). A soma dos quadrados totais (TSS) é a soma dos desvios quadrados de \(Y_i\) da sua média. Assim, temos

\[ \begin{align} ESS & = \sum_{i = 1}^n \left( \hat{Y_i} - \overline{Y} \right)^2, \\ TSS & = \sum_{i = 1}^n \left( Y_i - \overline{Y} \right)^2, \\ R^2 & = \frac{ESS}{TSS}. \end{align} \]

Dado que \(TSS = ESS + RSS\), podemos reescrever da seguinte forma:

\[ R^2 = 1- \frac{RSS}{TSS} \]

onde \(RSS\) é a soma dos resíduos quadrados, uma medida para os erros cometidos ao prever o \(Y\) através de \(X\). O \(RSS\) é definido como

\[ RSS = \sum_{i=1}^n \hat{u}_i^2 \]

\(R^2\) encontra-se entre \(0\) e \(1\). É fácil ver que um ajuste perfeito, ou seja, nenhum erro cometido ao ajustar a reta de regressão, implica em \(RSS = 0\) e, consequentemente, \(R^2 = 1\). Analogamente, se a nossa linha de regressão estimada não explicar qualquer variação no \(Y\), então temos \(ESS = 0\) e, consequentemente, \(R^2 = 1\).

Erro Padrão da Regressão (SER)

O erro padrão da regressão (\(SER\)) é um estimador do desvio padrão dos resíduos \(\hat{u}_i\). Assim, mede a magnitude de um desvio típico da linha de regressão, ou seja, a magnitude de um resíduo típico.

\[ SER = s_{\hat{u}} = \sqrt{s_{\hat{u}}^2} \ \ \ \text{onde} \ \ \ s_{\hat{u} }^2 = \frac{1}{n-2} \sum_{i = 1}^n \hat{u}^2_i = \frac{SSR}{n - 2} \]

Lembre-se que \(u_i\) é não observado. Por isso utilizamos contrapartes estimadas, os resíduos \(\hat{u}\).

Calculando as medidas de ajuste através do comando summary()

Ambas as medidas de ajuste podem ser obtidas usando a função summary() com um objeto lm fornecido como único argumento. Embora a função lm() imprima apenas os coeficientes estimados no console, summary() fornece informações adicionais predefinidas, como a regressão \(R^2\) e a \(SER\).

mod_summary <- summary(linear_model)
mod_summary
## 
## Call:
## lm(formula = score ~ STR, data = CASchools)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -47.727 -14.251   0.483  12.822  48.540 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 698.9329     9.4675  73.825  < 2e-16 ***
## STR          -2.2798     0.4798  -4.751 2.78e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18.58 on 418 degrees of freedom
## Multiple R-squared:  0.05124,    Adjusted R-squared:  0.04897 
## F-statistic: 22.58 on 1 and 418 DF,  p-value: 2.783e-06

O \(R^2\) na saída é chamado de R-quadrado múltiplo e tem um valor de \(0.051\). Por isso, \(5.1%\) da variância da variável dependente \(score\) explicada pela variável explicativa \(STR\). Ou seja, a regressão explica pouco da variância de \(score\), e grande parte da variação nas pontuações dos testes permanece inexplicada.

O \(SER\) é chamado de erro padrão dos resíduos e é igual \(18.58\). A unidade do \(SER\) é igual à unidade da variável dependente. Ou seja, em média, o desvio entre a pontuação real alcançada no teste e a linha de regressão é \(18.58\) pontos.

Calculando as medidas de ajuste manualmente

Agora, vamos verificar se summary() usa as mesmas definições quando os calculamos manualmente.

\(R^2\)

attach(CASchools)

# computa o R^2 
RSS <- sum(u_hat^2)
TSS <- sum((score - mean(score))^2)
R2 <- 1 - RSS/TSS

# printa o valor do R^2
R2
## [1] 0.05124009

\(SER\)

# computa o SER
n <- nrow(CASchools)
SER <- sqrt(RSS / (n-2))

# printa o valor do SER
SER
## [1] 18.58097

Descobrimos que os resultados coincidem. Observe que os valores fornecidos por summary() são arredondados para duas casas decimais.

Cálculo do Erro padrão de \(\beta_1\) (feito em aula)

TSS_x <- sum((STR - mean(STR))^2)
erro_padrao = SER/sqrt(TSS_x)

erro_padrao
## [1] 0.4798255