python - 使用 scipy 的意外置信区间
问题描述
我使用 scipy 计算了 95% 的置信区间,结果与我的预期不同。
我正在解决一个问题,有人掷骰子 20K 次并观察到 3,932 个 6。我被要求为掷出 6 的概率建立 95% 的置信区间。六点的数量遵循二项式分布,重复次数为 20K,成功概率为 3,932 / 20K。
# Number of observations
n_obs = 20000
# Observed proportion of successes
p_obs = 3932 / n_obs
# Observed standard deviation
s_obs = numpy.sqrt((p_obs * (1 - p_obs)) / n_obs)
如果我对这些参数使用正态近似值,则置信区间应为p_obs
± 1.96 * s_obs
。也就是说,介于 0.1911 和 0.2021 之间。
但是,如果我执行以下操作,它会返回一个完全不同的间隔。
# Declare normal random variable
X = scipy.stats.norm(loc=p_obs, scale=s_obs)
# Get interval
X.interval(alpha=0.05)
> (0.1964, 0.1968) # Different to what I was expecting
为什么会这样?我错过了什么吗?
解决方案
这确实违反直觉,但事实证明,alpha
该方法中的参数interval()
是包含在区间边缘内的分布的概率。
因此,计算 95% 置信区间的正确方法是:
X.interval(alpha=0.95)
> (0.19109204017782955, 0.20210795982217045)
这违背了统计中使用的标准命名法,所以我在GitHub 上提出了一个问题。显然,它也会导致与其他方法的名称冲突。
推荐阅读
- ios - ReplayKit 错误:代码=-5807“录制因多任务处理和内容调整大小而中断”
- javascript - 如何删除 HTML 源代码中的空链接(包含 href=“x”的空标签)?
- microsoft-graph-api - 授予用户使用 microsft Graph explorer 读取共享日历的权限
- php - mysqli bind_param 中可变长度参数列表的最佳实践
- trace - 实际上什么是 Opentracing API,它在跟踪系统中的作用是什么
- sql-server - 使用foreach循环时如何在SSIS中获取文件夹名称和文件名错误
- tensorflow - 如何将功能转换为 Python 对象?
- python - 正则表达式可以用于 sympy 中的替换吗?
- angular - TypeError:无法读取空角 6 的属性“邮政编码”
- java - 为什么是数组
kotlin 中主函数的选择参数类型?