에 대해 지정합니다. y
의 종속 변수에 대한 데이터가 있습니다.이 값은 공변수 인 x1
및 x2
의 함수로 모델링 할 수 있습니다. y
및 x1
이 "플롯"수준에서 관찰되고, x2
이 "사이트"수준에서 관찰된다. 플롯은 사이트 내에서 계층 적으로 중첩됩니다. 연관된 공변량 데이터가있는 y
에 대한 100 가지 관측치가 있습니다.JAGS에서 계층 적 모델을 R
#generate covariate data at plot and site scales.
x1 <- runif(100,0,1) #100 plot level observations of x1
x2 <- runif(10,10,20) #10 site level observations of x2
#generate site values - in this case characters A:J
site_1 <- LETTERS[sort(rep(seq(1,10, by = 1),10))]
site_2 <- LETTERS[sort(seq(1,10, by = 1))]
#put together site level data - 10 observations for 10 sites.
site_data <- data.frame(site_2,x2)
colnames(site_data) <- c('site','x2')
#put together plot level data - 100 observations across 10 sites
plot_data <- data.frame(site_1,x1)
colnames(plot_data) <- c('site','x1')
plot_data <- merge(plot_data,site_data, all.x=T) #merge in site level data.
#pick parameter values.
b1 <- 10
b2 <- 0.2
#y is a function of the plot level covariate x1 and the site level covariate x2.
plot_data$y <- b1*plot_data$x1 + b2*plot_data$x2 + rnorm(100)
#check that the model fits. it does.
summary(lm(y ~ x1 + x2, data = plot_data))
나는 기본적으로 사이트 당 x2
10 배의 사이트 수준 관측을 복제하는 데이터 프레임 plot_data
를 사용하여 들쭉날쭉에서 x1
및 x2
아무 문제의 함수로 y
을 모델링 할 수 있습니다. 정말 그러나하고 싶으면 무엇
모델을 적합 계층 등이 [i]
플롯 수준의 관찰과 [j]
인덱스 사이트를 나타냅니다 y[i] ~ x1[i] + x2[j]
. 어떻게 이것을하기 위해 아래의 JAGS 코드를 수정할 수 있습니까?
#fit a JAGS model
jags.model = "
model{
# priors
b1 ~ dnorm(0, .001)
b2 ~ dnorm(0, .001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
#normal model
for (i in 1:N){
y[i] ~ dnorm(y.hat[i], tau)
y.hat[i] <- b1*x1[i] + b2*x2[i]
}
} #end model
"
#setup jags data as a list
jd <- list(y=plot_data$y, x1=plot_data$x1, x2=plot_data$x2, N=length(plot_data$y))
library(runjags)
#run jags model
jags.out <- run.jags(jags.model,
data=jd,
adapt = 1000,
burnin = 1000,
sample = 2000,
n.chains=3,
monitor=c('b1', 'b2'))
summary(jags.out)
언제나처럼 매트! 이 예제에 사이트의 무작위 효과를 추가하는 방법을 추가 할 수있는 기회가 있습니까? 아니면 별도의 질문을 열어 볼만한 가치가 있다고 생각합니까? – colin
모델에 대한 약간의 수정이므로 별도의 질문이 필요하지 않습니다. 업데이트 된 답변을 참조하십시오. –