Page cover

Detección y tratamiento de datos atípicos (univariante)

Los datos atípicos deben analizarse teniendo en cuenta todas las variables disponibles. Un valor que podría parecer inusual si se analiza de forma aislada (por ejemplo, una edad de 95 años) puede ser completamente coherente cuando se considera junto a otras variables (como el estado de salud, el entorno residencial, etc.). Por eso es importante combinar el enfoque univariante con el enfoque multivariante.

Enfoque univariante

Este enfoque analiza una sola variable a la vez para detectar valores que se alejan de lo esperado.

📐 Regla de Tukey

Para variables continuas, una de las reglas más comunes es la regla de Tukey, basada en el rango intercuartílico (IQR), que mide la dispersión de los valores centrales de una distribución.

  • El IQR se define como la diferencia entre el tercer cuartil (Q3) y el primer cuartil (Q1):

IQR=Q3Q1\text{IQR} = Q3 - Q1

A partir de este valor, se definen dos umbrales:

  • Atípico (outlier): Un valor se considera atípico si está fuera del rango:

[Q11.5×IQR,  Q3+1.5×IQR[Q1−1.5×IQR,  Q3+1.5×IQR
  • Extremo: Un valor se considera extremo si está aún más alejado:

[Q13×IQR,  Q3+3×IQR][Q1−3×IQR,  Q3+3×IQR]

Esta regla se representa visualmente en el diagrama de cajas (boxplot), donde:

  • Los "bigotes" del diagrama terminan en los límites definidos por ±1.5 × IQR.

  • Los puntos fuera de los bigotes se marcan como atípicos (normalmente con un punto o un asterisco).

Vamos a utilizar la base de datos ozone para ilustrar el tema. Esta conjunto de datos reúne 203 observaciones diarias tomadas en 1976 en Los Ángeles. Cada registro contiene la lectura máxima de ozono del día (Ozone_reading) y doce factores meteorológicos—entre ellos temperatura, viento y humedad—que sirven como predictores para modelizar la contaminación por ozono. El objetivo habitual de análisis es estimar o clasificar episodios de alta concentración de ozono.

Aquí la definición de variables:

Nombre en el CSV
Descripción y unidades

Month

Mes (1 = enero … 12 = diciembre)

Day_of_month

Día del mes (1 – 31)

Day_of_week

Día de la semana (1 = lunes … 7 = domingo)

Ozone_reading

Variable-objetivo: lectura diaria de la concentración máxima horaria de ozono (partes por millón, ppm)

Pressure_height

Altura de la superficie de 500 mbar en Vandenberg AFB (metros)

Wind_speed

Velocidad del viento en el aeropuerto LAX (mph)

Humidity

Humedad relativa en LAX (%)

Temperature_Sandburg

Temperatura en Sandburg, CA (°F)

Temperature_ElMonte

Temperatura en El Monte, CA (°F)

Inversion_base_height

Altura de la base de inversión térmica en LAX (pies)

Pressure_gradient

Gradiente de presión LAX → Daggett (mm Hg)

Inversion_temperature

Temperatura de la base de inversión en LAX (°F)

Visibility

Visibilidad horizontal en LAX (millas)

Leemos la base de datos y la inspeccionamos:

data <- read.csv("ozone.csv")  # import data

str(data)
summary(data)

Vamos a ver los outliers:

Vamos a estudiar la variable Pressure_height obteniendo los datos atípicos y extremos:

library(ggplot2)
ggplot(data, aes(y = Pressure_height)) +
  geom_boxplot(fill = "skyblue", outlier.color = "red", outlier.shape = 16)



###Los valores atípicos son:

outlier_values <- boxplot.stats(data$Pressure_height)$out  # outlier values.

out_ind <- which(data$Pressure_height %in% c(outlier_values))



###Los valores extremos son:

extreme_values <- boxplot.stats(data$Pressure_height,coef=3)$out  # extreme values.

ext_ind <- which(data$Pressure_height %in% c(extreme_values))




outlier_values
[1] 5410 5350 5470 5320 5440

En este diagram de cajas (boxplot) detectamos 5 outliers que son 5410, 5350, 5470, 5320 y 5440. La decisión de que hacer es más compleja, no siempre hay que borrar los datos atípicos o extremos, a veces basta con que seamos conscientes y en el posterior análisis tengamos en cuenta la influencia de los mismos. Otras veces dependerá del contexto del estudio y lo que queramos hacer después.

Además tenemos que tener en cuenta la proporción de datos atípicos o extremos en la muestra, es decir, si los datos representan menos de un 2-5% de la muestra, podríamos considerar borrarlos, si son más entonces los consideramos datos "típicos".

####Miramos la proporción de outliers
length(out_ind)/length(data$Pressure_height)*100
[1] 2.463054

En este ejemplo nos salen que los datos atípicos de la variable pressure height corresponden a un 2.5% de los datos, por tanto los considerarenos atípicos y pasarán a ser estudiados de forma bivariante en el siguiente apartado.

Además también es importante tener en cuenta si son datos aislados o son parte de una distribución un poco asimétrica. Si hacemos un histograma podemos ver un poco más si es solo la distribución que es asimétrica:

ggplot(data, aes(x=Pressure_height)) +
  geom_histogram(fill = "skyblue")

En este caso, vemos como los valores atípicos corresponden a una distribución asimétrica y seguramente en el estudio bivariante encontremos alguna asociación y terminemos no borrando los datos.

Last updated