Да, но я бы не рекомендовал его:
> set.seed(2)
> mat <- matrix(runif(12), ncol = 3, byrow = TRUE)
> mat
[,1] [,2] [,3]
[1,] 0.1848823 0.7023740 0.5733263
[2,] 0.1680519 0.9438393 0.9434750
[3,] 0.1291590 0.8334488 0.4680185
[4,] 0.5499837 0.5526741 0.2388948
> mod <- lm(mat[,1] ~ mat[,-1])
> mod
Call:
lm(formula = mat[, 1] ~ mat[, -1])
Coefficients:
(Intercept) mat[, -1]1 mat[, -1]2
1.0578 -1.1413 0.1177
Почему это не рекомендуется? Ну, вы злоупотребляете интерфейсом формул здесь; он работает, но коэффициенты модели имеют нечетные имена, и вы накладываете много накладных расходов на работу с интерфейсом формулы, который предназначен для извлечения ответов/ковариаций из фрейма данных или объекта списка, на который делается ссылка в символической формуле.
Обычный способ работы является:
df <- data.frame(mat)
names(df) <- c("Y","A","B")
## specify all terms:
lm(Y ~ A + B, data = df)
## or use the `.` shortcut
lm(Y ~ ., data = df)
Если вы не хотите идти через кадр данных, то вы можете вызвать функцию лошадки за lm()
, lm.fit()
, непосредственно с помощью простой операции:
здесь мы связываем от вектора 1s до графах 2 и 3 mat
(cbind(rep(1, nrow(mat)), mat[,-1])
); это модельная матрица. mat[, 1]
- ответ. Хотя он не возвращает класс "lm"
, он будет очень быстрым и может быть легко преобразован в один, если это имеет значение.
Кстати, у вас есть обычные обозначения спереди. Y обычно является ответом, при этом X указывает на ковариаты, используемые для моделирования или прогнозирования Y.
выглядит очень хорошо, почему вы его не raccomend? – Dail
@Dail 'lm()' - это высокоуровневый интерфейс для кода нижнего уровня. Большая часть кишки 'lm()' заключается в обработке формулы для построения матрицы модели и извлечения ответа. В вашем случае у вас почти есть матрица модели, а ответ и простая манипуляция получают полную матрицу модели (см. Мой обновленный ответ), поэтому при вызове 'lm()' с матрицей вы вызываете в основном избыточный код, когда можете позвонить 'lm.fit()' непосредственно. Зависит от того, что вы хотите сделать с моделью, как только вы ее получите. –
безупречный! хорошо имеет смысл! Спасибо – Dail