User Tools

Site Tools


neuroimagen:bioface_sbm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
neuroimagen:bioface_sbm [2021/12/10 09:22]
osotolongo [SBM vs NBACE]
neuroimagen:bioface_sbm [2021/12/14 10:19]
osotolongo [Automatizando]
Line 246: Line 246:
  
 ===== SBM vs NBACE ===== ===== SBM vs NBACE =====
 +
 +Antes de ejecutar el analisis para las variabes de NBACE, vamos a mirar que hay en la base de datos,
  
 <code bash> <code bash>
Line 497: Line 499:
 </code> </code>
  
 +Entonces voy primero a enlazarlos ID de neuroimagen del proyecto (//Subject//) con los ID del proyecto (//PSubject//). Y luego voy a extraer de la DB las variables que necesito. Voy a empezar con //M_ret_NP// y por supuesto las covariables. Entonces voy a unir los dos archivos y esta sera mi base de trabajo.
  
 <code bash> <code bash>
Line 518: Line 521:
 </code> </code>
  
 +A partir de la DB de trabajo tengo que construir el archivo //FSGD//,
 <code bash> <code bash>
 +[osotolongo@brick03 fsga_220]$ (head -n 1 bioface_data_220.csv; tail -n +2 bioface_data_220.csv | sort -t, -k 2) > bioface_data_sorted_220.csv
 [osotolongo@brick03 fsga_220]$ awk -F"," '{print "bioface_"$2","$3","$4","$5","$6}' bioface_data_220.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > 220_body.csv [osotolongo@brick03 fsga_220]$ awk -F"," '{print "bioface_"$2","$3","$4","$5","$6}' bioface_data_220.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > 220_body.csv
 [osotolongo@brick03 fsga_220]$ head 220_body.csv [osotolongo@brick03 fsga_220]$ head 220_body.csv
Line 537: Line 542:
 [osotolongo@brick03 fsga_220]$ cat headers_220.txt 220_body.csv > 220.fsgd [osotolongo@brick03 fsga_220]$ cat headers_220.txt 220_body.csv > 220.fsgd
 </code> </code>
 +
 +Y ahora me ejecuto un script que haga todos los analisis de la variable correspondiente,
 +
 +<code bash fsga_220.sh>
 +#!/bin/bash
 +mris_preproc --fsgd 220.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.220.thickness.10.mgh
 +mris_preproc --fsgd 220.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.220.thickness.10.mgh
 +mri_glmfit --y lh.220.thickness.10.mgh --fsgd 220.fsgd --C 220.mtx --surf fsaverage lh --glmdir lh.220.glmdir
 +mri_glmfit --y rh.220.thickness.10.mgh --fsgd 220.fsgd --C 220.mtx --surf fsaverage rh --glmdir rh.220.glmdir
 +mri_glmfit-sim --glmdir lh.220.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.220.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +</code>
 +
 +Ahora bien, esto me vale para el //thickness// pero para //area// y //volume// necesito el valor del //intracraneal volume//, pasado a z-scores para evitar //ill-posed// problems.
 + 
 +<code bash>
 +awk -F"," '{print $1","$65}' ../../fsrecon/aseg_stats.csv > bioface_icv.csv
 +Rscript convert_icv.r
 +awk -F"," '{$1 = sprintf("%04d",$1); print $1","$3}' bioface_zic_tempv.csv | sed 's/"//g;s/0000/Subject/' > bioface_zicv.csv
 +</code>
 +
 +Hago el join con los datos que ya tengo y construyo un nuevo //FSGD// con los //zICV// incluidos.
 +
 +<code>
 +join -t"," -1 2 -2 1 bioface_data_sorted_220.csv bioface_zicv.csv > bioface_vdata.csv
 +awk -F"," '{print "bioface_"$1","$3","$4","$5","$6","$7}' bioface_vdata.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > 220v_body.csv
 +cat headers_220.txt 220v_body.csv > 220v.fsgd
 +</code>
 +
 +Por supuesto que esto lo he de añadir al modelo (//mtx//),
 +
 +<code bash>
 +[osotolongo@brick03 fsga_220]$ cat 220a.mtx
 +0 0 0 0 1 0
 +
 +y los nuevos scripts de //area// y //volume// tienen que usar estos nuevos archivos,
 +
 +[osotolongo@brick03 fsga_220]$ cat fsga_220a.sh
 +#!/bin/bash
 +mris_preproc --fsgd 220v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.220.area.10.mgh
 +mris_preproc --fsgd 220v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.220.area.10.mgh
 +mri_glmfit --y lh.220.area.10.mgh --fsgd 220v.fsgd --C 220a.mtx --surf fsaverage lh --glmdir lh.220a.glmdir
 +mri_glmfit --y rh.220.area.10.mgh --fsgd 220v.fsgd --C 220a.mtx --surf fsaverage rh --glmdir rh.220a.glmdir
 +mri_glmfit-sim --glmdir lh.220a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.220a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +
 +[osotolongo@brick03 fsga_220]$ cat fsga_220v.sh
 +#!/bin/bash
 +mris_preproc --fsgd 220v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.220.volume.10.mgh
 +mris_preproc --fsgd 220v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.220.volume.10.mgh
 +mri_glmfit --y lh.220.volume.10.mgh --fsgd 220v.fsgd --C 220a.mtx --surf fsaverage lh --glmdir lh.220v.glmdir
 +mri_glmfit --y rh.220.volume.10.mgh --fsgd 220v.fsgd --C 220a.mtx --surf fsaverage rh --glmdir rh.220v.glmdir
 +mri_glmfit-sim --glmdir lh.220v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.220v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.220v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +
 +</code>
 +
 +En cualquier caso, para encontrar rapidamente si hay resultados basta con hacer un grep rapido, 
 +
 +<code bash>
 +[osotolongo@brick03 fsga_220]$ grep -v "^#" *glmdir/220*/*sig.cluster.summary
 +lh.220.glmdir/220/cache.th30.pos.sig.cluster.summary:          4.7802   70529    384.91    -29.6  -35.2  -15.6  0.00200  0.00120  0.00280    899     3173.92  parahippocampal
 +rh.220v.glmdir/220a/cache.th30.pos.sig.cluster.summary:          3.5435  158360    418.06     45.4  -66.0   29.0  0.00400  0.00280  0.00519    690     2060.05  inferiorparietal
 +</code>
 +
 +==== Automatizando ====
 +
 +Bueno este proceso es mas o menos el mismo para todas las variables, asi que como que se puede automatizar con un poco de maña. 
 +
 +El primer procedimiento es extraer la info de la DB, respecto a la variable a estudiar. Para esto voy a hacer un plantilla y en tonces solo hay que sustituir el codigo de la variables en la plantilla, ejecutar el script resultante y todo deberia quedar en su sitio. Para cada variable hare un subdirectorio distinto, asi no se mezclan la cosas.
 +
 +El segundo paso es ejecutar las ordenes propiamente del analisis. Es decir que hago otra plantilla  donde escribir los codigo de variable y ya esta. Igual, que antes, escribo, ejecuto y quedan los analisis en su sitio.
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ cat templates/organize.sh 
 +#!/bin/bash
 +mkdir fsga_<code>
 +awk -F"," '{print $1","$94","$78","$83","$<code>}' bioface_full_db.csv > fsga_<code>/bioface_<code>.csv
 +sed -i 's/SUJETO/PSubject/g' fsga_<code>/bioface_<code>.csv
 +join -t"," -1 2 -2 1 bioface_join.csv fsga_<code>/bioface_<code>.csv > fsga_<code>/bioface_data_<code>.csv
 +(head -n 1 fsga_<code>/bioface_data_<code>.csv; tail -n +2 fsga_<code>/bioface_data_<code>.csv | sort -t, -k 2) > fsga_<code>/bioface_data_sorted_<code>.csv
 +awk -F"," '{print "bioface_"$2","$3","$4","$5","$6}' fsga_<code>/bioface_data_sorted_<code>.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > fsga_<code>/<code>_body.csv
 +echo 'GroupDescriptorFile 1' > fsga_<code>/headers_<code>.txt
 +echo 'Title BIOFACE_<code>' >> fsga_<code>/headers_<code>.txt
 +echo 'Class Main' >> fsga_<code>/headers_<code>.txt
 +echo '0 0 0 0 1' > fsga_<code>/<code>.mtx
 +cat fsga_<code>/headers_<code>.txt fsga_<code>/<code>_body.csv > fsga_<code>/<code>.fsgd
 +join -t"," -1 2 -2 1 fsga_<code>/bioface_data_sorted_<code>.csv bioface_zicv.csv > fsga_<code>/bioface_vdata.csv
 +awk -F"," '{print "bioface_"$1","$3","$4","$5","$6","$7}' fsga_<code>/bioface_vdata.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > fsga_<code>/<code>v_body.csv
 +cat fsga_<code>/headers_<code>.txt fsga_<code>/<code>v_body.csv > fsga_<code>/<code>v.fsgd
 +echo '0 0 0 0 1 0' > fsga_<code>/<code>a.mtx
 +
 +[osotolongo@brick03 fsga_nbace]$ cat templates/runner.sh 
 +#!/bin/bash
 +##thickness
 +mris_preproc --fsgd <code>v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.area.10.mgh
 +mris_preproc --fsgd <code>v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.area.10.mgh
 +mri_glmfit --y lh.<code>.area.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage lh --glmdir lh.<code>a.glmdir
 +mri_glmfit --y rh.<code>.area.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage rh --glmdir rh.<code>a.glmdir
 +mri_glmfit-sim --glmdir lh.<code>a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +##area
 +mris_preproc --fsgd <code>.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.thickness.10.mgh
 +mris_preproc --fsgd <code>.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.thickness.10.mgh
 +mri_glmfit --y lh.<code>.thickness.10.mgh --fsgd <code>.fsgd --C <code>.mtx --surf fsaverage lh --glmdir lh.<code>.glmdir
 +mri_glmfit --y rh.<code>.thickness.10.mgh --fsgd <code>.fsgd --C <code>.mtx --surf fsaverage rh --glmdir rh.<code>.glmdir
 +mri_glmfit-sim --glmdir lh.<code>.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +##volume
 +mris_preproc --fsgd <code>v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.volume.10.mgh
 +mris_preproc --fsgd <code>v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.volume.10.mgh
 +mri_glmfit --y lh.<code>.volume.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage lh --glmdir lh.<code>v.glmdir
 +mri_glmfit --y rh.<code>.volume.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage rh --glmdir rh.<code>v.glmdir
 +mri_glmfit-sim --glmdir lh.<code>v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +</code>
 +
 +y ahora debo hacer un script para llenar las plantillas y ejecutarlas. Esto es cosa bastante simple.
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ cat run_all.sh 
 +#!/bin/bash
 +code=$1
 +shift
 +sed "s/<code>/${code}/g" templates/organize.sh > org${code}.sh
 +chmod +x org${code}.sh
 +./org${code}.sh
 +rm org${code}.sh
 +sed "s/<code>/${code}/g" templates/runner.sh > fsga_${code}/run.sh
 +cd fsga_${code}/
 +chmod +x run.sh
 +./run.sh
 +cd ..
 +grep -v "^#" fsga_${code}/*glmdir/${code}*/*sig.cluster.summary
 +</code>
 +
 +El //grep// final devuelve los resultados, en caso de haber alguno.
 +==== Resultados ====
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ ls -d fsga_2*
 +fsga_219  fsga_220  fsga_221  fsga_227  fsga_232  fsga_238  fsga_240  fsga_241  fsga_242
 +
 +[osotolongo@brick03 fsga_nbace]$ grep -v "^#" fsga_2*/*glmdir/2*/*sig.cluster.summary
 +fsga_220/lh.220.glmdir/220/cache.th30.pos.sig.cluster.summary:          4.7802   70529    384.91    -29.6  -35.2  -15.6  0.00200  0.00120  0.00280    899     3173.92  parahippocampal
 +fsga_220/rh.220v.glmdir/220a/cache.th30.pos.sig.cluster.summary:          3.5435  158360    418.06     45.4  -66.0   29.0  0.00400  0.00280  0.00519    690     2060.05  inferiorparietal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -4.9777  159437    405.48     -8.4  -58.6   13.1  0.00020  0.00000  0.00040    949    -3320.19  precuneus
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -5.4753   28501    389.38    -51.8  -53.9  -16.1  0.00100  0.00040  0.00160    555    -2051.28  inferiortemporal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -3.9238   23271    347.97    -58.7  -49.8   14.8  0.00140  0.00080  0.00200    717    -2300.38  superiortemporal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -4.1765  125637    231.02    -55.4  -32.9   24.6  0.02524  0.02247  0.02800    409    -1345.49  supramarginal
 +fsga_240/lh.240a.glmdir/240a/cache.th30.pos.sig.cluster.summary:          3.6678   29871    377.44    -34.8   44.8   19.1  0.01950  0.01693  0.02208    566     1720.94  rostralmiddlefrontal
 +fsga_241/rh.241a.glmdir/241a/cache.th30.pos.sig.cluster.summary:          4.3157    1024    596.17      6.6  -19.1   62.8  0.00140  0.00080  0.00200   1482     4717.49  paracentral
 +</code>
 +
neuroimagen/bioface_sbm.txt · Last modified: 2021/12/14 10:33 by osotolongo