【问题标题】:Calculating Standard Error Vba计算标准误差 Vba
【发布时间】:2023-09-28 12:54:01
【问题描述】:

我正在尝试使用 VBA 将标准误差函数添加到 excel 中,到目前为止我所拥有的只是标准偏差函数的变体。我在线获取了函数并对其进行了更改,因此在最后一行中将其除以总数据点的平方根。这似乎对我不起作用。

编辑:当我尝试在 Excel 电子表格上使用该函数时,无论数据集是什么,它都会显示为 0。

Function StdErr(numbers As Range) As Double
    Dim i As Integer
    Dim xbar As Double
    Dim x As Double
    xbar = WorksheetFunction.Average(numbers)
    For i = 1 To numbers.Count
        x = x + (numbers.Item(i).Value - xbar) ^ 2
    Next i
    SrdErr = (x / numbers.Count) / (Sqr(numbers.Count))
End Function

【问题讨论】:

  • 它不起作用,因为?你得到一个错误,或者它没有产生正确的值,会发生什么?
  • 当我尝试在 Excel 电子表格上使用该函数时,无论数据集是什么,它都会显示为 0。很抱歉没有澄清。
  • 您是否有任何理由不使用工作表函数来计算标准差?
  • 我正在尝试计算标准误差,这可以用现有的工作表函数完成,但不能只用一个函数完成。
  • 但是分子可以这样计算。另外——您确定要在标准差计算中使用总体规模而不是人口规模 - 1?

标签: vba excel excel-2010 standard-error


【解决方案1】:

你可以直接做:

Function StdErr(numbers As Range) As Double
    StdErr = Application.WorksheetFunction.StDev_S(numbers) / (Sqr(numbers.Count))
End Function

你的公式似乎有一个不正确的分母和总分子中缺少的平方根,至少你正在尝试做this formula

【讨论】:

    【解决方案2】:

    您的代码存在几个问题:(1) 最后一条语句拼错了函数名称 SrdErr 而不是 StdErr。这就是你得到 0 的原因。(2) 函数定义本身不正确,根据Microsoft documentation

    试试这个:

    Option Explicit
    
    Function StdErr(numbers As Range) As Double
        Dim StdDev As Double
        Dim Size As Integer
    
        StdDev = WorksheetFunction.StDev_S(numbers)
        Size = WorksheetFunction.Count(numbers)
    
        StdErr = StdDev / Sqr(Size)
    End Function
    

    包含Option Explicit 是个好主意,这样您就可以避免像这样愚蠢的拼写错误。

    【讨论】:

    • 谢谢!在我修正错字后,计算已关闭,但现在它可以工作了!
    【解决方案3】:

    你得到零的原因是因为一个错字。

    SrdErr = 最后应该是StdErr =

    【讨论】: