2016-03-06 7 views
1

Я пытаюсь скомпоновать сотни кривых 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)) 
+0

Напишите цикл, который вызывает 'nls' с' tryCatch'. – 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

 Смежные вопросы

  • Нет связанных вопросов^_^