พยายามเพิ่มความคิดเห็นด้านบน แต่ตัวแทนของฉันต่ำเกินไป
ควร
y[i] ~ dnorm(mu[i], tau / weight[i])
ไม่เป็น
y[i] ~ dnorm(mu[i], tau * weight[i])
ใน JAGS ฉันใช้การทดสอบบางอย่างเปรียบเทียบผลลัพธ์จากวิธีนี้ใน JAGS กับผลลัพธ์จากการถดถอยแบบถ่วงน้ำหนักผ่าน lm () และสามารถค้นหาได้ตามการใช้แบบหลังเท่านั้น นี่คือตัวอย่างง่ายๆ:
aggregated <-
data.frame(x=1:5) %>%
mutate( y = round(2 * x + 2 + rnorm(length(x)) ),
freq = as.numeric(table(sample(1:5, 100,
replace=TRUE, prob=c(.3, .4, .5, .4, .3)))))
x <- aggregated$x
y <- aggregated$y
weight <- aggregated$freq
N <- length(y)
# via lm()
lm(y ~ x, data = aggregated, weight = freq)
และเปรียบเทียบกับ
lin_wt_mod <- function() {
for (i in 1:N) {
y[i] ~ dnorm(mu[i], tau*weight[i])
mu[i] <- beta[1] + beta[2] * x[i]
}
for(j in 1:2){
beta[j] ~ dnorm(0,0.0001)
}
tau ~ dgamma(0.001, 0.001)
sigma <- 1/sqrt(tau)
}
dat <- list("N","x","y","weight")
params <- c("beta","tau","sigma")
library(R2jags)
fit_wt_lm1 <- jags.parallel(data = dat, parameters.to.save = params,
model.file = lin_wt_mod, n.iter = 3000, n.burnin = 1000)
fit_wt_lm1$BUGSoutput$summary