User Tools

Site Tools


neuroimagen:bioface_atn

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
neuroimagen:bioface_atn [2021/08/25 12:33]
osotolongo [Naive Bayes]
neuroimagen:bioface_atn [2021/09/12 10:23] (current)
osotolongo [Métodos no lineales]
Line 42: Line 42:
 | {{ :neuroimagen:hist_ent.png?600 |}} | {{ :neuroimagen:hist_ent_adj.png?600 |}} | | {{ :neuroimagen:hist_ent.png?600 |}} | {{ :neuroimagen:hist_ent_adj.png?600 |}} |
  
 +
 +===== Otras ROI en ADNI DB =====
 +
 +<code>
 +   UCSFVOLs <- c("FLDSTRENG", "FSVERSION", "IMAGEUID", "Ventricles", 
 +        "Hippocampus", "WholeBrain", "Entorhinal", "Fusiform", 
 +        "MidTemp", "ICV")
 +</code>
 +
 +<code>
 +        ucsfvol$ICV <- ucsfvol$ST10CV
 +        ucsfvol$Hippocampus <- (ucsfvol$ST29SV + ucsfvol$ST88SV)
 +        ucsfvol$Entorhinal <- (ucsfvol$ST24CV + ucsfvol$ST83CV)
 +        ucsfvol$Fusiform <- (ucsfvol$ST26CV + ucsfvol$ST85CV)
 +        ucsfvol$MidTemp <- (ucsfvol$ST40CV + ucsfvol$ST99CV)
 +        ucsfvol$Ventricles <- (ucsfvol$ST30SV + ucsfvol$ST37SV + 
 +            ucsfvol$ST89SV + ucsfvol$ST96SV)
 +        ucsfvol$WholeBrain <- apply(ucsfvol[, c("ST128SV", "ST17SV", 
 +            "ST18SV", "ST61SV", "ST16SV", "ST53SV", "ST42SV", 
 +            "ST29SV", "ST12SV", "ST11SV", "ST65SV", "ST76SV", 
 +            "ST77SV", "ST120SV", "ST75SV", "ST112SV", "ST101SV", 
 +            "ST88SV", "ST71SV", "ST70SV", "ST124SV", "ST147SV", 
 +            "ST148SV", "ST150SV", "ST151SV")], 1, sum)
 +</code>
 +
 +Usando el diccionario en [[http://adni.loni.usc.edu |ADNI]] podemos hacer algo como,
 +
 +<code>
 +Fusiform =  rh.fusiform.GrayVol + lh.fusiform.GrayVol
 +MidTemp = rh.middletemporal.GrayVol + lh.middletemporal.GrayVol
 +</code>
 +
 +y entonces,
 +
 +<code>
 +pop$ND = ifelse(pop$DX == "Dementia", 1, 0)
 +xt <- pop[, c("Hippocampus", "Entorhinal", "Ventricles", "Fusiform", "MidTemp","AGE","ICV","DX")]
 +</code>
 ===== Naive Bayes ===== ===== Naive Bayes =====
  
Line 48: Line 86:
 <code> <code>
 > library("e1071") > library("e1071")
-> library("caTools")+> library("caret")
 > library("caTools") > library("caTools")
 > library("ADNIMERGE") > library("ADNIMERGE")
Line 135: Line 173:
 **Nice!**  **Nice!** 
  
 +===== What we got so far =====
 +
 +A partir de la base de datos de ADNI, tomo los sujetos diagnosticados como //Dementia// y //CN// en el baseline, así como su edad y ciertos valores calculados a partir de la segmentacion. Tomo el diagnostico de //Dementia// como positivo en neurodegeneracion y negativo en caso contrario. 
 +
 +<code>
 +library("e1071")
 +library("caret")
 +library("caTools")
 +library("ADNIMERGE")
 +pop <- adnimerge[adnimerge$VISCODE=="bl" & (adnimerge$DX=="Dementia" | adnimerge$DX=="CN"),];
 +pop$ND = as.factor(ifelse(pop$DX == "Dementia", 1, 0))
 +xt <- pop[, c("Hippocampus", "Entorhinal", "Ventricles", "MidTemp", "AGE", "ICV", "ND")]
 +</code>
 +
 +Con estos datos, entreno el clasificador,
 +
 +<code>
 +classifier_cl <- naiveBayes(ND ~ ., data = xt)
 +</code>
 +
 +Ahora, tomo un proyecto y reuno los datos de segmentacion y demograficos. No es neceario todo pero la edad y la segmentacion basica si. Esto puede cambiar de proyeto en proyecto pero es mas o menos asi, (lo repito por tenerlo todo junto)
 +
 +<code bash>
 +xnat_pullfs.pl -s aseg -x bioface19 -o bf_base_aseg.csv
 +xnat_pullfs.pl -s aparc -x bioface19 -o bf_base_aparc.csv
 +join -t, bf_base_aseg.csv bf_base_aparc.csv > bf_base.csv
 +awk -F"," '{print $3","$5}' bioface_np.csv | sed 's/Subjecte/Subject_ID/; s/Edad/AGE/' > bf_age.csv
 +join -t, bf_base.csv bf_age.csv > bf_data.csv
 +</code>
 +
 +Cargo estos datos y construyo las variables identicas a la de los datos de ADNIMERGE. 
 +
 +<code>
 +setwd("/home/data/bioface")
 +base <- read.csv("bf_data.csv")
 +base$Hippocampus = base$Left.Hippocampus + base$Right.Hippocampus
 +base$Entorhinal = base$lh.entorhinal.GrayVol + base$rh.entorhinal.GrayVol
 +base$Ventricles <- base$Left.Inf.Lat.Vent + base$Right.Inf.Lat.Vent + base$Left.Lateral.Ventricle + base$Right.Lateral.Ventricle
 +base$MidTemp = base$lh.middletemporal.GrayVol + base$rh.middletemporal.GrayVol
 +base$ICV = base$eTIV
 +</code>
 +
 +Ahora puedo calcular el valor de //(N)//,
 +
 +<code>
 +base$ND <- predict(classifier_cl, newdata = base)
 +</code>
 +
 +o la probabilidad de que exista neurodegeneración
 +
 +<code>
 +base$post <- predict(classifier_cl, newdata = base, type="raw")
 +</code>
 +
 +
 +^ Clasificación ^ Probabilidades de N+ ^
 +| {{ :neuroimagen:bioface_nplus_classifier.png?600 | my pretty cool neurodegeneration classifier output }} | {{ :neuroimagen:nplus_probabilities_histogram.png?600 | how the probabilities are distributed? }} |
 +
 +Y esto voy a hacerlo para FACEHBI también para compararlo,
 +
 +<code>
 +setwd("/home/data/facehbi")
 +read.csv("face_data.csv") -> face
 +face$Hippocampus = face$Left.Hippocampus + face$Right.Hippocampus
 +face$Entorhinal = face$lh.entorhinal.GrayVol + face$rh.entorhinal.GrayVol
 +face$Ventricles <- face$Left.Inf.Lat.Vent + face$Right.Inf.Lat.Vent + face$Left.Lateral.Ventricle + face$Right.Lateral.Ventricle
 +face$MidTemp = face$lh.middletemporal.GrayVol + face$rh.middletemporal.GrayVol
 +face$ICV = face$eTIV
 +face$ND <- predict(classifier_cl, newdata = face)
 +face$post <- predict(classifier_cl, newdata = face, type="raw")
 +</code>
 +
 +^ Clasificación ^ Probabilidades de N+ ^
 +| {{ :neuroimagen:facehbi_nbayes_classifier.png?600 | my pretty cool neurodegeneration classifier output (FACEHBI)}} | {{ :neuroimagen:facehbi_nplus_prob_histogram.png?600 |how the probabilities are distributed?}} |
 +
 +==== Métodos no lineales ====
 +
 +Vamos a intentar con métodos no lineales. Ojo, estos  métodos no tienen interpretación probabilistica. Son construcciones matemáticas que funcionan.
 +
 +=== random Forest ===
 +
 +** BIOFACE **
 +<code>
 +rf_cl <- randomForest(ND ~ ., data = xt, na.action = na.omit)
 +base$ND <- predict(rf_cl, newdata = base)
 +base$post <- predict(rf_cl, newdata = base, type="prob")
 +plot(base$AGE, base$Hippocampus, main = "Hippocampus Volume versus Age", xlab="Age", ylab="HV", pch=19, col=ifelse(base$ND==1,"red","green"))
 +hist(base$post[,2], col="red", density = 50, probability=TRUE, breaks = 10, main="Probabilities profile", xlab = "Probability of N+")
 +</code>
 +
 +^ Clasificación ^ Probabilidades de N+ ^
 +| {{ :neuroimagen:rf_classifier_bioface.png?600 |}} | {{ :neuroimagen:rf_prob_profile_bioface.png?600 |}} |
 +
 +**FACEHBI** 
 +
 +<code>
 +face$ND <- predict(rf_cl, newdata = face)
 +face$post <- predict(rf_cl, newdata = face, type = "prob")
 +plot(face$AGE, face$Hippocampus, main = "Hippocampus Volume versus Age", xlab="Age", ylab="HV", pch=19, col=ifelse(face$ND==1,"red","green"))
 +hist(face$post[,2], col="red", density = 50, probability=TRUE, breaks = 10, main="Probabilities profile", xlab = "Probability of N+")
 +</code>
 +
 +^ Clasificación ^ Probabilidades de N+ ^
 +| {{ :neuroimagen:rf_classifier_facehbi.png?600 |}} | {{ :neuroimagen:rf_prob_profile_facehbi.png?600 |}} |
 +
 +=== support-vector machine ===
 +
 +**BIOFACE**
 +
 +<code>
 +svm_cl <- svm(ND ~ ., data = xt, na.action = na.omit)
 +base$ND <- predict(svm_cl, newdata = base)
 +plot(base$AGE, base$Hippocampus, main = "Hippocampus Volume versus Age", xlab="Age", ylab="HV", pch=19, col=ifelse(base$ND==1,"red","green"))
 +</code>
 +
 +{{ :neuroimagen:svm_classifier_bioface.png?600 |}}
 +
 +** FACEHBI **
 +
 +<code>
 +face$ND <- predict(svm_cl, newdata = face)
 +plot(face$AGE, face$Hippocampus, main = "Hippocampus Volume versus Age", xlab="Age", ylab="HV", pch=19, col=ifelse(face$ND==1,"red","green"))
 +</code>
 +
 +{{ :neuroimagen:svm_classifier_facehbi.png?600 |}}
neuroimagen/bioface_atn.1629894789.txt.gz · Last modified: 2021/08/25 12:33 by osotolongo