我有样本数据,假设服从正态分布,我想为其计算置信区间。
我已经找到并安装了 numpy 和 scipy 包,并让 numpy 返回平均值和标准差(numpy.mean(data) 数据是一个列表)。任何关于获得样本置信区间的建议将不胜感激。
原文由 Bmayer0122 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有样本数据,假设服从正态分布,我想为其计算置信区间。
我已经找到并安装了 numpy 和 scipy 包,并让 numpy 返回平均值和标准差(numpy.mean(data) 数据是一个列表)。任何关于获得样本置信区间的建议将不胜感激。
原文由 Bmayer0122 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是 shasan 代码的简化版本,计算数组平均值的 95% 置信区间 a
:
import numpy as np, scipy.stats as st
st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
但是使用 StatsModels 的 tconfint_mean
可以说是更好的:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
两者的基本假设是样本(数组 a
)是独立于标准差未知的正态分布绘制的(参见 MathWorld 或 [Wikipedia](https://en.wikipedia.org/wiki/Student’s_t-distribution) )。
对于大样本量 n,样本均值呈正态分布,可以使用 st.norm.interval()
计算其置信区间(如 Jaime 的评论中所建议)。但上述解决方案对于小 n 也是正确的,其中 st.norm.interval()
给出的置信区间太窄(即“假置信度”)。有关更多详细信息,请参阅我对类似问题的 回答(以及 Russ 的评论之一)。
这是一个示例,其中正确的选项给出(基本上)相同的置信区间:
In [9]: a = range(10,14)
In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)
In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)
In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)
最后,使用 st.norm.interval()
的错误结果:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)
原文由 Ulrich Stern 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
你可以这样计算。