Байесовский фактор для линейных смешанных моделей в R - PullRequest
2 голосов
/ 21 октября 2019

Я пытаюсь вычислить коэффициент Байеса (BF) для одного из фиксированных эффектов с пакетом BayesFactor в R.

Данные имеют следующую структуру:

  • rating является зависимой переменной

  • cond является независимой переменной с 3 уровнями ("A", "B", "C")

  • C1 - это код контрастности, полученный из cond, который противопоставляет "A" (кодированный -0.50) "B" и "C" (оба кодированных -0.25)

  • C2 - это код контрастности, полученный из cond, который противопоставляет "B" (кодированный -0.50) "C" (кодированный +0.5; и "A" кодируется 0)

  • judge и face - случайные факторы, такие, что face пересекается с judge, но вкладывается в cond (и, следовательно, также вкладывается в C1 иC2)

DT <- fread("http://matschmitz.github.io/dataLMM.csv")
DT[, judge := factor(judge)]
DT[, face  := factor(face)]

# > DT
#       judge face cond    C1  C2 rating
#    1:    66   13    A -0.50 0.0      1
#    2:    20   13    A -0.50 0.0      4
#    3:    22   13    A -0.50 0.0      7
#    4:    69   13    A -0.50 0.0      1
#    5:     7   13    A -0.50 0.0      3
#   ---                                 
# 4616:    45   62    C  0.25 0.5      2
# 4617:    30   62    C  0.25 0.5      6
# 4618:    18   62    C  0.25 0.5      4
# 4619:    40   62    C  0.25 0.5      3
# 4620:    65   62    C  0.25 0.5      1

В идеале я хотел бы протестировать «полную» модель, как в:

library(lmerTest)

lmer(rating ~ C1 + C2 + (1 + C1 + C2|judge) + (1|face), data = DT)

и вычислить BF для C1.


Мне удалось вычислить BF для C1, но с помощью random перехватывает только:

library(BayesFactor)

BF1 <- lmBF(rating ~ C1 + C2 + judge + face, whichRandom = c("judge", "face"), data = DT)
BF0 <- lmBF(rating ~ C2 + judge + face, whichRandom = c("judge", "face"), data = DT)
BF10 <- BF1 / BF0

# > BF10
# Bayes factor analysis
# --------------
# [1] C1 + C2 + judge + face : 0.4319222 ±15.49%
# 
# Against denominator:
#   rating ~ C2 + judge + face 
# ---
# Bayes factor type: BFlinearModel, JZS

Я безуспешно пытался это решение , чтобы включить случайные наклоны:

BF1 <- lmBF(rating ~ C1 + C2 + judge + face + C1:judge + C2:judge,
            whichRandom = c("judge", "face", "C1:judge", "C2:judge"), data = DT)
# Some NAs were removed from sampling results: 10000 in total.

Я также должен был бы включить (если это возможно)корреляция между случайными перехватами и наклонами для judge.

Пожалуйста, не стесняйтесь использовать любой другой пакет (например, rstan, bridgesampling) в своем ответе.


Некоторые дополнительные вопросы:

  • Нужно ли выполнять какое-либо преобразование на BF10 или я могу интерпретировать его как оно?
  • Каковы основные значения по умолчанию?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...