使用 scipy 的意外置信区间

Posted

技术标签:

【中文标题】使用 scipy 的意外置信区间【英文标题】:Unexpected confidence interval using scipy 【发布时间】:2021-07-06 10:40:56 【问题描述】:

我使用 scipy 计算了 95% 的置信区间,结果与我的预期不同。

我正在解决一个问题,其中有人掷骰子 20K 次并观察到 ​​3,932 个 6。我被要求为掷出 6 的概率建立 95% 的置信区间。 6 的数量遵循二项式分布,重复次数为 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

为什么会这样?我错过了什么吗?

【问题讨论】:

【参考方案1】:

这确实违反直觉,但事实证明interval()方法中的alpha参数是包含在区间边缘内的分布的概率。

因此,计算 95% 置信区间的正确方法是:

X.interval(alpha=0.95)
> (0.19109204017782955, 0.20210795982217045)

这违背了统计学中使用的标准命名法,所以我提出了issue on GitHub。显然它也会导致与其他方法的名称冲突。

【讨论】:

以上是关于使用 scipy 的意外置信区间的主要内容,如果未能解决你的问题,请参考以下文章

使用 scipy interpolate griddata 方法重新网格化数据时出现意外的内存错误

Ansible:模块执行期间意外失败“find()正好需要2个参数(3个给定)”

pycharm安装scipy,安装失败

curl_easy_perform 导致应用程序意外终止,服务器需要很长时间才能回复

计算几何德劳内三角剖分算法 | 利用 scatter 绘制散点图 | 实现外接圆生成 | scipy库的 Dealunay 函数 | 实战: A-B间欧氏距离计算

OpenWrt安装软件到外置存储(U盘/移动硬盘)