8schools.stan 和 schools.stan 之间的 RStan 差异
RStan difference between 8schools.stan and schools.stan
几年前学过STAN,当时的教程模型是8schools.stan,后来忙了几年其他事情。我现在回来尝试重新学习 STAN。现在教程模型只是schools.stan。我有 运行 这两个相同基本模型的版本,将种子设置为相同的值。我得到两个非常相似但不完全相同的结果,但 lp__ 的值却截然不同。
8schools.stan 和 schools.stan 之间的唯一区别在于模型部分。两个文件的差异是:
[c:\Larry\R-Spaces\STAN]# diff 8schools.stan school.stan
7,18c17,18
eta ~ normal(0, 1);
y ~ normal(theta, sigma);
--
target += normal_lpdf(eta | 0, 1);
target += normal_lpdf(y | theta, sigma);
9a20
据我了解,这两个模型语句是等价的。我 运行 这两个模型使用教程中给出的相同 schools_dat 数据集,使用以下 STAN 调用,仅将 fit1 更改为 fit2 并将 STAN 文件从 8schools.stan 更改为 schools.stan 两个 运行s.
fit2 <- stan(
file = "schools.stan", # Stan program
data = schools_dat, # named list of data
chains = 4, # number of Markov chains
warmup = 1000, # number of warmup iterations per chain
iter = 2000, # total number of iterations per chain
cores = 4, # number of cores (using 2 just for the vignette)
refresh = 1000, # show progress every 'refresh' iterations
seed = 5
)
8所学校的成绩:
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu 8.07 0.12 5.12 -1.57 4.73 7.92 11.25 19.01 1839 1
tau 6.54 0.14 5.55 0.20 2.45 5.19 9.06 21.00 1491 1
eta[1] 0.37 0.01 0.92 -1.45 -0.24 0.39 0.98 2.12 4000 1
...
...
theta[8] 8.68 0.14 8.03 -5.68 3.79 8.15 12.92 26.57 3403 1
lp__ -4.79 0.07 2.51 -10.25 -6.37 -4.57 -3.04 -0.41 1202 1
和 schools.stan:
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu 8.04 0.19 5.25 -2.05 4.76 7.84 11.20 18.65 730 1.00
tau 6.34 0.20 5.46 0.22 2.33 5.00 8.86 21.39 724 1.01
eta[1] 0.35 0.02 0.94 -1.56 -0.28 0.38 0.99 2.12 3071 1.00
...
...
theta[8]8.43 0.15 7.63 -6.59 3.78 8.13 12.63 25.05 2742 1.00
lp__ -39.67 0.07 2.60 -45.31 -41.23 -39.45 -37.81 -35.25 1336 1.00
两个模型的结果非常接近,但不完全相同,除了 lp__,这是完全不同的。我怀疑这两个模型的编译略有不同,因此种子没有给出相同的值。但这两个模型语句真的相同吗?除了估计参数的微小差异——完全在抽样预期的可变性范围内(但请注意相同的种子),显着差异在于 lp__.
的值
这里发生了什么?提前感谢任何可以为我澄清这个问题的人。
最近,~
的版本删除了密度函数中的任何常数(正常情况下两个 pi 的平方根),而 +=
的版本保留了它们。参数估计不应有任何系统差异,但如果您不设置伪随机数生成器种子,它们将不相同。
几年前学过STAN,当时的教程模型是8schools.stan,后来忙了几年其他事情。我现在回来尝试重新学习 STAN。现在教程模型只是schools.stan。我有 运行 这两个相同基本模型的版本,将种子设置为相同的值。我得到两个非常相似但不完全相同的结果,但 lp__ 的值却截然不同。
8schools.stan 和 schools.stan 之间的唯一区别在于模型部分。两个文件的差异是:
[c:\Larry\R-Spaces\STAN]# diff 8schools.stan school.stan
7,18c17,18
eta ~ normal(0, 1);
y ~ normal(theta, sigma);
--
target += normal_lpdf(eta | 0, 1);
target += normal_lpdf(y | theta, sigma);
9a20
据我了解,这两个模型语句是等价的。我 运行 这两个模型使用教程中给出的相同 schools_dat 数据集,使用以下 STAN 调用,仅将 fit1 更改为 fit2 并将 STAN 文件从 8schools.stan 更改为 schools.stan 两个 运行s.
fit2 <- stan(
file = "schools.stan", # Stan program
data = schools_dat, # named list of data
chains = 4, # number of Markov chains
warmup = 1000, # number of warmup iterations per chain
iter = 2000, # total number of iterations per chain
cores = 4, # number of cores (using 2 just for the vignette)
refresh = 1000, # show progress every 'refresh' iterations
seed = 5
)
8所学校的成绩:
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu 8.07 0.12 5.12 -1.57 4.73 7.92 11.25 19.01 1839 1
tau 6.54 0.14 5.55 0.20 2.45 5.19 9.06 21.00 1491 1
eta[1] 0.37 0.01 0.92 -1.45 -0.24 0.39 0.98 2.12 4000 1
...
...
theta[8] 8.68 0.14 8.03 -5.68 3.79 8.15 12.92 26.57 3403 1
lp__ -4.79 0.07 2.51 -10.25 -6.37 -4.57 -3.04 -0.41 1202 1
和 schools.stan:
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu 8.04 0.19 5.25 -2.05 4.76 7.84 11.20 18.65 730 1.00
tau 6.34 0.20 5.46 0.22 2.33 5.00 8.86 21.39 724 1.01
eta[1] 0.35 0.02 0.94 -1.56 -0.28 0.38 0.99 2.12 3071 1.00
...
...
theta[8]8.43 0.15 7.63 -6.59 3.78 8.13 12.63 25.05 2742 1.00
lp__ -39.67 0.07 2.60 -45.31 -41.23 -39.45 -37.81 -35.25 1336 1.00
两个模型的结果非常接近,但不完全相同,除了 lp__,这是完全不同的。我怀疑这两个模型的编译略有不同,因此种子没有给出相同的值。但这两个模型语句真的相同吗?除了估计参数的微小差异——完全在抽样预期的可变性范围内(但请注意相同的种子),显着差异在于 lp__.
的值
这里发生了什么?提前感谢任何可以为我澄清这个问题的人。
最近,~
的版本删除了密度函数中的任何常数(正常情况下两个 pi 的平方根),而 +=
的版本保留了它们。参数估计不应有任何系统差异,但如果您不设置伪随机数生成器种子,它们将不相同。