From d717b436303e22bae07a17bc349fe039f4248e42 Mon Sep 17 00:00:00 2001 From: Jan Benda <jan.benda@uni-tuebingen.de> Date: Mon, 28 Nov 2016 17:33:27 +0100 Subject: [PATCH] new statistics exercises --- pointprocesses/exercises/pointprocesses01.tex | 4 +- statistics/exercises/centrallimit.m | 48 ++--- statistics/exercises/exercises02.tex | 186 +++++++++++------- statistics/exercises/normprobs.m | 49 ++++- 4 files changed, 183 insertions(+), 104 deletions(-) diff --git a/pointprocesses/exercises/pointprocesses01.tex b/pointprocesses/exercises/pointprocesses01.tex index e537be7..ea8674d 100644 --- a/pointprocesses/exercises/pointprocesses01.tex +++ b/pointprocesses/exercises/pointprocesses01.tex @@ -98,8 +98,8 @@ jan.benda@uni-tuebingen.de} Mit den folgenden Aufgaben wollen wir die Statistik der Spiketrains der drei Neurone miteinander vergleichen. \begin{parts} - \part Lade die Spiketrains aus den drei Dateien. Achte darauf, dass sie verschiedene - Variablen\-namen bekommen. + \part Lade die Spiketrains aus den drei Dateien. Achte darauf, + dass sie verschiedene Variablen\-namen bekommen. \begin{solution} \begin{lstlisting} clear all diff --git a/statistics/exercises/centrallimit.m b/statistics/exercises/centrallimit.m index 0794335..cfc5f0d 100644 --- a/statistics/exercises/centrallimit.m +++ b/statistics/exercises/centrallimit.m @@ -3,36 +3,36 @@ n = 10000; m = 10; % number of loops %% (b) a single data set of random numbers: -x = rand( n, 1 ); +x = rand(n, 1); %% (c) plot probability density: -%histogram( x, 'Normalization', 'pdf' ); -[h,b] = hist( x, 20 ); +%histogram(x, 'Normalization', 'pdf'); +[h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) title('A uniform distribution') xlabel('x') ylabel('probability density') -pause( 2.0 ) +pause(2.0) %% (d) sum of two random numbers: -y = rand( n, 1 ); +y = rand(n, 1); x = x + y; -%histogram( x, 'Normalization', 'pdf' ); -[h,b] = hist( x, 20 ); +%histogram(x, 'Normalization', 'pdf'); +[h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) title('Sum of two uniform distributions') xlabel('x') ylabel('probability density') -pause( 2.0 ) +pause(2.0) %% (f) sum up more distributions: -x = zeros( n, 1 ); -means = zeros( m, 1 ); -stds = zeros( m, 1 ); +x = zeros(n, 1); +means = zeros(m, 1); +stds = zeros(m, 1); for i=1:m - y = rand( n, 1 ); % new uniform distributed numbers + y = rand(n, 1); % new uniform distributed numbers x = x + y; % add them to the sum mu = mean(x); % compute mean sd = std(x); % compute standard deviation @@ -42,34 +42,34 @@ for i=1:m xx = -1:0.01:i+1; % x-axis values for plot of pdf p = exp(-0.5*(xx-mu).^2/sd^2)/sqrt(2*pi*sd^2); % pdf plot(xx, p, 'r', 'linewidth', 3 ) - ns = sprintf( 'N=%d', i ); - text( 0.1, 0.9, ns, 'units', 'normalized' ) + ns = sprintf('N=%d', i); + text(0.1, 0.9, ns, 'units', 'normalized') hold on - %histogram( x, 20, 'Normalization', 'pdf' ); - [h,b] = hist( x, 20 ); + %histogram(x, 20, 'Normalization', 'pdf'); + [h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) hold off xlim([-0.5, i+0.5]) - xlabel( 'x' ) - ylabel( 'summed pdf' ) - savefigpdf( gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5 ); + xlabel('x') + ylabel('summed pdf') + savefigpdf(gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5); if i < 6 - pause( 3.0 ) + pause(3.0) end end %% (h) mean and standard deviation in dependence on number of summed up distributions: nx = 1:m; -plot( nx, means, 'b', 'linewidth', 4 ); +plot(nx, means, 'b', 'linewidth', 4); hold on -plot( nx, stds, 'r', 'linewidth', 4 ); +plot(nx, stds, 'r', 'linewidth', 4); xx = 0:0.01:m; sdu = 1.0/sqrt(12); % standarad deviation of the uniform distribution plot( xx, sqrt(xx)*sdu, 'k' ) -legend( 'mean', 'std', 'theory' ) +legend('mean', 'std', 'theory') xlabel('N') hold off -savefigpdf( gcf, 'centrallimit-samples.pdf', 6, 5 ); +savefigpdf(gcf, 'centrallimit-samples.pdf', 6, 5); diff --git a/statistics/exercises/exercises02.tex b/statistics/exercises/exercises02.tex index 1aa4b20..82e2528 100644 --- a/statistics/exercises/exercises02.tex +++ b/statistics/exercises/exercises02.tex @@ -15,7 +15,7 @@ \else \newcommand{\stitle}{} \fi -\header{{\bfseries\large \"Ubung 6X\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 22. November, 2016}} +\header{{\bfseries\large \"Ubung 7\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 29. November, 2016}} \firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -78,6 +78,8 @@ jan.benda@uni-tuebingen.de} \newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} \newcommand{\code}[1]{\texttt{#1}} +\graphicspath{{../../pointprocesses/exercises/}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} @@ -96,13 +98,16 @@ Mittelwert enthalten ist. \part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus $n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und Standardabweichung $\sigma=1$ (\code{randn() Funktion}). - \part Bestimme und plotte die Wahrscheinlichkeitsdichte dieser Zufallszahlen (normiertes Histogramm). - \part Plotte zum Vergleich in den gleichen Plot die Normalverteilung + \part Bestimme und plotte die Wahrscheinlichkeitsdichte dieser + Zufallszahlen (normiertes Histogramm) und plotte zum Vergleich in + den gleichen Plot die Normalverteilung \[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \] - \part \label{onesigma} Wieviele dieser Daten sind maximal eine Standardabweichung vom Mittelwert entfernt?\\ + + \part \label{onesigma} Wieviele dieser Daten $X$ sind maximal eine Standardabweichung vom Mittelwert entfernt?\\ D.h. wieviele Datenwerte $x_i$ haben den Wert $-\sigma < x_i < +\sigma$?\\ - Wie gro{\ss} ist also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen + Wie gro{\ss} ist dann also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen Wert in diesem Interval zu erhalten? + \part \label{probintegral} Berechne numerisch diese Wahrscheinlichkeit aus dem entsprechenden Integral \[ P_{\pm\sigma}=\int_{x=\mu-\sigma}^{x=\mu+\sigma} p_g(x) \, dx \] @@ -110,16 +115,24 @@ Mittelwert enthalten ist. \"Uberpr\"ufe zuerst, ob tats\"achlich \[ \int_{-\infty}^{+\infty} p_g(x) \, dx = 1 \; . \] Warum muss das so sein? - \part Welcher Anteil der Daten ist in den Intervallen $\pm2\sigma$ sowie $\pm3\sigma$ - enthalten? - \part \label{givenfraction} Finde heraus in welchem Interval symmetrisch um den Mittelwert - 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten sind. - \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma} - -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit - beliebigen Mittelwerten und Standardabweichungen funktioniert.\\ - Teste den Code mit entsprechenden Zufallszahlen.\\ - Wie bekommt man mit \code{randn()} Zufallszahlen mit beliebiger - Standardabweichung und Mittelwerten? + + \part Welcher Anteil der Daten ist in den Intervallen $\pm 2\sigma$ + sowie $\pm 3\sigma$ enthalten? + + Vergleiche die Ergebnisse jeweils mit dem entsprechenden Integral + \"uber die Wahrscheinlichkeitsdichte. + + \part \label{givenfraction} Finde durch numerische Integration der + Wahrscheinlichkeitsdichte heraus, in welchem Interval symmetrisch um + den Mittelwert 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten + sind. + + % \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma} + % -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit + % beliebigen Mittelwerten und Standardabweichungen funktioniert.\\ + % Teste den Code mit entsprechenden Zufallszahlen.\\ + % Wie bekommt man mit \code{randn()} Zufallszahlen mit beliebiger + % Standardabweichung und Mittelwerten? \end{parts} \begin{solution} \lstinputlisting{normprobs.m} @@ -134,30 +147,40 @@ distributed) Zufallsvariablen gegen die Normalverteilung konvergiert. Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen. \begin{parts} - \part Versuche dir klar zu machen, was der Zentrale Grenzwertsatz - bedeutet, und wie du vorgehen k\"onntest ein Programm zu - schreiben, das den Grenzwertsatz illustriert. + \part Bevor du die weiteren Teilaufgaben liest, versuche dir klar zu + machen, was der Zentrale Grenzwertsatz bedeutet, und wie du vorgehen + k\"onntest ein Programm zu schreiben, das den Grenzwertsatz + illustriert. + \part Erzeuge 10000 zwischen 0 und 1 gleichverteilte Zufallszahlen (Funktion \code{rand}). + \part Plotte deren Wahrscheinlichkeitsdichte (normiertes Histogram). + \part Erzeuge weitere 10000 gleichverteilte Zufallszahlen und addiere diese zu den bereits vorhandenen auf. + \part Plotte die Wahrscheinlichkeitsdichte der aufsummierten Zufallszahlen. + \part Wiederhole Schritt (d) und (e) viele Male. + \part Vergleiche in einer Grafik die Wahrscheinlichkeitsdichte der aufsummierten Zufallszahlen mit der Gaussfunktion \[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\] mit dem Mittelwert $\mu$ und der Standardabweichung $\sigma$ der aufsummierten Zufallszahlen. + \part Wie \"andert sich der Mittelwert und die Standardabweichung/Varianz - der aufsummierten Zufallszahlen?\\ + der aufsummierten Zufallszahlen? + Wie h\"angen diese mit den Werten der urspr\"unglichen Verteilung zusammen? - \part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit exponentiell - verteilten Zufallszahlen (Funktion \code{rande}). + + \part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit + exponentiell verteilten Zufallszahlen (Funktion \code{rande}). \end{parts} \begin{solution} \lstinputlisting{centrallimit.m} @@ -169,56 +192,81 @@ Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen. \end{solution} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\question \qt{Random Walk} -Im folgenden wollen wir einige Eigenschaften des Random Walks bestimmen. -\begin{parts} - \part Schreibe eine Funktion, die einen einzelnen Random Walk mit - Startwert 0 f\"ur $n$ Schritte und Wahrscheinlichkeit $p$ f\"ur - einen positiven Schritt als Vektor zur\"uckgibt. - \part Visualisiere jeweils 10 Random Walks mit $p=0.5$ zusammen in einem Plot - f\"ur $n=100$, $n=1000$ und $n=10000$ (drei Plots).\\ - Sch\"atze aus den Abbildungen ab, wie sich der Mittelwert und die Standardabweichung - des Random Walks mit der Zeit (Schritte) sich entwickelt. - \part \"Uberpr\"uefe deine Hypothese zum Mittelwert und zur - Standardabweichung, indem du von $m$ Random Walks ($m \ge 10$) f\"ur - jeden z.B. zehnten Schritt den Mittelwert und die Standardabweichung - \"uber die Positionen der $m$ Random Walks berechnest.\\ - Wie h\"angt also die Standardabweichung von der Anzahl der Schritte - ab? Wie entwickelt sich die Standardabweichung f\"ur eine sehr - gro{\ss}e Anzahl von Schritten? - \part \extra Erstelle eine Grafik, die die Verteilung der Position eines Random Walkers - zu drei verschiedenen Zeitpunkten zeigt. -\end{parts} -\begin{solution} - \lstinputlisting{randomwalk.m} - \lstinputlisting{randomwalkstatistics.m} - \includegraphics[width=0.8\textwidth]{randomwalk-traces}\\ - \includegraphics[width=0.5\textwidth]{randomwalk-stdev} - \includegraphics[width=0.5\textwidth]{randomwalk-hists} -\end{solution} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \question \qt{Intervallstatistik von Spiketrains} + In Ilias findet ihr die Dateien \code{poisson.mat}, + \code{pifou.mat}, und \code{lifadapt.mat}. Jede dieser Dateien + enth\"alt mehrere Trials von Spiketrains von einer bestimmten Art + von Neuron. Die Spikezeiten sind in Sekunden gemessen. + Mit den folgenden Aufgaben wollen wir die Intervallstatistik der + Spiketrains der drei Neurone miteinander vergleichen. + \begin{parts} + \part Lade die Spiketrains aus den drei Dateien. Achte darauf, + dass sie verschiedene Variablen\-namen bekommen. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\question \qt{\extra 2D Random Walk} -Bisher hat sich unser Random Walker nur in einer Dimension bewegt -(nur vorw\"arts oder r\"uckw\"arts). Er kann aber auch in mehreren Dimensionen laufen!\\ -In zwei Dimensionen wird dazu in jedem Schritt eine weitere -Zufallszahl gezogen, die bestimmt ob er einen Schritt nach links oder -rechts gemacht hat. Die Bewegung nach vorne/hinten bzw. links/rechts -sind unabh\"angig voneinander. -\begin{parts} - \part Wie kann unter Verwendung unserer Funktion f\"ur den - eindimensionalen Random Walk ein zweidimensionaler Random Walk - simuliert werden? - \part Erstelle h\"ubsche Bilder, die zweidimensionalen Random - Walks verschiedener L\"ange (bis zu mindestens $n=1000000$) illustrieren. - \part Animationen sind auch sch\"on! z.B. mit dem \code{pause} Befehl. - \part Anstatt einfach den Weg des Random Walks zu zeichnen, kann man - sich auch merken, wie oft er an jeder Stelle vorbeigekommen ist und - mit einem Farbcode plotten. -\end{parts} + In welchem Datentyp liegen die Daten vor? Wie kann auf einzelne + Spiketrains zugegriffen werden? Wie auf einzelne Spikezeiten? + \begin{solution} + \begin{lstlisting} + clear all + % not so good: + load poisson.mat + whos + poissonspikes = spikes; + load pifou.mat; + pifouspikes = spikes; + load lifadapt.mat; + lifadaptspikes = spikes; + clear spikes; + % better: + clear all + x = load( 'poisson.mat' ); + poissonspikes = x.spikes; + x = load( pifou.mat' ); + pifouspikes = x.spikes; + x = load( 'lifadapt.mat' ); + lifadaptspikes = x.spikes; + \end{lstlisting} + \end{solution} + + \part Schreibe eine Funktion, die die Spikezeiten der ersten + $t_{max}$ Sekunden in einem Rasterplot visualisiert. In jeder + Zeile des Rasterplots wird ein Spiketrain dargestellt. Jeder + einzelne Spike wird als senkrechte Linie zu der Zeit des + Auftretens des Spikes geplottet. Benutze die Funktion, um die + Spikeraster der ersten 1\,s der drei Neurone nebeneinander zu plotten. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/spikeraster.m} + \lstinputlisting{../../pointprocesses/code/plotspikeraster.m} + \mbox{}\\[-3ex] + \colorbox{white}{\includegraphics[width=1\textwidth]{spikeraster}} + \end{solution} + + \part Schreibe eine Funktion, die einen einzigen Vektor mit den + Interspikeintervallen aller Trials von Spikezeiten zur\"uckgibt. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/isis.m} + \end{solution} + + \part Schreibe eine Funktion, die ein normiertes Histogramm aus + einem Vektor von Interspikeintervallen, gegeben in Sekunden, + berechnet und dieses mit richtiger Achsenbeschriftung plottet. + Die Interspikeintervalle sollen dabei in Millisekunden angegeben + werden. Die Funktion soll zus\"atzlich den Mittelwert, die + Standardabweichung, und den Variationskoeffizienten der + Interspikeintervalle berechnen und diese im Plot mit angeben. + + Benutze die vorherige und diese Funktion, um die + Interspikeintervall Verteilung der drei Neurone zu vergleichen. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/isihist.m} + \lstinputlisting{../../pointprocesses/code/plotisih.m} + \mbox{}\\[-3ex] + \colorbox{white}{\includegraphics[width=1\textwidth]{isihist}} + \end{solution} + \end{parts} \end{questions} -\end{document} \ No newline at end of file +\end{document} diff --git a/statistics/exercises/normprobs.m b/statistics/exercises/normprobs.m index 33af699..95f1d0c 100644 --- a/statistics/exercises/normprobs.m +++ b/statistics/exercises/normprobs.m @@ -1,14 +1,30 @@ %% (a) generate normal distributed random numbers: n = 10000; -x = randn( n, 1 ); +x = randn(n, 1); -%% (b) +%% (b) plot histogram and compare with pdf: +bw = 0.5; +bins=[-5:bw:5]; +n = hist(x, bins); +p = n/sum(n)/bw; +subplot(1, 2, 2); +bar(bins, p); +hold on; +xx = [bins(1):0.01:bins(end)]; +gauss = exp(-0.5*xx.^2.0)/sqrt(2*pi); +plot(xx, gauss, 'r', 'linewidth', 2); +hold off; +xlim([-5 5]) +xlabel('x'); +ylabel('p(x)'); + +%% (c) fraction of data in +/- 1 sigma: nsig = sum((x>=-1.0)&(x<=1.0)); Psig = nsig/length(x); fprintf('%d of %d data elements, i.e. %.2f%% are contained in the interval -1 to +1\n\n', ... nsig, length(x), 100.0*Psig ); -%% (c) +%% (d) intgegral over pdf: dx = 0.01; xx = -10:dx:10; % x-values pg = exp(-0.5*xx.^2)/sqrt(2*pi); % y-values Gaussian pdf @@ -17,10 +33,25 @@ P = sum(pg)*dx; fprintf( 'Integral over the Gaussian pdf is %.3f\n', P ); % integral from -1 to 1: P = sum(pg((xx>=-1.0)&(xx<=1.0)))*dx; % we need to use xx, not the random numbers x! -fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n', P ); +fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n\n', P ); + +%% (e) +for sigma = [1.0, 2.0, 3.0] + Pdata = sum((x>=-sigma)&(x<=sigma))/length(x); + Ppdf = sum(pg((xx>=-sigma)&(xx<=sigma)))*dx; + fprintf( 'Integral over the Gaussian pdf from -%.0f to +%.0f is %.4f\n', sigma, sigma, Ppdf ); + fprintf( 'Probability of data in range from -%.0f to +%.0f is %.4f\n\n', sigma, sigma, Pdata ); +end + +%% (f) +for P = [0.5, 0.9, 0.95, 0.99] + for upper = xx(xx>0.0) + Ppdf = sum(pg((xx>=-upper)&(xx<=upper)))*dx; + if Ppdf > P + fprintf('-%.2f < x < +%.2f: P=%.2f\n', upper, upper, P); + break + end + end +end + -%% (d) -P = sum(pg((xx>=-2.0)&(xx<=2.0)))*dx; -fprintf( 'Integral over the Gaussian pdf from -2 to 2 is %.4f\n', P ); -P = sum(pg((xx>=-3.0)&(xx<=3.0)))*dx; -fprintf( 'Integral over the Gaussian pdf from -3 to 3 is %.4f\n\n', P );