Я делаю линейную регрессию и хочу исправить некоторые входные данные. Я нашел способ сделать это с помощью offset
. Посмотрим на это на примере:
set.seed(145)
df <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10), d = rnorm(10))
summary(lm(formula = a ~ . + offset(0.1*c) - c + offset(0.05*d) - d, data = df))
Проблема в том, что у меня гораздо больше переменных, и я хотел бы автоматически сгенерировать формулу lm.
Скажем, я хочу передать имена входов (которые являются столбцами данных в lm) и значение для его коэффициентов, например, следующим образом:
inputs_fix <- c("c", "d")
inputs_fix_coef <- c(0.1, 0.05)
Затем мне нужна функция, которая записывает мне формулу, как указано выше, но я не знаю, как написать выражение offset(0.1*c) - c + offset(0.05*d) - d
, имеющее объекты inputs_fix
и inputs_fix_coef
.
Является ли это возможным? Есть другой способ поправить коэффициенты (более изящный)? Цени любую помощь
ОБНОВЛЕНИЕ: создание формулы с paste
и as.formula
с предложением @Jan van der Laan
my.formula <- paste0(" + offset(", inputs_fix_coef, "*", inputs_fix, ") - ", inputs_fix, collapse = " ")
lm.fit <- lm(formula = as.formula(paste0("a ~ .", mi.expresion)), data = df))
Это не так ясно, но он сохраняет все входные данные в объекте lm lm.fit$model
, которые потеряны в ответе @Jan van der Laan. И не нужно дублировать data.frame