向量中的错误(“列表”,n.chains):无效的“长度”参数
Posted
技术标签:
【中文标题】向量中的错误(“列表”,n.chains):无效的“长度”参数【英文标题】:Error in vector("list", n.chains) : invalid 'length' argument 【发布时间】:2013-06-14 18:25:40 【问题描述】:我正在使用 R2jags 和 CODA 为我的 MCMC 链生成一些诊断统计信息,但我遇到了问题。我想按如下方式运行 MCMC:
modelfit <- jags(data=jags.data, inits=jags.inits, model.params, n.iter = 100000,
model.file=jags.model, model.params)
错误如下:
Error in vector("list", n.chains) : invalid 'length' argument
我正在使用 RStudio 0.97.551 和 R 版本 3.0.0 (2013-04-03)。
感谢您的帮助!
这是我的 R 脚本:
setwd("C:\\")
y1 <-c(1538727, 1444672, 1206999, 1002960, 744597, 390301, 1640130, 1472255, 1383947, 1109395, 984775, 697701, 1769569, 1573498, 1489025, 1351284, 1111397, 935166, 1747764, 1790841, 1626852, 1407388, 1284583, 995236, 1676555, 1787181, 1655400, 1527122, 1421772, 1309989, 1561922, 1643467, 1598855, 1570645, 1495999, 1319439, 1456258, 1561892, 1567872, 1555237, 1551579, 1532222, 1243436, 1387943, 1436659, 1511134, 1549578, 1539580)
y2 <- c(2634569, 3031916, 3138776, 2875868, 2495888, 1886174, 2148776, 2567507, 2747428, 2696199, 2593985, 2138303, 1662296, 2224336, 2489723, 2698322, 2655746, 2450716, 1304387, 1734318, 2180203, 2396749, 2629088, 2555934, 1087351, 1380119, 1616309, 2109287, 2408800, 2369855, 821642, 1041702, 1221283, 1661647, 2098345, 2426842, 708327, 873092, 952245, 1237084, 1628334, 2123709, 549763, 666699, 774205, 981393, 1243888, 1538431)
y3 <- c(1245931, 1664176, 1659375, 2313647, 3850196, 4254634, 825634, 1293382, 1454776, 1736181, 2596719, 3655532, 554953, 901957, 1186747, 1490664, 2083400, 2738988, 335824, 630232, 847486, 1239538, 1702256, 2296941, 218213, 373786, 555286, 907876, 1397221, 2005940, 143202, 237344, 344229, 594993, 1012777, 1510283, 121187, 151070, 219731, 351040, 650930, 1157146, 87211, 120279, 140551, 226530, 393887, 733699)
n <- c(5862309, 6673625, 6534802, 6942747, 8329067, 8152696, 5049199, 5913474, 6268113, 6253757, 7298375, 8260640, 4319559, 5245545, 5840408, 6306245, 6785242, 7492958, 3588778, 4553684, 5259609, 5813653, 6517271, 7001560, 3105173, 3797508, 4271831, 5180290, 6086716, 7002991, 2591140, 3063506, 3428373, 4305319, 5326889, 6217360, 2329398, 2661972, 2886111, 3418403, 4327922, 5565798, 1906676, 2224544, 2444586, 2864892, 3473404, 4362648)
A <- c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8)
P <- c(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6)
C <- c(8, 9, 10, 11, 12, 13, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6)
W <- 48
I <- 8
J <- 6
JJ <- 8
L <- 13
LL <- 15
jags.model<- function()
## Loop over all observations
for(w in 1: W)
m[w] <- n[w]-y1[w]
h[w] <- n[w]-y1[w]-y2[w]
y1[w] ~ dbin(delta[w],n[w])
y2[w] ~ dbin(theta[w],m[w])
y3[w] ~ dbin(eta[w],h[w])
y4[w] <- n[w]-y1[w]-y2[w]-y3[w]
## Define model
logit(delta[w]) <- mu1+theta1[A[w]]+phi1[P[w]]+psi1[C[w]]
logit(theta[w]) <- mu2+theta2[A[w]]+phi2[P[w]]+psi2[C[w]]
logit(eta[w]) <- mu3+theta3[A[w]]+phi3[P[w]]+psi3[C[w]]
## Define probabilities
p1[w] <- delta[w]
p2[w] <- theta[w]*(1-delta[w])
p3[w] <- eta[w]*(1-delta[w])*(1-theta[w])
p4[w] <- (1-delta[w])*(1-theta[w])*(1-eta[w])
L1[w] <- log(p1[w]/(p2[w]+p3[w]+p4[w]))
L2[w] <- log(p2[w]/(p3[w]+p4[w]))
L3[w] <- log(p3[w]/p4[w])
## Likelihood
log.like[w] <- y1[w]*log(delta[w]) + (n[w]-y1[w])*log(1-delta[w]) + y2[w]*log(theta[w]) + (n[w]-y1[w]-y2[w])*log(1-theta[w]) + y3[w]*log(eta[w]) + (n[w]-y1[w]-y2[w]-y3[w])*log(1-eta[w]) + logfact(n[w]) - logfact(y1[w]) - logfact(y2[w]) - logfact(y3[w]) - logfact(n[w]-y1[w]-y2[w]-y3[w])
## Prior model for global mean effects
mu1~ dnorm(0,1000)
mu2~ dnorm(0,1000)
mu3~ dnorm(0,1000)
## Autoregressive prior model for P effects
phi1mean[1] <- 0.0
phi1prec[1] <- tauphi1*1.0E-6
phi1mean[2] <- 0.0
phi1prec[2] <- tauphi1*1.0E-6
phi2mean[1] <- 0.0
phi2prec[1] <- tauphi2*1.0E-6
phi2mean[2] <- 0.0
phi2prec[2] <- tauphi2*1.0E-6
phi3mean[1] <- 0.0
phi3prec[1] <- tauphi3*1.0E-6
phi3mean[2] <- 0.0
phi3prec[2] <- tauphi3*1.0E-6
phi4mean[1] <- 0.0
phi4prec[1] <- tauphi4*1.0E-6
phi4mean[2] <- 0.0
phi4prec[2] <- tauphi4*1.0E-6
for (j in 3:JJ)
phi1mean[j] <- 2*phi1[j-1]-phi1[j-2]
phi1prec[j] <- tauphi1
phi2mean[j] <- 2*phi2[j-1]-phi2[j-2]
phi2prec[j] <- tauphi2
phi3mean[j] <- 2*phi3[j-1]-phi3[j-2]
phi3prec[j] <- tauphi3
phi4mean[j] <- 2*phi4[j-1]-phi4[j-2]
phi4prec[j] <- tauphi4
# Sampling P effects and subtracting mean for observed P (J)
for (j in 1:JJ)
phi1[j] ~ dnorm(phi1mean[j],phi1prec[j])
phi2[j] ~ dnorm(phi2mean[j],phi2prec[j])
phi3[j] ~ dnorm(phi3mean[j],phi3prec[j])
phi4[j] ~ dnorm(phi4mean[j],phi4prec[j])
phi1c[j] <- phi1[j]-mean(phi1[1:J])
phi2c[j] <- phi2[j]-mean(phi2[1:J])
phi3c[j] <- phi3[j]-mean(phi3[1:J])
phi4c[j] <- phi4[j]-mean(phi4[1:J])
# Hyperpriors for the precision parameters
tauphi1 ~ dgamma(1.0E-1,1.0E-1)
tauphi2 ~ dgamma(1.0E-1,1.0E-1)
tauphi3 ~ dgamma(1.0E-1,1.0E-1)
tauphi4 ~ dgamma(1.0E-1,1.0E-1)
sigmaphi1 <- 1/sqrt(tauphi1)
sigmaphi2 <- 1/sqrt(tauphi2)
sigmaphi3 <- 1/sqrt(tauphi3)
sigmaphi4 <- 1/sqrt(tauphi4)
## Autoregressive prior model for C effects
psi1mean[1] <- 0.0
psi1prec[1] <- taupsi1*1.0E-6
psi1mean[2] <- 0.0
psi1prec[2] <- taupsi1*1.0E-6
psi2mean[1] <- 0.0
psi2prec[1] <- taupsi2*1.0E-6
psi2mean[2] <- 0.0
psi2prec[2] <- taupsi2*1.0E-6
psi3mean[1] <- 0.0
psi3prec[1] <- taupsi3*1.0E-6
psi3mean[2] <- 0.0
psi3prec[2] <- taupsi3*1.0E-6
psi4mean[1] <- 0.0
psi4prec[1] <- taupsi4*1.0E-6
psi4mean[2] <- 0.0
psi4prec[2] <- taupsi4*1.0E-6
for (l in 3:LL)
psi1mean[l] <- 2*psi1[l-1]-psi1[l-2]
psi1prec[l] <- taupsi1
psi2mean[l] <- 2*psi2[l-1]-psi2[l-2]
psi2prec[l] <- taupsi2
psi3mean[l] <- 2*psi3[l-1]-psi3[l-2]
psi3prec[l] <- taupsi3
psi4mean[l] <- 2*psi4[l-1]-psi4[l-2]
psi4prec[l] <- taupsi4
# Sampling C effects and subtracting mean for observed C (L)
for (l in 1:LL)
psi1[l] ~ dnorm(psi1mean[l],psi1prec[l])
psi2[l] ~ dnorm(psi2mean[l],psi2prec[l])
psi3[l] ~ dnorm(psi3mean[l],psi3prec[l])
psi4[l] ~ dnorm(psi4mean[l],psi4prec[l])
psi1c[l] <- psi1[l]-mean(psi1[1:L])
psi2c[l] <- psi2[l]-mean(psi2[1:L])
psi3c[l] <- psi3[l]-mean(psi3[1:L])
psi4c[l] <- psi4[l]-mean(psi4[1:L])
# HyPpriors for the precision parameters
taupsi1 ~ dgamma(1.0E-1,1.0E-1)
taupsi2 ~ dgamma(1.0E-1,1.0E-1)
taupsi3 ~ dgamma(1.0E-1,1.0E-1)
taupsi4 ~ dgamma(1.0E-1,1.0E-1)
sigmapsi1 <- 1/sqrt(taupsi1)
sigmapsi2 <- 1/sqrt(taupsi2)
sigmapsi3 <- 1/sqrt(taupsi3)
sigmapsi4 <- 1/sqrt(taupsi4)
## Autoregressive prior model for A effects
theta1mean[1] <- 0.0
theta1prec[1] <- tautheta1*1.0E-6
theta1mean[2] <- 0.0
theta1prec[2] <- tautheta1*1.0E-6
theta2mean[1] <- 0.0
theta2prec[1] <- tautheta2*1.0E-6
theta2mean[2] <- 0.0
theta2prec[2] <- tautheta2*1.0E-6
theta3mean[1] <- 0.0
theta3prec[1] <- tautheta3*1.0E-6
theta3mean[2] <- 0.0
theta3prec[2] <- tautheta3*1.0E-6
theta4mean[1] <- 0.0
theta4prec[1] <- tautheta4*1.0E-6
theta4mean[2] <- 0.0
theta4prec[2] <- tautheta4*1.0E-6
for (i in 3:I)
theta1mean[i] <- 2*theta1[i-1]-theta1[i-2]
theta1prec[i] <- tautheta1
theta2mean[i] <- 2*theta2[i-1]-theta2[i-2]
theta2prec[i] <- tautheta2
theta3mean[i] <- 2*theta3[i-1]-theta3[i-2]
theta3prec[i] <- tautheta3
theta4mean[i] <- 2*theta4[i-1]-theta4[i-2]
theta4prec[i] <- tautheta4
# Sampling A effects
for (i in 1:I)
theta1[i] ~ dnorm(theta1mean[i],theta1prec[i])
theta2[i] ~ dnorm(theta2mean[i],theta2prec[i])
theta3[i] ~ dnorm(theta3mean[i],theta3prec[i])
theta4[i] ~ dnorm(theta4mean[i],theta4prec[i])
# Hyperpriors for the precision parameters
tautheta1 ~ dgamma(1.0E-1,1.0E-1)
tautheta2 ~ dgamma(1.0E-1,1.0E-1)
tautheta3 ~ dgamma(1.0E-1,1.0E-1)
tautheta4 ~ dgamma(1.0E-1,1.0E-1)
sigmatheta1 <- 1/sqrt(tautheta1)
sigmatheta2 <- 1/sqrt(tautheta2)
sigmatheta3 <- 1/sqrt(tautheta3)
sigmatheta4 <- 1/sqrt(tautheta4)
# Removing linear trends from A effects
for (i in 1:I)
ivec1[i] <- i-(I+1)/2
aivec1[i] <- ivec1[i]*theta1[i]
theta1c[i] <- theta1[i]-ivec1[i]*sum(aivec1[])/(I*(I+1)*(I-1)/12)
ivec2[i] <- i-(I+1)/2
aivec2[i] <- ivec2[i]*theta2[i]
theta2c[i] <- theta2[i]-ivec2[i]*sum(aivec2[])/(I*(I+1)*(I-1)/12)
ivec3[i] <- i-(I+1)/2
aivec3[i] <- ivec3[i]*theta3[i]
theta3c[i] <- theta3[i]-ivec3[i]*sum(aivec3[])/(I*(I+1)*(I-1)/12)
ivec4[i] <- i-(I+1)/2
aivec4[i] <- ivec4[i]*theta4[i]
theta4c[i] <- theta4[i]-ivec4[i]*sum(aivec4[])/(I*(I+1)*(I-1)/12)
## Loop over A and P
## Computing fitted and projected probabilities
for (i in 1:I)
for (j in 1:JJ)
deltapred[i,j] <- exp(mu1+theta1[i]+phi1[j]+psi1[I+j-i])/(1+exp(mu1+theta1[i]+phi1[j]+psi1[I+j-i]))
thetapred[i,j] <- exp(mu2+theta2[i]+phi2[j]+psi2[I+j-i])/(1+exp(mu2+theta2[i]+phi2[j]+psi2[I+j-i]))
etapred[i,j] <- exp(mu3+theta3[i]+phi3[j]+psi3[I+j-i])/(1+exp(mu3+theta3[i]+phi3[j]+psi3[I+j-i]))
p1p[i,j] <- deltapred[i,j]
p2p[i,j] <- thetapred[i,j]*(1-deltapred[i,j])
p3p[i,j] <- etapred[i,j]*(1-deltapred[i,j])*(1-thetapred[i,j])
p4p[i,j] <- (1-deltapred[i,j])*(1-thetapred[i,j])*(1-etapred[i,j])
jags.data<-list("y1","y2","y3","n","A","P","C","W","I","J","JJ","L","LL")
jags.inits <- function()
list("tauphi1" <-1,"tauphi2" <-1,"tauphi3" <-1,"tauphi4" <-1,"taupsi1" <-1,
"taupsi2" <-1,"taupsi3" <-1,"taupsi4" <-1,"tautheta1" <-1,"tautheta2" <-1,
"tautheta3" <-1,"tautheta4" <-1,"mu1" <-0,"mu2" <-0,"mu3" <-0,
"theta1" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"theta2" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"theta3" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"theta4" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"phi1" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"phi2" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"phi3" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"phi4" <-c(0, 0, 0, 0, 0, 0, 0, 0),
"psi1" <-c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"psi2" <-c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"psi3" <-c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"psi4" <-c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
library(R2jags)
library(coda)
model.params <- c('mu1', 'mu2', 'mu3', 'theta1', 'theta2', 'theta3', 'phi1',
'phi2', 'phi3', 'psi1', 'psi2', 'psi3', 'p1p', 'p2p',
'p3p', 'p4p')
【问题讨论】:
可能有点相关...我使用了coda
函数heidel.diag
并得到了相同的错误消息。我用as.mcmc(my_model_fit)
替换了我的模型,现在它似乎运行顺利。
【参考方案1】:
翻译:公式中的某些东西期待 X 东西,而您传递给它 Y 东西。
我在使用 hexbin 时遇到了这个错误。我将 z 的向量传递给 xbins,它只想看到 1 个数字。然后我使用 unique 函数给 hexbin 函数 1 值:
好:hexbin(x,y,xbins = unique(z)
错误:hexbin(x,y,xbins = unique(z)
您可能会将一个数字向量传递给期望 1 个值或更小的子集。
【讨论】:
以上是关于向量中的错误(“列表”,n.chains):无效的“长度”参数的主要内容,如果未能解决你的问题,请参考以下文章
Python-RPy - “x$terms 中的错误:$ 运算符对原子向量无效”