¿Cómo eliminar valores atípicos de varias columnas en R DataFrame?

En este artículo, discutiremos cómo eliminar valores atípicos de varias columnas en el lenguaje de programación R.

Para eliminar los valores atípicos de un marco de datos, utilizamos el método de rango intercuartílico (IQR). Este método utiliza los valores del primer y tercer cuantil para determinar si una observación es un valor atípico o no. Si una observación es 1,5 veces el rango intercuartílico mayor que el tercer cuartil o 1,5 veces el rango intercuartílico menor que el primer cuartil, se considera un valor atípico. 

 Eliminar valores atípicos de varias columnas en R

Para encontrar un valor atípico en el lenguaje R, usamos la siguiente función, donde primero calculamos el primer y tercer cuantil de la observación usando la función quantile(). Luego calculamos su diferencia como rango intercuartílico. Entonces, si una observación es 1,5 veces el rango intercuartílico mayor que el tercer cuartil o 1,5 veces el rango intercuartílico menor que el primer cuartil, devuelve verdadero.

Sintaxis:

detectar_valores atípicos <- función(x) {

 Cuantil1 <- cuantil(x, probs=.25)

 Cuantil3 <- cuantil(x, probs=.75)

 IQR = Cuantil3-Cuantil1

x > Q3 + (iqr*1,5) | x < Q1 – (iqr*1.5) }

Luego, una vez que se identifica el valor atípico, lo eliminamos probándolo con la función anterior.

Ejemplo 1:

Aquí hay un ejemplo, donde eliminamos los valores atípicos de tres columnas del marco de datos.

R

# create sample data frame
sample_data < - data.frame(x=c(1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 0),
                           y=c(4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 0),
                           z=c(1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 3))
print("Display original dataframe")
print(sample_data)
 
# create detect outlier function
detect_outlier < - function(x) {
 
    # calculate first quantile
    Quantile1 < - quantile(x, probs=.25)
 
    # calculate third quantile
    Quantile3 < - quantile(x, probs=.75)
 
    # calculate inter quartile range
    IQR = Quantile3-Quantile1
 
    # return true or false
    x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
 
# create remove outlier function
remove_outlier < - function(dataframe,
                            columns=names(dataframe)) {
 
    # for loop to traverse in columns vector
    for (col in columns) {
 
        # remove observation if it satisfies outlier function
        dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
    }
 
    # return dataframe
    print("Remove outliers")
    print(dataframe)
}
 
remove_outlier(sample_data, c('x', 'y', 'z'))

Producción:

Ejemplo 2:

Aquí hay un ejemplo, donde eliminamos los valores atípicos de cuatro columnas del marco de datos.

R

# create sample data frame
sample_data < - data.frame(x=c(-1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 10),
                           y=c(-4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 10),
                           z=c(-1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 13),
                           w=c(10, 0, 1, 0, 1, 0, 1, 0, 2, 2, 10))
print("Display original dataframe")
print(sample_data)
 
 
# create detect outlier function
detect_outlier < - function(x) {
   
    # calculate first quantile
    Quantile1 < - quantile(x, probs=.25)
   
    # calculate third quantile
    Quantile3 < - quantile(x, probs=.75)
   
    # calculate inter quartile range
    IQR = Quantile3-Quantile1
   
    # return true or false
    x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
 
# create remove outlier function
remove_outlier < - function(dataframe,
                            columns=names(dataframe)) {
   
    # for loop to traverse in columns vector
    for (col in columns) {
       
        # remove observation if it satisfies outlier function
        dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
    }
   
    # return dataframe
    print("Remove outliers")
    print(dataframe)
}
 
remove_outlier(sample_data, c('x', 'y', 'z', 'w'))

Producción:

Publicación traducida automáticamente

Artículo escrito por mishrapriyank17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *