📊
Depuración de Datos - TFG Estadistica
  • Declaración de autoría
  • Tema 1: Análisis Exploratorio de Datos
    • Tipos de variables
      • Ejercicios
    • Codificación y Transformación
      • Ejercicios
    • Gráficos y Tablas
      • Ejercicios
    • Ejemplo de un análisis descriptivo básico para detectar errores e incongruencias
  • Tema 2: Control de integridad de los datos
    • Detección y tratamiento de datos atípicos
      • Ejercicios
    • Detección de datos atípicos y su tratamiento (automatización)
    • Detección y tratamiento de duplicados
    • Ejercicios
    • Ejemplo de detección y tratamiento de atípicos y duplicados
    • Detección de datos atípicos de forma Multivariante
  • Tema 3: Valores perdidos
    • Detección de datos perdidos
    • Tratamiento de datos perdidos
    • PRACTICA 3
  • Tema 4: Evaluación de las hipótesis de partida para el análisis de datos
    • Pruebas de Normalidad
      • Ejercicios
  • Bibliografía
    • 📚Bibliografía
Powered by GitBook
On this page
  1. Tema 2: Control de integridad de los datos

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

PreviousEjerciciosNextDetección y tratamiento de duplicados

Con la base de datos ozone de R comprueba si las variables tienen datos atípicos

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

Para ver si hay datos atípicos en todas las variables numéricas de esta base de datos, podemos pensar en automatizar la comprobación creando una función.

Esta sería la función propia outliers()

# Inspirado en: https://datascienceplus.com/identify-describe-plot-and-removing-the-outli0ers-from-the-dataset


outliers <- function(tt) {
  
var_name<-eval(parse(text = tt))
  
tot <- sum(!is.na(var_name))
  
na1 <- sum(is.na(var_name))
  
par(mfrow=c(1, 2), oma=c(0,0,3,0))
  
hist(var_name, main="All observations", xlab=NA, ylab=NA)
  
outlier <- boxplot.stats(var_name,coef = 3)$out
  
var_name <- ifelse(var_name %in% outlier, NA, var_name)
  
na2 <- sum(is.na(var_name))
  
hist(var_name, main=c("Outliers removed",paste0(round((na2 - na1) / tot*100,2),"%")), 
    xlab=NA, ylab=NA)
  title(paste0("Outlier Check for ",tt), outer=TRUE)
  
message("Outliers identified in ", tt, ": ", na2 - na1, " from ", tot, " observations")
message("Proportion (%) of outliers: ", (na2 - na1) / tot*100)
  
response <- readline(prompt="Do you want to replace outliers with NA? [yes/no]: ")
  
if(response == "y" | response == "yes"){
    
    eval(parse(text = paste0(tt, " <<- invisible(var_name)")))
    
    message("Outliers successfully removed", "\n")
  } 
else{
    
    message("Nothing changed", "\n")
  }
  
par(mfrow=c(1, 1), oma=c(0,0,0,0))

}

Y para usarla sería como una función cualquiera de R:

outliers("inputData$pressure_height")

# Aplicar la función a múltiples variables numéricas o enteras

numeric_integer_vars <- names(which(sapply(inputData, is.numeric) | sapply(inputData, is.integer)))

outliers_results <- lapply(paste0("inputData$", numeric_integer_vars), outliers)




Esta función proporciona datos extremos, modifica la función para detectar datos atípicos (sin ser extremos) y aplícala a las distintas variables, luego piensa si modificas o no la base de datos.

Piensa cuidadosamente si quitar o no los datos atípicos de tu base de datos. Un dato atípico no es un dato que se va de la media sino un dato que realmente es incorrecto.

10KB
ozone.csv
Page cover image