Ajuste de muitos modelos de regressão linear

May 14, 2011
By

This post was kindly contributed by Ridículas - go there to comment and to read the full post.

Pessoas que estão migrando de outro aplicativo para o R normalmente vivem perguntando “o R faz isso?, o R faz aquilo?…”. A resposta é “Sim, o R faz!”. Circula entre usuários o seguinte ditado: “não se pergunta o que o R faz, e sim como ele faz”.

Acontece que o R não é um software específico de ajuste de modelos de regressão, análise multivariada, análise de experimentos ou qualquer outra técnica. O R é geral. Os pacotes do R, por sua vez, são capazes de concentrar funções específicas. Um aplicativo que só faz ajuste de modelos de regressão tem espaço de sobra para incluir diversas opções, contem lista modelos para ajustar aos dados, enfim, mas tudo isso porque é destinado apenas para esse fim.

Por outro lado, no R é possível desenvolver procedimentos para qualquer tipo de tarefa. Se você quer ajustar uma lista de modelos e depois escolher o de maior R², ótimo! No você também consegue isso. Veja no CMR abaixo.

# gera dados
da <- data.frame(x=runif(100), z=5*rpois(100, lambda=7), w=runif(100, 50, 100))
da$y <- with(da, 12+0.1*x+0.05*z+0.34*w+0.2*sqrt(z)+0.1*x*w)+rnorm(100,0,0.1)

# vetor com as fórmulas específicando diferentes modelos lineares
form <- c(mod1=y~x, mod2=y~x+z, mod3=y~x+I(x^2), mod4=y~x+z+w)

# ajuste dos modelos
ajustes <- lapply(form, function(f){ m0 <- lm(f, data=da); m0 })

lapply(ajustes, summary) # quadro geral de estimativas e qualidade
lapply(ajustes, anova)   # quadro de anova sequencial
lapply(ajustes, coef)    # vetor de estimativas
sapply(ajustes, function(a){ summary(a)$r.squared})     # R²
sapply(ajustes, function(a){ summary(a)$adj.r.squared}) # R² ajustado
sapply(ajustes, function(a){ summary(a)$sigma})         # QMR
sapply(ajustes, deviance)                               # SQR
sapply(ajustes, df.residual)                            # GLR
lapply(ajustes, function(a){ summary(a)$coeff})         # tabela de estimativas
do.call(rbind, lapply(ajustes, function(a){ summary(a)$coeff})) # junta das tabelas
sapply(ajustes, fitted)    # valores ajustados
sapply(ajustes, residuals) # resíduos da análise
sapply(ajustes, vcov)      # matriz de covariância das estimativas
apply(sapply(ajustes, residuals), 2, shapiro.test) # normalidade dos resíduos

Sempre faça a avaliação das pressuposições do modelo antes de aplicar inferências. A escolha de modelo apenas pelo valor do R² não é aconselhada.


Tags: , , , , ,

Comments are closed.