Определение предварительного для случайных эффектов и дисперсии случайных эффектов в модели смешанных эффектов (R brms) - PullRequest
0 голосов
/ 08 мая 2018

Я хочу соответствовать модели GLMM Пуассона. У меня 121 субъект (subject), я наблюдаю 8 подсчетов Пуассона (count) на субъект: они соответствуют 2 типам событий (event) x 4 периода (period).

'data.frame':   968 obs. of  4 variables:
 $ count  : num  4 0 2 3 3 0 1 0 8 14 ...
 $ subject: num  1 1 1 1 1 1 1 1 2 2 ...
 $ event  : Factor w/ 2 levels "call","visit": 2 2 2 2 2 2 2 2 1 1 ...
 $ period : Factor w/ 4 levels "period_1","period_2",..: 1 2 3 4 1 2 3 4 1 2 ...

Что я хочу:

  • Я хочу приспособить GLMM к байесовскому подходу, предполагая случайные эффекты для (1) subject, (2) subject:visit, (3) subject:event.
  • Я хочу установить N (0, 10 ^ 6) для всех фиксированных эффектов,
  • Я хочу установить N (0, sigma2_a ), N (0, sigma2_b ), N (0, sigma2_c ) для случайных эффектов для (1) subject, (2) subject:visit, (3) subject:event соответственно
  • Я хочу установить одинаковые априоры для sigma2_a , sigma2_b , sigma2_c соответственно.

Что мне удалось получить:

  • Я полагаю, что правильно устанавливаю формулу модели, и я устанавливаю желаемые априоры для фиксированных параметров эффекта:

    ## define some priors          
    prior <- c(prior_string("normal(0,10^3)", class = "b"),
           prior_string("normal(0,10^3)", class = "b", coef = "eventvisit"),
           prior_string("normal(0,10^3)", class = "b", coef = "eventvisit:periodperiod_2"),
           prior_string("normal(0,10^3)", class = "b", coef = "eventvisit:periodperiod_3"),
           prior_string("normal(0,10^3)", class = "b", coef = "eventvisit:periodperiod_4"),
           prior_string("normal(0,10^3)", class = "b", coef = "periodperiod_2"),
           prior_string("normal(0,10^3)", class = "b", coef = "periodperiod_3"),
           prior_string("normal(0,10^3)", class = "b", coef = "periodperiod_4"))
    
    ## fit model
    fit1 <- brm(count ~ event + period + event:period + (1|subject) + (0 + event|subject) + (0 + period|subject),
        data = data.long, family = poisson(),
        prior = prior,
        warmup = 1000, iter = 4000, chains = 4,
        cores = 7)
    

С чем я борюсь:

  • Как установить N (0, sigma2_a ), N (0, sigma2_b ), N (0, sigma2_c ) для случайных эффектов для ( 1) subject, (2) subject:visit, (3) subject:event соответственно
  • Как установить одинаковые приоры для sigma2_a , sigma2_b , sigma2_c соответственно.

1 Ответ

0 голосов
/ 09 мая 2018

Относительно того, что вы хотите: Не могли бы вы объяснить более подробно, что вы хотите с subject:visit и subject:event? В настоящее время я не могу сказать, правильно ли указана ваша модель для ваших целей.

Что касается приоры:

  1. Если вы установите prior_string("normal(0,10^3)", class = "b"), нет необходимости указывать это снова для каждого коэффициента. Установка его глобально для всего предшествующего класса достаточно. Обратите внимание, что с учетом масштаба вашего ответа и переменных-предикторов нормаль (0, 1000) настолько широка, что практически не влияет. Ты тоже можешь просто оставить это.
  2. Эти normal(0, sigma_x) априоры устанавливаются автоматически для всех терминов случайных эффектов. Не нужно беспокоиться о них.
  3. Вы можете установить априоры для SD со случайными эффектами, используя class = "sd". Например prior_string("cauchy(0, 5)", class = "sd"). Я настоятельно рекомендую вам , а не , использовать однородные априоры, в частности, потому что они имеют жесткую верхнюю границу для параметра (стандартное отклонение), который не имеет теоретической верхней границы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...