计算卡方

Computing the ChiSquare

我正在 excel vba 中编写用户定义的函数。所以这个新功能:

  1. 接受 4 个输入值
  2. 一些计算生成8个数字。 (2 个数组 - 每个数组有 4 个数字)
  3. 进行卡方检验
  4. return 1输出值

代码:

Sub test()
    Dim A, B, C, D As Variant
    A = 33
    B = 710
    C = 54
    D = 656

    'Observed Value
    Dim O_A As Variant
    Dim O_B As Variant
    Dim O_V As Variant
    Dim O_D As Variant

    'Define Observer Value
    O_C_A = 'Some Calucation'
    O_C_B = 'Some Calucation'
    O_T_C = 'Some Calucation'
    O_T_C = 'Some Calucation'

    'Expected Value
    Dim E_C_A As Variant
    Dim E_C_B As Variant
    Dim E_T_C As Variant
    Dim E_T_D As Variant

    'Define Expected Value
    E_C_A = 'Some Calucation'
    E_C_B = 'Some Calucation'
    E_T_C = 'Some Calucation'
    E_T_D = 'Some Calucation'

    'Create array(2x2)
    Dim Chi_square_result As Variant

    Dim my_array(1, 1)
    my_array(0, 0) = O_C_Mesaurement
    my_array(0, 1) = O_C_Balance
    my_array(1, 0) = O_T_Measurement
    my_array(1, 1) = O_T_Balance

    Dim my_array2(1, 1)
    my_array2(0, 0) = E_C_Mesaurement
    my_array2(0, 1) = E_C_Balance
    my_array2(1, 0) = E_T_Measurement
    my_array2(1, 1) = E_T_Balance

    'Create a chi square test formula'
    Dim formula(1 To 5) As String
    formula(1) = "CHITEST("
    formula(2) = my_array
    formula(3) = ","
    formula(4) = my_array2
    formula(5) = ")"

    'Chi Square
    Chi_square_result = evaluate(Join(formula, ""))
end sub

它给出运行时错误“13”,保存类型不匹配。这是因为公式的串联。

如果您正在编写一个函数,那么您的格式有误。

Function Chi_square_result(A as Long, B as Long, C as Long, D as Long) as Double
    'All your manipulations here

    Chi_square_result = (Your math equation)

End Function

您也从未定义 my_array1,我假设它应该是您键入 'my_array' 的位置。我也不认为 Join 是您最好的选择。您正在尝试进行大量的数组操作,我认为您的尺寸正在吸引您。最好用更直接的方式来做。

评估需要工作表单元格范围。使用 Excel Application object or WorksheetFunction object 计算 VBA 内的函数。

这证明了。

Dim dbl As Double
Dim my_array1(1, 1)
my_array1(0, 0) = 1
my_array1(0, 1) = 2
my_array1(1, 0) = 3
my_array1(1, 1) = 4

Dim my_array2(1, 1)
my_array2(0, 0) = 2
my_array2(0, 1) = 3
my_array2(1, 0) = 4
my_array2(1, 1) = 5

dbl = Application.ChiTest(my_array1, my_array2)
Debug.Print dbl

VBE 的即时结果 window:0.257280177154182