байесовский анализ выживаемости - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу построить стандартный (rstan) код для анализа выживания с использованием распределения Вейбулла. Но мой стандартный код не всегда работает. Если кто-нибудь знает, как справиться с моей проблемой, пожалуйста, научите меня.

Мои данные такие

Движение: (время, которое заняло поведение oranisum) Лечить: экспериментальный клад, имеющий две категориальные переменные «А», «В» r_Day: случайные эффекты, учитывающие специфичные для дня эффекты

А мой код станка такой, как показано ниже.

data {
     int N; // all data
     int D; // day
     int <lower = 0, upper = 1> Treat[N]; 
     int <lower = 0> Movment[N];
     int <lower = 1, upper = D> Day[N];
     }

 parameters {
      real <lower = 0> shape; // shape parameter
      vector[2] beta; 
      real r_Day[D];
      real <lower = 0> sigma_D; 
      }

transformed parameters{
    vector[N] scale; // scale parameter
    for(n in 1:N) scale[n] = beta[1] + beta[2]*Treat[n] + r_Day[Day[n]];
    }


model {
    for(n in 1:N) Movment[n] ~  weibull(shape, exp(-(scale[n]/shape))) ;
    for (d in 1:D) r_Day[d] ~ normal(0, sigma_D);
}

Но этот код всегда выдает ошибку "Вероятность логарифма оценивается как лог (0), то есть отрицательная бесконечность. Стэн не может начать выборку с этого начального значения. Отклонение начального значения: «и выборки прекращаются.

Пожалуйста, научите меня, как бороться с этими ошибками.

1 Ответ

0 голосов
/ 16 сентября 2018

Вероятно, это связано с тем, что вы объявляете sigma_D в блоке параметров, но не используете его и не ставите перед ним приоритет.Таким образом, распределение, которое вы определяете, является неправильным.Я предполагаю, что вы хотели масштабировать r_Day на sigma_D, но вы все равно должны установить правильные априоры для всех параметров.

...