如何使用“lm”命令编写程序?

时间:2016-01-24 12:10:29

标签: r functional-programming linear-regression linear-programming

我尝试使用下面的“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,但这三个命令不正确请告诉我适合那个地方的命令是什么?

1 个答案:

答案 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作为依赖项运行col1col2作为自变量运行,那么我们可以这样做:

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)
}