Извлечение количества наблюдений и режимов случайных эффектов из объекта mer

У меня есть объект mer, созданный с вызовом lmer().

Я могу получить случайные эффекты с помощью ranef(), но я также хотел бы иметь соответствующее количество наблюдений для каждого случайного эффекта - есть ли простой способ сделать это?

Дополнительная информация:

Я, возможно, не совсем ясно выразился выше. Например, если у меня есть простая двухуровневая модель с пациентами, сгруппированными в больницах, и случайными перехватами для больниц, я хотел бы извлечь случайные эффекты для каждой больницы с помощью ranef() вместе с количеством пациентов в пределах каждой больнице. На данный момент я использую

ranef(fullmodel)[[1]]

что дает мне что-то вроде:

     (Intercept)
ADE -0.108195883
BEJ -0.005761677
CIS  0.124129426
CMH  0.270879048
CSI  0.285344837
CUL  0.189308979

Я хотел бы получить что-то вроде:

     (Intercept)  n
ADE -0.108195883  77
BEJ -0.005761677  171
CIS  0.124129426  201
CMH  0.270879048  39
CSI  0.285344837  171
CUL  0.189308979  131

Для этого я использовал

fullmodel <- glmer(.....+(1|hospital), data=dt1)

freqs <- as.data.frame(table(dt1$hospital))
freqs <- freqs[foo$Freq>0,]

А затем cbindдобавляем это к результатам ranef(fullmodel)[[1]]

Однако это кажется бесхитростным и склонным к ошибкам.


person Robert Long    schedule 21.11.2012    source источник


Ответы (2)


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

sapply(ranef(model),nrow)
person Ben Bolker    schedule 21.11.2012
comment
Спасибо, Бен. Извините, если я не ясно выразился в ОП. Я обновил вопрос. - person Robert Long; 22.11.2012

Эта команда возвращает случайные эффекты вместе с частотами уровней случайного фактора:

lapply(names(ranef(model)),
       function(x) cbind(ranef(model)[[x]], table(model.frame(model)[[x]])))
person Sven Hohenstein    schedule 22.11.2012
comment
Я не в восторге от использования @frame; не могли бы вы вместо этого использовать model.frame(model) ... ? - person Ben Bolker; 22.11.2012
comment
@BenBolker Согласен, я изменил свой ответ. - person Sven Hohenstein; 22.11.2012