首页 > 解决方案 > 如何用 scipy 计算单边公差区间

问题描述

我想根据给定具有已知 N(样本大小)、标准偏差和均值的数据集的正态分布来计算单边公差界限。

如果间隔是双向的,我会执行以下操作:

conf_int = stats.norm.interval(alpha, loc=mean, scale=sigma)

在我的情况下,我正在引导样本,但如果不是,我会参考 stackoverflow 上的这篇文章:使用 scipy 获取置信区间的正确方法并使用以下内容:conf_int = stats.norm.interval(0.68, loc=mean, scale=sigma / np.sqrt(len(a)))

您将如何做同样的事情,但将其计算为单边界限(95% 的值高于或低于 x<--bound)?

标签: pythonscipystatisticsconfidence-intervalreliability

解决方案


我假设您有兴趣使用正态分布计算一侧公差界限(基于您提到该scipy.stats.norm.interval函数作为您需要的两侧等价物的事实)。

那么好消息是,基于容差区间维基百科页面

基于非中心 t 分布的单边正态公差区间在样本均值和样本方差方面具有精确解。

(仅供参考:不幸的是,双面设置并非如此)

这个断言是基于这篇论文的。除第 4.8 段(第 23 页)外,还提供了公式。

坏消息是,我认为没有现成的scipy功能可以安全地调整并用于您的目的。

但是您可以自己轻松计算。您可以在 Github 存储库中找到包含此类计算器的信息,您可以从中找到灵感,例如我从中构建了以下说明性示例:

import numpy as np
from scipy.stats import norm, nct

# sample size
n=1000

# Percentile for the TI to estimate
p=0.9
# confidence level
g = 0.95

# a demo sample
x = np.array([np.random.normal(100) for k in range(n)])

# mean estimate based on the sample
mu_est = x.mean()

# standard deviation estimated based on the sample
sigma_est = x.std(ddof=1)

# (100*p)th percentile of the standard normal distribution
zp = norm.ppf(p)

# gth quantile of a non-central t distribution
# with n-1 degrees of freedom and non-centrality parameter np.sqrt(n)*zp
t = nct.ppf(g, df=n-1., nc=np.sqrt(n)*zp)

# k factor from Young et al paper
k = t / np.sqrt(n)

# One-sided tolerance upper bound
conf_upper_bound = mu_est + (k*sigma_est)

推荐阅读