Detección de datos atípicos y su tratamiento (automatización)
Con la base de datos ozone de R comprueba si las variables tienen datos atípicos
inputData <- read.csv("ozone.csv") # import dataPara 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:
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.
