Merge branch 'master' of raven:scientificComputing

This commit is contained in:
Jan Benda 2015-10-26 19:25:01 +01:00
commit 54a86daf60
24 changed files with 338 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -86,6 +86,8 @@
\end{flushright}
}
\newcommand{\code}[1]{\texttt{#1}}
\input{../../latex/environments.tex}
\makeatother
@ -103,11 +105,259 @@
\begin{enumerate}
\item Graphische Darstellung von Daten
\item Spiketrain Analyse
\item \"Ubungen, \"Ubungen, \"Ubungen.
\end{enumerate}
\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]
\huge{2. Spiketrain Analyse I}
\end{frame}

View 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);

View 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;

View 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)

View 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));

View 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

View 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);

View 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)