User Tools

Site Tools


neuroimagen:bioface_atn

This is an old revision of the document!


¿Como determinar si hay neurodegeneracion?

¿Pueden usarse los ventriculos?

Vamos a mirar ADNI, a ver que sale. En principio habria que ajustar tanot por edad como por volumen craneal. A primera vista pareceria una buena opcion, pero una vez que ajusto por edad y volumen total,

library(ADNIMERGE)
pop <- adnimerge[adnimerge$VISCODE=="bl" & (adnimerge$DX=="Dementia" | adnimerge$DX=="CN"),];
m1 <- lm(pop$Ventricles ~ pop$ICV)
pop$adj_Ventricles = pop$Ventricles - m1$coefficients[[2]]*(pop$ICV- mean(pop$ICV,na.rm=TRUE))
m2 <- lm(pop$adj_Ventricles ~ pop$AGE)
pop$vc_Ventricles = pop$adj_Ventricles - m2$coefficients[[2]]*(pop$AGE-mean(pop$AGE,na.rm=TRUE))

Y queda entonces,

uncorrected corrected

Los valores estan demasiado juntos y la correccion los agrupa mas.

ROIs que destaquen en la neurodegeneracion

¿Y los hipocampos?

al escoger el hipocampo estoy presuponiendo que hay AD, pero vamos a ver que queda,

uncorrected corrected

Pues no esta mal.

¿O el entorhinal?

uncorrected corrected

Naive Bayes

Esta es la cosa. Tengo un monton de informacion que podria clasificarme a los sujetos entre Neurodegeneracion SI y Neurodegeneracion NO. Y si tres variables juntas me pueden dar la info mas o menos adecuadad lo suyo es que meta todo lo relevante e intente usarlo al mismo tiempo. Lo primero deberia ser construir el vector de training a partir de los sujetos de ADNI.

> library("e1071")
> library("caTools")
> library("caTools")
> library("ADNIMERGE")
> pop <- adnimerge[adnimerge$VISCODE=="bl" & (adnimerge$DX=="Dementia" | adnimerge$DX=="CN"),];
> pop$ND = ifelse(pop$DX == "Dementia", 1, 0)
> xt <- pop[, c("Hippocampus", "Entorhinal", "Ventricles","AGE","ICV","ND")]

Este es el vector de training pero voy a probar el algoritmo tambien asi que lo que hare es dividirlo y ver como funciona. Voy a tomar el 70% para entrenar el algoritmo y el restante 30_% para ver los resultados.

> split <- sample.split(xt, SplitRatio = 0.7)
> train_cl <- subset(xt, split == "TRUE")
> test_cl <- subset(xt, split == "FALSE")
> set.seed(120)
> classifier_cl <- naiveBayes(ND ~ ., data = train_cl)
> y_pred <- predict(classifier_cl, newdata = test_cl)
> cm <- table(test_cl$ND, y_pred)
> confusionMatrix(cm)
Confusion Matrix and Statistics

   y_pred
      0   1
  0 248  29
  1  46  84
                                          
               Accuracy : 0.8157          
                 95% CI : (0.7746, 0.8522)
    No Information Rate : 0.7224          
    P-Value [Acc > NIR] : 7.984e-06       
                                          
                  Kappa : 0.5609          
                                          
 Mcnemar's Test P-Value : 0.06467         
                                          
            Sensitivity : 0.8435          
            Specificity : 0.7434          
         Pos Pred Value : 0.8953          
         Neg Pred Value : 0.6462          
             Prevalence : 0.7224          
         Detection Rate : 0.6093          
   Detection Prevalence : 0.6806          
      Balanced Accuracy : 0.7935          
                                          
       'Positive' Class : 0 

Y no es perfecto pero esta bien!

Asi que para evaluar los sujetos habria que construir una matriz de datos identica a la de ADNI. Esto no es tan dificil, asi que vamos,

[osotolongo@brick03 bioface]$ xnat_pullfs.pl -s aseg -x bioface19 -o bf_base_aseg.csv
[osotolongo@brick03 bioface]$ xnat_pullfs.pl -s aparc -x bioface19 -o bf_base_aparc.csv
[osotolongo@brick03 bioface]$ join -t, bf_base_aseg.csv bf_base_aparc.csv > bf_base.csv
[osotolongo@brick03 bioface]$ awk -F"," '{print $3","$5}' bioface_np.csv | sed 's/Subjecte/Subject_ID/; s/Edad/AGE/' > bf_age.csv
[osotolongo@brick03 bioface]$ join -t, bf_base.csv bf_age.csv > bf_data.csv

Lo demas voy a hacerlo en R,

> 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$X3rd.Ventricle +  base$X4th.Ventricle + base$X5th.Ventricle + base$Left.Lateral.Ventricle + base$Right.Lateral.Ventricle
> base$ICV = base$eTIV

Ahora el procedimiento,

> classifier_cl <- naiveBayes(ND ~ ., data = xt)
> base$ND <- predict(classifier_cl, newdata = base)
neuroimagen/bioface_atn.1629815001.txt.gz · Last modified: 2021/08/24 14:23 by osotolongo