簡體   English   中英

R項目:lm給出錯誤后循環中斷

[英]R project: loop breaks after lm gives error

我想自動運行線性回歸並保存結果。 R project生成的beta系數將在以后用作進一步計算的參數。

這是我的數據布局的一個示例:

 id |x_2000|x_2001|x_2002|y_2000|y_2001|y_2002|z_2000|z_2001|z_2002
 1  |20   |NA     |6     |90    |NA    |80    |54    |NA    |10
 2  |50   |NA     |10    |50    |NA    |50    |60    |NA    |40
 3  |4    |NA     |1     |5     |NA    |10    |30    |NA    |120

x是值x,其后的數字表示年份。 相同的邏輯適用於其他變量y和z。

為了運行線性回歸,我創建了一個循環。 我使用以下代碼循環遍歷變量並每年進行回歸。

for (i in 2000:2002){
  X_COLUMN <- c(paste0("x_",i))
  Y_COLUMN <- c(paste0("y_",i))
  Z_COLUMN <- c(paste0("z_",i))
  result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
  b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
  b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
  }

對於2000年,一切工作正常,但是當循環持續到2001年時,它將達到NA值。 這將導致錯誤消息:

lm.fit(x,y,offset = offset,singular.ok = singular.ok,…)中的錯誤:0(非NA)

邏輯上,因為沒有2001年的完整案例。結果是循環中斷。 但是,我不想打破它,而是繼續到明年。

任何想法如何解決這個問題?

如何使用try語句

for (i in 2000:2002){
    X_COLUMN <- c(paste0("x_",i))
    Y_COLUMN <- c(paste0("y_",i))
    Z_COLUMN <- c(paste0("z_",i))
    try({
        result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
        b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
        b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
    }, silent=T)
}

tryCatch

for (i in 2000:2002){
    X_COLUMN <- c(paste0("x_",i))
    Y_COLUMN <- c(paste0("y_",i))
    Z_COLUMN <- c(paste0("z_",i))
    tryCatch({
        result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
        b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
        b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
    }, error=function(e) {
        b1 <- rbind(b1, c(x,i,NA))
        b2 <- rbind(b2, c(x,i,NA))
    })
}

暫無
暫無

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

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