\documentclass[12pt]{article}
\SweaveOpts{echo=T,pdf=T,eps=F,eval=T,keep.source=T}
\usepackage{Sweave}
\usepackage{mathpazo}
\usepackage{hyperref,url}
\usepackage[a4paper,margin=1.5cm]{geometry}

\begin{document}


\title{Example Sweave document: estimating $\pi$}
\author{Stephen J Eglen}

\date{\today}
\maketitle

\section{Introduction}

This is an example document created using the Sweave system
(\url{http://www.statistik.lmu.de/~leisch/Sweave/}).  Sweave is a
tool for combining both \LaTeX\ documentation and R code within the
same file.  For this document, the master file is \url{estimate.Rnw}.
This is processed by the Sweave system in R, which runs the R code to
generate textual/graphical output, and also creates a \LaTeX\ document.
The \LaTeX\ document is then typeset to create the pdf document.  On
unix/macintosh, the following commands should recreate the pdf file:

\begin{verbatim}
$ R CMD Sweave estimate.Rnw
$ pdflatex estimate.tex
\end{verbatim}

\section{Task: estimate the value of $\pi$}

Our task is to estimate the value of $\pi$ by simulating darts being
thrown at a dartboard.  Imagine that the person throwing the darts is
not very good, and randomly throws each dart so that it falls
uniformly within a square of side length $2r$, with the dartboard of
radius $r$ centred within that square.  If the player throws $n$
darts, and $d$ of them hit the dartboard, then for large enough $n$,
the ratio $d/n$ should approximate the ratio of the area of the
dartboard to the enclosing square, $ \pi r^2 / 4 r^2 \equiv \pi/4$.
From this, we can estimate $\pi \approx 4d/n$.

We start with an example, using R to draw both the dartboard and the
surrounding square, together with $n=50$ darts.  The radius of the
dartboard here is 1 unit, although the value is not important.

\setkeys{Gin}{width=0.6\textwidth}
\begin{center}
<<fig=TRUE>>=
r <- 1
n <- 50
par(las=1)
plot(NA, xlim=c(-r,r), ylim=c(-r,r), asp=1, bty='n',
     xaxt='n', yaxt='n', xlab='', ylab='')
axis(1, at=c(-r,0,r)); axis(2, at=c(-r,0,r))
symbols(x=0, y=0, circles=r, inch=F, add=T)
x <- runif(n, -r, r);  y <- runif(n, -r, r)
inside <- x^2 + y^2 < r^2
d <- length(which(inside))
points(x, y, pch=ifelse(inside, 19, 4))
rect(-r, -r, r, r, border='blue', lwd=2)
@ 
\end{center}

A dart is drawn as a filled circle if it falls within the dartboard,
else it is drawn as a cross.  In this case the number of darts within
the circle is \Sexpr{d}, and so the estimated value is $\pi \approx
\Sexpr{4*d/n}$.


The estimate of $\pi$ should improve as we increase the number of darts
thrown at the dartboard.  To verify this, we write a short function
that, given the number of darts to throw, $n$, returns an estimate of
$\pi$.  

<<>>=
estimate.pi <- function(n=1000) {
  ## Return an estimate of PI using dartboard method
  ## with N trials.
  r <- 1                                # radius of dartboard
  x <- runif(n, min=-r, max=r)
  y <- runif(n, min=-r, max=r)
  l <- sqrt(x^2 + y^2)
  d <- length(which(l<r))
  4*d/n
}
@ 

We can then test the procedure a few times, using the default number
of darts, 1000:

<<>>=
replicate(9, estimate.pi())
@ 

Finally, for a given value of $n$, we can show 99 estimates of $\pi$,
as clearly the estimate will vary from run to run.  In the following
plot, we compare the estimates of $\pi$ for three different values of $n$:

\begin{center}
<<fig=TRUE>>=
ns <- 10^c(2,3,4)
res <- lapply(ns, function(n) replicate(99, estimate.pi(n)))
par(las=1, bty='n')
stripchart(res, method="jitter", group.names=ns, 
           xlab="number of darts",
           ylab=expression(paste('estimate of ', pi)),
           vert=T, pch=20, cex=0.5)
abline(h=pi, col='red')
@ 
\end{center}

As the number of darts increases, the estimate of $\pi$ gradually
converges onto the actual value of $\pi$ (shown by the solid red line).

  

\end{document}