python - 如何用 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)?
解决方案
我假设您有兴趣使用正态分布计算一侧公差界限(基于您提到该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)
推荐阅读
- c# - 如何使用 linq 从 sql 中获取表?
- vert.x - Vert.x httpClient - 知道如何限制并发请求的数量吗?
- java - 为什么在使用 gradle 的子项目中使用杰克逊库依赖项?
- python - Python停止打印到输出文件
- python - 如何跳过txt文件的某个索引位置
- python - 如何删除散点图图例中的方括号?
- javascript - 如何修复通过 ajax 将 JS 数组传递给 PHP
- android - Android 11 wifi adb 错误“无法开始配对客户端”
- c++ - 遍历 Struct Array 给我错误请求非类类型 char
- c - 通过引用传递指针会使程序崩溃