提问人:killiann 提问时间:11/8/2023 最后编辑:TylerHkilliann 更新时间:11/10/2023 访问量:22
在中介模型中找不到对象
object not found in mediation model
问:
我必须规划一个简单的中介模型 - https://cran.r-project.org/package=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)
它会产生以下错误:
运行非参数引导程序
eval(predvars, data, env) 中的错误:找不到对象“Age”
我录上了“鬃毛(GRA)”,我找到了“年龄”。lm 运行良好,我不知道错误在哪里。
答:
1赞
r2evans
11/8/2023
#1
我将正式化评论。
对公式中的数据执行的任何步骤都不会结转到任何模型后分析。这意味着,当您运行 时,、 和 的版本是它们在数据中的原始类;中的系数表明它们应该是数字,但类似数字的运算不起作用。mediate
note
condition
Age
GRA
model
作为对立面,在许多 ML 和预测(在 R 中)管道中,“特征工程”或预处理步骤在某种意义上被记录下来,因此,当您将该 ML/预测模型应用于新数据时,这些步骤将在新数据上重复。这是一种新颖且很好的建模处理方式,但不幸的是,朋友们并没有基于这种架构。lm
(免责声明:我不知道也没有安装它,我不是在谈论您的回归或其使用的正确性。mediate
将列转换为框架(覆盖或保存到新框架,如下所示),然后在调用 or(或任何其他使用模型的函数)时不必担心:GRA
GRA2
as.numeric(.)
lm(.)
mediate(.)
GRA2 <- GRA |>
transform(
note = as.numeric(note),
condition = as.numeric(condition),
Age = as.numeric(Age)
)
mediation_model = lm(Age ~ condition, data = GRA2)
model = lm(note ~ condition + Age, data = GRA2)
result <- mediate(mediation_model, model, sims = 120,
mediator="Age", treat="condition", boot = TRUE)
此外,还有其他方法可以转换这三列,这只是其中之一。我的观点不是你必须使用,随意使用任何你想将三列预先转换为框架的R代码,然后在调用和中使用该框架。transform
lm
mediate
评论
GRA$Age <- as.numeric(GRA$Age)
lm
之所以能够运行,是因为你明确告诉它将变量转换为 -class。任何想要在模型上工作的下游都希望数据已经具有这些相同的变量,没有尝试重新创建对数据采取的步骤。(需要明确的是......在 ML 和 R 中的一些预测工作中,有一种“特征工程”,它的作用类似于记录数据整理步骤,当模型用于新数据时,这些步骤将在新数据上重新创建/重新运行。这是一个伟大的概念,但它不是摘要的一部分。numeric
numeric
lm
lm