我尝试使用下面的“lm”命令预测t121列,
Model<-lm(t121 ~ t1 + t2 + ..... +t120, mydata)
在我的数据中,因变量超过100,因此很难使用“lm”命令预测每一列,这就是为什么我想为我的数据编写程序的原因,如下所示:
for(j in 120:179){
model[[j+1]]<-lm(t[j+1] ~ add1(t1:t[j]),mydata)
}
我使用add.bigq,sum
命令代替add1,但这三个命令不正确请告诉我适合那个地方的命令是什么?
答案 0 :(得分:1)
据我所知,您希望编写一个循环,允许您使用不同公式的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)
}