Linear mixed effects
Contents
Linear mixed effects¶
from bayes_window import models, BayesWindow, LMERegression
from bayes_window.generative_models import generate_fake_spikes, generate_fake_lfp
import numpy as np
df, df_monster, index_cols, _ = generate_fake_lfp(mouse_response_slope=8,
n_trials=40)
LFP¶
Without data overlay
bw = LMERegression(df=df, y='Log power', treatment='stim', group='mouse')
bw.fit(add_data=False)
bw.plot().display()
Using formula Log_power ~ C(stim, Treatment) + (1 | mouse)
Coef. Std.Err. z P>|z| [0.025 \
Intercept 0.030
C(stim, Treatment)[T.1] 0.088 0.021 4.162 0.000 0.047
1 | mouse -0.173 165065.177 -0.000 1.000 -323521.975
Group Var 0.000
0.975]
Intercept
C(stim, Treatment)[T.1] 0.130
1 | mouse 323521.629
Group Var
changing x to :Q
changing x to :Q
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/base/model.py:566: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
warnings.warn("Maximum Likelihood optimization failed to "
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2200: ConvergenceWarning: Retrying MixedLM optimization with lbfgs
warnings.warn(
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2237: ConvergenceWarning: The MLE may be on the boundary of the parameter space.
warnings.warn(msg, ConvergenceWarning)
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2261: ConvergenceWarning: The Hessian matrix at the estimated parameter values is not positive definite.
warnings.warn(msg, ConvergenceWarning)
bw.data_and_posterior
index | center interval | Std.Err. | z | p | higher interval | lower interval | zero | |
---|---|---|---|---|---|---|---|---|
0 | C(stim, Treatment)[T.1] | 0.088 | 0.021 | 4.162 | 0.0 | 0.047 | 0.13 | 0 |
With data overlay¶
bw = LMERegression(df=df, y='Log power', treatment='stim', group='mouse')
try:
bw.fit(add_data=True, do_make_change='subtract');
bw.plot()
except NotImplementedError:
print('\n Data addition to LME is not implemented')
Using formula Log_power ~ C(stim, Treatment) + (1 | mouse)
Coef. Std.Err. z P>|z| [0.025 \
Intercept 0.030
C(stim, Treatment)[T.1] 0.088 0.021 4.162 0.000 0.047
1 | mouse -0.173 165065.177 -0.000 1.000 -323521.975
Group Var 0.000
0.975]
Intercept
C(stim, Treatment)[T.1] 0.130
1 | mouse 323521.629
Group Var
Data addition to LME is not implemented
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/base/model.py:566: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
warnings.warn("Maximum Likelihood optimization failed to "
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2200: ConvergenceWarning: Retrying MixedLM optimization with lbfgs
warnings.warn(
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2237: ConvergenceWarning: The MLE may be on the boundary of the parameter space.
warnings.warn(msg, ConvergenceWarning)
/home/m/anaconda3/envs/dj/lib/python3.8/site-packages/statsmodels/regression/mixed_linear_model.py:2261: ConvergenceWarning: The Hessian matrix at the estimated parameter values is not positive definite.
warnings.warn(msg, ConvergenceWarning)
Spikes¶
df, df_monster, index_cols, firing_rates = generate_fake_spikes(n_trials=20,
n_neurons=6,
n_mice=3,
dur=5,
mouse_response_slope=40,
overall_stim_response_strength=5)
df['log_isi']=np.log10(df['isi'])
bw = LMERegression(df=df, y='log_isi', treatment='stim', condition=['neuron_x_mouse'], group='mouse',)
bw.fit(add_data=False,add_group_intercept=True, add_group_slope=False);
Using formula log_isi ~ (1|mouse) + stim| neuron_x_mouse__0 + stim|neuron_x_mouse__1 + stim|neuron_x_mouse__2 + stim|neuron_x_mouse__3 + stim|neuron_x_mouse__4 + stim|neuron_x_mouse__5 + stim|neuron_x_mouse__6 + stim|neuron_x_mouse__7 + stim|neuron_x_mouse__8 + stim|neuron_x_mouse__9 + stim|neuron_x_mouse__10 + stim|neuron_x_mouse__11 + stim|neuron_x_mouse__12 + stim|neuron_x_mouse__13 + stim|neuron_x_mouse__14 + stim|neuron_x_mouse__15 + stim|neuron_x_mouse__16 + stim|neuron_x_mouse__17
Coef. Std.Err. z P>|z| [0.025 0.975]
Intercept -1.047 0.132 -7.947 0.000 -1.305 -0.789
1 | mouse -0.079 0.069 -1.143 0.253 -0.213 0.056
stim | neuron_x_mouse__0 -0.010 0.020 -0.486 0.627 -0.049 0.030
stim | neuron_x_mouse__1 -0.074 0.020 -3.692 0.000 -0.114 -0.035
stim | neuron_x_mouse__2 -0.091 0.020 -4.506 0.000 -0.130 -0.051
stim | neuron_x_mouse__3 -0.159 0.020 -7.887 0.000 -0.198 -0.119
stim | neuron_x_mouse__4 -0.226 0.020 -11.249 0.000 -0.266 -0.187
stim | neuron_x_mouse__5 -0.276 0.020 -13.728 0.000 -0.316 -0.237
stim | neuron_x_mouse__6 0.124 0.020 6.166 0.000 0.085 0.164
stim | neuron_x_mouse__7 0.080 0.020 3.988 0.000 0.041 0.120
stim | neuron_x_mouse__8 0.019 0.020 0.967 0.334 -0.020 0.059
stim | neuron_x_mouse__9 -0.003 0.020 -0.126 0.900 -0.042 0.037
stim | neuron_x_mouse__10 -0.045 0.020 -2.213 0.027 -0.084 -0.005
stim | neuron_x_mouse__11 -0.078 0.020 -3.873 0.000 -0.117 -0.039
stim | neuron_x_mouse__12 0.194 0.020 9.641 0.000 0.155 0.233
stim | neuron_x_mouse__13 0.175 0.020 8.707 0.000 0.136 0.215
stim | neuron_x_mouse__14 0.129 0.020 6.409 0.000 0.090 0.168
stim | neuron_x_mouse__15 0.079 0.020 3.914 0.000 0.039 0.118
stim | neuron_x_mouse__16 0.012 0.020 0.576 0.565 -0.028 0.051
stim | neuron_x_mouse__17 -0.021 0.020 -1.027 0.304 -0.060 0.019
Group Var 0.013 0.203
changing x to :Q
bw.chart
Group slope¶
bw = LMERegression(df=df, y='log_isi', treatment='stim', condition=['neuron_x_mouse'], group='mouse',)
bw.fit(add_data=False,add_group_intercept=True, add_group_slope=True)
Using formula log_isi ~ (stim|mouse) + stim| neuron_x_mouse__0 + stim|neuron_x_mouse__1 + stim|neuron_x_mouse__2 + stim|neuron_x_mouse__3 + stim|neuron_x_mouse__4 + stim|neuron_x_mouse__5 + stim|neuron_x_mouse__6 + stim|neuron_x_mouse__7 + stim|neuron_x_mouse__8 + stim|neuron_x_mouse__9 + stim|neuron_x_mouse__10 + stim|neuron_x_mouse__11 + stim|neuron_x_mouse__12 + stim|neuron_x_mouse__13 + stim|neuron_x_mouse__14 + stim|neuron_x_mouse__15 + stim|neuron_x_mouse__16 + stim|neuron_x_mouse__17
Coef. Std.Err. z P>|z| [0.025 0.975]
Intercept -1.102 0.093 -11.904 0.000 -1.284 -0.921
stim | mouse -0.079 0.069 -1.143 0.253 -0.213 0.056
stim | neuron_x_mouse__0 -0.033 0.029 -1.146 0.252 -0.089 0.023
stim | neuron_x_mouse__1 -0.097 0.029 -3.395 0.001 -0.154 -0.041
stim | neuron_x_mouse__2 -0.114 0.029 -3.966 0.000 -0.170 -0.058
stim | neuron_x_mouse__3 -0.182 0.029 -6.337 0.000 -0.238 -0.126
stim | neuron_x_mouse__4 -0.250 0.029 -8.695 0.000 -0.306 -0.193
stim | neuron_x_mouse__5 -0.299 0.029 -10.434 0.000 -0.356 -0.243
stim | neuron_x_mouse__6 0.180 0.052 3.432 0.001 0.077 0.282
stim | neuron_x_mouse__7 0.136 0.052 2.594 0.009 0.033 0.238
stim | neuron_x_mouse__8 0.075 0.052 1.432 0.152 -0.028 0.178
stim | neuron_x_mouse__9 0.053 0.052 1.012 0.311 -0.050 0.156
stim | neuron_x_mouse__10 0.011 0.052 0.209 0.834 -0.092 0.114
stim | neuron_x_mouse__11 -0.022 0.052 -0.429 0.668 -0.125 0.080
stim | neuron_x_mouse__12 0.171 0.028 6.060 0.000 0.116 0.226
stim | neuron_x_mouse__13 0.152 0.028 5.393 0.000 0.097 0.207
stim | neuron_x_mouse__14 0.106 0.028 3.754 0.000 0.051 0.161
stim | neuron_x_mouse__15 0.056 0.028 1.973 0.049 0.000 0.111
stim | neuron_x_mouse__16 -0.012 0.028 -0.409 0.682 -0.067 0.044
stim | neuron_x_mouse__17 -0.044 0.028 -1.553 0.120 -0.099 0.011
Group Var 0.013 0.203
changing x to :Q
<bayes_window.lme.LMERegression at 0x7fb304ab6760>
bw.chart
bw.plot(x='neuron_x_mouse:O').display()
changing x to neuron_x_mouse:Q
Categorical¶
bw.fit(formula='log_isi ~ (1|mouse) + C(stim| neuron_x_mouse)')
Using formula log_isi ~ (1|mouse) + C(stim| neuron_x_mouse)
Coef. Std.Err. z P>|z| \
Intercept -0.768 153525.798 -0.000 1.000
C(stim | neuron_x_mouse)[T.1] -0.086 0.029 -3.015 0.003
C(stim | neuron_x_mouse)[T.2] -0.081 0.035 -2.302 0.021
C(stim | neuron_x_mouse)[T.3] -0.156 0.029 -5.427 0.000
C(stim | neuron_x_mouse)[T.4] -0.217 0.035 -6.164 0.000
C(stim | neuron_x_mouse)[T.5] -0.237 0.029 -8.242 0.000
C(stim | neuron_x_mouse)[T.6] -0.024 0.161 -0.151 0.880
C(stim | neuron_x_mouse)[T.7] -0.294 0.160 -1.840 0.066
C(stim | neuron_x_mouse)[T.8] -0.129 0.161 -0.800 0.423
C(stim | neuron_x_mouse)[T.9] -0.255 0.160 -1.599 0.110
C(stim | neuron_x_mouse)[T.10] -0.193 0.161 -1.198 0.231
C(stim | neuron_x_mouse)[T.11] -0.236 0.160 -1.475 0.140
C(stim | neuron_x_mouse)[T.12] 0.543 307051.595 0.000 1.000
C(stim | neuron_x_mouse)[T.13] 0.186 307051.595 0.000 1.000
C(stim | neuron_x_mouse)[T.14] 0.478 307051.595 0.000 1.000
C(stim | neuron_x_mouse)[T.15] 0.281 307051.595 0.000 1.000
C(stim | neuron_x_mouse)[T.16] 0.361 307051.595 0.000 1.000
C(stim | neuron_x_mouse)[T.17] 0.320 307051.595 0.000 1.000
1 | mouse -0.288 153525.798 -0.000 1.000
Group Var 0.012 2.932
[0.025 0.975]
Intercept -300905.802 300904.266
C(stim | neuron_x_mouse)[T.1] -0.143 -0.030
C(stim | neuron_x_mouse)[T.2] -0.150 -0.012
C(stim | neuron_x_mouse)[T.3] -0.212 -0.099
C(stim | neuron_x_mouse)[T.4] -0.286 -0.148
C(stim | neuron_x_mouse)[T.5] -0.293 -0.180
C(stim | neuron_x_mouse)[T.6] -0.340 0.291
C(stim | neuron_x_mouse)[T.7] -0.607 0.019
C(stim | neuron_x_mouse)[T.8] -0.445 0.187
C(stim | neuron_x_mouse)[T.9] -0.569 0.058
C(stim | neuron_x_mouse)[T.10] -0.509 0.123
C(stim | neuron_x_mouse)[T.11] -0.549 0.077
C(stim | neuron_x_mouse)[T.12] -601809.525 601810.611
C(stim | neuron_x_mouse)[T.13] -601809.883 601810.254
C(stim | neuron_x_mouse)[T.14] -601809.590 601810.546
C(stim | neuron_x_mouse)[T.15] -601809.788 601810.349
C(stim | neuron_x_mouse)[T.16] -601809.708 601810.429
C(stim | neuron_x_mouse)[T.17] -601809.749 601810.388
1 | mouse -300905.322 300904.746
Group Var
changing x to :Q
<bayes_window.lme.LMERegression at 0x7fb304ab6760>
bw.plot(x='neuron_x_mouse:O').display()
changing x to neuron_x_mouse:Q
Nested¶
bw = LMERegression(df=df, y='log_isi', treatment='stim', condition=['neuron_x_mouse'], group='mouse',)
try:
bw.fit(add_data=False,add_group_intercept=True, add_group_slope=True, add_nested_group=True)
except Exception as e:
print(e)
Using formula log_isi ~ (stim|mouse) + stim| neuron_x_mouse__0:mouse + stim|neuron_x_mouse__1:mouse + stim|neuron_x_mouse__2:mouse + stim|neuron_x_mouse__3:mouse + stim|neuron_x_mouse__4:mouse + stim|neuron_x_mouse__5:mouse + stim|neuron_x_mouse__6:mouse + stim|neuron_x_mouse__7:mouse + stim|neuron_x_mouse__8:mouse + stim|neuron_x_mouse__9:mouse + stim|neuron_x_mouse__10:mouse + stim|neuron_x_mouse__11:mouse + stim|neuron_x_mouse__12:mouse + stim|neuron_x_mouse__13:mouse + stim|neuron_x_mouse__14:mouse + stim|neuron_x_mouse__15:mouse + stim|neuron_x_mouse__16:mouse + stim|neuron_x_mouse__17:mouse
Singular matrix