簡體   English   中英

R循環的變量名運行線性回歸模型

[英]R Loop for Variable Names to run linear regression model

首先,我對此很陌生,因此我的方法/想法可能是錯誤的,我已經使用R和R studio將xlsx數據集導入到數據框中。 我希望能夠遍歷列名以獲取所有變量,其中所有變量的准確值為“ 10 ”,以便運行簡單的線性回歸。 所以這是我的代碼:

indx <- grepl('_10_', colnames(data)) #list returns all of the true values in the data set
col10 <- names(data[indx]) #this gives me the names of the columns I want

這是我有的for循環,返回錯誤:

temp <- c()
for(i in 1:length(col10)){
   temp = col10[[i]]
  lm.test <- lm(Total_Transactions ~ temp[[i]], data = data)
  print(temp) #actually prints out the right column names
  i + 1
}

甚至可以運行一個循環來將這些變量放入線性回歸模型中? 我得到的錯誤是:“ model.frame.default中的錯誤(公式= Total_Transactions〜temp [[i]] ,:可變長度不同(為'temp [[i]]'找到))”。如果有人可以指點我朝着正確的方向前進,我將非常感謝。

好的,我將發布答案。 我將以數據集mtcars為例。 我相信它將與您的數據集一起使用。
首先,我創建一個商店lm.test ,一個類list的對象。 在您的代碼中,每次循環時都要分配lm(.)的輸出,最后您將只有最后一個輸出,所有其他輸出都將由較新的輸出重寫。
然后,在循環內部,我使用函數reformulate來組合回歸公式。 還有其他方法可以做到這一點,但這很簡單。

# Use just some columns
data <- mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt")]
col10 <- names(data)[-1]

lm.test <- vector("list", length(col10))

for(i in seq_along(col10)){
    lm.test[[i]] <- lm(reformulate(col10[i], "mpg"), data = data)
}

lm.test

現在,您可以將結果列表用於所有事情。 我建議您開始lapply使用lapply和朋友。
例如,要提取系數:

cfs <- lapply(lm.test, coef)

為了獲得摘要:

smry <- lapply(lm.test, summary)

熟悉*apply函數后,它變得非常簡單。

您可以創建一個臨時子集,在其中僅選擇回歸中使用的列。 這樣,您無需在公式中插入臨時名稱。

堅持您的代碼,這應該可以解決問題。

for(i in 1:length(col10)){
 tempSubset <- data[,c("Total_Transactions", col10[i]]
 lm.test <- lm(Total_Transactions ~ ., data = tempSubset)
 i + 1
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM