[程式] R 迴圈因為 nlminb or lm function 發ꔠ…

看板Statistics作者 (柴人)時間17年前 (2009/10/17 19:16), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
[軟體程式類別]: R [程式問題]: 迴圈會因為迴圈中函式錯誤而中止 [軟體熟悉度]: 中(3個月到1年) [問題敘述]: 我需要用non-linear的方式找某個函數的最小值 ( Residual Sum of Square ) 這個函數不是線性的, 解沒有close form 所以我需要用 nlminb 這個函數 由於這類演算法都有選取初始值問題, 所以我寫了一個迴圈, 用不同的初始值去跑 但是有時候 nlminb 這個函數在跑到一半的時候, 就因為出現錯誤, 而把整個迴圈中止 ps. 錯誤內容為: 錯誤在lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases 我希望能夠在錯誤出現的時候, 跳過(留下一個NA)值, 或是至少能找出錯誤發生的原因 [程式範例]: L <- function(parameter) { # parameter 均是轉換過的 m <- logit.inv(parameter[1]) r <- exp(parameter[2]) if (length(y) > 26) sum(lm(y~trend(n,m,r)+add.x[1:n])$res^2) else sum(lm(y~trend(n,m,r))$res^2) } #這個函數會回傳 Residual Sum of Square, 而算法我是用另一個函數 lm for (repeat.nlminb in 1:10 ) { start.value <- rnorm(2) temp <- nlminb(objective=L,start=start.value) result.parameter[repeat.nlminb,] <- c(temp$par,temp$objective) } #這裡我會利用 rnorm 隨機取 initial value 跑十次, 並紀錄十次的結果 ----------------------------------------------------------------------------- 先謝謝了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.36.80

10/18 12:27, , 1F
?try
10/18 12:27, 1F

10/18 12:28, , 2F
把nlminb包在try裡面, 檢查回傳值的類別是否為try-error
10/18 12:28, 2F

10/18 12:29, , 3F
res<-try(nlminb(...)); class(res) == "try-error"
10/18 12:29, 3F

10/18 13:32, , 4F
感謝!! 我去試試看
10/18 13:32, 4F
文章代碼(AID): #1AsQUBUy (Statistics)