LINUX.ORG.RU

Проблемы при построении аппроксимации графика в R

 


0

2

Пусть у меня есть некоторые данные, которые находятся в файле data. Мне нужно найти аппроксимацию этих данных используя формулу y= a*(b/x)^c (КОД ВНИЗУ).

dat <- read.table("data",header = TRUE)
out <- nls(y ~a*(b/x)^c, data=dat, start=list(a=400, b=20.89,c = 1.2))
out <-summary(out)

В данном случае я не могу найти аппроксимационные коэффициенты, потому что неверно указаны стартовые a,b,c (Ошыбка внизу). Как их найти? Существует пакет в R, который это может сделать?


Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model


Вариантов 2:

1) https://www.rdocumentation.org/packages/minpack.lm/versions/1.2-1/topics/nls.lm Может тебе это поможет.

2) print'ить структуру данных. Воспользуйтся командой `describe` из пакета Hmisc и посмотри, есть ли пропущенные значения или выбросы какие-нибудь. OLS/NLS не любят подобные бяки.

bookman900 ★★★★★
()

Оберни в обработку ошибок, пусть возвращает «Всё плохо, хозяин». Затем возьми генетику (пакет есть на кране) и пусть перебирает параметры старта с пенальти на «Всё плохо», пока не найдет решения тебя удовлетворяющие.

PS выкидывать точки из датасета плохие, тоже можно как параметр в целевую функцию подсунуть.

psv1967 ★★★★★
()
Последнее исправление: psv1967 (всего исправлений: 1)

У тебя аппроксимирующей функция неудачная. Она неоднозначно определяет параметры.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

Я нашел код который может найти коэффициенты:

library("nlme")
dat = read.table("cah_p",header = TRUE)
fit <- nls(y ~ SSlogis(x, a, b, c), data=dat,na.action=na.omit)
summary(fit)

curve(predict(fit, newdata = data.frame(x=x)), add=TRUE)

Logistic_gnls <- gnls(y ~a*((b/(x + b))^c), data = dat,
                      start = coef(fit))
coef(Logistic_gnls)

К сожалению я получаю ошибку:

Error in nls(y ~ a * ((b/(x + b))^c), start = list(a = 473, b = 2.38,  : 
  step factor 0.000488281 reduced below 'minFactor' of 0.000976562
В чем проблема?

bpm
() автор топика
Ответ на: комментарий от bpm

А тут уже функция-то другая стала. Она в чем-то лучше, чем была (теперь однозначно восстанавливаются параметры), но все еще странная (разрывы в точках выборки xi (если c положительное), при b=0). В общем, не исключено, что ты опять задаешь трудную задачу компьютеру. Вот он и жалуется.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

задаешь трудную задачу компьютеру.

Этот вариант подходит, но, например, в программеscidavis все прекрасно находится (кстати я там нашел a,b,c).

bpm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.