Mostrando entradas con la etiqueta modeest. Mostrar todas las entradas
Mostrando entradas con la etiqueta modeest. Mostrar todas las entradas

2015-02-09

Múltiples modas en R

Title En una entrada anterior calculamos la moda usando la función mlv del paquete modeest. En esta entrada veremos cómo obtener varias modas cuando el valor más frecuente no es único.

# Si modeest no está instalado y cargado
install.packages("modeest") 
library(modeest)

Problema

Cuando existen múltiples valores con la misma frecuencia, mlv devuelve la media de dichos valores. Por ejemplo en la columna Girth del data frame trees.

mlv(trees$Girth, method = "mfv")[1]
$M
[1] 13.325
El valor anterior no existe en nuestros datos. Es el promedio de las múltiples modas: 11, 11,4, 12,9 y 18.

Solución

Para obtener los valores correspondientes a las múltiples modas, emplearemos dos opciones: funciones del paquete base o del paquete dplyr.

  • Paquete base

# base-package
trees_nuevo <- subset(data.frame(table(trees$Girth)), Freq == max(Freq))
   Var1 Freq
7    11    2
11 11.4    2
14 12.9    2
26   18    2
mean(as.numeric(as.character(trees_nuevo$Var1))) # factor a numérico
[1] 13.325
  • Paquete dplyr

# dplyr
trees_nuevo <- trees %>% 
                count(Girth) %>%
                filter(n == max(n)) 
Source: local data frame [4 x 2]

  Girth n
1  11.0 2
2  11.4 2
3  12.9 2
4  18.0 2
mean(trees_nuevo$Girth)
[1] 13.325

Entradas relacionadas

2015-01-20

Calcular la moda en R usando el paquete modeest

Title R no dispone de una función en su paquete base que nos permita calcular la moda. La función mode devuelve el tipo o modo de almacenamiento de un objeto. Hay múltiples formas de calcular la moda haciendo uso de otras funciones de R. Sin embargo, ahora optamos por cargar el paquete modeest y usar la función mlv que devuelve el valor de un vector numérico.

# Si modeest no está instalado y cargado
install.packages("modeest") 
library(modeest)
Usamos como ejemplo el data frame trees.

mlv(trees$Volume, method = "mfv") # O mlv(trees$Volume, method = "discrete")
Mode (most frequent value): 10.3 
Bickel's modal skewness: 0.8709677 
Call: mlv.default(x = trees$Volume, method = "discrete") 
Si tan sólo queremos el valor más frecuente:

mlv(trees$Volume, method = "mfv")[1]

Calcular la moda de múltiples columnas

apply(trees, 2, mlv,  method = "mfv")
$Girth
Mode (most frequent value): 13.325 
Bickel's modal skewness: -0.1612903 
Call: mlv.default(x = newX[, i], method = "discrete") 

$Height
Mode (most frequent value): 80 
Bickel's modal skewness: -0.3870968 
Call: mlv.default(x = newX[, i], method = "discrete") 

$Volume
Mode (most frequent value): 10.3 
Bickel's modal skewness: 0.8709677 
Call: mlv.default(x = newX[, i], method = "discrete") 

Entradas relacionadas

Nube de datos