我想使用一个函数,可以快速地为向量提供标准差,并允许我包括向量中元素的权重。例如:
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
的函数。最好能在像下面这样的数据框上使用:
data.frame(x=c(1,2,3),w=c(1,1,3))
SDMTools::wt.var
的文档:“wt.var 是使用 GNU 科学库方程计算的加权平均值计算的无偏方差”。 - Roland