added correlation with baseline rate
This commit is contained in:
parent
04578fd77e
commit
d56c0c7c7e
@ -117,12 +117,12 @@ def plot_corr(ax, data, xcol, ycol, zcol, zmin, zmax, xpdfmax, cmap, color,
|
|||||||
ha='right', va='center', fontsize='small')
|
ha='right', va='center', fontsize='small')
|
||||||
# statistics:
|
# statistics:
|
||||||
r, p = pearsonr(xdata, ydata)
|
r, p = pearsonr(xdata, ydata)
|
||||||
ax.text(1, 0.9, f'$R={r:.2f}$ **', ha='right',
|
ax.text(1, 0.9, f'$R={r:.2f}$', ha='right',
|
||||||
|
transform=ax.transAxes, fontsize='small')
|
||||||
|
ax.text(1, 0.77, f'{significance_str(p)}', ha='right',
|
||||||
transform=ax.transAxes, fontsize='small')
|
transform=ax.transAxes, fontsize='small')
|
||||||
#ax.text(1, 0.77, f'{significance_str(p)}', ha='right',
|
|
||||||
# transform=ax.transAxes, fontsize='small')
|
|
||||||
if 'cvbase' in xcol:
|
if 'cvbase' in xcol:
|
||||||
ax.text(1, 0.77, f'$n={data.rows()}$', ha='right',
|
ax.text(1, 0.64, f'$n={data.rows()}$', ha='right',
|
||||||
transform=ax.transAxes, fontsize='small')
|
transform=ax.transAxes, fontsize='small')
|
||||||
print(f' correlation {xcol:<8s} - {ycol}: r={r:5.2f}, p={p:.2g}')
|
print(f' correlation {xcol:<8s} - {ycol}: r={r:5.2f}, p={p:.2g}')
|
||||||
return cax
|
return cax
|
||||||
@ -154,6 +154,15 @@ def si_stats(title, data, sicol, si_thresh, nsegscol):
|
|||||||
contrasts = 100*data['contrast']
|
contrasts = 100*data['contrast']
|
||||||
print(' contrasts: ', ' '.join([f'{c:.2g}%' for c in np.unique(contrasts)]))
|
print(' contrasts: ', ' '.join([f'{c:.2g}%' for c in np.unique(contrasts)]))
|
||||||
print(f' contrasts: {np.min(contrasts):.2g}% - {np.max(contrasts):.2g}%, median={np.median(contrasts):.2g}%, mean={np.mean(contrasts):.2g}%, std={np.std(contrasts):.2g}%')
|
print(f' contrasts: {np.min(contrasts):.2g}% - {np.max(contrasts):.2g}%, median={np.median(contrasts):.2g}%, mean={np.mean(contrasts):.2g}%, std={np.std(contrasts):.2g}%')
|
||||||
|
cols = ['cvbase', 'respmod2', 'ratebase', 'vsbase', 'serialcorr1', 'burstfrac', 'ratestim', 'cvstim']
|
||||||
|
for i in range(len(cols)):
|
||||||
|
for j in range(i + 1, len(cols)):
|
||||||
|
xcol = cols[i]
|
||||||
|
ycol = cols[j]
|
||||||
|
if xcol not in data or ycol not in data:
|
||||||
|
continue
|
||||||
|
r, p = pearsonr(data[xcol], data[ycol])
|
||||||
|
print(f' correlation {xcol:<11s} - {ycol:<11s}: r={r:5.2f}, p={p:.5f}')
|
||||||
|
|
||||||
|
|
||||||
def plot_cvbase_si_punit(ax, data, ycol, si_thresh, color):
|
def plot_cvbase_si_punit(ax, data, ycol, si_thresh, color):
|
||||||
@ -204,6 +213,19 @@ def plot_rmod_si_punit(ax, data, ycol, si_thresh, color):
|
|||||||
cax.set_ylabel('CV$_{\\rm base}$')
|
cax.set_ylabel('CV$_{\\rm base}$')
|
||||||
|
|
||||||
|
|
||||||
|
def plot_rate_si_punit(ax, data, ycol, si_thresh, color):
|
||||||
|
ax.set_xlabel('Baseline rate $r$', 'Hz')
|
||||||
|
ax.set_xlim(0, 700)
|
||||||
|
ax.set_xticks_delta(200)
|
||||||
|
ax.set_ylabel('SI($r$)')
|
||||||
|
ax.set_ylim(0, 6.5)
|
||||||
|
ax.set_yticks_delta(2)
|
||||||
|
examples = punit_examples if 'stimindex' in data else model_examples
|
||||||
|
cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 1.5, 0.016,
|
||||||
|
'coolwarm', color, si_thresh, *examples)
|
||||||
|
cax.set_ylabel('CV$_{\\rm base}$')
|
||||||
|
|
||||||
|
|
||||||
def plot_cvbase_si_ampul(ax, data, ycol, si_thresh, color):
|
def plot_cvbase_si_ampul(ax, data, ycol, si_thresh, color):
|
||||||
ax.set_xlabel('CV$_{\\rm base}$')
|
ax.set_xlabel('CV$_{\\rm base}$')
|
||||||
ax.set_xlim(0, 0.2)
|
ax.set_xlim(0, 0.2)
|
||||||
@ -248,6 +270,19 @@ def plot_rmod_si_ampul(ax, data, ycol, si_thresh, color):
|
|||||||
cax.set_ylabel('CV$_{\\rm base}$')
|
cax.set_ylabel('CV$_{\\rm base}$')
|
||||||
cax.set_yticks_delta(0.1)
|
cax.set_yticks_delta(0.1)
|
||||||
|
|
||||||
|
|
||||||
|
def plot_rate_si_ampul(ax, data, ycol, si_thresh, color):
|
||||||
|
ax.set_xlabel('Baseline rate $r$', 'Hz')
|
||||||
|
ax.set_xlim(50, 200)
|
||||||
|
ax.set_xticks_delta(50)
|
||||||
|
ax.set_ylabel('SI($r$)')
|
||||||
|
ax.set_ylim(0, 10)
|
||||||
|
ax.set_yticks_delta(2)
|
||||||
|
cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 0.2, 0.06,
|
||||||
|
'coolwarm', color, si_thresh, *ampul_examples)
|
||||||
|
cax.set_ylabel('CV$_{\\rm base}$')
|
||||||
|
cax.set_yticks_delta(0.1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
punit_model = TableData(data_path /
|
punit_model = TableData(data_path /
|
||||||
@ -304,8 +339,10 @@ if __name__ == '__main__':
|
|||||||
s.model_color2)
|
s.model_color2)
|
||||||
plot_rmod_si_punit(axs[0, 1], punit_model, 'dsinorm100', si_thresh,
|
plot_rmod_si_punit(axs[0, 1], punit_model, 'dsinorm100', si_thresh,
|
||||||
s.model_color2)
|
s.model_color2)
|
||||||
plot_cvstim_si_punit(axs[0, 2], punit_model, 'dsinorm100', si_thresh,
|
#plot_cvstim_si_punit(axs[0, 2], punit_model, 'dsinorm100', si_thresh,
|
||||||
s.model_color2)
|
# s.model_color2)
|
||||||
|
plot_rate_si_punit(axs[0, 2], punit_model, 'dsinorm100', si_thresh,
|
||||||
|
s.model_color2)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
si_stats('P-unit data:', punit_data, 'sinorm' + si, si_thresh,
|
si_stats('P-unit data:', punit_data, 'sinorm' + si, si_thresh,
|
||||||
@ -316,8 +353,10 @@ if __name__ == '__main__':
|
|||||||
s.punit_color2)
|
s.punit_color2)
|
||||||
plot_rmod_si_punit(axs[1, 1], punit_data, 'sinorm' + si, si_thresh,
|
plot_rmod_si_punit(axs[1, 1], punit_data, 'sinorm' + si, si_thresh,
|
||||||
s.punit_color2)
|
s.punit_color2)
|
||||||
plot_cvstim_si_punit(axs[1, 2], punit_data, 'sinorm' + si, si_thresh,
|
#plot_cvstim_si_punit(axs[1, 2], punit_data, 'sinorm' + si, si_thresh,
|
||||||
s.punit_color2)
|
# s.punit_color2)
|
||||||
|
plot_rate_si_punit(axs[1, 2], punit_data, 'sinorm' + si, si_thresh,
|
||||||
|
s.punit_color2)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
si_stats('Ampullary data:', ampul_data, 'sinorm' + si, si_thresh,
|
si_stats('Ampullary data:', ampul_data, 'sinorm' + si, si_thresh,
|
||||||
@ -328,8 +367,10 @@ if __name__ == '__main__':
|
|||||||
s.ampul_color2)
|
s.ampul_color2)
|
||||||
plot_rmod_si_ampul(axs[2, 1], ampul_data, 'sinorm' + si, si_thresh,
|
plot_rmod_si_ampul(axs[2, 1], ampul_data, 'sinorm' + si, si_thresh,
|
||||||
s.ampul_color2)
|
s.ampul_color2)
|
||||||
plot_cvstim_si_ampul(axs[2, 2], ampul_data, 'sinorm' + si, si_thresh,
|
#plot_cvstim_si_ampul(axs[2, 2], ampul_data, 'sinorm' + si, si_thresh,
|
||||||
s.ampul_color2)
|
# s.ampul_color2)
|
||||||
|
plot_rate_si_ampul(axs[2, 2], ampul_data, 'sinorm' + si, si_thresh,
|
||||||
|
s.ampul_color2)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
fig.common_xticks(axs[:2, 0])
|
fig.common_xticks(axs[:2, 0])
|
||||||
|
@ -30,20 +30,21 @@ def load_chi2(file_path, cell_name, contrast=None, n=None):
|
|||||||
return freqs, chi2, fcutoff, contrast, n
|
return freqs, chi2, fcutoff, contrast, n
|
||||||
|
|
||||||
|
|
||||||
def plot_chi2_contrasts(axs, s, cell_name):
|
def plot_chi2_contrasts(axs, s, cell_name, vmax):
|
||||||
d = sims_path / f'{cell_name}-baseline.npz'
|
d = sims_path / f'{cell_name}-baseline.npz'
|
||||||
data = np.load(d)
|
data = np.load(d)
|
||||||
rate = float(data['rate'])
|
rate = float(data['rate'])
|
||||||
cv = float(data['cv'])
|
cv = float(data['cv'])
|
||||||
print(f' {cell_name}: r={rate:3.0f}Hz, CV={cv:4.2f}')
|
print(f' {cell_name}: r={rate:3.0f}Hz, CV={cv:4.2f}')
|
||||||
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name)
|
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name)
|
||||||
cax = plot_chi2(axs[0], s, freqs, chi2, fcutoff, rate)
|
cax = plot_chi2(axs[0], s, freqs, chi2, fcutoff, rate, vmax)
|
||||||
cax.set_ylabel('')
|
cax.set_ylabel('')
|
||||||
axs[0].set_title(r'$c$=0\,\%', fontsize='medium')
|
axs[0].set_title(r'$c$=0\,\%', fontsize='medium')
|
||||||
for k, alpha in enumerate([0.01, 0.03, 0.1]):
|
for k, alpha in enumerate([0.01, 0.03, 0.1]):
|
||||||
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
||||||
alpha)
|
alpha)
|
||||||
cax = plot_chi2(axs[k + 1], s, freqs, chi2, fcutoff, rate)
|
cax = plot_chi2(axs[k + 1], s, freqs, chi2, fcutoff, rate, vmax)
|
||||||
|
vmax /= 2
|
||||||
if alpha < 0.1:
|
if alpha < 0.1:
|
||||||
cax.set_ylabel('')
|
cax.set_ylabel('')
|
||||||
axs[k + 1].set_title(f'$c$={100*alpha:g}\\,\\%', fontsize='medium')
|
axs[k + 1].set_title(f'$c$={100*alpha:g}\\,\\%', fontsize='medium')
|
||||||
@ -142,8 +143,9 @@ if __name__ == '__main__':
|
|||||||
fig.subplots_adjust(leftm=7, rightm=9, topm=2, bottomm=3.5,
|
fig.subplots_adjust(leftm=7, rightm=9, topm=2, bottomm=3.5,
|
||||||
wspace=1, hspace=0.5)
|
wspace=1, hspace=0.5)
|
||||||
print('Example cells:')
|
print('Example cells:')
|
||||||
|
vmax = [2, 6, 8, 40]
|
||||||
for k in range(len(model_cells)):
|
for k in range(len(model_cells)):
|
||||||
plot_chi2_contrasts(axs[k], s, model_cells[k])
|
plot_chi2_contrasts(axs[k], s, model_cells[k], vmax[k])
|
||||||
for k in range(4):
|
for k in range(4):
|
||||||
fig.common_yticks(axs[k, :])
|
fig.common_yticks(axs[k, :])
|
||||||
fig.common_xticks(axs[:4, k])
|
fig.common_xticks(axs[:4, k])
|
||||||
|
@ -14,7 +14,7 @@ data_path = Path('data')
|
|||||||
sims_path = data_path / 'simulations'
|
sims_path = data_path / 'simulations'
|
||||||
|
|
||||||
|
|
||||||
def plot_chi2_contrasts(axs, s, cell_name, nsegs=None):
|
def plot_chi2_contrasts(axs, s, cell_name, nsegs=None, vmax=None):
|
||||||
d = sims_path / f'{cell_name}-baseline.npz'
|
d = sims_path / f'{cell_name}-baseline.npz'
|
||||||
data = np.load(d)
|
data = np.load(d)
|
||||||
rate = float(data['rate'])
|
rate = float(data['rate'])
|
||||||
@ -23,14 +23,18 @@ def plot_chi2_contrasts(axs, s, cell_name, nsegs=None):
|
|||||||
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
||||||
None, nsegs)
|
None, nsegs)
|
||||||
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
||||||
cax = plot_chi2(axs[0], s, freqs, chi2, fcutoff, rate)
|
cax = plot_chi2(axs[0], s, freqs, chi2, fcutoff, rate, vmax)
|
||||||
cax.set_ylabel('')
|
cax.set_ylabel('')
|
||||||
axs[0].set_title(f'$c$=0\\,\\%, {ns}', fontsize='medium')
|
axs[0].set_title(f'$c$=0\\,\\%, {ns}', fontsize='medium')
|
||||||
for k, alpha in enumerate([0.01, 0.03, 0.1]):
|
for k, alpha in enumerate([0.01, 0.03, 0.1]):
|
||||||
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
||||||
alpha, nsegs)
|
alpha, nsegs)
|
||||||
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
||||||
cax = plot_chi2(axs[k + 1], s, freqs, chi2, fcutoff, rate)
|
cax = plot_chi2(axs[k + 1], s, freqs, chi2, fcutoff, rate, vmax)
|
||||||
|
if n < 1000:
|
||||||
|
vmax /= 10
|
||||||
|
else:
|
||||||
|
vmax /= 4
|
||||||
if alpha < 0.1:
|
if alpha < 0.1:
|
||||||
cax.set_ylabel('')
|
cax.set_ylabel('')
|
||||||
axs[k + 1].set_title(f'$c$={100*alpha:g}\\,\\%, {ns}',
|
axs[k + 1].set_title(f'$c$={100*alpha:g}\\,\\%, {ns}',
|
||||||
@ -139,8 +143,8 @@ if __name__ == '__main__':
|
|||||||
for ax in axs.flat:
|
for ax in axs.flat:
|
||||||
ax.set_visible(False)
|
ax.set_visible(False)
|
||||||
print('Example cells:')
|
print('Example cells:')
|
||||||
plot_chi2_contrasts(axs[0], s, model_cell)
|
plot_chi2_contrasts(axs[0], s, model_cell, None, 40)
|
||||||
plot_chi2_contrasts(axs[1], s, model_cell, nsmall)
|
plot_chi2_contrasts(axs[1], s, model_cell, nsmall, 600)
|
||||||
for k in range(2):
|
for k in range(2):
|
||||||
fig.common_yticks(axs[k, :])
|
fig.common_yticks(axs[k, :])
|
||||||
for k in range(4):
|
for k in range(4):
|
||||||
|
@ -75,7 +75,7 @@ def plot_overn(ax, s, files, nmax=1e6, title=False):
|
|||||||
def plot_chi2_overn(axs, s, cell_name):
|
def plot_chi2_overn(axs, s, cell_name):
|
||||||
print(cell_name)
|
print(cell_name)
|
||||||
files, nums = noise_files(sims_path, cell_name)
|
files, nums = noise_files(sims_path, cell_name)
|
||||||
for k, nsegs in enumerate([1e1, 1e2, 1e3, 1e6]):
|
for k, nsegs in enumerate([1e2, 1e3, 1e4, 1e6]):
|
||||||
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
freqs, chi2, fcutoff, contrast, n = load_chi2(sims_path, cell_name,
|
||||||
None, nsegs)
|
None, nsegs)
|
||||||
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
ns = f'$N={n}$' if n < 1000 else f'$N=10^{np.log10(n):.0f}$'
|
||||||
|
Loading…
Reference in New Issue
Block a user