Individuazione dei punti di flesso in R da dati uniformi


14

Ho alcuni dati che uso senza problemi loess. Vorrei trovare i punti di flesso della linea smussata. È possibile? Sono sicuro che qualcuno ha creato un metodo elaborato per risolvere questo ... Voglio dire ... dopo tutto, è R!

Sto bene cambiando la funzione di smoothing che uso. Ho usato solo loessperché è quello che ero usato in passato. Ma qualsiasi funzione di smoothing va bene. Mi rendo conto che i punti di flesso dipenderanno dalla funzione di livellamento che utilizzo. Sto bene con quello. Vorrei iniziare semplicemente con qualsiasi funzione di livellamento che può aiutare a sputare i punti di flesso.

Ecco il codice che uso:

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)

inserisci qui la descrizione dell'immagine


3
Forse vuoi dare un'occhiata all'analisi del punto di cambio .
nico

Ho trovato questa riga di codice molto utile: infl <- c (FALSE, diff (diff (out)> 0)! = 0) Ma questo codice trova tutti i punti di svolta a prescindere dal fatto che giri su o giù. Come posso sapere quali punti si piegano e quali si piegano in una serie? Ad esempio, tracciare e colorare il punto di svolta verso l'alto in verde e quelli verso il basso in rosso.
user3511894

Risposte:


14

Dal punto di vista dell'utilizzo di R per trovare le inflessioni nella curva smussata, è sufficiente trovare quei punti nei valori y smussati in cui il cambio in y cambia segno.

infl <- c(FALSE, diff(diff(out)>0)!=0)

Quindi è possibile aggiungere punti al grafico in cui si verificano queste inflessioni.

points(xl[infl ], out[infl ], col="blue")

Dal punto di vista della ricerca di punti di flesso statisticamente significativi, concordo con @nico sul fatto che dovresti esaminare l'analisi del punto di cambiamento, a volte anche definita regressione segmentata.


Questo sembra fare un po 'bene il lavoro. Capisco che non è l'ideale e il risultato che dà non è certamente l'ideale. Grazie per il contributo però. Copre la maggior parte dei casi ad eccezione di cose come una linea retta.
user164846

3
Non sono sicuro di aver capito, @ user164846. Una linea retta non ha punti di flesso.
Jean V. Adams,

Inoltre, potresti voler dare un'occhiata ai smoothers che forniscono immediatamente derivati, ad esempio i filtri Savitzky-Golay. Tuttavia, la scelta del più fluido dovrebbe essere sempre decisa dai dati e dall'applicazione, non viceversa!
cbeleites insoddisfatto di SX il

4

Ci sono problemi su più livelli qui.

Prima di tutto, loess sembra essere più fluido e ci sono molti, molti tra cui scegliere. Gli ottimisti sostengono che quasi ogni ragionevole agevole troverà un modello reale e che quasi tutti i smoothers ragionevoli concordano su modelli reali. I pessimisti sostengono che questo è il problema e che "smoothers ragionevoli" e "modelli reali" sono qui definiti in termini reciproci. Al punto, perché loess e perché pensi che sia una buona scelta qui? La scelta non è solo di un singolo più fluido o di una singola implementazione di un più fluido (non tutto ciò che va sotto il nome di loess o lowess è identico in tutto il software), ma anche di un singolo grado di smoothing (anche se scelto dal routine per te). Menzionate questo punto ma questo non lo sta affrontando.

Più in particolare, come mostra il tuo esempio di giocattolo, le funzioni di base come i punti di svolta potrebbero non essere facilmente preservate dai loess (neanche per individuare i loess). Il tuo primo minimo locale scompare e il secondo minimo locale viene spostato dal particolare smooth che mostri. Si può prevedere che le inflessioni definite dagli zeri del secondo derivato anziché dal primo siano ancora più volubili.


Ho scelto il loess perché l'ho preso da Internet. Ho molta esperienza nel livellare in generale, quindi ho semplicemente preso il codice online. Hai un suggerimento migliore?
user164846

Scusa, ma non capisco il tuo commento. Se hai molta esperienza nel livellamento, dovresti avere degli argomenti per capire quali leviganti conservano meglio le inflessioni mentre sopprimono il rumore. Questo mi sembra un obiettivo contraddittorio, ma sarei felice di sentire argomenti tecnici sul perché mi sbaglio.
Nick Cox,

Spiacente, non intendo dire "inesperto" ahah
user164846

1
Vedo. La vita è breve e non puoi provare tutti i metodi possibili. Non possiamo vedere i tuoi dati reali, ma il tuo esempio di giocattolo sottolinea che il livellamento può rimuovere la struttura identificabile.
Nick Cox,

2

Ci sono un sacco di grandi approcci a questo problema. Alcuni includono. (1) - changepoint- pacchetto (2) - segmentato - pacchetto. Ma devi scegliere il numero di punti di cambio. (3) MARS come implementato nel pacchetto -earth-

A seconda del tuo compromesso di bias / varianza, tutto ti darà informazioni leggermente diverse. -segmentato- vale la pena dare un'occhiata. Numero diverso di modelli di punti di cambio può essere confrontato con AIC / BIC


1

Potresti forse usare la libreria fda e una volta stimata una funzione continua appropriata, puoi facilmente trovare i luoghi in cui la seconda derivata è zero.

FAN CRAN

Introduzione della FDA


Gli zeri della prima derivata definiscono minimi e massimi. Penso che intendi il secondo. Che cosa è "facilmente", in ogni caso? Esiste più di un modo per differenziarsi numericamente.
Nick Cox,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.