Em outubro de 1973 ocorreu uma grande crise petrolífera fruto de embargo as nações apoiadoras de Israel durante a guerra do Yom Kippur (Smith, 2006). Os responsáveis por estes embargos foram os países membros da Organização dos Países Árabes Exportadores de Petróleo (OPAEP). As nações alvos deste embargo foram o Canadá, Japão, Holanda, Reino Unido, Estados Unidos e, posteriormente, Portugal, Rodésia e África do Sul.
Durante o período do embargo, que foi até março de 1974, o preço médio do barril de petróleo subiu de US$ 3,00 para aproximandamente US$ 12,00, o que representa um aumento de 3%. Foi neste período que a revista Motor Trend US de 1974 publicou em uma de suas edições uma tabela informativa contendo dados de consumo de combustível (necessário, visto o alto valor do combustível fóssil) jutamente com outros 10 aspectos de desempenhos para 32 veículos produzidos entre 1973 e 1974.
Estes são os dados que compõe a base mtcars, objeto de estudo deste trabalho. O estudo consistirá em verificar se as variáveis que compõe esta base podem explicar o consumo de combustível, medido em milhas por galão, dentro de um intervalo de confiança de 90%. Para esta análise foi utilizado o software R na versão 4.0.4.
Analisando a base mtcars, é possível observar que ela é composta por 32 observações e 11 colundas e apresenta as seguintes variáveis:
glimpse(mtcars)
Rows: 32
Columns: 11
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 1…
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4…
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7,…
$ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180…
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3…
$ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190,…
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00,…
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1…
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1…
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4…
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2…
Onde:
stat.desc(mtcars) %>%
mutate(medida = rownames(.)) %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
pivot_longer(!medida, names_to = "Caracteristicas", values_to = "Valor") %>%
pivot_wider(names_from = medida, values_from = Valor) %>%
select(-nbr.val, -nbr.null, -SE.mean, -var, -sum) %>%
rename(Valores_NA = nbr.na,
Minimo = min,
Maximo = max,
Intervalo = range,
Mediana = median,
Media = mean,
C.I.Media_0.95 = CI.mean.0.95,
Desvio_Padrao = std.dev,
Coef_Variacao = coef.var) %>%
kable(caption = "Tabela 1: Estatística univariada das variáveis") %>%
kable_paper("hover", full_width = F)
Caracteristicas | Valores_NA | Minimo | Maximo | Intervalo | Mediana | Media | C.I.Media_0.95 | Desvio_Padrao | Coef_Variacao |
---|---|---|---|---|---|---|---|---|---|
mpg | 0 | 10.400 | 33.900 | 23.500 | 19.200 | 20.0906 | 2.17295 | 6.02695 | 0.29999 |
disp | 0 | 71.100 | 472.000 | 400.900 | 196.300 | 230.7219 | 44.68466 | 123.93869 | 0.53718 |
hp | 0 | 52.000 | 335.000 | 283.000 | 123.000 | 146.6875 | 24.71955 | 68.56287 | 0.46741 |
drat | 0 | 2.760 | 4.930 | 2.170 | 3.695 | 3.5966 | 0.19277 | 0.53468 | 0.14866 |
wt | 0 | 1.513 | 5.424 | 3.911 | 3.325 | 3.2172 | 0.35277 | 0.97846 | 0.30413 |
qsec | 0 | 14.500 | 22.900 | 8.400 | 17.710 | 17.8487 | 0.64426 | 1.78694 | 0.10012 |
Para fins de análise, as variáveis vs, am, gear, carb e cyl serão tratadas como dummies. Embora gear, carb e cyl sejam numéricas, representam uma categoria de carros. Não tem como dizer que os carros possuem 3,69 marchas, em média. Ou os carros possuem uma média de 2,8 cilindros. Neste caso, uma tabela de frequência seria o mais adequado para analisar estas variáveis.
A figura 1 mostra a distribuição e correlações entre as variáveis quantitativas na base de dados. Esta figura evidencia que há um problema de multicolinearidade. Além disto, a vairável resposta aparenta não ter uma correlação linear entre algumas variáveis.
mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggpairs()
A figura 2 mostra uma série de gráficos de correlação entre a variável dependente e as variáveis explicativas. Em alguns casos é possível perceber que a correlação não é linear, como no caso de mpg e disp, por exemplo. Isto pode ser fruto de interação entre estas variáveis e alguma outra categórica, como gear.
p1 <- mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
select(-vs, -am, -cyl, -carb, -gear) %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
Quando suspeita-se que os coeficientes de inclinação podem variar entre as categorias da variável preditora então aconselha-se testar a interação entre as duas variáveis. Graficamente é possível ver estas interações ao colorir os pontos do gráfico de dispersão de acordo com a classe desejada.
Nas figuras 3 a 7, é possível ver que há interações com as variáveis dummies em muitos casos. Com as interações, é possível utilizar toda a variância do banco de dados para calcular o impacto destas variáveis categóricas nos coeficientes das retas, criando uma reta para cada situação.
p1 <- mtcars %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point(aes(color = as.factor(vs))) +
geom_smooth(aes(color = as.factor(vs)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
labs(color = "Motor Linha = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(aes(color = as.factor(vs))) +
geom_smooth(aes(color = as.factor(vs)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
labs(color = "Motor Linha = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point(aes(color = as.factor(vs))) +
geom_smooth(aes(color = as.factor(vs)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
labs(color = "Motor Linha = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point(aes(color = as.factor(vs))) +
geom_smooth(aes(color = as.factor(vs)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
labs(color = "Motor Linha = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point(aes(color = as.factor(vs))) +
geom_smooth(aes(color = as.factor(vs)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
labs(color = "Motor Linha = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
p1 <- mtcars %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point(aes(color = as.factor(gear))) +
geom_smooth(aes(color = as.factor(gear)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
labs(color = "Qtd. Marchas") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(aes(color = as.factor(gear))) +
geom_smooth(aes(color = as.factor(gear)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
labs(color = "Qtd. Marchas") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point(aes(color = as.factor(gear))) +
geom_smooth(aes(color = as.factor(gear)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
labs(color = "Qtd. Marchas") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point(aes(color = as.factor(gear))) +
geom_smooth(aes(color = as.factor(gear)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
labs(color = "Qtd. Marchas") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point(aes(color = as.factor(gear))) +
geom_smooth(aes(color = as.factor(gear)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
labs(color = "Qtd. Marchas") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
p1 <- mtcars %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point(aes(color = as.factor(cyl))) +
geom_smooth(aes(color = as.factor(cyl)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
labs(color = "Qtd. Cilindros") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(aes(color = as.factor(cyl))) +
geom_smooth(aes(color = as.factor(cyl)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
labs(color = "Qtd. Cilindros") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point(aes(color = as.factor(cyl))) +
geom_smooth(aes(color = as.factor(cyl)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
labs(color = "Qtd. Cilindros") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point(aes(color = as.factor(cyl))) +
geom_smooth(aes(color = as.factor(cyl)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
labs(color = "Qtd. Cilindros") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point(aes(color = as.factor(cyl))) +
geom_smooth(aes(color = as.factor(cyl)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
labs(color = "Qtd. Cilindros") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
p1 <- mtcars %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point(aes(color = as.factor(carb))) +
geom_smooth(aes(color = as.factor(carb)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
labs(color = "Qtd. Carburadores") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(aes(color = as.factor(carb))) +
geom_smooth(aes(color = as.factor(carb)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
labs(color = "Qtd. Carburadores") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point(aes(color = as.factor(carb))) +
geom_smooth(aes(color = as.factor(carb)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
labs(color = "Qtd. Carburadores") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point(aes(color = as.factor(carb))) +
geom_smooth(aes(color = as.factor(carb)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
labs(color = "Qtd. Carburadores") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point(aes(color = as.factor(carb))) +
geom_smooth(aes(color = as.factor(carb)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
labs(color = "Qtd. Carburadores") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
p1 <- mtcars %>%
ggplot(aes(x = disp, y = mpg)) +
geom_point(aes(color = as.factor(am))) +
geom_smooth(aes(color = as.factor(am)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e dist") +
labs(color = "Transm. Manual = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p2 <- mtcars %>%
ggplot(aes(x = hp, y = mpg)) +
geom_point(aes(color = as.factor(am))) +
geom_smooth(aes(color = as.factor(am)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e hp") +
labs(color = "Transm. Manual = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p3 <- mtcars %>%
ggplot(aes(x = drat, y = mpg)) +
geom_point(aes(color = as.factor(am))) +
geom_smooth(aes(color = as.factor(am)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e drat") +
labs(color = "Transm. Manual = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p4 <- mtcars %>%
ggplot(aes(x = wt, y = mpg)) +
geom_point(aes(color = as.factor(am))) +
geom_smooth(aes(color = as.factor(am)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e wt") +
labs(color = "Transm. Manual = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
p5 <- mtcars %>%
ggplot(aes(x = qsec, y = mpg)) +
geom_point(aes(color = as.factor(am))) +
geom_smooth(aes(color = as.factor(am)), method = "lm", se = F) +
ggtitle("Correlação entre mpg e qsec") +
labs(color = "Transm. Manual = 1") +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
theme(panel.border = element_blank(),
title = element_text(size = 10))
grid.arrange(p1, p2, p3, p4, p5, nrow = 2)
Conforme Moretin e Singer (2019), a reta de regrssão é dada por:
\(y_i = \alpha + \beta x_i + \epsilon_i , i = 1,...,n.\)
Onde:
Para modelar a base mtcars, será feito a utilização do método de stepwise com o critério de informação de Akaike para selecionar as variáveis mais importantes, além de considerar as interações vistas anteriormente.
Como visto na matriz de correlação, existe autocorrelação entre algumas variáveis explicativas quantitativas. Para identificar qual remover, vamos verificar o fator de inflação da variância (VIF). Segundo James et al. (2013), valores acima de 5 podem ser removidos para solucionar este problema. Entretanto, segundo a tabela 2, três variáveis possuem valores acima do recomendado. Como a exclusão de uma variável pode impactar na variância geral, será removido o que apresenta o maior valor e depois será verificado as variáveis restantes.
vif(lm(mpg ~ hp + drat + qsec + disp + wt, data = mtcars)) %>%
kable(caption = "Tabela 2: Fator de inflação das variância") %>%
kable_paper("hover", full_width = T)
x | |
---|---|
hp | 5.2018 |
drat | 2.3223 |
qsec | 3.1919 |
disp | 9.1109 |
wt | 7.0127 |
Após remover a variável disp, a variável hp ainda possui um valor elevado se aproximando muito de 5, conforme tabela 3. Logo, ela será excluida.
vif(lm(mpg ~ hp + drat + qsec + wt, data = mtcars)) %>%
kable(caption = "Tabela 3: Fator de inflação das variância ajustado") %>%
kable_paper("hover", full_width = T)
x | |
---|---|
hp | 4.9220 |
drat | 2.0355 |
qsec | 2.8761 |
wt | 3.5827 |
O modelo contará então com as variáveis quantitativas listadas na tabela 4.
vif(lm(mpg ~ drat + qsec + wt, data = mtcars)) %>%
kable(caption = "Tabela 4: Fator de inflação das variância após segundo ajuste") %>%
kable_paper("hover", full_width = T)
x | |
---|---|
drat | 2.0355 |
qsec | 1.0339 |
wt | 2.0821 |
Rodando o modelo com o procedimento stepwise temos que o modelo proposto não não possui significância estatística em quase nenhuma variável. Isso pode acontecer devido a variabilidade causada pela presença de uma variável e que não identificada pelo método stepwise. Como a variável wt não apresenta nenhuma significância estatística, ela será removida e depois o modelo será rodado novamente.
summary(modelo)
Call:
lm(formula = mpg ~ drat + carb + qsec + wt + gear + cyl + vs +
am + wt:gear + gear:cyl + wt:am, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-3.473 -0.971 0.000 0.896 3.047
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.84 24.32 0.98 0.346
drat 7.89 3.77 2.09 0.058 .
carb2 -5.27 2.88 -1.83 0.092 .
carb3 -7.08 3.61 -1.96 0.074 .
carb4 -9.35 5.11 -1.83 0.092 .
carb6 65.15 38.72 1.68 0.118
carb8 42.08 26.36 1.60 0.136
qsec 1.82 1.45 1.26 0.232
wt -1.43 2.11 -0.68 0.512
gear4 -689.48 445.71 -1.55 0.148
gear5 -504.61 351.19 -1.44 0.176
cyl6 5.97 4.37 1.37 0.197
cyl8 -51.41 32.08 -1.60 0.135
vs1 -64.52 37.01 -1.74 0.107
am1 698.38 441.50 1.58 0.140
wt:gear4 219.05 140.26 1.56 0.144
wt:gear5 104.40 80.45 1.30 0.219
gear4:cyl6 -61.46 38.04 -1.62 0.132
gear5:cyl6 NA NA NA NA
gear4:cyl8 NA NA NA NA
gear5:cyl8 172.13 95.74 1.80 0.097 .
wt:am1 -220.61 138.22 -1.60 0.136
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.32 on 12 degrees of freedom
Multiple R-squared: 0.943, Adjusted R-squared: 0.851
F-statistic: 10.4 on 19 and 12 DF, p-value: 0.0000918
Rodando um segundo modelo temos significância estatística em todas as variáveis quantitativas, mesmo que só nas interações. Embora alguma categoria da variável dummy não apresente significância estatística, ela não será removida. A significância estatística de alguma categoria está relacionada com qual variável está na casela de referência, além disto, a remoção de outra categoria fará com que a casela de referência contemple duas categorias, o que gera uma inconsistência no modelo. Este segundo modelo apresenta um R² de 0.959 e interações com as variáveis gear, cly e am.
Importante ressaltar que os NA gerados na regressão informam apenas que as interações observadas não adicionam informação ao modelo.
summary(modelo)
Call:
lm(formula = mpg ~ drat + carb + qsec + gear + cyl + vs + am +
qsec:gear + gear:cyl + qsec:am, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-2.974 -0.376 0.000 0.639 2.176
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.612 23.428 0.15 0.87985
drat 8.081 2.348 3.44 0.00438 **
carb2 -3.231 2.417 -1.34 0.20409
carb3 -4.603 3.051 -1.51 0.15524
carb4 -9.191 2.921 -3.15 0.00773 **
carb6 170.136 38.465 4.42 0.00069 ***
carb8 -19.308 4.605 -4.19 0.00105 **
qsec 0.394 0.904 0.44 0.67014
gear4 38.950 28.833 1.35 0.19979
gear5 -2349.529 507.052 -4.63 0.00047 ***
cyl6 4.624 3.006 1.54 0.14796
cyl8 -14.474 7.029 -2.06 0.06011 .
vs1 -19.891 5.104 -3.90 0.00183 **
am1 -134.278 37.897 -3.54 0.00360 **
qsec:gear4 -1.633 1.355 -1.21 0.24948
qsec:gear5 140.873 30.360 4.64 0.00046 ***
gear4:cyl6 -8.226 4.758 -1.73 0.10748
gear5:cyl6 NA NA NA NA
gear4:cyl8 NA NA NA NA
gear5:cyl8 337.798 73.622 4.59 0.00051 ***
qsec:am1 6.854 1.982 3.46 0.00424 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.88 on 13 degrees of freedom
Multiple R-squared: 0.959, Adjusted R-squared: 0.902
F-statistic: 16.9 on 18 and 13 DF, p-value: 0.0000032
Analisando os resíduos do modelo é possível verificar que os resíduos aparentam estar distribuídos de forma aleatória, estão acompanhando bem a linha de normalidade no gráfico Q-Q (embora alguns pontos estejam mais afastados) e possuem alguns veículos perto da linha de 0.5 na distância de Cook, sendo o Camaro Z28 o único a possuir este valor. Embora apresente outliers, eles não serão removidos devido a quantidade pequena da amostra.
Por fim, é possível comprovar a normalidade dos resíduos utilizando o teste de Shapiro-Wilk onde um p-value > 0.05 indica que a distribuição é gaussiana.
shapiro.test(modelo$residuals)
Shapiro-Wilk normality test
data: modelo$residuals
W = 0.948, p-value = 0.13
Das variáveis explicativas, as que mais contribuem para uma redução no mpg são possuir uma quinta marcha (\(\beta = - 2349,529\)), possuir câmbio manual (\(\beta = - 134,278\)), motor em linha (\(\beta = - 19,891\)) e possuir 8 carburadores (\(\beta = - 19,308\)). Uma hipótese que pode explicar este fato é que carros com essas características são mais modernos e eficientes, corroborando para um menor consumo de combustível.
Já as variáveis que mais contribuem para aumentar o consumo de milhas por galão são possuir 6 carburadores (\(\beta = 170,136\)), possuir 5 marchas e 8 cilindros (\(\beta = 337,798\)) ou possuir 4 marchas (\(\beta = 38,950\)).