2017-06-21 54 views
0

我正面臨一個奇怪的問題。可能是愚蠢的,但我沒有看到它,並會感謝幫助。請看下面的代碼nls收斂,但給出錯誤

x<-seq(100, 1000, 100) 
b<-0.3 
y<-x^-b 

現在讓我們假設我要擬合模型,我使用,用於說明目的下面的代碼

df <- data.frame(x = x, y = y) 
nlf <- nls(y~p1*x^-p2 , data = df, start=list(p1=1,p2=1), trace = TRUE) 

我得到一個快速收斂到正確的結果(因爲你可以檢查)。但我也得到一個錯誤

5.392604e-33 : 1.0 0.3 
5.392604e-33 : 1.0 0.3 
5.392604e-33 : 1.0 0.3 
Error in nls(y ~ p1 * x^-p2, data = df, start = list(p1 = 1, p2 = 1), : 
    Iterationenzahl überschritt Maximum 50 

任何人都可以解釋它嗎? 在此先感謝。

回答

1

從文檔(?nls)中,您將看到警告:'不要在人工的「零殘差」數據上使用nls。所以這個錯誤是你的例子的產物,它基本上完全符合你的數據。爲什麼發生這種情況的解釋可以在文檔中看到。 嘗試添加噪音位如下:

x<-seq(100, 1000, 100) 
b<-0.3 
y<-x^-b + rnorm(100, 0, 0.1) # Remember to add noise 
df <- data.frame(x = x, y = y) 
nlf <- nls(y~p1*x^-p2 , data = df, start=list(p1=1,p2=1), trace = TRUE) 
#3.591758 : 1 1 
#3.581732 : 0.6274025 0.8963628 
#3.565431 : 0.3056595 0.7399811 
#3.488972 : 0.1682877 0.5522106 
#3.263759 : 0.1895249 0.4433675 
#2.941386 : 0.2844498 0.4125101 
#2.452259 : 0.4660136 0.4015228 
#1.793046 : 0.7829449 0.3985467 
#1.172338 : 1.2573922 0.3981166 
#0.9667725 : 1.7315307 0.3981305 
#0.9667725 : 1.7315408 0.3981278 
+0

確定應閱讀文檔...我正好想這是你寫這個帖子...應該更清楚;-)謝謝。 – Umberto

+0

@fasttouch沒有問題 - 文檔中的內容相當長;) –