diff --git a/statistics/code/randomwalkstatistics.m b/statistics/code/randomwalkstatistics.m deleted file mode 100644 index 43632cd..0000000 --- a/statistics/code/randomwalkstatistics.m +++ /dev/null @@ -1,25 +0,0 @@ -p = 0.5; -nsteps = 100; -nwalks = 1000; - -y = zeros( nwalks, nsteps/10 ); -for k = 1:length( y ) - x = randomwalk( nsteps, p ); - for j = 1:nsteps/10 - y(k,j) = x((j-1)*10+1); - end - %plot( x ) - %pause( 1 ) - if rem(k,100) == 0 - %[h1,b1] = hist( y(1:k,1), [-50:2:50] ); - %[h2,b2] = hist( y(1:k,2), [-50:2:50] ); - %bar( b1, h1, 1.0, 'b' ); - %hold on; - %bar( b2, h2, 'FaceColor', 'r' ); - %hold off; - sdev = var( y(1:k,:), 1 ); - plot( sdev ) - pause( 1.0 ); - end -end - diff --git a/statistics/exercises/Makefile b/statistics/exercises/Makefile new file mode 100644 index 0000000..925485d --- /dev/null +++ b/statistics/exercises/Makefile @@ -0,0 +1,34 @@ +TEXFILES=$(wildcard statistics??.tex) +EXERCISES=$(TEXFILES:.tex=.pdf) +SOLUTIONS=$(EXERCISES:statistics%=solutions%) + +.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean + +pdf : $(SOLUTIONS) $(EXERCISES) + +exercises : $(EXERCISES) + +solutions : $(SOLUTIONS) + +$(SOLUTIONS) : solutions%.pdf : statistics%.tex instructions.tex + { echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@) + pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true + rm $(patsubst %.pdf,%,$@).[!p]* + +$(EXERCISES) : %.pdf : %.tex instructions.tex + pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true + +watch : + while true; do ! make -q pdf && make pdf; sleep 0.5; done + +watchexercises : + while true; do ! make -q exercises && make exercises; sleep 0.5; done + +watchsolutions : + while true; do ! make -q solutions && make solutions; sleep 0.5; done + +clean : + rm -f *~ *.aux *.log *.out + +cleanup : clean + rm -f $(SOLUTIONS) $(EXERCISES) diff --git a/statistics/exercises/bootstrap-01.tex b/statistics/exercises/bootstrap-01.tex deleted file mode 100644 index a5860e1..0000000 --- a/statistics/exercises/bootstrap-01.tex +++ /dev/null @@ -1,132 +0,0 @@ -\documentclass[12pt,a4paper,pdftex]{exam} - -\usepackage[german]{babel} -\usepackage{natbib} -\usepackage{graphicx} -\usepackage[small]{caption} -\usepackage{sidecap} -\usepackage{pslatex} -\usepackage{amsmath} -\usepackage{amssymb} -\setlength{\marginparwidth}{2cm} -\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} - -%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} -\pagestyle{headandfoot} -\header{{\bfseries\large \"Ubung 1}}{{\bfseries\large Bootstrap}}{{\bfseries\large 21. Oktober, 2015}} -\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: -jan.benda@uni-tuebingen.de} -\runningfooter{}{\thepage}{} - -\setlength{\baselineskip}{15pt} -\setlength{\parindent}{0.0cm} -\setlength{\parskip}{0.3cm} -\renewcommand{\baselinestretch}{1.15} - -\newcommand{\qt}[1]{\textbf{#1}\\} -\newcommand{\pref}[1]{(\ref{#1})} -\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} -\newcommand{\code}[1]{\texttt{#1}} - -\newcommand{\continue}{\ifprintanswers% -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\continuepage}{\ifprintanswers% -\newpage -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\newsolutionpage}{\ifprintanswers% -\newpage% -\else -\fi} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{document} - -\vspace*{-6.5ex} -\begin{center} -\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] -{\large Jan Grewe, Jan Benda}\\[-3ex] -Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ -\end{center} - -\begin{itemize} -\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass sie -auch wirklich das macht, was sie machen soll! Teste dies mit kleinen -Beispielen direkt in der Kommandozeile. -\item Versuche die L\"osungen der folgenden Aufgaben m\"oglichst in -sinnvolle kleine Funktionen herunterzubrechen. -\item Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, -lohnt es sich eine Funktion daraus zu schreiben! -\item Teste rechenintensive \code{for} Schleifen zuerst mit einer kleinen -Anzahl von Wiederholungen, und benutze erst am Ende, wenn alles -stimmt, eine gro{\ss}e Anzahl von Wiederholungen, um eine gute -Statistik zu bekommen. -\item Benutze die Hilfsfunktion von matlab und das Internet, um -herauszufinden wie bestimmte \code{matlab} Funktionen zu verwenden -sind und was f\"ur M\"oglichkeiten sie bieten. -\item Auch zu inhaltlichen Konzepten bietet das Internet oft viele Antworten! -\end{itemize} - - -\begin{questions} - -\question \qt{Bootstrap des Standardfehlers} -\begin{parts} - \part Lade von Ilias die Datei \code{thymusglandweights.dat} herunter. - Darin befindet sich ein Datensatz vom Gewicht der Thymus Dr\"use in 14-Tage alten - H\"uhnerembryos in mg. - \part Lade diese Daten in Matlab (\code{load} Funktion). - \part Bestimme Histogramm, Mittelwert und Standardfehler aus den ersten 80 Datenpunkten. - \part Bestimme den Standardfehler aus den ersten 80 Datenpunkten durch 500 Mal Bootstrappen. - \part Bestimme das 95\,\% Konfidenzintervall f\"ur den Mittelwert - aus der Bootstrap Verteilung (\code{quantile()} Funktion) --- also - das Interval innerhalb dessen mit 95\,\% Wahrscheinlichkeit der - wahre Mittelwert liegen wird. - \part Benutze den ganzen Datensatz und die Bootstrapping Technik, um die Abh\"angigkeit - des Standardfehlers von der Stichprobengr\"o{\ss}e zu bestimmen. - \part Vergleiche mit der bekannten Formel f\"ur den Standardfehler $\sigma/\sqrt{n}$. -\end{parts} - - -\continue -\question \qt{Student t-Verteilung} -\begin{parts} -\part Erzeuge 100000 normalverteilte Zufallszahlen. -\part Ziehe daraus 1000 Stichproben vom Umfang $m$ (3, 5, 10, 50). -\part Berechne den Mittelwert $\bar x$ der Stichproben und plotte die Wahrscheinlichkeitsdichte -dieser Mittelwerte. -\part Vergleiche diese Wahrscheinlichkeitsdichte mit der Gausskurve. -\part Berechne ausserdem die Gr\"o{\ss}e $t=\bar x/(\sigma_x/\sqrt{m}$ -(Standardabweichung $\sigma_x$) und vergleiche diese mit der Normalverteilung mit Standardabweichung Eins. Ist $t$ normalverteilt, bzw. unter welchen Bedingungen ist $t$ Normalverteilt? -\end{parts} - - -\question \qt{Korrelationen} -\begin{parts} -\part Erzeuge 1000 korrelierte Zufallszahlen $x$, $y$ durch -\begin{verbatim} -n = 1000 -a = 0.2; -x = randn(n, 1); -y = randn(n, 1) + a*x; -\end{verbatim} -\part Erstelle einen Scatterplot der beiden Variablen. -\part Warum ist $y$ mit $x$ korreliert? -\part Berechne den Korrelationskoeffizienten zwischen $x$ und $y$. -\part Was m\"usste man tun, um die Korrelationen zwischen den $x$-$y$ -Paaren zu zerst\"oren? -\part Mach genau dies 1000 mal und berechne jedes Mal den Korrelationskoeffizienten. -\part Bestimme die Wahrscheinlichkeitsdichte dieser Korrelationskoeffizienten. -\part Ist die Korrelation der urspr\"unglichen Daten signifikant? -\part Variiere den Parameter $a$ und \"uberpr\"ufe auf gleiche Weise die Signifikanz. -\end{parts} - - -\end{questions} - -\end{document} \ No newline at end of file diff --git a/statistics/code/bootstraptymus.m b/statistics/exercises/bootstraptymus.m similarity index 100% rename from statistics/code/bootstraptymus.m rename to statistics/exercises/bootstraptymus.m diff --git a/statistics/exercises/centrallimit.m b/statistics/exercises/centrallimit.m new file mode 100644 index 0000000..9f492bd --- /dev/null +++ b/statistics/exercises/centrallimit.m @@ -0,0 +1,72 @@ +%% central limit theorem +n = 10000; +m = 10; % number of loops + +%% (b) a single random number: +x = rand( n, 1 ); + +%% (c) plot probability density: +%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 ) + +%% (d) sum of two random numbers: +y = rand( n, 1 ); +x = x + y; +%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 ) + +%% (f) sum up more distributions: +x = zeros( n, 1 ); +means = zeros( m, 1 ); +stds = zeros( m, 1 ); +for i=1:m + 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 + means(i) = mu; % store mean + stds(i) = sd; % store standard deviation + %xx = min(x):0.01:max(x); + 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', 6 ) + 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 ); + h = h/sum(h)/(b(2)-b(1)); % normalization + bar(b, h) + hold off + xlabel( 'x' ) + ylabel( 'summed pdf' ) + if i < 6 + 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 ); +hold on +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' ) +xlabel('N') +hold off + + diff --git a/statistics/exercises/descriptivestatistics-01.tex b/statistics/exercises/descriptivestatistics-01.tex deleted file mode 100644 index 9800e54..0000000 --- a/statistics/exercises/descriptivestatistics-01.tex +++ /dev/null @@ -1,162 +0,0 @@ -\documentclass[12pt,a4paper,pdftex]{exam} - -\usepackage[german]{babel} -\usepackage{natbib} -\usepackage{graphicx} -\usepackage[small]{caption} -\usepackage{sidecap} -\usepackage{pslatex} -\usepackage{amsmath} -\usepackage{amssymb} -\setlength{\marginparwidth}{2cm} -\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} - -%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} -\pagestyle{headandfoot} -\header{{\bfseries\large \"Ubung 1}}{{\bfseries\large Deskriptive Statistik}}{{\bfseries\large 19. Oktober, 2015}} -\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: -jan.grewe@uni-tuebingen.de} -\runningfooter{}{\thepage}{} - -\setlength{\baselineskip}{15pt} -\setlength{\parindent}{0.0cm} -\setlength{\parskip}{0.3cm} -\renewcommand{\baselinestretch}{1.15} - -\newcommand{\qt}[1]{\textbf{#1}\\} -\newcommand{\pref}[1]{(\ref{#1})} -\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} -\newcommand{\code}[1]{\texttt{#1}} - -\newcommand{\continue}{\ifprintanswers% -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\continuepage}{\ifprintanswers% -\newpage -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\newsolutionpage}{\ifprintanswers% -\newpage% -\else -\fi} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{document} - -\vspace*{-6.5ex} -\begin{center} -\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] -{\large Jan Grewe, Jan Benda}\\[-3ex] -Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ -\end{center} - -% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und -% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost -% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) -% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen -% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig -% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: -% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden -% (z.B. variablen\_datentypen\_mueller.m). - -\begin{itemize} -\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass sie -auch wirklich das macht, was sie machen soll! Teste dies mit kleinen -Beispielen direkt in der Kommandozeile. -\item Versuche die L\"osungen der folgenden Aufgaben m\"oglichst in -sinnvolle kleine Funktionen herunterzubrechen. -\item Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, -lohnt es sich eine Funktion daraus zu schreiben! -\item Teste rechenintensive \code{for} Schleifen zuerst mit einer kleinen -Anzahl von Wiederholungen, und benutze erst am Ende, wenn alles -stimmt, eine gro{\ss}e Anzahl von Wiederholungen, um eine gute -Statistik zu bekommen. -\item Benutze die Hilfsfunktion von matlab und das Internet, um -herauszufinden wie bestimmte \code{matlab} Funktionen zu verwenden -sind und was f\"ur M\"oglichkeiten sie bieten. -\item Auch zu inhaltlichen Konzepten bietet das Internet oft viele Antworten! -\end{itemize} - - -\begin{questions} - -\question \qt{Wahrscheinlichkeiten eines W\"urfels I} -Der Computer kann auch als W\"urfel verwendet werden! -\begin{parts} - \part Simuliere 10000 W\"urfe mit dem W\"urfel durch Erzeugung von - ganzzahligen Zufallszahlen mit den Augenzahlen $x_i = 1, 2, \ldots 6$ . - \part Berechne die Wahrscheinlichkeit $P(3)$ - des Auftretens der Augenzahl drei durch Bestimmung der Anzahl der Dreien im Datensatz.\\ - Entspricht das Ergebnis deiner Erwartung?\\ - \"Uberpr\"ufe auch die Wahrscheinlichkeit $P(x_i)$ der anderen Zahlen.\\ - Ist das ein fairer W\"urfel? - \part Speicher die berechneten Wahrscheinlichkeiten $P(x_i)$ f\"ur das Auftreten der - gew\"urfelten Zahlen in einem Vektor und benutze die \code{bar} Funktion, - um diese Wahrscheinlichkeiten als Funktion der Augenzahl zu plotten. - \part Erstelle in einem weiterem Plot ein entsprechendes normiertes Histogramm - mit der \code{hist} Funktion. - \part \extra Wie k\"onnte man einen gezinkten W\"urfel simulieren, bei dem die sechs - dreimal so h\"aufig wie die anderen Zahlen gew\"urfelt wird?\\ - Fertige von diesem W\"urfel ein Histogram aus 10000 W\"urfen an. -\end{parts} - - -\continue -\question \qt{Wahrscheinlichkeiten eines W\"urfels II} -Wir werten nun das Verhalten mehrerer W\"urfel aus. -\begin{parts} - \part Simuliere 20 W\"urfel, von denen jeder 100 mal geworfen wird - (jeder W\"urfel wird mit dem gleichen Zufallsgenerator simuliert). - \part Berechne aus diesem Datensatz f\"ur jeden W\"urfel ein normiertes Histogramm. - \part Bestimme den Mittelwert und die Standardabweichung f\"ur jede - Augenzahl gemittelt \"uber die W\"urfel. - \part Stelle das Ergebnis mit einem S\"aulenplot mit Fehlerbalken dar - (\code{bar} mit \code{errorbar} Funktionen). -\end{parts} - - -\question \qt{Wahrscheinlichkeiten der Normalverteilung} -Mit den folgenden Aufgaben wollen wir bestimmen, welcher Anteil eines -normalverteilten Datensatzes in bestimmten Grenzen symmetrisch um den -Mittelwert enthalten ist. -\begin{parts} - \part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus - $n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und - Standardabweichung $\sigma=1$. - \part \label{onesigma} Wieviele dieser Daten 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 - 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 \] - \"uber die Normalverteilung - \[ p_g(x) = - \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \] - \"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 Was passiert mit der Wahrscheinlichkeit eine Zahl in einem bestimmten Interval - zu ziehen, wenn dieses Intervall immer kleiner wird?\\ - Schreibe ein Programm, das dies illustriert.\\ - Wie gro{\ss} ist die Wahrscheinlichkeit $P(x_i=0.1234)$? - \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} - - -\end{questions} - -\end{document} \ No newline at end of file diff --git a/statistics/exercises/descriptivestatistics-02.tex b/statistics/exercises/descriptivestatistics-02.tex deleted file mode 100644 index 3f92aa5..0000000 --- a/statistics/exercises/descriptivestatistics-02.tex +++ /dev/null @@ -1,164 +0,0 @@ -\documentclass[12pt,a4paper,pdftex]{exam} - -\usepackage[german]{babel} -\usepackage{natbib} -\usepackage{graphicx} -\usepackage[small]{caption} -\usepackage{sidecap} -\usepackage{pslatex} -\usepackage{amsmath} -\usepackage{amssymb} -\setlength{\marginparwidth}{2cm} -\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} - -%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} -\pagestyle{headandfoot} -\header{{\bfseries\large \"Ubung 2}}{{\bfseries\large Deskriptive Statistik}}{{\bfseries\large 19. Oktober, 2015}} -\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: -jan.grewe@uni-tuebingen.de} -\runningfooter{}{\thepage}{} - -\setlength{\baselineskip}{15pt} -\setlength{\parindent}{0.0cm} -\setlength{\parskip}{0.3cm} -\renewcommand{\baselinestretch}{1.15} - -\newcommand{\qt}[1]{\textbf{#1}\\} -\newcommand{\pref}[1]{(\ref{#1})} -\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} -\newcommand{\code}[1]{\texttt{#1}} - -\newcommand{\continue}{\ifprintanswers% -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\continuepage}{\ifprintanswers% -\newpage -\else -\vfill\hspace*{\fill}$\rightarrow$\newpage% -\fi} -\newcommand{\newsolutionpage}{\ifprintanswers% -\newpage% -\else -\fi} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{document} - -\vspace*{-6.5ex} -\begin{center} -\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] -{\large Jan Grewe, Jan Benda}\\[-3ex] -Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ -\end{center} - -% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und -% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost -% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) -% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen -% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig -% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: -% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden -% (z.B. variablen\_datentypen\_mueller.m). - - -\begin{itemize} -\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass sie -auch wirklich das macht, was sie machen soll! Teste dies mit kleinen -Beispielen direkt in der Kommandozeile. -\item Versuche die L\"osungen der folgenden Aufgaben m\"oglichst in -sinnvolle kleine Funktionen herunterzubrechen. -\item Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, -lohnt es sich eine Funktion daraus zu schreiben! -\item Teste rechenintensive \code{for} Schleifen zuerst mit einer kleinen -Anzahl von Wiederholungen, und benutze erst am Ende, wenn alles -stimmt, eine gro{\ss}e Anzahl von Wiederholungen, um eine gute -Statistik zu bekommen. -\item Benutze die Hilfsfunktion von matlab und das Internet, um -herauszufinden wie bestimmte \code{matlab} Funktionen zu verwenden -sind und was f\"ur M\"oglichkeiten sie bieten. -\item Auch zu inhaltlichen Konzepten bietet das Internet oft viele Antworten! -\end{itemize} - -\begin{questions} - -\question \qt{Zentraler Grenzwertsatz} -Der Zentrale Grenzwertsatz besagt, dass die Summe von unabh\"angigen -und identisch verteilten (i.i.d. = independent and identically -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 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?\\ - 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}). -\end{parts} - - -\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} - - -\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} - -\end{questions} - -\end{document} \ No newline at end of file diff --git a/statistics/exercises/die1.m b/statistics/exercises/die1.m new file mode 100644 index 0000000..d407ff1 --- /dev/null +++ b/statistics/exercises/die1.m @@ -0,0 +1,39 @@ +n = 10000; + +%% (a) simulate n times rolling a die: +x = rollthedie( n ); + +%% (b) probability P(3): +P3 = sum(x == 3)/length(x); +fprintf( 'P(3)=%.3f, expected is %.3f\n', P3, 1/6 ); + +for i =1:6 + P = sum(x == i)/length(x); + fprintf( 'P(%d)=%.3f, expected is %.3f\n', i, P, 1/6 ); +end + +%% (c) P(i) +P = zeros(1, 6); +for i =1:6 + P(i) = sum(x == i)/length(x); +end +subplot( 1, 2, 1 ) +plot( [0 7], [1/6 1/6], 'r', 'linewidth', 6 ) +hold on +bar( P ); +hold off +xlim( [ 0 7 ] ); +xlabel('Eyes'); +ylabel('Probability'); + +%% (d) histogram of x +subplot( 1, 2, 2 ); +diehist( x ); + +%% (e) loaded die +% eye 1 to 5 have P=1/8, eye 6 has P = 3/8 ! +x = randi( 8, 1, n ); % random numbers from 1 to 8 +x(x>6) = 6; % set numbers 7 and 8 to 6 +diehist( x ); + + diff --git a/statistics/exercises/die2.m b/statistics/exercises/die2.m new file mode 100644 index 0000000..407592b --- /dev/null +++ b/statistics/exercises/die2.m @@ -0,0 +1,24 @@ +ndies = 20; +n = 100; +P = zeros(ndies, 6); +for i = 1:ndies + % (a) roll a single die: + x = rollthedie( n ); + % (b) compute normalized histogram: + [h,b] = hist( x, 1:6 ); + h = h/sum(h); % normalization + % (c) store the histograms: + P(i,:) = h; +end +% (c) mean and standard deviation for each eye: +m = mean(P, 1); +s = std(P, 1); +% (d) plot results: +bar(m, 'facecolor', [0.8 0 0]); % darker red +hold on; +errorbar(m, s, '.k', 'linewidth', 2 ); % k is black +xlim( [ 0, 7 ] ); +xlabel('Eyes'); +ylabel('Probability'); +hold off; + diff --git a/statistics/exercises/diehist.m b/statistics/exercises/diehist.m new file mode 100644 index 0000000..4a8c24a --- /dev/null +++ b/statistics/exercises/diehist.m @@ -0,0 +1,13 @@ +function diehist( x ) +% plots a normalized histogram of random numbers x drawn from rolling a +% die. + [h,b] = hist( x, 1:6 ); + h = h/sum(h); % normalization + plot( [0 7], [1/6 1/6], 'r', 'linewidth', 6 ) + hold on + bar( b, h ); + hold off + xlim( [ 0, 7 ] ); + xlabel('Eyes'); + ylabel('Probability'); +end diff --git a/statistics/exercises/instructions.tex b/statistics/exercises/instructions.tex new file mode 100644 index 0000000..12e9e24 --- /dev/null +++ b/statistics/exercises/instructions.tex @@ -0,0 +1,41 @@ +\vspace*{-6.5ex} +\begin{center} +\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] +{\large Jan Grewe, Jan Benda}\\[-3ex] +Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ +\end{center} + +\ifprintanswers% +\else + +% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und +% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost +% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) +% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen +% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig +% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: +% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden +% (z.B. variablen\_datentypen\_mueller.m). + +\begin{itemize} +\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass + sie auch wirklich das macht, was sie machen soll! Teste dies mit + kleinen Beispielen direkt in der Kommandozeile. +\item Versuche die L\"osungen der Aufgaben m\"oglichst in + sinnvolle kleine Funktionen herunterzubrechen. + Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, + lohnt es sich eine Funktion daraus zu schreiben! +\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen + zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner + Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft + ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute + Statistik zu bekommen. +\item Benutze die Hilfsfunktion von \code{matlab} (\code{help + commando} oder \code{doc commando}) und das Internet, um + herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden + sind und was f\"ur M\"oglichkeiten sie bieten. + Auch zu inhaltlichen Konzepten bietet das Internet oft viele + Antworten! +\end{itemize} + +\fi diff --git a/statistics/exercises/normprobs.m b/statistics/exercises/normprobs.m new file mode 100644 index 0000000..c7e4f37 --- /dev/null +++ b/statistics/exercises/normprobs.m @@ -0,0 +1,43 @@ +%% (a) generate normal distributed random numbers: +n = 10000; +x = randn( n, 1 ); + +%% (b) +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) +dx = 0.01; +xx = -10:dx:10; % x-values +pg = exp(-0.5*xx.^2)/sqrt(2*pi); % y-values Gaussian pdf +% integral over the whole range: +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 ); + +%% (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 ); + +%% (e) probability of small ranges +nr = 50; +xs = zeros(nr, 1); % size of integration interval +Ps = zeros(nr, 1); % storage +for i = 1:nr + % upper limit goes from 4.0 down to 0.0: + xupper = 3.0*(nr-i)/nr; + xs(i) = xupper; + % integral from 0 to xupper: + Ps(i) = sum(pg((xx>=0.0)&(xx<=xupper)))*dx; +end +plot( xs, Ps, 'linewidth', 3 ) +ylim([0 0.55]) +xlabel('Integration interval') +ylabel('Probability') +fprintf('The probability P(0.1234) = %.4f\n\n', sum(x == 0.1234)/length(x) ); diff --git a/statistics/code/randomwalk.m b/statistics/exercises/randomwalk.m similarity index 100% rename from statistics/code/randomwalk.m rename to statistics/exercises/randomwalk.m diff --git a/statistics/exercises/randomwalkstatistics.m b/statistics/exercises/randomwalkstatistics.m new file mode 100644 index 0000000..8653aa6 --- /dev/null +++ b/statistics/exercises/randomwalkstatistics.m @@ -0,0 +1,51 @@ +p = 0.5; + +%% (b) +nwalks = [100 1000, 10000]; +for i=1:length(nwalks) + subplot( 3, 1, i ); + for k=1:10 + x = randomwalk( nwalks(i), p ); + plot( x ); + hold on; + end + text( 0.05, 0.8, sprintf( 'N=%d', nwalks(i)), 'units', 'normalized' ) + xlabel( 'Number of steps' ); + ylabel( 'Position of walker' ) + hold off; +end +pause( 5.0 ) + +nsteps = 100; +nwalks = 10000; +subplot( 1, 1, 1 ) +y = zeros( nwalks, nsteps ); +for k = 1:nwalks + x = randomwalk( nsteps, p ); + y(k,:) = x; % store random walk +end +ns = 1:nsteps; +mu = mean(y, 1); +sdev = std(y, 1); +plot( ns, mu, 'b', 'linewidth', 4 ) +hold on +plot( ns, sdev, 'r', 'linewidth', 4 ) +xx = 0:0.01:nsteps; +plot( xx, sqrt(xx), 'k' ) +plot( xx, zeros(length(xx),1), 'k' ) +legend( 'mean', 'std', 'theory' ) +hold off +pause( 3.0 ); + +%% (d) histograms: +tinx = [100, 30, 10]; +colors = [ 0 0 1; 0.5 0 0.5; 1 0 0 ]; +for i = 1:length(tinx) + [h,b] = hist( y(:,tinx(i)), 20); + h = h/sum(h)/(b(2)-b(1)); + bar(b, h, 1.0, 'facecolor', colors(i,:)) + hold on; +end +hold off; +xlabel('Position of walker'); +ylabel('Probability density'); diff --git a/statistics/exercises/rollthedie.m b/statistics/exercises/rollthedie.m new file mode 100644 index 0000000..1842da8 --- /dev/null +++ b/statistics/exercises/rollthedie.m @@ -0,0 +1,4 @@ +function x = rollthedie( n ) +% return a vector with the result of rolling a die n times + x = randi( [1, 6], n, 1 ); +end diff --git a/statistics/code/tdistribution.m b/statistics/exercises/tdistribution.m similarity index 100% rename from statistics/code/tdistribution.m rename to statistics/exercises/tdistribution.m