使用JAGS我試圖估計一個包含單位特定時間趨勢的模型。 但是,問題是我不知道如何建模,到目前爲止我一直無法找到解決方案。JAGS:單位特定的時間趨勢
作爲一個例子,考慮我們有以下數據:
rain<-rnorm(200) # Explanatory variable
n1<-rnorm(200) # Some noise
gdp<-rain+n1 # Outcome variable
ccode<-rep(1:10,20) # Unit codes
year<-rep(1:20,10) # Years
使用正常線性迴歸,我們估計模型爲:
m1<-lm(gdp~rain+factor(ccode)*year)
凡factor(ccode)*year
是單元特定時間趨勢。現在我想用JAGS來估計模型。所以我創建參數索引:
N<-200
J<-max(ccode)
T<-max(year)
並估計模型,
library(R2jags)
library(rjags)
set.seed(42); runif(1)
dat<-list(gdp=gdp,
rain=rain,
ccode=ccode,
year=year,
N=N,J=J,T=T)
parameters<-c("b1","b0")
model.file <- "~/model.txt"
system.time(m1<-jags(data=dat,inits=NULL,parameters.to.save=parameters,
model.file=model.file,
n.chains=4,n.iter=500,n.burnin=125,n.thin=2))
以下模型文件,這就是錯誤所在的那一刻:
# Simple model
model {
# For N observations
for(i in 1:N) {
gdp[i] ~ dnorm(yhat[i], tau)
yhat[i] <- b1*rain[i] + b0[ccode[i]*year[i]]
}
for(t in 1:T) {
for(j in 1:J) {
b0[t,j] ~ dnorm(0, .01)
}
}
# Priors
b1 ~ dnorm(0, .01)
# Hyperpriors
tau <- pow(sd, -2)
sd ~ dunif(0,20)
}
我相當確定我在定義b0
和索引的方式是錯誤的,因爲使用代碼時出現錯誤:Compilation error on line 7. Dimension mismatch taking subset of b0
。 但是,我不知道如何解決這個問題,所以我想知道這裏有人對此有什麼建議嗎?
你在'yhat'行定義'b0'是一個簡單的向量(只有一個維度)。在模型的後面,'b0'似乎是一個矩陣,有兩個維度。這會導致錯誤。 – nicola 2015-01-15 17:12:14
這是否解決了您的問題? – jbaums 2015-01-22 10:03:51
聽起來不錯,但到目前爲止,我一直無法正確調整代碼。正如我所說,我的造型知識不是很好,所以我仍然有點卡住。 – BlankUsername 2015-01-22 10:30:15