def test_convolve_hrf(): # Create HRF to convolve with dg = hrf.double_gamma( width=32, TR=1, a1=6.0, a2=12., b1=0.9, b2=0.9, c=0.35 ) # ----------- # 1d convolve # ----------- dm1 = np.zeros(32) dm1[0] = 1 assert np.allclose(dm.convolve_hrf(dm1, dg), dg), ( "1d convolve doesn't match template") assert np.allclose(dm.convolve_hrf(dm1, dg, [0]), dg), ( "1d convolve cols malfunction") # ----------- # 2d convolve # ----------- dm1 = np.zeros([32, 2]) dm1[0,:] = 1 # Basic 2d assert np.allclose(dm.convolve_hrf(dm1, dg), np.vstack([dg,dg]).T), ( "2d doesn't match template") # Parial dm assert np.allclose(dm.convolve_hrf(dm1[:,0], dg), dg), ( "2d (col 0) convolve doesn't match template") # Select cols assert np.allclose(dm.convolve_hrf(dm1, dg, [0]), dg[:,np.newaxis]), ( "2d cols (0) malfunction") assert np.allclose(dm.convolve_hrf(dm1, dg, [1]), dg[:,np.newaxis]), ( "2d cols (1) malfunction") assert np.allclose(dm.convolve_hrf(dm1, dg, [0,1]), np.vstack([dg,dg]).T), ( "2d cols (0,1) malfunction")
# Create data if args.behave == 'learn': trials, acc, p, prng = behave.learn( n_cond, args.n_trials, loc=prng.normal(3, .3), prng=prng ) elif args.behave == 'random': trials, acc, p, prng = behave.random( n_cond, args.n_trials, prng=prng ) else: raise ValueError('--behave not understood') df, rlpars = reinforce.rescorla_wagner(trials, acc, p, prng=prng) # Convolve with HRF df = convolve_hrf(df, dg(), asbold) # Orth select regressors to_orth = [['box', bold] for bold in asbold if bold != 'box'] for orth in to_orth: df[orth[1]+'_o'] = orthogonalize(df, orth)[orth[1]] # Do the regressions n_results = {} for model_name, model, test, hypoth in zip(*model_configs): for bold_name in asbold: l = df.shape[0] noi, prng = white(l, prng=prng) df['bold'] = create_bold([df[bold_name].values], None, noi)
for bold_name in asbold: l = df_bold.shape[0] noi, prng = white(l, prng=prng) df_bold['bold'] = create_bold( [df_bold[bold_name].values], dg(), noi ) # Create predictor for alpha_pred in alphas: df_pred, _ = reinforce.rescorla_wagner( trials, acc, p, alpha=alpha_pred, prng=prng ) df_pred = convolve_hrf(df_pred, dg(), asbold) # Orth select predictors to_orth = [['box', too] for too in asbold if too != 'box'] for orth in to_orth: df_pred[orth[1]+'_o'] = orthogonalize( df_pred, orth )[orth[1]] # Hold bold constant in the predictor loops df_pred['bold'] = df_bold['bold'] # Finally! Get modeling. for model_name, model, test, hypoth in zip(*model_configs): # Regress
for bold_name in asbold: l = df_bold.shape[0] noi, prng = white(l, prng=prng) df_bold['bold'] = create_bold([df_bold[bold_name].values], dg(), noi) # Create predictor for alpha_pred in alphas: df_pred, _ = reinforce.rescorla_wagner(trials, acc, p, alpha=alpha_pred, prng=prng) df_pred = convolve_hrf(df_pred, dg(), asbold) # Orth select predictors to_orth = [['box', too] for too in asbold if too != 'box'] for orth in to_orth: df_pred[orth[1] + '_o'] = orthogonalize(df_pred, orth)[orth[1]] # Hold bold constant in the predictor loops df_pred['bold'] = df_bold['bold'] # Finally! Get modeling. for model_name, model, test, hypoth in zip(*model_configs): # Regress smo = smf.ols(model, data=df_pred).fit()
trial, acc, p, prng = behave.learn( args.n_cond, args.n_trials, loc=prng.normal(3, .3), prng=prng ) elif args.behave == 'random': trial, acc, p, prng = behave.random( args.n_cond, args.n_trials, prng=prng ) else: raise ValueError('--behave not understood') df, rlpars = reinforce.rescorla_wagner( trial, acc, p, alpha=args.alpha, prng=prng ) del df['rand'] l = trial.shape[0] df['count'] = np.repeat(n, l) df['index'] = np.arange(l, dtype=np.int) dfs.append(df) df = pd.concat(dfs, axis=0) if args.convolve: tocon = ['box', 'acc', 'p', 'rpe', 'value'] condf = convolve_hrf(df, dg(), tocon) for con in tocon: df[con] = condf[con] df.to_csv(args.name, index=False, float_format='%.8f')
# Create data if args.behave == 'learn': trials, acc, p, prng = behave.learn( n_cond, args.n_trials, loc=prng.normal(3, .3), prng=prng ) elif args.behave == 'random': trials, acc, p, prng = behave.random( n_cond, args.n_trials, prng=prng ) else: raise ValueError('--behave not understood') df, rlpars = reinforce.rescorla_wagner(trials, acc, p, prng=prng) # Convolve with HRF df = convolve_hrf(df, dg(), asbold) # Orth select regressors to_orth = [['box', too] for too in asbold if too != 'box'] for orth in to_orth: df[orth[1]+'_o'] = orthogonalize(df, orth)[orth[1]] # Do the regressions n_results = {} for model_name, model, test, hypoth in zip(*model_configs): for bold_name in asbold: l = df.shape[0] noi, prng = white(l, prng=prng) # Make bold df['bold'] = create_bold([df[bold_name].values], None, noi)