【问题标题】:R Mediation Analysis -- BootstrappingR 中介分析——自举
【发布时间】:2012-09-11 04:58:04
【问题描述】:

我正在尝试使用中介包在 R 中进行中介分析。我查看了有关如何执行此操作的文档,并通读了 R 提供的示例(即,我已经运行了“example(mediate)”)。尽管如此,我还是无法运行最简单的调解。理想情况下,我想做一个引导程序,如 Preacher & Hayes (2004)。

这是我要运行的代码:

model.m <- lm(desirdata1$zpers1 ~ desirdata1$zdesir1 + desirdata1$age)
model.y <- lm(desirdata1$zpers1 ~ desirdata1$age)
age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1",
                    boot=TRUE, sims=50)

请注意,数据集称为desirdata,处理称为age,结果称为zpers1,中介称为“zdesir1”。当我运行它时,我收到以下错误:

Error in `[.data.frame`(m.data, , treat) : undefined columns selected

它似乎声称一个变量(特别是治疗变量)不存在。但是,运行 names(desirdata) 表明该变量存在,并且命名正确,所有其他变量也是如此。前两个模型(model.m 和 model.y)运行良好,输出看起来应该是这样。这只是我无法运行的中介模型。据我所知,我没有打错字,而且我已经检查了一百次。

想法?

【问题讨论】:

  • 我猜你的意思是写“中介包”?
  • 它正在寻找age,但它找到了desirdata1$age。不太一样的泡菜(我认为这就是@Dwin 对“分解”评论的意思)。
  • DWin--是的,中介包。该死。并感谢您的投入,罗曼。

标签: r statistics-bootstrap


【解决方案1】:

当我阅读文档中的示例时,中介模型的model.m 与主回归对象model.y 的结果不同。由于您没有描述背景和什么样的数据,所以很难确定这一点,但想知道您是否打算输入:

model.m <- lm(zdesir1 ~  age, data=desirdata1)
model.y <- lm(zpers1 ~ age, , data=desirdata1 )
age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1",
                    boot=TRUE, sims=50)

我使用formuladata 对象对其进行转换,因为某些回归函数在刚给定向量时会崩溃。还可以更容易地查看错别字。

【讨论】:

  • DWin-- 谢谢,我认为您的解释是正确的,但我仍然无法运行它。我尝试了您的版本,现在出现了同样的错误,但声称中介不存在:[.data.frame(y.data, , mediator) 中的错误:选择了未定义的列。还有其他想法吗?
【解决方案2】:

您的模型不正确。 model.m 应该从 IV 预测 mediator,model.y 应该从 mediator 和 IV 预测 DV。

model.m <- lm(desirdata1$zdesir1 ~ desirdata1$age)
model.y <- lm(desirdata1$zpers1 ~ desirdata1$zdesir1 + desirdata1$age)
age1test <- mediate(model.m, model.y, treat="age", mediator="zdesir1", boot=TRUE, sims=50)

【讨论】:

    【解决方案3】:

    试试 MBESS 包。传教士推荐它,您可以使用调解功能。如果您想要引导程序,只需确保它显示引导程序 = TRUE。 B 是引导程序的数量。

    mediation(x, mediator, dv, S = NULL, N = NULL, x.location.S = NULL,
    mediator.location.S = NULL, dv.location.S = NULL, mean.x = NULL,
    mean.m = NULL, mean.dv = NULL, conf.level = 0.95,
    bootstrap = FALSE, B = 1000, which.boot="both", save.bs.replicates=FALSE)
    

    【讨论】:

    • 好吧,我试试这个作为另一种选择。不过我还是遇到了一些麻烦,如果您有任何想法,请随时分享。当我尝试运行它时,我收到一个错误,指示矩阵的行数必须匹配:cbind(x, mediator, dv) 中的错误:矩阵的行数必须匹配(参见参数 3)。但是,我已经排除了任何缺失的数据,并且每个变量的 n 都是相同的 (13044)。有什么想法会让它不高兴吗?
    【解决方案4】:

    我在使用模拟数据时遇到了同样的问题,所以我运行了 debug(mediate) 并找到了问题所在。我相信问题出在代码的 [treat="age", mediator="zdesir1"] 部分。如果您附加数据,则不应遇到该问题。或者,您可以使用应该解决问题的 [treat="desirdata1$age", mediator="desirdata1$zdesir1"]。

    【讨论】:

      【解决方案5】:

      试试这个:

      model.m <- lm(zdesir1 ~ age, data=desirdata1)
      model.y <- lm(zpers1 ~ age + zdesir1, data=desirdata1)
      age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1",
                          boot=TRUE, sims=50)
      

      为简单起见,中介模型 (model.m) 应该将中介作为结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 2022-07-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多