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

时间:2015-07-17 17:16:30

标签: python matlab scipy

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

2 个答案:

答案 0 :(得分:1)

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

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%置信区间。

答案 1 :(得分:1)

引导程序可用于估计样本的任何函数(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),请参阅codehelp(boot.ci)st.genextreme.fit不是超高速。

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