python 计算置信区间_从样本数据计算置信区间

这里是shasan代码的缩写版本,计算数组a的平均值的95%置信区间:

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 )。

对于大样本量n,样本均值是正态分布的,可以使用st.norm.interval()来计算置信区间(如Jaime的评论中所build议的)。 但是,对于小的n,上面的解决scheme也是正确的,其中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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值