2013-03-02 52 views
0

我创建了非线性函数的最佳拟合。它似乎工作正常:为最佳拟合非线性曲线绘制新值

#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个组件,而是 “一个” 只有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

有没有可能包含您的数据或数据的样本,以便我们可以尝试你的代码,看看问题出在哪里从何而来? – plannapus 2013-03-02 09:54:09

+0

我已附上数据 – user963386 2013-03-02 09:58:46

+0

我应该补充一点,我是R新手。我已经对“d值”(在数据中)进行了一些估计。该程序的目的是优化“d值” 。 – user963386 2013-03-02 10:05:36

回答

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

+0

谢谢!它真的解决了这个问题 – user963386 2013-03-02 10:32:02