def test_retest_icc(atlas_name='MPM'): import time import numpy as np import pickle as pkl from cxy_hcp_ffa.lib.heritability import icc # inputs hemis = ('lh', 'rh') rois = ('pFus-face', 'mFus-face') test_file = pjoin(work_dir, f'rsfc_{atlas_name}2Cole_' '{hemi}_test_rm-subj.pkl') retest_file = pjoin(work_dir, f'rsfc_{atlas_name}2Cole_' '{hemi}_rm-subj.pkl') # outputs out_file = pjoin(work_dir, f'{atlas_name}_rm-subj_icc.pkl') # prepare data = {} # calculate for hemi in hemis: rsfc_test = pkl.load(open(test_file.format(hemi=hemi), 'rb')) rsfc_retest = pkl.load(open(retest_file.format(hemi=hemi), 'rb')) for roi in rois: time1 = time.time() test_vec = np.mean(rsfc_test[roi], 1) retest_vec = np.mean(rsfc_retest[roi], 1) k = f"{hemi}_{roi.split('-')[0]}" data[k] = icc(test_vec, retest_vec, 10000, 95) print(f'Finished {k}: cost {time.time()-time1} seconds.') # save pkl.dump(data, open(out_file, 'wb'))
def test_retest_icc(meas_name='activ', atlas_name='MPM'): import time import pickle as pkl from cxy_hcp_ffa.lib.heritability import icc # inputs hemis = ('lh', 'rh') rois = ('pFus', 'mFus') meas_file = pjoin(work_dir, f'{meas_name}_{atlas_name}_rm-subj.pkl') # outputs out_file = pjoin(work_dir, f'{meas_name}_{atlas_name}_rm-subj_icc.pkl') # prepare meas = pkl.load(open(meas_file, 'rb')) data = {} # calculate for hemi in hemis: for roi in rois: time1 = time.time() k = f'{hemi}_{roi}' data[k] = icc(meas[f'{k}_test'], meas[f'{k}_retest'], 10000, 95) print(f'Finished {k}: cost {time.time()-time1} seconds.') # save pkl.dump(data, open(out_file, 'wb'))
def calc_Falconer_h2(): """ Calculate Falconer's heritability by using ICC. """ import time import numpy as np import pandas as pd n_bootstrap = 10000 confidence = 95 data_file = pjoin(work_dir, 'pre-heritability_rsfc-mean.csv') out_file = pjoin(work_dir, 'heritability_icc_rsfc-mean.csv') data = pd.read_csv(data_file) mz_indices = data['zyg'] == 1 dz_indices = data['zyg'] == 3 var_names = [_[:-1] for _ in data.columns if _[-1] == '1'] n_var = len(var_names) indices = [ 'ICC_MZ', 'ICC_DZ', 'r_mz_lb', 'r_mz', 'r_mz_ub', 'r_dz_lb', 'r_dz', 'r_dz_ub', 'H2', 'h2_lb', 'h2', 'h2_ub' ] out_dict = {} for k in indices: out_dict[k] = np.zeros(n_var) for var_idx, var_name in enumerate(var_names): time1 = time.time() pair_name = [var_name + '1', var_name + '2'] mz = np.array(data.loc[mz_indices, pair_name]).T mz = mz[:, ~np.any(np.isnan(mz), axis=0)] dz = np.array(data.loc[dz_indices, pair_name]).T dz = dz[:, ~np.any(np.isnan(dz), axis=0)] print(f'#MZ in {var_name}:', mz.shape[1]) print(f'#DZ in {var_name}:', dz.shape[1]) out_dict['ICC_MZ'][var_idx] = h2.icc(mz) out_dict['ICC_DZ'][var_idx] = h2.icc(dz) r_mz_lb, r_mz, r_mz_ub = h2.icc(mz, n_bootstrap=n_bootstrap, confidence=confidence) r_dz_lb, r_dz, r_dz_ub = h2.icc(dz, n_bootstrap=n_bootstrap, confidence=confidence) out_dict['r_mz_lb'][var_idx] = r_mz_lb out_dict['r_mz'][var_idx] = r_mz out_dict['r_mz_ub'][var_idx] = r_mz_ub out_dict['r_dz_lb'][var_idx] = r_dz_lb out_dict['r_dz'][var_idx] = r_dz out_dict['r_dz_ub'][var_idx] = r_dz_ub out_dict['H2'][var_idx] = h2.heritability(mz, dz) h2_lb, h, h2_ub = h2.heritability(mz, dz, n_bootstrap=n_bootstrap, confidence=confidence) out_dict['h2_lb'][var_idx] = h2_lb out_dict['h2'][var_idx] = h out_dict['h2_ub'][var_idx] = h2_ub print(f'Finish {var_idx+1}/{n_var}, spend {time.time()-time1} seconds') out_df = pd.DataFrame(np.array(list(out_dict.values())), index=out_dict.keys(), columns=var_names) out_df.to_csv(out_file, index=True)
def test_retest_icc(hemi='lh'): import numpy as np import pickle as pkl import nibabel as nib from cxy_hcp_ffa.lib.predefine import roi2label, hemi2stru from cxy_hcp_ffa.lib.heritability import icc from magicbox.io.io import CiftiReader # inputs roi_names = ('pFus-face', 'mFus-face') test_file = pjoin(proj_dir, 'analysis/s2/activation.dscalar.nii') retest_file = pjoin(work_dir, 'activation.dscalar.nii') subj_test_file = pjoin(proj_dir, 'analysis/s2/subject_id') subj_retest_file = pjoin(work_dir, 'subject_id') mpm_file = pjoin( proj_dir, 'analysis/s2/1080_fROI/refined_with_Kevin/' f'MPM_v3_{hemi}_0.25_FFA.nii.gz') individual_file = pjoin( proj_dir, 'analysis/s2/1080_fROI/refined_with_Kevin/' f'rois_v3_{hemi}.nii.gz') # outputs out_file = pjoin(work_dir, f'ICC_{hemi}.pkl') # prepare subj_ids_test = open(subj_test_file).read().splitlines() subj_ids_retest = open(subj_retest_file).read().splitlines() retest_indices = [subj_ids_test.index(i) for i in subj_ids_retest] test_maps = CiftiReader(test_file).get_data(hemi2stru[hemi], True)[retest_indices] retest_maps = CiftiReader(retest_file).get_data(hemi2stru[hemi], True) mpm_mask = nib.load(mpm_file).get_fdata().squeeze() individual_mask = nib.load( individual_file).get_fdata().squeeze().T[retest_indices] # calculate n_roi = len(roi_names) mpm_iccs = np.ones((3, n_roi)) * np.nan individual_iccs = np.ones((3, n_roi)) * np.nan for i, roi_name in enumerate(roi_names): label = roi2label[roi_name] mpm_roi_idx_arr = mpm_mask == label individual_roi_idx_arr = individual_mask == label valid_subj_idx_vec = np.any(individual_roi_idx_arr, 1) individual_roi_idx_arr = individual_roi_idx_arr[valid_subj_idx_vec] test_maps_tmp = test_maps[valid_subj_idx_vec] retest_maps_tmp = retest_maps[valid_subj_idx_vec] n_subj_valid = np.sum(valid_subj_idx_vec) print(f'{hemi}_{roi_name}: {n_subj_valid} valid subjects') # calculate ICC for MPM test_series_mpm = np.mean(test_maps_tmp[:, mpm_roi_idx_arr], 1) retest_series_mpm = np.mean(retest_maps_tmp[:, mpm_roi_idx_arr], 1) mpm_iccs[:, i] = icc(test_series_mpm, retest_series_mpm, 10000, 95) # calculate ICC for individual test_series_ind = np.zeros((n_subj_valid, )) retest_series_ind = np.zeros((n_subj_valid, )) for j in range(n_subj_valid): individual_roi_idx_vec = individual_roi_idx_arr[j] test_series_ind[j] = np.mean( test_maps_tmp[j][individual_roi_idx_vec]) retest_series_ind[j] = np.mean( retest_maps_tmp[j][individual_roi_idx_vec]) individual_iccs[:, i] = icc(test_series_ind, retest_series_ind, 10000, 95) # save out_data = { 'roi_name': roi_names, 'mpm': mpm_iccs, 'individual': individual_iccs } pkl.dump(out_data, open(out_file, 'wb'))