我正在使用Richard McElreath 在R 中的“重新思考”包运行以下模型。每个物种(由species_dummy 表示)都有几棵与之相关的树(由索引[tree] 表示)。我想使用嵌套索引或以某种方式使用物种虚拟变量来允许 r_sigma_species 的两个不同值,每个物种一个。我不知道如何使索引工作。我不相信 McElreath 的 Statistical Rethinking 书中包含任何这样的例子。
我尝试了以下方法:
r_tree[tree_index] ~ dnorm(0, r_sigma_species[species_dummy]) ... 但这不起作用,因为重新考虑不会接受 ~ 右侧的索引
分别定义 r_sigma_oak 和 r_sigma_juniper(即两个物种),然后使用虚拟变量: r_sigma_tree[tree_index] ~ r_sigma_juniper * (1-species_dummy) + r_sigma_oak * species_dummy .... 但重新思考不会解释这一点,因为它没有根据[tree_index]自动过滤species_dummy的数据,所以数据行数不匹配。
试图组合索引,如 r_sigma_tree[tree_index][species_dummy] ~ r_sigma_species[species_dummy] ...重新思考似乎并不喜欢组合索引。
由于我已经有了使用“rethinking”包的模型版本,我现在不想切换到 rstan 或任何其他语法。
model <- map2stan(
alist(
avg_v_cent ~ dnorm(mu,sigma),
mu <- a * exp(r * day_cent),
a <- a_base + a_species*species_dummy + a_tree[tree_index],
r <- r_base + r_species*species_dummy + r_tree[tree_index][species_dummy],
a_base ~ dnorm(0,1),
a_species ~ dnorm(0,1),
a_tree[tree_index] ~ dnorm(0, a_sigma_tree),
r_base ~ dnorm(0,1),
r_species ~ dnorm(0,1),
r_tree[tree_index][species_dummy] ~ dnorm(0, r_sigma_species[species_dummy]),
sigma ~ dcauchy(0,1),
a_sigma_tree ~ dcauchy(0,1),
r_sigma_species[species_dummy] ~ dcauchy(0,1)
),
data=as.data.frame(dataset_2017_2.trim.test),
iter=2000,
warmup = 1000,
control = list(max_treedepth = 13, adapt_delta = 0.9),
chains = 1
)