То, что Hmisc
довольно большое. В то время, когда мне потребовалось установить и загрузить этот пакет, который имеет несколько зависимостей, я сделал это, используя базу R. Сначала мне пришлось проверить формулу из Wiki. https://en.wikipedia.org/wiki/Weighted_arithmetic_mean:
Обратите внимание, что 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]
Затем используйте их вместо.