计算分档列表的标准偏差

时间:2015-09-29 21:27:34

标签: excel math statistics

假设我有一个整数值列表,110。我没有实际的数据集,只是拥有每个值的数量。例如:

1  | 73
2  | 121
3  | 155
4  | 149
5  | 187
6  | 180
7  | 166
8  | 148
9  | 120
10 | 81

正如您所看到的,单独列出每个值(73 1,121 2等)是非常耗时的,但这是我知道如何使用的唯一方法STDEV()。

如何计算值的标准偏差?

3 个答案:

答案 0 :(得分:1)

可能的替代方案,假设1在A1中,在C1中:

=B1*(A1-SUMPRODUCT(A$1:A$10,B$1:B$10)/SUM(B$1:B$10))^2  

复制到C10。在B11中,复制到C11:

=SUM(B1:B10)  

在D11:

=SQRT(C11/(B11-1))  
  • 如果2.520979是错误的答案,请忘记上述内容!

Excel使用:

SO32854049 example

计算STDEV,上面只是将其分解为与可用数据格式相匹配的步骤。

答案 1 :(得分:0)

自定义用户定义函数(也称为UDF)可能是最便捷的路径。

UDF for exploding array in STDEV

A列的值已经爆炸为B列中的倍数进入D2:D1381(见下文)。

E2:G2中的STDEVSTDEV.PSTDEV.S公式,

=STDEV($D2:$D1381)
=STDEV.P($D2:$D1381)
=STDEV.S($D2:$D1381)

E3:G3中的UDF公式是,

=udf_STDEV_Exploded($A2:$A11, 1)   ' or =udf_STDEV_Exploded($A2:$A11)
=udf_STDEV_Exploded($A2:$A11, 2)
=udf_STDEV_Exploded($A2:$A11, 3)

UDF公式基于以下模块代码。

Function udf_STDEV_Exploded(rng As Range, Optional iTYP As Long = 1)
    Dim r As Long, v As Long, vVALs As Variant

    ReDim vVALs(0)
    For r = 1 To rng.Rows.Count
        For v = 1 To rng.Cells(r, 2).Value2
            vVALs(UBound(vVALs)) = rng.Cells(r, 1).Value2
            ReDim Preserve vVALs(0 To UBound(vVALs) + 1)
        Next v
    Next r
    ReDim Preserve vVALs(0 To UBound(vVALs) - 1)

    Select Case iTYP
        Case 1
            udf_STDEV_Exploded = WorksheetFunction.StDev(vVALs)
        Case 2
            udf_STDEV_Exploded = WorksheetFunction.StDev_P(vVALs)
        Case 3
            udf_STDEV_Exploded = WorksheetFunction.StDev_S(vVALs)
        Case Else
            'do nothing
    End Select
End Function

我添加了一个使用STDEVSTDEV.PSTDEV.S函数处理数组的选项。 STDEV 功能是默认设置。

<强>附录

将A2:B11中的值扩展为工作表上的长列值的代码是,

Sub stdev_vals()
    Dim rw As Long, f As Long, n As Long

    With Worksheets("Sheet1")
        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            .Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Resize(.Cells(rw, 2).Value2, 1) = .Cells(rw, 1).Value2
        Next rw
    End With
End Sub

答案 2 :(得分:0)

首先计算平均值(此处标记为THE_AVG):

=SUM(BIN_NUM*REPEATS)/SUM(REPEATS)

作为数组公式输入(CTRL-SHIFT-ENTER)。然后计算标准差:

=SQRT(SUM((BIN_NUM-THE_AVG)^2*REPEATS)/(SUM(REPEATS)-1))

再次作为数组公式输入。如果需要,可以将两个计算合并为一个公式:

=SQRT(SUM((BIN_NUM-SUM(BIN_NUM*REPEATS)/SUM(REPEATS))^2*REPEATS)/(SUM(REPEATS)-1))

在这些公式中,BIN_NUM表示具有bin编号的单元格范围(例如A1:A10),REPEATS表示每个bin中具有计数的单元格范围(例如B1:B10)。

希望有所帮助