New bootstrap exercises

This commit is contained in:
Jan Benda 2015-10-20 01:43:18 +02:00
parent 1e3b02b9a1
commit 2787e55094
17 changed files with 10360 additions and 0 deletions

View File

@ -0,0 +1,23 @@
nsamples = 1000
resample = 500
x = randn( nsamples, 1 );
sem = std(x)/sqrt(nsamples);
mu = zeros( resample, 1 );
for i = 1:resample
% resample:
xr = x(randi(nsamples, nsamples, 1));
% compute statistics on sample:
mu(i) = mean(xr);
end
bootsem = std( mu );
hold on
hist( x, 20 );
hist( mu, 20 );
hold off
disp(['bootstrap standard error: ', num2str(bootsem)]);
disp(['standard error: ', num2str(sem)]);

View File

@ -0,0 +1,24 @@
resample = 500
load( 'thymusglandweights.dat' );
x = thymusglandweights;
nsamples = length( x );
sem = std(x)/sqrt(nsamples);
mu = zeros( resample, 1 );
for i = 1:resample
% resample:
xr = x(randi(nsamples, nsamples, 1));
% compute statistics on sample:
mu(i) = mean(xr);
end
bootsem = std( mu );
hold on
hist( x, 20 );
hist( mu, 20 );
hold off
disp(['bootstrap standard error: ', num2str(bootsem)]);
disp(['standard error: ', num2str(sem)]);

View File

@ -0,0 +1,3 @@
x = randn(40, 10);
boxplot(x, 'whisker', 100.0 );

View File

@ -0,0 +1,14 @@
n = 1000
x = randn( n, 1 );
y = randn( n, 1 ) + 0.2*x;
r = corr(x,y)
nsamples = 500;
rs = zeros( nsamples, 1 );
for i = 1:nsamples
xs = x(randi(n,n,1));
ys = x(randi(n,n,1));
rs(i) = corr(xs,ys);
end
hist( rs, 20 )

View File

@ -0,0 +1,32 @@
n = 100000
x=randn(n, 1);
nsamples = 3;
nmeans = 10000;
means = zeros( nmeans, 1 );
sdevs = zeros( nmeans, 1 );
students = zeros( nmeans, 1 );
for i=1:nmeans
sample = x(randi(n, nsamples, 1));
means(i) = mean(sample);
sdevs(i) = std(sample);
students(i) = mean(sample)/std(sample)*sqrt(nsamples);
end
sdev = 1.0
msdev = std(means)
% scatter( means, sdevs )
hold on;
dxg=0.01;
xmax = 10.0
xmin = -xmax
xg = [xmin:dxg:xmax];
pg = exp(-0.5*(xg/sdev).^2)/sqrt(2.0*pi)/sdev;
hold on
plot(xg, pg, 'r', 'linewidth', 4)
bins = xmin:0.1:xmax;
hist(means, bins, 1.0/(bins(2)-bins(1)) );
hold off;

View File

@ -0,0 +1,132 @@
\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}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,47 @@
import numpy as np
import matplotlib.pyplot as plt
#x = np.random.randn( 40, 10 )
#np.save('boxwhiskerdata', x )
x = np.load('boxwhiskerdata.npy')
plt.xkcd()
fig = plt.figure( figsize=(6,4) )
ax = fig.add_subplot( 1, 1, 1 )
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.set_xlabel('Experiment')
ax.set_ylabel('x')
ax.set_ylim( -4.0, 4.0)
ax.annotate('Median',
xy=(3.9, 0.1), xycoords='data',
xytext=(3.5, -2.5), textcoords='data', ha='right',
arrowprops=dict(arrowstyle="->", relpos=(0.8,1.0),
connectionstyle="angle3,angleA=-110,angleB=60") )
ax.annotate('1. quartile',
xy=(5.8, -0.7), xycoords='data',
xytext=(5.5, -3.5), textcoords='data', ha='right',
arrowprops=dict(arrowstyle="->", relpos=(0.5,1.0),
connectionstyle="angle3,angleA=30,angleB=70") )
ax.annotate('3. quartile',
xy=(6.1, 0.6), xycoords='data',
xytext=(6.5, 3.0), textcoords='data', ha='left',
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.0),
connectionstyle="angle3,angleA=30,angleB=70") )
ax.annotate('minimum',
xy=(6.1, -2.3), xycoords='data',
xytext=(7.2, -3.3), textcoords='data', ha='left',
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
connectionstyle="angle3,angleA=10,angleB=100") )
ax.annotate('maximum',
xy=(5.9, 2.8), xycoords='data',
xytext=(4.9, 3.5), textcoords='data', ha='right',
arrowprops=dict(arrowstyle="->", relpos=(1.0,0.5),
connectionstyle="angle3,angleA=0,angleB=120") )
ax.boxplot( x, whis=100.0 )
plt.tight_layout()
plt.savefig('boxwhisker.pdf')
plt.show()

Binary file not shown.

View File

@ -82,6 +82,8 @@
\arabic{theexercise}:} \stepcounter{theexercise}\newline \newcommand{\exercisesource}{#1}}%
{\ifthenelse{\equal{\exercisesource}{}}{}{\ifthenelse{\equal{\showlisting}{yes}}{\medskip\lstinputlisting{\exercisesource}}{}}\medskip}
\graphicspath{{figures/}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -269,6 +271,24 @@ spricht von einer Wahrscheinlichkeitsdichte.
\tr{Why?}{Warum?}
\end{exercise}
\begin{exercise}[boxwhisker.m]
\tr{Generate eine $40 \times 10$ matrix of random numbers and
illustrate their distribution in a box-whicker plot
(\code{boxplot()} function). How to interpret the plot?}
{Erzeuge ein $40 \times 10$ Matrix
von Zufallszahlen und illustriere ihre Verteilungen in einem
Box-Whisker Plot (\code{boxplot()} Funktion, lies die Hilfe!). Wie ist der
Box-Whisker Plot zu interpretieren? Was hat es mit den Ausreissern auf sich?
Wie kann man erreichen, dass die Whisker den kleinsten und den gr\"o{\ss}ten
Datenwert anzeigen? Warum sind die unterschiedlichen Box-Whiskers nicht alle gleich,
obwohl sie aus der selben Verteilung gezogen worden sind?}
\end{exercise}
\begin{figure}[t]
\includegraphics[width=1\textwidth]{boxwhisker}
\caption{\label{boxwhiskerfig} Box-whisker plots illustrate distributions.}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Data types}
@ -390,6 +410,71 @@ spricht von einer Wahrscheinlichkeitsdichte.
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{\tr{Bootstrap Methods}{Bootstrap Methoden}}
Beim Bootstrap erzeugt man sich die Verteilung von Statistiken durch Resampling
aus der Stichprobe. Das hat mehrere Vorteile:
\begin{itemize}
\item Weniger Annahmen (z.B. muss eine Stichprobe nicht Normalverteilt sein).
\item H\"ohere Genauigkeit als klassische Methoden.
\item Allgemeing\"ultigkeit: Bootstrap Methoden sind sich sehr
\"ahnlich f\"ur viele verschiedene Statistiken und ben\"otigen nicht
f\"ur jede Statistik eine andere Formel.
\end{itemize}
\begin{figure}[t]
\includegraphics[width=0.8\textwidth]{2012-10-29_16-26-05_771}\\[2ex]
\includegraphics[width=0.8\textwidth]{2012-10-29_16-41-39_523}\\[2ex]
\includegraphics[width=0.8\textwidth]{2012-10-29_16-29-35_312}
\caption{\tr{Why can we only measure a sample of the
population?}{Warum k\"onnen wir nur eine Stichprobe der
Grundgesamtheit messen?}}
\end{figure}
\begin{figure}[t]
\includegraphics[height=0.2\textheight]{srs1}\\[2ex]
\includegraphics[height=0.2\textheight]{srs2}\\[2ex]
\includegraphics[height=0.2\textheight]{srs3}
\caption{Bootstrap der Stichprobenvertielung (a) Von der
Grundgesamtheit (population) mit unbekanntem Parameter
(z.B. Mittelwert $\mu$) zieht man Stichproben (SRS: simple random
samples). Die Statistik (hier Bestimmung von $\bar x$) kann f\"ur
jede Stichprobe berechnet werden. Die erhaltenen Werte entstammen
der Stichprobenverteilung. Meisten wird aber nur eine Stichprobe
gezogen! (b) Mit bestimmten Annahmen und Theorien kann man auf
die Stichprobenverteilung schlie{\ss}en ohne sie gemessen zu
haben. (c) Alternativ k\"onnen aus der einen Stichprobe viele
Bootstrap-Stichproben generiert werden (resampling) und so
Eigenschaften der Stichprobenverteilung empirisch bestimmt
werden. Aus Hesterberg et al. 2003, Bootstrap Methods and
Permuation Tests}
\end{figure}
\section{Bootstrap des Standardfehlers}
Beim Bootstrap erzeugen wir durch resampling neue Stichproben und
benutzen diese um die Stichprobenverteilung einer Statistik zu
berechnen. Die Bootstrap Stichproben haben jeweils den gleichen Umfang
wie die urspr\"unglich gemessene Stichprobe und werden durch Ziehen
mit Zur\"ucklegen gewonnen. Jeder Wert der urspr\"unglichen Stichprobe
kann also einmal, mehrmals oder gar nicht in einer Bootstrap
Stichprobe vorkommen.
\begin{exercise}[bootstrapsem.m]
Ziehe 1000 normalverteilte Zufallszahlen und berechne deren Mittelwert,
Standardabweichung und Standardfehler ($\sigma/\sqrt{n}$).
Resample die Daten 1000 mal (Ziehen mit Zur\"ucklegen) und berechne jeweils
den Mittelwert.
Plotte ein Histogramm dieser Mittelwerte, sowie deren Mittelwert und
die Standardabweichung.
Was hat das mit dem Standardfehler zu tun?
\end{exercise}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.