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