Table of Contents
TBSS (proyecto BIOFACE)
tbss_1_preproc
[osotolongo@detritus bioface]$ mkdir bftbss [osotolongo@detritus bioface]$ cd bftbss/ [osotolongo@detritus bftbss]$ cp ../working/*FA* ./ [osotolongo@detritus bftbss]$ tbss_1_preproc *.nii.gz processing 0002_dti_FA processing 0003_dti_FA processing 0004_dti_FA processing 0005_dti_FA processing 0006_dti_FA ... ... ...
tbss_2_reg
[osotolongo@detritus bftbss]$ tbss_2_reg -T 0002_dti_FA_FA_to_target 0003_dti_FA_FA_to_target 0004_dti_FA_FA_to_target 0005_dti_FA_FA_to_target 0006_dti_FA_FA_to_target ... ... ...
tbss_3_postreg
[osotolongo@detritus bftbss]$ tbss_3_postreg -T using pre-chosen target for registration transforming all FA images into MNI152 space 0002_dti_FA_FA 0003_dti_FA_FA 0004_dti_FA_FA 0005_dti_FA_FA ... .... ...
tbss_4_prestats
[osotolongo@detritus bftbss]$ tbss_4_prestats 0.2 creating skeleton mask using threshold 0.2 creating skeleton distancemap (for use in projection search) projecting all FA data onto skeleton now run stats - for example: randomise -i all_FA_skeletonised -o tbss -m mean_FA_skeleton_mask -d design.mat -t design.con -n 500 --T2 -V (after generating design.mat and design.con)
Test con lenguaje
[osotolongo@detritus bftbss]$ head bioface_data.csv PSubject,Subject,Edad,Sexo,Estudios,FACEmem B001,0001,64,1,11,13 B002,0002,53,2,9,48 B003,0003,60,2,8,10 B004,0004,64,2,7,21 B005,0005,62,2,16,30 B006,0006,64,2,5,25 B007,0007,62,2,11,39 B008,0008,58,2,11,45 B009,0009,51,2,11,28 [osotolongo@detritus bftbss]$ grep -f subjects.list bioface_data.csv > sub_bioface_data.csv [osotolongo@detritus bftbss]$ head sub_bioface_data.csv B002,0002,53,2,9,48 B003,0003,60,2,8,10 B004,0004,64,2,7,21 B005,0005,62,2,16,30 B006,0006,64,2,5,25 B007,0007,62,2,11,39 B008,0008,58,2,11,45 B009,0009,51,2,11,28 B010,0010,62,2,6,17 B011,0011,54,2,16,67
Redo
[osotolongo@detritus bftbss]$ grep -v "`awk -F',' '{print $2}' sub_bioface_data.csv`" subjects.list 0032
Borro el 0032 de subjects.list, y
[osotolongo@detritus bftbss]$ for x in `cat subjects.list`; do cp ../working/${x}_dti_FA.nii.gz ./; done [osotolongo@detritus bftbss]$ awk -F"," '{print $3,$4,$5,$6}' sub_bioface_data.csv > comp_data.dat [osotolongo@detritus bftbss]$ head comp_data.dat 53 2 9 48 60 2 8 10 64 2 7 21 62 2 16 30 64 2 5 25 62 2 11 39 58 2 11 45 51 2 11 28 62 2 6 17 54 2 16 67 [osotolongo@detritus bftbss]$ Text2Vest comp_data.dat design.mat [osotolongo@detritus bftbss]$ head design.mat /NumWaves 4 /NumPoints 83 /Matrix 53 2 9 48 60 2 8 10 64 2 7 21 62 2 16 30 64 2 5 25 62 2 11 39 58 2 11 45 [osotolongo@detritus bftbss]$ cat model.con 0 0 0 1 0 0 0 -1 [osotolongo@detritus bftbss]$ Text2Vest model.con design.con [osotolongo@detritus bftbss]$ cat design.con /NumWaves 4 /NumPoints 2 /Matrix 0 0 0 1 0 0 0 -1
y repito todos los pasos.
[osotolongo@detritus bftbss]$ tbss_1_preproc *.nii.gz ... [osotolongo@detritus bftbss]$ tbss_2_reg -T ... [osotolongo@detritus bftbss]$ tbss_3_postreg -T ... [osotolongo@detritus bftbss]$ tbss_4_prestats 0.2 ...
Statistics
ahora ejecuto el randomise,
[osotolongo@detritus bftbss]$ randomise -i stats/all_FA_skeletonised.nii.gz -o bftbss -m stats/mean_FA_skeleton_mask -d design.mat -t design.con -n 1000 --T2 -V randomise options: -i stats/all_FA_skeletonised.nii.gz -o bftbss -m stats/mean_FA_skeleton_mask -d design.mat -t design.con -n 1000 --T2 -V Loading Data: Data loaded 4.97831e+111 permutations required for exhaustive test of t-test 1 Doing 1000 random permutations Starting permutation 1 (Unpermuted data) Starting permutation 2 Starting permutation 3 Starting permutation 4 Starting permutation 5 ... ... ...
Vamos a mirarlo,
[fsluser@FSLVm7_64 bftbss]$ fslview_deprecated /usr/local/fsl/data/standard/MNI152_T1_1mm stats/mean_FA_skeleton -l Green -b 0.2,0.7 bftbss_tfce_corrp_tstat1 -l Red-Yellow -b 0.95,1
y hacemos un tbss_fill,
[osotolongo@detritus bftbss]$ tbss_fill bftbss_tfce_corrp_tstat1 0.95 stats/mean_FA tbss_fill
para verlo mejor,
[fsluser@FSLVm7_64 bftbss]$ fslview_deprecated stats/mean_FA stats/mean_FA_skeleton -l Green -b 0.2,0.8 tbss_fill -l Red-Yellow -b 0.05,0.2
TBSS vs NP Composites
Lo primero es que tengo que tener los composites de NP hechos, esto de aqui: Sacando los Composite Scores de NP para BIOFACE.
Ahora he de unir estos composites con las variables demograficas que actuaran como covariables. En este caso, edad, sexo y educacion. Vamos a ver lo que tengo,
[osotolongo@brick03 tbss]$ cp ../ccs/bioface_composite_scores.csv ./ [osotolongo@brick03 tbss]$ head bioface_composite_scores.csv ,Attention.and.Working.Memory,Processing.speed.and.Executive.function,Language,Verbal.Learning.and.Memory,Praxis,Visual.gnosis B072,0.940383261534547,0.712149416119579,0.325607497357412,-0.550959332389243,0.421836370550401,0.445705493949369 B060,-0.200675612140164,0.605014438691104,0.325607497357412,0.546888909234256,-3.77634938935993,-0.906684675087603 B041,-1.34173448581487,-2.05628737448506,-1.98722088956859,-0.398317187495001,-1.64011037957474,-0.56858713282836 B051,0.374478120167295,0.963714319556467,0.325607497357412,-0.242472701174079,0.421836370550401,-1.13138977880836 B038,-0.191427021199958,0.588076018557911,0.325607497357412,-0.751279560842757,0.436694822482413,0.219960503550505 B052,1.51553699384201,0.966079684763052,0.0209050508660859,-0.167752799440297,0.421836370550401,0.670410597670127 B026,0.940383261534547,0.624957199529257,-1.07311355009461,-1.77280673001914,0.421836370550401,0.276136779480695 B040,0.940383261534547,0.716084275587973,0.325607497357412,0.429294436081222,0.421836370550401,0.670410597670127 B006,-1.34173448581487,0.416707414517106,0.0209050508660859,0.665373444688287,-1.68468573537077,0.0998024379954218 [osotolongo@brick03 tbss]$ head bioface_demog.csv Subject,Edad_visita,Sexo,Anyos_escolaridad B072,66,0,7 B060,59,1,12 B041,63,1,11 B051,61,1,9 B038,63,1,10 B052,62,1,9 B026,62,1,20 B040,62,1,17 B006,64,1,6
Uf! a editar un poco,
[osotolongo@brick03 tbss]$ sed -i 's/^,/PSubject,/' bioface_composite_scores.csv [osotolongo@brick03 tbss]$ sed -i 's/Subject/PSubject/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' bioface_demog.csv [osotolongo@brick03 tbss]$ (head -n 1 bioface_composite_scores.csv && tail -n +2 bioface_composite_scores.csv | sort -t, -k 1) > bioface_composite_scores_sorted.csv [osotolongo@brick03 tbss]$ (head -n 1 bioface_demog.csv && tail -n +2 bioface_demog.csv | sort -t, -k 1) > bioface_demog_sorted.csv [osotolongo@brick03 tbss]$ join -t, bioface_demog_sorted.csv bioface_composite_scores_sorted.csv > bioface_np_data.csv
y ahora me boy a buscar los codigos de neuroimagen,
[osotolongo@brick03 tbss]$ sed 's/;/,/g' ../bioface_mri.csv | sort -t, -k 2 > bioface_ni.csv [osotolongo@brick03 tbss]$ sed 's/;/,/g' ../bioface_mri.csv | sort -t, -k 2 | sed '1iSubject,PSubject' > bioface_ni.csv [osotolongo@brick03 tbss]$ join -t, -1 2 -2 1 bioface_ni.csv bioface_np_data.csv > bioface_data.csv [osotolongo@brick03 tbss]$ (head -n 1 bioface_data.csv && tail -n +2 bioface_data.csv | sort -t, -k 2) > bioface_data_sorted.csv
y me quedan los datos juntos y ordenados por el id de neuroimagen,
[osotolongo@brick03 tbss]$ head bioface_data_sorted.csv PSubject,Subject,Age,Gender,Education,Attention.and.Working.Memory,Processing.speed.and.Executive.function,Language,Verbal.Learning.and.Memory,Praxis,Visual.gnosis B001,0001,64,0,13,0.940383261534547,0.258400126101346,0.325607497357412,0.351372192920761,0.421836370550401,0.437899980254665 B002,0002,53,1,10,-0.766580753507416,-0.640726365145137,0.325607497357412,-0.506483590256652,-1.65496883150675,-0.680939684688739 B003,0003,60,1,8,-0.775829344447622,-1.92758435997598,-0.588499842116566,0.188411915334138,0.451553274414425,-0.62476340875855 B004,0004,64,1,7,0.365229529227089,-0.078687424137654,-0.28379739562524,-0.313279153068839,0.421836370550401,-0.906684675087603 B005,0005,62,1,16,0.940383261534547,0.336724978845789,0.325607497357412,-0.205112750307188,0.421836370550401,-0.906684675087603 B006,0006,64,1,6,-1.34173448581487,0.416707414517106,0.0209050508660859,0.665373444688287,-1.68468573537077,0.0998024379954218 B007,0007,62,1,9,-1.34173448581487,-1.36008617577211,-1.50260718159054,-0.230553397768359,0.421836370550401,-3.05438810752004 B008,0008,58,1,15,-0.200675612140164,1.39604181164675,0.325607497357412,0.112090842887017,0.421836370550401,1.00850813992937 B009,0009,51,1,9,0.374478120167295,0.0671339898083944,0.325607497357412,0.465053216234773,-1.68468573537077,0.670410597670127
Lo que necesito ahora es quitar de esta lista todos los que no tengan DTI preprocesado,
[osotolongo@brick03 tbss]$ ls data 0002_dti_FA.nii.gz 0017_dti_FA.nii.gz 0036_dti_FA.nii.gz 0051_dti_FA.nii.gz 0070_dti_FA.nii.gz 0085_dti_FA.nii.gz 0003_dti_FA.nii.gz 0018_dti_FA.nii.gz 0037_dti_FA.nii.gz 0052_dti_FA.nii.gz 0071_dti_FA.nii.gz 0086_dti_FA.nii.gz 0004_dti_FA.nii.gz 0019_dti_FA.nii.gz 0038_dti_FA.nii.gz 0054_dti_FA.nii.gz 0072_dti_FA.nii.gz 0087_dti_FA.nii.gz 0005_dti_FA.nii.gz 0020_dti_FA.nii.gz 0039_dti_FA.nii.gz 0055_dti_FA.nii.gz 0073_dti_FA.nii.gz 0088_dti_FA.nii.gz 0006_dti_FA.nii.gz 0021_dti_FA.nii.gz 0040_dti_FA.nii.gz 0056_dti_FA.nii.gz 0074_dti_FA.nii.gz 0089_dti_FA.nii.gz 0007_dti_FA.nii.gz 0022_dti_FA.nii.gz 0041_dti_FA.nii.gz 0058_dti_FA.nii.gz 0075_dti_FA.nii.gz 0090_dti_FA.nii.gz 0008_dti_FA.nii.gz 0023_dti_FA.nii.gz 0042_dti_FA.nii.gz 0059_dti_FA.nii.gz 0076_dti_FA.nii.gz 0091_dti_FA.nii.gz 0009_dti_FA.nii.gz 0024_dti_FA.nii.gz 0043_dti_FA.nii.gz 0061_dti_FA.nii.gz 0077_dti_FA.nii.gz 0092_dti_FA.nii.gz 0010_dti_FA.nii.gz 0027_dti_FA.nii.gz 0044_dti_FA.nii.gz 0062_dti_FA.nii.gz 0078_dti_FA.nii.gz 0093_dti_FA.nii.gz 0011_dti_FA.nii.gz 0028_dti_FA.nii.gz 0045_dti_FA.nii.gz 0064_dti_FA.nii.gz 0079_dti_FA.nii.gz 0094_dti_FA.nii.gz 0012_dti_FA.nii.gz 0029_dti_FA.nii.gz 0046_dti_FA.nii.gz 0065_dti_FA.nii.gz 0080_dti_FA.nii.gz 0095_dti_FA.nii.gz 0013_dti_FA.nii.gz 0030_dti_FA.nii.gz 0047_dti_FA.nii.gz 0066_dti_FA.nii.gz 0081_dti_FA.nii.gz 0096_dti_FA.nii.gz 0014_dti_FA.nii.gz 0031_dti_FA.nii.gz 0048_dti_FA.nii.gz 0067_dti_FA.nii.gz 0082_dti_FA.nii.gz 0015_dti_FA.nii.gz 0034_dti_FA.nii.gz 0049_dti_FA.nii.gz 0068_dti_FA.nii.gz 0083_dti_FA.nii.gz 0016_dti_FA.nii.gz 0035_dti_FA.nii.gz 0050_dti_FA.nii.gz 0069_dti_FA.nii.gz 0084_dti_FA.nii.gz
asi que saco la lista, y tomo solo los datos de estos sujetos,
[osotolongo@brick03 tbss]$ ls data | awk -F"_" '{print $1}' > fas.list [osotolongo@brick03 tbss]$ (head -n 1 bioface_data_sorted.csv && while read -r x; do awk -v sbj="${x}" -F"," '{if($2==sbj) print}' bioface_data_sorted.csv; done < fas.list) > bioface_data_dti.csv [osotolongo@brick03 tbss]$ head bioface_data_dti.csv PSubject,Subject,Age,Gender,Education,Attention.and.Working.Memory,Processing.speed.and.Executive.function,Language,Verbal.Learning.and.Memory,Praxis,Visual.gnosis B002,0002,53,1,10,-0.766580753507416,-0.640726365145137,0.325607497357412,-0.506483590256652,-1.65496883150675,-0.680939684688739 B003,0003,60,1,8,-0.775829344447622,-1.92758435997598,-0.588499842116566,0.188411915334138,0.451553274414425,-0.62476340875855 B004,0004,64,1,7,0.365229529227089,-0.078687424137654,-0.28379739562524,-0.313279153068839,0.421836370550401,-0.906684675087603 B005,0005,62,1,16,0.940383261534547,0.336724978845789,0.325607497357412,-0.205112750307188,0.421836370550401,-0.906684675087603 B006,0006,64,1,6,-1.34173448581487,0.416707414517106,0.0209050508660859,0.665373444688287,-1.68468573537077,0.0998024379954218 B007,0007,62,1,9,-1.34173448581487,-1.36008617577211,-1.50260718159054,-0.230553397768359,0.421836370550401,-3.05438810752004 B008,0008,58,1,15,-0.200675612140164,1.39604181164675,0.325607497357412,0.112090842887017,0.421836370550401,1.00850813992937 B009,0009,51,1,9,0.374478120167295,0.0671339898083944,0.325607497357412,0.465053216234773,-1.68468573537077,0.670410597670127 B010,0010,62,1,8,-1.34173448581487,0.580441125865297,-0.28379739562524,-0.161348116586939,0.421836370550401,-0.906684675087603
Y ahora para cada variable a analizar solo tengo que construir el design.mat y ejecutar el randomise apropiado. A ver que datos tengo,
[osotolongo@brick03 tbss]$ head -n 1 bioface_data_sorted.csv | sed 's/,/\n/g' | cat -n 1 PSubject 2 Subject 3 Age 4 Gender 5 Education 6 Attention.and.Working.Memory 7 Processing.speed.and.Executive.function 8 Executive.function.verbal 9 Language 10 Verbal.Learning.and.Memory 11 Praxis 12 Visual.gnosis
Por otra parte para los DTI voy a hacer,
[osotolongo@brick04 data]$ tbss_1_preproc *.nii.gz && tbss_2_reg -T && tbss_3_postreg -T && tbss_4_prestats 0.2
OJO: Esto demora bastante, asi que lo envias y ahi lo dejas, con suerte ya mañana estara hecho!
y despues de todo esto lo que hacemos es lanzar los randomise a traves de slurm,
y al lanzarlo, crea el entorno adecuado, ejecuta los randomise, y extrae los resultados posteriormente,
[osotolongo@brick04 tbss]$ ./prandomise.py -d bioface_data_dti.csv [osotolongo@brick04 tbss]$ head tbss_cs6/design.mat /NumWaves 4 /NumPoints 87 /Matrix 53 1 10 -0.766580753507416 60 1 8 -0.775829344447622 64 1 7 0.365229529227089 62 1 16 0.940383261534547 64 1 6 -1.34173448581487 62 1 9 -1.34173448581487 58 1 15 -0.200675612140164 [osotolongo@brick04 tbss]$ queue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 218903 fast randomise osotolon PD 0:00 1 (Dependency) 218905 fast randomise osotolon PD 0:00 1 (Dependency) 218907 fast randomise osotolon PD 0:00 1 (Dependency) 218909 fast randomise osotolon PD 0:00 1 (Dependency) 218911 fast randomise osotolon PD 0:00 1 (Dependency) 218913 fast randomise osotolon PD 0:00 1 (Dependency) 218914 fast randomise osotolon PD 0:00 1 (Dependency) 218902 fast randomise osotolon R 42:18 1 brick01 218904 fast randomise osotolon R 42:18 1 brick01 218906 fast randomise osotolon R 42:18 1 brick01 218908 fast randomise osotolon R 42:18 1 brick01 218910 fast randomise osotolon R 42:18 1 brick01 218912 fast randomise osotolon R 42:18 1 brick01
y ahi tienes para tres horas mas de calculo, pero despues(llega email de finalizacion) podemos saber rapidamente done tenemos resultados haciendo,
[osotolongo@brick03 tbss]$ for x in $(seq 6 12); do echo " var ${x} "; cat tbss_cs${x}/*_index.txt; done var 6 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) var 7 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) var 8 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) var 9 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) 1 53880 0.994 100 144 93 89 110 88.1 var 10 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) 1 55983 0.997 58 59 80 89.4 107 87.4 var 11 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox) var 12 Cluster Index Voxels MAX MAX X (vox) MAX Y (vox) MAX Z (vox) COG X (vox) COG Y (vox) COG Z (vox)
Ahora hago un tbss_fill de los que tienen resultados,
[osotolongo@brick03 tbss]$ tbss_fill tbss_cs9/tbss_cs9_tfce_corrp_tstat1.nii.gz 0.95 data/stats/mean_FA tbss_cs9/tbss_fill [osotolongo@brick03 tbss]$ tbss_fill tbss_cs10/tbss_cs10_tfce_corrp_tstat1.nii.gz 0.95 data/stats/mean_FA tbss_cs10/tbss_fill
y los miro encima de la plantilla,
[osotolongo@brick03 tbss]$ fslview_deprecated data/stats/mean_FA data/stats/mean_FA_skeleton -l Green -b 0.2,0.8 tbss_cs9/tbss_fill -l Red-Yellow -b 0.05,0.2