【问题标题】:quick standard deviation with weights权重的快速标准偏差
【发布时间】:2013-08-09 10:53:30
【问题描述】:

我想使用一个函数,它可以快速为我提供矢量广告的标准偏差,允许我在矢量中包含元素的权重。即

sd(c(1,2,3))     #weights all equal 1
#[1] 1
sd(c(1,2,3,3,3))  #weights equal 1,1,3 respectively
#[1] 0.8944272

对于加权意味着我可以使用来自library(SDMTools)wt.mean() 例如

>  mean(c(1,2,3))
[1] 2
>     wt.mean(c(1,2,3),c(1,1,1))
[1] 2
> 
>     mean(c(1,2,3,3,3))
[1] 2.4
>     wt.mean(c(1,2,3),c(1,1,3))
[1] 2.4

wt.sd 函数似乎没有提供我想要的:

>   sd(c(1,2,3))
[1] 1
>     wt.sd(c(1,2,3),c(1,1,1))
[1] 1
>     sd(c(1,2,3,3,3))
[1] 0.8944272
>     wt.sd(c(1,2,3),c(1,1,3))
[1] 1.069045

我期待一个从我那里返回0.8944272 加权sd 的函数。最好我会在 data.frame 上使用它,例如:

data.frame(x=c(1,2,3),w=c(1,1,3))

【问题讨论】:

  • 请注意来自SDMTools::wt.var 的文档:“wt.var 是使用 GNU Scentific Library 的方程进行加权平均计算的无偏方差”。

标签: r standard-deviation


【解决方案1】:
library(Hmisc)
sqrt(wtd.var(1:3,c(1,1,3)))
#[1] 0.8944272

【讨论】:

    【解决方案2】:

    您可以使用rep 根据权重复制值。然后,可以为结果向量计算sd

    x <- c(1, 2, 3) # values
    w <- c(1, 1, 3) # weights
    
    sd(rep(x, w))
    [1] 0.8944272
    

    【讨论】:

    • +1 - 但看看Hmisc::wtd.var 的实现,它看起来更具可扩展性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2014-09-16
    • 2021-10-16
    相关资源
    最近更新 更多