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
Next revision Both sides next revision
neuroimagen:bioface_atn [2021/08/30 08:49]
osotolongo [ROIs que destaquen en la neurodegeneracion]
neuroimagen:bioface_atn [2021/09/12 10:21]
osotolongo [What we got so far]
Line 79: Line 79:
 pop$ND = ifelse(pop$DX == "Dementia", 1, 0) pop$ND = ifelse(pop$DX == "Dementia", 1, 0)
 xt <- pop[, c("Hippocampus", "Entorhinal", "Ventricles", "Fusiform", "MidTemp","AGE","ICV","DX")] xt <- pop[, c("Hippocampus", "Entorhinal", "Ventricles", "Fusiform", "MidTemp","AGE","ICV","DX")]
 +</code>
 ===== Naive Bayes ===== ===== Naive Bayes =====
  
Line 86: Line 86:
 <code> <code>
 > library("e1071") > library("e1071")
-> library("caTools")+> library("caret")
 > library("caTools") > library("caTools")
 > library("ADNIMERGE") > library("ADNIMERGE")
Line 173: 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>
 +
 +{{ :neuroimagen:rf_classifier_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>
 +
 +{{ :neuroimagen:rf_classifier_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.txt · Last modified: 2022/06/14 08:22 by osotolongo