% LaTeX source for Sample Session with R

\documentclass{article}

\usepackage{longtable}

\begin{document}

\begin{flushleft}
  {\Large\textbf{Appendix A A Sample session}}
\end{flushleft}

The following session is intended to introduce you to some features of the
\textsf{R} environment.  Many features will be unfamiliar and puzzling
at first, but this puzzlement will soon disappear.  The commands are
stored in executable form in the file \texttt{samplesession.r}.

\begin{longtable}{ll}
  & Login and start \textsf{R}. \\
  \multicolumn{2}{l}{\texttt{help.start()}} \\
  & Start the \textsc{html} interface to on-line help (using a web \\
  & browser available at your machine).  You should briefly \\
  & explore the features of this facility with the mouse. \\
  & Iconify the help window and move on to the next part. \\
  \multicolumn{2}{l}{\texttt{x <- rnorm(50)}} \\
  \multicolumn{2}{l}{\texttt{y <- rnorm(50)}} \\
  & Generate two pseudo-random normal vectors of $x-$ \\
  & and $y-$coordinates. \\
  \multicolumn{2}{l}{\texttt{plot(x,y)}} \\
  & Plot the points in the place.  A graphics window will \\
  & appear automatically. \\
  \multicolumn{1}{l}{\texttt{ls()}}
  &  See which \textsf{R} objects are now in the \textsf{R} workspace. \\
  \multicolumn{1}{l}{\texttt{rm(x,y)}} 
  &  Remove objects no longer needed. (Clean up). \\
  \multicolumn{1}{l}{\texttt{x <- 1:20}} 
  &  Make $x=(1,2, \dots, 20)$. \\
  \multicolumn{2}{l}{\texttt{w <- 1 + sqrt(x)/2}} \\
  & A `weight' vector of standard deviations. \\
  \multicolumn{2}{l}{\texttt{dummy <- data.frame(x=x, y=x + rnorm(x)*w)}} \\
  \multicolumn{1}{l}{\texttt{dummy}} 
  &  Make a \textit{data frame} of two columns, $x$ and $y$, and look \\
  &  at it. \\
  \multicolumn{2}{l}{\texttt{fm <- lm(y $\sim$ x, data=dummy)}} \\
  \multicolumn{2}{l}{\texttt{summary(fm)}} \\
  & Fit a simple linear regression of $y$ on $x$ and look at the \\
  & analysis. \\
  \multicolumn{2}{l}{\texttt{fm1 <- lm(y $\sim$ x, data=dummy, 
  weight=1/w\^{}2)}}
  \\
  \multicolumn{2}{l}{\texttt{summary(fm1)}} \\
  & Since we know the standard deviations, we can do a \\
  & weighted regression. \\
  \multicolumn{2}{l}{\texttt{attach(dummy)}} \\
  & Make the columns in the data frame visible as variables. \\
  \multicolumn{2}{l}{\texttt{lrf <- lowess(x,y)}} \\
  & Make a nonparametric local regression function. \\
  \multicolumn{2}{l}{\texttt{plot(x,y)}} \\
  & Standard point plot. \\
  \multicolumn{2}{l}{\texttt{lines(x, lrf\$y)}} \\
  & Add in the local regression. \\
  \multicolumn{2}{l}{\texttt{abline(0, 1, lty=3)}} \\
  & The true regression line; (intercept 0, slope 1). \\
  \multicolumn{2}{l}{\texttt{abline(coef(fm))}} \\
  & Unweighted regression line. \\
  \multicolumn{2}{l}{\texttt{abline(coef(fm1), col="red")}} \\
  & Weighted regression line. \\
  \multicolumn{1}{l}{\texttt{detach()}} 
  &  Remove data frame from the search path. \\
  \multicolumn{2}{l}{\texttt{fitted(fm), resid(fm),}} \\
  \multicolumn{1}{l}{\hspace{2cm}\texttt{xlab=}} & \texttt{"Fitted values",} \\
  \multicolumn{1}{l}{\hspace{2cm}\texttt{ylab=}} & \texttt{"Residuals",} \\
  \multicolumn{1}{l}{\hspace{2cm}\texttt{main=}} & 
                                              \texttt{"Residuals vs Fitted",} \\
  & A standard regression diagnostic plot to check for \\
  & heteroscedasticity.  Can you see it? \\
  \multicolumn{2}{l}{\texttt{qqnorm(resid(fm), main="Residuals Rankit Plot")}}
  \\
  & A Normal scores plot to check for skewness, kurtosis \\
  & and outliers. (Not very useful here.) \\
  \multicolumn{2}{l}{\texttt{rm(fm, fm1, lrf, x, dummy)}} \\
  & Clean up again. \\
  \multicolumn{2}{l}{\quad The next section will look at data from the 
  classical experiment of} \\
  \multicolumn{2}{l}{\texttt{Michaelson and Morley to measure the speed 
  of light.}} \\
  \multicolumn{2}{l}{\texttt{data(morley)}} \\
  \multicolumn{2}{l}{\texttt{mm <- morley}} \\
  \multicolumn{1}{l}{\texttt{mm}} 
  &  Copy the data to a data frame \texttt{mm}, and look at it.  \\
  &  There are five experiments (column \texttt{Expt}) and each \\
  &  has 20 runs (column \texttt{Run}) and \texttt{Speed}) is the \\
  & recorded speed of light, suitably coded. \\
  \multicolumn{2}{l}{\texttt{mm\$Expt <- factor(mm\$Expt)}} \\
  \multicolumn{2}{l}{\texttt{mm\$Run <- factor(mm\$Run)}} \\
  & Change \texttt{Expt} and \texttt{Run} into factors. \\
  \multicolumn{2}{l}{\texttt{attach(mm)}} \\
  & Make the data frame visible at position 2 (the default). \\
  \multicolumn{2}{l}{\texttt{plot(Expt, Speed, main="Speed of Light Data",
  xlab="Experiment No.")}} \\
  & Compare the five experiments with simple boxplots. \\
  \multicolumn{2}{l}{\texttt{fm <- aov(Speed $\sim$ Run + Expt, data=mm)}} \\
  \multicolumn{2}{l}{\texttt{summary(fm)}} \\
  & Analyze as a randomized block, with `runs' and \\
  & `experiments' as factors. \\
  \multicolumn{2}{l}{\texttt{fm0 <- update(fm, . $\sim$ . - Run)}} \\
  \multicolumn{2}{l}{\texttt{anova(fm0,fm)}} \\
  & Fit the sub-model omitting `runs', and compare using a \\
  & formal anlaysis of variance \\
  \multicolumn{2}{l}{\texttt{detach()}} \\
  \multicolumn{2}{l}{\texttt{rm(fm,fm0)}} \\
  & Clean up before moving on. \\
  \multicolumn{2}{l}{\quad We now look at some more graphical features:
  contour and image plots.} \\
  \multicolumn{2}{l}{\texttt{x <- seq(-pi, pi, len=50)}} \\
  \multicolumn{1}{l}{\texttt{y <- x}}
  &  $x$ is a vector of 50 equally spaced values in $-pi\le x\le\pi$. \\
  &  $y$ is the same. \\
  \multicolumn{2}{l}{\texttt{f <- outer(x, y, function(x, y) 
  cos(y)/(1 + x\^2))}} \\
  & $f$ is a square matrix, withn rows and columns indexed \\
  & by $x$ and $y$ respectively, of values of the function \\
  & $\cos(y)/(1+x^2)$. \\
  \multicolumn{2}{l}{\texttt{oldopar <- par(no.readonly = TRUE)}} \\
  \multicolumn{2}{l}{\texttt{par(pty="s")}} \\
  & Save the plotting parameters and set the plotting region \\
  & to ``square''. \\
  \multicolumn{2}{l}{\texttt{contour(x, y, f)}} \\
  \multicolumn{2}{l}{\texttt{contour(x, y, f, nlevels=15, add=TRUE)}} \\
  & Make a contour map of $f$; add in more lines for more \\
  & detail. \\
  \multicolumn{2}{l}{\texttt{fa <- (f-t(f))/2}} \\
  & \texttt{fa} is the ``asymmetric part'' of $f$. (\texttt{t()} is transpose).
  \\
  \multicolumn{2}{l}{\texttt{contour(x, y, fa, nint=15)}} \\
  & Make a contour plot, \dots \\
  \multicolumn{2}{l}{\texttt{par(oldpar)}} \\
  & \dots and restore the old graphics parameters. \\
  \multicolumn{2}{l}{\texttt{image(x, y, f)}} \\
  \multicolumn{2}{l}{\texttt{image(x, y, fa)}} \\
  & Make some high density image plots, (of which you can \\
  & get hardcopies if you wish), \dots \\
  \multicolumn{2}{l}{\texttt{objects(); rm(x, y, f, fa)}} \\
  & \dots and clean up before moving on. \\
  \multicolumn{2}{l}{\quad\textsf{R} can do complex arithmetic, also.} \\
  \multicolumn{2}{l}{\texttt{th <- seq(-pi, pi, len=100)}} \\
  \multicolumn{2}{l}{\texttt{z <- exp(1i*th)}} \\
  & \texttt{1i} is used for the complex number $i$. \\
  \multicolumn{2}{l}{\texttt{par(pty="s")}} \\
  \multicolumn{2}{l}{\texttt{plot(z, type="l")}} \\
  & Plotting complex arguments means plot imaginary \\
  & versus real parts.  This \\
  & should be a circle. \\
  \multicolumn{2}{l}{\texttt{w <- rnorm(100) + rnorm(100)*1i}} \\
  & Suppose we want to sample points within the unit \\
  & circle.  One method would be to take complex numbers \\
  & with standard normal real and imaginary parts \dots \\
  \multicolumn{2}{l}{\texttt{w <- ifelese(Mod(w) > 1, 1/w, w)}} \\
  & \dots and to map any outside the circle onto their \\
  & reciprocal. \\
  \multicolumn{2}{l}{\texttt{plot(w, xlim=c(-1,1), ylim=c(-1,1), 
  pch="+", xlab="x", ylab="y")}} \\
  \multicolumn{2}{l}{\texttt{lines(x)}} \\
  & All points are inside the unit circle, but the \\
  & distribution is not uniform. \\
  \multicolumn{2}{l}{\texttt{w <- sqrt(runif(100)*exp(2*pi*runif(100)*1i)}} \\
  \multicolumn{2}{l}{\texttt{plot(w, xlim=c(-1,1), ylim=c(-1,1),
  pch="=", xlab="x", ylab="y")}} \\
  \multicolumn{2}{l}{\texttt{lines(z)}} \\
  & The second method uses the uniform distribution.  \\
  & The points should now look more evenly spaced over \\
  & the disc. \\
  \multicolumn{2}{l}{\texttt{rm(th, w, z)}} \\
  & Clean up again. \\
  \multicolumn{1}{l}{\texttt{q()}} 
  &  Quit the \textsf{R} program.  You will be asked if you want to \\
  &  save the \textsf{R} workspace, and for an exploratory session \\
  &  like this, you probably do not want to save it. \\
\end{longtable}

\end{document}

%