예제 #1
0
 def test_calc_rdm_movie_rdm_movie_poisson(self):
     noise = np.random.randn(10, 5)
     noise = np.matmul(noise.T, noise)
     rdm = rsr.calc_rdm_movie(self.test_data_time_balanced,
                              method='poisson',
                              descriptor='conds',
                              noise=noise)
     assert rdm.n_cond == 5
예제 #2
0
 def test_calc_rdm_movie_correlation(self):
     rdm = rsr.calc_rdm_movie(self.test_data_time,
                              descriptor='conds',
                              method='correlation',
                              time_descriptor='time')
     assert rdm.n_cond == 6
     assert len([r for r in rdm]) == 15
     assert rdm.rdm_descriptors['time'][0] == 0.0
예제 #3
0
 def test_calc_rdm_movie_crossnobis(self):
     rdm = rsr.calc_rdm_movie(self.test_data_time,
                              descriptor='conds',
                              method='crossnobis',
                              time_descriptor='time',
                              cv_descriptor='fold')
     assert rdm.n_cond == 6
     assert len([r for r in rdm]) == 15
     assert rdm.rdm_descriptors['time'][0] == 0.0
예제 #4
0
 def test_calc_rdm_movie_binned(self):
     time = self.test_data_time.time_descriptors['time']
     bins = np.reshape(time, [5, 3])
     rdm = rsr.calc_rdm_movie(self.test_data_time,
                              descriptor='conds',
                              method='mahalanobis',
                              time_descriptor='time',
                              bins=bins)
     assert rdm.n_cond == 6
     assert len([r for r in rdm]) == 5
     assert rdm.rdm_descriptors['time'][0] == np.mean(time[:3])
예제 #5
0
    def test_temporal_rsa(self):
        import numpy as np
        import matplotlib.pyplot as plt
        import pyrsa
        import pickle
        from pyrsa.rdm import calc_rdm_movie

        import os
        path = os.path.dirname(os.path.abspath(__file__))
        dat = pickle.load(
            open(
                os.path.join(path, '..', 'demos', "TemporalSampleData",
                             "meg_sample_data.pkl"), "rb"))
        measurements = dat['data']
        cond_names = [x for x in dat['cond_names'].keys()]
        cond_idx = dat['cond_idx']
        channel_names = dat['channel_names']
        times = dat['times']
        print(
            'there are %d observations (trials), %d channels, and %d time-points\n'
            % (measurements.shape))
        print('conditions:')
        print(cond_names)

        fig, ax = plt.subplots(1, 2, figsize=(12, 4))
        ax = ax.flatten()
        for jj, chan in enumerate(channel_names[:2]):
            for ii, cond_ii in enumerate(np.unique(cond_idx)):
                mn = measurements[cond_ii == cond_idx, jj, :].mean(0).squeeze()
                ax[jj].plot(times, mn, label=cond_names[ii])
                ax[jj].set_title(chan)
        ax[jj].legend()
        tim_des = {'time': times}
        des = {'session': 0, 'subj': 0}
        obs_des = {'conds': cond_idx}
        chn_des = {'channels': channel_names}
        data = pyrsa.data.TemporalDataset(measurements,
                                          descriptors=des,
                                          obs_descriptors=obs_des,
                                          channel_descriptors=chn_des,
                                          time_descriptors=tim_des)
        data.sort_by('conds')
        print('shape of original measurements')
        print(data.measurements.shape)
        data_split_time = data.split_time('time')
        print('\nafter splitting')
        print(len(data_split_time))
        print(data_split_time[0].measurements.shape)
        print('shape of original measurements')
        print(data.measurements.shape)
        data_subset_time = data.subset_time('time', t_from=-.1, t_to=.5)
        print('\nafter subsetting')
        print(data_subset_time.measurements.shape)
        print(data_subset_time.time_descriptors['time'][0])
        bins = np.reshape(tim_des['time'], [-1, 2])
        print(len(bins))
        print(bins[0])
        print('shape of original measurements')
        print(data.measurements.shape)
        data_binned = data.bin_time('time', bins=bins)
        print('\nafter binning')
        print(data_binned.measurements.shape)
        print(data_binned.time_descriptors['time'][0])
        print('shape of original measurements')
        print(data.measurements.shape)
        data_dataset = data.convert_to_dataset('time')
        print('\nafter binning')
        print(data_dataset.measurements.shape)
        print(data_dataset.obs_descriptors['time'][0])
        rdms_data = calc_rdm_movie(data,
                                   method='euclidean',
                                   descriptor='conds')
        print(rdms_data)
        rdms_data_binned = calc_rdm_movie(data,
                                          method='euclidean',
                                          descriptor='conds',
                                          bins=bins)
        print(rdms_data_binned)
        plt.figure(figsize=(10, 15))
        # add formated time as rdm_descriptor
        rdms_data_binned.rdm_descriptors['time_formatted'] = [
            '%0.0f ms' % (np.round(x * 1000, 2))
            for x in rdms_data_binned.rdm_descriptors['time']
        ]

        pyrsa.vis.show_rdm(rdms_data_binned,
                           do_rank_transform=False,
                           pattern_descriptor='conds',
                           rdm_descriptor='time_formatted')
        from pyrsa.rdm import get_categorical_rdm
        rdms_model_in = get_categorical_rdm(['%d' % x for x in range(4)])
        rdms_model_lr = get_categorical_rdm(['l', 'r', 'l', 'r'])
        rdms_model_av = get_categorical_rdm(['a', 'a', 'v', 'v'])
        model_names = ['independent', 'left/right', 'audio/visual']
        # append in one RDMs object
        model_rdms = rdms_model_in
        model_rdms.append(rdms_model_lr)
        model_rdms.append(rdms_model_av)
        model_rdms.rdm_descriptors['model_names'] = model_names
        model_rdms.pattern_descriptors['cond_names'] = cond_names
        plt.figure(figsize=(10, 10))
        pyrsa.vis.show_rdm(model_rdms,
                           rdm_descriptor='model_names',
                           pattern_descriptor='cond_names')
        from pyrsa.rdm import compare
        r = []
        for mod in model_rdms:
            r.append(compare(mod, rdms_data_binned, method='cosine'))
        for i, r_ in enumerate(r):
            plt.plot(rdms_data_binned.rdm_descriptors['time'],
                     r_.squeeze(),
                     label=model_names[i])
        plt.xlabel('time')
        plt.ylabel('model-data cosine similarity')
        plt.legend()