如何解决VBA中的加权标准差
我正在尝试在VBA中编写加权标准差函数。假定有2个远程输入输出一个值。但是,它返回一个#value错误。
编辑:添加了worksheet.function
Public Function StDevWeighted(data As Range,weight As Range) As Double
'https://stats.stackexchange.com/questions/6534/how-do-i-calculate-a-weighted-standard-deviation-in-excel
Dim mean,top,bottom
mean = WorksheetFunction.SumProduct(data,weight) / WorksheetFunction.Length(data)
top = WorksheetFunction.SumProduct(weight,(data - mean) ^ 2)
bottom = ((WorksheetFunction.Length(data) - 1) / WorksheetFunction.Length(data)) * WorksheetFunction.Sum(weight)
StDevWeighted = WorksheetFunction.SQRT(top / bottom)
End Function
解决方法
因此,不幸的是,您必须自己计算每个项目的平方差,并将答案存储在临时数组中(有关原因,请参见注释)。我还没有检查过数学……高于薪水等级!
Public Function StDevWeighted(rngData As Range,rngWeight As Range) As Double
Dim dMean As Double
Dim dTop As Double
Dim dBottom As Double
Dim vData As Variant
vData = rngData
dMean = WorksheetFunction.SumProduct(rngData,rngWeight) / rngData.Count
Dim vSqDiff() As Variant
ReDim vSqDiff(1 To UBound(vData,1),1 To UBound(vData,2))
For r = 1 To UBound(vData,1)
For c = 1 To UBound(vData,2)
vSqDiff(r,c) = (vData(r,c) - dMean) ^ 2
Next c
Next r
dTop = WorksheetFunction.SumProduct(rngWeight,vSqDiff)
dBottom = ((rngData.Count - 1) / rngData.Count) * WorksheetFunction.Sum(rngWeight)
StDevWeighted = Sqr(dTop / dBottom)
End Function
PS。我直接使用调试器从电子表格中对此进行了测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。