我面临一个奇怪的问题。可能是愚蠢的,但我没有看到它,并希望得到帮助。请考虑以下代码
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
任何人都可以解释一下吗? 提前谢谢。
答案 0 :(得分:2)
从文档(?nls
)中,您会看到警告:&#39;不要在人工&#34;零残留&#34;上使用nls。 。数据&#39;所以错误是你的例子的产物,它基本上完全适合你的数据。有关为什么会发生这种情况的解释可以在文档中看到。
尝试添加一点噪音如下:
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