Estoy notando un comportamiento incoherente al aplicar la función median()
a marcos de datos. "Comportamiento incoherente" generalmente significa que no entiendo algo, por lo que espero que alguien esté dispuesto a aclarar esto por mí.Comportamiento impar con mediana()?
I se dan cuenta de que algunas funciones (por ejemplo, min()
, max()
) convierten la trama de datos en un vector y devuelven el valor correspondiente para todo el df mientras mean()
y sd()
devuelven un valor para cada columna. Si bien es un poco confuso, esas diferencias en el comportamiento no causan muchos problemas ya que la mayoría del código se rompería si se devuelve un escalar en lugar de un vector. Sin embargo, median()
parece ser inconsistente. Por ejemplo:
dat <- data.frame(x=1:100, y=2:101)
median(dat)
Devuelve un vector: [1] 50.5 51.5
Pero, a veces se rompe:
dat2 <- data.frame(x=1:100, y=rnorm(100))
median(dat2)
Devuelve: [1] NA NA Warning messages: 1: In mean.default(X[[1L]], ...) : argument is not numeric or logical: returning NA 2: In mean.default(X[[2L]], ...) : argument is not numeric or logical: returning NA
Sin embargo, median(dat2$x)
y median(dat2$y)
tanto el rendimiento como el resultado correcto.
también incluirá las siguientes:
dat3 <- data.frame(x=1:100, y=1:100)
dat4 <- data.frame(x=1:100, y=100:199)
En lo anterior, median(dat3)
vuelve [1] 50.5 NA
mientras median(dat4)
devuelve [1] 50.5 149.5
! Esperaría que ninguno de los dos funcionara. Entonces, claramente no entiendo cómo funciona la función median()
.
Además, funciones como sd
, mean()
, min()
y max()
todo ceden sus esperados (si aparentemente inconsistente) resultados en todos los casos anteriores.
Sé que puedo usar algo como sapply(dat2, median)
para obtener el resultado necesario, pero me pregunto por qué los dioses R decidieron implementar estas funciones estadísticas básicas de una manera que, al menos en apariencia, parece inconsistente. Sospecho que yo, y probablemente otros neófitos, probablemente no estoy entendiendo algún concepto fundamental, y agradecería su visión.
Ojalá hubiera leído R Inferno un poco más de cerca. Acabo de volver y mirar, y el autor dice: "El ejemplo de la mediana con marcos de datos es problemático ... no hay un método de marco de datos de la mediana. En este caso particular, obtiene la respuesta correcta, pero eso es un accidente. En otros casos, obtienes respuestas raras ". (p.54). Ahora estoy motivado para darle a R Inferno una lectura buena y sólida este fin de semana. –