Байесовский анализ выживаемости
Я хочу построить стандартный (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
, но вы все равно должны поставить правильные приоры по всем параметрам.