2016-11-01 10 views
2

Я немного запутался о том, как установить априорные для нескольких предикторов для следующей модели:Установите приоритеты для нескольких предикторов в rstanarm?

require(rstanarm) 

wi_prior <- normal(0, sd(train$attendance)) 
SEED  <- 101 

fmla <- attendance ~ (1 + W + W1 + W2 + W3 + DivWin1 + DivWin2 + DivWin3 + 
         WSWin1 | franchID) 

baylm <- stan_glmer(fmla, 
        data = train, 
        family = "gaussian", 
        algorithm = "sampling", 
        adapt_delta = .95, 
        prior_intercept = wi_prior, seed = SEED) 

Вот первое наблюдение в поезде, по желанию.

train <- structure(list(franchID = structure(25L, .Label = c("ANA", "ARI", 
                  "ATL", "BAL", "BOS", "CHC", "CHW", "CIN", "CLE", "COL", "DET", 
                  "FLA", "HOU", "KCR", "LAD", "MIL", "MIN", "NYM", "NYY", "OAK", 
                  "PHI", "PIT", "SDP", "SEA", "SFG", "STL", "TBD", "TEX", "TOR", 
                  "WSN"), class = "factor"), yearID = 1999L, name = "San Francisco Giants", 
         park = "3Com Park", attendance = 2078399L, W = 86L, W1 = 89L, 
         W2 = 90L, W3 = 68L, WCWin1 = FALSE, WCWin2 = FALSE, WCWin3 = FALSE, 
         DivWin1 = FALSE, DivWin2 = TRUE, DivWin3 = FALSE, LgWin1 = FALSE, 
         LgWin2 = FALSE, LgWin3 = FALSE, WSWin1 = FALSE, WSWin2 = FALSE, 
         WSWin3 = FALSE), .Names = c("franchID", "yearID", "name", 
                "park", "attendance", "W", "W1", "W2", "W3", "WCWin1", "WCWin2", 
                "WCWin3", "DivWin1", "DivWin2", "DivWin3", "LgWin1", "LgWin2", 
                "LgWin3", "WSWin1", "WSWin2", "WSWin3"), row.names = c(NA, -1L 
                ), class = "data.frame") 
+0

Пожалуйста, 'dput()' поезд, чтобы сделать это воспроизводимым. –

+0

Спасибо, что ответили. Необходимы ли данные для этого вопроса? Я хотел бы указать, что Ws, скажем, N (80,20), и что DivWins и WSWins являются дистрибутивами bernoulli, например. – ssp3nc3r

ответ

2

Вы можете указать до для коэффициентов на K предсказателях пропускания вектора длину К одному из поддерживаемых дистрибутивов для настоятелей. Например, если K = 4 вы можете сделать

wi_prior2 <- normal(location = c(0, 1, -2, 5)) 

Вы также мог бы пройти вектор весов и/или иной семьи, чем normal. Затем вы должны позвонить stan_glmer с prior = wi_prior2. Если вы делаете

wi_prior2 <- normal(location = 0) 

то то же самое было бы использовано для всех K общих коэффициентов.

Однако, в вашем случае я подозреваю, что ошибка fmla. Обычно вы также хотите включить большинство, если не все, этих предсказателей вне выражения в виде скобки lme4, чтобы разрешить общие эффекты на всех уровнях franchID. Таким образом, fmla станет

fmla <- attendance ~ W + W1 + W2 + W3 + DivWin1 + DivWin2 + DivWin3 + 
     WSWin1 + (1 + W + W1 + W2 + W3 + DivWin1 + DivWin2 + DivWin3 + 
        WSWin1 | franchID) 

Если вы только включить часть в скобках, то предполагает, что коэффициенты при этих переменных точно нуле в популяции и только отклоняться от нуля в субпопуляции определенных уровней franchID. Таким образом, не было бы возможности поставить предыдущие распределения по их коэффициентам.

Предварительные групповые отклонения от общих коэффициентов условно-многомерные нормали со средним вектором нуля и несколько сложной, но неизвестной структурой ковариации. Это объясняется более подробно в help(priors, package = "rstanarm").

 Смежные вопросы

  • Нет связанных вопросов^_^