예제 #1
0
def meta_confound(label_eg,
                  label_cg,
                  csv_dir='./data/meta_csv/{}_{}/confound/',
                  output_dir='./results/meta/{}_{}/confound/'):
    models = {}
    csv_dir = csv_dir.format(label_eg, label_cg)
    output_dir = output_dir.format(label_eg, label_cg)
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    for confound in confounds:
        csv_path = csv_dir + confound + '.csv'
        output_path = output_dir + confound + '.png'
        model = csv_meta_analysis(csv_path, model_type='random')
        print(label_eg, label_cg, confound, model.p)
        model.plot_forest(title=confound, save_path=output_path, show=False)
        models[confound] = model
    return models
예제 #2
0
def meta_gmv(label_eg,
             label_cg,
             mask,
             save_nii=True,
             csv_prefix='roi_gmv_removed',
             csv_dir='./data/meta_csv',
             out_dir='./results/meta'):
    models = {}
    prefix = '{}_{}/{}'.format(label_eg, label_cg, csv_prefix)
    csv_dir = os.path.join(csv_dir, prefix)
    out_dir = os.path.join(out_dir, prefix)
    if not os.path.isdir(out_dir):
        os.mkdir(out_dir)
    csvs = os.listdir(csv_dir)

    for f in csvs:
        csv_path = os.path.join(csv_dir, f)
        model = csv_meta_analysis(csv_path, model_type='random')
        models[f[:-4]] = model

    if save_nii:
        nii_array = mask.data.astype(np.float32)
        p_array = nii_array
        ll = mask.labels.tolist()

        for k, v in models.items():
            _id = int(k)
            nii_array[nii_array == _id] = v.total_effect_size
            p_array[p_array == _id] = v.p
            ll.remove(_id)
        for i in ll:
            nii_array[nii_array == i] = 0

        path = os.path.join(out_dir, 'es.nii')
        p_path = os.path.join(out_dir, 'p.nii')
        utils.gen_nii(nii_array, mask.nii, path)
        utils.gen_nii(p_array, mask.nii, p_path)
    return models
예제 #3
0
def test_csv():
    result_model = main.csv_meta_analysis('../test_data/test.csv', )
    return result_model.get_results()
예제 #4
0
def meta_ct(label_eg,
            label_cg,
            p_thres=0.001,
            topn=0.3,
            save_gii=True,
            save_nii=False,
            mask=None,
            csv_prefix='roi_ct_removed',
            csv_dir_prefix='./data/meta_csv',
            out_dir_prefix='./results/meta'):
    models = {}

    surfix = '{}_{}/{}'.format(label_eg, label_cg, csv_prefix)
    out_dir = os.path.join(out_dir_prefix, surfix)
    if not os.path.isdir(out_dir):
        os.mkdir(out_dir)
    csv_dir = os.path.join(csv_dir_prefix, surfix)
    csvs = os.listdir(csv_dir)

    for f in csvs:
        csv_path = os.path.join(csv_dir, f)
        model = csv_meta_analysis(csv_path, model_type='random')
        models[f[:-4]] = model
    if save_gii:
        for annot, surf, lr in zip(annots, surfs, l_r):
            a = surface.load_surf_data(annot_dir.format(annot))
            a = a.astype(np.float32)
            b = surf_dir.format(surf)
            tmp_gii = nib.load(b)

            cor_model, _ = bon_cor(models, thres=p_thres)
            ll = np.unique(a).tolist()

            _, sorted_models = sort_models(cor_model, descend=False)
            top_es = sorted_models[int(len(sorted_models) *
                                       topn)].total_effect_size

            for k, v in cor_model.items():
                _id = np.float32(k)
                if v.total_effect_size <= top_es:
                    a[a == _id] = v.total_effect_size
                    if _id in ll:
                        ll.remove(_id)
            for i in ll:
                a[a == i] = 0

            gdarray = GiftiDataArray.from_array(a, intent=0)
            tmp_gii.remove_gifti_data_array_by_intent(0)
            tmp_gii.add_gifti_data_array(gdarray)
            path = os.path.join(
                out_dir,
                'es_{}_bon{}_top{}.gii'.format(lr,
                                               str(p_thres)[2:],
                                               str(topn)[1:]))
            nib.save(tmp_gii, path)
    if save_nii:
        nii_array = mask.data.astype(np.float32)
        p_array = nii_array

        ll = mask.labels.tolist()

        for k, v in models.items():
            _id = int(k)
            nii_array[nii_array == _id] = v.total_effect_size
            p_array[p_array == _id] = v.p
            ll.remove(_id)
        for i in ll:
            nii_array[nii_array == i] = 0

        path = os.path.join(out_dir, 'es.nii')
        p_path = os.path.join(out_dir, 'p.nii')
        utils.gen_nii(nii_array, mask.nii, path)
        utils.gen_nii(p_array, mask.nii, p_path)
    return models
예제 #5
0
def test_plot():
    result_model = main.csv_meta_analysis('../test_data/test.csv', )
    result_model.plot_forest()