2016-04-26 20 views
0

Ich stelle zusammen ein Modell in JAGS Code für eine hierarchische Regression von UScrime Daten (aus der Bibliothek (MASS) Paket auszuführen. Verbrechensraten die Antwort ist, und mit 15 Prädiktoren.Hierarchical Regression UScrime R/JAGS

ich habe ein paar Fehler in meinem Code, dass ich nicht in der Lage bin zu beheben

JAGS Modell:.

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) 
} 

Und der Code in 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) 

Es gibt zwei fettgedruckte Fehler, Fehler1 und Fehler2, wobei die entsprechenden Zeilen die Fehler verursachen. Der erste Fehler sagt mir, dass "die Anzahl der zu ersetzenden Elemente kein Vielfaches der Ersatzlänge ist". Der zweite Fehler sagt mir, dass irgendwo in dieser Zeile "ein unerwartetes Symbol" steht.

Bitte lassen Sie mich wissen, wenn Sie sehen, wie diese Fehler verursacht werden. Danke im Voraus.

+0

Ich möchte hinzufügen, dass dies nicht für eine Aufgabe, sondern eher ein Übungsproblem in Vorbereitung auf unsere Abschlussprüfung ist. – PapaSwankey

Antwort

0

Für Ihren ersten Fehler versuchen Sie, Vektor der Länge 15 Reihe weise in eine Matrix mit 16 Spalten zu setzen. Für Ihren zweiten Fehler haben Sie kein Komma zwischen und x13=x13.

Fügen Sie das Komma hinzu und ändern Sie beta_lse=matrix(nrow=m,ncol=16) zu beta_lse=matrix(nrow=m,ncol=15) und Sie sollten gut gehen. Dies setzt natürlich voraus, dass Sie keinen Schnittpunkt an das Modell anpassen möchten, was Sie im linearen Prädiktor Ihres Modells angegeben haben. Das sollte diese zwei spezifischen Fehler beheben.

+0

Ich bekomme diese Fehler nicht mehr. Aber auf der Linie, wo ich Lam.inv verwende = löse (Lam). Ich bekomme jetzt den Fehler: "Lapack Routine dgesv: System ist genau singulär: U [1,1] = 0". Ich habe diesen Code gelesen und es bedeutet im Grunde, dass meine Lam-Matrix nicht invertierbar ist. Irgendwelche Ideen, wie das behoben wird? – PapaSwankey

+0

Das bedeutet, dass Ihre Matrix nicht invertierbar ist und in anderen Teilen des Stack-Überlaufs besprochen wurde. http://stackoverflow.com/questions/6572119/r-solvesystem-is-exactly-singular –