Передача имен переменных в виде строк в аргумент Contrasts () в lm - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь создать функцию, которая позволяет мне передавать имена переменных результата и предиктора в виде строк в функцию регрессии lm(). Я действительно спрашивал об этом раньше здесь , но я изучил новую технику здесь и хотел бы попробовать применить ту же идею в этом новом формате.

Вот процесс

library(tidyverse)

# toy data
df <- tibble(f1 = factor(rep(letters[1:3],5)),
             c1 = rnorm(15),
             out1 = rnorm(15))

# pass the relevant inputs into new objects like in a function 
d <- df
outcome <- "out1"
predictors <- c("f1", "c1")

# now create the model formula to be entered into the model
form <- as.formula(
    paste(outcome,
          paste(predictors, collapse = " + "),
          sep = " ~ "))


# now pass the formula into the model
model <- eval(bquote( lm(.(form), 
                         data = d) ))

model

# Call:
#   lm(formula = out1 ~ f1 + c1, data = d)
# 
# Coefficients:
#   (Intercept)          f1b          f1c           c1  
#       0.16304     -0.01790     -0.32620     -0.07239 

Итак, все это прекрасно работает, адаптируемый способ передачи переменных в lm(). Но что, если мы хотим применить специальное контрастное кодирование к факторной переменной? Я пробовал

model <- eval(bquote( lm(.(form), 
                         data = d,
                         contrasts = list(predictors[1] = contr.treatment(3)) %>% setNames(predictors[1])) ))

Но получил эту ошибку

Error: unexpected '=' in:
"                                                 data = d,
                                                 contrasts = list(predictors[1] ="

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...