我想使用一个能快速给出矢量广告标准偏差的函数,允许我在矢量中包含元素的权重。即。
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
对于加权方式,我可以使用wt.mean()
中的library(SDMTools)
,例如
> 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))
答案 0 :(得分:9)
library(Hmisc)
sqrt(wtd.var(1:3,c(1,1,3)))
#[1] 0.8944272
答案 1 :(得分:3)
您可以使用rep
根据权重复制值。然后,可以为结果向量计算sd
。
x <- c(1, 2, 3) # values
w <- c(1, 1, 3) # weights
sd(rep(x, w))
[1] 0.8944272