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

使用R语言mediation包建模时遇‘Age未找到’错误求助

解决mediation包mediate函数报错“object 'Age' not found”的问题

问题背景

尝试用R的mediation包构建中介模型,代码如下:

library(mediation)

mediation_model = lm(as.numeric(Age) ~ as.numeric(condition), data = GRA)
tab_model(mediation_model)

model = lm(as.numeric(note) ~ as.numeric(condition) + as.numeric(Age), data = GRA)
tab_model(model)

result <- mediate(mediation_model,model,sims = 120,mediator="as.numeric(Age)",treat="as.numeric(condition)",boot = TRUE)

两个lm模型运行正常,且已确认数据集GRA中存在Age变量,但调用mediate函数时出现错误:

Running nonparametric bootstrap
Error in eval(predvars, data, env) : object 'Age' not found

解决方案

问题出在lm模型里的临时变量转换和mediate函数的变量识别逻辑不兼容,解决步骤如下:

  1. 提前预处理数据,转换变量类型并保存到数据框
    不要在lm公式里临时用as.numeric()转换,先把变量转成数值型并作为新列存入数据集:
# 转换变量类型并保存
GRA$Age_num <- as.numeric(GRA$Age)
GRA$condition_num <- as.numeric(GRA$condition)
  1. 用预处理后的变量构建回归模型
    使用新生成的变量名构建lm模型:
mediation_model <- lm(Age_num ~ condition_num, data = GRA)
tab_model(mediation_model)

model <- lm(as.numeric(note) ~ condition_num + Age_num, data = GRA)
tab_model(model)

注:如果note也是非数值型,同样建议提前转换后再建模

  1. 调用mediate函数时使用新变量名
    在mediator和treat参数中传入预处理后的变量名:
result <- mediate(mediation_model, model, sims = 120, mediator = "Age_num", treat = "condition_num", boot = TRUE)

原因解释

mediate函数在执行bootstrap抽样时,会尝试从原始数据集中直接提取模型中使用的变量。但你之前在lm公式里用的是as.numeric(Age)这种临时表达式,并非数据框中实际存在的列名,函数无法识别并提取对应的变量,因此抛出“object not found”的错误。提前将变量转换后保存为数据框的列,就能让函数正确定位到变量。

内容的提问来源于stack exchange,提问作者killiann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:06