R中"rstanarm"包中分类变量的独特截距方法
Unique intercepts approach for categorical variables in "rstanarm" package in R
背景:
McElearth (2016) 在他的 rethinking book 第 158-159 页中,使用索引变量而不是虚拟编码对名为 "clade" 的 3 类变量进行预测 "kcal.per.g"(线性回归)。
问题: 我想知道我们是否可以在 "rstanarm"
中应用相同的方法?我在下面为可能的演示提供了数据和 R 代码。
library("rethinking") # A github package not on CRAN
data(milk)
d <- milk
d$clade_id <- coerce_index(d$clade) # Index variable maker
#[1] 4 4 4 4 4 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 # index variable
# Model Specification:
fit1 <- map(
alist(
kcal.per.g ~ dnorm( mu , sigma ) ,
mu <- a[clade_id] ,
a[clade_id] ~ dnorm( 0.6 , 10 ) ,
sigma ~ dunif( 0 , 10 )
) ,
data = d )
使用 rstanarm 包最类似的方法是
library(rstanarm)
fit1 <- stan_glmer(kcal.per.g ~ 1 + (1 | clade_id), data = milk,
prior_intercept = normal(0.6, 1, autoscale = FALSE),
prior_aux = exponential(rate = 1/5, autoscale = FALSE),
prior_covariance = decov(shape = 10, scale = 1))
但是,由于以下原因,这并不完全相同:
sigma
上的有界统一先验没有实现,因为它们不是一个好主意,所以我使用期望为 5 的指数分布来代替
- 固定
a
的标准偏差也没有实现,所以我使用了期望为 10 的伽马分布
- rstanarm(和lme4)中的分层模型被参数化为与通用参数有偏差,因此不是使用 0.6 的期望值
a
,我对全局截距使用了 0.6 的期望,a
上的先验是正常的,期望为零。这意味着您需要调用 coef(fit1)
而不是 ranef(fit1)
来查看 "intercepts",因为它们在原始模型中被参数化。
背景: McElearth (2016) 在他的 rethinking book 第 158-159 页中,使用索引变量而不是虚拟编码对名为 "clade" 的 3 类变量进行预测 "kcal.per.g"(线性回归)。
问题: 我想知道我们是否可以在 "rstanarm"
中应用相同的方法?我在下面为可能的演示提供了数据和 R 代码。
library("rethinking") # A github package not on CRAN
data(milk)
d <- milk
d$clade_id <- coerce_index(d$clade) # Index variable maker
#[1] 4 4 4 4 4 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 # index variable
# Model Specification:
fit1 <- map(
alist(
kcal.per.g ~ dnorm( mu , sigma ) ,
mu <- a[clade_id] ,
a[clade_id] ~ dnorm( 0.6 , 10 ) ,
sigma ~ dunif( 0 , 10 )
) ,
data = d )
使用 rstanarm 包最类似的方法是
library(rstanarm)
fit1 <- stan_glmer(kcal.per.g ~ 1 + (1 | clade_id), data = milk,
prior_intercept = normal(0.6, 1, autoscale = FALSE),
prior_aux = exponential(rate = 1/5, autoscale = FALSE),
prior_covariance = decov(shape = 10, scale = 1))
但是,由于以下原因,这并不完全相同:
sigma
上的有界统一先验没有实现,因为它们不是一个好主意,所以我使用期望为 5 的指数分布来代替- 固定
a
的标准偏差也没有实现,所以我使用了期望为 10 的伽马分布
- rstanarm(和lme4)中的分层模型被参数化为与通用参数有偏差,因此不是使用 0.6 的期望值
a
,我对全局截距使用了 0.6 的期望,a
上的先验是正常的,期望为零。这意味着您需要调用coef(fit1)
而不是ranef(fit1)
来查看 "intercepts",因为它们在原始模型中被参数化。