Стандартное отклонение одной переменной, взвешенной по второй переменной - PullRequest
0 голосов
/ 15 февраля 2020

Я хотел бы рассчитать стандартное отклонение переменной, которая взвешивает каждое наблюдение по второй переменной.

values <- c(100, 200, 300, 400, 200)
sizes <- c(12, 54, 1, 218, 63)

Как мне найти стандартное отклонение values с применением взвешивания на основе sizes

Ответы [ 2 ]

3 голосов
/ 15 февраля 2020

Мы можем использовать wtd.var из Hmisc, чтобы получить дисперсию, а затем взять квадрат root ее

sqrt(Hmisc::wtd.var(values, sizes))
#[1] 102.696

Как упоминалось @AaronMontgomery, normwt = TRUE может потребоваться для сумма весов равна длине «значений» после удаления NA (по умолчанию это FALSE)

sqrt(Hmisc::wtd.var(values, sizes, normwt = TRUE))
#[1] 138.3356v
2 голосов
/ 15 февраля 2020

То, что Hmisc довольно большое. В то время, когда мне потребовалось установить и загрузить этот пакет, который имеет несколько зависимостей, я сделал это, используя базу R. Сначала мне пришлось проверить формулу из Wiki. https://en.wikipedia.org/wiki/Weighted_arithmetic_mean:

enter image description here

Обратите внимание, что V1 является просто суммой весов. Затем я просто преобразовал это в R-речь:

x <- c(100, 200, 300, 400, 200)
w <- c(12, 54, 1, 218, 63)
mu <- weighted.mean(x, w)

sqrt(sum(w * ((x-mu)^2))/(sum(w) - 1))
[1] 102.696

Что согласуется с функцией wtd.var из Hmisc.

Конечно, если вам нужна дополнительная функциональность, такая как нормализация, оценка максимального правдоподобия или удаление NA для вас, затем go с функцией wtd.var. Но ОП не уточнил ничего из этого. Кроме того, если ваша скорость inte rnet низкая или вы хотите попытаться сделать что-то самостоятельно и учиться одновременно, используйте мой метод. :)

Редактировать 1 : И для надежности весов (normwt=TRUE):

> V1 <- sum(w)
> V2 <- sum(w^2)
> sqrt(sum(w * ((x-mw)^2))/(V1 - V2/V1))
[1] 138.3356

Редактировать 2 : Обработка пропущенных значений (na.rm=TRUE):

obs <- !is.na(x) & !is.na(w)
x <- x[obs]
w <- w[obs]

Затем используйте их вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...