def test_orthogonalize_dense(collection): transform.factor(collection, 'trial_type', sep=sep) # Store pre-orth variables needed for tests pg_pre = collection['trial_type/parametric gain'].to_dense(10) rt = collection['RT'].to_dense(10) # Orthogonalize and store result transform.orthogonalize(collection, variables='trial_type/parametric gain', other='RT', dense=True, groupby=['run', 'subject']) pg_post = collection['trial_type/parametric gain'] # Verify that the to_dense() calls result in identical indexing ent_cols = ['subject', 'run'] assert pg_pre.to_df()[ent_cols].equals(rt.to_df()[ent_cols]) assert pg_post.to_df()[ent_cols].equals(rt.to_df()[ent_cols]) vals = np.c_[rt.values, pg_pre.values, pg_post.values] df = pd.DataFrame(vals, columns=['rt', 'pre', 'post']) groupby = rt.get_grouper(['run', 'subject']) pre_r = df.groupby(groupby).apply(lambda x: x.corr().iloc[0, 1]) post_r = df.groupby(groupby).apply(lambda x: x.corr().iloc[0, 2]) assert (pre_r > 0.2).any() assert (post_r < 0.0001).all()
def test_orthogonalize_sparse(collection): pg_pre = collection['parametric gain'].values rt = collection['RT'].values transform.orthogonalize(collection, variables='parametric gain', other='RT') pg_post = collection['parametric gain'].values vals = np.c_[rt.values, pg_pre.values, pg_post.values] df = pd.DataFrame(vals, columns=['rt', 'pre', 'post']) ents = collection['RT'].index groupby = pd.core.groupby._get_grouper(ents, ['run', 'subject'])[0] pre_r = df.groupby(groupby).apply(lambda x: x.corr().iloc[0, 1]) post_r = df.groupby(groupby).apply(lambda x: x.corr().iloc[0, 2]) assert (pre_r > 0.2).any() assert (post_r < 0.0001).all()