【问题标题】:ChiDist excel function in pythonpython中的ChiDist excel函数
【发布时间】:2021-08-18 12:55:31
【问题描述】:

我有一个 excel 函数,我正在尝试将其复制到 python 中,但很难复制它。这是函数(VBA):

Function Z(Lambda, conf) As Integer
Application.Volatile
Lambda = Application.Round(Lambda, 3)
Select Case Lambda
Case Is < 400
For i = 0 To 500
'        v = Application.Poisson(i, Lambda, True)
v = Application.ChiDist(2 * Lambda, 2 * i + 2)
    If v >= conf Then
        Z = i
        Exit Function
    End If
  Next
Case Else
    Z = Application.NormInv(conf, Lambda, Sqr(Lambda))
End Select
End Function

如果我在 Excel 中运行 =z(2,95%),我会得到 z=5

我认为我可以使用:

from scipy import stats
stats.chi2.cdf

但并没有走得太远。

非常感谢任何帮助!

【问题讨论】:

    标签: python excel vba scipy poisson


    【解决方案1】:

    根据ChiDist docs,(另见CHIDIST),ChiDist 返回 Χ² 分布的右尾。 SciPy中对应的函数是scipy.stats.chi2sf(survival function)方法。在您的 Python 代码中,将 stats.chi2.cdf 更改为 stats.chi2.sf

    【讨论】:

    • 使用 stats.chi2.sf 得到与 .cdf 函数相同的结果
    • 您输入的conf95 还是0.95?请务必在 Python 代码中使用 0.95。您可以在问题中包含您的 Python 代码吗?
    【解决方案2】:

    设法让函数在 python 中工作 - 感谢 @Warren Weckesser 对 chi2.sf 的指导。

    from scipy.stats import norm, chi2
    
     def z(lamda_calc, prob):
    
    if lamda_calc < 400:
      z_calc = [i for i in range (0,500) if chi2.sf(2 * lamda_calc, 2 * i + 2) >= 
      prob][0]  
    else:
      z_calc = int(norm.ppf(prob,lamda_calc,sqrt(lamda_calc)))
    return z_calc
    
    print
    print ("z:'", z(1.4, 0.98))
    

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 2015-05-13
      • 2019-07-05
      相关资源
      最近更新 更多