Есть ли простой способ создать список формул в R - PullRequest
0 голосов
/ 26 мая 2019

Здесь я хочу создать список формул для простой линейной регрессии, полиномиальных моделей 2-го и 3-го порядка.Я только что сделал это.Это может быть хорошо для нескольких переменных, но мои данные довольно много переменных.Так как же мне избежать перегрузки работы, используя другой способ сделать то же самое?

ind1.lm <- lm(dep ~ ind1, data = df)
ind1.qd <- lm(dep ~ poly(ind1, 2, raw = TRUE), data = df)
ind1.cb <- lm(dep ~ poly(ind1, 3, raw = TRUE), data = df)

ind2.lm <- lm(dep ~ ind2, data = datAll)
ind2.qd <- lm(dep ~ poly(ind2, 2, raw = TRUE), data = df)
ind2.cb <- lm(dep ~ poly(ind2, 3, raw = TRUE), data = df)

ind3.lm <- lm(dep ~ ind3, data = df)
ind3.qd <- lm(dep ~ poly(ind3, 2, raw = TRUE), data = df)
ind3.cb <- lm(dep ~ poly(ind3, 3, raw = TRUE), data = df)

formula.list <- list(as.formula(ind1.lm), as.formula(ind1.qd), 
    as.formula(ind1.cb), as.formula(ind2.lm), as.formula(ind2.qd), 
    as.formula(ind2.cb), as.formula(ind3.lm), as.formula(ind3.qd), 
    as.formula(ind3.cb))

 formula.list

Заранее спасибо!

1 Ответ

3 голосов
/ 26 мая 2019

Определите независимые переменные и форматы формул, и из этого мы можем получить строки формул.Поскольку lm принимает строки в качестве формул, мы можем применить их к списку lm объектов, имена которых являются формулами.

ind <- c("ind1", "ind2", "ind3")
fmt <- c("dep ~ %s", 
         "dep ~ poly(%s, 2, raw=TRUE)", 
         "dep ~ poly(%s, 3, raw=TRUE)")

fo.strings <- c(outer(fmt, ind, sprintf))

sapply(fo.strings, lm, data = df, simplify = FALSE)

Вопросы к SO должны включать воспроизводимый код, а df был опущенот вопроса, но мы можем запустить его с помощью встроенного фрейма данных anscombe, как это:

fmt <- c("y1~ %s", 
         "y1~ poly(%s, 2, raw=TRUE)", 
         "y1 ~ poly(%s, 2, raw=TRUE)")
ind <- c("x1", "x2", "x3")
fo.strings <- c(outer(fmt, ind, sprintf))
sapply(fo.strings, lm, data = anscombe, simplify = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...