Próbuję zaimplementować analizę „punktu zmiany” lub regresję wielofazową nls()
w R.
Oto kilka fałszywych danych, które stworzyłem . Formuła, której chcę użyć do dopasowania danych, to:
Powinno to polegać na dopasowaniu danych do określonego punktu z pewnym przecięciem i nachyleniem ( \ beta_0 i ), a następnie, po określonej wartości x ( ), zwiększ nachylenie o \ beta_2 . Właśnie o to chodzi w tym maksimum. Przed będzie równa 0, a zostanie wyzerowane.
Oto moja funkcja, aby to zrobić:
changePoint <- function(x, b0, slope1, slope2, delta){
b0 + (x*slope1) + (max(0, x-delta) * slope2)
}
W ten sposób staram się dopasować model
nls(y ~ changePoint(x, b0, slope1, slope2, delta),
data = data,
start = c(b0 = 50, slope1 = 0, slope2 = 2, delta = 48))
Wybrałem te parametry początkowe, ponieważ wiem, że są to parametry początkowe, ponieważ utworzyłem dane.
Jednak pojawia się ten błąd:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
Czy właśnie stworzyłem niefortunne dane? Najpierw próbowałem dopasować to do rzeczywistych danych i otrzymywałem ten sam błąd, i po prostu pomyślałem, że moje początkowe parametry początkowe nie były wystarczające.
źródło
Chciałem tylko dodać, że możesz to zrobić z wieloma innymi pakietami. Jeśli chcesz uzyskać oszacowanie niepewności wokół punktu zmiany (coś, czego nls nie może zrobić), wypróbuj
mcp
pakiet.Narysujmy to z przedziałem prognozy (zielona linia). Gęstość niebieskiego jest rozkładem tylnym dla położenia punktu zmiany:
Możesz sprawdzić poszczególne parametry bardziej szczegółowo, używając
plot_pars(fit)
isummary(fit)
.źródło