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
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
def test_csv(): result_model = main.csv_meta_analysis('../test_data/test.csv', ) return result_model.get_results()
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
def test_plot(): result_model = main.csv_meta_analysis('../test_data/test.csv', ) result_model.plot_forest()