def test_5d(): # What happend to a 5d image, # we should get 4d images back xyz_img = data_dict['fmridata'] xyz_data = xyz_img.get_data() affine = xyz_img.affine xyz_data_5d = xyz_data.reshape(xyz_data.shape + (1,)) fived = XYZImage(xyz_data_5d, affine, 'ijktv') mask_data = data_dict['mask'].get_data() mask_data = mask_data.reshape(mask_data.shape + (1,)) mask4d = XYZImage(mask_data, affine, 'ijkv') nimages = data_dict['nimages'] ntotal = nimages - 1 ncomp = 5 p = pca_image(fived, 't', mask4d, ncomp=ncomp) yield assert_equal, _rank(p), ntotal yield assert_equal, p['basis_vectors over t'].shape, (nimages, ntotal) yield assert_equal, p['basis_projections'].shape, xyz_data.shape[:3] + (ncomp, 1) yield assert_equal, p['pcnt_var'].shape, (ntotal,) yield assert_almost_equal, p['pcnt_var'].sum(), 100. yield assert_equal, p['basis_projections'].axes.coord_names, ['i','j','k','PCA components','v'] yield assert_equal, p['basis_projections'].xyz_transform, xyz_img.xyz_transform xyz_data_5d = xyz_data.reshape(xyz_data.shape[:3] + (1,xyz_data.shape[3])) fived = XYZImage(xyz_data_5d, affine, list('ijkv') + ['group']) mask_data = data_dict['mask'].get_data() mask_data = mask_data.reshape(mask_data.shape + (1,)) mask4d = XYZImage(mask_data, affine, 'ijkv') nimages = data_dict['nimages'] ntotal = nimages - 1 ncomp = 5 # the axis does not have to be time p = pca_image(fived, mask=mask4d, ncomp=ncomp, axis='group') yield assert_equal, p['basis_vectors over group'].shape, (nimages, ntotal) yield assert_equal, p['basis_projections'].axes.coord_names, ['i','j','k','v','PCA components'] yield assert_equal, p['basis_projections'].shape, xyz_data.shape[:3] + (1, ncomp)
def test_PCANoMask(): nimages = data_dict['nimages'] ntotal = nimages - 1 ncomp = 5 p = pca_image(data_dict['fmridata'], ncomp=ncomp) yield assert_equal, _rank(p), ntotal yield assert_equal, p['basis_vectors over t'].shape, (nimages, ntotal) yield assert_equal, p['basis_projections'].shape, data_dict['mask'].shape + (ncomp,) yield assert_equal, p['pcnt_var'].shape, (ntotal,) yield assert_almost_equal, p['pcnt_var'].sum(), 100. yield assert_equal, p['basis_projections'].axes.coord_names, ['i','j','k','PCA components'] yield assert_equal, p['basis_projections'].xyz_transform, data_dict['mask'].xyz_transform
def test_PCAMask_nostandardize(): nimages = data_dict['nimages'] ntotal = nimages - 1 ncomp = 5 p = pca_image(data_dict['fmridata'], 't', data_dict['mask'], ncomp=ncomp, standardize=False) yield assert_equal(_rank(p), ntotal) yield assert_equal(p['basis_vectors over t'].shape, (nimages, ntotal)) yield assert_equal(p['basis_projections'].shape, data_dict['mask'].shape + (ncomp,)) yield assert_equal(p['pcnt_var'].shape, (ntotal,)) yield assert_almost_equal(p['pcnt_var'].sum(), 100.) yield assert_equal(p['basis_projections'].axes.coord_names, ['i','j','k','PCA components']) yield assert_equal(p['basis_projections'].xyz_transform, data_dict['mask'].xyz_transform)
def test_resid(): # Data is projected onto k=10 dimensional subspace then has its mean # removed. Should still have rank 10. k = 10 ncomp = 5 nimages = data_dict['nimages'] ntotal = k X = np.random.standard_normal((nimages, k)) p = pca_image(data_dict['fmridata'], ncomp=ncomp, design_resid=X) yield assert_equal, _rank(p), ntotal yield assert_equal, p['basis_vectors over t'].shape, (nimages, ntotal) yield assert_equal, p['basis_projections'].shape, data_dict['mask'].shape + (ncomp,) yield assert_equal, p['pcnt_var'].shape, (ntotal,) yield assert_almost_equal, p['pcnt_var'].sum(), 100. yield assert_equal, p['basis_projections'].axes.coord_names, ['i','j','k','PCA components'] yield assert_equal, p['basis_projections'].xyz_transform, data_dict['mask'].xyz_transform
def test_both(): k1 = 10 k2 = 8 ncomp = 5 nimages = data_dict['nimages'] ntotal = k1 X1 = np.random.standard_normal((nimages, k1)) X2 = np.random.standard_normal((nimages, k2)) p = pca_image(data_dict['fmridata'], ncomp=ncomp, design_resid=X2, design_keep=X1) yield assert_equal, _rank(p), ntotal yield assert_equal, p['basis_vectors over t'].shape, (nimages, ntotal) yield assert_equal, p['basis_projections'].shape, data_dict['mask'].shape + (ncomp,) yield assert_equal, p['pcnt_var'].shape, (ntotal,) yield assert_almost_equal, p['pcnt_var'].sum(), 100. yield assert_equal, p['basis_projections'].axes.coord_names, ['i','j','k','PCA components'] yield assert_equal, p['basis_projections'].xyz_transform, data_dict['mask'].xyz_transform