如何在nlme包中建立嵌套随机效应模型

3

我有一个线性混合模型中的两个因素。将因素A视为固定效应,将因素B视为随机效应并嵌套在因素A中。请问如何使用nlme R包进行建模?

我知道lme( response~ factorA, random=~1|factorA/factorB)是一种建模方法。但是,这个函数将因素A视为随机效应。


1
为什么不直接写成 lme( response~ factorA, random=~1|factorB) 呢? - IRTFM
因素B嵌套在因素A中。 - Colin
没错,但这与将因子A指定为随机因子有何不同呢? - IRTFM
没有人指定任何因素为随机因素。只有截距被指定为在某些因素之间是随机的。如果您希望拦截在factorB的水平之间是随机的,DWin的第一个建议似乎是合理的。 - ndoogan
也许你需要更清晰地用英语描述你的研究,这样就不会像猜谜游戏一样了。 - ndoogan
2个回答

4
看起来你的数据结构是这样的,个体观测值嵌套在由 factorB 标识的群组内。这些群组进一步被嵌套在由 factorA 标识的更大群组内。你不希望这个层次结构的最高级别有自己的随机截距项。相反,你只用因子作为固定效应来建模变异。好的,那么剩下的就是允许截距在 factorB 中变化。这正是 DWin 建议的。
lme(response ~ factorA, random=~1|factorB)

然而,目前并不完全清楚这是否是您真正想要的。从您提出的问题中也无法确定您的数据真实结构。如果您更新问题,我会相应地更新答案。


4
这取决于你的变量如何编码。你可能会为factorB中的变量使用不同的名称,就像这样;那么只将factorB作为随机效应即可。
factorA  factorB
bob      bob1
bob      bob2
bob      bob3
jane     jane1
jane     jane2
jane     jane3

lme(response ~ factorA, random=~1|factorB)

但是,factorB 可能在 factorA 的每个水平上具有相同的变量编码,就像这样;那么,仅将 factorB 视为随机效应是不正确的;相反,您需要将随机效应设置为它们之间的交互作用。我认为使用 : 的代码会起作用,但更易读的方法可能是创建一个新变量。

factorA  factorB
bob      rep1
bob      rep2
bob      rep3
jane     rep1
jane     rep2
jane     rep3

lme(response ~ factorA, random=~1|factorA:factorB)

dat$factorAB <- with(dat, factor(paste(factorA, factorB), sep="."))
lme(response ~ factorA, random=~1|factorAB)

我认为 dat$factorAB <- with(dat, factor(paste(factorA, factorB), sep="."))factorA:factorB 相同,除了用于分隔组合的字符。 - ndoogan
1
另外,如果factorB可以唯一标识每个数据点(我知道我们不知道),那么允许参数在该因子上变化会重复残差误差项(即可能不被允许)。 - ndoogan
关于@ndoogan的第一条评论:是的,:paste确实有非常相似的结果,尽管:会为每个组合创建级别,即使该组合不存在。我认为在公式中使用:是可行的,但应该检查任何额外的级别是否会引起问题,并确保公式机制适当地处理: - Aaron left Stack Overflow
1
@ndoogan的第二条评论说得很对:我的示例数据集应该包括每个组合的多行,否则随机效应是不必要的,而且根据软件的不同,可能会失败。 - Aaron left Stack Overflow
很高兴听到这个消息,@Colin。请勾选答案旁边的对号,以便其他人知道它已经解决了问题。你也可以给任何有帮助的答案(包括这个)点赞。欢迎来到StackOverflow! - Aaron left Stack Overflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接