如何使用Python PyJAGS模型解释结果并绘制后验图?

时间:2018-11-11 14:29:06

标签: python

首先,我是python的新手,所以请原谅我可能犯的任何愚蠢的错误。

但是我使用PyJAGS分析此处提供的海平面数据: sea level data

数据的头(前5行)如下所示: sea level 5 rows

在我的代码中,我设置x = year_AD,y = sea_level_m,N = 130(数据中的行数)。

我正在使用的JAGS模型是PyJAGS文档中提供的用于线性回归的模型:

code = '''
model {
    for (i in 1:N) {
        y[i] ~ dnorm(alpha + beta * x[i], tau)
    }
    # Priors
    alpha ~ dunif(0, 1e-2)
    beta ~ dnorm(0, 1e-2)
    tau <- 1 / sigma^2
    sigma ~ dunif(0, 10)
}
'''

然后我像这样调用PyJAGS模型:

model = pyjags.Model(code, data=dict(x = x, y = y, N = N), chains = 4) 

# Number of iterations to remove at start and amount of thinning
model.sample(200, vars=[], thin = 2)

# Choose the parameters to watch and iterations:
samples = model.sample(1000, vars=['alpha', 'beta', 'sigma'])

但是,与在R中运行相同模型(使用R2jags)相比,我遇到的问题是结果似乎不存在。例如,PyJAGS模型的alpha和beta的平均值为:

  

alpha_mean = 0.004634,beta_mean = -0.000038

在R中:

  

alpha_mean = -3.062718,beta_mean = 0.001538208

当绘制后部图形时,事情变得不对劲了……这是python中的图形和所使用的代码:

# Creating a plot:
plt.scatter(x,y)
plt.ylabel('sea_level_m')
plt.xlabel('Year')
plt.plot(x, alpha_mean + beta_mean * x, c = "blue")

Python plot

但是,当在R中运行相同的代码时,我得到此(正确)图: R plot

关于我在做什么错的任何建议吗?

0 个答案:

没有答案