In [13]:
%matplotlib inline
import nibabel as nib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import metrics
from os.path import join
from nilearn.masking import apply_mask
from nilearn.image import threshold_img,math_img,mean_img
from nilearn import plotting, input_data, image
from scipy.stats import ttest_ind
rsn10 = r'C:\github\a_htywork\20170315_autumnROC\PNAS_Smith09_rsn10.nii.gz'
face_dir = r'C:\expdata\ABIDE_2017_drz5000\FACE_drzstat_N1000'
abide_mask_dir = r'C:\expdata\ABIDE_2017_drz5000\ABIDE12_drz5000_mask'
result_dir = r'C:\temp'
def getAuc_P(drz_ff,mask,target):
try:
roivalue = np.mean(apply_mask(drz_ff, mask),1)
fpr, tpr, thresholds = metrics.roc_curve(target, roivalue)
auc = metrics.auc(fpr, tpr)
if auc < 0.5:
fpr, tpr, thresholds = metrics.roc_curve(target, -roivalue)
auc = metrics.auc(fpr, tpr)
t, p = ttest_ind(roivalue[(target==0).nonzero()[0]],
roivalue[(target==1).nonzero()[0]],
equal_var=True)
except BaseException as e:
roivalue = target*0
auc = 0
t = 0
p = 1
return roivalue.reshape(-1,1), auc, t, p
In [18]:
face_target = np.ones((43,1))
face_target[:23] = 0
zthr = 4
zstr = str(zthr).replace('.','p')
RSNstr = ['PVN','OPN','LVN','DMN','CEB','MOT','AUD','ECN','RFP','LFP']
'''
with open(join(abide_mask_dir,'subjdx.txt'), 'r') as f:
abide_target = [int(line.strip()) for line in f]
'''
for ii in range(10):
y = face_target
facedata_ff = join(face_dir,'rsn%d' % ii,'allRmaps.nii.gz')
abide_ff = join(abide_mask_dir,'rsn%d' % ii,'allRmaps.nii.gz')
# get RSN mask with Z threshold
rsnmask = math_img('img1>=%f' % zthr,img1=image.index_img(rsn10, ii))
abide_maskt1_ff =join(abide_mask_dir,'rsn%d' % ii,'twosample_tfce_corrp_tstat1.nii.gz')
abide_maskt2_ff =join(abide_mask_dir,'rsn%d' % ii,'twosample_tfce_corrp_tstat2.nii.gz')
abide_maskt1_ff = math_img('img1>=%f' % 0.95,img1=abide_maskt1_ff)
abide_maskt2_ff = math_img('img1>=%f' % 0.95,img1=abide_maskt2_ff)
abide_maskt1_ff = math_img('img1*img2',img1=rsnmask, img2=abide_maskt1_ff)
abide_maskt2_ff = math_img('img1*img2',img1=rsnmask, img2=abide_maskt2_ff)
math_img('img1*1.0',img1=abide_maskt1_ff).to_filename(join(result_dir,'A%02dmask.nii.gz' % (ii+1)))
math_img('img1*1.0',img1=abide_maskt2_ff).to_filename(join(result_dir,'A%02dmask.nii.gz' % (ii+11)))
roivalueR, aucR, tR, pR = getAuc_P(facedata_ff,rsnmask,face_target)
roivalueA1, aucA1, tA1, pA1 = getAuc_P(facedata_ff,abide_maskt1_ff,face_target)
roivalueA2, aucA2, tA2, pA2 = getAuc_P(facedata_ff,abide_maskt2_ff,face_target)
plotting.plot_roi(abide_maskt1_ff,title='RSN%d:t1,%d,%.3f' % (ii+1,zthr,pA1),
output_file = join(result_dir,'RSN%d_t1_%s.jpg' % (ii+1,zstr)))
plotting.plot_roi(abide_maskt2_ff,title='RSN%d:t2,%d,%.3f' % (ii+1,zthr,pA2),
output_file = join(result_dir,'RSN%d_t2_%s.jpg' % (ii+1,zstr)))
if ii == 0:
Rmatrix = roivalueR
A1matrix = roivalueA1
A2matrix = roivalueA2
else:
Rmatrix = np.hstack((Rmatrix,roivalueR))
A1matrix = np.hstack((A1matrix,roivalueA1))
A2matrix = np.hstack((A2matrix,roivalueA2))
#maskt1pxs = abide_maskt1_ff.get_data().sum()
#maskt2pxs = abide_maskt2_ff.get_data().sum()
def gpstr(p):
pstr = '%.3f' % p
if p < 0.05:pstr += '*'
if p < 0.01:pstr += '*'
return pstr
print('RSN%02d_%s AUC: %.3f(%s)\t t1:%.3f(%s)\t t2:%.3f(%s) ' % (ii+1,RSNstr[ii],aucR,gpstr(pR),aucA1,gpstr(pA1),aucA2,gpstr(pA2)))
np.savetxt(join(result_dir,'tsall_%s.csv' % zstr),np.hstack((face_target,Rmatrix,A1matrix,A2matrix)),fmt='%.5f', delimiter=',')
In [17]:
'A%02dmask.nii.gz' % (ii+11)
Out[17]:
In [ ]: