Я бы хотел провести oop через ряд линейных вероятностных моделей. Как прокси для моих собственных данных, я воссоздаю контекст, используя набор данных iris
.
library(tidyverse)
library(fastDummies)
data(iris)
iris <- iris %>%
dummy_cols("Species")
names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
[6] "Species_setosa" "Species_versicolor" "Species_virginica"
В этом примере я начинаю с загрузки данных, а затем определяю две независимые линейные модели вероятности, сравнивая или "лишай" или "virginica" в "setosa" в качестве моего контрольного уровня. Эти модели легко запускаются независимо.
# model 1
iris %>%
filter(Species %in% c("setosa", "versicolor")) %$%
lm(Species_versicolor ~ Sepal.Length, data = .)
Call:
lm(formula = Species_versicolor ~ Sepal.Length, data = .)
Coefficients:
(Intercept) Sepal.Length
-2.6203 0.5703
# model 2
iris %>%
filter(Species %in% c("setosa", "virginica")) %$%
lm(Species_virginica ~ Sepal.Length, data = .)
Call:
lm(formula = Species_virginica ~ Sepal.Length, data = .)
Coefficients:
(Intercept) Sepal.Length
-2.092 0.447
Но я бы хотел ускорить процесс и l oop через уровни видов. Вот пример того, что я воображаю для процесса.
for (i in c("versicolor", "virginica")) {
model <- iris %>%
filter(Species %in% c("setosa", i)) %$%
lm(paste0("Species_", i) ~ Sepal.Length, data = .)
}
Проблема с этим кодом заключается в том, что lm
не распознает результат функции paste0
как имя столбца и предоставляет следующая ошибка:
Error in model.frame.default(formula = paste0("Species_", i) ~ Sepal.Length, :
variable lengths differ (found for 'Sepal.Length')
Есть ли способ объединить l oop и строковые данные для формирования имени столбца в R, которое будет распознаваться lm
? Или, возможно, существует обходной путь, который не меняет кардинально формат оригинальных моделей?
Спасибо за помощь!