使用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函数的变量识别逻辑不兼容,解决步骤如下:
- 提前预处理数据,转换变量类型并保存到数据框
不要在lm公式里临时用as.numeric()转换,先把变量转成数值型并作为新列存入数据集:
# 转换变量类型并保存 GRA$Age_num <- as.numeric(GRA$Age) GRA$condition_num <- as.numeric(GRA$condition)
- 用预处理后的变量构建回归模型
使用新生成的变量名构建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也是非数值型,同样建议提前转换后再建模
- 调用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
相关产品推荐
相关产品推荐

