Многочисленные множественные регрессии, каждый раз меняя одну переменную - PullRequest
0 голосов
/ 08 января 2019

У меня есть базовый код R для запуска множественной регрессии:

подходит <- лм (<code>cold ~ breed + gender + 237, данные = весы)

Однако я хочу запускать этот код несколько раз с небольшим изменением каждый раз. Там, где написано «237» (заголовок столбца), это может быть любое число от 1 до 1000 (также заголовок столбца), и я хочу запустить множественную регрессию для каждого столбца. Поэтому я хочу, чтобы он запускал эквивалент:

подходит <- лм (<code>var1 ~ var2 + var3 + 1, данные = весы)

подходит <- лм (<code>var1 ~ var2 + var3 + 2, данные = весы)

....

fit <- лм (<code>var1 ~ var2 + var3 + 1000, data = rweights)

Затем я намереваюсь проанализировать результаты этих многочисленных множественных регрессий, поэтому в идеале был бы хороший результат, который объединяет все это, но я понимаю, что это может быть совсем другая проблема! Любой совет будет высоко ценится.

1 Ответ

0 голосов
/ 08 января 2019

Вот пример кода, который должен помочь вам начать работу:

### Generate fake data
n = 1000
var1 = rnorm(n)
var2 = rnorm(n)
var3 = rnorm(n)
k = 10
dat = data.frame(var1, var2, var3, matrix(runif(n*k), n, k))

### Object where all the fitted models are stored
mods = rep(list(NULL), k)

### Loop through the different models
for (i in 1:k){
    form = paste0("var1 ~ var2 + var3 + X", i)
    mods[[i]] = lm(as.formula(form), data = dat)
    }

### Examples
summary(mods[[1]])
summary(mods[[2]])

Как предложил Том Хэддоу в комментариях, одним из способов обобщения этого является использование colnames:

mods = rep(list(NULL), k)

# Get column names, remove the ones you don't want to loop through
varlist = colnames(dat)[-(1:3)]

for (i in 1:k){
    form = paste0("var1 ~ var2 + var3 + ", varlist[i])
    mods[[i]] = lm(as.formula(form), data = dat)
    }
summary(mod[[1]])

или даже

mods = rep(list(NULL), k)
varlist = colnames(dat)[-(1:3)]

for (v in varlist){
    form = paste0("var1 ~ var2 + var3 + ", v)
    mods[[v]] = lm(as.formula(form), data = dat)
    }
summary(mods$X1)

с той лишь разницей, как вы будете обращаться к элементам в mods.

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