绘制最佳拟合非线性曲线的新值

时间:2013-03-02 09:50:25

标签: r nonlinear-functions best-fit-curve

我已经创建了非线性函数的最佳拟合。它似乎工作正常:

#define a function
fncTtr <- function(n,d) (d/n)*((sqrt(1+2*(n/d))-1))

#fit
dFit <- nls(dData$ttr~fncTtr(dData$n,d),data=dData,start=list(d=25),trace=T)
summary(dFit)

plot(dData$ttr~dData$n,main="Fitted d value",pch=19,)
xl <- seq(min(dData$n),max(dData$n), (max(dData$n) - min(dData$n))/1000)

lines(xl,predict(dFit,newdata=xl,col=blue)

我观察的情节正确显示出来。我有问题在我的情节上显示最合适的曲线。我创建了具有1000个值的xl自变量,我想使用最佳拟合来定义新值。当我调用“行”程序时,我收到错误消息:

  

xy.coords(x,y)出错:'x'和'y'长度不同   如果我尝试只执行预测功能:

a <-predict(dFit,newdata=xl)
str(a)

我可以看到xl有1000个组件,但“a”只有16个组件。我不应该在一个?中有相同数量的值?

使用的数据:

  n    ttr      d
1  35 0.6951 27.739
2  36 0.6925 28.072
3  37 0.6905 28.507
4  38 0.6887 28.946
5  39 0.6790 28.003
6  40 0.6703 27.247
7  41 0.6566 25.735
8  42 0.6605 26.981
9  43 0.6567 27.016
10 44 0.6466 26.026
11 45 0.6531 27.667
12 46 0.6461 27.128
13 47 0.6336 25.751
14 48 0.6225 24.636
15 49 0.6214 24.992
16 50 0.6248 26.011

1 个答案:

答案 0 :(得分:0)

好的,我认为我找到了解决方案,但我不确定我是否能够解释它。
在致电predict.nls时,您要输入参数newdata的内容必须根据您预测的变量(此处为n)命名,且名称为将原始调用中给出的内容与nls匹配。

#Here I replaced dData$n with n
dFit <- nls(ttr~fncTtr(n,d),data=dData,start=list(d=25),trace=T)

plot(dData$ttr~dData$n,main="Fitted d value",pch=19,)
xl <- seq(min(dData$n),max(dData$n), (max(dData$n) - min(dData$n))/1000)

a <- predict(dFit,newdata=list(n=xl))
length(a)==length(xl)
[1] TRUE

lines(xl,a,col="blue")

enter image description here