0

所有,我正在尝试在 R 中使用 JAGS 模型。R 包是“R2jags”。我对下面的错误感到困惑。

编译模型图 解析未声明的变量 分配节点 删除模型 jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, : RUNTIME ERROR: Non-conforming parameters in function inprod

数据处理部分,

library(R2jags)

data <- read.table("H:/mlp2020/data109.csv",sep = ",",check.names = F,stringsAsFactors = F,header = T)
rownames(data) <- data[,1]
data <- data[,-1]
z <- as.vector(data$group)
z <- z+1
Y_input <- data[,c(1:1356)]
X_input <- data[,c(1358:1368)]

N <- 1702    #nrow(Y_input)
P <- 1356    #ncol(Y_input)
R <- 11      #ncol(X_input)

Y <- Y_input
X <- X_input 

jags.data <- list("X","Y","z","N","P","R")
jags.params <- c("phi","delta") 
jags.inits <- function(){ 
  list("phi"=rbinom(1,1,0.1),"delta"=rbinom(1,1,0.1)) 
}

我的模型代码是这样的,

model <- function(){
  for (j in 1:P){
    for (i in 1:N){
    k[i,j] <- 1+phi[j]*z[i]    #k=1 phi[j]=0,k=2 phi[j]=1 z[i]=1,k=3 phi[j]=1 z[i]=2
    }
    phi[j] ~ dbern(w)
  }
  

  for (j in 1:P){
    for (i in 1:N){
      Y[i,j] ~ dnorm(mu[i,j], tau[j])
      
      mu[i,j] = e_1[j] + e_2[j]*equals(k[i,j],2) + inprod(X[i,],beta)
    }
    for (r in 1:R){
      beta[r,j]<-delta[r,j]*beta_0[j]
      #spike and slab pior for beta
      delta[r,j] ~ dbern(t)
    }
    #spike and slab pior for beta
    beta_0[j] ~ dnorm(0,tau_beta[j])
    tau_beta[j] ~ dgamma(2, 15) # input
    
    e_1[j]~dnorm(0,tau_1[j])   #tau_mu[j]=1
    tau_1[j] ~ dgamma(2, 15) # input
    
    e_2[j]~dnorm(0,tau_2[j])   #tau_mu[j]=1
    tau_2[j] ~ dgamma(2, 15) # input
    
    sigma[j] <- 1.0/sqrt(tau[j])
    # input 
    tau[j] ~ dgamma(10, 1)
  } 
  # t ~ dbeta(a_t,b_t) # input
  # w ~ dbeta(a_w,b_w) # input
  w ~ dbeta(1,0.1)
  t ~ dbeta(0.4,1.6)
  
}

jagsfit <- jags(data=jags.data, inits=jags.inits, jags.params,
                n.iter=10, 
                model.file=model)

任何帮助将不胜感激!

4

1 回答 1

0

inprod是点积。它的两个参数必须是相同长度的向量,但代码中的第二个参数是矩阵。

我没有检查你的模型,但也许你想要inprod(X[i,],beta[,j])

于 2020-11-14T10:51:02.210 回答