lmer 多级拟合与截距约束
lmer multilevel fit with intercept constraint
我经常遇到这个问题:我想用约束拟合多级回归。我不知道该怎么做。我通常最终使用 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。有没有简单的方法可以做到这一点?
谢谢
您可以使用 -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
我经常遇到这个问题:我想用约束拟合多级回归。我不知道该怎么做。我通常最终使用 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。有没有简单的方法可以做到这一点? 谢谢
您可以使用 -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