Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用nls,错误消息:评估模型时产生缺失值或无穷大_R_Statistics_Nonlinear Functions - Fatal编程技术网

在R中使用nls,错误消息:评估模型时产生缺失值或无穷大

在R中使用nls,错误消息:评估模型时产生缺失值或无穷大,r,statistics,nonlinear-functions,R,Statistics,Nonlinear Functions,上面给出了该模型的功能。问题是数据中有一些不准确的测量,我需要找到它们。我打算首先拟合模型,并计算出每次测量中的每个残差。sqrt的参数必须是非负的,但不能保证它在问题中显示的设置中。此外,即使这是固定的,模型也不太可能以问题中所示的方式拟合,因为它由两条不同的曲线(见下图)组成,可能需要单独拟合 使用drc软件包,我们可以使用其LL2.5模型获得合理的匹配,如下所示: > lenss xd yd zd 1 0.0000 0.0000 2.44479 2

上面给出了该模型的功能。问题是数据中有一些不准确的测量,我需要找到它们。我打算首先拟合模型,并计算出每次测量中的每个残差。

sqrt的参数必须是非负的,但不能保证它在问题中显示的设置中。此外,即使这是固定的,模型也不太可能以问题中所示的方式拟合,因为它由两条不同的曲线(见下图)组成,可能需要单独拟合

使用drc软件包,我们可以使用其
LL2.5
模型获得合理的匹配,如下所示:

> lenss
    xd      yd      zd
1   0.0000  0.0000 2.44479
2   0.0937  0.0000 2.73183
3   0.3750  0.0000 2.97785
4   0.8437  0.0000 3.18626
5   1.5000  0.0000 3.36123
6   2.3437  0.0000 3.50624
7   3.3750  0.0000 3.62511
8   4.5937  0.0000 3.72124
9   5.9999  0.0000 3.79778
10  7.5936  0.0000 3.85744
11  9.3749  0.0000 3.90241
12 11.3436  0.0000 3.93590
13 13.4998  0.0000 3.96011
14 15.8435  0.0000 3.97648
15 18.3748  0.0000 3.98236
16 21.0935  0.0000 3.99406
17 23.9997  0.0000 3.99732
18 27.0934  0.0000 3.99911
19 30.3746  0.0000 4.00004
20 33.8433  0.0000 4.00005
21 37.4995  0.0000 4.00006
22  0.0663  0.0663 3.99973
23  0.2652  0.2652 3.99988
24  0.5966  0.5966 3.99931
25  1.0606  1.0606 3.99740
26  1.6573  1.6573 3.99375
27  2.3865  2.3865 3.98732
28  3.2482  3.2482 3.97640
29  4.2426  4.2426 3.95999
30  5.3695  5.3695 3.93598
31  6.6290  6.6290 3.90258
32  8.0211  8.0211 3.85171
33  9.5458  9.5458 3.79754
34 11.2031 11.2031 3.72156
35 12.9929 12.9929 3.62538
36 14.9153 14.9153 3.50636
37 16.9703 16.9703 3.36129
38 19.1579 19.1579 3.18622
39 21.4781 21.4781 2.97802
40 23.9308 23.9308 2.73206
41 26.5162 26.5162 2.44464
> rd=sqrt(xd^2+yd^2)
> fit=nls(zd~(rd^2/R)/(1+sqrt(1-(1+k)*rd^2/R^2))+d,start=list(R=75,k=-1,d=1))
Error in numericDeriv(form[[3L]], names(ind), env) : 
Missing value or an infinity produced when evaluating the model
In addition: Warning message:
In sqrt(1 - (1 + k) * rd^2/R^2) : NaNs produced
库(drc)
地块(zd~rd)

非常感谢你的回复。我有一个问题。如果两组不同的数据点是加扰的(在这种情况下有顺序),有没有快速识别它们的方法?这取决于它们是如何加扰的。(1) 如果它们在组内被置乱,使得一个组的所有数据都超过另一个组,那么这不会改变任何事情,因为
drm
不依赖于数据的顺序。(2)如果这两个组是混合的,那么你可以试着把低zd/高rd和高zd/低rd的组分为一组,低zd/低rd和高zd/低zd的组分为另一组,去掉中间点,不清楚它们属于哪一组。drc软件包对我来说是非常新的,非常有用有趣。我只是想知道你是否可以使用给定的模型(函数)(rd^2/R)/(1+sqrt(1-(1+k)*rd^2/R^2))+d。我发现很难得到nls,因为你必须得到足够接近实际值的初始值。错误消息不断弹出。numericDeriv(form[[3L]]、names(ind)、env中出错:在为该用途计算模型时,缺少值或产生无穷大值
nls
。如果我们重新参数化,使.lin1=1/R.lin2=d和exp(-b^2)/max(rd^2)=(1+k)/R^2,那么这个模型似乎适合第二组:
fit2谢谢。我的讲座说我可以稍微改变一下模型。
library(drc)

plot(zd ~ rd)

g <- rep(1:2, c(21, 20))
fit1 <- drm(zd ~ rd, fct = LL2.5(), subset = g == 1)
fit2 <- drm(zd ~ rd, fct = LL2.5(), subset = g == 2)

lines(fitted(fit1) ~ rd[g == 1])
lines(fitted(fit2) ~ rd[g == 2])