Как создать линейную регрессию с R? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть простая матрица вроде:

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12

Я должен рассчитать линейную регрессию этих столбцов, например: lm(x ~ y)

Где первый столбецэто X, а другие Y?Я имею в виду ... могу ли я сделать что-то, чтобы использовать другое с one variable (y)

или

мне нужно использовать что-то вроде: lm(x~y+z+c+b) etcи т. д.

Спасибо

1 Ответ

4 голосов
/ 27 июля 2011

Да, но я бы не советовал:

> 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...