J'ai quelques données que je lisse en utilisant loess
. Je voudrais trouver les points d'inflexion de la ligne lissée. Est-ce possible? Je suis sûr que quelqu'un a fait une méthode sophistiquée pour résoudre ce problème ... Je veux dire ... après tout, c'est R!
Je suis d'accord pour changer la fonction de lissage que j'utilise. Je l'ai juste utilisé loess
parce que c'est ce que j'ai utilisé dans le passé. Mais toute fonction de lissage est très bien. Je me rends compte que les points d'inflexion dépendront de la fonction de lissage que j'utilise. Je suis d'accord avec ça. J'aimerais commencer par avoir simplement une fonction de lissage qui peut aider à cracher les points d'inflexion.
Voici le code que j'utilise:
x = seq(1,15)
y = c(4,5,6,5,5,6,7,8,7,7,6,6,7,8,9)
plot(x,y,type="l",ylim=c(3,10))
lo <- loess(y~x)
xl <- seq(min(x),max(x), (max(x) - min(x))/1000)
out = predict(lo,xl)
lines(xl, out, col='red', lwd=2)
Réponses:
Du point de vue de l'utilisation de R pour trouver les inflexions dans la courbe lissée, il vous suffit de trouver ces endroits dans les valeurs l lissées où le changement de y change.
Ensuite, vous pouvez ajouter des points au graphique où ces inflexions se produisent.
Du point de vue de la recherche de points d'inflexion statistiquement significatifs, je suis d'accord avec @nico que vous devriez vous pencher sur l'analyse des points de changement, parfois également appelée régression segmentée.
la source
Il y a des problèmes à plusieurs niveaux ici.
Tout d'abord, le loess se trouve être un plus lisse et il y en a beaucoup, beaucoup de choix. Les optimistes soutiennent que presque n'importe quel lisseur raisonnable trouvera un vrai motif et que presque tous les lisseurs raisonnables s'entendent sur de vrais motifs. Les pessimistes soutiennent que tel est le problème et que les "lissoirs raisonnables" et les "modèles réels" sont définis ici en termes les uns par rapport aux autres. Au point, pourquoi loess et pourquoi pensez-vous que c'est un bon choix ici? Le choix n'est pas seulement d'un seul lisseur ou d'une seule implémentation d'un lisseur (tout ce qui porte le nom de loess ou lowess n'est pas identique d'un logiciel à l'autre), mais aussi d'un seul degré de lissage (même si cela est choisi par le routine pour vous). Vous mentionnez ce point, mais cela ne le règle pas.
Plus précisément, comme le montre votre exemple de jouet, les caractéristiques de base telles que les points de retournement peuvent facilement ne pas être préservées par le loess (pas pour distinguer le loess non plus). Votre premier minimum local disparaît et votre deuxième minimum local est déplacé par le lissage particulier que vous montrez. Les inflexions définies par des zéros de la dérivée seconde plutôt que par la première peuvent être encore plus inconstantes.
la source
Il existe un tas de grandes approches à ce problème. Certains incluent. (1) - changepoint - package (2) - segmenté - package. Mais vous devez choisir le nombre de points de changement. (3) MARS implémenté dans le paquet -earth-
En fonction de votre compromis biais / variance, tout vous donnera des informations légèrement différentes. -segmenté- vaut bien le détour. Différents modèles de points de changement peuvent être comparés avec AIC / BIC
la source
Vous pouvez peut-être utiliser la bibliothèque fda, et une fois que vous avez estimé une fonction continue appropriée, vous pouvez facilement trouver les endroits où la dérivée seconde est nulle.
FDA CRAN
Introduction à la FDA
la source
J'ai reçu de nombreuses visites sur le blog à propos du package changepoint (> 650 au 11 novembre 2014), voici donc un article mis à jour à l'aide de CausalImpact. http://r-datameister.blogspot.com/2014/11/causality-in-time-series-look-at-2-r.html
la source