示例#1
0
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'))
示例#3
0
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)
示例#4
0
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'))