0

我试图预测使用下面的“LM”命令,这样的T121塔,如何使用“lm”命令编写程序?

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

相反ADD1地方我以前add.bigq,sum命令,但是这三个命令是不正确的,请告诉我什么是适合那个地方的命令?

+0

相反T1 + T2的'+ ..'你可以使用'lm(t121〜。,mydata)'最好显示一个小的可重复的例子。 – akrun

+0

请告诉我清楚我没有得到 – Aarthika

+0

也许'lapply(121:ncol(mydata),function(i)lm(mydata [[1]]〜。,mydata [c(i,seq(i-1)) ]))' – akrun

回答

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

如果我们想在col1的依赖性和col2作为自变量运行lm,那么我们就可以做到这一点:

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

使用'update.formula()'可能比任何复杂公式的粘贴方法都要好。 – Thomas

+0

谢谢,我不知道这个功能。 – Laterow

+0

@Laterow非常感谢..我懂了 – Aarthika