def ttest_stats(group1, group2, dst, cond): """t-Test on differences between the individual voxels in group1 and group2, group is a array of voxelizations""" #make sure destination dir exists if not os.path.exists(dst): os.mkdir(dst) g1 = stat.readDataGroup(group1) g2 = stat.readDataGroup(group2) tvals, pvals = stats.ttest_ind(g1, g2, axis=0, equal_var=False) np.save(os.path.join(dst, "tvals_%s.npy" % cond), tvals) np.save(os.path.join(dst, "pvals_%s.npy" % cond), pvals) print( "\nsaved t-statistics and p-values corresponding to registered voxels as numpy arrays \n\n." ) pvals_flat = np.ravel(pvals) tvals_flat = np.ravel(tvals) pvals_flat = pvals_flat[~np.isnan(pvals_flat)] tvals_flat = tvals_flat[~np.isnan(tvals_flat)] pvals_flat.shape df = pd.DataFrame() df['tvalues'] = tvals_flat df['pvalues'] = pvals_flat df.to_csv(os.path.join(dst, "tstats_no_nans_%s.csv" % cond)) return
xx + "/cell_region_assignment_99percentile_no_erosion_20190313/cells_heatmap.tif" for xx in control_dorsal_up ] obv_du_heatmaps = [ xx + "/cell_region_assignment_99percentile_no_erosion_20190313/cells_heatmap.tif" for xx in observers_dorsal_up ] dmn_du_heatmaps = [ xx + "/cell_region_assignment_99percentile_no_erosion_20190313/cells_heatmap.tif" for xx in demonstrator_dorsal_up ] c = stat.readDataGroup(ctrl_du_heatmaps) o = stat.readDataGroup(obv_du_heatmaps) d = stat.readDataGroup(dmn_du_heatmaps) #comparisons conds = [ "observer_v_control", "demonstrator_v_observer", "demonstrator_v_control" ] comparisons = [[o.astype("float"), c.astype("float")], [d.astype("float"), o.astype("float")], [d.astype("float"), c.astype("float")]] final_dst = pvaldst + "/dorsal_up" for i, comp in enumerate(comparisons): print(conds[i])
#set up heatmaps per condition mm_du_heatmaps = [ os.path.join(src, os.path.join(xx, "cells_heatmap.tif")) for xx in os.listdir(src) if "mm" in xx ] fm_du_heatmaps = [ os.path.join(src, os.path.join(xx, "cells_heatmap.tif")) for xx in os.listdir(src) if "fm" in xx ] mf_du_heatmaps = [ os.path.join(src, os.path.join(xx, "cells_heatmap.tif")) for xx in os.listdir(src) if "mf" in xx ] #read all the heatmaps belonging to each group mm = stat.readDataGroup(mm_du_heatmaps) fm = stat.readDataGroup(fm_du_heatmaps) mf = stat.readDataGroup(mf_du_heatmaps) #find mean and standard deviation of heatmap in each group mm_mean = np.mean(mm, axis=0) mm_std = np.std(mm, axis=0) fm_mean = np.mean(fm, axis=0) fm_std = np.std(fm, axis=0) mf_mean = np.mean(mf, axis=0) mf_std = np.std(mf, axis=0) #write mean and standard dev maps to destination tifffile.imsave(os.path.join(pvaldst, "mm_mean.tif"),
# Voxel-based statistics: ######################### #Load the data (heat maps generated previously ) group1 = ['/home/yourname/experiment/sample1/cells_heatmap.tif', '/home/yourname/experiment/sample2/cells_heatmap.tif', '/home/yourname/experiment/sample3/cells_heatmap.tif', '/home/yourname/experiment/sample4/cells_heatmap.tif'] group2 = ['/home/yourname/experiment/sample5/cells_heatmap.tif', '/home/yourname/experiment/sample6/cells_heatmap.tif', '/home/yourname/experiment/sample7/cells_heatmap.tif', '/home/yourname/experiment/sample8/cells_heatmap.tif'] g1 = stat.readDataGroup(group1); g2 = stat.readDataGroup(group2); #Generated average and standard deviation maps ############################################## g1a = numpy.mean(g1,axis = 0); g1s = numpy.std(g1,axis = 0); g2a = numpy.mean(g2,axis = 0); g2s = numpy.std(g2,axis = 0); io.writeData(os.path.join(baseDirectory, 'group1_mean.raw'), rsp.sagittalToCoronalData(g1a)); io.writeData(os.path.join(baseDirectory, 'group1_std.raw'), rsp.sagittalToCoronalData(g1s));
#Load the data (heat maps generated previously ) group1 = [ '/home/yourname/experiment/sample1/cells_heatmap.tif', '/home/yourname/experiment/sample2/cells_heatmap.tif', '/home/yourname/experiment/sample3/cells_heatmap.tif', '/home/yourname/experiment/sample4/cells_heatmap.tif' ] group2 = [ '/home/yourname/experiment/sample5/cells_heatmap.tif', '/home/yourname/experiment/sample6/cells_heatmap.tif', '/home/yourname/experiment/sample7/cells_heatmap.tif', '/home/yourname/experiment/sample8/cells_heatmap.tif' ] g1 = stat.readDataGroup(group1) g2 = stat.readDataGroup(group2) #Generated average and standard deviation maps ############################################## g1a = numpy.mean(g1, axis=0) g1s = numpy.std(g1, axis=0) g2a = numpy.mean(g2, axis=0) g2s = numpy.std(g2, axis=0) io.writeData(os.path.join(baseDirectory, 'group1_mean.raw'), rsp.sagittalToCoronalData(g1a)) io.writeData(os.path.join(baseDirectory, 'group1_std.raw'), rsp.sagittalToCoronalData(g1s))
def generate_p_value_maps(src): """ generates p-value maps as per ClearMap/analysis.py #TODO: generalise function """ #Load the data (heat maps generated previously ) #make groups groupA = [ os.path.join(flds, fld) for fld in os.listdir(flds) if conditions[os.path.basename(fld)] == "homecage_control" ] groupA.sort() groupB = [ os.path.join(flds, fld) for fld in os.listdir(flds) if conditions[os.path.basename(fld)] == "CNO_control_no_reversal" ] groupB.sort() groupC = [ os.path.join(flds, fld) for fld in os.listdir(flds) if conditions[os.path.basename(fld)] == "CNO_control_reversal" ] groupC.sort() groupD = [ os.path.join(flds, fld) for fld in os.listdir(flds) if conditions[os.path.basename(fld)] == "DREADDs" ] groupC.sort() group_a = [xx + "/cells_heatmap_60um_erosion.tif" for xx in groupA] group_b = [xx + "/cells_heatmap_60um_erosion.tif" for xx in groupB] group_c = [xx + "/cells_heatmap_60um_erosion.tif" for xx in groupC] group_d = [xx + "/cells_heatmap_60um_erosion.tif" for xx in groupD] grp_a = stat.readDataGroup(group_a) grp_b = stat.readDataGroup(group_b) grp_c = stat.readDataGroup(group_c) grp_d = stat.readDataGroup(group_d) #Generated average and standard deviation maps ############################################## grp_aa = np.mean(grp_a, axis=0) grp_as = np.std(grp_a, axis=0) grp_ba = np.mean(grp_b, axis=0) grp_bs = np.std(grp_b, axis=0) grp_ca = np.mean(grp_c, axis=0) grp_cs = np.std(grp_c, axis=0) grp_da = np.mean(grp_d, axis=0) grp_ds = np.std(grp_d, axis=0) io.writeData(os.path.join(src, "group_a_mean.raw"), rsp.sagittalToCoronalData(grp_aa)) io.writeData(os.path.join(src, "group_a_std.raw"), rsp.sagittalToCoronalData(grp_as)) io.writeData(os.path.join(src, "group_b_mean.raw"), rsp.sagittalToCoronalData(grp_ba)) io.writeData(os.path.join(src, "group_b_std.raw"), rsp.sagittalToCoronalData(grp_bs)) io.writeData(os.path.join(src, "group_c_mean.raw"), rsp.sagittalToCoronalData(grp_ca)) io.writeData(os.path.join(src, "group_c_std.raw"), rsp.sagittalToCoronalData(grp_cs)) io.writeData(os.path.join(src, "group_d_mean.raw"), rsp.sagittalToCoronalData(grp_da)) io.writeData(os.path.join(src, "group_d_std.raw"), rsp.sagittalToCoronalData(grp_ds)) #Generate the p-values map ########################## #first comparison #pcutoff: only display pixels below this level of significance pvals, psign = stat.tTestVoxelization(grp_a.astype("float"), grp_d.astype("float"), signed=True, pcutoff=0.05) #color the p-values according to their sign (defined by the sign of the difference of the means between the 2 groups) pvalsc = stat.colorPValues(pvals, psign, positive=[0, 1], negative=[1, 0]) io.writeData(os.path.join(src, "pvalues_homecage_control_vs_DREADDs.tif"), rsp.sagittalToCoronalData(pvalsc.astype("float32"))) #second comparison pvals, psign = stat.tTestVoxelization(grp_a.astype("float"), grp_b.astype("float"), signed=True, pcutoff=0.05) pvalsc = stat.colorPValues(pvals, psign, positive=[0, 1], negative=[1, 0]) io.writeData( os.path.join( src, "pvalues_homecage_control_vs_CNO_control_no_reversal.tif"), rsp.sagittalToCoronalData(pvalsc.astype("float32"))) #third comparison pvals, psign = stat.tTestVoxelization(grp_b.astype("float"), grp_c.astype("float"), signed=True, pcutoff=0.05) pvalsc = stat.colorPValues(pvals, psign, positive=[0, 1], negative=[1, 0]) io.writeData( os.path.join( src, "pvalues_CNO_control_no_reversal_vs_CNO_control_reversal.tif"), rsp.sagittalToCoronalData(pvalsc.astype("float32"))) #fourth comparison pvals, psign = stat.tTestVoxelization(grp_c.astype("float"), grp_d.astype("float"), signed=True, pcutoff=0.05) pvalsc = stat.colorPValues(pvals, psign, positive=[0, 1], negative=[1, 0]) io.writeData( os.path.join(src, "pvalues_CNO_control_reversal_vs_DREADDs.tif"), rsp.sagittalToCoronalData(pvalsc.astype("float32")))
group1_roi = ['/home/yourname/experiment/sample1/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample2/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample3/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample4/cells_transformed_to_Atlas.npy'] group2_roi = ['/home/yourname/experiment/sample5/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample6/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample7/cells_transformed_to_Atlas.npy', '/home/yourname/experiment/sample8/cells_transformed_to_Atlas.npy'] # Voxel-based statistics: ######################### #Load the data (heat maps generated previously ) g1 = stat.readDataGroup(group1vox); g2 = stat.readDataGroup(group2vox); #Generated average and standard deviation maps ############################################## g1a = numpy.mean(g1,axis = 0); g1s = numpy.std(g1,axis = 0); g2a = numpy.mean(g2,axis = 0); g2s = numpy.std(g2,axis = 0); io.writeData(os.path.join(baseDirectory, 'group1_mean.raw'), rsp.sagittalToCoronalData(g1a)); io.writeData(os.path.join(baseDirectory, 'group1_std.raw'), rsp.sagittalToCoronalData(g1s)); io.writeData(os.path.join(baseDirectory, 'group2_fast_mean.raw'), rsp.sagittalToCoronalData(g2a)); io.writeData(os.path.join(baseDirectory, 'group2_fast_std.raw'), rsp.sagittalToCoronalData(g2s));