избегайте многократного написания формулы модели при подборе ряда моделей линейной регрессии - PullRequest
0 голосов
/ 07 сентября 2018

Я бы хотел запустить ряд похожих моделей линейной регрессии в R, например

lm(y ~ x1 + x2 + x3 + x4 + x5, data = df)
lm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = df)
lm(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7, data = df)

Как можно отнести часть этого к "базовой" формуле, чтобы не повторять ее много раз? Это будет база:

y ~ x1 + x2 + x3 + x4 + x5

Тогда как я могу сделать что-то вроде следующего (очевидно, не работает)?

lm(base + x6, data = df)

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

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете обновить формулу модели с помощью update.formula. Например:

base <- y ~ x1 + x2 + x3 + x4 + x5
update.formula(base, . ~ . + x6)
#y ~ x1 + x2 + x3 + x4 + x5 + x6

Вот строковая версия, если вы хотите указать новое имя переменной в виде символа:

## `deparse` damp a model formula to a string
formula(paste(deparse(base), "x6", sep = " + "))

На самом деле, вы даже можете обновить свою модель напрямую

fit <- lm(base, dat); update.default(fit, . ~ . + x6)

Эта идея, которая обновляет всю модель, работала лучше всего. В моем случае понадобился только update().

Я написал update.default и update.formula, чтобы вы знали, какую функцию искать, когда выполняете ? для документации.

...