2

这可能是一个愚蠢的问题,但每当我使用 .plot() 函数时,它都会绘制两次摘要。任何人都知道,为什么会这样做以及我该如何阻止它? pystan.plot()

如您所见,如果这很重要,我正在使用 jupyter 笔记本。

任何 stan 型号都会发生这种情况(以及两个单独的安装)

这段代码会给我带来问题

import pystan 
import numpy as np
model_string = """
data { 
    int<lower=0> N;
    int y[N]; 
}
parameters {
    real<lower=0, upper=1> theta;
}
model {
    theta ~ beta(1,1);
    y ~ bernoulli(theta);
}
"""
N = 50
z = 10
y = np.append(np.repeat(1, z), np.repeat(0, N - z))
dat = {'y':y,
      'N':N}

fit = pystan.stan(model_code=model_string, data=dat, iter=1000, warmup=200, thin=1, chains = 3)
fit.plot()
4

2 回答 2

3

这是由于%matplotlib inline语句绘制的内容超出了您的预期。StanFit4Model.plot方法调用,当matplotlib.pyplot.subplot你的笔记本有%matplotlib inline. 然后该方法返回Figure对象。如果您不捕获它,您的笔记本会决定将其作为图像显示给您,而不是打印类型,然后您会得到双图。

您可以通过捕获输出来输出单个图Figure。更改您的代码

fit.plot()

改为

fig = fit.plot()
于 2016-07-18T22:54:01.913 回答
0

在 `.plot()' 之后放一个分号也可以解决问题。

从https://github.com/stan-dev/pystan/issues/230学到的

于 2018-09-03T11:21:30.970 回答