估计python中分布参数的置信区间

Posted

技术标签:

【中文标题】估计python中分布参数的置信区间【英文标题】:Estimate confidence intervals for parameters of distribution in python 【发布时间】:2015-10-07 11:55:31 【问题描述】:

是否有内置函数可以为 python 包中的参数估计提供置信区间,还是我需要手动实现?我正在寻找类似于 matlabs gevfit http://www.mathworks.com/help/stats/gevfit.html 的东西。

【问题讨论】:

您可以使用引导程序:***.com/a/66008548/10375049 【参考方案1】:

如果您还没有,请查看scipynumpy。如果您对 MATLAB 有一定的了解,那么切换应该相对容易。我从this SO response 获取了这个快速的sn-p:

import numpy as np
import scipy as sp
import scipy.stats

def mean_confidence_interval(data, confidence=0.95):
    a = 1.0*np.array(data)
    n = len(a)
    m, se = np.mean(a), scipy.stats.sem(a)
    h = se * sp.stats.t.ppf((1+confidence)/2., n-1)
    return m, m-h, m+h

您应该能够根据自己的喜好自定义退货。与 MATLAB gevfit 函数一样,它默认使用 95% 置信区间。

【讨论】:

请使用ppf 而不是_ppf @captain_M,这不提供“包含人口百分比的范围”;它提供了mean 参数的置信区间。【参考方案2】:

bootstrap 可用于估计样本的任何函数(np.meanst.genextreme.fit 等)的置信区间,并且有一个 Python 库:scikits.bootstrap

这里是来自问题作者相关question的数据:

import numpy as np, scipy.stats as st, scikits.bootstrap as boot
data = np.array([ 22.20379411,  22.99151292,  24.27032696,  24.82180626,
  25.23163221,  25.39987272,  25.54514567,  28.56710007,
  29.7575898 ,  30.15641696,  30.79168255,  30.88147532,
  31.0236419 ,  31.17380647,  31.61932755,  32.23452568,
  32.76262978,  33.39430032,  33.81080069,  33.90625861,
  33.99142006,  35.45748368,  37.0342621 ,  37.14768791,
  38.14350221,  42.72699534,  44.16449992,  48.77736737,
  49.80441736,  50.57488779])

st.genextreme.fit(data)   # just to check the parameters
boot.ci(data, st.genextreme.fit)

结果是

(-0.014387281261850815, 29.762126238637851, 5.8983127779873605)
array([[ -0.40002507,  26.93511496,   4.6677834 ],
       [  0.19743722,  32.41834882,   9.05026202]])

引导程序在我的机器上大约需要三分钟;默认情况下,boot.ci 使用 10,000 次引导迭代 (n_samples),请参阅 code 或 help(boot.ci),并且 st.genextreme.fit 不是超快的。

boot.ci 的置信区间与 MATLAB 的 gevfit 的置信区间不完全匹配。例如,MATLAB 为第一个参数 (0.0144) 提供了一个对称的 [-0.3032, 0.3320]。

【讨论】:

感谢您的建议 - 但是如果我想为分布拟合指定一个参数,例如一个位置参数,我无法让它工作,例如boot.ci(data, genextreme.fit(data, loc=0)) - 正如它所说的元组对象不可调用。 @dreab,boot.ci(data, lambda x: st.genextreme.fit(x, loc=29.7)) 之类的东西应该可以工作。

以上是关于估计python中分布参数的置信区间的主要内容,如果未能解决你的问题,请参考以下文章

频率学派贝叶斯学派估计的区别

11.28spss

数理统计均值检验(双侧单侧)和区间估计

“万能钥匙”Bootstrap方法介绍2

估计量|估计值|矩估计|最大似然估计|无偏性|无偏化|有效性|置信区间|枢轴量|似然函数|伯努利大数定理|t分布|单侧置信区间|抽样函数|

二项分布置信限表,区间估计查表,附数据库插入语句