#r #lm
#r #lm
Вопрос:
Предположим, у меня есть фрейм данных, состоящий из 101 столбца, где первые 100 имеют имена от data1 до data100, а 101-й столбец называется y.
Если я хочу использовать функцию lm в R, где функции от data1 до data100.
Я знаю, что это можно записать как:
lin_reg <- lm(y ~ data1 ... data100, dataframe)
Есть ли лучший способ сделать это?
Комментарии:
1. Вы не должны этого делать вообще. Регрессия OLS с таким количеством предикторов приведет к некоторым серьезным проблемам. Вы можете ожидать серьезной коллинеарности. Также не удивляйтесь вычислительным проблемам.
Ответ №1:
lin_reg <- lm(y ~ ., data = dataframe)
Это предполагает, что ваши данные действительно состоят только из вашего результата всех переменных функций. Нет дополнительного столбца. «.» означает «взять все остальное из этого фрейма данных».
Поскольку — согласно комментарию — TO хочет исключить определенные столбцы:
data_frame_subset <- dataframe[, !names(dataframe) %in% c("data5", "data10")]
lin_reg <- lm(y ~ ., data = dataframe_subset)
В этом примере я бы исключил столбцы data5 и data10.
Комментарии:
1. Спасибо, но что, если некоторые столбцы следует игнорировать. Например, столбец «data5».
2. Чем вы должны упомянуть об этом в своем вопросе. Тем не менее, см. Обновление к моему сообщению.
3. Другим способом исключения
data5
будет:lm(y ~ . - data5, data = dataframe)
Ответ №2:
Вы можете создать формулу динамически с помощью reformulate
:
lin_reg <- lm(reformulate(paste0('data', 1:100), 'y'), dataframe)