Многомерная линейная смешанная модель в lme4 - PullRequest
14 голосов
/ 20 октября 2011

Интересно, как совместить многомерную линейную смешанную модель с lme4. Я установил одномерные линейные смешанные модели со следующим кодом:

library(lme4)
lmer.m1 <- lmer(Y1~A*B+(1|Block)+(1|Block:A), data=Data)
summary(lmer.m1)
anova(lmer.m1)

lmer.m2 <- lmer(Y2~A*B+(1|Block)+(1|Block:A), data=Data)
summary(lmer.m2)
anova(lmer.m2)

Я хотел бы знать, как согласовать многомерную линейную смешанную модель с lme4. Данные ниже:

Block A B    Y1    Y2
 1    1 1 135.8 121.6
 1    1 2 149.4 142.5
 1    1 3 155.4 145.0
 1    2 1 105.9 106.6
 1    2 2 112.9 119.2
 1    2 3 121.6 126.7
 2    1 1 121.9 133.5
 2    1 2 136.5 146.1
 2    1 3 145.8 154.0
 2    2 1 102.1 116.0
 2    2 2 112.0 121.3
 2    2 3 114.6 137.3
 3    1 1 133.4 132.4
 3    1 2 139.1 141.8
 3    1 3 157.3 156.1
 3    2 1 101.2  89.0
 3    2 2 109.8 104.6
 3    2 3 111.0 107.7
 4    1 1 124.9 133.4
 4    1 2 140.3 147.7
 4    1 3 147.1 157.7
 4    2 1 110.5  99.1
 4    2 2 117.7 100.9
 4    2 3 129.5 116.2

Заранее благодарим за ваше время и сотрудничество.

Ответы [ 3 ]

12 голосов
/ 27 октября 2011

Иногда это может быть удовлетворительно подделано в nlme / lme4, просто переформатируя ваши данные как

require(reshape)
Data = melt(data, id.vars=1:3, variable_name='Y')
Data$Y = factor(gsub('Y(.+)', '\\1', Data$Y))
> Data
  Block A B Y value
1     1 1 1 1 135.8
2     1 1 2 1 149.4
3     1 1 3 1 155.4
4     1 2 1 1 105.9
5     1 2 2 1 112.9
6     1 2 3 1 121.6
...

и затем включение новой переменной Y в вашу линейную смешанную модель.

Однако для истинных многомерных обобщенных линейных смешанных моделей (MGLMM) вам, вероятно, понадобится пакет sabreR или аналогичный. К пакету прилагается также целая книга: Многомерные обобщенные линейные смешанные модели с использованием R . Если у вас есть прокси-сервер подписавшегося учреждения, вы можете даже загрузить его бесплатно с http://www.crcnetbase.com/isbn/9781439813270. Я бы направил вас туда за любыми дополнительными советами, так как это тяжелая тема, и я очень новичок .

5 голосов
/ 20 октября 2011

lmer и его старший брат Ime по своей сути являются «одним параметром, оставшимся от ~». Посмотрите на пакеты автомобилей; он не предлагает готовую поддержку повторных измерений, но вы найдете несколько комментариев по этому вопросу, выполнив поиск в списке R:

Джон Фокс на автомобильном пакете

1 голос
/ 07 марта 2015

@ Ответ Джона выше должен быть в значительной степени правильным. Вы добавляете фиктивную переменную (т.е. факторную переменную Y) в модель. Здесь у вас есть 3 подписки i= 1...N для наблюдений, j=1,...,4 для блоков и h=1,2 для зависимых переменных. Но вам также нужно принудительно установить уровень ошибки уровня 1 в 0 (или почти в ноль), что я не уверен, lme4 делает. Бен Болкер может предоставить больше информации. Это описано более подробно в Goldstein (2011), глава 6 и глава 7, для скрытых многомерных моделей.

IE

Y_hij = \ beta_ {01} z_ {1ij} + \ beta_ {02} z_ {2ij} + \ beta X + u_ {1j} z_ {1ij} + u_ {2j} z_ {2ij}

Итак:

require(reshape2)
Data = melt(data, id.vars=1:3, variable_name='Y')
Data$Y = factor(gsub('Y(.+)', '\\1', Data$Y))

m1 <- lmer(value ~ Y + A*B + (1|Block) + (1|Block*A), data= Data)
# not sure how to set the level 1 variance to 0, @BenBolker
# also unclear to me if you're requesting Y*A*B instead of Y + A*B
...