首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lme4中的多元线性混合模型

lme4中的多元线性混合模型
EN

Stack Overflow用户
提问于 2011-10-20 12:43:54
回答 3查看 13.3K关注 0票数 15

我想知道如何用lme4拟合多元线性混合模型。我用以下代码拟合了单变量线性混合模型:

代码语言:javascript
复制
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拟合多元线性混合模型。数据如下:

代码语言:javascript
复制
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

提前感谢您的时间和合作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-28 03:17:07

这有时可以在nlme/lme4中通过简单地重新格式化数据来令人满意地伪装,如下所示

代码语言:javascript
复制
require(reshape)
Data = melt(data, id.vars=1:3, variable_name='Y')
Data$Y = factor(gsub('Y(.+)', '\\1', Data$Y))
代码语言:javascript
复制
> 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免费下载。我会在那里向你推荐任何进一步的建议,因为这是一个有意义的话题,而我是一个非常新手。

票数 14
EN

Stack Overflow用户

发布于 2011-10-20 14:42:32

lmer和它的长辈lme天生就是“~的一个参数”。看一下汽车包;它没有提供现成的重复测量支持,但是你可以通过搜索R列表找到一些关于这个主题的评论:

John Fox on car package

票数 5
EN

Stack Overflow用户

发布于 2015-03-07 08:43:44

@John上面的答案应该大体上是正确的。将一个虚拟变量(即因子变量Y)添加到模型中。这里有3个下标i= 1...N表示观测值,j=1,...,4表示块,h=1,2表示从属变量。但您还需要强制级别1误差项为0(或接近零),我不确定lme4是否做到了这一点。Ben Bolker可能会提供更多信息。这在Goldstein (2011)第6章和第7章关于潜在多变量模型中有更多的描述。

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

所以:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7831243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档