#' Suppression des outliers
#'
#' @param data le jeu de données
#' @param custom_cutoff permet de spécifier un cutoff arbitraire
#' @param graph pour représenter les points (TRUE ou FALSE)
#' @return dataframe ou plot : le jeu de données sans
#' les outliers ou la représentation graphique
#'
#' @export
#'
#' @examples
#' supp_outliers(data_ind_5y, graph = TRUE)
supp_outliers <- function(data, custom_cutoff = NULL, graph = FALSE) {
data_num <- data_numeric_only(data)
data_num <- data_num[, -which(names(data_num) %in% c("IDNUM", "MILEX"))]
# 0n garde uniquement les variables avec suffisamment de variabilité
t <- sapply(data_num, function(c) {
tt <- table(c)
max(tt) / length(tt) * 100
})
data_num <- data_num[, names(data_num) %in% names(which(t < 50))]
# On se base sur la distance de Mahalanobis
outliers <- mvoutlier::sign1(as.matrix(data_num))
cut_off <- custom_cutoff
if (is.null(cut_off)) {
q3 <- quantile(outliers$x.dist, .75)
q1 <- quantile(outliers$x.dist, .25)
cut_off <- q3 + 3 * (q3 - q1)
}
data_no_outliers <- data[which(outliers$x.dist <= cut_off), ]
# plot outliers
if (graph == TRUE) {
plot(outliers$x.dist)
return(abline(a = cut_off, b = 0, col = "red"))
}
return(data_no_outliers)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.