dinterval () для данных с интервальной цензурой?

Я новичок в JAGS и пытаюсь понять, как dinterval () работает в JAGS для цензурированных данных. Я моделирую грубые данные, где у меня есть только верхняя и нижняя границы для каждой точки данных (а не истинное значение). Вот простой пример того, как, на мой взгляд, это должно работать:

Некоторые верхние и нижние границы для каждой точки:

> head(lim)
        L        U
[1,] 14.98266 15.68029
[2,] 21.21827 21.91590
[3,] 18.34953 19.04716
[4,] 19.00186 19.69949
[5,] 15.39891 16.09654
[6,] 17.81705 18.51468

Функция для записи модели (при условии, что данные взяты из нормального с общим средним значением и дисперсией):

playmodel <- function(){
           for (i in 1:50){
                is.censored[i] ~ dinterval(t[i], lim[i,])
                t[i] ~ dnorm(mu,tau)
               }
           mu ~ dnorm(0,.001)
           tau ~ dgamma(.01,.01)
          } 
          filename <- "toymod.bug"
          write.model(toymod,filename)

Некоторые функции и назначения для вызова jags:

data <- list("lim"=lim)
inits <- list(mu=rnorm(1),tau=rgamma(1,.01,.01),t=as.vector(apply(lim,1,mean)))
#last part is to ensure the starting value is between the upper and lower limit
#each chain will start at the same place for t but this is just for this case
params <- c("mu","tau")

И запускаем модель:

playmodel.jags <- jags(data,inits, params, model.file="toymod.bug", n.chains=3,
                  n.iter=50000,n.burnin=30000, n.thin=1, DIC=TRUE, 
                  working.directory=NULL,refresh = 50000/50, progress.bar = "text")

Что происходит, когда я запускаю это?

1) моя оценка mu колеблется около 0, когда должно быть 15

2) он не запустится, если DIC = TRUE:

error: "Ошибка в jags.samples (model, variable.names, n.iter, thin, type =" trace ",: Не удалось установить монитор трассировки для отклонения узла

Я уверен, что делаю что-то глупое, и был бы признателен, если бы кто-нибудь помог мне направить меня в нужное русло.


person scottyaz    schedule 03.08.2011    source источник
comment
Также, если я моделирую это в OpenBUGS, используя их функцию I (Lower, Upper), кажется, что все работает нормально.   -  person scottyaz    schedule 03.08.2011
comment
Я не уверен, сколько из нас работает со статистической физикой. Это может быть одна из немногих ситуаций, когда перекрестная публикация на stats.stackexchange.com была бы хорошей идеей. Или, в качестве альтернативы, вы можете связаться с автором пакета или узнать, есть ли список рассылки для пакета.   -  person Brandon Bertelsen    schedule 03.08.2011


Ответы (1)


Ниже приводится ответ Мартина Пламмера:

Как написано, ваша модель не дает никаких наблюдаемых результатов. Вы, наверное, заметили, что он работает очень быстро. Это потому, что это прямая выборка из предыдущего. Вот почему ваше апостериорное среднее значение для mu такое же, как и предыдущее среднее значение 0. Имя переменной is.censored подходит для данных, подвергнутых цензуре слева или справа, как обнаружено в анализе выживаемости, но не для вашей проблемы. Я собираюсь переименовать его в "y". Если у вас есть

y[j] ~ dinterval(t[j], lim[j,]) 

и lim [j] имеет два столбца, тогда y [j] может принимать три возможных значения

y[j] = 0 if t[j] <= lim[j,1] 
y[j] = 1 if lim[j,1] < t[j] <= lim[j,2]
y[j] = 2 if lim[j,2] < t[j] 

Чтобы смоделировать данные с интервальной цензурой, вам необходимо указать y [j] в качестве данных в вашей модели. В вашем случае вы знаете, что t [j] всегда находится между lim [j, 1] и lim [j, 2], поэтому ваши данные должны быть такими.

data <- list("lim"=lim, "y"=rep(1,nrow(lim))) 

Проблема с DIC довольно глубокая. Поскольку в вашей модели нет данных о результатах, отклонение не определено. Однако даже если вы предоставите данные о результатах, вы все равно не получите желаемой статистики отклонений (включая pD). Отклонение будет равно нулю, и функция «зазубрин» вернется к эвристике Гельмана для pD (я этого не писал, поэтому не просите меня объяснять это), которая также будет равна нулю. Вероятность того, что вы действительно хотите, равна

p(lim[j,1] < t[j] <= lim[j,2] | mu, tau) 

Но JAGS дает вам

 p(y[j] | t[j]) 

который всегда равен 1. "Фокус" DIC неправильный. Я не знаю, что делает WinBUGS в этих обстоятельствах. Возможно, у него есть особые правила для цензурированных переменных.

person scottyaz    schedule 09.08.2011