Несоответствие размеров при инициализации массива (JAGS)

Интересно, знает ли кто-нибудь из вас, почему JAGS сообщает мне о несоответствии размеров с моими исходными значениями здесь.

Я пытаюсь подогнать пространственно явную модель захвата-повторного захвата, в которой я оцениваю местоположение рыбы (x, y) на каждом временном шаге. Есть M = 64 человека для T = 21 шага по времени. Это оценивается в массиве s, который циклически проходит через i=M и t=T, используя два нормальных распределения для каждой координаты — x, y. Создание размера s = (64,2,21).

Мои начальные значения для этого массива — это возможные местоположения в подходящей среде обитания, и это массив с измерениями 64, 2, 21.

Тем не менее, JAGS выдает ошибку Error in setParameters(init.values[[i]], i) : RUNTIME ERROR: Dimension mismatch in values supplied for s. Если я просто не инициализирую его, я получаю ту же ошибку, но для матрицы состояний z с размерами 64,21. Если я также не указываю значения для z, я получаю ошибку Error in node y[1,1,2] Node inconsistent with parents, где y — мой массив наблюдений, измерения 64, 7, 21 (второй элемент — это #элементов обнаружения).

Любая помощь очень ценится. См. ниже полный код.

Кросс-пост в SourceForge, с прикрепленными начальными значениями для s. Не совсем понял, как разместить это здесь.

sink("mod.txt")
cat("
model{


#######################################
# lamda0 = baseline detection rate, gate dependent and stage dependent
# sigma2 = scale parameter for decline in detection prob, time dependent
# phi =  survival, stage dependent
# s = activity center
# M=64 individuals, T=21 time steps
# z = true state, alive (1) or dead (0)
#######################################


for(i in 1:M){
for (j in 1:ngates){
  logit(lamda0[i,j])<- beta[group[i]]+ gamma[j]
}
}

for(j in 1:ngates){
  gamma[j] ~ dnorm(0,0.001)
  lam0.g1[j]<- 1/(1+exp(-gamma[j]))
  lam0.g2[j]<- 1/(1+exp(-gamma[j]-beta[2]))
}

beta[1]<-0
beta[2] ~dnorm(0,0.001)T(-10,10)

for (t in 1:T){
  sigma2[t] ~ dgamma(0.1,0.1)

}


tauv ~ dunif (0,40)
tau<- 1/(tauv*tauv)


phi[1] ~dunif (0,1)
phi[2] ~dunif (0,1)



for(i in 1:M){
  for(t in 1:(first[i]-1)){
    s[i,1,t]<-0   #before first detection, not in system
    s[i,2,t]<-0   #before first detection, not in system

    z[i,t]<-0         
  }
  for(t in (last[i]+1):T){
    s[i,1,t]<-0 
    s[i,2,t]<-0 
    z[i,t]<-0
  }
  #First period, locs and states
    z[i,first[i]] ~ dbern(1)   #know fish is alive 
    s[i,1,first[i]] ~ dunif (xl,xu)    #possible x,y coords 
    s[i,2,first[i]] ~ dunif (yl,yu)


    xdex[i,first[i]]<- trunc(s[i,1,first[i]]+1)
    ydex[i,first[i]]<- trunc(s[i,2,first[i]]+1)
    pOK[i,first[i]] <- habmat[xdex[i,first[i]],ydex[i,first[i]]] # habitat check
    OK[i,first[i]] ~ dbern(pOK[i,first[i]])   # OK[i] = 1, the ones trick


  for(j in 1:ngates){
  #First period, detection
    d[i,j,first[i]]<-sqrt(pow((s[i,1,first[i]]-gate.locs[j,1]),2) + pow((s[i,2,first[i]]-gate.locs[j,2]),2)) #estimate distance to gate (euclid) 
    d2[i,j,first[i]]<-pow(d[i,j,first[i]],2)
    lam_g[i,j,first[i]]<-lamda0[i,j]*exp(-d2[i,j,first[i]]/(2*sigma2[first[i]]))    
    y[i,j,first[i]] ~ dpois(lam_g[i,j,first[i]])  # number of captures/period/gate
}


  #Subsequent periods
  for(t in (first[i]+1):last[i]){
    s[i,1,t] ~ dnorm(s[i,1,(t-1)],tau)T(xl, xu)
    s[i,2,t] ~ dnorm(s[i,2,(t-1)],tau)T(yl, yu)


    xdex[i,t]<- trunc(s[i,1,t]+1)
    ydex[i,t]<- trunc(s[i,2,t]+1)
    pOK[i,t] <- habmat[xdex[i,t],ydex[i,t]] # habitat check
    OK[i,t] ~ dbern(pOK[i,t])   # OK[i] = 1, the ones trick

    for(j in 1:ngates){
        d[i,j,t]<-sqrt(pow((s[i,1,t]-gate.locs[j,1]),2) + pow((s[i,2,t]-gate.locs[j,2]),2)) #estimate distance to gate (euclid) 
        d2[i,j,t]<-pow(d[i,j,t],2)
        lam_g[i,j,t]<-lamda0[i,j]*exp(-d2[i,j,t]/(2*sigma2[t]))
        y[i,j,t] ~ dpois(lam_g[i,j,t])
    }  

    phiUP[i,t]<-z[i,t-1]*phi[group[i]]  #estimate 3-day survival rate
    z[i,t] ~ dbern(phiUP[i,t])


  }




} 
}#model
    ", fill=TRUE)
sink()

OK = matrix(1, nrow=M, ncol=T)

dat<-list(y=y, first=first, habmat=habmat, group=group, 
          xl=xl,xu=xu,yl=yl,yu=yu,
          last=last, OK = OK, M=M, T=T, 
          ngates=ngates,gate.locs=gate.locs)

z<-matrix(NA,M,T)
  for(i in 1:M){
    for(t in first[i]:last[i]){
      z[i,t]<-1
    }
  }

s<-readRDS("s_inits.Rda")





inits<-function() {list(phi=runif (2,0,1), sigma2=runif (T,0,0.5), tauv=runif (1,0,30), s=s, z=z)}

init1<-inits()
init2<-inits()
init3<-inits()
jag.inits<-list(init1,init2,init3)

params<-c("phiUP","tauv","sigma2","s","z","beta","gamma","phi")

Каковы размеры (то есть dim(s)) s_inits.Rda, стоимость объекта M, first, last и T?

mfidino 27.02.2019 15:38

Привет, размеры s_inits 64,2, 21; длины M, first, last и T равны 64, 64, 64 и 21 соответственно.

Janelle Badger 27.02.2019 20:41

Я предполагаю, что это связано с вашими векторами first и last, но без воспроизводимого примера очень сложно определить причину этой ошибки.

mfidino 01.03.2019 15:43

у меня точно такая же проблема не могу разобраться

Gmichael 21.04.2021 13:51

tbh, в какой-то момент не существует такой вещи, как «воспроизводимый пример», и настаивание на том, чтобы просто предоставить простое исправление, только упрощает проблему, потенциально специфичную для данных...

Gmichael 21.04.2021 14:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
5
407
0

Другие вопросы по теме