首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pymc3拟合学生t分布

用pymc3拟合学生t分布
EN

Stack Overflow用户
提问于 2014-10-21 18:45:23
回答 1查看 1.2K关注 0票数 0

不知道我是不是在做傻事,或者pymc3有错误,但是为了使T分布符合正态分布,我得到了自由度(0.18到0.25,至少是4-5 )。当然,如果我尝试有合理自由度的T分布,比如3或5,我会得到同样的错误。

代码语言:javascript
复制
import pymc3 as pm
Nsample = 200000
tst = np.random.normal(loc = 1e4, scale = 5e4, size = 250)
with pm.Model() as m:
    mean = pm.Normal('mean',mu=0,sd = 1e5)
    sigma = pm.Flat('sigma') # I tried uniform, gamma, exponential
    df = pm.Flat("df") # the same
    v = pm.T("pl",nu=df,mu = mean, lam = 1.0/sigma, observed = tst)

    start = {'df':5,'mean': 1e4, 'sigma':5e4} #start = pm.find_MAP()

    step = pm.Metropolis()
    trace = pm.sample(Nsample, step,start=start, progressbar=True)

pm.traceplot(trace[100000:],vars = ['df', 'sigma', 'mean']);

你能提出一些解决办法(改变前项,抽样方法)吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-23 12:56:14

你为什么会期望看到大约4-5的df?df->inf的T分布等于正态分布.当我运行您的模型并执行:print trace['df'][10000:].mean()时,我得到了1.19876070951e+13,所以有些东西非常大。

您可能会看到一些不同的地方,其中一个原因是,如果您尝试在联合空间(以前在pymc3中是默认的)采样,则大都会取样器可能会失败。如果您最近还没有从主服务器上更新pymc3,请尝试再次更新并运行模型,因为Metropolis现在默认为非阻塞,并分别对每个变量进行示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26493997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档