2015-12-17 8 views
6

Ragazzi avete un'idea di come affrontare il problema di trovare artefatti/valori anomali in una curva di pressione sanguigna? Il mio obiettivo è scrivere un programma, che trovi l'inizio e la fine di ogni artefatto. Ecco alcuni esempi di diversi manufatti, l'area verde è la curva di pressione sanguigna corretta e il rosso è il manufatto, che deve essere rilevato:R - Approccio per trovare valori anomali/artefatti nella curva di pressione sanguigna

enter image description here

enter image description here

enter image description here

E questo è un esempio di una curva di pressione sanguigna intera: enter image description here

La mia prima idea era di calcolare il significa dall'intera curva e molti mezzi a brevi intervalli della curva e poi scoprire dove si differenzia. Ma la pressione del sangue varia così tanto, che non penso che possa funzionare, perché troverebbe troppi "artefatti" inesistenti.

Grazie per il vostro contributo!

EDIT: Ecco alcuni dati per due esempio artefatti:

Artefact1

Artefact2

+0

Puoi includere alcuni dati, in modo che possiamo provare a trovare una soluzione pratica? – David

+1

Grazie per le tue idee! @ David ho appena aggiunto alcuni dati al mio post originale. E grazie per i tuoi link interessanti, lo verificherò! – Borsi

+1

Plug qui per [CrossValidated] (http://stats.stackexchange.com), "un sito di domande e risposte per le persone interessate alle statistiche, all'apprendimento automatico, all'analisi dei dati, al data mining e alla visualizzazione dei dati". Anche questa domanda su "R" sarebbe in argomento. – C8H10N4O2

risposta

3

senza dati c'è solo la possibilità di puntare verso metodi diversi.

Prima (senza conoscere i dati, che è sempre un enorme svantaggio), vorrei puntare verso Markov switching models, che può essere analizzato utilizzando il HiddenMarkov -package, o il HMM -package. (Sfortunatamente il pacchetto RHmm non viene più gestito dal primo collegamento)

Potresti trovare utile scrivere su Twitter outlier detection.

Inoltre, ci sono molti post sul blog che esaminano il rilevamento dei punti di cambio o le modifiche di regime. Trovo il post this R-bloggers blog molto utile per iniziare. Si riferisce al pacchetto CPM, che sta per "Rilevamento sequenziale e di modifica in batch utilizzando metodi parametrici e non parametrici", il pacchetto 10 ("Analisi bayesiana dei problemi del punto di modifica") e il pacchetto ECP ("Multiple non parametrico"). Analisi del punto di cambiamento dei dati multivariati "). Probabilmente vuoi esaminare i primi due perché non hai dati multivariati.

Questo ti aiuta a iniziare?

0

Potrei fornire una risposta grafica che non utilizza alcun algoritmo statistico. Dai tuoi dati osservo che le sequenze "anormali" sembrano presentare porzioni costanti o, inversamente, variazioni molto alte. Lavorare sulla derivata e impostare i limiti su questa derivata potrebbe funzionare. Ecco una soluzione:

require(forecast) 
test=c(df2$BP) 
test=ma(test, order=50) 
test=test[complete.cases(test)] 
which <- ma(0+abs(diff(test))>1, order=10)>0.1 
abnormal=test; abnormal[!which]<-NA 
plot(x=1:NROW(test), y=test, type='l') 
lines(x=1:NROW(test), y=abnormal, col='red') 

Cosa fa: prima "leviga" i dati con una media mobile per evitare che i micro-variazioni da rilevare. Quindi applica la funzione "diff" (derivata) e verifica se è maggiore di 1 (questo valore deve essere regolato manualmente in base all'ampiezza di attenuazione).Quindi, per ottenere un intero "blocco" di sequenza anormale senza piccoli spazi vuoti, applichiamo di nuovo una livellatura sul booleano e lo proviamo superiore a 0,1 per afferrare meglio i confini della zona. Alla fine, ho sovrascritto le parti macchiate in rosso.

enter image description here

Questo funziona per un tipo di anomalia. Per l'altro tipo, potresti creare una bassa soglia sulla derivata, inversamente, e giocare con i parametri di ottimizzazione del livellamento.

Problemi correlati