带截距约束的lmer多层次拟合

3
我经常遇到这个问题:我想拟合一个带约束的多层回归模型,但不知道如何操作。通常我会使用 lavaan,它可以对回归系数设置约束。但它不能拥有随机斜率模型(只能有随机截距),而事实上我也不知道如何在 lavaan 中设置截距的约束。我希望能够采用多层方法。

所以基本上我的 y 变量是一个关于 x 的二阶多项式函数,其系数取决于主题 ID

library(data.table)
library(ggplot2)

df <- data.table(x = rep(0:10,5),ID = rep(LETTERS[1:5],each = 11))
df[,a:= rnorm(1,2,1),by = ID]
df[,b:= rnorm(1,1,0.2),by = ID]
df[,y := rnorm(.N,0,10) + a*x + b*x^2 ]

ggplot(df,aes(x,y,color = ID))+
  geom_point()

在此输入图片描述

我可以进行正常的多级处理:

lmer(y ~ x + I(x^2) + (x+ I(x^2)|ID),df)

但我希望将截距限制为0。有简单的方法吗? 谢谢


更一般地说,如果您想限制斜率(或者您想将截距限制为非零值),通常可以使用偏移量来实现。如果您想以不同的方式限制参数,则可以查看?lme4::modular,了解如何在非线性优化步骤中分解拟合过程并添加约束条件... - Ben Bolker
1个回答

3
您可以使用-1来抑制拦截。例如:
coef(summary(lmer(y ~ x + I(x^2) + (x+ I(x^2)|ID),df)))
             Estimate Std. Error    t value
(Intercept) -1.960196   4.094491 -0.4787398
x            2.535092   1.754963  1.4445275
I(x^2)       1.015212   0.130004  7.8090889

coef(summary(lmer(y ~ -1 + x + I(x^2) + (x+ I(x^2)|ID),df)))
       Estimate Std. Error  t value
x      1.831692  0.9780500 1.872800
I(x^2) 1.050261  0.1097583 9.568856

哇,太棒了又简单。系数有没有类似这么简单的东西? - denis
要删除预测变量,您可以使用 update。如果您的原始模型拟合为 m <- lmer(y ~ +x + I(x^2) + (x+ I(x^2)|ID),df),那么要删除 x,您可以执行 m2 <- update(m, .~.-x) - bobbel

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