Да, но я бы не советовал:
> 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()
напрямую, простоманипулирование:
lm.fit(cbind(rep(1, nrow(mat)), mat[,-1]), mat[, 1])
здесь мы привязываем вектор 1 к столбцам 2 и 3 из mat
(cbind(rep(1, nrow(mat)), mat[,-1])
);это модель матрицы.mat[, 1]
ответ.Хотя он не возвращает классифицируемый объект "lm"
, он будет очень быстрым и может быть относительно легко преобразован в объект, если это имеет значение.
Кстати, у вас есть обычные обозначения спереди назад.Y обычно является ответом, где X обозначает ковариаты, используемые для моделирования или прогнозирования Y.