コード例 #1
0
ファイル: test_dm.py プロジェクト: parenthetical-e/modelmodel
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")
コード例 #2
0
ファイル: rw.py プロジェクト: parenthetical-e/modelmodel
    # 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)
コード例 #3
0
        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
コード例 #4
0
        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()
コード例 #5
0
        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')
コード例 #6
0
    # 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)