\documentclass{chapman} %%% copy Sweave.sty definitions %%% keeps `sweave' from adding `\usepackage{Sweave}': DO NOT REMOVE %\usepackage{Sweave} \RequirePackage[T1]{fontenc} \RequirePackage{graphicx,ae,fancyvrb} \IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} \usepackage{relsize} \DefineVerbatimEnvironment{Sinput}{Verbatim}{} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontfamily=courier, fontshape=it, fontsize=\relsize{-1}} \DefineVerbatimEnvironment{Scode}{Verbatim}{} \newenvironment{Schunk}{}{} %%% environment for raw output \newcommand{\SchunkRaw}{\renewenvironment{Schunk}{}{} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontfamily=courier, fontshape=it, fontsize=\small} \rawSinput } %%% environment for labeled output \newcommand{\nextcaption}{} \newcommand{\SchunkLabel}{ \renewenvironment{Schunk}{\begin{figure}[ht] }{\caption{\nextcaption} \end{figure} } \DefineVerbatimEnvironment{Sinput}{Verbatim}{frame = topline} \DefineVerbatimEnvironment{Soutput}{Verbatim}{frame = bottomline, samepage = true, fontfamily=courier, fontshape=it, fontsize=\relsize{-1}} } %%% S code with line numbers \DefineVerbatimEnvironment{Sinput} {Verbatim} { %% numbers=left } \newcommand{\numberSinput}{ \DefineVerbatimEnvironment{Sinput}{Verbatim}{numbers=left} } \newcommand{\rawSinput}{ \DefineVerbatimEnvironment{Sinput}{Verbatim}{} } %%% R / System symbols \newcommand{\R}{\textsf{R}} \newcommand{\rR}{{R}} \renewcommand{\S}{\textsf{S}} \newcommand{\SPLUS}{\textsf{S-PLUS}} \newcommand{\rSPLUS}{{S-PLUS}} \newcommand{\SPSS}{\textsf{SPSS}} \newcommand{\EXCEL}{\textsf{Excel}} \newcommand{\ACCESS}{\textsf{Access}} \newcommand{\SQL}{\textsf{SQL}} %%\newcommand{\Rpackage}[1]{\hbox{\rm\textit{#1}}} %%\newcommand{\Robject}[1]{\hbox{\rm\texttt{#1}}} %%\newcommand{\Rclass}[1]{\hbox{\rm\textit{#1}}} %%\newcommand{\Rcmd}[1]{\hbox{\rm\texttt{#1}}} \newcommand{\Rpackage}[1]{\index{#1 package@\textit{#1} package}\textit{#1}} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rclass}[1]{\index{#1 class@\textit{#1} class}\textit{#1}} \newcommand{\Rcmd}[1]{\index{#1 function@\texttt{#1} function}\texttt{#1}} \newcommand{\Roperator}[1]{\texttt{#1}} \newcommand{\Rarg}[1]{\texttt{#1}} \newcommand{\Rlevel}[1]{\texttt{#1}} %%% other symbols \newcommand{\file}[1]{\hbox{\rm\texttt{#1}}} %%\newcommand{\stress}[1]{\index{#1}\textit{#1}} \newcommand{\stress}[1]{\textit{#1}} \newcommand{\booktitle}[1]{`#1'} %%' %%% Math symbols \newcommand{\E}{\mathsf{E}} \newcommand{\Var}{\mathsf{Var}} \newcommand{\Cov}{\mathsf{Cov}} \newcommand{\Cor}{\mathsf{Cor}} \newcommand{\x}{\mathbf{x}} \newcommand{\y}{\mathbf{y}} \renewcommand{\a}{\mathbf{a}} \newcommand{\W}{\mathbf{W}} \newcommand{\C}{\mathbf{C}} \renewcommand{\H}{\mathbf{H}} \newcommand{\X}{\mathbf{X}} \newcommand{\B}{\mathbf{B}} \newcommand{\V}{\mathbf{V}} \newcommand{\I}{\mathbf{I}} \newcommand{\D}{\mathbf{D}} \newcommand{\bS}{\mathbf{S}} \newcommand{\N}{\mathcal{N}} \renewcommand{\P}{\mathsf{P}} \usepackage{amstext} %%% links \usepackage{hyperref} \hypersetup{% pdftitle = {A Handbook of Statistical Analyses Using R}, pdfsubject = {Book}, pdfauthor = {Brian S. Everitt and Torsten Hothorn}, colorlinks = {true}, linkcolor = {blue}, citecolor = {blue}, urlcolor = {red}, hyperindex = {true}, linktocpage = {true}, } %%% captions & tables %% <FIXME>: conflics with figure definition in chapman.cls %%\usepackage[format=hang,margin=10pt,labelfont=bf]{caption} %% </FIMXE> \usepackage{longtable} \usepackage{rotating} %%% R symbol in chapter 1 \usepackage{wrapfig} %%% Bibliography \usepackage[round,comma]{natbib} \renewcommand{\refname}{References \addcontentsline{toc}{chapter}{References}} \citeindexfalse %%% texi2dvi complains that \newblock is undefined, hm... \def\newblock{\hskip .11em plus .33em minus .07em} %%% Example sections \newcounter{exercise}[chapter] \setcounter{exercise}{0} \newcommand{\exercise}{\item{\stepcounter{exercise} Ex. \arabic{chapter}.\arabic{exercise} }} %% URLs \newcommand{\curl}[1]{\begin{center} \url{#1} \end{center}} %%% for manual corrections %\renewcommand{\baselinestretch}{2} %%% plot sizes \setkeys{Gin}{width=0.95\textwidth} %%% color \usepackage{color} %%% hyphenations \hyphenation{drop-out} %%% new bidirectional quotes need \usepackage[utf8]{inputenc} \begin{document} %% Title page \title{A Handbook of Statistical Analyses Using \R} \author{Brian S. Everitt and Torsten Hothorn} \maketitle %%\VignetteIndexEntry{Chapter Analysing Longitudinal Data I} %%\VignetteDepends{lme4} \setcounter{chapter}{9} \SweaveOpts{prefix.string=figures/HSAUR,eps=FALSE,keep.source=TRUE} <<setup, echo = FALSE, results = hide>>= rm(list = ls()) s <- search()[-1] s <- s[-match(c("package:base", "package:stats", "package:graphics", "package:grDevices", "package:utils", "package:datasets", "package:methods", "Autoloads"), s)] if (length(s) > 0) sapply(s, detach, character.only = TRUE) if (!file.exists("tables")) dir.create("tables") if (!file.exists("figures")) dir.create("figures") set.seed(290875) options(prompt = "R> ", continue = "+ ", width = 63, # digits = 4, SweaveHooks = list(leftpar = function() par(mai = par("mai") * c(1, 1.05, 1, 1)))) HSAURpkg <- require("HSAUR") if (!HSAURpkg) stop("cannot load package ", sQuote("HSAUR")) rm(HSAURpkg) a <- Sys.setlocale("LC_ALL", "C") book <- TRUE refs <- cbind(c("AItR", "SI", "CI", "ANOVA", "MLR", "GLM", "DE", "RP", "SA", "ALDI", "ALDII", "MA", "PCA", "MDS", "CA"), 1:15) ch <- function(x, book = TRUE) { ch <- refs[which(refs[,1] == x),] if (book) { return(paste("Chapter~\\\\ref{", ch[1], "}", sep = "")) } else { return(paste("Chapter~\\\\ref{", ch[2], "}", sep = "")) } } @ \pagestyle{headings} <<ALDI-setup, echo = FALSE, results = hide>>= library("Matrix") library("lme4") @ \chapter[Analysing Longitudinal Data I]{Analysing Longitudinal Data I: Computerised Delivery of Cognitive Behavioural Therapy--Beat the Blues \label{ALDI}} \section{Introduction} \section{Analysing Longitudinal Data} \section{Analysis Using \R{}} \begin{figure} \begin{center} <<ALDI-plot-BtheB, echo = TRUE, fig = TRUE, height = 4>>= data("BtheB", package = "HSAUR") layout(matrix(1:2, nrow = 1)) ylim <- range(BtheB[,grep("bdi", names(BtheB))], na.rm = TRUE) tau <- subset(BtheB, treatment == "TAU")[, grep("bdi", names(BtheB))] boxplot(tau, main = "Treated as usual", ylab = "BDI", xlab = "Time (in months)", names = c(0, 2, 4, 6, 8), ylim = ylim) btheb <- subset(BtheB, treatment == "BtheB")[, grep("bdi", names(BtheB))] boxplot(btheb, main = "Beat the Blues", ylab = "BDI", xlab = "Time (in months)", names = c(0, 2, 4, 6, 8), ylim = ylim) @ \caption{Boxplots for the repeated measures by treatment group for the \Robject{BtheB} data. \label{ALDI:boxplots}} \end{center} \end{figure} We shall fit both random intercept and random intercept and slope models to the data including the baseline BDI values (\Robject{pre.bdi}), \Robject{treatment} group, \Robject{drug} and \Robject{length} as fixed effect covariates. Linear mixed effects models are fitted in \R{} by using the \Rcmd{lmer} function contained in the \Rpackage{lme4} package \citep{PKG:lme4,HSAUR:PinheiroBates2000,HSAUR:Bates2005}, but an essential first step is to rearrange the data from the `wide form' in which they appear in the \Robject{BtheB} data frame %%' into the `long form' in which each separate repeated measurement %%' and associated covariate values appear as a separate row in a \Rclass{data.frame}. This rearrangement can be made using the following code: <<ALDI-long-BtheB, echo = TRUE>>= data("BtheB", package = "HSAUR") BtheB$subject <- factor(rownames(BtheB)) nobs <- nrow(BtheB) BtheB_long <- reshape(BtheB, idvar = "subject", varying = c("bdi.2m", "bdi.4m", "bdi.6m", "bdi.8m"), direction = "long") BtheB_long$time <- rep(c(2, 4, 6, 8), rep(nobs, 4)) @ such that the data are now in the form (here shown for the first three subjects) <<ALDI-showlong-BtheB, echo = TRUE>>= subset(BtheB_long, subject %in% c("1", "2", "3")) @ The resulting \Rclass{data.frame} \Robject{BtheB\_long} contains a number of missing values \index{Missing values} and in applying the \Rcmd{lmer} function these will be dropped. But notice it is only the missing values that are removed, \stress{not} participants that have at least one missing value. All the available data is used in the model fitting process. The \Rcmd{lmer} function is used in a similar way to the \Rcmd{lm} function met in Chapter~\ref{MLR} with the addition of a random term to identify the source of the repeated measurements, here \Robject{subject}. We can fit the two models (\ref{ALDI:ModelA}) and (\ref{ALDI:ModelB}) and test which is most appropriate using <<ALDI-fit-BtheB, echo = TRUE>>= library("lme4") BtheB_lmer1 <- lmer(bdi ~ bdi.pre + time + treatment + drug + length + (1 | subject), data = BtheB_long, REML = FALSE, na.action = na.omit) BtheB_lmer2 <- lmer(bdi ~ bdi.pre + time + treatment + drug + length + (time | subject), data = BtheB_long, REML = FALSE, na.action = na.omit) anova(BtheB_lmer1, BtheB_lmer2) @ %% <FIXME> summary() does not report p-values anymore: recompute or update the text!!! </FIXME> \renewcommand{\nextcaption}{\R{} output of the linear mixed-effects model fit for the \Robject{BtheB} data. \label{ALDI-BtheB-summary}} \SchunkLabel <<ALDI-summary-BtheB, echo = TRUE>>= summary(BtheB_lmer1) @ \SchunkRaw %%% <FIXME> %%% The plot does not work in the vignette -> ranef-method for lmer is not %%% found. %%% </FIXME> \bibliographystyle{LaTeXBibTeX/refstyle} \bibliography{LaTeXBibTeX/HSAUR} \end{document}