Как соответствовать модели с и без взаимодействия в регрессионной модели JAGS
Я использую этот урок, чтобы обернуть голову вокруг кода JAGS. В разделе "Та же модель с дополнительным категориальным предиктором" говорится, что "Эта модель включает в себя взаимодействие между полом и длиной тела". Как я могу удалить это, чтобы не было взаимодействия?
Вот полная настройка и модель в R и JAGS.
Сначала данные:
set.seed(42)
samplesize <- 50 # Larger sample size because we're fitting a more complex model
b_length <- sort(rnorm(samplesize)) # Body length
sex <- sample(c(0, 1), size = samplesize, replace = T) # Sex (0: female, 1: male)
int_true_f <- 30 # Intercept of females
int_true_m_diff <- 5 # Difference between intercepts of males and females
slope_true_f <- 10 # Slope of females
slope_true_m_diff <- -3 # Difference between slopes of males and females
mu <- int_true_f + sex * int_true_m_diff + (slope_true_f + sex * slope_true_m_diff) * b_length # True means
sigma <- 5 # True standard deviation of normal distributions
b_mass <- rnorm(samplesize, mean = mu, sd = sigma) # Body mass (response variable)
# Combine into a data frame:
snakes2 <- data.frame(b_length = b_length, b_mass = b_mass, sex = sex)
head(snakes2)
jagsdata_s2 <- with(snakes2, list(b_mass = b_mass, b_length = b_length, sex = sex, N = length(b_mass)))
Код JAGS:
lm2_jags <- function(){
# Likelihood:
for (i in 1:N){
b_mass[i] ~ dnorm(mu[i], tau) # tau is precision (1 / variance)
mu[i] <- alpha[1] + sex[i] * alpha[2] + (beta[1] + beta[2] * sex[i]) * b_length[i]
}
# Priors:
for (i in 1:2){
alpha[i] ~ dnorm(0, 0.01)
beta[i] ~ dnorm(0, 0.01)
}
sigma ~ dunif(0, 100)
tau <- 1 / (sigma * sigma)
}
Начальные значения и прогон:
init_values <- function(){
list(alpha = rnorm(2), beta = rnorm(2), sigma = runif(1))
}
params <- c("alpha", "beta", "sigma")
fit_lm2 <- jags(data = jagsdata_s2, inits = init_values, parameters.to.save = params, model.file = lm2_jags,
n.chains = 3, n.iter = 12000, n.burnin = 2000, n.thin = 10, DIC = F)
1 ответ
Решение
Термин взаимодействия содержится в вашем расчете мю. Пол меняет то, как определяется формула между длиной тела и массой тела через наклонные выражения. Чтобы построить модель, в которой пол и длина тела рассматриваются как независимые в отношении того, как они влияют на массу тела, вы можете сделать что-то вроде этого:
mu <- int_true_f + (sex * int_true_m_diff) + b_length
Код JAGS станет
lm2_jags <- function(){
# Likelihood:
for (i in 1:N){
b_mass[i] ~ dnorm(mu[i], tau) # tau is precision (1 / variance)
mu[i] <- alpha[1] + (sex[i] * alpha[2]) + (b_length[i] * alpha[3])
}
# Priors:
for (i in 1:3){
alpha[i] ~ dnorm(0, 0.01)
}
sigma ~ dunif(0, 100)
tau <- 1 / (sigma * sigma)
}