Байесовский анализ выживаемости

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

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

Движение:(время, которое потребовалось для поведения oranisum). Лечение: экспериментальное лечение с двумя категориальными переменными "A", "B". 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);
}

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

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

1 ответ

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

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