plotting, psth, sta lecture

This commit is contained in:
Jan Grewe 2015-10-27 17:53:56 +01:00
parent 72d29dc406
commit 938efd9ae1
2 changed files with 235 additions and 66 deletions

View File

@ -44,13 +44,13 @@ def get_instantaneous_rate(times, max_t=30., dt=1e-4):
def plot_isi_rate(spike_times, max_t=30, dt=1e-4):
times = np.squeeze(spike_times[0][0])[:100000]
time, rate = get_instantaneous_rate(times, max_t=100000*dt)
times = np.squeeze(spike_times[0][0])[:50000]
time, rate = get_instantaneous_rate(times, max_t=50000*dt)
rates = np.zeros((len(rate), len(spike_times)))
for i in range(len(spike_times)):
_, rates[:, i] = get_instantaneous_rate(np.squeeze(spike_times[i][0])[:100000],
max_t=100000*dt)
_, rates[:, i] = get_instantaneous_rate(np.squeeze(spike_times[i][0])[:50000],
max_t=50000*dt)
avg_rate = np.mean(rates, axis=1)
rate_std = np.std(rates, axis=1)
@ -59,7 +59,7 @@ def plot_isi_rate(spike_times, max_t=30, dt=1e-4):
ax2 = fig.add_subplot(312)
ax3 = fig.add_subplot(313)
ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5)
ax1.vlines(times[times < (50000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5)
ax1.set_ylabel("skpikes", fontsize=12)
set_axis_fontsize(ax1, 12)
@ -112,13 +112,13 @@ def plot_bin_rate(spike_times, bin_width, max_t=30, dt=1e-4):
ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5)
ax1.set_ylabel("skpikes", fontsize=12)
ax1.set_xlim([0, 10])
ax1.set_xlim([0, 5])
set_axis_fontsize(ax1, 12)
ax2.plot(time, rate, label="binned rate, trial 1")
ax2.set_ylabel("firing rate [Hz]", fontsize=12)
ax2.legend(fontsize=12)
ax2.set_xlim([0, 10])
ax2.set_xlim([0, 5])
set_axis_fontsize(ax2, 12)
ax3.fill_between(time, avg_rate+rate_std, avg_rate-rate_std, color="dodgerblue",
@ -127,7 +127,7 @@ def plot_bin_rate(spike_times, bin_width, max_t=30, dt=1e-4):
ax3.set_xlabel("times [s]", fontsize=12)
ax3.set_ylabel("firing rate [Hz]", fontsize=12)
ax3.legend(fontsize=12)
ax3.set_xlim([0, 10])
ax3.set_xlim([0, 5])
ax3.set_ylim([0, 450])
set_axis_fontsize(ax3, 12)
@ -165,13 +165,13 @@ def plot_conv_rate(spike_times, sigma=0.05, max_t=30, dt=1e-4):
ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5)
ax1.set_ylabel("skpikes", fontsize=12)
ax1.set_xlim([0, 10])
ax1.set_xlim([0, 5])
set_axis_fontsize(ax1, 12)
ax2.plot(time, rate, label="convolved rate, trial 1")
ax2.set_ylabel("firing rate [Hz]", fontsize=12)
ax2.legend(fontsize=12)
ax2.set_xlim([0, 10])
ax2.set_xlim([0, 5])
set_axis_fontsize(ax2, 12)
ax3.fill_between(time, avg_rate+rate_std, avg_rate-rate_std, color="dodgerblue",
@ -180,19 +180,19 @@ def plot_conv_rate(spike_times, sigma=0.05, max_t=30, dt=1e-4):
ax3.set_xlabel("times [s]", fontsize=12)
ax3.set_ylabel("firing rate [Hz]", fontsize=12)
ax3.legend(fontsize=12)
ax3.set_xlim([0, 10])
ax3.set_xlim([0, 5])
ax3.set_ylim([0, 450])
set_axis_fontsize(ax3, 12)
fig.set_size_inches(15, 10)
fig.subplots_adjust(left=0.1, bottom=0.125, top=0.95, right=0.95)
fig.set_facecolor("white")
fig.savefig("../lectures/images/concolved_rate.png")
fig.savefig("../lectures/images/convolved_rate.png")
plt.close()
if __name__ == "__main__":
spike_times = spio.loadmat('lifoustim.mat')["spikes"]
# plot_isi_rate(spike_times)
# plot_bin_rate(spike_times, 0.05)
plot_conv_rate(spike_times, 0.05)
plot_isi_rate(spike_times)
plot_bin_rate(spike_times, 0.05)
plot_conv_rate(spike_times, 0.025)

View File

@ -176,14 +176,14 @@
}
\only <4> {
\begin{figure}
\includegraphics[width=0.4\columnwidth]{images/badbarright}
\includegraphics[width=0.3\columnwidth]{images/badbarright}
\end{figure}
\vspace{0.5cm}
\url{https://en.wikipedia.org/wiki/Misleading_graph}
}
\only <5> {
\begin{figure}
\includegraphics[width=0.4\columnwidth]{images/badbarleft}
\includegraphics[width=0.3\columnwidth]{images/badbarleft}
\end{figure}
\vspace{0.5cm}
\url{https://en.wikipedia.org/wiki/Misleading_graph}
@ -352,19 +352,18 @@ saveas(fig, 'spike_detection.pdf', 'pdf')
\item Deutliche Unterscheidbarkeit von Kurven.
\item Keine suggestive Darstellung.
\item Ausgewogenheit von Linienst\"arken Schrift- und Plotgr\"o{\ss}e.
\item Vermeidung von Suggestiven Darstellungen.
\item Fehlerbalken, wenn sie angebracht sind.
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{2. Spiketrain Analyse I}
\huge{2. Spiketrain Analyse}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse I}
\frametitle{Spiketrain Analyse}
\framesubtitle{Rasterplot}
\begin{figure}
\centering
@ -374,92 +373,221 @@ saveas(fig, 'spike_detection.pdf', 'pdf')
\begin{frame}
\frametitle{Spiketrain Analyse I}
\frametitle{Spiketrain Analyse}
\framesubtitle{Rasterplot}
\"Ubung:
\begin{enumerate}
\item Ladet die Datei: electrorecptor\_spike\_times.mat aus dem
\item Ladet die Datei: \code{lifoustim.mat} aus dem
Ilias Ordner.
\item Der Datensatz enth\"alt die Zeiten von Aktionspotentialen.
\item Schaut euch den Inhalt und skizziert wie das Problem gel\"ost
werden k\"onnte.
\item Erzeugt einen Rasterplot.
\item Erzeugt einen sch\"onen Rasterplot der Zellantworten, speichert ihn.
\item Welche Information liefert er, welche Information ist schwer
abzulesen?
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH}
Darstellung der Feurreate eines Neuron als Funktion der Zeit. Es
gibt verschiedene Methoden dieses \textbf{P}eri \textbf{S}timulus
\textbf{T}ime \textbf{H}istogram zu erstellen.
\begin{enumerate}
\item Auf Basis der \textit{instantanen} Feuerrate.
\item Auf Basis des Zeithistogramms.
\item Durch Faltung der Zellantwort mit einem Gauss Kern.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse I}
\framesubtitle{Feuerrate \"uber
die Zeit}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---}
\Large{Berechnung des PSTHs durch die Instantane Feurerrate:}
\normalsize
\begin{enumerate}
\item Die Feuerrate kann aus dem Abstand zwischen zwei
aufeinanderfolgenden Aktionspotentialen
(\textbf{Interspikeinterval}) berechnet werden. \pause
\item Auch als \textbf{Instantane Feuerrate} bezeichnet.
\item Die \textbf{Instantane Feuerrate} wird aus dem Kehrwert des
Interspikeintervals berechnet.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---}
\begin{figure}
\centering
\includegraphics[width=0.5\columnwidth]{images/isi}
\includegraphics[width=0.9\columnwidth]{images/instantaneous_rate}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse I}
\framesubtitle{Feuerrate \"uber
die Zeit}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---}
Berechnung des PSTHs durch die Instantane Feurerrate:
\textbf{Vorteile:}
\begin{enumerate}
\item Z.B. das \textbf{P}eri- \textbf{S}timulus - \textbf{T}ime -
\textbf{H}istogram, \textbf{PSTH}
\item Wird berechnet indem die Zeit in ``bins'' geteilt wird die
Anzahl Spikes pro bin gezaehlt werden.
\item Die Anzahl wird dann in eine Feuerrate umgerechnet.
\end{enumerate}\pause
\item Sehr einfach zu Berechnen.
\item Macht keine Annahmen \"uber ein Zeitraster, oder die Zeitskala
der neuronalen Verarbeitung.
\end{enumerate}
\textbf{Nachteile:}
\begin{enumerate}
\item Die Feuerrate ist nie null, auch wenn f\"ur lange Zeit kein
Aktionspotential auftritt.
\item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---}
\Large{Binning Methode:}
\normalsize
\begin{enumerate}
\item Die Zeitachse wird in gleich gro{\ss}e Abschnitte ``bins''
unterteilt.
\item F\"ur jedes ``bin'' wird die Anzahl vorkommender
Aktionspotentiale gez\"ahlt.
\item Der Spike-count pro bin muss nun noch in die Rate umgerechnet
werden.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---}
\begin{figure}
\centering
\includegraphics[width=0.5\columnwidth]{images/binning}
\includegraphics[width=0.9\columnwidth]{images/binned_rate}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---}
Berechnung des PSTHs durch die Binning Methode:
\textbf{Vorteile:}
\begin{enumerate}
\item Sehr einfach zu Berechnen.
\item Zeigt nur da Aktivit\"at an, wo auch Aktionspotentiale
generiert wurden.
\end{enumerate}
\textbf{Nachteile:}
\begin{enumerate}
\item Mach Annahmen \"uber die relevante Zeitskala neuronaler
Verarbeitung.
\item Die Zeitachse wird diskretisiert.
\item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---}
\Large{Faltung mit einem Gauss Kern:}
\normalsize
\[r_{est}(t) = \int_{-\infty}^{\infty}d\tau \omega(\tau)\rho(t-\tau) \]
wobei $\omega(\tau)$ der Gauss Kern und $\rho(t)$ die Antwortfunktion ist.
Gl\"ucklicherweise m\"ussen wir das nicht selbst implementieren...
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse I}
\framesubtitle{Feuerrate \"uber die Zeit}
\frametitle{Spiketrain Analyse}
\framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---}
\large Algortihmus:
\normalsize
\begin{enumerate}
\item Z.B. das \textbf{P}eri- \textbf{S}timulus - \textbf{T}ime -
\textbf{H}istogram, \textbf{PSTH}
\item Wird berechnet indem man die Aktivit\"at bin\"ar ausdr\"uckt.
\item Jede 1 wird dann duch einen ``Kern'' ersetzt.
\item Der Vorgang heisst Faltung (\verb+conv+).
\end{enumerate}\pause
\item Die neuronalen Antworten werden ``bin\"ar'' ausgedr\"uckt.
\item Ein Filterkern wird berechnet, der das Integral 1 hat.
\item Mithilfe der Faltung (\code{conv} Funktion) wird jede 1 durch
den ``Kern'' ersetzt.\\
\code{conv(x, kern, 'mode', 'same')}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---}
\begin{figure}
\centering
\includegraphics[width=0.5\columnwidth]{images/conv}
\includegraphics[width=0.9\columnwidth]{images/convolved_rate}
\end{figure}
\end{frame}
\begin{frame} [fragile]
\frametitle{Spiketrain Analyse I}
\framesubtitle{\"Ubung}
\begin{enumerate}
\item Berechnet die Feuerrate eines Neurons mit einer der drei Methoden.
\item Die Abbildung soll f\"ur eine einspaltige Abbildung im
\textit{Journal of Neuroscience} geeignet sein
(\url{http://www.jneurosci.org/site/misc/ifa_illustrations.xhtml}).
\item Erzeugt/ver\"andert/erweitert das Programm zum plotten so, dass
die Abbildung automatisch erstellt und gespeichert wird.
\item Speichert die Abbildung als pdf.
\item Ladet den Stimulus aus dem Ilias Ordner und benutzt die
\verb+subplot+ Funktion um den Stimulus zu der neuronalen
Aktivit\"at zu plotten.
\end{enumerate}
\begin{frame}
\frametitle{Spiketrain Analyse}
\framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---}
\textbf{Vorteile:}
\begin{enumerate}
\item Sehr ``nat\"urliche'' erscheinende Darstellung.
\item Sehr gutes Verhalten im Fourrier Raum.
\end{enumerate}
\textbf{Nachteile:}
\begin{enumerate}
\item Relativ rechenintensiv.
\item Macht Annahmen \"uber die Zeitskalen neuronaler Verarbeitung.
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{3. Analyse der Beziehung zwischen Stimulus und Antwort}
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{Spike-Triggered-Average}
\begin{itemize}
\item[] Die Antworten darzustellen ist gut und sch\"on, aber was sagt es uns?\pause
\item[] Idealerweise wollen wir die Antworten in Beziehung zum
hervorrufenden Stimulus setzen.
\item[] Eine Methode ist der sogenannte \textbf{Spike-Triggered-Average} (STA).
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{Spike-Triggered-Average}
Der STA stellt den (mittleren) Stimulus dar, der zu einem
Aktionspotential gef\"uhrt hat:
\begin{equation}
STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle
\end{equation}
Wobei: $\tau$ ist eine bestimmte Zeit relativ zur Zeit eines
Aktionspotentials, $t_i$ ist der Zeitpunkt eines APs, $s(t)$ ist der
Stimulus.\\
Leider m\"ussen wir das selbst implementieren...
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{Spike-Triggered-Average}
\large{Algorithmus:}
\normalsize
\begin{enumerate}
\item Der \textbf{STA} ist der mittlere Stimulus, der zu einem Aktionspotential f\"uhrt.
\item F\"ur jeden Spike wird ein entsprechender Abschnitt um die Zeit des Spikes herausgeschnitten.
@ -471,4 +599,45 @@ saveas(fig, 'spike_detection.pdf', 'pdf')
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{Spike-Triggered-Average}
\vspace{-1em}
\begin{figure}
\centering
\includegraphics[width=0.6\columnwidth]{images/sta}
\end{figure}
\pause
\vspace{-0.5em}
Welche Information liefert der \textbf{STA}?
\small
\begin{enumerate}
\item Gibt es eine Beziehung zwischen Stimulus und Antwort?\pause
\item Gibt es eine Verz\"ogerung zwischen Stimulus und Antwort? Wie
gro{\ss} ist diese?\pause
\item Wie weit h\"angt das Auftreten eines Aktionspotentials von der
Vergangenheit ab? \pause
\item Kann die Zelle in die Zukunft sehen?
\end{enumerate}
\end{frame}
\end{document}
\begin{frame} [fragile]
\frametitle{Spiketrain Analyse}
\framesubtitle{\"Ubung}
\begin{enumerate}
\item Berechnet die Feuerrate eines Neurons mit einer der drei Methoden.
\item Die Abbildung soll f\"ur eine einspaltige Abbildung im
\textit{Journal of Neuroscience} geeignet sein
(\url{http://www.jneurosci.org/site/misc/ifa_illustrations.xhtml}).
\item Erzeugt/ver\"andert/erweitert das Programm zum plotten so, dass
die Abbildung automatisch erstellt und gespeichert wird.
\item Speichert die Abbildung als pdf.
\item Ladet den Stimulus aus dem Ilias Ordner und benutzt die
\verb+subplot+ Funktion um den Stimulus zu der neuronalen
Aktivit\"at zu plotten.
\end{enumerate}
\end{frame}