3 - TECNICHE DI ANALISI DEI DATI fMRI 1. Acquisizione delle immagini funzionali e strutturali del cervello Negli studi fMRI le immagini funzionali del cervello (T2*-pesate) vengono acquisite usando sequenze di imaging gradient echo, del tipo echo planar (EPI). Ogni TR vengono acquisite tutte le immagini tomografiche 2D (fette) relative ad un intero volume cerebrale; in genere sono da 20 a 30 e ciascuna di esse è relativa ad una fetta di cervello con un certo spessore, per es. di 5 mm. Sono immagini funzionali a bassa risoluzione spaziale. Per avere una dettagliata anatomia del cervello, per ogni soggetto vengono inoltre acquisite immagini strutturali ad alta risoluzione spaziale T1-pesate del tipo spoiled gradient recall (SPGR). Durante un intero studio vengono acquisite, per ciascun soggetto, da 8 a 10 serie temporali (time series), ciascuna delle quali formata da un certo numero di volumi cerebrali (in genere da 80 a 100). In questi volumi le dimensioni tipiche dei singoli voxels sono per es. di 3.75 x 3.75 x 5 mm, relativamente alle immagini funzionali (EPI) a bassa risoluzione spaziale. 2. Concetti fondamentali Esistono diversi programmi per effettuare l’analisi dei dati fMRI; di seguito si fa riferimento ad “AFNI” (Analyses of Functional Neuroimages, Cox RW, Bethesda, MD, http://afni.nimh.nih.gov/afni). Con AFNI le immagini del cervello possono essere mostrate secondo le viste: assiali, sagittali, coronali. Le mappe di attivazione sono visualizzate a colori, sovrapposte alle immagini anatomiche di localizzazione ad alta risoluzione spaziale in scala di grigi. La struttura dati fondamentale è il dataset, un insieme di array 3D di valori numerici. Ciascun array 3D è chiamato sub-brick e rappresenta un volume cerebrale ricostruito da un insieme di immagini tomografiche 2D acquisite con lo scanner MRI in un singolo TR. Ogni elemento di un array 3D rappresenta un voxel del volume cerebrale, con le sue coordinate di posizione (x,y,z); il valore numerico di un elemento dell’array rappresenta l’intensità del segnale MRI associato al voxel corrispondente. Ogni TR viene acquisito un intero volume cerebrale: un dataset è costituito dall’insieme di tutti i volumi cerebrali funzionali, cioè di tutti i sub-bricks acquisiti in successione temporale in un intero run di scansione e per questo è indicato con 3D+time dataset. Ci sono anche datasets che si riferiscono ad immagini anatomiche di localizzazione: sono formati da un unico volume cerebrale, cioè da un unico sub-brick e per questo sono indicati con 3D datasets. Esistono infine datasets che contengono le statistiche calcolate elaborando i 3D+time datasets funzionali: sono formati da vari sub-bricks, mostrano le attivazioni cerebrali e sono indicati con 4D datasets. I valori di uno stesso voxel in tutti i volumi cerebrali costituiscono una serie temporale (time series). Oltre ai valori dei singoli voxel in tutti i sub-bricks, un dataset contiene anche informazioni ausiliarie come le dimensioni (in mm) dei voxel stessi, l’orientazione e la posizione del dataset rispetto alle coordinate dello scanner, la data e l’ora di creazione del dataset, il TR, ecc. Per questo un dataset è memorizzato in due files con diversa estensione: un file .HEAD che contiene tutte le informazioni ausiliarie ed un file .BRIK che contiene i valori numerici di tutti i voxel di tutti i subbricks. Per quanto riguarda i tre assi di riferimento (x,y,z) di un dataset, per convenzione: 1) l’asse x identifica la direzione R-L (R = right, L = left), perciò un valore di x identifica una fetta sagittale del cervello; 2) l’asse y identifica la direzione A-P (A = anterior, P = posterior), perciò un valore di y identifica una fetta coronale del cervello; 3) l’asse z identifica la direzione I-S (I = inferior, S = superior), perciò un valore di z identifica una fetta assiale del cervello. [email protected] 1 Un dataset può essere riferito a tre diversi sistemi di coordinate tridimensionali (detti anche “viste”): 1) le coordinate originali: (x,y,z) delle immagini 2D acquisite dallo scanner MRI; i datasets riferiti a queste coordinate sono indicati con il suffisso: +orig; 2) le coordinate AC-PC: il dataset è ruotato in modo tale che la commissura anteriore (AC) e quella posteriore (PC) risultino allineate su una retta orizzontale; i datasets riferiti a queste coordinate sono indicati con il suffisso: +acpc; 3) le coordinate di Talairach: il dataset è compresso o dilatato in modo tale che le sue 12 sottoregioni siano conformi all’Atlante Cerebrale di Talairach-Tournoux; i datasets riferiti a queste coordinate sono indicati con il suffisso: +tlrc. I nomi dei files dei datasets sono formati da tre parti: 1) il nome scelto dall’utente per mezzo dell’opzione –prefix; 2) il tipo di coordinate di riferimento: +orig, +acpc, oppure +tlrc; 3) l’estensione: .HEAD oppure .BRIK. 3. Ricostruzione delle immagini del cervello Per ricostruire le immagini del cervello è stato utilizzato il programma “to3d”. Infatti tale programma legge una sequenza tomografica di immagini (fette) 2D in ingresso e la converte (assembla) in un dataset volumetrico (3D) che poi può essere utilizzato in AFNI. Con il programma “to3d” si possono ricostruire, oltre alle immagini funzionali (EPI), anche le immagini anatomiche (SPGR); tale programma è in grado di leggere immagini anche nei formati ANALYZE e DICOM. Oltre all’insieme dei dati delle fette 2D che verranno inseriti nel file .BRIK, è necessario fornire in ingresso al programma “to3d” altri dati ausiliari, che verranno inseriti nel file .HEAD. Tali informazioni ausiliarie sono per esempio: l’orientazione delle fette nello spazio, le dimensioni delle fette, la posizione del dataset volumetrico nello spazio, le informazioni temporali su come le singole fette sono state acquisite nel caso di 3D+time datasets. Il programma “to3d” è in grado di ricavare automaticamente alcune di queste informazioni ausiliarie direttamente dagli header files delle immagini 2D acquisite dallo scanner per alcuni formati di file, tra cui ANALYZE, DICOM e per i files relativi ai volumi cerebrali funzionali prodotti dagli scanner GE. Il programma “to3d” può essere eseguito in due modi diversi: da linea di comando o tramite interfaccia grafica utente. E’ necessario fornire al programma le informazioni sulla temporizzazione della scansione, che sono: • il numero 'nz' di fette 2D acquisite nella direzione spaziale z in un TR, corrispondenti ad un singolo volume cerebrale; si nota che il tempo dt che intercorre tra l’acquisizione di una fetta 2D e la successiva (inter-slice time) vale: TR dt = nz • il numero 'nt' di volumi cerebrali acquisiti nel tempo (cioè nella direzione temporale t) in un intero run di scansione; corrisponde al numero di TR o istanti temporali (time points) presenti in un run , detto anche numero di reps del run considerato. Il tempo di scansione di un run vale TR•nt e le corrispondenti serie temporali sono formate da nt istanti successivi. Si nota che in un run di scansione vengono acquisite complessivamente nz•nt fette 2D, che poi vengono lette dal programma “to3d”. • 'TR' = tempo di ripetizione, durante il quale viene acquisito un intero volume cerebrale, formato da nz fette 2D; si nota che dopo un TR viene di nuovo acquisita la stessa fetta 2D all’interno del volume cerebrale selezionato. TR rappresenta la risoluzione temporale dell’acquisizione dei volumi cerebrali; è espresso per default in millisecondi, ma si può esprimere anche in secondi, con il suffisso 's' oppure in Hertz [email protected] 2 con il suffisso 'Hz'. Se si pone TR = 0, il valore di questo parametro viene letto direttamente dagli header files delle immagini 2D acquisite dallo scanner; Per esempio la parte della linea di comando del programma “to3d” che contiene le informazioni sulla temporizzazione della scansione può essere la seguente: -time:tz 110 27 2500 In questo caso in un intero run di scansione vengono acquisiti nt = 110 volumi cerebrali ed il tempo di scansione di un run vale TR•nt = 2.5•110 = 275 secondi = 4 minuti e 35 secondi. In ogni TR vengono acquisite nz = 27 fette 2D corrispondenti ad un volume cerebrale; l’inter-slice time vale: TR 2500 dt = = ≅ 92.6 m sec nz 27 In un run di scansione vengono acquisite nella direzione +z, complessivamente nz•nt = 27•110 = 2970 fette 2D. Nella linea di comando bisogna includere anche le informazioni sulle specifiche geometriche dell’acquisizione. Esse specificano l’estensione e l’orientazione dei tre assi di riferimento (x,y,z) della sequenza tomografica di acquisizione; tutte le dimensioni sono espresse in mm. Ricordiamo la convenzione: 1) l’asse x identifica la direzione R-L (R = right, L = left), perciò un valore di x identifica una fetta sagittale del cervello; 2) l’asse y identifica la direzione A-P (A = anterior, P = posterior), perciò un valore di y identifica una fetta coronale del cervello; 3) l’asse z identifica la direzione I-S (I = inferior, S = superior), perciò un valore di z identifica una fetta assiale del cervello. L’opzione -save_outliers fname dice al programma “to3d” di salvare il resoconto degli outliers in un file con estensione: .1D e nome: 'fname' assegnato dall’utente. Si può poi rappresentare graficamente questo file per mezzo del comando: 1dplot fname. Quando si usa questa opzione, il resoconto degli outliers viene salvato comunque, anche se non appare niente di “sospetto”. In generale gli outliers o spikes sono valori assunti da un voxel in particolari istanti di una serie temporale, che sono molto diversi dagli altri valori di quel voxel in tale serie temporale. E’ importante controllare graficamente gli outliers di una serie temporale per vedere se ci sono stati problemi durante l’acquisizione (per esempio movimenti della testa del soggetto o artefatti dello scanner). Nella Figura 1 è rappresentato graficamente l’andamento di una serie temporale di un voxel che in un particolare istante (indicato con la freccia rossa) assume un valore, che è un potenziale outlier. [email protected] 3 Figura 1 Rappresentazione grafica dell’andamento di una serie temporale di un voxel che in un particolare istante (indicato con la freccia rossa) assume un valore, che è un potenziale outlier. Dall’andamento grafico della serie temporale di Figura 1 si nota che nei primi istanti della serie, il voxel considerato assume valori molto alti, cioè è affetto da molto rumore: questo è dovuto a possibili artefatti dello scanner (causati per esempio dal fatto che il campo magnetico generato all’interno dello scanner dalle bobine di eccitazione a radiofrequenza non ha ancora raggiunto lo stato stazionario). Se rimuoviamo per esempio i primi tre istanti dalla serie temporale, il potenziale outlier indicato nella Figura 1 diventa molto più evidente, come è mostrato nella Figura 2. Figura 2 Rappresentazione grafica dell’andamento della stessa serie temporale di Figura 1, dalla quale sono stati rimossi i primi tre istanti: come si vede chiaramente, ora il potenziale outlier indicato nella Figura 1 è diventato molto più evidente. 4. Registrazione dei volumi cerebrali Per registrare, cioè allineare i volumi cerebrali relativi allo stesso run o a runs diversi, acquisiti in tempi successivi, magari per soggetti diversi, è stato utilizzato il programma “3dvolreg” di AFNI. Esso registra ciascun sub-brick (volume cerebrale) dei vari 3D+time datasets (runs) d’ingresso, rispetto ad un sub-brick scelto come “base” da un particolare dataset, con lo scopo di allineare, rispetto al sub-brick “base”, tutti i volumi cerebrali dei vari runs acquisiti. La [email protected] 4 registrazione dei volumi cerebrali permette di confrontare voxel per voxel i dati relativi a diversi runs di scansione (allineamento inter-session); inoltre, all’interno dello stesso run, dopo la registrazione (allineamento intra-session) i dati funzionali delle serie temporali sono meno affetti dagli artefatti dovuti al movimento della testa del soggetto. Sia J(x) il volume cerebrale scelto come “base”, rispetto al quale si vuole allineare un altro volume cerebrale “target” I(x). Dati J(x) e I(x), bisogna determinare una trasformazione geometrica T(x) tale da minimizzare la differenza: T[I(x )] − J (x ) = E cioè tale che risulti: T[I(x )] ≅ J (x ) ; E è l’errore di disallineamento tra T[I(x )] e J (x ) . In pratica ciascun volume cerebrale “target” I(x) è ruotato e/o traslato dalla trasformazione geometrica T(x) in modo da trovarsi sovrapposto meglio possibile al volume cerebrale “base” J(x). T(x) contiene 6 parametri: bisogna determinare i valori di tali parametri in modo che T[I(x )] sia allineato meglio possibile a J (x ) . Per registrare un’intera serie temporale di volumi cerebrali, ciascun volume cerebrale I n (x ) , con n=1, 2, …1, deve essere allineato al volume “base” J (x ) per mezzo della sua propria trasformazione geometrica Tn (x ) . Il risultato è una serie temporale di volumi cerebrali Tn [I n (x )] , con n=1, 2, …, tutti allineati a J (x ) . Si ricorda che è l’utente che deve scegliere il volume cerebrale “base”: J(x). Le principali caratteristiche dell’algoritmo di registrazione utilizzato dal programma “3dvolreg” sono: il modo in cui viene misurato l’errore E; il modo in cui vengono determinati i valori dei 6 parametri di T(x) per minimizzare E; il modo in cui il volume cerebrale T[I(x )] viene interpolato alla “griglia” di J (x ) , in modo da poter confrontare direttamente le intensità dei voxel corrispondenti dei due volumi cerebrali. Il programma “3dvolreg” di AFNI effettua questo confronto utilizzando come intensità dei voxel dei due volumi cerebrali, i valori dei livelli di grigio. I valori dei 6 parametri di T(x) vengono ricavati con un algoritmo ad approssimazioni successive, precisamente con l’algoritmo di “discesa del gradiente”, per il quale sono disponibili vari metodi di interpolazione, tra i quali quello usato di default è il metodo di Fourier, ma si possono utilizzare anche metodi di interpolazione polinomiale di diverso ordine. L’errore E viene calcolato come somma pesata delle differenze al quadrato, in accordo alla seguente formula: 2 E = ∑ x w (x ) ⋅ {T[I(x )] − J (x )} dove w(x) è il peso del voxel “x”. La sommatoria è estesa a tutti i voxel “x” del volume cerebrale: T[I(x )] − J (x ) . Infatti, poiché I(x) è un volume cerebrale, allora “x” è un vettore di tre elementi, le cui componenti sono le coordinate spaziali (x,y,z) dei vari voxel di I(x); il valore assunto da I(x) per un certo “x” è l’intensità del voxel individuato da “x”; E è uno scalare. Il programma “3dvolreg” è in grado di registrare tra loro volumi cerebrali di datasets funzionali (EPI), oppure di registrare tra loro volumi cerebrali di datasets anatomici (SPGR), ma non può registrare tra loro volumi cerebrali di datasets funzionali (EPI) con volumi cerebrali di datasets anatomici (SPGR). I 6 parametri di T(x) comprendono 3 parametri di traslazione, lungo ciascuno dei tre assi di riferimento: (x, y, z) e 3 parametri di rotazione, attorno a ciascuno dei tre assi di riferimento. Sono chiamati parametri di movimento e servono per allineare ciascun volume cerebrale (sub-brick) da registrare I n (x ) rispetto al volume “base” J(x); in generale sono utili sia nel caso di allineamento inter-session che nel caso di allineamento intra-session. Nel caso di allineamento intra-session, gli artefatti dovuti a movimenti della testa del soggetto che avvengono all’interno di un singolo TR non possono essere corretti dal programma “3dvolreg”. 1 Ciascun valore di n rappresenta un istante della serie temporale considerata. [email protected] 5 L’opzione -dfile dname dice al programma “3dvolreg” di salvare i parametri di movimento in un file con estensione: .1D e nome: 'dname' assegnato dall’utente. Questo file è formato da 9 colonne, ciascuna delle quali contiene tanti caratteri ASCII quanti sono i volumi cerebrali da registrare rispetto al volume “base” J(x), cioè in pratica quanti sono gli istanti delle serie temporali del 3D+time dataset d’ingresso. Ognuno di questi caratteri rappresenta il valore del parametro relativo alla colonna in esame e corrispondente al particolare volume cerebrale (subbrick) considerato all’interno della serie temporale del 3D+time dataset d’ingresso. Vediamo in dettaglio quali sono i parametri associati alle 9 colonne del file 'dname': 1) n = indice del sub-brick all’interno della serie temporale (vedi la nota n. 1); 2) roll = parametro di rotazione attorno all’asse z che per convenzione identifica la direzione I-S (I = inferior, S = superior); si misura in gradi, contati positivamente in senso antiorario; 3) pitch = parametro di rotazione attorno all’asse x che per convenzione identifica la direzione R-L (R = right, L = left); si misura in gradi, contati positivamente in senso antiorario; 4) yaw = parametro di rotazione attorno all’asse y che per convenzione identifica la direzione A-P (A = anterior, P = posterior); si misura in gradi, contati positivamente in senso antiorario; 5) dS = parametro di traslazione lungo l’asse z (S = superior); si misura in mm; 6) dL = parametro di traslazione lungo l’asse x (L = left); si misura in mm; 7) dP = parametro di traslazione lungo l’asse y (P = posterior); si misura in mm; 8) rmsold = differenza RMS (root mean square) tra il sub-brick da allineare I n (x ) ed il subbrick “base” J(x); 9) rmsnew = differenza RMS (root mean square) tra il sub-brick allineato Tn [I n (x )] ed il sub-brick “base” J(x). Come si vede, i 6 parametri di movimento sono contenuti nelle colonne: 2,…,7 del file 'dname'. E’ utile rappresentare graficamente i 6 parametri di movimento in funzione degli istanti delle serie temporali del 3D+time dataset d’ingresso; si utilizza per questo il comando: 1dplot 'dname[1..6]' perché i 9 parametri associati alle 9 colonne del file 'dname' corrispondono agli indici: 0,…,8. In Figura 3 è mostrata la finestra prodotta dal precedente comando, contenente gli andamenti temporali dei 6 parametri di movimento del dataset considerato. Dai 6 grafici della Figura si notano dei picchi di movimento in corrispondenza dell’istante: t ≅ 160 sec, dovuti al fatto che in quel momento il soggetto ha mosso improvvisamente la testa facendo uno “scatto”. I picchi nei valori dei parametri di movimento per t ≅ 160 sec sono dovuti al fatto che il volume cerebrale I160 (x ) è molto più disallineato dal volume “base” J(x) di quanto lo sono gli altri volumi I n (x ) , con n ≠ 160 sec. [email protected] 6 Figura 3 Rappresentazione grafica degli andamenti dei 6 parametri di movimento del 3D+time dataset d’ingresso in funzione degli istanti delle serie temporali. Se nel programma “3dvolreg” non si inserisce l’opzione -dfile dname, i parametri di movimento del dataset considerato non vengono salvati. Come vedremo più avanti, i valori stimati dal programma “3dvolreg” dei parametri di movimento possono essere utilizzati come “regressori di non interesse” nel programma “3dDeconvolve”. Ci chiediamo ora come, tra tutti i sub-bricks del 3D+time dataset d’ingresso, l’utente può scegliere il volume cerebrale “base” J(x), rispetto al quale verranno allineati tutti gli altri volumi cerebrali I n (x ) del dataset stesso. Nel caso di datasets funzionali (EPI), la scelta migliore per J(x) è il sub-brick che è stato acquisito più vicino possibile nel tempo rispetto a quando è stato acquisito il dataset anatomico (SPGR). Se il dataset anatomico è stato acquisito prima dei datasets funzionali, si dovrebbe scegliere per J(x) il primo sub-brick (perciò quello con indice 0) del primo run EPI acquisito. In realtà, come già detto nel precedente paragrafo, i primi istanti delle serie temporali acquisite sono affetti da molto rumore a causa di possibili artefatti dello scanner, perciò in genere tali primi istanti vengono rimossi dalle serie temporali di tutti i runs acquisiti. Supponiamo per esempio che il primo run EPI acquisito dopo il dataset anatomico sia stato chiamato: fred_EPI_r1 e sia formato da 138 subbricks successivi. Decidiamo di rimuovere i primi 3 sub-bricks (quelli con indici: 0, 1, 2) scrivendo: fred_EPI_r1+orig'[3..137]' In questo caso come volume cerebrale “base” J(x) per il programma “3dvolreg” scegliamo il quarto sub-brick del run EPI fred_EPI_r1+orig, quello con indice 3. Per fare questo si utilizza l’opzione –base n nella linea di comando del programma “3dvolreg”. Infatti tale opzione fa sì che: J (x ) = In (x ) , perciò permette all’utente di selezionare il sub-brick del dataset EPI d’ingresso che verrà utilizzato dal programma come volume cerebrale “base”. Nel nostro esempio allora l’opzione da scrivere è –base 3. Si nota che il dataset relativo alla registrazione volumetrica prodotto dall’esecuzione del programma “3dvolreg” e chiamato dall’utente per esempio fred_EPI_r1_vr, sarà formato da 135 sub-bricks (3,…,137), ai quali verranno assegnati gli indici: 0,…,134. Se invece il dataset anatomico è stato acquisito dopo i datasets funzionali, si può scegliere per J(x) l’ultimo sub-brick dell’ultimo run EPI acquisito. Se anche gli ultimi istanti delle serie [email protected] 7 temporali acquisite sono affetti da rumore, vengono rimossi anch’essi da tutti i runs acquisiti. Supponiamo per esempio che l’ultimo run EPI acquisito prima del dataset anatomico sia stato chiamato: fred_EPI_r10 e sia formato da 138 sub-bricks successivi. Decidiamo di rimuovere gli ultimi 2 sub-bricks (quelli con indici: 136, 137) scrivendo: fred_EPI_r10+orig'[3..135]' In questo caso come volume cerebrale “base” J(x) per il programma “3dvolreg” scegliamo il 136-esimo sub-brick del run EPI fred_EPI_r10+orig, quello con indice 135. Per fare questo si utilizza l’opzione –base 135 nella linea di comando del programma “3dvolreg”. Se nella linea di comando del programma “3dvolreg” non si inserisce l’opzione –base n, per default viene scelto come volume cerebrale “base” J(x) il primo sub-brick (quello con indice 0) del dataset EPI d’ingresso (è come scrivere: –base 0). L’opzione -tshift i nella linea di comando del programma “3dvolreg” fa sì che le serie temporali relative ai voxels del 3D+time dataset d’ingresso vengano shiftate nel tempo in modo che le diverse fette 2D di ogni volume cerebrale risultino allineate alla stessa origine temporale (media tra le fette). Questo shift temporale è raccomandato perché ciascun volume cerebrale è formato da 'nz' immagini (fette) tomografiche 2D, ciascuna delle quali viene acquisita dallo scanner MRI, all’interno di un singolo TR, in istanti di tempo diversi (c’è un ritardo temporale fetta-dipendente). Questa differenza temporale introduce un ritardo di tempo artificiale tra le risposte (segnali) provenienti da voxels corrispondenti in fette diverse dello stesso volume cerebrale. Questo ritardo non influenza apprezzabilmente le statistiche tipicamente prodotte dall’analisi di deconvoluzione (descritta più avanti), ma può influenzare i dati se per esempio si vogliono confrontare le evoluzioni temporali delle risposte (serie temporali) provenienti da differenti regioni del cervello, cioè da voxels che si trovano in fette diverse. All’interno del programma “3dvolreg” lo shift temporale viene eseguito prima della registrazione spaziale dei volumi cerebrali: è importante che queste due operazioni vengano eseguite nell’ordine corretto. Un’altra possibilità è di eseguire il programma “3dTshift” prima del programma “3dvolreg”. Infatti il programma “3dTshift” fa esattamente la stessa cosa dell’opzione -tshift nella linea di comando del programma “3dvolreg”: i risultati che si ottengono nei due casi sono identici. Il numero intero i si riferisce al numero di istanti iniziali delle serie temporali che vengono ignorati nell’operazione di shift temporale. Si nota che se i primi istanti sono già stati rimossi dalle serie temporali dei runs acquisiti, bisogna usare l’opzione –tshift 0, perché agli istanti temporali rimanenti vengono assegnati nuovi indici che, come abbiamo visto prima, partono da 0. 5. Filtraggio spaziale dei volumi cerebrali A questo punto, dopo che i 3D+time datasets ricostruiti sono stati shiftati nel tempo e registrati volumetricamente, vogliamo applicare ad essi un filtraggio spaziale tridimensionale per far loro assumere un aspetto migliore, più utile per i nostri scopi. Per questo utilizziamo un filtro Gaussiano di smoothing: in pratica viene eseguita una convoluzione tra i volumi cerebrali in esame ed una funzione Gaussiana, che rappresenta la maschera spaziale di filtraggio; tale convoluzione viene calcolata utilizzando la FFT (Fast Fourier Transform). Un filtro Gaussiano di smoothing è sostanzialmente un filtro passa-basso, il cui effetto è quello di ridurre il rumore alle alte frequenze e di lasciare i volumi cerebrali (e perciò anche le relative immagini 2D) pressoché inalterati alle basse frequenze. In realtà questo filtraggio spaziale passa-basso produce un “annebbiamento” (in Inglese “blurring”) delle immagini, con conseguente perdita di risoluzione spaziale; d’altro canto dopo il filtraggio le immagini appaiono più pulite e le aree di attivazione funzionale più vicine tra loro risultano unite. Questo è utile per esempio quando si devono confrontare le regioni di attivazione di diversi datasets: a causa di disallineamenti anche piccoli delle immagini funzionali, voxels attivati che dovrebbero essere sovrapposti in realtà non lo sono. Un possibile modo per ridurre questo problema è di allargare artificialmente in qualche [email protected] 8 misura le aree di attivazione funzionale e questo può essere ottenuto appunto applicando un filtro Gaussiano di smoothing ai volumi cerebrali dei 3D+time dataset d’ingresso. Per realizzare il filtraggio spaziale tridimensionale dei volumi cerebrali dei 3D+time dataset d’ingresso è stato utilizzato il programma “3dmerge” di AFNI, che permette all’utente di editare datasets e/o di combinare tra loro datasets diversi, il tutto nello spazio 3D. Abbiamo utilizzato il programma “3dmerge” per editare i nostri datasets, in particolare per effettuare su di essi un filtraggio Gaussiano di smoothing. L’opzione -1blur_rms bmm fa sì che il blurring spaziale applicato a ciascun voxel dei volumi cerebrali venga effettuato con un filtro Gaussiano con una deviazione RMS (root mean square) uguale al valore bmm; L’opzione -1blur_sigma bmm fa sì che il blurring spaziale applicato a ciascun voxel dei volumi cerebrali venga effettuato con un filtro Gaussiano con una deviazione standard σ uguale al valore bmm,; L’opzione -1blur_fwhm bmm fa sì che il blurring spaziale applicato a ciascun voxel dei volumi cerebrali venga effettuato con un filtro Gaussiano con una FWHM (full width at half maximum) uguale al valore bmm. In pratica in tutti e tre i casi il parametro bmm è espresso in millimetri e rappresenta un indice della larghezza del filtro Gaussiano che viene utilizzato. Queste tre opzioni forniscono semplicemente tre modi diversi per specificare il raggio utilizzato per la funzione di blurring; la relazione tra i valori dei tre parametri bmm è: sigma = 0.57735027 ⋅ rms = 0.42466090 ⋅ fwhm Nella Figura 4 è mostrato, su un’immagine assiale, il risultato di un filtraggio (blurring) spaziale ottenuto con il programma “3dmerge” e con l’opzione -1blur_rms 4. Figura 4 Risultato, mostrato su un’immagine assiale, di un filtraggio (blurring) spaziale ottenuto con il programma “3dmerge” e con l’opzione -1blur_rms 4, che fa sì che lo smoothing applicato a ciascun voxel venga effettuato con un filtro Gaussiano con una deviazione RMS uguale a 4 mm. In generale quanto più largo è il filtro, maggiore è il blurring che si ottiene, ma maggiore è anche la perdita di risoluzione spaziale e viceversa quanto più stretto è il filtro. 6. Normalizzazione dei volumi cerebrali e calcolo della variazione percentuale del segnale BOLD rispetto alla baseline La normalizzazione di ciascun volume cerebrale rispetto alla propria baseline diventa importante quando si devono confrontare tra loro i dati relativi a soggetti diversi, cioè quando si deve effettuare un’analisi di gruppo. Il motivo principale per cui si devono normalizzare i dati fMRI [email protected] 9 è rappresentato dalla variabilità del modo in cui i vari soggetti rispondono alla presentazione degli stimoli. Innanzi tutto le baselines, cioè le condizioni di riposo, in generale sono diverse da soggetto a soggetto; inoltre il livello di attivazione cerebrale in risposta ad una stessa condizione di stimolo può essere diverso in soggetti diversi. In altre parole sia la baseline che la risposta ad uno stesso stimolo (entrambe misurate in unità IRF = ideal response function: dà una misura dell’intensità del segnale BOLD proveniente dai voxels considerati all’interno del cervello) in generale variano da soggetto a soggetto e la loro differenza può essere più grande per certi soggetti e più piccola per altri. Per tener conto di questa variabilità, dobbiamo convertire i valori assoluti del segnale BOLD misurato (baseline e risposta ad uno stimolo), in valori relativi, in particolare in valori di variazioni percentuali del segnale rispetto ad una baseline comune a tutti i volumi cerebrali. Dopo aver fatto questa normalizzazione, possiamo confrontare direttamente i livelli relativi di attivazione nelle regioni cerebrali corrispondenti dei diversi soggetti. Vediamo un esempio per chiarire tutto questo: • soggetto 1: il segnale BOLD nell’ippocampo varia dal valore 1000 (baseline) al valore 1050 (condizione di stimolo); risulta una differenza di segnale di 50 unità IRF; • soggetto 2: il segnale BOLD nell’ippocampo varia dal valore 500 (baseline) al valore 525 (condizione di stimolo); risulta una differenza di segnale di 25 unità IRF. Se si confrontassero semplicemente le differenze assolute tra i valori IRF delle baselines e delle risposte ad uno stimolo in soggetti diversi, si noterebbe che il soggetto 1 ha mostrato, in risposta alla condizione di stimolo, un’attivazione doppia rispetto a quella mostrata dal soggetto 2. Si potrebbe allora concludere che la condizione di stimolo ha avuto un effetto molto maggiore nel soggetto 1 che non nel soggetto 2. Però questa conclusione è errata, perché non abbiamo tenuto conto del fatto che i valori IRF delle baselines dei due soggetti sono diversi tra loro. Se effettuassimo un confronto ANOVA tra i due soggetti utilizzando questi valori IRF assoluti, la variazione della baseline da un soggetto all’altro aggiungerebbe artificialmente varianza all’analisi. Una più elevata varianza potrebbe portare ad errori nell’interpretazione dei dati e questa ovviamente sarebbe una cosa negativa. Dobbiamo allora eliminare questa differenza tra i valori IRF delle baselines dei diversi soggetti “normalizzando”, cioè standardizzando in qualche modo tali valori, in modo da poter effettuare un confronto attendibile tra i diversi soggetti. Un modo per fare questo è calcolare la variazione percentuale del segnale BOLD rispetto alla baseline cioè, invece di considerare differenze assolute tra valori IRF come abbiamo fatto nel precedente esempio, possiamo cercare la variazione percentuale dei valori IRF tra una condizione baseline (di riposo) ed una condizione di presentazione ai vari soggetti di uno stimolo sperimentale. In pratica cerchiamo quanto varia (aumenta o diminuisce) in percentuale (per esempio dell’1%, del 5% o del 10%) il valore IRF del segnale BOLD con la presentazione della condizione di stimolo rispetto alla condizione di riposo (baseline). La variazione percentuale del segnale BOLD rispetto alla baseline viene calcolata per ogni soggetto, per ogni voxel di ogni volume cerebrale e tutti questi valori relativi di variazione percentuale vanno a sostituire i precedenti valori assoluti, nel senso che saranno utilizzati per entrambe le successive analisi di deconvoluzione e confronti ANOVA di gruppo. La normalizzazione dei dati fMRI, cioè il calcolo della variazione percentuale del segnale BOLD rispetto alla baseline viene effettuato per ogni soggetto utilizzando la seguente formula: A (2.1) percent signal change = ⋅ 100 % B dove: A = valore IRF dello stimolo; B = valore IRF della baseline. In questo modo la baseline viene normalizzata (riscalata) al valore 100 per tutti i soggetti. Calcoliamo ora la variazione percentuale del segnale BOLD rispetto alla baseline per i due soggetti del precedente esempio: [email protected] 10 • soggetto 1: A = 1050; B = 1000; si ha: 1050 percent signal change = ⋅ 100 % = 105 % 1000 e dato che la baseline è stata normalizzata al valore 100 per entrambi i soggetti, una variazione percentuale del segnale BOLD del 105 % significa un aumento del valore IRF del (105 – 100 =) 5 % rispetto alla baseline; • soggetto 2: A = 525; B = 500; si ha: 525 percent signal change = ⋅ 100 % = 105 % 500 e la solita variazione percentuale del segnale BOLD del 105 % significa di nuovo un aumento del valore IRF del 5 % rispetto alla baseline. Questi risultati mostrano che, nell’esempio considerato, la variazione percentuale dei valori IRF del segnale BOLD tra la condizione baseline (di riposo) e la condizione di presentazione dello stimolo è identica per entrambi i soggetti; tale variazione è un aumento del valore IRF del 5 % rispetto alla baseline in entrambi i casi. Possiamo allora concludere che, sebbene le differenze assolute tra i valori IRF diano l’impressione che il soggetto 1 abbia mostrato, in risposta alla condizione di stimolo, un’attivazione doppia rispetto a quella mostrata dal soggetto 2, questa impressione è sbagliata. Infatti in realtà, come abbiamo appena visto, entrambi i soggetti hanno mostrato, in risposta alla condizione di stimolo rispetto alla condizione baseline, un aumento del valore IRF del 5 % nell’attivazione cerebrale dell’ippocampo. In altre parole non c’è differenza significativa, in risposta alla presentazione dello stimolo, nella variazione percentuale del segnale BOLD tra questi due soggetti. Questo esempio fa capire in maniera adeguata l’importanza e la necessità della normalizzazione dei dati fMRI, in preparazione di un’analisi di gruppo, che prevede confronti statistici tra soggetti diversi. La normalizzazione dei dati fMRI prevede una procedura che si articola in due passi successivi, che verranno di seguito descritti in dettaglio. 6.1 Calcolo dell’intensità media relativa alla condizione di riposo (baseline) di ogni voxel dei datasets funzionali Si utilizza il programma “3dTstat” di AFNI per calcolare il valore dell’intensità media relativa alla condizione di riposo (baseline) di ogni voxel, cioè di ogni serie temporale, di un 3D+time dataset funzionale (run) di un soggetto. In pratica per ogni voxel vengono sommate le intensità di tutti gli istanti della corrispondente serie temporale relativi alla condizione di riposo ed il risultato viene diviso per il numero totale di tali istanti temporali. Si ottiene come risultato un nuovo dataset formato da un unico volume cerebrale (sub-brick), i valori dei cui voxels rappresentano le intensità medie relative alla condizione di riposo di tutte le serie temporali del dataset d’ingresso, corrispondenti al run considerato. Si ripete poi questo calcolo per tutti i runs del soggetto considerato e poi per tutti i soggetti. Nella Figura 5 a sinistra è rappresentata l’immagine di una fetta assiale di un 3D+time dataset funzionale (run) di un soggetto; a destra in alto si ha una matrice 3x3 che si riferisce a tale dataset e che contiene i 9 grafici relativi all’andamento delle serie temporali dei 9 voxels evidenziati nella fetta assiale con il quadrato verde. A destra in basso si ha ancora una matrice 3x3 che però si riferisce al dataset prodotto dal programma “3dTstat” e che contiene i 9 valori dell’intensità media relativa alla condizione di riposo calcolata per le serie temporali relative ai soliti 9 voxels evidenziati nella fetta assiale con il quadrato verde. Per esempio per il voxel centrale della matrice, evidenziato in giallo, il valore dell’intensità media relativa alla condizione di riposo della corrispondente serie temporale, calcolato come detto sopra, è: 1523.346. Si nota che nella matrice a destra in basso non ci sono grafici, cioè andamenti di serie temporali, perché tale matrice è relativa al dataset prodotto dal programma “3dTstat” che, come si è detto sopra, è formato da un unico [email protected] 11 volume cerebrale (sub-brick), perciò i suoi voxels non si riferiscono a serie temporali, ma a singoli valori numerici di intensità media relativi alla condizione di riposo. Figura 5 Sinistra: rappresentazione di una fetta assiale di un 3D+time dataset funzionale; destra in alto: matrice 3x3 che si riferisce a tale dataset e che contiene i 9 grafici relativi all’andamento delle serie temporali dei 9 voxels evidenziati nella fetta assiale con il quadrato verde; destra in basso: matrice 3x3 che si riferisce al dataset prodotto dal programma “3dTstat” e che contiene i 9 valori dell’intensità media relativa alla condizione di riposo calcolata per le serie temporali relative ai soliti 9 voxels evidenziati nella fetta assiale con il quadrato verde. Il valore dell’intensità media relativa alla condizione di riposo di ogni serie temporale (voxel) ci serve nel calcolo della variazione percentuale del segnale BOLD, perché rappresenta la baseline di tale serie temporale, cioè il valore da assegnare al parametro B che compare nell’equazione (2.1). Se non diversamente specificato, il programma “3dTstat” esegue per default il calcolo della media voxel per voxel di tutte le serie temporali del 3D+time dataset d’ingresso. Per questo motivo non è necessario inserire l’opzione –mean nella linea di comando del programma. In realtà il programma “3dTstat” può calcolare anche altre statistiche, sempre voxel per voxel come sopra specificato, oltre alla media; per esempio può calcolare la deviazione standard, il coefficiente di correlazione, la mediana, il minimo, il massimo e altre ancora. 6.2 Calcolo della variazione percentuale del segnale BOLD Si utilizza il programma “3dcalc” di AFNI, che esegue operazioni aritmetiche voxel per voxel su 3D+time datasets funzionali. Noi lo utilizziamo per normalizzare i dati fMRI, cioè per calcolare la variazione percentuale del segnale BOLD rispetto alla baseline. Utilizziamo per questo l’equazione (2.1), che riscriviamo qui per comodità: [email protected] 12 A percent signal change = ⋅ 100 % B Nel nostro caso A, cioè il valore IRF dello stimolo, è rappresentato dai valori dei singoli voxels, cioè dalle serie temporali dei 3D+time datasets ricostruiti, shiftati nel tempo, registrati volumetricamente e filtrati nello spazio. Invece B, cioè il valore IRF della baseline, è rappresentato dai valori dei singoli voxels dei datasets prodotti dal programma “3dTstat”, cioè dai valori delle intensità medie relative alla condizione di riposo di tutte le serie temporali dei 3D+time datasets d’ingresso. In pratica il programma “3dcalc”, per ogni voxel di un 3D+time dataset d’ingresso, deve prendere tutti i valori di intensità corrispondenti ai vari istanti della relativa serie temporale (valori di A), dividere ciascuno di essi per il valore dell’intensità media relativa alla condizione di riposo di quella serie temporale (valore di B calcolato in precedenza dal programma “3dTstat”) e moltiplicare i valori ottenuti per 100, per ottenere la variazione percentuale del segnale BOLD in corrispondenza dei vari istanti della serie temporale (voxel) considerata. Facendo tutto questo per tutti i voxels del 3D+time dataset d’ingresso, il programma “3dcalc” produce come risultato un nuovo 3D+time dataset normalizzato, relativo al run considerato del soggetto in esame e nel quale, rispetto al 3D+time dataset d’ingresso, in corrispondenza di ogni voxel ed in corrispondenza di ogni istante della relativa serie temporale, il valore assoluto di intensità del segnale BOLD è stato sostituito con il corrispondente valore relativo di variazione percentuale del segnale stesso rispetto alla baseline, che è stata normalizzata (riscalata) al valore 100 per tutte le serie temporali del run considerato. In realtà il programma “3dcalc” provvede anche a moltiplicare il secondo membro della precedente equazione per il valore di clip ricavato dall’esecuzione del programma “3dClipLevel” oppure per la maschera generata dal programma “3dAutomask”. In questo modo la variazione percentuale del segnale BOLD viene calcolata solamente in corrispondenza di quei voxels che hanno valori di intensità superiori al valore di clip oppure che appartengono alla maschera (in pratica viene calcolata solamente in corrispondenza dei voxels del cervello) e non viene calcolata per i voxels appartenenti allo sfondo. Nella Figura 6 a sinistra è rappresentata l’immagine di una fetta assiale del 3D+time dataset normalizzato, prodotto come risultato dal programma “3dcalc”, relativo al run considerato del soggetto in esame; a destra si ha una matrice 3x3 che si riferisce a tale dataset e che contiene i 9 grafici relativi all’andamento delle serie temporali dei 9 voxels evidenziati nella fetta assiale con il quadrato verde. Consideriamo per esempio il voxel centrale della matrice, evidenziato in giallo: il grafico si riferisce alla corrispondente serie temporale ed i valori assunti da tale grafico nei vari istanti di tempo sono valori normalizzati, cioè sono variazioni percentuali del segnale BOLD rispetto alla baseline. In tale grafico è stato evidenziato l’istante di tempo: 18 con un puntino rosso (vedi la freccia 1); tale istante di tempo è indicato anche dall’indice sotto la matrice (vedi la freccia 2). Dato che la baseline è stata normalizzata al valore 100 per tutte le serie temporali del dataset, il valore della variazione percentuale del segnale BOLD: 101.7501 % scritto nell’indice sotto la matrice (vedi ancora la freccia 2) in realtà indica che la presentazione dello stimolo (ed anche del rumore) ha provocato, nel voxel considerato ed all’istante di tempo fissato, un aumento percentuale del segnale BOLD dell’ 1.7501 % rispetto alla baseline. La freccia 3 indica i valori assunti dalle tre coordinate spaziali (x, y, z) in corrispondenza del voxel considerato che, si ricorda, è quello centrale della matrice, evidenziato in giallo. Tale voxel ovviamente corrisponde anche al voxel centrale nel quadrato verde della fetta assiale riportata nella parte sinistra della figura. [email protected] 13 1 3 Figura 6 2 Sinistra: rappresentazione di una fetta assiale del 3D+time dataset normalizzato, prodotto come risultato dal programma “3dcalc”; destra: matrice 3x3 che si riferisce a tale dataset e che contiene i 9 grafici relativi all’andamento delle serie temporali dei 9 voxels evidenziati nella fetta assiale con il quadrato verde; in tali grafici i valori assunti nei vari istanti di tempo sono valori normalizzati, cioè sono variazioni percentuali del segnale BOLD rispetto alla baseline. Le varie grandezze indicate dalle tre frecce sono descritte nel testo. 7. Concatenamento dei runs Si utilizza il programma “3dTcat” di AFNI per concatenare (cioè combinare) tra loro i subbricks (volumi cerebrali) di vari 3D+time EPI datasets (runs) d’ingresso; si ottiene come risultato un unico “lungo” 3D+time dataset. Il numero di sub-bricks (o volumi cerebrali o istanti successivi delle serie temporali) di cui è formato il dataset concatenato, prodotto dall’esecuzione del programma “3dTcat”, è dato dalla somma del numero dei sub-bricks di cui sono formati tutti i singoli datasets d’ingresso. Quando si concatenano tra loro vari runs d’ingresso, si possono specificare, in ciascun run, quali sono i sub-bricks (istanti temporali) che vogliamo escludere dal concatenamento e perciò dalle successive analisi. Di solito, come già detto in precedenza, vengono rimossi i primi istanti dalle serie temporali di tutti i runs acquisiti, perché affetti da molto rumore, causati da possibili artefatti dello scanner. 8. Analisi di regressione lineare multipla Normalmente negli studi fMRI si misurano le variazioni del segnale BOLD provocate da una risposta emodinamica, indotta dalla variazione di attività neuronale-sinaptica in un determinato distretto cerebrale; tale variazione rappresenta la risposta del cervello ad una particolare condizione di stimolo, variabile nel tempo. Indichiamo con f(t) l’andamento temporale dello stimolo e con y(t) la variazione misurata del segnale BOLD proveniente dal distretto cerebrale considerato, provocata dall’applicazione dello stimolo f(t). Tutto questo può essere rappresentato schematicamente nel seguente modo: [email protected] 14 In generale il sistema considerato può essere comunque complesso, possiamo non sapere come esso è fatto internamente, ma se tale sistema è lineare e stazionario, la sua risposta y(t) ad un arbitrario segnale d’ingresso f(t) può essere ricavata, se si conosce la risposta h(t) di tale sistema ad un segnale impulsivo (chiamato anche funzione delta di Dirac) δ(t) applicato al suo ingresso: La funzione h(t) è chiamata risposta impulsiva del sistema considerato. Possiamo allora scrivere: y(t ) = ∫ f (τ) ⋅ h (t − τ ) ⋅ dτ ≡ f (t ) ⊗ h (t ) +∞ −∞ Questo è chiamato integrale di convoluzione tra le due funzioni: f(t) ed h(t). Supponiamo ora che il sistema sia causale, cioè che il segnale d’uscita y(t) all’istante t 0 sia determinato solo dai valori del segnale d’ingresso f(t) per t ≤ t 0 e non da quelli per t > t 0 . Se supponiamo anche che sia f (t ) = 0 per t < 0 , allora il precedente integrale di convoluzione diventa: y(t ) = ∫ f (τ) ⋅ h (t − τ ) ⋅ dτ t 0 Dato che il tempo è misurato ad istanti discreti, tutte le precedenti funzioni in realtà sono discrete. Per esempio: y(t) diventa: y(n ⋅ ∆t ) , dove: “n” è la variabile temporale e ∆t = TR è il tempo di ripetizione. Supponiamo che sia: ∆t = 1 , perciò: y(n ⋅ ∆t ) = y(n ) ; per semplicità di notazione indichiamo: y(n) con: yn. Allora il precedente integrale di convoluzione diventa una sommatoria e, ponendo: t → n; τ → m , la precedente espressione di y(t) diventa, nel dominio del tempo discreto: n n m=0 m =0 yn = ∑ f m ⋅ h n −m = ∑ h m ⋅ fn −m Di solito la risposta impulsiva hm di un sistema, oltre ad essere nulla per m<0, si annulla anche per m>p: supponiamo cioè che hm sia diversa da zero solamente in corrispondenza dei (p+1) istanti temporali: h 0 , h1 , K , h p . In questo caso la risposta yn del sistema allo stimolo fn diventa: p y n = ∑ h m ⋅ f n − m = h 0f n + h1f n −1 + K + h pf n − p (2.2) m=0 yn risulta diversa da zero solamente nell’intervallo n ≥ p , con p fissato. Come abbiamo detto sopra, yn è la variazione misurata del segnale BOLD proveniente dal distretto cerebrale considerato, provocata dall’applicazione dello stimolo fn. La funzione fn è una serie temporale che vale 0 negli istanti di tempo “n” in cui lo stimolo non viene presentato al soggetto e vale 1 negli istanti di tempo in cui lo stimolo viene presentato. La classe di metodi maggiormente usata per effettuare l’analisi statistica dei dati delle serie temporali contenute nei 3D+time datasets fMRI e che permette la determinazione dei voxels “attivi” nelle immagini relative a tali serie temporali, è basata sulla creazione di un modello ideale che, in base allo stimolo applicato fn e alla risposta emodinamica hm (HRF = “Hemodynamic Response Function”), fornisce l’andamento ideale (“di riferimento”) yn del segnale BOLD che ci si aspetta di ricevere da una determinata regione cerebrale attiva dal punto di vista neuronalesinaptico. Come abbiamo visto sopra, yn è dato dalla convoluzione (discreta) tra lo stimolo fn e la risposta emodinamica hm. Viene eseguito un “fitting” della risposta yn del modello ideale ai dati reali Zn, per tutti i voxels (serie temporali) del 3D+time dataset fMRI considerato e quei voxels per i quali il fitting ha una significatività statistica superiore ad un certo valore di soglia fissato, sono dichiarati attivi. [email protected] 15 Chiaramente la risposta yn del modello ideale non coincide con i dati reali Zn a causa del rumore, sempre presente nel segnale BOLD che si misura; supponendo che il rumore: “εn” sia Gaussiano bianco (ipotesi giustificata dal fatto che è richiesta, in fase di pre-processing dei dati, un’operazione di filtraggio spaziale (smoothing) Gaussiano), additivo, incorrelato con il segnale BOLD e a valor medio nullo, si può scrivere: Zn = y n + ε n Zn, come yn, risulta diversa da zero solamente nell’intervallo n ≥ p . Spesso i dati fMRI misurati: Zn vengono modellizzati, oltre che dal modello ideale del segnale BOLD: yn e dal rumore: εn, anche da una costante: β0 e da un trend lineare: β1 ⋅ n : Zn = β0 + β1 ⋅ n + y n + ε n (2.3) In questa espressione di Zn, la parte: β0 + β1 ⋅ n + ε n è chiamata: modello del rumore o “baseline model”; yn come abbiamo detto è il modello ideale del segnale BOLD; β0 + β1 ⋅ n + y n + ε n è chiamato: modello del segnale + rumore o “full model”. Sostituendo l’espressione (2.2) di yn nella precedente espressione di Zn si ottiene: Zn = β0 + β1n + h 0f n + h1f n −1 + K + h pf n − p + ε n Questa espressione è valida per: n = p, p+1 , … , N-1, dove N è il numero di istanti da cui sono formate le serie temporali del 3D+time dataset fMRI considerato. La precedente equazione può essere posta in forma matriciale: Z = X ⋅β + ε dove: β0 p fp K f0 1 Zp εp β 1 1 p + 1 f Z ε K f1 p +1 p +1 Z= , X= , ε = p +1 β = h 0 , M M M M M M M M 1 N − 1 f N −1 K f N − p −1 Z N −1 ε N −1 h p Risolvere il problema di regressione lineare multipla significa trovare una stima b del vettore β dei parametri incogniti: βˆ 0 ˆ β1 b = βˆ = ĥ 0 M ĥ p In pratica, dato lo stimolo applicato fn e i dati fMRI misurati: Zn, bisogna ricavare una stima dei valori dei p+3 parametri incogniti del vettore β, tali che con essi la risposta yn del modello ideale costituisce un buon “fitting” (approssimazione) dei dati reali Zn. In questo modo otteniamo una stima Ẑ dei dati reali Z: Ẑ = X ⋅ βˆ = X ⋅ b Il criterio usato normalmente per stimare i valori dei parametri incogniti (cioè per determinare il vettore b), è di minimizzare la somma dei quadrati degli errori (scarti, differenze) tra i dati stimati Ẑ e i dati reali Z. Tale somma è indicata con SSE (dall’Inglese: error sum of squares) e la sua espressione è: N −1 ( ) ( ) ( SSE = ∑ Zn − Ẑn = Z − Ẑ ⋅ Z − Ẑ n =p 2 T ) si può dimostrare che: [email protected] 16 ( ) −1 b = X T ⋅ X ⋅ X T ⋅ Z = βˆ Gli elementi del vettore b rappresentano la stima, secondo il metodo della somma dei minimi quadrati, dei valori dei parametri incogniti contenuti nel vettore β. Si nota che con questo metodo si trova una stima ĥ m dei valori della risposta emodinamica hm, con: m = 0 , …, p. Questa è chiamata analisi di deconvoluzione; a noi interessa fare invece un’analisi di regressione lineare, nella quale la risposta emodinamica h(t) (notare che abbiamo di nuovo usato la notazione relativa al dominio del tempo continuo) è fissata a priori. La scelta della funzione h(t) viene fatta senza tenere in considerazione il valore del TR o la temporizzazione dello stimolo f(t); h(t) è una funzione universale che riproduce approssimativamente le caratteristiche della reale risposta emodinamica del cervello ad un singolo stimolo di durata temporale molto breve, minore di 1 sec (l’analogo reale del segnale impulsivo δ(t), che è solo ideale). Nella Figura 7 è mostrato l’andamento grafico della funzione h(t) (curva nera), in risposta ad uno stimolo molto breve (curva rossa). Figura 7 Andamento grafico della risposta emodinamica h(t) del cervello (curva nera) ad un singolo stimolo di durata temporale molto breve, minore di 1 sec (curva rossa). Di solito si sceglie la funzione: 0 h (t ) = t b ⋅ e − t c per t < 0 per t > 0 dove: b = 8.6; c = 0.547 sec (Cohen, 1977). Come si vede dal grafico della Figura 7, la risposta emodinamica h(t) ha un ritardo temporale, rispetto allo stimolo, di 1-2 secondi, un tempo di salita di 4-5 secondi ed un tempo di discesa di 4-6 secondi. Quando vengono presentati più stimoli successivi, tra loro più vicini nel tempo della durata delle singole risposte emodinamiche h(t), alcune parti di tali funzioni risultano sovrapposte. Supponiamo che il nostro modello ideale del cervello sia lineare: la risposta emodinamica [email protected] 17 complessiva ai vari stimoli presentati è data dalla somma delle risposte emodinamiche ai singoli stimoli, come è mostrato nella Figura 8. Figura 8 Linearità della risposta emodinamica: andamento grafico della risposta emodinamica complessiva (curva blu) a tre brevi stimoli successivi; le parti delle tre risposte emodinamiche ai tre stimoli (curve: nera, rossa, verde) che risultano tra loro sovrapposte si sommano. Il network neuronale del cervello può essere rappresentato con un sistema non lineare e di conseguenza anche la risposta emodinamica misurata con l’fMRI probabilmente è non lineare. Tuttavia il modello lineare, anche se non perfettamente corretto, è molto utile e largamente utilizzato per il “fitting” dei dati delle serie temporali dei 3D+time datasets fMRI. Ricordiamo che la risposta yn del modello ideale è data dalla convoluzione (discreta) tra lo stimolo presentato fn e la risposta emodinamica hm: questa convoluzione può essere calcolata utilizzando per esempio il programma “waver” di AFNI. Riscriviamo la (2.3) cambiando il nome dei parametri del baseline model e ponendo y n = β ⋅ rn : Zn = a + b ⋅ n + β ⋅ rn + ε n Dato che la risposta emodinamica hm è fissata, perciò nota, si hanno solo 3 parametri incogniti: a, b, β, il valore dei quali deve essere calcolato in tutti i voxels del dataset fMRI considerato. I due parametri: a, b del baseline model non interessano nell’analisi; interessa invece il valore del parametro β, che rappresenta l’ampiezza della risposta rn del modello ideale (segnale BOLD che ci si aspetta di ricevere) nel “fitting” dei dati reali Zn (segnale BOLD che effettivamente si riceve e si misura). In altre parole il valore di β ci dice quale percentuale del segnale BOLD ricevuto (relativo ai dati reali Zn) è “spiegato” da rn, cioè è una risposta alla presentazione dello stimolo fn. Il parametro β è detto coefficiente di regressione lineare o β-weight, mentre la funzione rn è detta “regressore” dello stimolo fn. [email protected] 18 Finora abbiamo considerato il caso in cui si ha un solo stimolo d’ingresso (fn): si parla di analisi di regressione lineare semplice; se si ha più di uno stimolo d’ingresso: f ni , con: i = 1, 2, … , si parla di analisi di regressione lineare multipla. In questo caso si ha una diversa risposta rni del modello ideale per ogni diverso stimolo d’ingresso: f ni . Supponiamo per esempio che siano presenti 3 diversi stimoli d’ingresso: f n1 , f n2 , f n3 ; calcolando la convoluzione (discreta) di questi 3 stimoli d’ingresso con la risposta emodinamica hm fissata, si trovano le 3 diverse risposte: rn1 , rn2 , rn3 del modello ideale a tali 3 stimoli d’ingresso. La precedente espressione di Zn può allora essere riscritta nella forma più generale: Zn = a + b ⋅ n + c ⋅ n 2 + β1 ⋅ rn1 + β2 ⋅ rn2 + β3 ⋅ rn3 + ε n nella quale, come appare evidente, nel baseline model abbiamo inserito anche un trend parabolico: c ⋅ n 2 . Si nota che il modello ideale del segnale BOLD: β1 ⋅ rn1 + β2 ⋅ rn2 + β3 ⋅ rn3 è una combinazione lineare delle 3 risposte rni del modello ideale ai 3 stimoli d’ingresso: f ni , con: i = 1, 2, 3. Ora si hanno 6 parametri incogniti: a, b, c, β1, β2, β3, il valore dei quali deve essere calcolato in tutti i voxels del dataset fMRI considerato. Analogamente al caso della regressione lineare semplice, mentre i tre parametri: a, b, c del baseline model non interessano nell’analisi, interessa il valore dei tre parametri (coefficienti di regressione lineare): βi (i = 1, 2, 3); essi rappresentano l’ampiezza della risposta rni del modello ideale nel “fitting” dei dati reali Zn. Cioè il valore di βi ci dice quale percentuale del segnale BOLD ricevuto (relativo ai dati reali Zn) è “spiegato” dal regressore rni , cioè è una risposta alla presentazione dello stimolo f ni . La Figura 9 mostra un esempio in cui sono presenti 2 diversi stimoli d’ingresso: f1 (t ) , f 2 (t ) ; calcolando la convoluzione (notare che ora siamo nel dominio del tempo continuo) di questi 2 stimoli d’ingresso con la risposta emodinamica h(t) fissata, si trovano le 2 diverse risposte: r1 (t ) , r2 (t ) (curve rossa e verde rispettivamente) del modello ideale a tali 2 stimoli d’ingresso. Non considerando il baseline model, bisogna trovare il valore dei 2 parametri incogniti: β1, β2 con i quali il modello ideale del segnale BOLD: β1 ⋅ r1 (t ) + β2 ⋅ r2 (t ) (curva blu) costituisce, per tutti i voxels (serie temporali) del 3D+time dataset fMRI considerato, il fitting migliore dei dati reali Z(t) (curva grigia). In questo esempio si sono trovati i due valori: β1 = 1.5, β2 = 0.6. [email protected] 19 Figura 9 Esempio grafico in cui sono presenti le 2 diverse risposte: r1(t), r2(t) (curve rossa e verde rispettivamente) del modello ideale ai 2 diversi stimoli d’ingresso: f1(t), f2(t). I valori dei 2 parametri incogniti: β1, β2 con i quali il modello ideale del segnale BOLD: β1 ⋅ r1 t + β2 ⋅ r2 t (curva blu) costituisce, per tutti i voxels (serie temporali) del 3D+time dataset fMRI considerato, il fitting migliore dei dati reali Z(t) (curva grigia), sono: β1 = 1.5, β2 = 0.6. () () Si utilizza il programma “3dDeconvolve” di AFNI per effettuare un’analisi statistica di regressione lineare multipla delle serie temporali contenute nei 3D+time datasets fMRI. Bisogna fornire in ingresso al programma: a) i dati reali Zn (segnale BOLD che effettivamente si riceve e si misura) per tutti i voxels (serie temporali) del 3D+time dataset fMRI considerato; b) una diversa risposta rni del modello ideale per ogni diverso stimolo d’ingresso: f ni . Le funzioni ideali di riferimento rni (regressori), come pure le corrispondenti funzioni f ni , sono serie temporali. Il programma restituisce in uscita un dataset contenente le stime, secondo il metodo della somma dei minimi quadrati, dei valori dei coefficienti di regressione lineare βi. Viene calcolato, per ogni coefficiente βi, il relativo valore stimato in corrispondenza di ogni voxel del dataset fMRI d’ingresso. Il programma calcola anche i valori delle statistiche-t per la significatività dei singoli coefficienti βi, delle statistiche-F parziali per la significatività dei singoli stimoli d’ingresso e della statistica-F per la significatività della regressione lineare multipla globale. Quei voxels per i quali è soddisfatta la condizione: β i ≠ 0 con una significatività statistica superiore ad un certo valore di [email protected] 20 soglia fissato, sono dichiarati essere attivi quando al soggetto viene presentato lo stimolo d’ingresso f ni , rispetto alla condizione di riposo. Si possono anche effettuare dei GLT (general linear tests) sui coefficienti di regressione βi o su combinazioni lineari di essi. Per esempio si può fare un test per valutare la differenza statistica (“contrasto”): βi − β j ≠ 0 , che ci permette di vedere quali voxels hanno differenti livelli di attivazione in risposta ai due diversi stimoli d’ingresso: f ni , f nj . Quei voxels per i quali la precedente condizione è soddisfatta con una significatività statistica superiore ad un certo valore di soglia fissato, sono dichiarati essere più attivi (cioè ad essi corrisponde una maggiore variazione del segnale BOLD ricevuto) quando al soggetto viene presentato lo stimolo d’ingresso f ni , rispetto a quando gli viene presentato lo stimolo f nj . Gli artefatti dovuti al movimento della testa del soggetto possono rimanere anche dopo la registrazione dei volumi cerebrali, per esempio a causa di errori nella registrazione stessa o di disomogeneità nel campo magnetico statico. In questi casi tali artefatti residui possono essere rimossi, almeno in parte, inserendo, nella linea di comando del programma “3dDeconvolve”, i valori stimati dal programma “3dvolreg” dei parametri di movimento come termini aggiuntivi del baseline model. Come abbiamo visto, i parametri di movimento sono delle funzioni del tempo, cioè sono delle serie temporali, che nell’analisi di regressione lineare multipla sono considerate come regressori “di non interesse”. 9. Creazione dei regressori per gli stimoli d’ingresso Ricordiamo che la risposta rni del modello ideale è data dalla convoluzione (discreta) tra lo stimolo presentato f ni e la risposta emodinamica hm: questo per ogni valore di i = 1, 2, … , cioè per ogni stimolo d’ingresso. Si utilizza il programma “waver” di AFNI per calcolare questa convoluzione; tale programma infatti crea un file, contenente una serie temporale con una forma d’onda ideale, che nel nostro caso è la funzione ideale di riferimento rni (regressore dello stimolo f ni ). Ricordiamo anche che in generale la funzione f ni è una serie temporale che vale 0 negli istanti di tempo “n” in cui lo stimolo non viene presentato al soggetto e vale 1 negli istanti di tempo in cui lo stimolo viene presentato. Bisogna fornire al programma sia lo stimolo d’ingresso f ni che la particolare risposta emodinamica hm che vogliamo utilizzare; il programma calcola la convoluzione (discreta) tra f ni ed hm e produce la funzione ideale di riferimento d’uscita rni . [email protected] 21