martes, 21 de abril de 2015

Eliminar outlier en Regresion Lineal

Si se tienen outlier en una regresion lineal, puede usarse la medida "Distancia de Cook" para identificar estos valores atípicos y eliminarlos.

La distancia de cook (tambien le dicen Cook's D), es una medida normalizada de la influencia que tiene cada observación sobre el promedio de todas las predicciones. Para detalle, ver referencias.


El siguiente scrip elimina los outlier y vuelve a generar la regresión de manera repetida hasta sacar todos los outlier del set de datos:

datos           <- read.csv('https://www.dropbox.com/s/r2ext2rlqwc65o1/cook.csv?dl=1')
eliminados      <- datos[datos$cant=='none',] # data.frame sin registros
modelo_lm       <- lm(cant ~ precio, datos)
max.cook        <- max(cooks.distance(modelo_lm))
umbral          <- 1 #tambien puede ser 4/n, donde n=total registros. ver ref.1
 
while (max.cook >= umbral) 
  { 
    datos$cook  <- round(cooks.distance(modelo_lm),4) 
    eliminados  <- rbind(eliminados, datos[datos$cook>umbral,])  
    datos       <- subset(datos,!datos$cook>umbral)
    datos       <- within(datos, rm(cook))
    modelo_lm   <- lm(cant ~ precio, datos)
    max.cook    <- max(cooks.distance(modelo_lm))
  } 



NOTA:
1. Deben eliminarse o imputarse todos los NA del set de datos, sino da error.
2. La tabla "eliminados" guarda todos los registros eliminados




Referencia:
1. http://en.wikipedia.org/wiki/Cook's_distance



No hay comentarios:

Publicar un comentario