Buscar

Apostila Fatores na regressao linear

Prévia do material em texto

Fatores na regressão linear
Interpretação dos coeficientes das variáveis como fatores
No caso de preditores quantitativos, estamos mais ou menos confortáveis com a interpretação do
coeficiente do modelo linear como uma "inclinação" ou um "aumento unitário no resultado por unidade
de aumento na covariável". Esta não é a interpretação certa para as variáveis de fatores. Em particular,
a noção de inclinação ou mudança de unidade já não faz sentido quando se fala de uma variável
categórica. Por exemplo, o que significa "aumento de unidade em especialidade" ao estudar o efeito da
faculdade em ganancias futuras?
Para entender o que os coeficientes realmente significam, vejamos dados do nascimento e tentemos 
ajustar o modelo com a variável resposta peso ao nascer e variáveis independentes a raça da mãe e a 
idade da mãe.
# Ajuste do modelo de regressao 
birthwt.lm <- lm(birthwt.grams ~ race + mother.age, data = birthwt) 
 # Regression model summary 
summary(birthwt.lm)
Observe que existem dois coeficientes estimados para a variável de raca (raceother e racewhite). O que 
está acontecendo aqui?
Quando você coloca uma variável de fatores em uma regressão, você está permitindo uma 
interceptação diferente em todos os níveis do fator. Nesse exemplo, você está dizendo que deseja 
modelar birthwt.grams como
Essencialmente, você está dizendo que seus dados são divididos em 3 grupos raciais e você deseja 
modelar seus dados com a mesma inclinação que rege como o peso do nascimento muda com a idade 
da mãe, mas interceitos potencialmente diferentes. Veja um grafico sobre o que está acontecendo.
# Calcula intercetos para específicas racas 
intercepts <- c(coef(birthwt.lm)["(Intercept)"], coef(birthwt.lm)["(Intercept)"] + 
coef(birthwt.lm)["raceother"], coef(birthwt.lm)["(Intercept)"] + coef(birthwt.lm)
["racewhite"]) 
 lines.df <- data.frame(intercepts = intercepts, slopes = rep(coef(birthwt.lm)
["mother.age"], 3), race = levels(birthwt$race)) 
 qplot(x = mother.age, y = birthwt.grams, color = race, data = birthwt) + 
 geom_abline(aes(intercept = intercepts, slope = slopes, color = race), data = 
lines.df)
Como interpretamos os 2 coeficientes da raça? Para variáveis categóricas, a interpretação é relativa à
linha de base dada. A linha de base é apenas o nível que vem primeiro (aqui, "raça preta"). Por
exemplo, a estimativa de “raceother” significa que o intercepto estimado é 80,2. Dito em outra forma,
outras raças tem intercepto estimado de 80,2 a mais em comparação com as mães negras. Da mesma
forma, o intercepto estimado é 365,7 maior para as mães brancas do que as mães negras.
Outra maneira de interpretar é: entre mães da mesma idade, bebês de mães brancas nascem pesando em
média 365.7g a mais do que bebês de mães negras.
Como você já notou, não existe um coeficiente denominado "raceblack" no modelo estimado. Isso 
ocorre porque esse coeficiente é absorvido no termo geral (Intercepção).
Olhemos debaixo do capô. Usando a função model.matrix () em nosso objeto de modelo linear, 
podemos obter a matriz de dados que está subjacente à nossa regressão. Aqui estão as primeiras 20 
linhas.
Usando a função model.matrix() em nosso objeto de modelo linear, podemos obter a matriz de dados 
que está subjacente à nossa regressão. Aqui estão as primeiras 20 linhas.
Embora pensemos na regressão birthwt.grams ~ race + mother.age como sendo uma regressão em dois
variáveis (e uma intercepção), é realmente uma regressão em 3 variáveis (e uma intercepção). Isso 
ocorre porque o a variável race é representada como duas variáveis simuladas: uma para a raça== 
outras(raceother), e outra para raça == branca(racewhite).
Por que não há uma coluna para representar o indicador de raça == preto? Isso nos leva ao nosso 
problema de colinearidade. Por definição, temos 
Isso ocorre porque, para cada observação, uma e somente uma das variáveis dummy da raça(raceother)
será igual a 1. Assim, o grupo de 4 variáveis {raceblack, raceother, racewhite, (Intercept)} é
perfeitamente colinear, e não podemos incluir os 4 no modelo. O comportamento padrão em R é
remover o dummy correspondente ao primeiro nível do fator (aqui, raceblack) e manter o resto.
Termos de interação
Voltemos ao gráfico de linha de regressão que geramos acima.
qplot(x = mother.age, y = birthwt.grams, color = race, data = birthwt) + 
geom_abline(aes(intercept = intercepts, slope = slopes, color = race), data = 
lines.df)
 Compare o gráfico acima com o seguinte.
qplot(x = mother.age, y = birthwt.grams, color = race, data = birthwt) + 
stat_smooth(method = "lm", se = FALSE, fullrange = TRUE)
Neste caso,
não temos
apenas interceptos específicos da raça, mas também tangentes específicas para raça. O gráfico acima 
corresponde ao modelo:
Para especificar este modelo de interação em R, usamos a seguinte sintaxe
birthwt.lm.interact <- lm(birthwt.grams ~ race * mother.age, data = birthwt) 
summary(birthwt.lm.interact)
Agora temos novos termos que aparecem. Termos como racewhite: mother.age são desvios da 
inclinação da linha de base (o coeficiente de mother.age no modelo) da mesma maneira que os termos 
como racewhite são desvios da intercepção de linha de base. Este modelo diz que:
Em média, entre as mães negras, cada ano de idade adicional está associado a uma diminuição de 41,2 
g no peso ao nascer do bebê.
Para obter a inclinação para as mães brancas, precisamos adicionar o termo de interação à linha de 
base.
slope(racewhite) = slope(raceblack) + racewhite:mother.age = mother.age + racewhite:mother.age = 
21.4.
Essa estimativa de inclinação é positiva, o que concorda com o gráfico de regressão acima.