在Python中估算分布参数的置信区间

3

你可以使用Bootstrap:https://dev59.com/questions/_6Lia4cB1Zd3GeqPh1to#66008548 - Marco Cerliani
2个回答

2
引导法可以用于估计样本中任何函数(如 np.meanst.genextreme.fit 等)的置信区间,而且有一个 Python 库:scikits.bootstrap
下面是问题作者相关 问题 的数据:
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]。

谢谢您的建议 - 但是如果我想为分布拟合指定一个参数,例如位置参数,该怎么办呢?我无法让它工作,例如 boot.ci(data, genextreme.fit(data, loc=0)) - 因为它说元组对象不可调用。 - dreab
@dreab,类似于boot.ci(data, lambda x: st.genextreme.fit(x, loc=29.7))这样的代码应该可以工作。 - Ulrich Stern

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


请使用 ppf 替代 _ppf - ev-br
1
@captain_M,这并没有提供一个“包含人口百分比的范围”; 它提供了mean参数的置信区间。 - Ulrich Stern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接