Передача списка контрастов, читаемых как символы, в линейный режим в R - PullRequest
0 голосов
/ 01 февраля 2019

Возможно, здесь упущено что-то базовое.

У меня есть XY данные, к которым я хочу вписать lm в R:

set.seed(1)
df <- data.frame(x = c("0h","0h","4h","4h","8h","8h","10h","10h"),
                 y = rnorm(8))

Установка lm является частьюфункции, которая получает на вход df, а также тип contrast, который должен быть установлен.contrast читается как пользовательский ввод и, следовательно, является character.

Например:

my.contrast <- "contr.helmert(4)"

Затем я хочу сравнить это с model.matrix, с которымтогда будет установлен lm.

Я пытаюсь:

contrast.list <- list(x = my.contrast)
design.mat <- model.matrix(y ~ x, data = df, contrasts.arg = contrast.list)

Но, очевидно, получаю ошибку:

Error in get(ctr, mode = "function", envir = parent.frame()) : 
  object 'contr.helmert(4)' of mode 'function' was not found

Однако, это не ясномне какой тип я должен преобразовать my.contrast в model.matrix для работы.

Очевидно,

model.matrix(y ~ x, data = df, contrasts.arg = list(x = contr.helmert(4)))

Работает нормально

1 Ответ

0 голосов
/ 01 февраля 2019

Возможно, вы захотите попробовать с eval

model.matrix(y ~ x, data = df, contrasts.arg = eval(parse(text=my.contrast)))
  (Intercept) x10h x4h x8h
1           1    0   0   0
2           1    0   0   0
3           1    0   1   0
4           1    0   1   0
5           1    0   0   1
6           1    0   0   1
7           1    1   0   0
8           1    1   0   0
attr(,"assign")
[1] 0 1 1 1
attr(,"contrasts")
attr(,"contrasts")$`x`
[1] "contr.treatment"
...