使用带有对数数据的pymc进行非收敛跟踪

时间:2016-10-10 21:43:11

标签: python pymc mcmc

无法在我的简单多项式拟合程序中收敛。 我将举例说明' a'参数如下。 他们唯一可以想到的是,因为我使用了对数数据,并且对数可能性导致了问题? 我对此很陌生,我不确定。因此,我在这里指导我的问题。

这是我正在运行的代码:

  y=vc
  x=vt
  y=np.asarray(y)
  x=np.asarray(x)
  z = np.polyfit(x, y, 2) # the traditional chi-square fit
  print 'The chi-square result: ', z

  #The chi-square result: [ -0.63802271 5.83847593 -13.24021273]

  #priors
  sig = pymc.Uniform('sig', 0, 100, value=1)

  a = pymc.Uniform('a', -100, 100,value=0)
  b = pymc.Uniform('b', -100, 100,value=0)
  c = pymc.Uniform('c', -100, 100,value=0)


  #model
  @pymc.deterministic(plot=False)
  def mod_quadratic(x=x, a=a, b=b, c=c):
      return a*x**2 + b*x + c

  #likelihood
  y = pymc.Normal('y', mu=mod_quadratic, tau=1.0/sig**2, value=y, observed=True)

我有对数x和y值作为输入,我适合一个简单的x ** 2多项式。

我保持输入文件适度:

  import pymc,v
  # load the model file
  import numpy as np
  import matplotlib.pyplot as plt

  R = pymc.MCMC(v) # build the model
  R.sample(iter=100000,burn=20000,thin=100) # populate and run it
  print 'a ', R.a.value # print outputs
  print 'b ', R.b.value
  print 'c ', R.c.value
  print 'a ', R.a.stats()
  print 'b ', R.b.stats()
  print 'c ', R.c.stats()

跟踪不会收敛。如果我使用非对数数据,则跟踪收敛,但由于多项式不适合非对数数据,因此拟合是不可接受的。

sig trace window b trace window

为了节省空间,我只包含了b轨迹,但它们显示的是相同的非会聚。

有人看到我的缺陷吗?我确定我在这里做错了什么..

由于

0 个答案:

没有答案