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)) }
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