Medianas ponderadas en R

La mediana de 1:3 es 2. Pero puede ser que queramos dar a 1:3 los pesos 2, 1, 2. En ese caso, el cálculo de la mediana sigue siendo sencillo (y sigue siendo 2). Pero la situación puede complicarse más.

Mientras los pesos sean enteros, todavía pueden usarse trucos:

x <- 1:3
pesos <- c(2,1,2)
median(rep(x, times = pesos ))

¿Pero qué hacemos cuando hay pesos fraccionarios? Bueno, en realidad, podemos ordenar:

n <- 1000
 
x <- runif(n)
pesos <- runif(n)
o <- order(x)
x.o <- x[o]
pesos.o <- pesos[o]
x.o[min( which(cumsum(pesos.o) > .5 * sum(pesos.o)) )]

Pero me parece más limpio usar el paquete quantreg:

library(quantreg)
rq(x ~ 1, tau = 0.5, weights=pesos)$coef

Y una coda matemática: es sabido de muchos que la mediana de x_1,\dots, x_n es el valor que minimiza la función f(u) = \sum |x_i|. La media ponderada miminizaría la función alternativa f(u) = \sum p_i |x_i| y la función rq de quantreg minimiza una función algo más complicada que esa que se reduce esencialmente a ella cuando tau = 0.5.

2 comentarios sobre “Medianas ponderadas en R

  1. Julio Navarro 5 agosto, 2013 17:53

    Egregio:

    Podrías ahondar, por favor, en el concepto que expones mas arriba, donde dices que «la mediana … es el valor que minimiza la función … » ? (fin de la cita). ¿Qué función es la que minimiza?

    Un abrazo.

    Julio navarro

  2. datanalytics 5 agosto, 2013 18:22

    ¿No la ves? Yo sí. Está escrita en LaTeX y «renderiza» como una imagen (que igual tu navegador no carga). Por referencia y por si acaso, es la suma de los valores absolutos de los x_i.

Los comentarios están desabilitados.