Merge branch 'master' of raven:scientificComputing
BIN
programming/lectures/images/badbarleft.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
programming/lectures/images/badbarplot.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
programming/lectures/images/badbarright.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 47 KiB |
BIN
programming/lectures/images/histogram.png
Executable file
After Width: | Height: | Size: 3.2 KiB |
BIN
programming/lectures/images/histogrambad.png
Executable file
After Width: | Height: | Size: 3.4 KiB |
BIN
programming/lectures/images/histogrambad2.png
Executable file
After Width: | Height: | Size: 3.4 KiB |
BIN
programming/lectures/images/improperly_scaled_graph.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
programming/lectures/images/line_graph1.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
programming/lectures/images/line_graph1_3.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
programming/lectures/images/line_graph1_4.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
programming/lectures/images/misleading_pie.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
programming/lectures/images/nobelbad.png
Normal file
After Width: | Height: | Size: 266 KiB |
BIN
programming/lectures/images/one_d_problem_c.pdf
Normal file
BIN
programming/lectures/images/properly_scaled_graph.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
programming/lectures/images/sample_pie.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
@ -86,6 +86,8 @@
|
|||||||
\end{flushright}
|
\end{flushright}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\newcommand{\code}[1]{\texttt{#1}}
|
||||||
|
|
||||||
\input{../../latex/environments.tex}
|
\input{../../latex/environments.tex}
|
||||||
\makeatother
|
\makeatother
|
||||||
|
|
||||||
@ -103,11 +105,259 @@
|
|||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Graphische Darstellung von Daten
|
\item Graphische Darstellung von Daten
|
||||||
\item Spiketrain Analyse
|
\item Spiketrain Analyse
|
||||||
\item \"Ubungen, \"Ubungen, \"Ubungen.
|
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame}[plain]
|
||||||
|
\huge{1. Graphische Darstellung von Daten}\pause
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.9\columnwidth]{images/convincing}
|
||||||
|
\end{figure}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Was soll ein Datenplot erreichen?}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Ist eine m\"oglichst neutrale Darstellung der Daten.
|
||||||
|
\item Soll dem Leser die Daten greifbar machen und die Aussagen der
|
||||||
|
Analyse darstellen.
|
||||||
|
\item Erlaubt dem Leser die gezeigten Effekte selbst zu beguachten
|
||||||
|
und zu validieren.
|
||||||
|
\item Muss vollst\"andig annotiert sein.
|
||||||
|
\item Folgt dem Prinzip der \textbf{ink minimization}. (Das
|
||||||
|
Verh\"altnis aus Tinte, die f\"ur die Darstellung der Daten
|
||||||
|
gebraucht wird und der Menge Tinte, die f\"ur die Graphik
|
||||||
|
ben\"otigt wird sollte m\"oglichst gro{\ss} sein )
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Was sollte vermieden werden?}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Suggestive oder gar fehlleitende Darstellung.
|
||||||
|
\item Ablenkung durch unruhige oder \"uberm\"a{\ss}ige Effekte.
|
||||||
|
\item Comicartige Effekte...
|
||||||
|
\end{itemize}\pause
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.35\columnwidth]{images/one_d_problem_c}
|
||||||
|
\end{figure}\pause
|
||||||
|
... aus{\ss}er sie werden rein zur Illustration benutzt ohne einen
|
||||||
|
Anspruch auf Richtigkeit zu erheben.
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Suboptimale Beispiele}
|
||||||
|
\only <1> {
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.5\columnwidth]{images/nobelbad}
|
||||||
|
\end{figure}
|
||||||
|
\vspace{0.25cm}
|
||||||
|
Aus Hafting et al., Nature, 2005
|
||||||
|
}
|
||||||
|
\only <2> {
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/misleading_pie}
|
||||||
|
\end{figure}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\only <3> {
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/sample_pie}
|
||||||
|
\end{figure}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\only <4> {
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.4\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}
|
||||||
|
\end{figure}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\only <6> {
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.8\columnwidth]{images/badbarplot}
|
||||||
|
\end{figure}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\only <7> {
|
||||||
|
Wahl der Zeichenfl\"ache kann den visuellen Eindruck beeinflu{\ss}en.
|
||||||
|
\begin{columns}
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/line_graph1}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/line_graph1_3}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/line_graph1_4}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
\end{columns}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\only <8> {
|
||||||
|
Vorsicht bei der Skalierung von Symbolen!
|
||||||
|
\begin{columns}
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/improperly_scaled_graph}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/properly_scaled_graph}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
|
||||||
|
\begin{column}{4.cm}
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.7\columnwidth]{images/comparison_properly_improperly_graph}
|
||||||
|
\end{figure}
|
||||||
|
\end{column}
|
||||||
|
\end{columns}
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\url{https://en.wikipedia.org/wiki/Misleading_graph}
|
||||||
|
}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}[fragile]
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Plotting Interfaces in Matlab}
|
||||||
|
Es gibt zwei Wege Graphen zu bearbeiten:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Interaktiv \"uber das \textit{graphische User Interface}\pause
|
||||||
|
\item Die Kommandozeile bzw. in Skripten und Funktionen.\pause
|
||||||
|
\end{enumerate}
|
||||||
|
Beides hat seine Berechtigung und seine eigenen Vor- und Nachteile. Welche?
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Ver\"anderung des Graphen \"uber die Kommandozeile}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Erstellt ein Skript, dass einen Plot erstellt.
|
||||||
|
\item Dieser soll zwei Sinus unterschiedlicher Frequenz darstellen.
|
||||||
|
\end{itemize}
|
||||||
|
Wir werden jetzt die Kommandozeil bzw. das Skript verbessern um den
|
||||||
|
Plot ``sch\"oner'' zu machen.
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Ver\"anderung des Graphen \"uber die Kommandozeile}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Einstellungen der Linienplots:
|
||||||
|
\begin{itemize}
|
||||||
|
\item St\"arke und Farbe.
|
||||||
|
\item Linienstil, Marker.
|
||||||
|
\end{itemize}\pause
|
||||||
|
\item Achsbeschriftung:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \code{xlabel}, \code{ylabel}.
|
||||||
|
\item Schriftart und Gr\"o{\ss}e.
|
||||||
|
\end{itemize}\pause
|
||||||
|
\item Achsenskalierung und Ticks:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Skalierung der Achsen (Minumum und Maxmimum, logarithmisch oder linear).
|
||||||
|
\item Manuelles Setzen der Ticks, ihrer Richtung und Beschriftung.
|
||||||
|
\item Grid or no Grid?
|
||||||
|
\end{itemize}\pause
|
||||||
|
\item Setzen von globalen Parametern:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Einstellung der Papiergr\"o{\ss}e und plzieren der
|
||||||
|
Zeichenfl\"ache.
|
||||||
|
\item Box oder nicht?
|
||||||
|
\item Speichern der Abbildung als pdf.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame} [fragile]
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Ver\"andern von Eigenschaften \"uber die Kommandozeile}
|
||||||
|
\vspace{-0.75em}
|
||||||
|
\scriptsize
|
||||||
|
\begin{lstlisting}
|
||||||
|
fig = figure();
|
||||||
|
set(gcf, 'PaperUnits', 'centimeters', 'PaperSize', [11.7 9.0]);
|
||||||
|
set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0], 'Color', 'white')
|
||||||
|
hold on
|
||||||
|
plot(time, neuronal_data, 'color', [ 0.2 0.5 0.7], 'linewidth', 1.)
|
||||||
|
plot(spike_times, ones(size(spike_times))*threshold, 'ro', 'markersize', 4)
|
||||||
|
line([time(1) time(end)], [threshold threshold], 'linestyle', '--',
|
||||||
|
'linewidth', 0.75, 'color', [0.9 0.9 0.9])
|
||||||
|
ylim([0 35])
|
||||||
|
xlim([0 2.25])
|
||||||
|
box('off')
|
||||||
|
xlabel('time [s]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
|
||||||
|
ylabel('potential [mV]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
|
||||||
|
title('pyramidal cell', 'fontname', 'MyriadPro-Regular', 'fontsize', 12)
|
||||||
|
set(gca, 'TickDir','out', 'linewidth', 1.5, 'fontname', 'MyriadPro-Regular')
|
||||||
|
saveas(fig, 'spike_detection.pdf', 'pdf')
|
||||||
|
\end{lstlisting}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame} [fragile]
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Ver\"andern von Eigenschaften \"uber die Kommandozeile}
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.75\columnwidth]{./images/spike_detection}
|
||||||
|
\end{figure}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame} [fragile]
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Welche Art Plot wof\"ur?}
|
||||||
|
\url{http://www.mathworks.de/discovery/gallery.html}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame} [fragile]
|
||||||
|
\frametitle{Graphische Darstellung von Daten}
|
||||||
|
\framesubtitle{Was macht einen guten Abbildung aus?}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Klarheit.
|
||||||
|
\item Vollstaendige Beschriftung.
|
||||||
|
\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]
|
\begin{frame}[plain]
|
||||||
\huge{2. Spiketrain Analyse I}
|
\huge{2. Spiketrain Analyse I}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
7
statistics/code/boltzmann.m
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
function y = boltzmann(parameter, x)
|
||||||
|
% parameter 1: alpha
|
||||||
|
% parameter 2: k
|
||||||
|
% parameter 3: x_0
|
||||||
|
% parameter 4: y_0
|
||||||
|
|
||||||
|
y = (parameter(1) ./ (1 + exp(-parameter(2) .* (x - parameter(3))))) + parameter(4);
|
7
statistics/code/create_linear_data.m
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
function y = create_linear_data(x)
|
||||||
|
|
||||||
|
m = 2.5;
|
||||||
|
n = -0.35;
|
||||||
|
d = 2.5;
|
||||||
|
|
||||||
|
y = x .* m + n + randn(size(x)) .* d;
|
7
statistics/code/estimate_regression.m
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
function param = estimate_regression(x,y,p_0)
|
||||||
|
|
||||||
|
objective_function = @(p)lsq_error(p, x, y);
|
||||||
|
param = fminunc(objective_function, p_0);
|
||||||
|
disp(param)
|
||||||
|
param1 = fminsearch(objective_function, p_0);
|
||||||
|
disp(param1)
|
5
statistics/code/exponential.m
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
function y = exponential(parameter, x)
|
||||||
|
% Function implements an exponential function with two parameters
|
||||||
|
% controlling the amplitude and the time constant.
|
||||||
|
|
||||||
|
y = parameter(1) .* exp(x./parameter(2));
|
9
statistics/code/lsq_gradient_sigmoid.m
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
function gradient = lsq_gradient_sigmoid(parameter, x, y)
|
||||||
|
h = 1e-6;
|
||||||
|
|
||||||
|
gradient = zeros(size(parameter));
|
||||||
|
for i = 1:length(parameter)
|
||||||
|
parameter_h = parameter;
|
||||||
|
parameter_h(i) = parameter_h(i) + h;
|
||||||
|
gradient(i) = (lsq_sigmoid_error(parameter_h, x, y) - lsq_sigmoid_error(parameter, x, y)) / h;
|
||||||
|
end
|
8
statistics/code/lsq_sigmoid_error.m
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
function error = lsq_sigmoid_error(parameter, x, y)
|
||||||
|
% p(1) the amplitude
|
||||||
|
% p(2) the slope
|
||||||
|
% p(3) the x-shift
|
||||||
|
% p(4) the y-shift
|
||||||
|
|
||||||
|
y_est = parameter(1)./(1+ exp(-parameter(2) .* (x - parameter(3)))) + parameter(4);
|
||||||
|
error = mean((y_est - y).^2);
|
44
statistics/code/sigmoidal_gradient_descent.m
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
|
||||||
|
%% fit the sigmoid
|
||||||
|
|
||||||
|
clear
|
||||||
|
close all
|
||||||
|
|
||||||
|
load('iv_curve.mat')
|
||||||
|
|
||||||
|
figure()
|
||||||
|
plot(voltage, current, 'o')
|
||||||
|
xlabel('voltate [mV]')
|
||||||
|
ylabel('current [pA]')
|
||||||
|
|
||||||
|
% amplitude, slope, x-shift, y-shift
|
||||||
|
%parameter = [10 0.25 -50, 2.5];
|
||||||
|
parameter = [20 0.5 -50, 2.5];
|
||||||
|
|
||||||
|
eps = 0.1;
|
||||||
|
% do the descent
|
||||||
|
gradient = [];
|
||||||
|
steps = 0;
|
||||||
|
error = [];
|
||||||
|
|
||||||
|
while isempty(gradient) || norm(gradient) > 0.01
|
||||||
|
steps = steps + 1;
|
||||||
|
gradient = lsq_gradient_sigmoid(parameter, voltage, current);
|
||||||
|
error(steps) = lsq_sigmoid_error(parameter, voltage, current);
|
||||||
|
parameter = parameter - eps .* gradient;
|
||||||
|
end
|
||||||
|
plot(1:steps, error)
|
||||||
|
|
||||||
|
disp('gradient descent done!')
|
||||||
|
disp(strcat('final position: ', num2str(parameter)))
|
||||||
|
disp(strcat('final error: ', num2str(error(end))))
|
||||||
|
|
||||||
|
%% use fminsearch
|
||||||
|
parameter = [10 0.5 -50, 2.5];
|
||||||
|
|
||||||
|
objective_function = @(p)lsq_sigmoid_error(p, voltage, current);
|
||||||
|
param = fminunc(objective_function, parameter);
|
||||||
|
disp(param)
|
||||||
|
param1 = fminsearch(objective_function, parameter);
|
||||||
|
disp(param1)
|