4 votos

Desviación estándar ponderada del promedio

Para dos grupos (a y b) con números desiguales de observaciones (n=10 y n=30), he dado sus medias y desviaciones estándar. Calcular la media ponderada es bastante simple. Pero, ¿cómo puedo obtener la desviación estándar de esta media ponderada? Por favor, considera el siguiente conjunto de datos ficticio:

a <- rnorm(10,1,1)
b <- rnorm(30,1,1)
weight_a <- 1/4
weight_b <- 3/4

# Calcular la media ponderada
weighted_mean <- mean(a)*weight_a + mean(b)*weight_b
# esto da el mismo promedio que:
mean(c(a,b))

# Calcular la desviación estándar ponderada
weighted_sd <- sqrt(sd(a)^2*weight_a+sd(b)^2*weight_b)
# esto no da la misma desviación estándar que:
sd(c(a,b))

¿Qué estoy pasando por alto?

3voto

tylerharms Puntos 79

Estás confundiendo la adición de variables aleatorias con la concatenación de muestras (fácil de hacer, ¡me llevó un tiempo darme cuenta de por qué tu código no funcionaba!). Entonces para variables aleatorias independientes $X$ e $Y$ puedes escribir $\rm{Var}(aX+bY) = a^2\rm{Var}(X) + b^2\rm{Var}(Y)$, notando que los coeficientes están elevados al cuadrado. Esto se aplicaría (aproximadamente) a muestras de la siguiente manera

set.seed(1)
n <- 100
mu = 1
sigma = 1
a<-rnorm(n,mu,sigma)
b<-rnorm(n,mu,sigma)
weight_a <- 1/4
weight_b <- 3/4
sqrt(sd(a)^2*weight_a^2+sd(b)^2*weight_b^2)
[1] 0.7526849
sd(weight_a*a + weight_b*b)
[1] 0.7524718

Para la concatenación de muestras necesitas aplicar la fórmula para la varianza $\rm{Var}(X) = E(X^2) - (E(X))^2$, ajustada apropiadamente por el hecho de que estás usando muestras, es decir, multiplicar por $n/(n-1)$. Esto se ilustra con código de R a continuación.

suma2 = sum(a^2)
sumb2 = sum(b^2)
suma = sum(a)
sumb = sum(b)
sumc2 = suma2 + sumb2
sumc = suma + sumb
nc = n + n
(sumb2/n - (sumb/n)^2) * n/(n-1)
[1] 0.9175323
sd(b)^2
[1] 0.9175323
sumc2 = suma2 + sumb2
sumc = suma + sumb
(sumc2/nc - (sumc/nc)^2) * nc/(nc-1)
[1] 0.8632217
sd(c(a,b))^2
[1] 0.8632217

Cuando estás concatenando series ponderadas, los pesos pueden incorporarse naturalmente para dar la fórmula.

$$ \rm{Var}(\mathbf{w}) = \left(\frac{w_a^2 S_{aa} + w_b^2 S_{bb}}{n_a + n_b} - \left(\frac{w_a S_a + w_b S_b}{n_a + n_b}\right)^2 \right) \times \frac{n_a + n_b}{n_a + n_b -1}, $$

donde $\mathbf{w}$ es la serie formada al concatenar la serie $\mathbf{a}$ de longitud $n_a$ ponderada por $w_a$ y la serie $\mathbf{b}$ de longitud $n_b$ ponderada por $w_b$. $S_{aa}$ es la suma de los cuadrados de la serie $\mathbf{a}$, $S_{a}$ es la suma de la serie $\mathbf{a}$, y similar para $\mathbf{b}$.

Esto se ilustra en el siguiente código de R.

sumw2 = weight_a^2*suma2 + weight_b^2*sumb2
sumw = weight_a*suma + weight_b*sumb
(sumw2/nc - (sumw/nc)^2) * nc/(nc-1)
[1] 0.3314697
sd(c(weight_a*a, weight_b*b))^2
[1] 0.3314697

Nota que en el primer caso, adición, tuve que usar la misma longitud de series. Por conveniencia, continué con las mismas series. Pero el código utilizado para el segundo caso, concatenación, debería funcionar para series de diferentes longitudes.

Sin embargo, como @Peter Ellis menciona en su respuesta, el problema que estás tratando de resolver puede ser algo como una prueba t de dos muestras, donde asumes que las dos muestras son de la misma población, y por lo tanto la varianza subyacente de cada muestra es la misma. En este caso, deseas estimar la varianza poblacional. La fórmula para la varianza agrupada es bien conocida y se puede encontrar en wikipedia (wikipedia también proporciona una generalización a múltiples muestras).

2voto

Ted Puntos 854

No está del todo claro exactamente lo que quieres con tu desviación estándar ponderada, pero supondré que quieres la desviación estándar de una sola población de la cual has extraído dos muestras, y por alguna razón (por ejemplo, método de muestreo) quieres dar más peso a una de las muestras. El principal error que cometes es pensar que esto se puede crear de alguna manera a partir de las desviaciones estándar de las submuestras. Considera que la varianza de la población subyacente es un reflejo de la distancia promedio al cuadrado de cada punto desde la media combinada (no las dos medias de las dos submuestras, que es lo que te da sd(a) etc.). Por lo tanto, necesitas una estimación de esa media combinada; y necesitas un promedio ponderado del cuadrado de las distancias de cada punto desde esa media combinada.

1voto

auselen Puntos 121

Parece que tus cálculos matemáticos están incorrectos y hay algunos problemas conceptuales. Deja que $Z$ sea la compilación actual de tus dos distribuciones. $$ Z= 0.25A+0.75B \\ V[Z] = V[0.25A+0.75B] = 0.25^2V[A]+0.75^2V[B] + 2\cdot 0.25\cdot 0.75 \cdot Cov[A,B] $$ Y como ambos son iid tenemos $$ V[Z] = 0.25^2V[A]+0.75^2V[B] \\ \widehat{\mathrm{SD}}[Z] = \sqrt{0.25^2V[A]+0.75^2V[B]} $$ Ahora, R calculará la desviación estándar de $Z$ y se basará en esta varianza, pero en realidad no necesariamente será la $\widehat{\mathrm{SD}}[Z]$, creo, porque ese es un estimado sesgado.
Y esta es tu otra fórmula $$ \mathrm{SD}_{weighted} = \sqrt{0.25\hat{V}[A]+0.75\hat{V}[B]} \\ $$ Hay un par de cosas.
1. La fórmula no es correcta. Tus pesos deberían estar elevados al cuadrado.
2. La desviación estándar es un estimado sesgado si se estima a través de la varianza. Debido a esto, podría haberse realizado una corrección por R. Entonces, al cuadrado de esto ya no se garantiza que sea el mismo.
3. Aunque las distribuciones son iid, la covarianza de la muestra probablemente no sea cero. Es razonable esperar que los resultados no sean completamente independientes.

Así que esas son las razones por las que obtienes resultados diferentes. Incluso si corriges tu código y aplicas la fórmula correcta, probablemente seguirás teniendo diferencias menores debido al sesgo descendente corregido del estimador de SD.

¡Edit: lo siento, malinterpreté el código. Aún así está incorrecto ;)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X