Table of Contents
Calibrar FBB con los datos de GAAIN
Introduccion
La conversion a Centiloide a partir de SUVR esta descrita en Rowe et.al..
Aquí utlizaremos los mismos datos e intentaremos alcanzar los mismos valores de SUVR. Dicho de otro modo, calibraremos el metod de calculo de SUVR con los datos y resultados de GAAIN Centiloid Project.
Material y metodos
Para hacer la calibración necesitamos tres cosas,
- Las imagenes originales, tanto de controles jovenes como de sujetos mayores con alto nivel de amiloide.
- Las mascaras a aplicar, en espacio MNI, tanto del cortex como de la region de referencia.
- Los valores de SUVR calculados en Rowe et.al.
Todo puede descargarse de la pagina de GAAIN.
Registro
El primer paso es registrar las imagenes PET-FBB a espacio T1.
${ANTS_PATH}/antsRegistrationSyNQuick.sh -d 3 -f working/0001_struc.nii.gz -m bids/sub-0001/pet/sub-0001_single_fbb.nii.gz -t s -o 0001_movingToFixed_ ${ANTS_PATH}/antsApplyTransforms -d 3 -r working/0001_struc.nii.gz -i bids/sub-0001/pet/sub-0001_single_fbb.nii.gz -t 0001_movingToFixed_0GenericAffine.mat -t 0001_movingToFixed_1Warp.nii.gz -o 0001_fbb.nii.gz
El script correspodiente dentro del pipeline debe tener en cuenta que puede haber mas de una imagen
El segundo paso es registrar de espacio nativo a MNI,
ANTS 3 -m CC[${FSLDIR}/data/standard/MNI152_T1_2mm.nii.gz, working/0001_struc.nii.gz, 1, 4] -r Gauss[0,3] -t Elast[1.5] -i 30x20x10 -o working/0001_fbb_t1_mni.nii.gz WarpImageMultiTransform 3 working/0001_fbb.nii.gz working/0001_fbb_mni.nii.gz -R ${FSLDIR}/data/standard/MNI152_T1_2mm.nii.gz working/0001_fbb_t1_mniWarp.nii.gz working/0001_fbb_t1_mniAffine.txt
Ahora, si superponemos las mascaras a la imagen FBB en espacio MNI ya podemos calcular el SUVR. Esto lo he hecho rapidito en Perl,
foreach my $subject (sort @subjects){ my $fbb = $w_dir.'/'.$subject.'_fbb.nii.gz'; my $struct = $w_dir.'/'.$subject.'_struc.nii.gz'; if (-e $fbb && -e $struct){ # Apply masks to FBB my $roi_mask = $roi_paths.$ctx_roi; my $order = "fslstats ".$w_dir."/".$subject."_fbb_mni -k ".$roi_mask." -M"; print "$order\n"; my $ctx = qx/$order/; $roi_mask = $roi_paths.$ref_roi; $order = "fslstats ".$w_dir."/".$subject."_fbb_mni -k ".$roi_mask." -M"; print "$order\n"; my $norm = qx/$order/; if ($norm > 0) { my $mean = $ctx/$norm; print OF "$subject"; print OF ";$mean"; print OF ";", centiloid_fbb($mean); print OF "\n"; } } } close OF;
Resultados
Ahora solo tendriamos que unirlos resultados y compararlos
> ref <- read.csv("reference_cl.csv", sep=";", header=TRUE) > cl <- read.csv("centiloid_fbb_cl_link.csv", sep=";", header=TRUE) > ctest <- merge(cl, ref, by="PSubject") > a <- lm(ctest$SUVR ~ ctest$WC_suvr) > summary(a) Call: lm(formula = ctest$SUVR ~ ctest$WC_suvr) Residuals: Min 1Q Median 3Q Max -0.089356 -0.027784 -0.007222 0.026046 0.132218 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.04538 0.03235 1.403 0.17 ctest$WC_suvr 0.96789 0.02381 40.648 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.0505 on 32 degrees of freedom Multiple R-squared: 0.981, Adjusted R-squared: 0.9804 F-statistic: 1652 on 1 and 32 DF, p-value: < 2.2e-16 > plot(ctest$WC_suvr, ctest$SUVR, xlab = "SUVR GAAIN", ylab = "SUVR ACE", main = "Calibracion GAAIN", sub = "Adjusted R-squared: 0.9804, 0.96789 x + 0.04538") > lines(ctest$WC_suvr, fitted(a), col="blue") > lines(ctest$WC_suvr, ctest$WC_suvr, col="red")
Nota: La linea roja indica cual seria el ajuste perfecto. La linea azul el ajuste que se ha alcanzado
Conclusiones
- Los valores de SUVR muestran que nuestro metodo de calculo funciona correctamente con un $R^2 =0.98$.
- Se ha alcanzado un ajuste ($SUVR_{ACE} = 0.96789 SUVR_{ref} + 0.04538$) muy bueno de los datos, aunque puede que para valores alejados de la media de SUVR nuestros valores sean ligeramente distintos a los calculados por el metodo citado en la literatura.
Apendice: Registro alternativo
Ocurre que los registro pueden fallar. Alternativamente pueden registrarse los FBB utlizando la forma “antigua” de ANTs.
${ANTS_PATH}/ANTS 3 -m CC[${wdir}/${id}_struc.nii.gz, ${src}, 1, 4] -r Gauss[0,3] -t Elast[1.5] -i 30x20x10 -o ${td}/${id}_movingToFixed_ sleep 2 # Est es para que no falle porque el NAS es una puta mierda ${ANTS_PATH}/WarpImageMultiTransform 3 ${src} ${wdir}/${id}_fbb.nii.gz -R ${wdir}/${id}_struc.nii.gz ${td}/${id}_movingToFixed_Warp.nii.gz ${td}/${id}_movingToFixed_Affine.txt
Esto se llama con,
$ fbb_correct.pl -alt -cut registros_fallidos.txt project_id
Apendice: Correcion de movimiento
Lo correcto seria: Registrar cada intervalo de 5min y tomar el AVG como la imagen definitiva, no volver a registrar.