7 oct 2018

5 Métodos para la identificación de valores atípicos en R

Las series económicas pueden estar influidas por una serie de procesos no determinista, ni conocidos para el analista y que pueden incidir en que estas observaciones presenten estructura distinta al del resto de estas series, teniendo la capacidad de sesgar los resultados obtenidos y de afectar la capacidad de estimaciones de los modelos. Por tanto, antes de cualquier análisis estadístico es recomendable observar si existen datos atípicos que puedan incidir sobre los resultados. En el siguiente ejemplo se genera una variable aleatoria x con valores aleatorios de 100 edades de niños en un determinado centro escolar (x<-sample(5:16,100,replace=T)) y se introducen tres valores atípicos intencionalmente en las observaciones [10,21,33] correspondiente a las edades de 21,31 y 40 años, respectivamente.


> x<-sample(5:16,100,replace=T)
> x[c(10,21,33)]<- c(21,31,40)
> plot(x, type="b", pch=16)
Peña (nd) muestra como la inclusión de valores atípicos influye en la estimación de los parámetros en los modelos de series temporales estacionarios (ARMA), por lo que, dado que la posición de los atípicos será siempre desconocida, es recomendable identificarlos y estimar sus efectos, con el objetivo de eliminar sus efectos sobre la serie. Adicionalmente, en el enlace http://r-statistics.co/Outlier-Treatment-With-R.html se muestra como los datos atípicos pueden incidir en el análisis de regresión.

1. Identificación a partir de gráficos

El gráfico de caja (boxplot) constituye una primera opción al momento de analizar e identificar datos atípicos, el mismo presenta la mediana, el primer y tercer cuartil, además del 1.5*iqr o rango intercuartílico. En el caso de R, se puede verificar que la opción boxplot.stats(x)$out permite identificar los valores considerados como atípico y los valores utilizados para representar el boxplot.

> boxplot(x)
> boxplot.stats(x)
$`stats`
[1]  5.0  8.0 10.0 13.5 21.0

$n
[1] 100

$conf
[1]  9.131 10.869

$out
[1] 31 40

2. Normalización de variables: identificación a partir de la distancia de la media

Otra estrategia para la identificación de valores atípicos, consiste en normalizar la variable de interés de la forma tradicional, lo que permite obtener una nueva variable xz, que se interpreta como el número de unidades (positivas o negativas, dependiendo del signo) en que se una observación se encuentre alejada de la media de la serie.

> zx<- (x-mean(x))/sd(x) 

Una vez tenemos la variable normalizada, se consideran como valores atípicos las observaciones que se encuentren a  más de 3 desviaciones estándar del promedio (abs(zx)>3). En tal sentido, verifique que las próximas líneas de instrucciones muestran: i) la creación de la variable edad normalizada; ii) el uso de la función  which para identificar la posición de aquellas observaciones que cumplen la regla establecida (abs(zx)>3), en palabras, edades que se encuentren a más de 3 desviaciones desde su media; iii) por último, se utiliza el concepto de indexación, para acceder mediante las coordenadas de posición, a las edades que superan este margen [x[which(zx>3)]].  Este valor se deriva del hecho que Zx~N(0,1), por tanto, una observación que diste de 3 desviaciones de la media se considera como un valor atípico.

> which(abs(zx)>3)
[1] 21 33
> x[which(zx>3)]
[1] 31 40

> pch_site<-as.numeric(abs(zx)>3)
> plot(x, pch=pch_site, col = gray((1:4)/6)[abs(zx)])

> valcol <- (x + abs(min(x)))/max(x + abs(min(x)))
> plot(x, pch = 16, col = rgb(0, 0, valcol))

3. Identificación a partir de la prueba de Tukey

El problema de la identificación anterior es que los mementos a partir del cual se estandariza la variable, dependen del valor medio estimado, y por tanto, están incidido por los valores robustos. Una alternativa es utilizar una mediad de dispersión robusta a valores atípicos, y posteriormente establecer los rangos que permitan la identificación de los datos atípicos.  

La prueba Tukey propone establecer un rango a partir del rango intercuartílico (IQR=q3-q1), que no depende de los valores extremos. Este no es una regla del universo, más bien es una convención o acuerdo entre los estadísticos. Posteriormente, se establece un rango para determinar datos atípicos a partir de los datos que excedan el intervalo:

> q1 <- quantile(x, 0.25)
25%
  7

> q3 <- quantile(x, 0.75)
75%
 14

> iqr<-q3-q1 # Rango = IQR(x)
iqr
75%
  7
> ati_tukey <- x<(q1-1.5*iqr) | x>(q3+1.5*iqr)
> which(ati_tukey)
[1] 21 33

> x[ati_tukey]
[1] 31 40

4. Identificación a partir de la prueba de Tukey ajustada

Como observan en el ejemplo anterior, las observaciones identificadas como atípicas siguen siendo 21 y 33, donde se registran individuos con edades de 31 y de 40 años, por lo que, continua sin reconocer el valor de 21 años (insertado intencionalmente) como un atípico. Una alternativa práctica para  aumentar la sensibilidad de la prueba, es obtener los quintiles a partir del vector de variables originales recortado a partid de los valores extremos. Es decir, desprendernos de un porcentaje determinado de los valores extremos (por ejemplo el 5% de los datos colocados en el extremo en ambas colas de la distribución de la variable) y a partir de este vector recortado [xrecortada<-x[x>x5_95[1]  & x<x5_95[2]]], obtener los quantiles y el rango intercuartílico (quantile(xrecortada, 0.25)), por tanto, obteniendo un rango más estrecho. Ahora, se obtienen los valores anormales, utilizando el rango creado a partir del vector recortado (ati_tukeyR <- x<(q1a-1.5*iqra) | x>(q3a+1.5*iqra)).

> (x5_95 <- quantile(x, c(0.1, 0.90)))
10% 90%
  6  16
> xrecortada<-x[x>x5_95[1]  & x<x5_95[2]]
>
> (q1a <- quantile(xrecortada, 0.25))
25%
  9
> (q3a <- quantile(xrecortada, 0.75))
75%
 13

> iqra<-q3a-q1a # Rango = IQR(x)
> ati_tukeyR <- x<(q1a-1.5*iqra) | x>(q3a+1.5*iqra)
> which(ati_tukeyR)
[1] 10 21 33

> x[ati_tukeyR]
[1] 21 31 40

> plot(x, pch = 16, col = rgb(0, 0, valcol), ylim=c(-0,50))
> abline(h=c(q1-1.5*iqr,q3+1.5*iqr), col="blue")
> abline(h=c(q1a-1.5*iqra,q3a+1.5*iqra), col="red", lwd=3, lty=2)

Las líneas discontinuas representan el rango creado a partir del vector recortado

5. Identificación a partir de la distancia de Cooks

A partir del enfoque de regresión se puede utilizar el concepto de distancia de Cooks. Esta realizar la estimación del cambio de cada valor ajustado, con yhat sin la i-ésima observación. Por lo que, mide la influencia de cada observación. yhat(j) es el valor de la respuesta ajustada j, cuando se incluyen todas las observaciones; yhat(ji) es el valor de la observación j cuando no se incluye la observación i, P es el número de coeficientes en el modelo de regresión; por último, MSE es el error cuadrático medio del modelo con todas las observaciones.

Considere el siguiente ejemplo, donde solo se regresa la variable de interés en función de una constante (lm(x ~ 1)), por lo que, el ajuste condicionado del modelo corresponde al promedio.

> #Distancia de cooks
> #Fuente: codigos tomados de: http://r-statistics.co/Outlier-Treatment-With-R.html

> mod <- lm(x ~ 1)
> cooksd <- cooks.distance(mod)
> plot(cooksd, pch="*", cex=2)
> abline(h = 4*mean(cooksd, na.rm=T), col="red") 
> text(x=1:length(cooksd)+1, y=cooksd,
       labels=ifelse(cooksd>4*mean(cooksd, na.rm=T),
        names(cooksd),""),
        col="red")


“Una vez que se ha identificado la presencia de una observación atípica, se debe investigar su procedencia y si se concluye que se ha generado por errores en el muestreo se debe eliminar. En otro caso, es conveniente repetir el análisis estadístico sin la observación atípica y examinar las nuevas conclusiones. Si dichas conclusiones son semejantes a las obtenidas con ella, la observación puede mantenerse. Si, por el contrario, las conclusiones se modifican drásticamente, la observación atípica se denomina influyente. En este punto, el experimentador debe enjuiciar si es posible su aparición por un error experimental (eliminarlo) o si tal observación podría volver a aparecer (buscar modelos más complejos)” (Fuente: Universidad de Coruña).

Recesión plot en R usando ggplot (recession plot in r)

En el siguiente ejemplo se simular y replica -parcialmente- un ejemplo usado por el FMI para ilustrar la importancia del uso de series de ti...