merged_df['ratio'] = ((merged_df['acc_over_chance'] / merged_df['acc_over_chance'].max())
                      * (merged_df['value'] / merged_df['value'].max()))
merged_df = merged_df[merged_df['acc_over_chance'] > 0]

# %%

if TARGET == 'block':
    fig_title = 'Stimulus prior decoding compared to pLeft kernel'
elif TARGET == 'stim-side':
    fig_title = 'Stimulus side decoding compared to stimonR kernel'
elif TARGET == 'reward':
    fig_title = 'Reward vs ommission decoding compared to correct kernel'
elif TARGET == 'choice':
    fig_title = 'Left vs right choice decoding compared to wheel kernel'

figure_style(font_scale=1.5)
f, ax1 = plt.subplots(1, 1, figsize=(6, 5), dpi=150, sharey=True)
ax1.scatter(acc_over_chance, pleft)
r, p = pearsonr(acc_over_chance, pleft)
m, b = np.polyfit(acc_over_chance, pleft, 1)
if p < 0.05:
    ax1.plot(np.arange(-50, 100, 0.1), m*np.arange(-50, 100, 0.1) + b, color='r')
ax1.set(xlabel='Decoding improvement over chance (% correct)',
        ylabel='Delta D squared of GLM fit',
        title='%s\n(r=%.2f, p=%.2f)' % (fig_title, r, p),
        xlim=XLIM, ylim=YLIM)

plt.tight_layout()
sns.despine(trim=True)
plt.savefig(join(FIG_PATH, 'Decoding', DECODER, 'decoding_vs_glm_%s' % TARGET))
Beispiel #2
0
# Remove cortical layers from brain region map
ba = atlas.AllenAtlas(25)
all_regions = combine_layers_cortex(ba.regions.acronym)

# Calculate average decoding performance per region
decode_regions = []
accuracy = []
for i, region in enumerate(decoding_result['region'].unique()):
    if np.sum(decoding_result['region'] == region) >= MIN_REC:
        decode_regions.append(region)
        accuracy.append(decoding_result.loc[decoding_result['region'] == region,
                                            'acc_over_chance'].mean())

f, axs1 = plt.subplots(1, 3, figsize=(30, 6))
figure_style(font_scale=2)
if CENTERED:
    plot_atlas(np.array(decode_regions), np.array(accuracy), ML, AP, DV, color_palette='RdBu_r',
               hemisphere='left', minmax=MINMAX, axs=axs1,
               custom_region_list=all_regions)
else:
    plot_atlas(np.array(decode_regions), np.array(accuracy), ML, AP, DV, color_palette='hot_r',
               hemisphere='left', minmax=MINMAX, axs=axs1,
               custom_region_list=all_regions)

if TARGET == 'stim-side':
    f.suptitle('Decoding of stimulus side')
elif TARGET == 'block':
    f.suptitle('Decoding of stimulus prior from pre-stim activity')
elif TARGET == 'blank':
    f.suptitle('Decoding of stimulus prior from blank trials')
    if bool_first:
        previous_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        bool_first = False
    else:
        try:
            this_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        except:
            break
        mov_left.append(np.sum(this_frame - previous_frame))
        previous_frame = this_frame
    if ts_left[len(mov_left)] > DURATION:
        break
cam_left.release()

# %% Plot

# smoothing
mov_body = np.convolve(mov_body, np.ones((5, )) / 5, mode='same')
mov_left = np.convolve(mov_left, np.ones((5, )) / 5, mode='same')

# normalize
mov_body = (mov_body - np.min(mov_body)) / np.max(mov_body)
mov_left = (mov_left - np.min(mov_left)) / np.max(mov_left)

figure_style(font_scale=4)
f, ax1 = plt.subplots(1, 1, figsize=(30, 10))
ax1.plot(ts_body[:len(mov_body)], mov_body, label='Body camera', lw=3)
ax1.plot(ts_left[:len(mov_left)], mov_left, label='Left camera', lw=3)
ax1.set(ylabel='Normalized movement energy', xlabel='Time (s)')
ax1.legend(frameon=False)
Beispiel #4
0
                      pre_time=PRE_TIME, post_time=POST_TIME,
                      classifier=DECODER, cross_validation='kfold-interleaved',
                      num_splits=5)

shuffle_block = decode(spks_region, clus_region, trial_times, trial_blocks,
                       pre_time=PRE_TIME, post_time=POST_TIME,
                       classifier=DECODER, cross_validation='kfold-interleaved',
                       num_splits=5, shuffle=True, iterations=ITERATIONS)

pseudo_block = decode(spks_region, clus_region, trial_times, trial_blocks,
                      pre_time=PRE_TIME, post_time=POST_TIME,
                      classifier=DECODER, cross_validation='kfold-interleaved',
                      num_splits=5, pseudo_blocks=True, iterations=ITERATIONS)

# %%
"""
figure_style()
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(25, 10), dpi=150)
ax1.bar(np.arange(7), [decode_block['accuracy'], phase_block['accuracy'].mean(),
                        shuffle_block['accuracy'].mean(), np.nan, decode_block['f1'],
                        phase_block['f1'].mean(), shuffle_block['f1'].mean()],
        yerr=[0, phase_block['accuracy'].std(), shuffle_block['accuracy'].std(), 0,
              0, phase_block['f1'].std(), shuffle_block['f1'].std()])
ax1.set(xticks=np.arange(7),
        xticklabels=['acc.', 'phase', 'pseudo blocks', '', 'f1', 'phase', 'pseudo blocks'],
        ylabel='Decoding performance', title='Region: %s' % REGION)

block_colors = [sns.color_palette('colorblind', as_cmap=True)[0],
                sns.color_palette('colorblind', as_cmap=True)[3]]
block_trans = np.append([0], np.array(np.where(np.diff(trial_blocks) != 0)) + 1)
block_trans = np.append(block_trans, [trial_blocks.shape[0]])
        session_uuids, subject, actions, stimuli, stim_side)
    model.load_or_train(nb_steps=2000, remove_old=False)
    params_stimside = model.get_parameters(parameter_type='posterior_mean')
    priors_stimside = model.compute_prior(actions, stimuli, stim_side)[0]

    # Fit previous action model
    model = exp_prev_action(
        join(save_path, 'Behavior', 'exp_smoothing_model_fits/'),
        session_uuids, subject, actions, stimuli, stim_side)
    model.load_or_train(nb_steps=2000, remove_old=False)
    params_prevaction = model.get_parameters(parameter_type='posterior_mean')
    priors_prevaction = model.compute_prior(actions, stimuli, stim_side)[0]

    # Plot prior
    f, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8), sharey=True)
    figure_style()
    if len(stimuli_arr) == 1:
        ax1.plot(pleft_arr, lw=2)
        ax1.plot(priors_stimside, lw=2)
    else:
        ax1.plot(pleft_arr[0][:len(stimuli_arr[0])], lw=2)
        ax1.plot(priors_stimside[0][:len(stimuli_arr[0])], lw=2)
    ax1.set(xlabel='Trials',
            ylabel='Prior',
            title='Stimulus side model (alpha: %.2f)' % params_stimside[0])
    if len(stimuli_arr) == 1:
        ax2.plot(pleft_arr, lw=2)
        ax2.plot(priors_prevaction, lw=2)
    else:
        ax2.plot(pleft_arr[0][:len(stimuli_arr[0])], lw=2)
        ax2.plot(priors_prevaction[0][:len(stimuli_arr[0])], lw=2)