J'essaye d'implémenter une analyse de "point de changement", ou une régression polyphasée en utilisant nls()
dans R.
Voici quelques fausses données que j'ai faites . La formule que je veux utiliser pour ajuster les données est la suivante:
Ce que cela est censé faire, c'est ajuster les données jusqu'à un certain point avec une certaine interception et pente ( et ), puis, après une certaine valeur x ( ), augmenter la pente de . C'est de cela qu'il s'agit. Avant le point , il sera égal à 0 et sera remis à zéro.
Alors, voici ma fonction pour ce faire:
changePoint <- function(x, b0, slope1, slope2, delta){
b0 + (x*slope1) + (max(0, x-delta) * slope2)
}
Et j'essaie d'adapter le modèle de cette façon
nls(y ~ changePoint(x, b0, slope1, slope2, delta),
data = data,
start = c(b0 = 50, slope1 = 0, slope2 = 2, delta = 48))
J'ai choisi ces paramètres de départ, parce que je sais que ce sont les paramètres de départ, parce que j'ai inventé les données.
Cependant, j'obtiens cette erreur:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
Est-ce que je viens de faire des données malheureuses? J'ai d'abord essayé d'ajuster cela sur des données réelles, et j'obtenais la même erreur, et j'ai juste pensé que mes paramètres de démarrage initiaux n'étaient pas assez bons.
la source
Je voulais juste ajouter que vous pouvez le faire avec de nombreux autres packages. Si vous souhaitez obtenir une estimation de l'incertitude autour du point de changement (quelque chose que nls ne peut pas faire), essayez le
mcp
package.Tracons-le avec un intervalle de prédiction (ligne verte). La densité bleue est la distribution postérieure de l'emplacement du point de changement:
Vous pouvez inspecter les paramètres individuels plus en détail à l'aide de
plot_pars(fit)
etsummary(fit)
.la source