分层回归UScrime R / JAGS

时间:2016-04-26 16:56:03

标签: r bayesian jags

我正在JAGS中组建一个模型来运行UScrime数据的层次回归代码(来自库(MASS)包。犯罪率是响应,有15个预测因子。

我的代码中有一些错误,我无法解决。

JAGS模型:

model{
     for (i in 1:m){
         for (j in 1:47){
         y[j]~dnorm(beta[i,1]+beta[i,2]*x[j]+beta[i,3]*x[j]+beta[i,4]*x[j]
        +beta[i,5]*x[j]+beta[i,6]*x[j]+beta[i,7]*x[j]+beta[i,8]*x[j]
        +beta[i,9]*x[j]+beta[i,10]*x[j]+beta[i,11]*x[j]+beta[i,12]*x[j]
        +beta[i,13]*x[j]+beta[i,14]*x[j]+beta[i,15]*x[j],invsig2)       
         }
         beta[i,1:15]~dmnorm(theta[],invSig[,])
        }
     theta[1:15]~dmnorm(mu0[],Lam.inv[,])
     invSig[1:15,1:15]~dwish(Lam[,],30)
     invsig2~dgamma(.5,.5*sig20)
     sig2<-1/invsig2
     Sig<-inverse(invSig)
}

R中的代码:

crime=read.table("crime.dat",header=T)
crime=as.matrix(crime)

y=crime[,1];M=crime[,2];So=crime[,3];Ed=crime[,4];Po1=crime[,5];Po2=crime[,6]
LF=crime[,7];M.F=crime[,8];Pop=crime[,9];NW=crime[,10];U1=crime[,11]
U2=crime[,12];GDP=crime[,13];Ineq=crime[,14];Prob=crime[,15]
Time=crime[,16]
Crime=crime[,1]
m <- length(unique(Crime)) # m = length of crimes
n <- rep(NA,m)  # setting up placeholder vectors

for (j in 1:m){
 n[j] <- sum(Crime==j)  
}

beta_lse=matrix(nrow=m,ncol=15)
sig2_lse=rep(NA,m)

for (i in 1:m){
crime=y[1:47]
x1=M[1:47];x2=So[1:47];x3=Ed[1:47];x4=Po1[1:47];x5=Po2[1:47];x6=LF[1:47]
x7=M.F[1:47];x8=Pop[1:47];x9=NW[1:47];x10=U1[1:47];x11=U2[1:47]
x12=GDP[1:47];x13=Ineq[1:47];x14=Prob[1:47];x15=Time[1:47]
lse=lm(crime ~ 0+x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15)
temp=anova(lse)
beta_lse[i,]=c(lse[[1]]) 
sig2_lse[i]=temp[[3]][2]}

Lam=cov(beta_lse)
Lam.inv=solve(Lam)
mu0=colMeans(beta_lse)
sig20=mean(sig2_lse)

library(rjags)

forJags<-list(y=y,m=m,x=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15,
    Lam=Lam, Lam.inv=Lam.inv, mu0=mu0, sig20=sig20) 

inits<-list(beta=matrix(0,nrow=m,ncol=15),theta=c(0,0), invSig=.1*diag(2), invsig2=1)

mod<-jags.model(file="CrimeHierarchicalRegression.bug",data=forJags,inits=inits)
out<-coda.samples(model=mod,variable.names=c("theta","Sig","sig2","beta"),n.iter=10000,thin=5)
summary(out)

有两个粗体错误,Error1和Error2,它们各自的行导致错误。第一个错误告诉我&#34;要替换的项目数不是替换长度的倍数&#34;。第二个错误告诉我&#34;有一个意外的符号&#34;就在那条线上。

如果您发现这些错误是如何造成的,请与我们联系。提前谢谢。

1 个答案:

答案 0 :(得分:0)

对于您的第一个错误,您尝试将长度为15行的矢量放入具有16列的矩阵中。对于第二个错误,您在x12=x12x13=x13之间没有逗号。

添加该逗号并将beta_lse=matrix(nrow=m,ncol=16)更改为beta_lse=matrix(nrow=m,ncol=15),您应该好好去。这当然是假设您不希望将截距拟合到模型中,这是您当前在模型的线性预测器中指定的截距。这应该解决这两个特定的错误。