我已经创建了非线性函数的最佳拟合。它似乎工作正常:
#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
答案 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")