Сброс наблюдений внутри цикла не работает с опосредованным - PullRequest
0 голосов
/ 08 февраля 2019

Я написал цикл for вокруг функции-посредника из пакета-посредника, чтобы проверить всю переменную результата j с помощью посредника i с переменной лечения "Treat".Если я выбираю результат и медиатор вручную, функция работает и отбрасывает несопоставленные наблюдения с помощью dropobs = T, но в цикле for это не удается сделать, поэтому я получаю ошибку:

Error in mediate(model.M, model.Y, treat = e$treat, mediator = e[, i], : number of observations do not match between mediator and outcome models

Цикл:

for (i in mediator)
{ for (j in outcome)
{ 
  model.Y <- lm(e[ ,j] ~ e$treat + e[, i], data=e)
  model.M <- lm(e[, i] ~ e$treat, data=e)

results <- mediate(model.M, model.Y, treat= "treat", mediator= i,
          boot=F, sims=1000, dropobs = T, control.value = "No", treat.value = "Yes")
}
}

Я пытался добавить data=e и e$, так как это, казалось, помогло с рукописной функцией.

Буду признателен за любые удобные трюки, чтобы попробоватьзаставить его работать?

Редактировать: Воспроизводимый пример

install.packages("mediation")
library(mediation)    
data(Cars93,package="MASS")

mediator <- c("Weight", "Width", "Length")
outcome <- c("Price", "EngineSize")
kolumns <- c("outcome", "mediator", "effect", "sig")


MED = data.frame (matrix(nrow = length(mediator)*length(outcome), ncol = length(kolumns)))
names (MED) = kolumns
MED$outcome = rep(outcome, each=length(mediator))
MED$mediator = rep(mediator, times=length(outcome))


for (i in mediator)
{ for (j in outcome)
{ 
  model.Y <- lm(Cars93[ ,j] ~ Cars93$Origin + Cars93[, i], data=Cars93)
  model.M <- lm(Cars93[, i] ~ Cars93$Origin, data=Cars93)

  results <- mediate(model.M, model.Y, treat= Cars93$Origin, mediator= Cars93[,i],
                     boot=F, sims=100, dropobs = T)

  MED[MED$outcome ==j & MED$mediator ==i, "effect"] = 
    summary(results)$d.avg
  MED[MED$outcome ==j & MED$mediator ==i, "sig"] = 
    summary(results)$d.avg.p

}
}
...