Exemplo n.º 1
0
def test_fit_numpyro_serial():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=2,
        n_neurons=3,
        n_mice=4,
        dur=2,
    )

    for y in (set(df.columns) - set(index_cols)):
        trace, mcmc = fit_numpyro(
            y=df[y].values,
            treatment=trans(df['stim']),
            condition=trans(df['neuron']),
            group=trans(df['mouse']),
            progress_bar=True,
            model=models.model_hierarchical,
            n_draws=100,
            num_chains=1,
        )
        # chart = visualization.plot_posterior_altair(trace,
        #                                             df,
        #                                             b_name='slope_per_condition',
        #                                             x='stim',
        #                                             group_name='neuron'
        #                                             )
        #
        # assert ((type(chart) == FacetChart) |
        #         (type(chart) == Chart) |
        #         (type(chart) == LayerChart)), print(f'{type(chart)}')
        trace.posterior.to_dataframe().pipe(ck.has_no_nans)
Exemplo n.º 2
0
def test_fit_lme_w_data_condition():
    df, df_monster, index_cols, _ = generate_fake_spikes(n_trials=25)

    window = LMERegression(df=df, y='isi', treatment='stim', group='mouse',
                           condition='neuron_x_mouse')

    window.fit(do_make_change='divide', )
    window.plot().display()
    window.facet(column='neuron_x_mouse', width=300).display()
Exemplo n.º 3
0
def test_fake_spikes_explore():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=2,
        n_neurons=3,
        n_mice=4,
        dur=2,
    )
    charts = fake_spikes_explore(df, df_monster, index_cols)
    for chart in charts:
        assert ((type(chart) == FacetChart) | (type(chart) == Chart) |
                (type(chart) == LayerChart)), print(f'{type(chart)}')
        chart.display()
Exemplo n.º 4
0
def test_slopes():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=5, n_neurons=3, n_mice=4, dur=7, mouse_response_slope=16)
    bw = BayesRegression(df=df,
                         y='isi',
                         treatment='stim',
                         condition='neuron',
                         group='mouse')
    bw.fit(model=models.model_hierarchical,
           do_make_change='subtract',
           fold_change_index_cols=('stim', 'mouse', 'neuron'))
    bw.plot()
Exemplo n.º 5
0
def test_plot_data_slope_trials():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=2,
        n_neurons=3,
        n_mice=4,
        dur=2,
    )
    chart = plot_data_slope_trials(df=df,
                                   x='stim:O',
                                   y='log_firing_rate',
                                   color='neuron:N',
                                   detail='i_trial')
    chart.display()
Exemplo n.º 6
0
def test_generate_fake_spikes():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes()
    df = df.set_index(list(index_cols))
    assert abs(
        firing_rates.sel(Stim=1).isel(Neuron=0, Mouse=0) -
        firing_rates.sel(Stim=0).isel(Neuron=0, Mouse=0)) < 1

    assert (firing_rates.sel(Stim=1).isel(Neuron=0, Mouse=-1) -
            firing_rates.sel(Stim=0).isel(Neuron=0, Mouse=-1)) > 1

    assert abs(
        firing_rates.sel(Stim=1).isel(Neuron=-1, Mouse=-1) -
        firing_rates.sel(Stim=0).isel(Neuron=-1, Mouse=-1)) < 1

    df.pipe(ck.has_no_nans)
    df_monster.pipe(ck.has_no_nans)
Exemplo n.º 7
0
def test_fit_lme_w_condition():
    from numpy.linalg import LinAlgError
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(n_trials=20,
                                                                    n_neurons=7,
                                                                    n_mice=6,
                                                                    dur=7,
                                                                    mouse_response_slope=12,
                                                                    overall_stim_response_strength=45)
    try:
        reg = LMERegression(df=df, y='isi', treatment='stim', condition='neuron_x_mouse', group='mouse', )
        assert reg.fit().data_and_posterior is not None
        reg.plot(x=reg.window.condition[0]).display()
        reg.plot(x='neuron_x_mouse').display()
        reg.facet(column='neuron_x_mouse', width=300).display()
        assert len(reg.charts) > 0
    except LinAlgError as e:
        print(e)
Exemplo n.º 8
0
def test_compare_models():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=10,
        n_neurons=10,
        n_mice=4,
        dur=2,
    )
    compare_models(
        df=df,
        models={
            'no_neuron': models.model_hierarchical,
            'no_neuron_or_treatment': models.model_hierarchical,
            'no-treatment': models.model_hierarchical,
            'treatment': models.model_hierarchical,
            'student': models.model_hierarchical,
            'lognogmal': models.model_hierarchical,
        },
        extra_model_args=[{
            'treatment': 'stim',
            'condition': None
        }, {
            'treatment': None,
            'condition': None
        }, {
            'treatment': None,
            'condition': 'neuron'
        }, {
            'treatment': 'stim',
            'condition': 'neuron'
        }, {
            'treatment': 'stim',
            'condition': 'neuron',
            'dist_y': 'student'
        }, {
            'treatment': 'stim',
            'condition': 'neuron',
            'dist_y': 'lognormal'
        }],
        y='isi',
        group='mouse',
        parallel=True,
        plotose=True,
        # num_chains=1,
        num_warmup=100,
        n_draws=1000,
    )
Exemplo n.º 9
0
def test_fit_numpyro_gamma():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=2,
        n_neurons=3,
        n_mice=4,
        dur=2,
    )

    trace, mcmc = fit_numpyro(
        y=df['isi'].values,
        treatment=trans(df['stim']),
        condition=trans(df['neuron']),
        group=trans(df['mouse']),
        progress_bar=True,
        model=models.model_hierarchical,
        dist_y='gamma',
        n_draws=100,
        num_chains=1,
    )
Exemplo n.º 10
0
def test_fit_numpyro_parallel():
    df, df_monster, index_cols, firing_rates = generate_fake_spikes()
    # df = df.set_index(list(index_cols))
    meas = (set(df.columns) - set(index_cols))

    traces = Parallel(
        n_jobs=-1,
        verbose=2,
        # backend='multiprocessing'
    )(delayed(fit_numpyro)(y=y,
                           treatment=(df['stim']).astype(int).values,
                           condition=trans(df['neuron']),
                           group=trans(df['mouse']),
                           progress_bar=False,
                           model=models.model_hierarchical,
                           n_draws=10) for y in [df[y].values for y in meas])
    assert type(traces[0][0].posterior) == xr.Dataset
    [
        trace[0].posterior.to_dataframe().pipe(ck.has_no_nans)
        for trace in traces
    ]
Exemplo n.º 11
0
def test_estimate_posteriors_slope_uneven_n_data_per_condition():
    # Trying to reproduce Uneven number of entries in conditions! Try setting do_take_mean=True
    df, df_monster, index_cols, firing_rates = generate_fake_spikes(
        n_trials=10,
        n_neurons=3,
        n_mice=4,
        dur=2,
    )
    df = df.drop(df[(df['i_trial'] == 0) &
                    # (df['neuron_x_mouse'] == '0m0bayes') &
                    (df['stim'] == 0)].index)
    window = BayesRegression(df=df,
                             y='isi',
                             treatment='stim',
                             condition='neuron',
                             group='mouse',
                             add_data=True)
    window.fit(models.model_hierarchical, do_make_change='divide')

    chart = window.plot(x='neuron', column='neuron', row='mouse')
    chart.display()
    chart = window.plot(x='neuron', column='neuron', row='mouse')
    chart.display()
Exemplo n.º 12
0
from bayes_window.visualization import plot_posterior

from bayes_window.utils import load_radon

from pytest import mark
import os

os.environ['bayes_window_test_mode'] = 'True'

df_radon = load_radon()

dfl, _, _, _ = generate_fake_lfp(n_trials=5)

df, df_monster, index_cols, firing_rates = generate_fake_spikes(
    n_trials=2,
    n_neurons=3,
    n_mice=4,
    dur=4,
)


# @mark.parametrize('add_data', [True, False])
# @mark.parametrize('add_box', [True, False])
@mark.parametrize('add_condition_slope', [False, True])
@mark.parametrize('add_group_slope', [False, True])
# @mark.parametrize('do_mean_over_trials', [True, False])
@mark.parametrize('do_make_change', ['subtract', 'divide', False])
def test_radon(
        # add_data, add_box,
        add_condition_slope,
        add_group_slope,
        # do_mean_over_trials,