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