2013-03-02 84 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