2016-06-13 1 views
3

Итак, я приспособил линейную смешанную модель с двумя случайными перехватывает в R:Как получить ковариационной матрицы для случайных эффектов (BLUPs/условные режимы) от lme4

Y = X beta + Z b + e_i, 

b ~ MVN (0, Sigma) где; X и Z являются матрицами модели фиксированных и случайных эффектов соответственно, а beta и b являются параметрами фиксированного эффекта и BLUP/условными режимами случайных эффектов.

Я хотел бы получить информацию о лежащей в основе ковариационной матрице b, которая, похоже, не является тривиальной вещью в пакете lme4. Вы можете получить только отклонения от VarCorr, а не фактическую корреляционную матрицу.

Согласно one of the package vignettes (стр. 2), вы можете вычислить ковариацию бета-версии: e_i * lambda * t(lambda). И все те компоненты, которые вы можете извлечь из вывода lme4.

Мне было интересно, не так ли это? Или у вас есть другие предложения?

+1

Добро пожаловать в StackOverflow. Пожалуйста, уточните свою математическую нотацию (Xbeta на самом деле X * beta), вероятно, вы также должны указать, что такое бета, b, сигма, хотя я не эксперт и для * некоторых * эти обозначения могут быть очевидными). Помните, что чем яснее вы задаете свой вопрос, тем более вероятным и быстрым вы получите соответствующий ответ. – YakovL

+0

Да, Xbeta должна была быть X * beta. Бета - вектор фиксированных эффектов проектной матрицы X, b - вектор случайных эффектов, а сигма - ковариационная матрица дисперсии b. Спасибо за подсказку, я буду помнить об этом. –

ответ

2

От ?ranef:

Если «condVar» имеет значение «TRUE» каждый из кадров данных имеет атрибут под названием «postVar"», который представляет собой трехмерный массив с симметричными граней; каждая грань содержит матрицу дисперсии-ковариации для конкретного уровня фактора группировки для . (Имя этого атрибута является историческим артефактом, и может быть изменено на «condVar» в каком-то момент в будущем.)

Установите пример:

library(lme4) 
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy) 
rr <- ranef(fm1,condVar=TRUE) 

Получить дисперсию -covariance матрица среди b значений для перехвата

pv <- attr(rr[[1]],"postVar") 
str(pv) 
##num [1:2, 1:2, 1:18] 145.71 -21.44 -21.44 5.31 145.71 ... 

Так что это 2x2x18 массив; каждый срез представляет собой матрицу дисперсии-ковариации между условным перехватом и наклоном для конкретного объекта (по определению, перехваты и наклоны для каждого субъекта не зависят от перехватов и наклонов для всех других предметов).

Чтобы преобразовать это в матрицу ковариационной (см getMethod("image",sig="dgTMatrix") ...)

library(Matrix) 
vc <- bdiag( ## make a block-diagonal matrix 
      lapply(
       ## split 3d array into a list of sub-matrices 
       split(pv,slice.index(pv,3)), 
        ## ... put them back into 2x2 matrices 
         matrix,2)) 
image(vc,sub="",xlab="",ylab="",useRaster=TRUE) 

enter image description here

+0

Большое вам спасибо! Я проверю это: –

+0

StackOverflow обесценивается [используя комментарии, чтобы сказать «спасибо»] (http://meta.stackoverflow.com/questions/258004/should-thank-you-comments-be-flagged?LQ = 1); если этот ответ был полезен, вы можете его перенести (если у вас есть достаточная репутация), и в любом случае, если он удовлетворит ваш вопрос удовлетворительно, вам предлагается щелкнуть галочку, чтобы принять его. –

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