使用scipy.stats估算概率:求Python实现R中pnorm对应方案
解决方案:用Scipy计算答错不超过4道题的概率
首先明确问题:答错题目数量服从二项分布,参数为n=50(总题数),p=0.1(单题答错概率)。你在R中用的是正态近似法(基于中心极限定理),对应Python的实现如下:
1. 正态近似法(和R代码等价)
使用scipy.stats.norm的累积分布函数cdf,参数完全对应R中的pnorm:
loc:正态分布的均值(对应R的m),计算为n*p = 50*0.1 = 5scale:正态分布的标准差(对应R的s),计算为sqrt(n*p*(1-p)) = sqrt(4.5)- 连续性修正:原分布是离散的,要求答错≤4道,对应连续正态分布的4.5(和R中用4.5的逻辑一致)
代码示例:
import scipy.stats as stats import numpy as np # 正态近似计算 prob_approx = stats.norm.cdf(4.5, loc=5, scale=np.sqrt(4.5)) print(f"正态近似概率:{prob_approx:.4f}")
2. 精确二项分布计算
如果需要更精确的结果,可以直接用二项分布的累积分布函数:
# 精确二项分布计算 prob_exact = stats.binom.cdf(4, n=50, p=0.1) print(f"精确概率:{prob_exact:.4f}")
两种方法的结果会非常接近,正态近似在n较大、p不极端时效果很好。
内容的提问来源于stack exchange,提问作者Tracyrenee
相关产品推荐
相关产品推荐

