INSEGNAMENTO DI ANALISI DI DATI BIOLOGICI LM IN BIOINGEGNERIA - A.A.2013/2014 HOMEWORK 3 COGNOME: Montanino NOME: Annaclaudia MATRICOLA: 1056715 DATA: 13 gennaio 2014 email: annaclaudia.montanino@studenti.unipd.it allegati: montanino_h3_4.zip ESERCIZIO H3_4: Problema ispirato dall articolo reperibile su http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=846693. Nel file smbg.mat sono contenuti dati di Self Monitoring Blood Glucose (SMBG) di un soggetto diabetico. Le misurazioni SMBG sono state eseguite 3 volte al giorno (equispaziate, sempre alla stessa ora) per un periodo della durata di un mese (non sono presenti missing samples). Analizzando graficamente i dati, il diabetologo che ha in cura questo soggetto diabetico ritiene che possa esistere una ciclicità giornaliera nelle misurazioni, che verosimilmente ruota attorno ad un trend mensile. Possiamo pensare che la misurazione del valore glicemico possa essere strutturata così: y(t) = t(t) + c(t) + v(t) dove t(t) rappresenta il trend mensile, c(t) rappresenta la componente ciclica giornaliera e v(t) è il rumore di misura. L obiettivo di questo homework è quello di implementare uno script per separare le componenti t(t) e c(t) mediante filtraggio alla Kalman, a partire da una serie di campioni rumorosi y(t) contenuti nella variabile ys (file smbg.mat), per cercare di confermare o meno se esistono una ciclicità giornaliera ed un trend mensile. I modelli a priori da usare sono: t(t) descritto da un modello a doppia integrazione di un rumore bianco con varianza λ 2 1 = 0.05. c(t) descritto come un segnale periodico x 3(t) guidato da rumore bianco w(t) con varianza λ 2 2 =16, la cui frequenza f è relativa al numero di campioni SMBG giornalieri. La struttura in termini di variabili di stato è la seguente: { x 3(t + 1) x 4(t + 1) = cos(2πf)x 3(t) + sin(2πf)x 4(t) = sin(2πf)x 3(t) + cos(2πf)x 4(t) + w(t) Va aggiunto che le misurazioni y(t) sono soggette ad errore con CV v = 0.1%. Utilizzare come valori iniziali il vettore di stato x0 e la matrice P 0 contenuti in smbg.mat. Descrivere e commentare i risultati ottenuti. 1 Introduzione Il Filtraggio alla Kalman, in questo esercizio utilizzato per la separazione di componenti di un segnale rumoroso ys, sfrutta possibilità di scrivere modelli stocastici nella forma di modelli di stato: x(t + 1) = F x(t) + w(t) y(t) = Hx(t) + v(t) Dove x è il vettore di stato che contiene anche ciò che si vuole stimare, F è la matrice di transizione di stato, w è il rumore di modello (con matrice di covarianza Q), y è il vettore delle misure, H è la matrice di trasferimento stato-uscita ed infine v è il rumore di misura (con matrice di covarianza R). Nel caso proposto da questo esercizio si vuole decomporre il segnale y(t) in una componente ciclica giornaliera c(t) e un trend mensile t(t) che esprime le variazioni 1
lente, da cui: y(t) = t(t) + c(t) + v(t). Viene inoltre fornito un modello a priori per entrambe le componenti e da questi si deduce la loro formulazione in termini di variabili di stato: t(t + 1) = 2t(t) t(t 1) + w(t) = 2x 1 (t) x 2 (t) w(t) c(t) = x 3 (t) x 3 (t + 1) = cos(2πf)x 3 (t) + sin(2πf)x 4 (t) x 4 (t + 1) = sin(2πf)x 3 (t) + cos(2πf)x 4 (t) + w(t) Da ciò è possibile riscrivere il modello ingresso-uscita sotto forma del seguente modello di stato: x 1 (t + 1) 2 1 0 0 x 1 (t) w 1 x 2 (t + 1) x 3 (t + 1) = 1 0 0 0 x 2 (t) 0 0 cos(2πf) sin(2πf) x 3 (t) + 0 0 x 4 (t + 1) 0 0 sin(2πf) cos(2πf) x 4 (t) w 2 R = cov(v) = x 1 y = [ 1 0 1 0 ] x 2 x 3 + v(t) x 4 λ 2 1 0 0 0 Q = cov(w) = 0 0 0 0 0 0 0 0 0 0 0 λ 2 2 (y(1)cv v ) 2 0... 0 0 (y(2)cv v ) 2... 0............ 0 0... (y(end)cv v ) 2 Una volta scritto il modello in forma di stato è possibile derivare le equazioni del filtro di Kalman che saranno poi implementate nel codice: P (t + 1 t) = F P (t)f T + Q con P (0) = P 0 K(t + 1) = P (t + 1 t)h T [HP (t + 1 t)h T + R(t)] 1 P (t + 1) = [I N K(t + 1)H]P (t + 1 t) ˆx(t + 1 t) = F ˆx(t t) con ˆx(0) = x 0 e(t + 1) = y(t + 1) H ˆx(t + 1 t) ˆx(t + 1 t + 1) = ˆx(t + 1 t) + K(t + 1)e(t + 1) dove P (t + 1 t) è la covarianza dell errore di predizione ad un passo, K(t + 1) è denominato guadagno del filtro, P (t + 1) è la varianza dello stato al passo t+1, ˆx(t + 1 t) è la predizione ad un passo dello stato (imposto w(t) = 0), e(t + 1) è il residuo di predizione ed infine ˆx(t + 1 t + 1) è la stima dello stato al passo t+1 (passo correttivo in cui vengono usate le misure al tempo t + 1 per raffinare la stima). 2
2 Presentazione del codice 2.1 montanino_h3_4.m Lo script montanino_h3_4.m implementa un filtro di Kalman atto alla separazione del segnale y(t) nelle due componenti t(t) e c(t). 1 % Analisi di Dati Biologici - HW3 es4 2 % Annaclaudia Montanino 1056715 3 % montanino_h3_4_main. m 4 5 close all 6 clear all 7 clc 8 10 9 load smbg 11 n= length (ys ); 12 ts =0:8: n *8-8; 13 f =1/3; 14 F =[2-1 0 0 15 1 0 0 0 16 0 0 cos (2* pi*f) sin (2* pi*f) 17 0 0 -sin (2* pi*f) cos (2* pi*f )]; 18 H =[1 0 1 0]; 19 20 Q= diag ([0.05 0 0 16]); 21 R=( ys.^2)*(0.1/)^2; 22 23 xold =X0; 24 pold =P0; 25 x= zeros ( length (X0),n); 26 27 for i =1: n 28 29 xpred =F* xold ; 30 ppred =F* pold *F +Q; 31 K= ppred *H *1./( H* ppred *H +R(i )); 32 33 e=ys(i)-h* xpred ; 34 xnew = xpred +K*e; 35 I= eye ( size (Q )); 36 pnew =(I-K*H)* ppred ; 37 38 pold = pnew ; 39 xold = xnew ; 40 x(:,i)= xnew ; 41 end 42 43 44 figure 45 46 subplot (3,1,1) 47 plot (ts,ys, b ) 48 title ( misurazioni SMBG ) 49 xlabel ( Tempo [h] ) ylabel ( Glicemia [mg/dl] ) 51 axis ([0 720 2]) 52 53 subplot (3,1,2) 3
54 plot (ts,x (1,:)) 55 title ( componente t(t) ) 56 xlabel ( Tempo [h] ) 57 ylabel ( Glicemia [mg/dl] ) 58 axis ([0 720 200]) 59 60 subplot (3,1,3) 61 plot (ts,x (3,:)) 62 title ( componente c(t) ) 63 xlabel ( Tempo [h] ) 64 ylabel ( Glicemia [mg/dl] ) 65 axis ([0 720 - ]) 66 67 figure 68 69 plot (ts,ys, b ) 70 hold on 71 plot (ts,x(1,:), r ) 72 hold off 73 title ( Confronto misure - trend mensile ) 74 xlabel ( Tempo [h] ) 75 ylabel ( Glicemia [mg/dl] ) 76 axis ([0 720 2]) RIGA 11-RIGA 13: Una volta caricati i dati, viene calcolato il numero di campioni a disposizione n, viene definita la griglia dei tempi ts il cui passo corrisponde a 8 ore (essendo indicato nelle specifiche che si ha 3 campioni equispaziati all interno di una giornata e che non sono presenti missing samples ). Infine viene calcolata la frequenza dei campioni (usata nel modello a priori di c(t) il cui periodo equivale ad un giorno) f = 1/numero di campioni giornalieri. RIGA 14-RIGA 21: Viene costruita la matrice di transizione di stato F, la matrice di trasferimento stato-uscita H, la matrice di covarianza del rumore di modello Q ed infine il vettore R che contiene le varianze dell errore di misura espresse come (y(t) cv) 2 (in questo caso l errore di misura non è tempo-invariante e bisognerà tenerne conto). RIGA 23-RIGA 25: I valori xold e pold vengono inizializzati ai valori forniti nel file smbg.mat. Si tiene inoltre traccia dell intero vettore di stato x = [x 1 x 2 x 3 x 4 ] T del quale poi ci interesserà ispezionare la prima e la terza componenti essendo t(t) = x 1 (t) e c(t) = x 3 (t). RIGA 27-RIGA 41: All interno di questo ciclo f or sono implementate le equazioni descritte nell introduzione (RIGA 29-RIGA 36). Si sottolinea che, avendo errore di misura tempo-variante, alla RIGA 31 si è utilizzato il valore R(i) corrispondente al campione ys(i) che si sta utilizzando. Infine vengono aggiornati i valori di pold e xold che verranno utilizzati al passo successivo. 4
3 Risultati e discussione Nelle figure riportate in questo paragrafo sono raffigurati rispettivamente i campioni rumorosi di concentrazione glicemica, il trend mensile e la componente ciclica giornaliera nella prima immagine, mentre nella seconda si è scelto di plottare il trend mensile sovrapposto ai campioni di concentrazione glicemica. 2 misurazioni SMBG 200 1 0 200 300 400 0 600 700 componente t(t) 200 1 0 200 300 400 0 600 700 componente c(t) 0 0 200 300 400 0 600 700 Ciò che è possibile osservare innanzitutto è che i risultati confermano la presenza di una ciclicità giornaliera e di un trend mensile. Il trend mensile presenta un andamento simile alla media temporale delle misurazioni smbg e i valori assunti dalla componente ciclica giornaliera variano nel range [- ]mg/dl. A differenza di ciò che nell introduzione di [1] viene indicato come indice di una soddisfacente terapia, nel nostro caso l andamento del trend mensile è tutt altro che costante e non risulta sempre compreso nella fascia euglicemica [80-140]mg/dl (specialmente nella parte centrale dell asse dei tempi). A tal proposito posso osservare che, ai fini della lettura dei dati da parte di un clinico, il trend mensile riassume efficacemente l informazione contenuta nel segnale misurato: visivamente dove il trend supera la soglia dell iperglicemia, anche ys raggiunge valori fuori soglia. Provando a contare (con semplici istruzioni matlab) i valori sopra la soglia iperglicemica è risultato: 5
length(find(ys>140)=51 e length(find(x(1,:)>140)=52 che sono valori confrontabili almeno in prima istanza, anche se per indagini più accurate bisogna tener conto di episodi iperglicemici non rilevati dalla sola componente t(t) e viceversa. Si osserva infine che le informazioni fornite sui modelli a priori (con le rispettive varianze del rumore di modello) e sui valori iniziali x 0 e P 0 sono stati scelti sapientemente: le stime sono fin da subito coerenti con il segnale di origine ed inoltre, provando a ricostruire il segnale y(t) come somma delle due componenti trovate e del rumore v(t), si ottiene un andamento identico a quello di origine. 2 Confronto misure trend mensile ipo iper 200 1 0 200 300 400 0 600 700 4 Bibliografia [1] R. Bellazzi, P. Magni, and G. De Nicolao Bayesian Analysis of Blood Glucose Time Series from Diabetes Home Monitoring, IEEE Transactions on Biomedical Engineering, vol. 47, NO. 7, July 2000. 6