2011-08-20 15 views
2

有什麼辦法讓我的nls在產生非線性擬合時有0個殘差?在我的數據中,我的數據中所做的擬合應該有0錯誤,但是nls總是失敗並吐出一個錯誤。處理nls中的0錯誤 - R腳本

誰能告訴我:

  1. 如何測試,如果這是NLS被吐出的錯誤?
  2. 如何允許0錯誤情況? (完美配合)

這是我的NLS撥打:

fit <- nls(y ~ ifelse(g, m1 * (x - x0) + y0, m2 * (x - x0) + y0), 
      start = c(m1 = -1, m2 = 1, y0 = 0, x0 = split), 
      algorithm = "port", 
      lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = split), 
      upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = (split+1)), 
      data=data.frame(x,y)) 
+0

Grrr。請在詢問新問題時參考前面的問題(如果問題非常相似,請考慮修改舊問題),並且請不要將您的帳號更改爲與其他人相似。我現在要停止回答你的問題了,@ CodeGuy/StanLe ......我不會低估這個問題,因爲考慮到它自身的優點,這是一個合理的問題。 –

回答

5

由於mentioned在前面的回答,?nls明確規定,你不應該使用nls爲0的錯誤數據。直接引用您正在使用的功能的幫助文件:

不要在人爲的「零殘差」數據上使用nls。

nls函數使用相對偏移量收斂準則, 將當前參數估計值 的數值不精確度與剩餘的平方和進行比較。此對形式的數據運行良好

Y = F(X,θ)+ EPS

(使用var(EPS)> 0)。它無法指示在 形式

Y = F的數據匯聚(X,θ)

因爲標準相當於比較 舍入誤差的兩種組分。如果你想測試仿真數據的nls,請添加 噪聲成分,如下例所示。

有潛在危險的選項將是使用warnOnly = TRUE迫使nls之前返回與警告只(無差錯)接軌:

x <- -(1:100)/10 
y <- 100 + 10 * exp(x/2) 
nlmod <- nls(y ~ Const + A * exp(B * x),control = nls.control(warnOnly = TRUE)) 

上面的例子也從?nls採取幾乎直接。