Подтвердить что ты не робот

Многомерная линейная смешанная модель в lme4

Интересно, как установить многомерную линейную смешанную модель с 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

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

4b9b3361

Ответ 1

Это иногда может быть сфальсифицировано в 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. Я хотел бы направить вас туда для дальнейших советов, поскольку это мясистая тема, и я очень начинаю.

Ответ 2

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

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

Ответ 3

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