Análise do Consumo de Combustível

true
04-18-2021

Introdução

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.

Análise exploratória dos dados

Analisando a base mtcars, é possível observar que ela é composta por 32 observações e 11 colundas e apresenta as seguintes variáveis:

Show code
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:

Show code
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)
Table 1: Tabela 1: Estatística univariada das variáveis
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.

Show code
mtcars %>% 
  select(-vs, -am, -cyl, -carb, -gear) %>% 
  ggpairs()
\label{fig:}Figura 1: Matriz de correlação com histograma e scatter plot das variáveis quantiativas

Figure 1: Figura 1: Matriz de correlação com histograma e scatter plot das variáveis quantiativas


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.

Show code
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)
\label{fig:}Figura 2: Correlação entre a variável dependente e demais variáveis explicativas

Figure 2: Figura 2: Correlação entre a variável dependente e demais variáveis explicativas


Análise das interações

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.

Show code
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)
\label{fig:}Figura 3: Interação das variáveis com o tipo do motor

Figure 3: Figura 3: Interação das variáveis com o tipo do motor


Show code
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)
\label{fig:}Figura 4: Interação das variáveis com a quantidade de marcha

Figure 4: Figura 4: Interação das variáveis com a quantidade de marcha


Show code
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)
\label{fig:}Figura 5: Interação das variáveis com a quantidade de cilindros

Figure 5: Figura 5: Interação das variáveis com a quantidade de cilindros


Show code
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)
\label{fig:}Figura 6: Interação das variáveis com a quantidade de carburador

Figure 6: Figura 6: Interação das variáveis com a quantidade de carburador


Show code
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)
\label{fig:}Figura 7: Interação das variáveis com o tipo de transmissão

Figure 7: Figura 7: Interação das variáveis com o tipo de transmissão

Modelagem

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.

Show code
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)
Table 2: Tabela 2: Fator de inflação das variância
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.

Show code
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)
Table 3: Tabela 3: Fator de inflação das variância ajustado
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.

Show code
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)
Table 4: Tabela 4: Fator de inflação das variância após segundo ajuste
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.

Show code
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.

Show code
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.

Show code
par(mfrow = c(2, 2))
plot(modelo)

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.

Show code
shapiro.test(modelo$residuals)

    Shapiro-Wilk normality test

data:  modelo$residuals
W = 0.948, p-value = 0.13

Conclusão

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\)).