如何用Python复现Excel中基于ChiDist实现的自定义Z函数
复现Excel VBA自定义Z函数的Python实现
关键函数对应说明
你之前实现出错的核心原因是Excel卡方函数的尾侧对应关系没对齐:
- Excel
ChiDist(x, 自由度)是右尾卡方分布概率,对应scipy的stats.chi2.sf(x, df)(生存函数,等价于1 - stats.chi2.cdf(x, df)) - Excel
NormInv(置信度, 均值, 标准差)对应scipy的stats.norm.ppf(conf, loc=均值, scale=标准差)
完整实现代码
from scipy import stats import math def z(Lambda, conf): # 第一步:Lambda四舍五入保留3位小数 lambda_rounded = round(Lambda, 3) if lambda_rounded < 400: # 循环i从0到500找第一个满足条件的值 for i in range(0, 501): df = 2 * i + 2 v = stats.chi2.sf(2 * lambda_rounded, df) if v >= conf: return i else: # Lambda≥400走正态分布分位逻辑 mean = lambda_rounded std = math.sqrt(lambda_rounded) return stats.norm.ppf(conf, loc=mean, scale=std)
测试验证
调用z(2, 0.95),返回结果为5,和Excel实测结果完全一致。
内容的提问来源于stack exchange,提问作者statsandmorestats
相关产品推荐
相关产品推荐

