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)
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()
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()
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()
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()
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)
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)
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, )
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, )
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 ]
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()
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,