2016-03-06 31 views
1

我試圖用SSgompertz來適應數百個gompertz形狀的曲線。該數據集有三列「x」和「y」值和一個編碼列以將數據分成不同的樣本:「GROUPING」。之後,使用predict()函數將參數用於確定所有樣本(擬合點方法)在y軸上的固定點的x值。擬合多個Gompertz曲線並在R中跳過錯誤(nlsList和SSgompertz)

我設法使用此代碼的參數饋送到預測()之前,以適應多個多項式到數據:

參數< -lmList(X〜聚(Y,3,原始= TRUE)| GROUPING ,data = data,na.action = na.omit)

儘管它們中的許多並不是很好。理想情況下,我可以使用非線性迴歸來將數據擬合成gompertz曲線。所以,我想這一點:

參數< -nlsList(Y〜SSgompertz(X,ASYM,xmid,財政)|分組數據=數據幀)

但是,如果無法獲得的情況下一個合適的(不良樣本或非典型曲線形狀)會導致錯誤並停止整個過程。

例如, 「迭代次數超過了最大值50」

有沒有辦法忽略那些沒有建模的樣本,但保留那些參數?

編輯: 我曾嘗試使用循環建議,但我有麻煩得到它的工作(見下面的腳本)。 還輸出不能被送入COEF()

uniq <- unique(unlist(data$GROUPING)) 
results=list() 
for (i in uniq){ 
Singledata <-data[which(data$GROUPING ==uniq[i]), ] 
x<-Singledata$x 
y<-Singledata$y 
ModelSS <- tryCatch(nls(y~SSgompertz(x, Asym, xmid, scal))) 
print(ModelSS) 
results[i] = ModelS 
} 
coef(results) 

是否有人可以幫助我瞭解我要去哪裏錯了嗎?

實施例的數據:

data<-data.frame(x=c(0,1,2,4,8,16,32,64,0,1,2,4,8,16,32,64,0,1,2,4,8,16,32,64), 
       y=c(70,90,160,250,410,510,610,650, 
        NA,NA,NA,NA,NA,NA,NA,NA, 
        70,90,160,250,410,510,610,650), 
       GROUPING=c(1,1,1,1,1,1,1,1, 
          45,45,45,45,45,45,45,45,643,643,643,643,643,643,643,643)) 
+0

編寫一個用'tryCatch'調用'nls'的循環。 – Roland

+0

這不正確的使用'tryCatch'。研究這個:http://stackoverflow.com/a/12195574/1412059 – Roland

+0

順便說一句。如果你提供了一個[最小可重現的例子](http://stackoverflow.com/a/5963610/1412059),我可能會告訴你如何做到這一點。 – Roland

回答

0

nlsList已經使用try內部。您的問題似乎是na.action設置(na.fail是默認設置)。使用na.omit

nlsList(y~SSgompertz(x, Asym, xmid, scal)|GROUPING, data=data, na.action = na.omit) 
#Call: 
# Model: y ~ SSgompertz(x, Asym, xmid, scal) | GROUPING 
# Data: data 
# 
#Coefficients: 
#  Asym  xmid  scal 
#1 618.774 2.031473 0.831752 
#643 618.774 2.031473 0.831752 

Degrees of freedom: 16 total; 10 residual 
Residual standard error: 30.44042 
+0

有沒有辦法跳過不合適的數據,產生的錯誤,如:「迭代次數超過最大值50」 – Ian

+0

我相信'nlsList'已經這樣做了。提供一個沒有的例子。 – Roland