y<-vendas_casa$preco_mindice_teste<-createDataPartition(y, times =1, p =0.2, list =FALSE)conj_treino<-vendas_casa[-indice_teste,]conj_teste<-vendas_casa[indice_teste,]str(conj_treino)
library(psych)pairs.panels(conj_treino, method ="pearson", # metodo de correlação hist.col ="#00AFBB", density =TRUE, # mostra graficos de densidade ellipses =FALSE# mostra elipses de correlação)
Métodos de seleção de modelo
## Best Subset sem definir o número máx de subsets a ser avaliadoajusreg.comp<-regsubsets(preco_m~., data=conj_treino)summary(ajusreg.comp)
## Usando o lm para ajustar o modelo com as variáveis selecionadas pelo BICmod_bic<-lm(preco_m~idade+quartos+m2_princ+andares, data=conj_treino)summary(mod_bic)
Em termos de ajuste praticamente não há diferença nos resultados, sendo que o modelo obtido usando o BIC é bem mais enxuto. A parcimoniosidade é sempre bem vinda, mas é necessário ver como ficam os resultados com o conjunto de testes.
Avaliando Colinearidade
Uma investigação minuciosa da multicollinearidade envolverá a análise do valor do \(R^2\) que resulta da regressão de cada uma das variáveis explicativas contra todas as outras. A relação entre as variáveis explicativas pode ser julgada examinando uma quantidade chamada fator de inflacionário da variância (FIV) ou Variance Inflation Factor (VIF). Seja \(Rj~^{2}\) o quadrado do coeficiente de correlação múltipla que resulta quando a variável explicativa \(Xj~\) é ajustada contra todas as outras variáveis explicativas. Então o vif para \(Xj~\) é \(VIFj = 1 / (1-Rj~^{2})\)
A regra geral é que vifs superiores a 4 justificam novas investigações, enquanto VIFs superiores a 10 são sinais de multicollinearidade grave que requerem correção.
## Erro com conjunto de testesqrt(mean((conj_teste$preco_m-predict(mod_bic, conj_teste))^2))
#> [1] 41.56818
Aqui vemos que as diferença de resultados entre os dois modelos é muito pequena, mas o modelo com base no BIC é mais parcimonioso, então vamos usá-lo para fazer a previsão.
Comparando valor real vs previsão (conjunto de treino)
conj_treino$Previsoes<-predict(mod_bic, conj_treino)ggplot(conj_treino, aes(x=Previsoes, y=preco_m))+geom_point()+geom_abline(color ="darkblue")+ggtitle("Preço da Casa vs. Previsões do modelo linear")
Comparando valor real vs previsão (conjunto de teste)
conj_teste$Previsoes<-predict(mod_bic, conj_teste)ggplot(conj_teste, aes(x=Previsoes, y=preco_m))+geom_point()+geom_abline(color ="darkblue")+ggtitle("Preço da Casa vs. Previsões do modelo linear")