【问题标题】:lmer multilevel fit with intercept constraintlmer 具有截距约束的多级拟合
【发布时间】:2019-05-13 18:11:29
【问题描述】:

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

【问题讨论】:

  • 更一般地说,如果你想限制 slopes (或者你想将截距限制为非零值),你通常可以使用 offsets我>。如果您想以不同的方式约束参数,您可以查看?lme4::modular 了解如何分解拟合过程并在非线性优化步骤添加约束...

标签: r regression lme4


【解决方案1】:

您可以使用-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

【讨论】:

  • 哇,好简单。系数有那么简单吗?
  • 要删除预测变量,您可以使用update。如果您的原始模型适合m &lt;- lmer(y ~ +x + I(x^2) + (x+ I(x^2)|ID),df),那么要删除x,您可以执行m2 &lt;- update(m, .~.-x)
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 2018-07-06
  • 2015-10-15
  • 2015-04-14
  • 2020-08-27
  • 2016-07-28
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多