R: неопределенная ошибка столбца при использовании медиатора в пользовательской функции - PullRequest
1 голос
/ 18 мая 2019

Я выполняю серию анализов посредничества с использованием пакета R's mediation.Поскольку модели очень похожи друг на друга, я написал функцию, в которой все, что могло бы измениться, это переменная-посредник, переменная результата и набор данных.Функция ниже:

    library(mediation)
    data("framing", package = "mediation")
    covList <- list("age", "educ", "gender", "income")

    meBrokenFunction <- function(MEDIATOR, OUTCOME, DATA) {

      treatOnMed <- lm(DATA[[MEDIATOR]] ~ treat + age + educ + gender + income, data = DATA)

      medOnOut <- glm(DATA[[OUTCOME]] ~ DATA[[MEDIATOR]] + treat + age + educ + gender + income, data = DATA, family = binomial("probit"))

      expt <- mediate(treatOnMed, medOnOut, sims = 100, 
                      treat = "treat", mediator = MEDIATOR, 
                      covariates = covList, robustSE = TRUE)
      expt
    }  
    set.seed(2019)
    test_first <- meBrokenFunction("emo", "cong_mesg", framing)

Когда я запускаю эту функцию, я получаю следующую ошибку:

Error in `[.data.frame`(y.data, , mediator) : undefined columns selected 

Однако, если я запускаю код без использования написанной мной функции, все работает какпредназначен.

test_treatOnMed <- lm(emo ~ treat + age + educ + gender + income, 
                        data = framing)
test_treatOnOut <- glm(cong_mesg ~ treat + age + educ + gender + income,
                        data = framing, family = binomial("probit"))
test_medOnOut <- glm(cong_mesg ~ emo + treat + age + educ + gender + income,
                        data = framing, family = binomial("probit"))

test_second <- mediate(test_treatOnMed, test_medOnOut, sims = 100, 
                  treat = "treat", mediator = "emo", 
                  covariates = covList, robustSE = TRUE)

Ошибка, по-видимому, в функции-посреднике, в частности, на mediator = MEDIATOR, но я не понимаю, почему она не работает или если я неправильно подхожу к проблеме.

1 Ответ

0 голосов
/ 18 мая 2019

В формуле нам может потребоваться paste вместо DATA[[MEDIATOR]]

lm(paste(MEDIATOR,  "~ treat + age + educ + gender + income"), data = DATA)

Аналогично для glm

-fullcode

meFixedFunction <- function(MEDIATOR, OUTCOME, DATA) {

      treatOnMed <- lm(paste(MEDIATOR,  
          "~ treat + age + educ + gender + income"), data = DATA)

      medOnOut <- glm(paste(OUTCOME, "~", MEDIATOR,
         "+ treat + age + educ + gender + income"), data = DATA, 
             family = binomial("probit"))

      expt <- mediate(treatOnMed, medOnOut, sims = 100, 
                      treat = "treat", mediator = MEDIATOR, 
                      covariates = covList, robustSE = TRUE)
      expt
    }  

set.seed(2019)
test_first <- meFixedFunction("emo", "cong_mesg", framing)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...