混合模型中协变量的正确语法,或者lme / lmer中的星号与斜杠的正确语法

问题描述 投票:1回答:1

我正在对依赖于体型的生态数据进行回归分析,即体型应该是协变量。所以,我有两个分类变量,一个连续变量。此外,两个随机效应(空间块结构,嵌套在实验单元内 - 均为分类)。我正在使用lmelmer,我的模型看起来像这样(在lmer语法中):

dep-var ~ fix-var1(cat) * fix-var2(cat) * covariate(cont) + (1|block/exp-unit)

有人建议使用斜线/而不是星号*for和ANCOVA模型,所以公式看起来像

dep-var ~ fix-var1 * fix-var2 / covariate + (1|block/exp-unit)

然而,这给了我完全不同的输出,突然相互作用变得显着,并且主效应消失了。我无法找到这些运营商使用之间的确切差异的详细信息。

有人可以赐教吗?

r lme4 mixed-models
1个回答
0
投票

与许多与R中模型公式的解释相关的问题一样,这个问题并不是特定于混合模型,而是通常适用于R的公式扩展机制。

在解释公式时,弄清楚R正在做什么的好方法是使用model.matrix()(构造R用来拟合模型的基础模型矩阵)并查看输出的列名。

这是一个2x2阶乘设计和一个协变量的例子:

dd <- expand.grid(fv1=c("a","b"),
                  fv2=c("A","B"))
dd$covar <- 1:4

你的第一种方式:

colnames(model.matrix(~fv1*fv2*covar,dd))
## [1] "(Intercept)"     "fv1b"            "fv2B"            "covar"           "fv1b:fv2B"      
## [6] "fv1b:covar"      "fv2B:covar"      "fv1b:fv2B:covar"

共有8个参数((截距+斜率)x 2个fv1水平x 2个水平的fv2)。该模型被参数化为(a,A)((Intercept))的截距;根据因素(b,B)及其相互作用的截距差异; (a,A)(covar)的斜率;根据因素及其相互作用的斜率差异。

如果我们使用/而是会发生什么?

colnames(model.matrix(~fv1*fv2/covar,dd))
## [1] "(Intercept)"     "fv1b"            "fv2B"            "fv1b:fv2B"       "fv1a:fv2A:covar"
## [6] "fv1b:fv2A:covar" "fv1a:fv2B:covar" "fv1b:fv2B:covar"

截距的参数化看起来相同,但是斜率的参数化估计每个因子组合的单独斜率,而不是估计(a,A)的斜率以及b,B及其相互作用的斜率与斜率的差异。 。这很可能不是您想要的,除非您想要测试单个斜率与零基线(而不是测试因子组合中斜率之间的差异)。

如果您将模型指定为~(fv1*fv2)/covar,则截距和斜率参数都会扩展为因子组合估计,而不是因子间估计之间的差异。

colnames(model.matrix(~(fv1*fv2)/covar,dd))
## [1] "(Intercept)"     "fv1b"           
## [3] "fv2B"            "fv1b:fv2B"      
## [5] "fv1a:fv2A:covar" "fv1b:fv2A:covar"
## [7] "fv1a:fv2B:covar" "fv1b:fv2B:covar"
© www.soinside.com 2019 - 2024. All rights reserved.