Как сделать линейную регрессию с этим конкретным набором данных? - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть переменная ответа y.
Также у меня есть список из 5 зависимых переменных

x <- list(x1, x2, x3, x4, x5)

Наконец, у меня есть логический вектор z длины 5. Например,

z <- c(TRUE, TRUE, FALSE, FALSE, TRUE)  

Учитывая это, я хочу, чтобы R автоматически выполнял линейную регрессию

lm(y ~ x1 + x2 + x5)

В основном значение ИСТИНА / ЛОЖЬ соответствует тому, включать ли зависимую переменную или нет.
Я не могу этого сделать.
Я пытался сделать lm(y ~x[z]), но это не работает.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Попробуйте что-то вроде привязки вашего y к data.frame или матрице (cbind) перед выполнением линейной регрессии.Вы можете отфильтровать зависимые переменные, выполнив что-то вроде этого:

x <- list(x1 = 1:5, x2 = 1:5, x3 = 1:10, x4 = 1:5, x5 = 1:5)
z <- c(TRUE, TRUE, FALSE, FALSE, TRUE)
b <- data.frame(x[which(z == TRUE)])
0 голосов
/ 23 декабря 2018

Вы можете сделать

lm(y ~ do.call(cbind, x[z]))

do.call(cbind, x[z]), чтобы преобразовать x[z] в матрицу, которая является приемлемым форматом ввода для lm.Одна проблема с этим состоит в том, что имена регрессоров (при условии, что x является именованным списком) в выходных данных являются немного грязными.Таким образом, вместо этого вы можете сделать

lm(y ~ ., data = data.frame(y = y, do.call(cbind, x[z])))

, который бы дал хорошие имена в выводе (опять же, предполагая, что x является именованным списком).

...