Próbuję dopasować linię + krzywą wykładniczą do niektórych danych. Na początek próbowałem to zrobić na niektórych sztucznych danych. Funkcja to: Jest to efektywnie krzywa wykładnicza o przekroju liniowym, a także dodatkowy parametr przesunięcia poziomego ( m ). Jednak gdy używam funkcji R, pojawia się przerażający błąd „ pojedyncza macierz gradientu przy początkowych oszacowaniach parametrów ”, nawet jeśli używam tych samych parametrów, których użyłem do wygenerowania danych. Próbowałem różnych algorytmów, różnych wartości początkowych i próbowałem użyć
nls()
optim
aby zminimalizować resztkową sumę kwadratów, wszystko bezskutecznie. Czytałem, że przyczyną tego może być nadmierna parametryzacja formuły, ale nie sądzę, że jest (prawda?) Czy ktoś ma jakieś sugestie dotyczące tego problemu? Czy to tylko niezręczny model?
Krótki przykład:
#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)
#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)
Dzięki!