viernes, 10 de abril de 2015

Mejores variables para Regresión

Si se quiere identificar las mejores variables para una regresión, se pueden crear diferentes modelos  con distintos grupos de variables seleccionadas de forma aleatoria, y luego elegir el modelo que tenga mejor "R Ajustado".

El resultado seria una tabla así:






















NOTA: Existen otros metodos estadisticos para seleccion de variable, como Backward Stepwise, Fordward Stepwise, Stepwise, etc.


Para lograr esto, puede usarse el siguiente script que combina variables de forma aleatoria para predecir el precio de un automóvil, y guarda el "R Ajustado" en cada iteración:
# MEJORES VARIABLES EN REGRESION LINEAL
 
#---------------------------------------------------------------
# Cargar datos desde dropbox
datos.url         <- 'https://www.dropbox.com/s/2kj20ulep93hssa/cars04.csv?dl=1'
datos             <- read.csv(datos.url)
 
 
#---------------------------------------------------------------
# Crea vectores con datos de variables
variables          <- names(within(datos,rm(Cost)))
total.variable     <- length(variables)
resultado          <- data.frame(r.ajustado=NULL, cant.variables=NULL,variables=NULL)
 
 
#---------------------------------------------------------------
# Iteracion de modelos lm con distintas variables
for (i in 1:50)
{
  cant.var.selec   <- sample(total.variable,1)
  variables.select <- variables[sample(total.variable,cant.var.selec)]    
  formula_lm       <- reformulate(termlabels = variables.select, response = 'Cost')
  modelo.lm        <- lm(formula_lm, datos)
  resultado        <- rbind(resultado,
                            data.frame(
                              r.ajustado     = summary(modelo.lm)$adj.r.squared,
                              cant.variables = length(variables.select),
                              variables      = paste(variables.select,collapse="+")))
  print(i)
}
 
 
#---------------------------------------------------------------
# Modelo final. Crea modelo con mejor set de variables 
variables.final     <- resultado[resultado$r.ajustado==max(resultado$r.ajustado),3]
formula.final       <- as.formula(paste("Cost ~ ", variables.final))
modelo.lm.final     <- lm(formula.final,  datos)

NOTA:
Para incluir variables logarítmicas, después de crear el vector "varaibles", agregar:
variables   <- c(variables,paste('log(',variables,')',sep=''))


No hay comentarios:

Publicar un comentario