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

Я хочу построить код stan (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), то есть отрицательная бесконечность. Стэн не может начать выборку с этого начального значения. Отклонение начального значения:» и выборки останавливаются.

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


person Lc_decg    schedule 15.09.2018    source источник
comment
Вы можете записать блок transformed parameters в одну строку с vector[N] scale = beta[1] + beta[2] * Density + sigma_D *r_Day[Day];, если вы определите Density в блоке data.   -  person Ben Goodrich    schedule 16.09.2018
comment
Также вы можете написать вероятность как stay ~ weibull(shape, exp(-scale / shape));   -  person Ben Goodrich    schedule 16.09.2018
comment
Прости. Я отредактировал некоторые коды, потому что написал ошибочный код. Да, я хочу подтвердить, что это синтаксис. Это подходящий код?   -  person Lc_decg    schedule 17.09.2018
comment
Я думаю, что это допустимый синтаксис, но он медленнее, чем необходимо, и все же, вероятно, определяет неправильное апостериорное распределение из-за отсутствия надлежащих априорных значений для общих параметров.   -  person Ben Goodrich    schedule 17.09.2018
comment
Для коэффициентов в линейном предикторе и стандартного отклонения в случайных эффектах я определил неинформативный априор (равномерный (0, 10e + 4)) как стандартную настройку по умолчанию. Но я не знаю, какие типы приоров подходят по параметру формы. Вы прокомментировали использование экспоненциальных априорных вероятностей, и есть ли рекомендуемые априорные значения? Это первый раз, когда данные анализируются с помощью распределения Вейбулла. А моя специальность - экология, мало кто анализирует данные с помощью распределения Вейбулла. Итак, если вы дадите мне несколько советов, это очень полезно для анализа.   -  person Lc_decg    schedule 17.09.2018
comment
См. github.com/stan-dev/stan/wiki/Prior-Choice -Рекомендации. Экспонента проста, потому что у нее только один параметр (скорость).   -  person Ben Goodrich    schedule 18.09.2018


Ответы (1)


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

person Ben Goodrich    schedule 15.09.2018
comment
Это модель OP, поэтому априорные значения должны отражать то, что OP думает о параметрах, прежде чем просматривать данные. У меня нет особого понимания этого процесса генерации данных, но я обычно использую экспоненциальный априор для гиперпараметров, которые являются стандартными отклонениями. - person Ben Goodrich; 16.09.2018
comment
Теперь я понимаю, что вы имеете в виду. @Lc_decg вы спрашиваете о синтаксисе? - person Ben Goodrich; 16.09.2018