python 中的 ChiDist excel 函数

ChiDist excel function in python

我有一个 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

但还差得远。

非常感谢任何帮助!

按照scipy.stats.chi2ChiDist docs, (see also CHIDIST), ChiDist returns the right tail of the Χ² distribution. The corresponding function in SciPy is the sf (survival function)方法。在您的 Python 代码中,将 stats.chi2.cdf 更改为 stats.chi2.sf

设法让函数在 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))