Из чего я понимаю, вы хотите написать цикл, который позволяет использовать lm
с различными формулами. Хорошая вещь о lm
заключается в том, что в качестве первого аргумента она может принимать объекты класса formula
. Посмотрим, как это работает.
# Create a data set
df <- data.frame(col1=(1:10+rnorm(10)), col2 = 1:10, col3 = rnorm(10), col4 = rnorm(10))
Если мы хотим запустить lm
на col1
как зависимая и col2
как независимой переменной, то мы можем сделать это:
model_a <- lm(col1 ~ col2, data = df)
form_b <- as.formula("col1 ~ col2")
model_b <- lm(form_b, data = df)
all.equal(model_a,model_b)
# [1] "Component “call”: target, current do not match when deparsed"
Так что единственное, что различались между этими двумя моделями является то, что вызов функции был другим (в model_b
мы использовали form_b
, а не col1 ~ col2
). Кроме того, модели идентичны.
Теперь вы знаете, как использовать класс formula
для запуска lm
. Вы можете легко построить формулы с paste
, установив collapse
в +
ind_vars <- paste(names(df)[-1],collapse = " + ")
form_lm <- paste(names(df)[1], "~", ind_vars)
form_lm
# [1] "col1 ~ col2 + col3 + col4"
Если мы хотим три различные модели, мы можем сделать несколько вещей, например:
lis <- list()
for (i in 2:length(names(df))) {
ind_vars <- paste(names(df)[2:i], collapse="+")
form_lm <- paste(names(df)[1], "~", ind_vars)
lis[[i-1]] <- lm(form_lm,data=df)
}
Вместо 't1 + t2 + ..' вы можете использовать 'lm (t121 ~., mydata)' Лучше показать небольшой воспроизводимый пример. – akrun
, пожалуйста, сообщите мне, что я не получил – Aarthika
Возможно, 'lapply (121: ncol (mydata), function (i) lm (mydata [[1]] ~., Mydata [c (i, seq (i-1)) ])) ' – akrun