如何在 R 中的混合效应模型中约束参数?

How to constrain a parameter in a mixed effect model in R?

我正在尝试使用受限参数来拟合混合效果模型,并且正在努力使其发挥作用。稍微复杂一点的是,其中一项应该是多项式。

基本上我要找的是类似下面的东西,其中 var 1 固定为某个值。

mod1 <- lmer(结果 ~ var1 + poly(var2,2) + (1 | Study), df)

似乎可以使用带有 Nelder-Mead 选项的 lmer 来完成,但我完全可以全神贯注地思考如何让它发挥作用。

我也尝试过使用 lavaan 包,但我以前从未使用过它,而且在某个地方挂断了。这是一个例子...

library(lavaan)

reprex_df <- structure(list(outcome = c(0.54, 5.06, 15.35, 5.4, 5.3, 1.57, 
                                        2.11, 2.71, 9.09, 7.96, 28.8, 4.4, 3.38, 15.43, 4.05), var1 = c(0.55, 
                                                                                                        3.42, 2.24, 2.24, 3.44, 1.82, 1.82, 2.23, 5.41, 2.61, 6.94, 3.98, 
                                                                                                        2.23, 5.29, 3.28), var2 = c(111, 235, 60, 197, 369, 342.78, 240.99, 
                                                                                                                                    406.5, 264, 263.8, 76, 679, 338, 116, 683), study = c("Study 1", 
                                                                                                                                                                                   "Study 2",  "Study 2",  "Study 2", "Study 3", 
                                                                                                                                                                                   "Study 4", "Study 4", "Study 6", "Study 5", 
                                                                                                                                                                                   "Study 7", "Study 2", "Study 7", "Study 6", 
                                                                                                                                                                                   "Study 5", "Study 2")), row.names = c(NA, -15L), class = c("tbl_df", "tbl", "data.frame"))

我想我可以做一个基本模型(没有多项式)

reprex_df

test.model <- '  outcome  ~ var1 + var2 + study'

test.model <- sem(test.model, 
                    data = reprex_df, cluster = "study")
coef(test.model)

但是当我尝试将 var1 限制为特定值时出现错误

test.model.constr <- '  outcome    ~ var1 + var2 + study

var1 == 4.87
'

test.model.constr <- sem(test.model.constr, 
                  data = reprex_df, cluster = "study")

任何有助于约束参数(使用 lmer 或 lavaan)的帮助 and/or 在 lavaan 中添加多项式项将不胜感激。

这很棘手,因为 lmer“剖析”了 fixed-effect 参数,即它们没有明确地作为非线性优化步骤的一部分进行拟合。

假设var1是numeric/continuous,我们要设置一个系数b,那么

mod1 <- lmer(outcome ~ 1 + offset(b*var1) + poly(var2,2) + (1 | Study), df)

?这会将术语 b*var1 直接添加到模型中。

glmmTMB 包有一个 map 参数,允许用户将任何参数显式固定为特定值(或将多个参数限制为具有公共值)。