Я пытаюсь скомпоновать сотни кривых gompertz, используя SSgompertz. Набор данных имеет три столбца с значениями «x» и «y» и кодированный столбец для разделения данных на разные образцы: «GROUPING». Позже параметры будут использоваться для определения x из неподвижной точки по оси y для всех выборок (методы точек точки) с использованием функции прогнозирования().Установите несколько кривых Gompertz и пропустите ошибки в R (nlsList и SSgompertz)
мне удалось поместиться несколько многочленов к данным перед кормлением параметров в предсказать(), используя этот код:
< Параметров -lmList (х ~ поли (у, 3, сырье = TRUE) | ГРУППИРОВАНИЕ , data = data, na.action = na.omit)
Пригодность для многих из них была невелика. В идеале я мог бы использовать нелинейную регрессию, чтобы соответствовать данным на кривой гомперца. Так что я попытался это:
Параметры < -nlsList (у ~ SSgompertz (х, Asym, xmid, бюджетная) | GROUPING данные = dataframe)
Однако случаи, когда припадок не может быть получено (плохие образцы или атипичные формы кривой) вызывают ошибки и останавливают весь процесс.
Например. «итерации превышают максимум 50»
Есть ли способ игнорировать образцы, которые не моделируют, но сохраняют параметры для тех, которые делают?
EDIT: Я попытался использовать цикл, как было предложено, но у меня возникли проблемы с его работой (см. Скрипт ниже). Кроме того, выход не может быть подан в коэф()
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))
Напишите цикл, который вызывает 'nls' с' tryCatch'. – Roland
Это неправильное использование 'tryCatch'. Изучите это: http://stackoverflow.com/a/12195574/1412059 – Roland
КПП. если вы предоставили [минимальный воспроизводимый пример] (http://stackoverflow.com/a/5963610/1412059), я могу показать вам, как это сделать. – Roland