2011-10-20 105 views
12

我想知道如何用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 

预先感谢您的时间和合作。

+0

它可能会通过“熔化”的数据集来做到这一点(即使Y1和Y2独立观测与共同的“ID”变量),然后拟合与模型ID作为随机效应。现在没有时间详细说明。您可能想在r-sig-mixed-models列表中提出这个问题。 –

+0

@Ben Bolker:谢谢你的评论。我在等待你的答复。谢谢 – MYaseen208

+2

我已经在http://rpubs.com/bbolker/3336 –

回答

11

这有时可以令人满意的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免费下载。我会在那里向你推荐任何进一步的建议,因为这是一个很有趣的话题,我是一个新手。

+0

感谢您的回复。我非常感谢,如果你给lme4或nlme更多的指导方针来适应这种模型。谢谢 – MYaseen208

+0

您有基本的语法,但确定适合的具体模型将完全取决于您的数据和实验结构。这可能不是适合的论坛。如果您对混合模型不熟悉,* S和S-Plus *中的混合效果模型是nlme包附带的书籍,可能是一个很好的开始。 –

5

lmer及其前辈兄弟姐妹本质上是“〜的一个参数”。看看汽车包装;它没有提供现成的重复测量的支持,但你会通过搜索将R列表中找到关于这个问题的几点意见:通过简单地重新格式化

John Fox on car package

+0

提出了一些更多的细节感谢您的回复。你能提供更多细节吗?谢谢 – MYaseen208

1

@约翰的答案应该在很大程度上是正确的。您将一个虚拟变量(即 - 因子变量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} + \测试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 
相关问题