You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言merlin包运行mlrcs函数添加协变量和交互项报错如何处理

报错原因解析
  • 第一个语法错误:merlin包的mlrcs()函数存在公式解析缺陷,当rcs()项出现在公式中间、后面紧跟+连接其他变量时,解析过程会丢失该+运算符,你的公式被错误解析为value ~rcs(time, 3) location,缺少运算符导致语法报错。
  • 第二个运算错误:mlrcs()不会把公式中的*识别为回归交互项语法,而是直接当做算术乘法运算符处理,因子类型的location无法参与乘法运算,因此报非数值参数错误。
解决方案

你将fish作为随机截距项处理重复测量自相关的逻辑是合理的,符合分层模型的规范要求。两种修复方式可选:

方式1:调整公式变量顺序(仅适用于加主效应场景)

把非样条变量放在rcs()项之前,避免rcs()后面紧跟+运算符,主效应模型可正常运行:

mod2_fix <- mlrcs(formula = value ~ location + rcs(time, 3), random  = ~ 1 | fish, data = dat)

该方式不支持交互项写法,如需检验交互请用第二种方式。

方式2:预生成限制性立方样条基函数(通用方案,支持交互)

先手动生成样条基变量再放入模型,完全避开mlrcs()的解析缺陷:

library(rms)
# 生成3个节点的限制性立方样条基,保留原始时间列方便后续分析
rcs_basis <- rcspline.eval(dat$time, nk = 3, inclx = TRUE)
# 基变量并入原数据集
dat <- cbind(dat, setNames(as.data.frame(rcs_basis), paste0("rcs_time_", 1:ncol(rcs_basis))))

# 含location主效应的模型
mod2_fix <- mlrcs(value ~ rcs_time_1 + rcs_time_2 + location, random = ~ 1 | fish, data = dat)

# 含时间样条与location交互的模型,手动写交互项避免用*号
mod4_fix <- mlrcs(value ~ rcs_time_1 + rcs_time_2 + location + rcs_time_1:location + rcs_time_2:location, random = ~ 1 | fish, data = dat)
补充说明

如需检验交互项的整体显著性,可对两个嵌套模型做似然比检验:

anova(mod2_fix, mod4_fix)

检验结果的p值小于显著性阈值即可判定时间与location的交互作用显著。

内容的提问来源于stack exchange,提问作者Dr.FishGirl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:57:02