Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
28 views

Instant Download Data Analysis and Graphics Using R An Example based Approach 2nd Edition John Maindonald PDF All Chapters

based

Uploaded by

uguenkawatu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views

Instant Download Data Analysis and Graphics Using R An Example based Approach 2nd Edition John Maindonald PDF All Chapters

based

Uploaded by

uguenkawatu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 81

Download the full version of the ebook at

https://ebookultra.com

Data Analysis and Graphics Using R An Example


based Approach 2nd Edition John Maindonald

https://ebookultra.com/download/data-analysis-and-
graphics-using-r-an-example-based-approach-2nd-
edition-john-maindonald/

Explore and download more ebook at https://ebookultra.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Data Analysis and Graphics Using R An Example based


Approach 1st Edition John Maindonald

https://ebookultra.com/download/data-analysis-and-graphics-using-r-an-
example-based-approach-1st-edition-john-maindonald/

ebookultra.com

Data Analysis and Graphics Using R An Example Based


Approach Third Edition John Maindonald

https://ebookultra.com/download/data-analysis-and-graphics-using-r-an-
example-based-approach-third-edition-john-maindonald/

ebookultra.com

Data Analysis and Graphics Using R 1st Edition Matthew


Norman

https://ebookultra.com/download/data-analysis-and-graphics-
using-r-1st-edition-matthew-norman/

ebookultra.com

Using R for Data Management Statistical Analysis and


Graphics 1st Edition Nicholas J. Horton

https://ebookultra.com/download/using-r-for-data-management-
statistical-analysis-and-graphics-1st-edition-nicholas-j-horton/

ebookultra.com
Statistics and Data Analysis for Microarrays Using R and
Bioconductor 2nd Edition Sorin Draghici

https://ebookultra.com/download/statistics-and-data-analysis-for-
microarrays-using-r-and-bioconductor-2nd-edition-sorin-draghici/

ebookultra.com

IBM SPSS by Example A Practical Guide to Statistical Data


Analysis 2nd Edition Alan C. Elliott

https://ebookultra.com/download/ibm-spss-by-example-a-practical-guide-
to-statistical-data-analysis-2nd-edition-alan-c-elliott/

ebookultra.com

Qualitative Data Analysis An Introduction 2nd Edition


Carol Grbich

https://ebookultra.com/download/qualitative-data-analysis-an-
introduction-2nd-edition-carol-grbich/

ebookultra.com

Clinical Trial Data Analysis Using R Chapman Hall CRC


Biostatistics Series 1st Edition Din Chen

https://ebookultra.com/download/clinical-trial-data-analysis-using-r-
chapman-hall-crc-biostatistics-series-1st-edition-din-chen/

ebookultra.com

Statistics 2nd Edition An Introduction Using R Michael J.


Crawley

https://ebookultra.com/download/statistics-2nd-edition-an-
introduction-using-r-michael-j-crawley/

ebookultra.com
Data Analysis and Graphics Using R An Example based
Approach 2nd Edition John Maindonald Digital Instant
Download
Author(s): John Maindonald, John Braun
ISBN(s): 9780521861168, 0511250592
Edition: 2
File Details: PDF, 4.75 MB
Year: 2006
Language: english
This page intentionally left blank
Data Analysis and Graphics Using R, Second Edition

Join the revolution ignited by the ground-breaking R system! Starting with an introduction
to R, covering standard regression methods, then presenting more advanced topics, this
book guides users through the practical and powerful tools that the R system provides. The
emphasis is on hands-on analysis, graphical display and interpretation of data. The many
worked examples, taken from real-world research, are accompanied by commentary on
what is done and why. A website provides computer code and data sets, allowing readers
to reproduce all analyses. Updates and solutions to selected exercises are also available.
Assuming basic statistical knowledge and some experience of data analysis, the book is
ideal for research scientists, final-year undergraduate or graduate level students of applied
statistics, and practicing statisticians. It is both for learning and for reference.
This second edition reflects changes in R since 2003. There is new material on
survival analysis, random coefficient models and the handling of high-dimensional data.
The treatment of regression methods has been extended, including a brief discussion
of errors in predictor variables. Both text and code have been revised throughout, and
where possible simplified. New graphs have been added.
John Maindonald is Visiting Fellow at the Centre for Mathematics and its
Applications, Australian National University. He has collaborated extensively with
scientists in a wide range of application areas, from medicine and public health to
population genetics, machine learning, economic history and forensic linguistics.
John Braun is Associate Professor of Statistical and Actuarial Sciences, University of
Western Ontario. He has collaborated with biostatisticians, biologists, psychologists and
most recently has become involved with a network of forestry researchers.
Data Analysis and Graphics
Using R – an Example-Based Approach
Second Edition
CAMBRIDGE SERIES IN STATISTICAL AND PROBABILISTIC
MATHEMATICS

Editorial Board

R. Gill (Department of Mathematics, Utrecht University)


B. D. Ripley (Department of Statistics, University of Oxford)
S. Ross (Department of Industrial & Systems Engineering, University of Southern
California)
B. W. Silverman (St. Peter’s College, Oxford)
M. Stein (Department of Statistics, University of Chicago)

This series of high-quality upper-division textbooks and expository monographs covers


all aspects of stochastic applicable mathematics. The topics range from pure and applied
statistics to probability theory, operations research, optimization, and mathematical pro-
gramming. The books contain clear presentations of new developments in the field and
also of the state of the art in classical methods. While emphasizing rigorous treatment of
theoretical methods, the books also contain applications and discussions of new techniques
made possible by advances in computational practice.

Already published
1. Bootstrap Methods and Their Application, by A. C. Davison and D. V. Hinkley
2. Markov Chains, by J. Norris
3. Asymptotic Statistics, by A. W. van der Vaart
4. Wavelet Methods for Time Series Analysis, by Donald B. Percival and Andrew
T. Walden
5. Bayesian Methods, by Thomas Leonard and John S. J. Hsu
6. Empirical Processes in M-Estimation, by Sara van de Geer
7. Numerical Methods of Statistics, by John F. Monahan
8. A User’s Guide to Measure Theoretic Probability, by David Pollard
9. The Estimation and Tracking of Frequency, by B. G. Quinn and E. J. Hannan
10. Data Analysis and Graphics using R, by John Maindonald and W. John Braun
11. Statistical Models, by A. C. Davison
12. Semiparametric Regression, by D. Ruppert, M. P. Wand, R. J. Carroll
13. Exercises in Probability, by Loic Chaumont and Marc Yor
14. Statistical Analysis of Stochastic Processes in Time, by J. K. Lindsey
15. Measure Theory and Filtering, by Lakhdar Aggoun and Robert Elliott
16. Essentials of Statistical Inference, by G. A. Young and R. L. Smith
17. Elements of Distribution Theory, by Thomas A. Severini
18. Statistical Mechanics of Disordered Systems, by Anton Bovier
19. The Coordinate-Free Approach to Linear Models, by Michael J. Wichura
20. Random Graph Dynamics, by Rick Durrett
Data Analysis and Graphics
Using R – an Example-Based Approach
Second Edition

John Maindonald
Centre for Mathematics and its Applications, Australian National University

and
W. John Braun
Department of Statistical and Actuarial Science, University of Western Ontario
CAMBRIDGE UNIVERSITY PRESS
Cambridge, New York, Melbourne, Madrid, Cape Town, Singapore, São Paulo

Cambridge University Press


The Edinburgh Building, Cambridge CB2 8RU, UK
Published in the United States of America by Cambridge University Press, New York
www.cambridge.org
Information on this title: www.cambridge.org/9780521861168

© Cambridge University Press 2003, 2006

This publication is in copyright. Subject to statutory exception and to the provision of


relevant collective licensing agreements, no reproduction of any part may take place
without the written permission of Cambridge University Press.

First published in print format 2006

ISBN-13 978-0-511-24957-0 eBook (EBL)


ISBN-10 0-511-24957-8 eBook (EBL)

ISBN-13 978-0-521-86116-8 hardback


ISBN-10 0-521-86116-0 hardback

Cambridge University Press has no responsibility for the persistence or accuracy of urls
for external or third-party internet websites referred to in this publication, and does not
guarantee that any content on such websites is, or will remain, accurate or appropriate.
It is easy to lie with statistics. It is hard to tell the truth without statistics.
[Andrejs Dunkels]

   technology tends to overwhelm common sense.


[D. A. Freedman]
For Amelia and Luke
also Shireen, Peter, Lorraine, Evan and Winifred

For Susan, Matthew and Phillip


Contents

Preface page xix

1 A brief introduction to R 1
1.1 An overview of R 1
1.1.1 A short R session 1
1.1.2 The uses of R 5
1.1.3 Online help 6
1.1.4 Further steps in learning R 8
1.2 Data input, packages and the search list 8
1.2.1 Reading data from a file 8
1.2.2 R packages 9
1.3 Vectors, factors and univariate time series 10
1.3.1 Vectors in R 10
1.3.2 Concatenation – joining vector objects 10
1.3.3 Subsets of vectors 11
1.3.4 Patterned data 11
1.3.5 Missing values 12
1.3.6 Factors 13
1.3.7 Time series 14
1.4 Data frames and matrices 14
1.4.1 The attaching of data frames 16
1.4.2 Aggregation, stacking and unstacking 17
1.4.3∗ Data frames and matrices 17
1.5 Functions, operators and loops 18
1.5.1 Built-in functions 18
1.5.2 Generic functions and the class of an object 20
1.5.3 User-written functions 21
1.5.4 Relational and logical operators and operations 22
1.5.5 Selection and matching 23
1.5.6 Functions for working with missing values 23
1.5.7∗ Looping 24
1.6 Graphics in R 24
1.6.1 The function plot( ) and allied functions 25
1.6.2 The use of color 27
x Contents

1.6.3 The importance of aspect ratio 27


1.6.4 Dimensions and other settings for graphics devices 28
1.6.5 The plotting of expressions and mathematical symbols 28
1.6.6 Identification and location on the figure region 29
1.6.7 Plot methods for objects other than vectors 29
1.6.8 Lattice graphics versus base graphics – xyplot() versus plot() 30
1.6.9 Further information on graphics 30
1.6.10 Good and bad graphs 30
1.7 Lattice (trellis) graphics 31
1.8 Additional points on the use of R 33
1.9 Recap 36
1.10 Further reading 36
1.10.1 References for further reading 37
1.11 Exercises 37

2 Styles of data analysis 43


2.1 Revealing views of the data 43
2.1.1 Views of a single sample 44
2.1.2 Patterns in univariate time series 48
2.1.3 Patterns in bivariate data 50
2.1.4 Patterns in grouped data 52

2.1.5 Multiple variables and times 54
2.1.6 Scatterplots, broken down by multiple factors 56
2.1.7 What to look for in plots 58
2.2 Data summary 59
2.2.1 Counts 60
2.2.2 Summaries of information from data frames 63
2.2.3 Standard deviation and inter-quartile range 66
2.2.4 Correlation 68
2.3 Statistical analysis questions, aims and strategies 69
2.3.1 How relevant and how reliable are the data? 70
2.3.2 Helpful and unhelpful questions 70
2.3.3 How will results be used? 71
2.3.4 Formal and informal assessments 72
2.3.5 Statistical analysis strategies 73
2.3.6 Planning the formal analysis 73
2.3.7 Changes to the intended plan of analysis 74
2.4 Recap 74
2.5 Further reading 75
2.5.1 References for further reading 75
2.6 Exercises 75

3 Statistical models 78
3.1 Regularities 79
3.1.1 Deterministic models 79
Contents xi

3.1.2 Models that include a random component 79


3.1.3 Fitting models – the model formula 82
3.2 Distributions: models for the random component 83
3.2.1 Discrete distributions 84
3.2.2 Continuous distributions 86
3.3 The uses of random numbers 88
3.3.1 Simulation 88
3.3.2 Sampling from populations 89
3.4 Model assumptions 90
3.4.1 Random sampling assumptions – independence 91
3.4.2 Checks for normality 92
3.4.3 Checking other model assumptions 95
3.4.4 Are non-parametric methods the answer? 95
3.4.5 Why models matter – adding across contingency tables 95
3.5 Recap 96
3.6 Further reading 97
3.6.1 References for further reading 97
3.7 Exercises 97

4 An introduction to formal inference 101


4.1 Basic concepts of estimation 101
4.1.1 Population parameters and sample statistics 101
4.1.2 Sampling distributions 102
4.1.3 Assessing accuracy – the standard error 102
4.1.4 The standard error for the difference of means 103
4.1.5∗ The standard error of the median 104
4.1.6 The sampling distribution of the t-statistic 104
4.2 Confidence intervals and hypothesis tests 107
4.2.1 One- and two-sample intervals and tests for means 107
4.2.2 Confidence intervals and tests for proportions 113
4.2.3 Confidence intervals for the correlation 113
4.2.4 Confidence intervals versus hypothesis tests 114
4.3 Contingency tables 115
4.3.1 Rare and endangered plant species 117
4.3.2 Additional notes 119
4.4 One-way unstructured comparisons 120
4.4.1 Displaying means for the one-way layout 123
4.4.2 Multiple comparisons 124
4.4.3 Data with a two-way structure, that is, two factors 125
4.4.4 Presentation issues 126
4.5 Response curves 126
4.6 Data with a nested variation structure 127
4.6.1 Degrees of freedom considerations 128
4.6.2 General multi-way analysis of variance designs 129
xii Contents

4.7 Resampling methods for standard errors, tests and confidence


intervals 129
4.7.1 The one-sample permutation test 129
4.7.2 The two-sample permutation test 130
4.7.3∗ Estimating the standard error of the median: bootstrapping 131
4.7.4 Bootstrap estimates of confidence intervals 133

4.8 Theories of inference 134
4.8.1 Maximum likelihood estimation 135
4.8.2 Bayesian estimation 136
4.8.3 If there is strong prior information, use it! 136
4.9 Recap 137
4.10 Further reading 138
4.10.1 References for further reading 138
4.11 Exercises 139

5 Regression with a single predictor 144


5.1 Fitting a line to data 144
5.1.1 Lawn roller example 145
5.1.2 Calculating fitted values and residuals 146
5.1.3 Residual plots 147
5.1.4 Iron slag example: is there a pattern in the residuals? 148
5.1.5 The analysis of variance table 150
5.2 Outliers, influence and robust regression 151
5.3 Standard errors and confidence intervals 153
5.3.1 Confidence intervals and tests for the slope 153
5.3.2 SEs and confidence intervals for predicted values 154
5.3.3∗ Implications for design 155
5.4 Regression versus qualitative anova comparisons 157
5.4.1 Issues of power 157
5.4.2 The pattern of change 158
5.5 Assessing predictive accuracy 158
5.5.1 Training/test sets and cross-validation 158
5.5.2 Cross-validation – an example 159
5.5.3∗ Bootstrapping 161

5.6 A note on power transformations 164
5.6.1∗ General power transformations 164
5.7 Size and shape data 165
5.7.1 Allometric growth 166
5.7.2 There are two regression lines! 167
5.8 The model matrix in regression 168
5.9 Recap 169
5.10 Methodological references 170
5.11 Exercises 170
Contents xiii

6 Multiple linear regression 173


6.1 Basic ideas: book weight and brain weight examples 173
6.1.1 Omission of the intercept term 176
6.1.2 Diagnostic plots 176
6.1.3 Example: brain weight 178
6.1.4 Plots that show the contribution of individual terms 180
6.2 Multiple regression assumptions and diagnostics 182
6.2.1 Influential outliers and Cook’s distance 183
6.2.2 Influence on the regression coefficients 184
6.2.3∗ Additional diagnostic plots 185
6.2.4 Robust and resistant methods 185
6.2.5 The uses of model diagnostics 185
6.3 A strategy for fitting multiple regression models 186
6.3.1 Preliminaries 186
6.3.2 Model fitting 187
6.3.3 An example – the Scottish hill race data 187
6.4 Measures for the assessment and comparison of regression
models 193
6.4.1 R2 and adjusted R2 193
6.4.2 AIC and related statistics 194
6.4.3 How accurately does the equation predict? 194
6.5 Interpreting regression coefficients 196
6.5.1 Book dimensions and book weight 196
6.6 Problems with many explanatory variables 199
6.6.1 Variable selection issues 200
6.7 Multicollinearity 202
6.7.1 A contrived example 202
6.7.2 The variance inflation factor 206
6.7.3 Remedies for multicollinearity 206
6.8 Multiple regression models – additional points 207
6.8.1 Errors in x 207
6.8.2 Confusion between explanatory and response variables 210
6.8.3 Missing explanatory variables 210
6.8.4∗ The use of transformations 212
6.8.5∗ Non-linear methods – an alternative to transformation? 212
6.9 Recap 214
6.10 Further reading 214
6.10.1 References for further reading 215
6.11 Exercises 216

7 Exploiting the linear model framework 219


7.1 Levels of a factor – using indicator variables 220
7.1.1 Example – sugar weight 220
7.1.2 Different choices for the model matrix when there are
factors 223
xiv Contents

7.2 Block designs and balanced incomplete block designs 224


7.2.1 Analysis of the rice data, allowing for block effects 224
7.2.2 A balanced incomplete block design 226
7.3 Fitting multiple lines 227
7.4 Polynomial regression 231
7.4.1 Issues in the choice of model 233
7.5∗ Methods for passing smooth curves through data 234
7.5.1 Scatterplot smoothing – regression splines 235
7.5.2∗ Penalized splines and generalized additive models 239
7.5.3 Other smoothing methods 239
7.6 Smoothing terms in additive models 241
7.6.1∗ The fitting of penalized spline terms 243
7.7 Further reading 243
7.7.1 References for further reading 243
7.8 Exercises 243

8 Generalized linear models and survival analysis 246


8.1 Generalized linear models 246
8.1.1 Transformation of the expected value on the left 246
8.1.2 Noise terms need not be normal 247
8.1.3 Log odds in contingency tables 247
8.1.4 Logistic regression with a continuous explanatory variable 248
8.2 Logistic multiple regression 251
8.2.1 Selection of model terms and fitting the model 253
8.2.2 A plot of contributions of explanatory variables 256
8.2.3 Cross-validation estimates of predictive accuracy 257
8.3 Logistic models for categorical data – an example 258
8.4 Poisson and quasi-Poisson regression 260
8.4.1 Data on aberrant crypt foci 260
8.4.2 Moth habitat example 263
8.5 Additional notes on generalized linear models 269
8.5.1∗ Residuals, and estimating the dispersion 269
8.5.2 Standard errors and z- or t-statistics for binomial models 270
8.5.3 Leverage for binomial models 270
8.6 Models with an ordered categorical or categorical response 271
8.6.1 Ordinal regression models 271
8.6.2∗ Loglinear models 274
8.7 Survival analysis 275
8.7.1 Analysis of the Aids2 data 276
8.7.2 Right censoring prior to the termination of the study 278
8.7.3 The survival curve for male homosexuals 279
8.7.4 Hazard rates 279
8.7.5 The Cox proportional hazards model 280
8.8 Transformations for count data 282
8.9 Further reading 283
Contents xv

8.9.1 References for further reading 283


8.10 Exercises 284

9 Time series models 286


9.1 Time series – some basic ideas 286
9.1.1 Preliminary graphical explorations 286
9.1.2 The autocorrelation function 287
9.1.3 Autoregressive models 288
9.1.4∗ Autoregressive moving average models – theory 290
9.2∗ Regression modeling with moving average errors 291

9.3 Non-linear time series 297
9.4 Other time series packages 298
9.5 Further reading 298
9.5.1 Spatial statistics 299
9.5.2 References for further reading 299
9.6 Exercises 299

10 Multi-level models and repeated measures 301


10.1 A one-way random effects model 302
10.1.1 Analysis with aov() 303
10.1.2 A more formal approach 306
10.1.3 Analysis using lmer() 308
10.2 Survey data, with clustering 311
10.2.1 Alternative models 311
10.2.2 Instructive, though faulty, analyses 316
10.2.3 Predictive accuracy 317
10.3 A multi-level experimental design 317
10.3.1 The anova table 319
10.3.2 Expected values of mean squares 320
10.3.3∗ The sums of squares breakdown 321
10.3.4 The variance components 324
10.3.5 The mixed model analysis 325
10.3.6 Predictive accuracy 327
10.3.7 Different sources of variance – complication or focus
of interest? 327
10.4 Within- and between-subject effects 328
10.4.1 Model selection 329
10.4.2 Estimates of model parameters 330
10.5 Repeated measures in time 332
10.5.1 Example – random variation between profiles 334
10.5.2 Orthodontic measurements on children 339
10.6 Error structure considerations 343
10.6.1 Predictions from models with a complex error
structure 343
10.6.2 Error structure in explanatory variables 344
xvi Contents

10.7 Further notes on multi-level and other models with correlated


errors 344
10.7.1 An historical perspective on multi-level models 344
10.7.2 Meta-analysis 346
10.7.3 Functional data analysis 346
10.8 Recap 346
10.9 Further reading 347
10.9.1 References for further reading 347
10.10 Exercises 348

11 Tree-based classification and regression 350


11.1 The uses of tree-based methods 351
11.1.1 Problems for which tree-based regression may be used 351
11.2 Detecting email spam – an example 352
11.2.1 Choosing the number of splits 355
11.3 Terminology and methodology 355
11.3.1 Choosing the split – regression trees 355
11.3.2 Within and between sums of squares 356
11.3.3 Choosing the split – classification trees 357
11.3.4 Tree-based regression versus loess regression smoothing 358
11.4 Predictive accuracy and the cost–complexity tradeoff 360
11.4.1 Cross-validation 361
11.4.2 The cost–complexity parameter 361
11.4.3 Prediction error versus tree size 362
11.5 Data for female heart attack patients 363
11.5.1 The one-standard-deviation rule 365
11.5.2 Printed information on each split 365
11.6 Detecting email spam – the optimal tree 366
11.7 The randomForest package 368
11.8 Additional notes on tree-based methods 371
11.8.1 The combining of tree-based methods with other approaches 371
11.8.2 Models with a complex error structure 372
11.8.3 Pruning as variable selection 372
11.8.4 Other types of tree 372
11.8.5 Factors as predictors 372
11.8.6 Summary of pluses and minuses of tree-based methods 372
11.9 Further reading 373
11.9.1 References for further reading 373
11.10 Exercises 374

12 Multivariate data exploration and discrimination 375


12.1 Multivariate exploratory data analysis 376
12.1.1 Scatterplot matrices 376
12.1.2 Principal components analysis 377
12.1.3 Multi-dimensional scaling 383
Contents xvii

12.2 Discriminant analysis 384


12.2.1 Example – plant architecture 384
12.2.2 Logistic discriminant analysis 386
12.2.3 Linear discriminant analysis 387
12.2.4 An example with more than two groups 388
12.3∗ High-dimensional data, classification and plots 390
12.3.1 Classifications and associated graphs 392
12.3.2 Flawed graphs 393
12.3.3 Accuracies and scores for test data 397
12.3.4 Graphs derived from the cross-validation process 403
12.4 Further reading 405
12.4.1 References for further reading 406
12.5 Exercises 406

13 Regression on principal component or discriminant scores 408


13.1 Principal component scores in regression 408
13.2∗ Propensity scores in regression comparisons – labor
training data 412
13.2.1 Regression analysis, using all covariates 415
13.2.2 The use of propensity scores 417
13.3 Further reading 419
13.3.1 References for further reading 419
13.4 Exercises 420

14 The R system – additional topics 421


14.1 Working directories, workspaces and the search list 421
14.1.1∗ The search path 421
14.1.2 Workspace management 421
14.1.3 Utility functions 423
14.2 Data input and output 423
14.2.1 Input of data 424
14.2.2 Data output 428
14.3 Functions and operators – some further details 429
14.3.1 Function arguments 430
14.3.2 Character string and vector functions 431
14.3.3 Anonymous functions 431
14.3.4 Functions for working with dates (and times) 432
14.3.5 Creating groups 433
14.3.6 Logical operators 434
14.4 Factors 434
14.5 Missing values 437
14.6∗ Matrices and arrays 439
14.6.1 Matrix arithmetic 440
14.6.2 Outer products 441
14.6.3 Arrays 442
xviii Contents

14.7 Manipulations with lists, data frames and matrices 443


14.7.1 Lists – an extension of the notion of “vector” 443
14.7.2 Changing the shape of data frames 445
14.7.3∗ Merging data frames – merge() 445
14.7.4 Joining data frames, matrices and vectors – cbind() 446
14.7.5 The apply family of functions 446
14.7.6 Splitting vectors and data frames into lists – split() 448
14.7.7 Multivariate time series 448
14.8 Classes and methods 449
14.8.1 Printing and summarizing model objects 449
14.8.2 Extracting information from model objects 450
14.8.3 S4 classes and methods 450
14.9 Manipulation of language constructs 451
14.9.1 Model and graphics formulae 451
14.9.2 The use of a list to pass parameter values 452
14.9.3 Expressions 453
14.9.4 Environments 453
14.9.5 Function environments and lazy evaluation 455
14.10 Document preparation — Sweave() 456
14.11 Graphs in R 457
14.11.1 Hardcopy graphics devices 457
14.11.2 Multiple graphs on a single graphics page 457
14.11.3 Plotting characters, symbols, line types and colors 457
14.12 Lattice graphics and the grid package 462
14.12.1 Interaction with plots 464
14.12.2∗ Use of grid.text() to label points 464
14.12.3∗ Multiple lattice graphs on a graphics page 465
14.13 Further reading 466
14.13.1 Vignettes 466
14.13.2 References for further reading 466
14.14 Exercises 467

Epilogue – models 470

References 474

Index of R Symbols and Functions 485

Index of Terms 491

Index of Authors 501

Color Plates after Page 502


Preface

This book is an exposition of statistical methodology that focuses on ideas and concepts,
and makes extensive use of graphical presentation. It avoids, as much as possible, the
use of mathematical symbolism. It is particularly aimed at scientists who wish to do sta-
tistical analyses on their own data, preferably with reference as necessary to professional
statistical advice. It is intended to complement more mathematically oriented accounts of
statistical methodology. It may be used to give students with a more specialist statistical
interest exposure to practical data analysis.
While no prior knowledge of specific statistical methods or theory is assumed, there is
a demand that readers bring with them, or quickly acquire, some modest level of statistical
sophistication. Readers should have some prior exposure to statistical methodology, some
prior experience of working with real data, and be comfortable with the typing of analysis
commands into the computer console. Some prior familiarity with regression and with
analysis of variance will be helpful.
We cover a range of topics that are important for many different areas of statistical
application. As is inevitable in a book that has this broad focus, there will be investiga-
tors working in specific areas – perhaps epidemiology, or psychology, or sociology, or
ecology – who will regret the omission of some methodologies that they find important.
We comment extensively on analysis results, noting inferences that seem well-founded,
and noting limitations on inferences that can be drawn. We emphasize the use of graphs
for gaining insight into data – in advance of any formal analysis, for understanding the
analysis, and for presenting analysis results.
The data sets that we use as a vehicle for demonstrating statistical methodology have
been generated by researchers in many different fields, and have in many cases featured
in published papers. As far as possible, our account of statistical methodology comes
from the coalface, where the quirks of real data must be faced and addressed. Features
that may challenge the novice data analyst have been retained. The diversity of examples
has benefits, even for those whose interest is in a specific application area. Ideas and
applications that are useful in one area often find use elsewhere, even to the extent
of stimulating new lines of investigation. We hope that our book will stimulate such
cross-fertilization.
To summarize: the strengths of this book include the directness of its encounter with
research data, its advice on practical data analysis issues, the inclusion of code that
reproduces analyses, careful critiques of analysis results, attention to graphical and other
xx Preface

presentation issues, and the use of examples drawn from across the range of statistical
applications.
John Braun wrote the initial drafts of Subsections 4.7.3, 4.7.4, 5.5.3, 6.8.5, 8.4.1
and Section 9.3. Initial drafts of remaining material were, mostly, from John Maindon-
ald’s hand. A substantial part was derived, intially, from the lecture notes of courses
for researchers, at the University of Newcastle (Australia) over 1996–1997 and at The
Australian National University over 1998–2001. Both of us have worked extensively
over the material in these chapters. John Braun has taken primary responsibility for
maintenance of the DAAG package.

The R system
We use the R system for the computations. The R system implements a dialect of the
influential S language, developed at AT&T Bell Laboratories by Rick Becker, John
Chambers and Allan Wilks, which is the basis for the commercial S-PLUS system.
It follows S in its close linkage between data analysis and graphics. Versions of R
are available, at no charge, for 32-bit versions of Microsoft Windows, for Linux and
other Unix systems, and for the Macintosh. It is available through the Comprehensive
R Archive Network (CRAN). Go to http://cran.r-project.org/, and find the
nearest mirror site.
The development model used for R has proved highly effective in marshalling high
levels of computing expertise for continuing improvement, for identifying and fixing
bugs, and for responding quickly to the evolving needs and interests of the statistical
community. Oversight of “base R” is handled by the R Core Team, whose members are
widely drawn internationally. Use is made of code, bug fixes and documentation from
the wider R user community. Especially important are the large number of packages that
supplement base R, and that anyone is free to contribute. Once installed, these attach
seamlessly into the base system.
Many of the analyses offered by R’s packages were not, 10 years ago, available in
any of the standard statistical packages. What did data analysts do before we had such
packages? Basically, they adapted more simplistic (but not necessarily simpler) analyses
as best they could. Those whose skills were unequal to the task did unsatisfactory
analyses. Those with more adequate skills carried out analyses that, even if not elegant
and insightful by current standards, were often adequate. Tools such as are available
in R have reduced the need for the adaptations that were formerly necessary. We can
often do analyses that better reflect the underlying science. There have been challenging
and exciting changes from the methodology that was typically encountered in statistics
courses 10 or 15 years ago.
In the ongoing development of R, priorities have been: the provision of good data
manipulation abilities; flexible and high-quality graphics; the provision of data analysis
methods that are both insightful and adequate for the whole range of application area
demands; seamless integration of the different components of R; and the provision of
interfaces to other systems (editors, databases, the web, etc.) that R users may require.
Preface xxi

Ease of use is important, but not at the expense of power, flexibility and checks against
answers that are potentially misleading.
Depending on the user’s level of skill with R, there will be some relatively routine
tasks where another system may seem simpler to use. Note however the availability of
interfaces, notably John Fox’s Rcmdr, that give a graphical user interface (GUI) to a
limited part of R. Such interfaces will develop and improve as time progresses. They may
in due course, for many users, be the preferred means of access to R. Be aware that the
demand for simple tools will commonly place limitations on the tasks that can, without
professional assistance, be satisfactorily undertaken.
Primarily, R is designed for scientific computing and for graphics. Among the packages
that have been added are many that are not obviously statistical – for drawing and coloring
maps, for map projections, for plotting data collected by balloon-born weather instruments,
for creating color palettes, for working with bitmap images, for solving sudoko puzzles,
for creating magic squares, for reading and handling shapefiles, for solving ordinary
differential equations, for processing various types of genomic data, and so on. Check
through the list of R packages that can be found on any of the CRAN sites, and you may
be surprised at what you find!
The citation for John Chambers’ 1998 Association for Computing Machinery Software
award stated that S has “forever altered how people analyze, visualize and manipu-
late data.” The R project enlarges on the ideas and insights that generated the S lan-
guage. We are grateful to the R Core Team, and to the creators of the various R
packages, for bringing into being the R system – this marvellous tool for scientific
and statistical computing, and for graphical presentation. We list at the end of the
reference section the authors and compilers of packages that have been used in this
book.

Influences on the modern practice of statistics


The development of statistics has been motivated by the demands of scientists for a
methodology that will extract patterns from their data. The methodology has developed
in a synergy with the relevant supporting mathematical theory and, more recently, with
computing. This has led to methodologies and supporting theory that are a radical depar-
ture from the methodologies of the pre-computer era.
Statistics is a young discipline. Only in the 1920s and 1930s did the modern framework
of statistical theory, including ideas of hypothesis testing and estimation, begin to take
shape. Different areas of statistical application have taken these ideas up in different
ways, some of them starting their own separate streams of statistical tradition. Gigerenzer
et al. (1989, “The Empire of Statistics”) examine the history, commenting on the different
streams of development that have influenced practice in different research areas.
Separation from the statistical mainstream, and an emphasis on “black box” approaches,
have contributed to a widespread exaggerated emphasis on tests of hypotheses, to a neglect
of pattern, to the policy of some journal editors of publishing only those studies that show
a statistically significant effect, and to an undue focus on the individual study. Anyone
xxii Preface

who joins the R community can expect to witness, and/or engage in, lively debate that
addresses these and related issues. Such debate can help ensure that the demands of
scientific rationality do in due course win out over influences from accidents of historical
development.

New tools for effective data analysis


We have drawn attention to advances in statistical computing methodology. These have led
to new powerful tools for exploratory analysis of regression data, for choosing between
alternative models, for diagnostic checks, for handling non-linearity, for assessing the
predictive power of models, and for graphical presentation. In addition, we have new
computing tools that make it straightforward to move data between different systems, to
keep a record of calculations, to retrace or adapt earlier calculations, and to edit output
and graphics into a form that can be incorporated into published documents.
The best any analysis can do is to highlight the information in the data. No amount of
statistical or computing technology can be a substitute for good design of data collection,
for understanding the context in which data are to be interpreted, or for skill in the
use of statistical analysis methodology. Statistical software systems are one of several
components of effective data analysis.
The questions that statistical analysis is designed to answer can often be stated simply.
This may encourage the layperson to believe that the answers are similarly simple. Often,
they are not. Be prepared for unexpected subtleties. Effective statistical analysis requires
appropriate skills, beyond those gained from taking one or two undergraduate courses in
statistics. There is no good substitute for professional training in modern tools for data
analysis, and experience in using those tools with a wide range of data sets. No-one
should be embarrassed that they have difficulty with analyses that involve ideas that
professional statisticians may take 7 or 8 years of professional training and experience to
master.

Changes in this second edition


This new edition takes account of changes in R since 2003. There is new material
on survival analysis, random coefficient models and the handling of high-dimensional
data. The treatment of regression methods has been extended, including in particular a
brief discussion of errors in predictor variables. Both the text and R code have been
extensively revised. Code has, wherever possible, been simplified. Some examples have
been reworked. There are changes to some graphs, and new graphs have been added.

Acknowledgments
Many different people have helped us with this project. Winfried Theis (University
of Dortmund, Germany) and Detlef Steuer (University of the Federal Armed Forces,
Hamburg, Germany) helped with technical aspects of working with LATEX, with setting
up a cvs server to manage the LATEX files, and with helpful comments. Lynne Billard
Preface xxiii

(University of Georgia, USA), Murray Jorgensen (University of Waikato, NZ) and Berwin
Turlach (University of Western Australia) gave valuable help in the identification of errors
and text that required clarification. Susan Wilson (Australian National University) gave
welcome encouragement. Duncan Murdoch (University of Western Ontario) helped set
up the DAAG package, and has supplied valuable technical advice. Thanks also to Cath
Lawrence (Australian National University) for her Python program that allowed us to
extract the R code, as and when required, from our LATEX files; this has now at length
become an R function. Many of the tables in this book were generated, in first draft form,
using the xtable() function from the xtable package for R.
For this second edition, Brian Ripley (University of Oxford) has gone through the
manuscript and made extensive comments, leading to important corrections and improve-
ments. We are most grateful to him, and to others who have commented on the manuscript.
Alan Welsh (Australian National University) has been helpful in working through points
where it has seemed difficult to get the emphasis right. Once again, Duncan Murdoch
has given much useful technical advice. Others who have made helpful comments and/or
pointed out errors include Jeff Wood (Australian National University), Nader Tajvidi
(University of Lund), Paul Murrell (University of Auckland, on Section 14.11), Graham
Williams (http://www.togaware.com, on Chapter 1) and Yang Yang (University of
Western Ontario, on Chapter 10). The failings that remain are, naturally, our responsibility.
A strength of this book is the extent to which it has drawn on data from many different
sources. We give a list, following the list of references for the data near the end of the
book, of individuals and/or organizations to whom we are grateful for allowing use of
data. We are grateful to those who have allowed us to use their data. At least these
data will not, as often happens once data have become the basis for a published paper,
gather dust in a long-forgotten folder! We are grateful, also, to the many researchers who,
in their discussions with us, have helped stimulate our thinking and understanding. We
apologize if there is anyone that we have inadvertently failed to acknowledge.
Diana Gillooly of Cambridge University Press, taking over from David Tranah for this
new edition, has been a marvellous source of advice and encouragement throughout the
revision process.

Conventions
Text that is R code, or output from R, is printed in a verbatim text style. For example,
in Chapter 1 we will enter data into an R object that we call austpop. We will use the
plot() function to plot these data. The names of R packages, including our own DAAG
package, are printed in italics.
Starred exercises and sections identify more technical items that can be skipped at a
first reading.

Solutions to exercises
Solutions to selected exercises, R scripts that have all the code from the book and other
supplementary materials are available via the link given at http://www.maths.anu.
edu.au/˜johnm/r-book
1

A brief introduction to R

This first chapter introduces readers to the basics of R. It provides the minimum of
information that is needed for running the calculations that are described in later chapters.
The first section may cover most of what is immediately necessary. The rest of the chapter
may be used as a reference. Chapter 14 extends this material considerably.
Most of the R commands will run without change in S-PLUS.

1.1 An overview of R
1.1.1 A short R session
R must be installed!
An up-to-date version of R may be downloaded from a Comprehensive R Archive
Network (CRAN) mirror site. There are links at http://cran.r-project.org/.
Installation instructions are provided at the web site for installing R in Windows, Unix,
Linux, and version 10 of the Macintosh operating system. Various contributed packages
are now a part of the standard R distribution, but a number are not; any of these may be
installed as required. Data sets that are mentioned in this book, and that are not (in most
cases) available in other packages, have been collected into our DAAG package that is
available from CRAN sites.
For most Windows users, R can be installed by clicking on the icon that appears on
the desktop once the Windows binary has been downloaded from CRAN. An installation
program will then guide the user through the process. By default, an R icon will be placed
on the user’s desktop. The R system can be started by double-clicking on that icon.
The DAAG package can be installed under Windows by starting R and clicking on the
Packages Menu. From that menu, choose Install Packages. If a mirror site has not been
set earlier, this gives a pop-up menu from which a site must be chosen. Once this choice
is made, a new pop-up window appears with the entire list of available R packages.
Clicking on DAAG will cause it to be downloaded and installed.

Using the console (or command line) window


The command line prompt (>) is an invitation to start typing in commands or expressions.
R evaluates and prints out the result of any expression that is typed in at the command
line in the console window (multiple commands may appear on the one line, with the
2 A brief introduction to R

Table 1.1 Estimated worldwide


annual totals of carbon emissions from
fossil fuel use, in millions of tonnes.
Data are due to Marland et al. (2003).

Year Carbon

1 1800 8
2 1850 54
3 1900 534
4 1950 1630
5 2000 6611

semicolon (;) as the separator). This allows the use of R as a calculator. For example,
type 2+2 and press the Enter key. Here is what appears on the screen:
> 2+2
[1] 4
>

The first element is labeled [1] even when, as here, there is just one element! The final
> prompt indicates that R is ready for another command.
In a sense this chapter, and much of the rest of the book, is a discussion of what
is possible by typing in statements at the command line. Practice in the evaluation of
arithmetic expressions will help develop the needed conceptual and keyboard skills. Here
are simple examples:
> 2*3*4*5 # * denotes ’multiply’
[1] 120
> sqrt(10) # the square root of 10
[1] 3.162278
> pi # R knows about pi
[1] 3.141593
> 2*pi*6378 # Circumference of earth at equator (km)
# (radius at equator is 6378 km)
[1] 40074.16

Anything that follows a # on the command line is taken as comment and ignored by R.
A continuation prompt, by default +, appears following a carriage return when the
command is not yet complete. (In this book we will omit both the prompt (>) and the
continuation prompt (+), whenever command line statements are given separately from
output.)

Entry of data at the command line


Table 1.1 gives, for each of the years 1800, 1850, … , 2000, estimated worldwide totals
of carbon emissions that resulted from fossil fuel use. We can enter these columns of
data, then plot Carbon against Year to give Figure 1.1, thus:
1.1 An overview of R 3

50
Carbon

20
0
180 190 20

Year

Figure 1.1 Plot of Carbon against Year, for the data in Table 1.1.

Year <- c(1800, 1850, 1900, 1950, 2000)


Carbon <- c(8, 54, 534, 1630, 6611)
## Now plot Carbon as a function of Year
plot(Carbon ˜ Year, pch=16)

Note the following:

• The <- is a left angle bracket (<) followed by a minus sign (-). It means “the values
on the right are assigned to the name on the left.”
• The objects Year and Carbon are vectors which were each formed by joining
(concatenating) separate numbers together. Thus c(8, 54, 534, 1630, 6611)
joined the numbers 8, 54, 534, 1630, 6611 together to form the vector Carbon. See
Subsection 1.3.2 for further details on this.
• The construct Carbon ∼ Year is a graphics formula. The plot() function inter-
prets this formula to mean “Plot Carbon as a function of Year” or “Plot Carbon
on the y-axis against Year on the x-axis.”
• The setting pch=16 (where pch is “plot character”) gives a solid black dot.
• Case is significant for names of R objects or commands. Thus, Carbon is different
from carbon.

We can make various modifications to this basic plot. We can specify more informative
axis labels, change the sizes of the text and of the plotting symbol, add a title, and so on.
More information is given in Section 1.6.

Collection of vectors into a data frame


The two vectors Year and Carbon are matched, element for element. It is convenient
to group the two vectors together into an object that is called a data frame, thus:
> fossilfuel <- data.frame(year=Year, carbon=Carbon)
> fossilfuel # Display the contents of the data frame.
year carbon
1 1800 8
2 1850 54
3 1900 534
4 A brief introduction to R

4 1950 1630
5 2000 6611
> rm(Year, Carbon) # These are no longer required

The vector objects year and carbon become columns in the data frame.
An alternative to the plotting command that gave Figure 1.1 is then:
plot(carbon ˜ year, data=fossilfuel, pch=16)

The data=fossilfuel argument instructs plot() to start its search for each of
carbon and year by looking among the columns of fossilfuel.
There are several ways to identify columns by name. Here, note that the second column
can be referred to as fossilfuel[, 2], or as fossilfuel[, "carbon"], or as
fossilfuel$carbon.
Data frames are the preferred way for organizing data sets that are of modest size. For
now, think of data frames as a rectangular row by column layout, where the rows are
observations and the columns are variables. More information about data frames can be
found in Section 1.4. Subsection 1.2.1 will demonstrate the reading of data from a file,
entering them into a data frame.

Checks on the working directory and the contents of the workspace


Each R session has a working directory. This is the default place where R looks for files
that are read from disk, or written to disk. For a session that is started from a Windows
icon, the initial working directory is the Start in directory that can be determined by
right clicking on the icon and clicking on Properties. Users of the GUI-based application
for the Macintosh can change the default startup directory from within an R session by
clicking on the R menu item, then on Preferences and making the necessary change in
the panel Initial working directory. On Unix or Linux sessions that are started from the
command line, the working directory is the directory in which R was started. In the event
that there is any uncertainty, use the command getwd() to give the name of the working
directory:
getwd()

Objects that the user creates or copies from elsewhere go into the user workspace. In
order to list the contents of the workspace, type:
ls()

The only object left over from the current session should be fossilfuel. There may
additionally be objects that are left over from previous sessions (if any) in the same
directory, and that were loaded when the session started.

Quitting R
Use the q() function to quit (exit) from R:
q()
1.1 An overview of R 5

There will be a message asking whether to save the workspace image. Clicking Yes has the
effect that, before quitting, all the objects that remain in the working directory are saved
in an “image” file that has the name .RData. This file is an “image” of the workspace
immediately before quitting the session, and will be used to restore the workspace when
a new session is again started in that directory. (Note that while delaying the saving of
important objects till the end of the session is acceptable when working in a learning
mode, it is not a good strategy when using R in production mode. Advice on saving and
backing up through the course of the session will be given in Section 1.8 and, in more
detail, in Subsection 14.1.2.)
Depending on the implementation, alternatives to typing q() may be to click on the
File menu and then on Exit, or to click on the × in the top right-hand corner of the R
window. (Under Linux, depending on the window manager that is used, clicking on ×
may exit from the program, but without asking whether to save the workshop image.
Check the behavior on your installation.)
Note: In order to quit the R session we had to type q(). The round brackets are
necessary because q is a function. Typing q on its own, without the brackets, displays
the text of the function on the screen. Try it!

1.1.2 The uses of R


R has extensive capabilities for statistical analysis, that will be used throughout this book.
These are embedded in an interactive computing environment that is suited to many
different uses. Here we draw attention to abilities, beyond simple one-line calculations,
that may not be primarily statistical.

R offers an extensive collection of functions


Most of the calculations that users may wish to carry out, beyond simple command
line computations, involve explicit use of functions. There are of course functions for
calculating the sum (sum()), mean (mean()), range (range()), length of a vector
(length()), for sorting values into order (sort()) and so on. For example, the
following calculates the range of the values in the vector carbon:

> range(fossilfuel$carbon)
[1] 8 6611

By no means are R’s abilities limited to numerical calculation. Here are examples that
involve character strings:

> ## 4 cities
> fourcities <- c("Toronto", "Canberra", "New York", "London")
> ## display in alphabetical order
> sort(fourcities)
[1] "Canberra" "London" "New York" "Toronto"
> ## Find the number of characters in "Toronto"
> nchar("Toronto")
6 A brief introduction to R

[1] 7
>
> ## Find the number of characters in all four city names at once
> nchar(fourcities)
[1] 7 8 8 6

R will give numerical or graphical data summaries


The data frame cars that is in the datasets package has two columns (variables), with
the names speed and dist. Typing summary(cars) gives summary information on
these variables:
> summary(cars)
speed dist
Min. : 4.0 Min. : 2.00
1st Qu.:12.0 1st Qu.: 26.00
Median :15.0 Median : 36.00
Mean :15.4 Mean : 42.98
3rd Qu.:19.0 3rd Qu.: 56.00
Max. :25.0 Max. :120.00

Thus, we can immediately see that the range of speeds (first column) is from 4 mph to
25 mph, and that the range of distances (second column) is from 2 feet to 120 feet.
Graphical alternatives to summary(), including histograms and boxplots, are dis-
cussed and demonstrated in Sections 1.7 and 2.1. Try for example:
hist(cars$speed)

R is an interactive programming language


Suppose we want to calculate the Fahrenheit temperatures that correspond to Celsius
temperatures 0, 10    , 40. Here is a good way to do this in R:
> celsius <- (0:4)*10
> fahrenheit <- 9/5*celsius+32
> conversion <- data.frame(Celsius=celsius, Fahrenheit=fahrenheit)
> print(conversion)
Celsius Fahrenheit
1 0 32
2 10 50
3 20 68
4 30 86
5 40 104

1.1.3 Online help


Before getting deeply into the use of R, it is well to take time to master the help facilities.
Such an investment of time will pay dividends. R’s help files are comprehensive, and are
1.1 An overview of R 7

frequently upgraded. Type help(help) to get information on the help features of the
system that is in use. To get help on, for example, plot(), type:

help(plot)

The functions apropos() and help.search() offer means for searching for
functions that perform a desired task. Specific examples seem the best way to explain
their use. Thus try:

apropos("sort") # Try, also, apropos ("sor")


# This lists all functions whose names include the
# character string "sort".
help.search("sort") # Note that the argument is ’sort’
# This lists all functions that have the word ’sort’ as
# an alias or in their title.

The function help.start() is designed to start up a browser window that gives


access to a variety of help information and documentation.
Users are encouraged to experiment with R functions, perhaps starting by using
example() to run the examples that are included in the help file. Be warned that
some of the examples may illustrate relatively advanced aspects of the use of the func-
tion. This can be the case even for such basic functions as mean(). To run the examples
that are included in the help file for the function image(), type:

example(image)
# for a 2 by 2 layout of the last 4 plots, precede with
# par(mfrow=c(2,2))
# To prompt for each new graph, precede with par(ask=TRUE)
# When finished, turn off the prompts with par(ask=FALSE)

In learning to use a new function, it may be helpful to create a simple artificial data
set, or to create a small subset from a larger data set, and use this for experimentation.
For extensive experimentation, consider moving to a new working directory and working
with copies of any user data sets and functions.
The help pages, while not an encyclopedia on statistical methodology, have much
helpful information on the methods whose implementation they document. Some of
the abilities that they document will bring pleasant surprises. There are many in-
sightful and helpful examples, there are references to related functions, and there
are references to papers and books that give the relevant theory. It can help enor-
mously, before launching into the use of an R function, to check the relevant help
page!

Wide-ranging searches
The function RSiteSearch()makes it possible (assuming a live internet connection)
to search R manuals and help pages, and the R-help mailing list archives, for key words or
phrases. It has a parameter restrict that allows some limited targeting of the search.
See help(RSiteSearch) for details.
8 A brief introduction to R

1.1.4 Further steps in learning R


Readers who have followed the discussion thus far and worked through the examples
may at this point have learned enough to start on Chapter 2, referring as necessary to later
sections of this chapter, to R’s help pages, and to Chapter 14. Before progressing far,
it will however be wise to work through the remaining sections of the present chapter.
Topics that will be covered in the remaining sections of this chapter, and that readers will
encounter as they work through Chapter 2 and later chapters, include:

• The function read.table(), demonstrated in Subsection 1.2.1, reads data from a


file into a data frame.
• Vectors are a fundamental data structure. Possible modes include numeric, character,
logical and complex. See Subsection 1.3.1.
• Factors, not so far discussed, use integer values 1, 2, …, as indices into a look-up
table that holds unique character strings. They are used to represent categorical data,
and are fundamental to much of the use of R’s graphics and modeling functions. See
Subsection 1.3.6.
• Later chapters will make extensive use both of base graphics (using plot(), etc.) and
of the more stylized graphs provided by lattice graphics. Lattice graphics (Sections
1.7 and 14.12) allows the layout of panels on the page, and point and line settings, to
reflect meaningful aspects of the data structure.
• The R system has a variety of functions that calculate summary statistics, create tables,
do cross-tabulations, obtain information on data sets, and so on. Some of these are
listed in Section 1.5. Others will be encountered in later chapters.

1.2 Data input, packages and the search list


1.2.1 Reading data from a file
The function read.table() offers a straightforward way to read into an R data frame
a file in which each row has the same number of fields of data. For simplicity, assume
that the data from Table 1.1 are in a file called fuel.txt in the working directory, with
fields separated by one or more spaces and/or tabs. (On Microsoft Windows systems, the
Windows conventions apply to file names, and it is immaterial whether this file is called
fuel.txt or Fuel.txt. Unix file systems may, depending on the specific file system in use,
treat letters that have a different case as different.)
Code that will take data from the file fuel.txt, entering them into the data frame
fossilfuel in the workspace is:

fossilfuel <- read.table("fuel.txt", header=TRUE)

Note the use of header=TRUE to ensure that R uses the first line to get header infor-
mation for the columns.
Type fossilfuel at the command line prompt, and the data will be displayed almost
as they appear in Table 1.1 (the only difference is the introduction of row labels in the R
output). Data read into R with the read.table() function are automatically converted
to a data frame.
1.2 Data input, packages and the search list 9

We have assumed that the fields in fuel.txt are separated by spaces and/or tabs, as
allowed by the default setting (sep=") for read.table(). Other parameter settings
are sometimes required; note in particular:

fossilfuel <- read.table("fuel.csv", header=TRUE, sep=",")

reads data from a file fuel.csv where the fields have been separated by commas.
Consult the help page for read.table() for other options.

1.2.2 R packages
The recommended R distribution includes a number of packages in its library. These
are collections of functions and data. We will make frequent use both of the MASS
package (Venables and Ripley, 2002) and of our own DAAG package. DAAG, and other
packages that are not included with the default distribution, can be readily downloaded
and installed.
The base package, the stats package, the datasets package and several other packages,
are automatically attached at the beginning of a session. Other installed packages must
be explicity attached prior to use. Use sessionInfo() to see which packages are
currently attached. To attach any further installed package, use the library() function.
For example:
> library(DAAG)
> sessionInfo()
R version 2.0.1, 2004-11-15, powerpc-apple-darwin6.8

attached base packages:


[1] "methods" "stats" "graphics" "grDevices" "utils"
[6] "datasets" "base"

other attached packages:


DAAG
"0.5.2"

Data sets that accompany R packages


Type data() to get a list of data sets (mostly data frames) in all packages that are in the
current search path. To get information on the data sets that are included in the datasets
package, specify:
data(package="datasets") # Specify ’package’, not ’library’.

Replace "datasets" by the name of any other installed package, as required (type
library() to get the names of the installed packages). In most packages that
are intended for recent versions of R (2.0.0 or later), these data sets become avail-
able automatically once the package has been attached. They will be brought into
the workspace when and if required. (In older versions of R, or in packages that
have not implemented the lazy data mechanism, explicit use of a command of the
10 A brief introduction to R

form data(airquality) may be necessary, bringing the data object into the user’s
workspace.)

Installation of additional packages


The install.packages() function can be used, from within an R session, to install
new packages as required, from an internet connection or from a local repository or file.
Under Windows and other systems that have a menu, packages can alternatively be
installed using the Install Packages option in the Packages menu.

1.3 Vectors, factors and univariate time series


Vectors, factors and univariate time series are all univariate objects that can be included
as columns in a data frame.

1.3.1 Vectors in R
The vector modes that will be described here (there are others) are “numeric,” “logical,”
and “character.” Examples of vectors are:
> c(2, 3, 5, 2, 7, 1)
[1] 2 3 5 2 7 1

> 3:10 # The numbers 3, 4,..., 10


[1] 3 4 5 6 7 8 9 10

> c(T, F, F, F, T, T, F)
[1] TRUE FALSE FALSE FALSE TRUE TRUE FALSE

> c("Canberra", "Sydney", "Canberra", "Sydney")


[1] "Canberra" "Sydney" "Canberra" "Sydney"

The first two vectors above are numeric, the third is logical, and the fourth is a character
vector. Note the use of the global variables F(=FALSE) and T(=TRUE) as a convenient
shorthand when logical values are entered.

1.3.2 Concatenation – joining vector objects


The function c(), used in Subsection 1.1.1 to join numbers together to form a vector, is
more widely useful. It may be used to concatenate any combination of vectors and vector
elements. In the following, we form numeric vectors x and y, that we then concatenate
to form a vector z:
> x <- c(2, 3, 5, 2, 7, 1)
> x
[1] 2 3 5 2 7 1
> y <- c(10, 15, 12)
1.3 Vectors, factors and univariate time series 11

> y
[1] 10 15 12
> z <- c(x, y)
> z
[1] 2 3 5 2 7 1 10 15 12

1.3.3 Subsets of vectors


Note three common ways to extract subsets of vectors:

1. Specify the indices of the elements that are to be extracted, for example:
> x <- c(3, 11, 8, 15, 12) # Assign to x the values 3,
# 11, 8, 15, 12
> x[c(2,4)] # Elements in positions 2
[1] 11 15 # and 4 only
2. Use negative subscripts to omit the elements in nominated subscript positions (take
care not to mix positive and negative subscripts):
> x[-c(2,3)] # Remove the elements in positions 2 and 3
[1] 3 15 12
3. Specify a vector of logical values. The elements that are extracted are those for which
the logical value is TRUE. Thus, suppose we want to extract values of x that are
greater than 10:
> x > 10
[1] FALSE TRUE FALSE TRUE TRUE
> x[x > 10]
[1] 11 15 12

Elements of vectors can be given names. In that case, elements can be extracted by
name:

> heights <- c(Andreas=178, John=185, Jeff=183)


> heights[c("John","Jeff")]
John Jeff
185 183

1.3.4 Patterned data


Use, for example, 5:15 to generate all integers in a range, here between 5 and 15
inclusive:
> 5:15
[1] 5 6 7 8 9 10 11 12 13 14 15

Conversely, 15:5 will generate the sequence in the reverse order.


The function seq() is more general. For example:

> seq(from=5, to=22, by=3) # The first value is 5. The final


# value is <= 22
[1] 5 8 11 14 17 20
12 A brief introduction to R

The function call can be abbreviated to:


seq(5, 22, 3)
To repeat the sequence (2, 3, 5) four times over, enter:
> rep(c(2,3,5), 4)
[1] 2 3 5 2 3 5 2 3 5 2 3 5

Patterned character vectors are also possible:


> c(rep("female", 3), rep("male", 2))
[1] "female" "female" "female" "male" "male"

1.3.5 Missing values


The missing value symbol is NA. As an example, consider the lung variable of the Cape
Fur Seal data (which will be studied in more detail in Chapter 5):
> seal.lung <- cfseal$lung # Weights (gm)
> seal.lung
[1] 605.0 436.0 380.0 493.9 NA 550.0 470.0 592.5 605.0
[10] 799.9 995.0 785.0 910.0 1115.0 1142.6 1465.0 1250.0 1580.0
[19] 2000.0 1474.4 NA 1220.0 1790.0 1510.0 NA NA 2735.0
[28] NA 2380.0 NA

Any arithmetic expression that involves an NA generates NA as its result. Functions


such as mean() allow the parameter setting na.rm=TRUE, so that NAs are omitted
before proceeding with the calculation. For example:
> seal.lung <- cfseal$lung
> mean(seal.lung)
[1] NA
> mean(seal.lung, na.rm=TRUE)
[1] 1137

Logically, if a value is unknown, it is impossible say whether or not it equals some


other value, whether known or unknown. Arithmetic and logical expressions in which
NAs appear generate NA as the result. Thus, consider:
> seal.lung == NA
< [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
< [22] NA NA NA NA NA NA NA NA NA NA

To replace all NAs by -999 (in most circumstances a bad idea) use the function
is.na(), thus:
> ## Replace all NAs by -999 (in general, a bad idea)
> seal.lung[is.na(seal.lung)] <- -999
> seal.lung
[1] 605.0 436.0 380.0 493.9 -999.0 550.0 470.0 592.5 605.0
[10] 799.9 995.0 785.0 910.0 1115.0 1142.6 1465.0 1250.0 1580.0
[19] 2000.0 1474.4 -999.0 1220.0 1790.0 1510.0 -999.0 -999.0 2735.0
[28] -999.0 2380.0 -999.0
1.3 Vectors, factors and univariate time series 13

> ## There is now no protection against use of the -999 values as


> ## if they were legitimate numeric values
> mean(seal.lung) # Illegitimate calculation
[1] 709.7

Using a code such as -999 for missing values requires continual watchfulness to ensure
that it is never treated as a legitimate numeric value.
Missing values are discussed further in Subsection 1.5.6 and Section 14.5. For vectors
of mode numeric, other legal values that may require special attention are NaN (not a
number; try, e.g., by 0/0), Inf (e.g., 1/0) and -Inf.

1.3.6 Factors
A factor is stored internally as a numeric vector with values 1, 2, 3,    , k. The value k is
the number of levels. The levels are character strings.
Consider a survey that has data on 691 females and 692 males. If the first 691 are
females and the next 692 males, we can create a vector of strings that holds the values thus:
gender <- c(rep("female",691), rep("male",692))

We can change this vector to a factor, by entering:

gender <- factor(gender)

Internally, the factor gender is stored as 691 1s, followed by 692 2s. It has stored with
it a table that holds the information:

1 female
2 male

In most contexts that seem to demand a character string, the 1 is translated into female
and the 2 into male. The values female and male are the levels of the factor. By
default, the levels are in sorted order for the data type from which the factor was formed,
so that female precedes male. Hence:

> levels(gender)
[1] "female" "male"

Note that if gender had been an ordinary character vector, the outcome of the above
levels command would have been NULL.
The order of the factor levels determines the order of appearance of the levels in graphs
and tables that use this information. To cause male to come before female, use:

gender <- factor(gender, levels=c("male", "female"))

This syntax is available both when the factor is first created, and later to change the order
in an existing factor. Take care that the level names are correctly spelled. For example,
14 A brief introduction to R

specifying "Male" in place of "male" in the levels argument will cause all values
that were "male" to be coded as missing.
Note finally the function ordered(), which generates factors whose values can be
compared using the relational operators <, <=, >, >=, == and =!. Ordered factors are
appropriate for use with ordered categorical data. See Section 14.4 for further details.

1.3.7 Time series


The following are the numbers of workers (in 1000s) in the Canadian prairies for each
month from January 1995 through December 1996:1
numjobs <- c(982,981,984,982,981,983,983,983,983,979,973,979,
974,981,985,987,986,980,983,983,988,994,990,999)

The function ts() converts numeric vectors into time series objects. Frequently used
arguments of ts() are start, frequency and end. The following turns numjobs
into a time series, which can then be plotted:
numjobs <- ts(numjobs, start=1995, frequency = 12)
plot(numjobs)

Use the function window() to extract a subset of the time series. For example, the
following extracts the first 15 months of the series:
first15 <- window(numjobs, end=1996.25)

Multivariate time series are also possible. See Subsections 2.1.5 and 14.7.7.

1.4 Data frames and matrices


Data frames are fundamental to the use of the R modeling and graphics functions. A data
frame is a more general object than a matrix, in the sense that different columns may
have different modes. All elements of any column must, however, have the same mode,
that is, all numeric, or all factor, or all character, or all logical.
Included in the DAAG package is Cars93.summary, created from the Cars93 data
set in the MASS package. Its contents are:

> Cars93.summary
Min.passengers Max.passengers No.of.cars abbrev
Compact 4 6 16 C
Large 6 6 11 L
Midsize 4 6 22 M
Small 4 5 21 Sm
Sporty 2 4 14 Sp
Van 7 8 9 V

1
## Alternatively, obtain from data frame jobs (DAAG)
library(DAAG) numjobs <- jobs$Prairies
1.4 Data frames and matrices 15

The first three columns are numeric, and the fourth is a factor. Use the function class()
to check this, for example, enter class(Cars93.summary$abbrev). (The classifi-
cation of objects into classes is discussed in Subsection 1.5.2.)
On most systems, use of edit() allows access to a spreadsheet-like display of a data
frame or of a vector, where entries can be edited or new data added. For example:

Cars93.summary <- edit(Cars93.summary)

To close the spreadsheet, click on the File menu and then on Close. On Linux systems,
click on Quit to exit.

Display of the first few, or last few, rows of a data frame


Useful functions are head() and tail(). To display the first three rows of the
Cars93.summary data frame, type:

> head(Cars93.summary, n=3)


Min.passengers Max.passengers No.of.cars abbrev
Compact 4 6 16 C
Large 6 6 11 L
Midsize 4 6 22 M
> # . . .

Similarly, the tail() function displays the last few rows of a data frame. The default
for the second argument (number of rows to display) is 6.
The functions head() and tail() are available also for use with objects other than
data frames.
The square bracket notation offers a more flexible alternative (any subset of rows can
be extracted):

> Cars93.summary[1:3, ]
Min.passengers Max.passengers No.of.cars abbrev
Compact 4 6 16 C
Large 6 6 11 L
Midsize 4 6 22 M

Data frames are a specialized type of list


A list is an arbitrary collection of R objects, brought together into a single data structure.
Most of R’s modeling functions return their output as a list.
Lists can be joined using the function c(); in this and in several other respects they
are “vectors.” Important aspects of the syntax for working with data frames apply also
to lists. Obviously, however, notions of “row” and “column” have no relevance to lists.
See Subsection 14.7.1 for further commentary.
16 A brief introduction to R

1.4.1 The attaching of data frames


In repeated computations with the same data frame, it is tiresome to keep repeating the
name of the data frame. By attaching a data frame, its columns can be referred to by
name, without further need to give the name of the data frame. For example:
> Min.passengers
Error: Object "Min.passengers" not found
> attach(Cars93.summary) # Attach data frame Cars93.summary
> Min.passengers
[1] 4 6 4 4 2 7
> detach(Cars93.summary) # Detach data frame

Detaching data frames that are no longer in use reduces the risk of a clash of variable
names, for example, two different attached data frames that have a column with the name
Min.passengers, or a Min.passengers both in the workspace and in an attached
data frame.
The attaching of a data frame extends the search list, which is the list of “databases”
where R looks for objects. See Subsection 14.1 for more details on this and other uses of
attach().

Column and row names


Use for example rownames(Cars93.summary) to extract the names of rows, here
Compact, Large, Midsize,    . Use for example names(Cars93. summary) or
colnames(Cars93. summary) to extract column names, here Min.passengers
(i.e., the minimum number of passengers for cars in this category), Max.passengers,
No.of.cars, and abbrev.

Subsets of data frames


Data frames are indexed by row and column number. Thus to extract the element in
the 4th row and 2nd column, specify Cars93.summary[4, 2]. Here are additional
examples:
Cars93.summary[1:3, 2:3] # Rows 1-3 and columns 2-3
Cars93.summary[, 2:3] # Columns 2-3 (all rows)
Cars93.summary[, c("No.of.cars","abbrev")] # cols 2-3, by name
Cars93.summary[, -c(2,3)] # omit columns 2 and 3

The subset() function offers an alternative way to extract rows and columns. For
example, the following extracts the first two rows:
subset(Cars93.summary, subset=1:2) # see help(subset) for details

Note that Cars93.summary[1,] is a data frame. To obtain the vector of values in


row 1, specify unlist(Cars93.summary[1, ]).
Avoid Cars93.summary[4], at least until the subtleties of its use are understood.
See Subsection 14.7.1. If used where Cars93.summary[, 4] was intended, the
calculation may fail or give an erroneous result.
1.4 Data frames and matrices 17

Assignment of (new) names to the columns of a data frame


The functions names() (or colnames()) and rownames()) can be used to assign
new names, perhaps shortening them. For example:
names(Cars93.summary)[3] <- "numCars"
names(Cars93.summary) <- c("minPass","maxPass","numCars","code")

1.4.2 Aggregation, stacking and unstacking


The aggregate() function yields a data frame that has the mean or value of another
specified function for each combination of factor levels. There is an example in Subsection
2.2.2. See also Subsection 14.7.5.
For stacking columns of a data frame, that is, placing successive columns one under
the other, the function stack() is available. The following use of stack(), with data
from the data frame jobs, will be required for the use of these data in Subsection 2.1.5:
> library(DAAG)
> head(jobs,3)
BC Alberta Prairies Ontario Quebec Atlantic Date
1 1752 1366 982 5239 3196 947 95.00000
2 1737 1369 981 5233 3205 946 95.08333
3 1765 1380 984 5212 3191 954 95.16667
> # . . .
> Jobs <- stack(jobs, select = 1:6)
> # stack() concatenates selected data frame columns into a
> # single column named "values", & adds a factor named "ind"
> # that has the names of the concatenated columns as levels.
> head(Jobs,3)
values ind
1 1752 BC
2 1737 BC
3 1765 BC
> # . . .

For a further example, see Exercise 19.


The unstack() function reverses the stacking operation. For example,
unstack(Jobs) (or more generally, unstack(Jobs, values ˜ ind))
recovers the original data frame.

1.4.3∗ Data frames and matrices


The numeric values in the data frame fossilfuel might alternatively be stored in a
matrix with the same dimensions, that is, 5 rows × 2 columns. The following enters these
same data as a matrix:
fossilfuelmat <- matrix(c(1800, 1850, 1900, 1950, 2000,
8, 54, 534, 1630, 6611), nrow=5)
colnames(fossilfuel) <- c("year", "carbon")
18 A brief introduction to R

Another possibility is the use of the function cbind() to combine two or more vectors
of the same length and type together into a matrix, thus:
fossilfuelmat <- cbind(year=c(1800, 1850, 1900, 1950, 2000),
carbon=c(8, 54, 534, 1630, 6611))

More generally, any data frame where all columns hold data that is all of the same
type, that is, all numeric or all character or all logical, can alternatively be stored as a
matrix. Storage of numeric data in matrix rather than data frame format can speed up some
mathematical and other manipulations when the number of elements is large, for example,
of the order of several hundreds of thousands. For further details, see Section 14.6.
Note that:
• Matrix elements are stored in column order in one long vector, that is, columns
are stacked one above the other, with the first column first. It is straightforward, as
explained in Section 14.6, to change between a matrix with m rows and n columns,
and a vector of length mn.
• The extraction of submatrices has the same syntax as for data frames. Thus
fossilfuelmat[2:3,] extracts rows 2 and 3 of the matrix fossilfuelmat.
(Be careful not to omit the comma, causing the matrix to be treated as one long vector.)
• The names() function returns NULL when the argument is a matrix. Note however
the functions rownames() and colnames(), which can be used either with data
frames or matrices.

1.5 Functions, operators and loops


Functions are integral to the use of the R language. User-written functions are used in
exactly the same way as built-in functions. Examples will appear from time to time
through the book. An incidental advantage of putting code into functions is that the
workspace is not then cluttered with objects that are local to the function.

1.5.1 Built-in functions


Common useful functions are:

all() # returns TRUE if all values are TRUE


any() # returns TRUE if any values are TRUE
args() # information on the arguments to a function
cat() # prints multiple objects, one after the other
cumprod() # cumulative product
cumsum() # cumulative sum
diff() # form vector of first differences
# N. B. diff(x) has one less element than x
history() # displays previous commands used
is.factor() # returns TRUE if the argument is a factor
is.na() # returns TRUE if the argument is an NA
# NB also is.logical(), is.matrix(), etc.
length() # number of elements in a vector or of a list
1.5 Functions, operators and loops 19

ls() # list names of objects in the workspace


mean() # mean of the elements of a vector
median() # median of the elements of a vector
order() # x[order(x)] sorts x (by default, NAs are last)
print() # prints a single R object
range() # minimum and maximum value elements of vector
sort() # sort elements into order, by default omitting NAs
rev() # reverse the order of vector elements
str() # information on an R object
unique() # form the vector of distinct values
which() # locates ’TRUE’ indices of logical vectors
which.max() # locates (first) maximum of a numeric vector
which.min() # locates (first) minimum of a numeric vector
with() # do computation using columns of specified data frame

Calculations in parallel across all elements of a vector


Subsection 1.1.2 gave an example in which arithmetic was carried out in parallel across
all elements of a vector. Many of R’s functions likewise operate in parallel on all elements
of arrays, matrices and data frames.

The handling of missing values


By default, the functions mean(), sum(), median(), range(), and a number of
other such functions, return NA when applied to vectors in which one or more values is
NA. Note however the parameter setting na.rm=TRUE; that is, remove NAs, then proceed
with the calculation. For example:

> mean(c(1, NA, 3, 0, NA), na.rm=T)


[1] 1.3

When using a function for the first time, consult its help page for information on how it
handles missing values.

Data summary functions – table() and sapply()


Data summary functions that are useful in working with tables of counts are:

table() # Form a table of counts


xtabs() # Form a table of totals

A simple example of the use of table() is:

> library(DAAG) # tinting is from DAAG


> table(Sex=tinting$sex, AgeGroup=tinting$agegp)
AgeGroup
Exploring the Variety of Random
Documents with Different Content
“Dat money ain’t gwine ter las’ when you buy dat kin’ er doin’s.”

“An’ den, suh, he’d set down, an’ atter he got sorter warmed up wid de
dram, he’d kinder roll his eye and ’low, ‘Miss Vallie, she is a fine white ’oman!’
Well, suh, ’tain’t long ’fo’ we had dat nigger man trained—done trained, bless
yo’ soul! One day Miss Vallie had ter go ’cross town, an’ she went by de liberty
stable whar Hamp wuz at, leastways, he seed ’er some’rs; an’ he come home
dat night lookin’ like he wuz feelin’ bad. He ’fuse ter talk. Bimeby, atter he had
his supper, he say, ‘I seed Miss Vallie down-town ter-day. She wuz wid Miss
Irene, an’ dat ’ar frock she had on look mighty shabby.’ I ’low, ‘Well, it de bes’
she got. She ain’t got money like de Chippendales, an’ Miss Irene don’t keer
how folks’ cloze look. She too much quality fer dat.’ Hamp say, ‘Whyn’t you
take some er yo’ money an’ make Miss Vallie git er nice frock?’ I ’low, ‘Whar I
got any money? Hamp he hit his pocket an’ say, ‘You got it right here.’
“An’ sho’ ’nuff, suh, dat nigger man had a roll er money—mos’ twenty
dollars. Some hoss drovers had come ’long an’ Hamp made dat money by
trimmin’ up de ol’ mules dey had an’ makin’ um look young. He’s got de art er
dat, suh, an’ dey paid ’im well. Dar wuz de money, but how wuz I gwine ter
git it in Miss Vallie’s han’? I kin buy vittles an’ she not know whar dey come
fum, but when it come ter buyin’ frocks—well, suh, hit stumped me. Dey
wan’t but one way ter do it, an’ I done it. I make like I wuz mad. I tuck de
money an’ went in de house dar whar Miss Vallie wuz sewin’ an’ mendin’. I
went stompin’ in, I did, an’ when I got in I started my tune.
“I ’low, ‘Ef de Perdues gwine ter go scandalizin’ deyse’f by trottin’ down
town in broad daylight wid all kinder frocks on der back, I’m gwine ’way fum
here; an’ I dun’ner but what I’ll go anyhow. ’Tain’t bekaze dey’s any lack er
money, fer here de money right here.’ Wid dat I slammed it down on de table.
‘Dar! take dat an’ git you a frock dat’ll make you look like sump’n when you
git outside er dis house. An’ whiles you er gittin’, git sump’n for ter put on yo’
head!’”
Trimmin’ Up de Ol’ Mules.

Whether it was by reason of a certain dramatic faculty inherent in her race


that she was able to summon emotions at will, or whether it was mere
unconscious reproduction, I am not prepared to say. But certain it is that, in
voice and gesture, in tone and attitude, and in a certain passionate
earnestness of expression, Aunt Minervy Ann built up the whole scene before
my eyes with such power that I seemed to have been present when it
occurred. I felt as if she had conveyed me bodily into the room to become a
witness of the episode. She went on, still with a frown on her face and a
certain violence of tone and manner:
“I whipped ’roun’ de room a time er two, pickin’ up de cheers an’ slammin’
um down ag’in, an’ knockin’ things ’roun’ like I wuz mad. Miss Vallie put her
sewin’ down an’ lay her han’ on de money. She ’low, ‘What’s dis, Aunt Minervy
Ann?’ I say, ‘Hit’s money, dat what ’tis—nothin’ but nasty, stinkin’ money! I
wish dey wan’t none in de worl’ less’n I had a bairlful.’ She sorter fumble at de
money wid ’er fingers. You dunno, suh, how white an’ purty an’ weak her han’
look ter me dat night. She ’low, ‘Aunt Minervy Ann, I can’t take dis.’ I blaze’
out at ’er, ‘You don’t haf’ter take it; you done got it! An’ ef you don’t keep it,
I’ll rake up eve’y rag an’ scrap I got an’ leave dis place. Now, you des’ try
me!’”
Again Aunt Minervy Ann summoned to her aid the passion of a moment
that had passed away, and again I had the queer experience of seeming to
witness the whole scene. She continued:
“Wid dat, I whipt out er de room an’ out er de house an’ went an’ sot down
out dar in my house whar Hamp was at. Hamp, he ’low, ‘What she say?’ I say,
‘She ain’t had time ter say nothin’—I come ’way fum dar.’ He ’low, ‘You ain’t
brung dat money back, is you?’ I say: ‘Does you think I’m a start naked fool?’
He ’low: ’Kaze ef you is, I’ll put it right spang in de fire here.’
“Well, suh, I sot dar some little time, but eve’ything wuz so still in de house,
bein’s Marse Tumlin done gone down town, dat I crope back an’ crope in fer
ter see what Miss Vallie doin’. Well, suh, she wuz cryin’—settin’ dar cryin’. I
’low, ‘Honey, is I say anything fer ter hurt yo’ feelin’s?’ She blubber’ out, ‘You
know you ain’t!’ an’ den she cry good-fashion.
“Des ’bout dat time, who should come in but Marse Tumlin. He look at Miss
Vallie an’ den he look at me. He say, ‘Valentine, what de matter?’ I say, ‘It’s
me! I’m de one! I made ’er cry. I done sump’n ter hurt ’er feelin’s.’ She ’low,
‘’Tain’t so, an’ you know it. I’m des cryin’ bekaze you too good ter me.’
“She wuz cryin’—settin’ dar cryin’.”

“Well, suh, I had ter git out er dar fer ter keep fum chokin’. Marse Tumlin
foller me out, an’ right here on de porch, he ’low, ‘Minervy Ann, nex’ time
don’t be so dam good to ’er.’ I wuz doin’ some snifflin’ myse’f ’bout dat time,
an’ I ain’t keerin’ what I say, so I stop an’ flung back at ’im, ‘I’ll be des ez dam
good ter ’er ez I please—I’m free!’ Well, suh, stidder hittin’ me, Marse Tumlin
bust out laughin’, an’ long atter dat he’d laugh eve’y time he look at me, des
like sump’n wuz ticklin’ ’im mighty nigh ter death.
“I ’speck he must er tol’ ’bout dat cussin’ part, bekaze folks ’roun’ here done
got de idee dat I’m a sassy an’ bad-tempered ’oman. Ef I had ter work fer my
livin’, suh, I boun’ you I’d be a long time findin’ a place. Atter dat, Hamp, he
got in de Legislatur’, an’ it sho wuz a money-makin’ place. Den we had
eve’ything we wanted, an’ mo’ too, but bimeby de Legislatur’ gun out, an’ den
dar we wuz, flat ez flounders, an’ de white folks don’t want ter hire Hamp des
kaze he been ter de Legislatur’; but he got back in de liberty stable atter so
long a time. Yit ’twan’t what you may call livin’.
“All dat time, I hear Marse Tumlin talkin’ ter Miss Vallie ’bout what he call
his wil’ lan’. He say he got two thousan’ acres down dar in de wire-grass, an’
ef he kin sell it, he be mighty glad ter do so. Well, suh, one day, long to’rds
night, a two-hoss waggin driv’ in at de side gate an’ come in de back-yard. Ol’
Ben Sadler wuz drivin’, an’ he ’low, ‘Heyo, Minervy Ann, whar you want deze
goods drapped at?’ I say, ‘Hello yo’se’f, ef you wanter hello. What you got dar,
an’ who do it b’long ter?’ He ’low, ‘Hit’s goods fer Major Tumlin Perdue, an’
whar does you want um drapped at?’ Well, suh, I ain’t know what ter say, but
I run’d an’ ax’d Miss Vallie, an’ she say put um out anywheres ’roun’ dar, kaze
she dunner nothin’ ’bout um. So ol’ Ben Sadler, he put um out, an’ when I
come ter look at um, dey wuz a bairl er sump’n, an’ a kaig er sump’n, an’ a
box er sump’n. De bairl shuck like it mought be ’lasses, an’ de kaig shuck like
it mought be dram, an’ de box hefted like it mought be terbarker. An’, sho’
’nuff, dat what dey wuz—a bairl er sorghum syr’p, an’ a kaig er peach brandy,
an’ a box er plug terbarker.
“Here come a nigger boy leadin’ a bob-tail hoss.”

“I say right den, an’ Miss Vallie’ll tell you de same, dat Marse Tumlin done
gone an’ swap off all his wil’ lan’, but Miss Vallie, she say no; he won’t never
think er sech a thing; but, bless yo’ soul, suh, she wan’t nothin’ but a school-
gal, you may say, an’ she ain’t know no mo’ ’bout men folks dan what a
weasel do. An den, right ’pon top er dat, here come a nigger boy leadin’ a
bob-tail hoss. When I see dat, I dez good ez know’d dat de wil’ lan’ done
been swap off, bekaze Marse Tumlin ain’t got nothin’ fer ter buy all dem
things wid, an’ I tell you right now, suh, I wuz rank mad, kaze what we want
wid any ol’ bob-tail hoss? De sorghum mought do, an’ de dram kin be put up
wid, an’ de terbarker got some comfort in it, but what de name er goodness
we gwine ter do wid dat ol’ hoss, when we ain’t got hardly ’nuff vittles fer ter
feed ourse’f wid? Dat what I ax Miss Vallie, an’ she say right pine-blank she
dunno.
“Well, suh, it’s de Lord’s trufe, I wuz dat mad I dunner what I say, an’ I
want keerin’ nudder, bekaze I know how we had ter pinch an’ squeeze fer ter
git ’long in dis house. But I went ’bout gittin’ supper, an’ bimeby, Hamp, he
come, an’ I tol’ ’im ’bout de ol’ bob-tail hoss, an’ he went out an’ look at ’im.
Atter while, here he come back laughin’. I say, ‘You well ter laugh at dat ol’
hoss.’ He ’low, ‘I ain’t laughin’ at de hoss. I’m laughin’ at you. Gal, dat de
finest hoss what ever put foot on de groun’ in dis town. Dat’s Marse Paul
Conant’s trottin’ hoss. He’ll fetch fi’ hunder’d dollars any day. What he doin’
here?’ I up an’ tol’ ’im all I know’d, an’ he shuck his head; he ’low, ‘Gal, you
lay low. Dey’s sump’n n’er behime all dat.’
“What Hamp say sorter make me put on my studyin’-cap; but when you
come ter look at it, suh, dey wan’t nothin’ ’tall fer me ter study ’bout. All I had
ter do wuz ter try ter fin’ out what wuz behime it, an’ let it go at dat. When
Marse Tumlin come home ter supper, I know’d sump’n wuz de matter wid ’im.
I know’d it by his looks, suh. It’s sorter wid folks like ’tis wid chillun. Ef you
keer sump’n ’bout um you’ll watch der motions, and ef you watch der motions
dey don’t hatter tell you when sump’n de matter. He come in so easy, suh, dat
Miss Vallie ain’t hear ’im, but I hear de do’ screak, an’ I know’d ’twuz him. We
wuz talkin’ an’ gwine on at a mighty rate, an’ I know’d he done stop ter lisn’.
“Miss Vallie, she ’low she ’speck somebody made ’im a present er dem ar
things. I say, ‘Uh-uh, honey! don’t you fool yo’se’f. Nobody ain’t gwine ter do
dat. Our folks ain’t no mo’ like dey useter wuz, dan crabapples is like plums.
Dey done come ter dat pass dat whatsomever dey gits der han’s on dey ’fuse
ter turn it loose. All un um, ’cep’ Marse Tumlin Perdue. Dey ain’t no tellin’
what he gun fer all dat trash. Trash! Hit’s wuss’n trash! I wish you’d go out
dar an’ look at dat ol’ bob-tail hoss. Why dat ol’ hoss wuz stove up long ’fo’ de
war. By rights he ought ter be in de bone-yard dis ve’y minnit. He won’t be
here two whole days ’fo’ you’ll see de buzzards lined up out dar on de back
fence waitin’, an’ dey won’t hatter wait long nudder. Ef dey sen’ any corn here
fer ter feed dat bag er bones wid, I’ll parch it an’ eat it myse’f ’fo’ he shill have
it. Ef anybody ’speck I’m gwine ter ’ten’ ter dat ol’ frame, deyer ’speckin’ wid
de wrong specks. I tell you dat right now.’
“All dis time Marse Tumlin wuz stan’in’ out in de hall lis’nin’. Miss Vallie talk
mighty sweet ’bout it. She say, ‘Ef dey ain’t nobody else ter ’ten’ de hoss,
reckin I kin do it.’ I ’low, ‘My life er me, honey! de nex’ news you know you’ll
be hirin’ out ter de liberty stable.’
“Well, suh, my talk ’gun ter git so hot dat Marse Tumlin des had ter make a
fuss. He fumbled wid de do’ knob, an’ den come walkin’ down de hall, an’ by
dat time I wuz in de dinin’-room. I walk mighty light, bekaze ef he say
anything I want ter hear it. You can’t call it eave-drappin’, suh; hit look ter me
dat ’twuz ez much my business ez ’twuz dern, an’ I ain’t never got dat idee
out’n my head down ter dis day.
“But Marse Tumlin ain’t say nothin’, ’cep’ fer ter ax Miss Vallie ef she feelin’
well, an’ how eve’ything wuz, but de minnit I hear ’im open his mouf I know’d
he had trouble on his min’. I can’t tell you how I know’d it, suh, but dar ’twuz.
Look like he tried to hide it, bekaze he tol’ a whole lot of funny tales ’bout
folks, an’ ’twan’t long befo’ he had Miss Vallie laughin’ fit ter kill. But he ain’t
fool me, suh.
“Bimeby, Miss Vallie, she come in de dinin’-room fer ter look atter settin’ de
table, bekaze fum a little gal she allers like ter have de dishes fix des so. She
wuz sorter hummin’ a chune, like she ain’t want’ ter talk, but I ain’t let dat
stan’ in my way.
“I ’low, ‘I wish eve’ybody wuz like dat Mr. Paul Conant. I bet you right now
he been down town dar all day makin’ money han’ over fist, des ez fast ez he
can rake it in. I know it, kaze I does his washin’ and cleans up his room fer
’im.’
“Miss Vallie say, ‘Well, what uv it? Money don’t make ’im no better’n
anybody else.’ I ’low, ‘Hit don’t make ’im no wuss; an’ den, ’sides dat, he ain’t
gwine ter let nobody swindle ’im.’
“By dat time, I hatter go out an’ fetch supper in, an’ ’tain’t take me no time,
bekaze I wuz des’ achin’ fer ter hear how Marse Tumlin come by dem ar
contraptions an’ contrivances. An’ I stayed in dar ter wait on de table, which it
ain’t need no waitin’ on.
“Atter while, I ’low, ‘Marse Tumlin, I like ter forgot ter tell you—yo’ things
done come.’ He say, ‘What things, Minervy Ann?’ I ’low, ‘Dem ar contraptions,
an’ dat ar bob-tail hoss. He look mighty lean an’ hongry, de hoss do, but
Hamp he say dat’s bekaze he’s a high-bred hoss. He say dem ar high-bred
hosses won’t take on no fat, no matter how much you feed um.’
“Marse Tumlin sorter drum on de table. Atter while he ’low, ‘Dey done
come, is dey, Minervy Ann?’ I say, ‘Yasser, dey er here right now. Hamp puts it
down dat dat ar hoss one er de gayliest creatur’s what ever make a track in
dis town.’
“Well, suh, ’tain’t no use ter tell you what else wuz said, kaze ’twan’t much.
I seed dat Marse Tumlin want gwine ter talk ’bout it, on account er bein’
’fear’d he’d hurt Miss Vallie’s feelin’s ef he tol’ ’er dat he done swap off all dat
wil’ lan’ fer dem ar things an’ dat ar bob-tail hoss. Dat what he done. Yasser! I
hear ’im sesso atterwards. He swap it off ter Marse Paul Conant.
“I thank my Lord it come out all right, but it come mighty nigh bein’ de
ruination er de fambly.”
“How was that?” I inquired.
“Dat what I’m gwine ter tell you, suh. Right atter supper dat night, Marse
Tumlin say he got ter go down town fer ter see a man on some business, an’
he ax me ef I won’t stay in de house dar wid Miss Vallie. ’Twa’n’t no trouble
ter me, bekaze I’d ’a’ been on de place anyhow, an’ so when I got de kitchen
cleaned up an’ de things put away, I went back in de house whar Miss Vallie
wuz at. Marse Tumlin wuz done gone.
“Miss Vallie, she sot at de table doin’ some kind er rufflin’, an’ I sot back
ag’in de wall in one er dem ar high-back cheers. What we said I’ll never tell
you, suh, bekaze I’m one er deze kinder folks what ain’t no sooner set down
an’ git still dan dey goes ter noddin’. Dat’s me. Set me down in a cheer, high-
back er low-back, an’ I’m done gone! I kin set here on de step an’ keep des
ez wide-’wake ez a skeer’d rabbit, but set me down in a cheer—well, suh, I’d
like ter see anybody keep me ’wake when dat’s de case.
“Dar I sot in dat ar high-back cheer, Miss Vallie rufflin’ an’ flutin’ sump’n, an’
tryin’ ter make me talk, an’ my head rollin’ ’roun’ like my neck done broke.
Bimeby, blam! blam! come on de do’. We got one er dem ar jinglin’ bells now,
suh, but in dem times we had a knocker, an’ it soun’ like de roof fallin’ in. I
like ter jumped out’n my skin. Miss Vallie drapped her conflutements an’ ’low,
‘What in de worl’! Aunt Minervy Ann, go ter de do’.’
“He been axin’ me lots ’bout Miss Vallie.”

“Well, suh, I went, but I ain’t had no heart in it, bekaze I ain’t know who it
mought be, an’ whar dey come fum, an’ what dey want. But I went. ’Twuz me
er Miss Vallie, an’ I want gwine ter let dat chile go, not dat time er night,
dough ’twa’n’t so mighty late.
“I open de do’ on de crack, I did, an’ ’low, ‘Who dat?’ Somebody make
answer, ‘Is de Major in, Aunt Minervy Ann?’ an’ I know’d right den it wuz
Marse Paul Conant. An’ it come over me dat he had sump’n ter do wid sendin’
er dem contraptions, mo’ ’speshually dat ar bob-tail hoss. An’ den, too, suh,
lots quicker’n I kin tell it, hit come over me dat he been axin’ me lots ’bout
Miss Vallie. All come ’cross my min’, suh, whiles I pullin’ de do’ open.
“I ’low, I did, ‘No, suh; Marse Tumlin gone down town fer ter look atter
some business, but he sho ter come back terreckly. Won’t you come in, suh,
an’ wait fer ’im?’ He sorter flung his head back an’ laugh, saft like, an’ say, ‘I
don’t keer ef I do, Aunt Minervy Ann.’
“I ’low, ‘Walk right in de parlor, suh, an’ I’ll make a light mos’ ’fo’ you kin
turn ’roun’.’ He come in, he did, an’ I lit de lamp, an’ time I lit ’er she ’gun ter
smoke. Well, suh, he tuck dat lamp, run de wick up an’ down a time er two,
an’ dar she wuz, bright ez day.
“When I went back in de room whar Miss Vallie wuz at, she wuz stan’in’ dar
lookin’ skeer’d. She say, ‘Who dat?’ I ’low, ‘Hit’s Marse Paul Conant, dat’s who
’tis.’ She say, ‘What he want?’ I ’low, ‘Nothin’ much; he does come a-courtin’.
Better jump up an’ not keep ’im waitin’.’
“Well, suh, you could ’a’ knock’d ’er down wid a fedder. She stood dar wid
’er han’ on ’er th’oat takin’ short breffs, des like a little bird does when it flies
in de winder an’ dunner how ter fly out ag’in.
“Bimeby, she say, ‘Aunt Minervy Ann, you ought ter be ’shame or yo’se’f! I
know dat man when I see ’im, an’ dat’s all.’ I ’low, ‘Honey, you know mighty
well he ain’t come callin’. But he wanter see Marse Tumlin, an’ dey ain’t
nothin’ fer ter hender you fum gwine in dar an’ makin’ ’im feel at home while’s
he waitin’.’ She sorter study awhile, an’ den she blush up. She say, ‘I dunno
whedder I ought ter.’
“Well, suh, dat settled it. I know’d by de way she look an’ talk dat she don’t
need no mo’ ’swadin’. I say, ‘All right, honey, do ez you please; but it’s yo’
house; you er de mist’iss; an’ it’ll look mighty funny ef dat young man got ter
set in dar by hisse’f an’ look at de wall whiles he waitin’ fer Marse Tumlin. I
dunner what he’ll say, kaze I ain’t never hear ’im talk ’bout nobody; but I
know mighty well he’ll do a heap er thinkin’.’
“Des like I tell you, suh—she skipped ’roun’ dar, an’ flung on ’er Sunday
frock, shuck out ’er curls, an’ sorter fumble’ ’roun’ wid some ribbons, an’ dar
she wuz, lookin’ des ez fine ez a fiddle, ef not finer. Den she swep’ inter de
parlor, an’, you mayn’t b’lieve it, suh, but she mighty nigh tuck de man’s breff
’way. Mon, she wuz purty, an’ she ain’t do no mo’ like deze eve’y-day gals dan
nothin’. When she start ’way fum me, she wuz a gal. By de time she walk up
de hall an’ sweep in dat parlor, she wuz a grown ’oman. De blush what she
had on at fust stayed wid ’er an’ look like ’twuz er natchual color, an’ her eyes
shine, suh, like she had fire in um. I peeped at ’er, suh, fum behime de
curtains in de settin’-room, an’ I know what I’m talkin’ ’bout. It’s de Lord’s
trufe, suh, ef de men folks could tote derse’f like de wimmen, an’ do one way
whiles dey feelin’ annuder way, dey wouldn’t be no livin’ in de worl’. You take
a school gal, suh, an’ she kin fool de smartest man what ever trod shoe
leather. He may talk wid ’er all day an’ half de night, an’ he never is ter fin’
out what she thinkin’ ’bout. Sometimes de gals fools deyse’f, suh, but dat’s
mighty seldom.
“I dunner what all dey say, kaze I ain’t been in dar so mighty long ’fo’ I wuz
noddin’, but I did hear Marse Paul say he des drapt in fer ’pollygize ’bout a
little joke he played on Marse Tumlin. Miss Vallie ax what wuz de joke, an’ he
’low dat Marse Tumlin wuz banterin’ folks fer ter buy his wil’ lan’; an’ Marse
Paul ax ’im what he take fer it, an’ Marse Tumlin ’low he’ll take anything what
he can chaw, sop, er drink. Dem wuz de words—chaw, sop, er drink. Wid dat,
Marse Paul say he’d gi’ ’im a box er terbarker, a bairl er syr’p, an’ a kaig er
peach brandy an’ th’ow in his buggy-hoss fer good medjer. Marse Tumlin say
‘done’ an’ dey shuck han’s on it. Dat what Marse Paul tol’ Miss Vallie, an he
’low he des done it fer fun, kaze he done looked inter dat wil’ lan’, an’ he ’low
she’s wuff a pile er money.
“Marse Tumlin ’low he’ll take anything what he can chaw, sop, er drink.”

“Well, suh, ’bout dat time, I ’gun ter nod, an’ de fus news I know’d Miss
Vallie wuz whackin’ ’way on de peanner, an’ it look like ter me she wuz des
tryin’ ’erse’f. By dat time, dey wuz gettin’ right chummy, an’ so I des curl up
on de flo’, an’ dream dat de peanner chunes wuz comin’ out’n a bairl des like
’lasses.
“When I waked up, Marse Paul Conant done gone, an’ Marse Tumlin ain’t
come, an’ Miss Vallie wuz settin’ dar in de parlor lookin’ up at de ceilin’ like
she got some mighty long thoughts. Her color wuz still up. I look at ’er an’
laugh, an’ she made a mouf at me, an’ I say ter myse’f, ‘Hey! sump’n de
matter here, sho,’ but I say out loud, ‘Marse Paul Conant sho gwine ter ax me
ef you ain’t had a dram.’ She laugh an’ say, ‘What answer you gwine ter
make?’ I ’low, ‘I’ll bow an’ say, “No, suh; I’m de one dat drinks all de dram fer
de fambly.”’
“Well, suh, dat chile sot in ter laughin’, an’ she laugh an’ laugh twel she
went inter highsterics. She wuz keyed up too high, ez you mought say, an’
dat’s de way she come down ag’in. Bimeby, Marse Tumlin come, an’ Miss
Vallie, she tol’ ’m ’bout how Marse Paul done been dar; an’ he sot dar, he did,
an’ hummed an’ haw’d, an’ done so funny dat, bimeby, I ’low, ‘Well, folks, I’ll
hatter tell you good-night,’ an’ wid dat I went out.”
At this point Aunt Minervy leaned forward, clasped her hands over her
knees, and shook her head. When she took up the thread of her narrative, if it
can be called such, the tone of her voice was more subdued, almost
confidential, in fact.
“Nex’ mornin’ wuz my wash-day, suh, an’ ’bout ten o’clock, when I got
ready, dey want no bluin’ in de house an’ mighty little soap. I hunted high an’
I hunted low, but no bluin’ kin I fin’. An’ dat make me mad, bekaze ef I hatter
go down town atter de bluin’, my wash-day’ll be broke inter. But ’tain’t no
good fer ter git mad, bekaze I wuz bleeze ter go atter de bluin’. So I tighten
up my head-hankcher, an’ flung a cape on my shoulders an’ put out.
“I ’speck you know how ’tis, suh. You can’t go down town but what you’ll
see nigger wimmen stan’in’ out in de front yards lookin’ over de palin’s. Dey
all know’d me an’ I know’d dem, an’ de las’ blessed one un um hatter hail me
ez I go by, an’ I hatter stop an’ pass de time er day, kaze ef I’d ’a’ whipt on
by, dey’d ’a’ said I wuz gwine back bofe on my church an’ on my color. I
dunner how long dey kep’ me, but time I got ter Proctor’s sto’, I know’d I’d
been on de way too long.
“I hatter stop an’ pass de time er day.”

“I notice a crowd er men out dar, some settin’ an’ some stan’in’, but I run’d
in, I did, an’ de young man what do de clerkin’, he foller me in an’ ax what I
want. I say I want a dime’s wuff er bluin’, an’ fer ter please, suh, wrop it up
des ez quick ez he kin. I tuck notice dat while he wuz gittin’ it out’n de box,
he sorter stop like he lis’nin’ an’ den ag’in, whiles he had it in de scoop des
ready fer ter drap it in de scales, he helt his han’ an’ wait. Den I know’d he
wuz lis’nin’.
“Dat makes me lis’n, an’ den I hear Marse Tumlin talkin’, an’ time I hear ’im
I know’d he wuz errytated. Twa’n’t bekaze he wuz talkin’ loud, suh, but ’twuz
bekaze he wuz talkin’ level. When he talk loud, he feelin’ good. When he talk
low, an’ one word soun’ same ez anudder, den somebody better git out’n his
way. I lef’ de counter an’ step ter de do’ fer ter see what de matter wuz
betwix’ um.
“Well, suh, dar wuz Marse Tumlin stan’in’ dar close ter Tom Perryman.
Marse Tumlin ’low, ‘Maybe de law done ’pinted you my gyardeen. How you
know I been swindled?’ Tom Perryman say, ‘Bekaze I hear you say he bought
yo’ wil’ lan’ fer a little er nothin’. He’ll swindle you ef you trade wid ’im, an’ you
done trade wid ’im.’ Marse Tumlin, ’low, ‘Is Paul Conant ever swindle you?’
Tom Perryman say, ‘No, he ain’t, an’ ef he wuz ter I’d give ’im a kickin’.’ Marse
Tumlin ’low, ‘Well, you know you is a swindler, an’ nobody ain’t kick you. How
come dat?’ Tom Perryman say, ‘Ef you say I’m a swindler, you’re a liar.’
“Well, suh, de man ain’t no sooner say dat dan bang! went Marse Tumlin’s
pistol, an’ des ez it banged Marse Paul Conant run ’twix’ um, an’ de ball went
right spang th’oo de collar-bone an’ sorter sideways th’oo de p’int er de
shoulder-blade. Marse Tumlin drapt his pistol an’ cotch ’im ez he fell an’ knelt
down dar by ’im, an’ all de time dat ar Tom Perryman wuz stan’in’ right over
um wid his pistol in his han’. I squall out, I did, ‘Whyn’t some er you white
men take dat man pistol ’way fum ’im? Don’t you see what he fixin’ ter do?’
“I run’d at ’im, an’ he sorter flung back wid his arm, an’ when he done dat
somebody grab ’im fum behime. All dat time Marse Tumlin wuz axin’ Marse
Paul Conant ef he hurt much. I hear ’im say, ‘I wouldn’t ’a’ done it fer de worl’,
Conant—not fer de worl’.’ Den de doctor, he come up, an’ Marse Tumlin, he
pester de man twel he hear ’im say, ‘Don’t worry, Major; dis boy’ll live ter be a
older man dan you ever will.’ Den Marse Tumlin got his pistol an’ hunt up an’
down fer dat ar Tom Perryman, but he done gone. I seed ’im when he got on
his hoss.
“Hunt up an’ down fer dat ar Tom Perryman.”

“I say to Marse Tumlin, ‘Ain’t you des ez well ter fetch Marse Paul Conant
home whar we all kin take keer uv ’im?’ He ’low, ‘Dat’s a fack. Go home an’
tell yo’ Miss Vallie fer ter have de big room fixed up time we git dar wid ’im.’ I
say, ‘Humph! I’ll fix it myse’f; I know’d I ain’t gwine ter let Miss Vallie do it.’
“Well, suh, ’tain’t no use fer ter tell yer de rest. Dar’s dat ar baby in dar, an’
what mo’ sign does you want ter show you dat it all turned out des like one er
dem ol’-time tales?”
VIII
THE CASE OF MARY ELLEN

It came to pass in due time that Atlanta, following the example of


Halcyondale, organized a fair. It was called the Piedmont Exposition,
and, as might be supposed, Aunt Minervy Ann was among those
attracted to the city by the event. She came to see whether the fair
was a bigger one than that held at Halcyondale. Naturally enough
she made my house her headquarters, and her coming was
fortunately timed, for the cook, taking advantage of the heavily
increased demand for kitchen servants, caused by the pressure of
strangers in the city, had informed us that if we wanted her services
we could either double her wages or dispense with her entirely. It
was a very cunningly prepared plan, for there was company in the
house, friends from middle Georgia, who had come to spend a week
while the exposition was going on, and there would have been no
alternative if Aunt Minervy Ann, her Sunday hat sitting high on her
head, had not walked in the door.
“I hope all er you-all is well,” she remarked. “Ef you ain’t been
frettin’ an’ naggin’ one an’er den my nose done been knocked out er
j’int, kaze I know sump’n ’bleeze ter be de matter.”
The truth is, the lady of the house was blazing mad with the cook,
and I was somewhat put out myself, for the ultimatum of the servant
meant robbery. Aunt Minervy Ann was soon in possession of the
facts. At first she was properly indignant, but in a moment she
began to laugh.
“Des come out on de back porch wid me, please’m. All I ax you is
ter keep yo’ face straight, and don’t say a word less’n I ax you
sump’n’.” She flung her hat and satchel in a corner and sallied out. “I
don’t blame cooks fer wantin’ ter quit when dey’s so much gwine on
up town,” she remarked, in a loud voice, as she went out at the back
door. “Dey stan’ by a stove hot wedder er col’, an’ dey ain’t got time
ter go ter buryin’s. But me! I don’t min’ de work; I’m ol’ an’ tough.
Why, de well ain’t so mighty fur fum de steps, an’ dar’s de wood-
cellar right dar. How much you pay yo’ cooks, ma’am?”
“What wages have you been getting?” asked the lady of the
house.
“Wellum, down dar whar I come fum dey been payin’ me four
dollars a mont’—dat de reason I come up here. Ef you gi’ me six I’ll
stay an’ you won’t begrudge me de money. Tu’n me loose in de
kitchen an’ I’m at home, ma’am—plum’ at home.”
The lady seemed to be hesitating, and the silence in the kitchen
was oppressive.
“I’ll decide to-day,” she remarked. “Our cook is a good one, but
she has been thinking of resting awhile. If she goes, you shall have
the place.”
“Den she ain’t gone?” cried Aunt Minervy Ann. “Well, I don’t want
de place less’n she goes. I ain’t gwine ter run my color out’n no job
ef I kin he’p it. We got ’nuff ter contend wid des dry so.” Then she
turned and looked in the kitchen. “Ain’t dat Julie Myrick?” she asked.
“How you know me?” cried the cook. “I b’lieve in my soul dat’s
Miss ’Nervy Ann Perdue!”
With that Aunt Minervy Ann went into the kitchen, and the two old
acquaintances exchanged reminiscences for a quarter of an hour.
After awhile she came back in the sitting-room, stared at us with a
half-indignant, half-quizzical expression on her face, and then
suddenly collapsed, falling on the floor near a couch, and laughing
as only an old-time negro can laugh. Then she sat bolt upright, and
indignation, feigned or real, swept the smiles from her countenance,
as if they had been suddenly wiped out with a sponge.
“You know what you got in dat kitchen dar? You ain’t got nothin’
in de worl’ in dar but a Injun merlatter; dat zackly what you got. I
know’d her daddy and I know’d her mammy. Ol’ one-legged Billy
Myrick wuz her daddy, an’ he wuz one part white an’ one part nigger,
an’ one part Injun. Don’t tell me ’bout dem kind er tribes. Dey ain’t
no good in um. Hamp’ll tell you dat hisse’f, an’ he b’longed ter de
Myrick ’state. Merlatter is bad ’nuff by itse’f, but when you put Injun
wid it—well, you may hunt high an’ you may hunt low, but you can’t
git no wuss mixtry dan dat. I tell you right now,” Aunt Minervy Ann
went on, “I never did see but one merlatter dat wuz wuff a pinch er
snuff, an’ she wuz so nigh white dat de ol’ boy hisse’f couldn’t ’a’ tol’
de difffunce. Seem like you must ’a’ knowed Mary Ellen Tatum, suh?”
she suggested, appealing to my memory.
I had heard the name somehow and somewhere, but it was as
vague in my recollection as a dream.
“Maybe you didn’t know ’er, suh, but she was born an’ bred down
whar I cum fum. Dat’s so! She wuz done gone fum dar when you
come. Wuz ol’ Fed Tatum dead? Yasser! ol’ Fed died de year dey quit
der battlin’, an’ ’twuz de year atter dat when you come; an’ you sho
did look puny, suh, ter what you does now. Well, ol’ Fed Tatum, he
wuz one er deze yer quare creeturs. He made money han’ over fist,
an’ he had a sight er niggers. He had a place sorter close ter town,
but he didn’t stay on it; an’ he had a house not fur fum Marse
Bolivar Blasengame, but he’d des go out ter his place endurin’ er de
day, an’ den he’d come back, git his vittles, an’ walk ter de tavern
an’ dar he’d take a cheer an’ go off by hisse’f, an’ set wid his chin in
his coat collar, an’ look at his foots an’ make his thum’s turn
somersets over one an’er. Ef you wanted ter talk wid ol’ Fed Tatum,
you’d hafter go whar he wuz settin’ at an’ do all de talkin’ yo’se’f.
He’d des set back dar an’ grunt an’ maybe not know who you wuz.
But when he come huntin’ you up, you better watch out. Dey say
dey ain’t nobody ever is make a trade wid ol’ Fed but what dey come
out at de little een’ er de horn.
“Well, ol’ Fed had a nigger ’oman keepin’ house fer ’im, an’ doin’
de cookin’ and washin’. I say ‘nigger,’ suh, but she wuz mighty nigh
white. She wuz Mary Ellen’s mammy, an’ Mary Ellen wuz des white
ez anybody, I don’t keer whar dey cum fum, an’ she wuz purty fum
de word go. Dey wa’n’t never no time, suh, atter Mary Ellen wuz
born dat she wa’n’t de purtiest gal in dat town. I des natchully
’spises merlatters, but dey wuz sump’n ’bout Mary Ellen dat allers
made a lump come in my goozle. I tuck ter dat chile, suh, de minnit
I laid my eyes on ’er. She made me think ’bout folks I done forgot ef
I ever know’d um, an’ des de sight un ’er made me think ’bout dem
ol’ time chunes what mighty nigh break yo’ heart when you hear um
played right. Dat wuz Mary Ellen up an’ down.
“Well, suh, when Mary Ellen got so she could trot ’roun’, old Fed
Tatum sorter woke up. He stayed at home mo’, and when de sun
wuz shinin’ you might see ’im any time setting in his peazzer wid
Mary Ellen playin’ roun’, er walkin’ out in de back yard wid Mary Ellen
trottin’ at his heels. I’m telling you de start-naked trufe—by de time
dat chile wuz six-year ol’ she could read; yasser! read out’n a book,
an’ read good. I seed her do it wid my own eyes, an’ heer’d ’er wid
my own years. ’Tain’t none er dish yer readin’ an’ stoppin’ like you
hear de school chillun gwine on; no, suh! ’Twuz de natchual readin’
right ’long. An’ by de time she wuz eight, dey wa’n’t no words in no
book in dat town but what she could take an’ chaw um same as
lawyers in de cote-house. Mo’ dan dat, suh, she could take a pencil,
an’ draw yo’ likeness right ’fo’ yo’ face.
“’Long ’bout dat time she struck up wid little Sally Blasengame, an’
when dem two got tergedder dar wuz de pick er de town ez fer ez
de chillun went. I don’t say it, suh, bekaze Marse Bolivar was Marse
Tumlin’s br’er-in-law—dey married sisters—but his little gal Sally wuz
ez fine ez split silk. Mary Ellen had black hair an’ big black eyes, an’
Sally had yaller hair an’ big blue eyes. Atter dey come ter know one
an’er dey wa’n’t a day but what dem two chillun wuz playin’
tergedder. How many an’ many is de times I seed um gwine ’long
wid der arms ’roun’ one an’er!
“Well, one day atter dey been playin’ tergedder a right smart whet
Marse Bolivar ’gun ter make inquirements ’bout Mary Ellen, an’ when
he foun’ out who an’ what she wuz, he went out whar dey at an’ tol’
her she better go home. I wuz right dar in de back yard when he
said de word. Mary Ellen stood an’ looked at ’im, an’ den she picked
up her bonnet an’ marched out’n de yard holdin’ her head up; she
wuz twelve year ol’ by den.
“Sally seed Mary Ellen go out, an’ she turn ’roun’ on her daddy,
her face ez white ez a sheet. Den her whole frame ’gun ter shake.
She ’low, ‘I been lovin’ you all dis time, an’ I didn’t know you could
be so mean an’ low-life.’ She flung at ’im de fust words dat pop in
her min’.
“Marse Bolivar say, ‘Why, honey! Why, precious!’ an’ start ter put
his arm ’roun’ ’er. She flung fum ’im, she did, an’ cry out, ‘Don’t you
never say dem words ter me no mo’ ez long ez you live, an’ don’t
you never tetch me no mo’.’ Den she seed me, an’ she come runnin’
des like she wuz skeer’d. She holler, ‘Take me ’way! take me ’way!
Don’t let ’im tetch me!’ Talk ’bout temper—talk ’bout venom! All dem
Blasengames had it, an’ when you hurt de feelin’s er dat kind er
folks dey are hurted sho ’nuff. Marse Bolivar couldn’t ’a’ looked no
wuss ef somebody had ’a’ spit in his face while his han’s tied. You
talk ’bout people lovin’ der chillun, but you dunner nothin’ ’tall ’bout
it twel you see Marse Bolivar lovin’ Sally. Why, de very groun’ she
walkt on wuz diffunt ter him fum any udder groun’. He wuz ready ter
die fer ’er forty times a day, an’ yit here she wuz wid her feelin’s hurt
so bad dat she won’t let ’im put his han’s on ’er. An’ he ain’t try; he
had sense ’nuff fer dat. He des walk ’roun’ and kick up de gravel wid
de heel er his boots. But Sally, she had ’er face hid in my frock, an’
she ain’t so much ez look at ’im. Bimeby he went in de house, but
he ain’t stay dar long. He come out an’ look at Sally, an’ try ter make
’er talk, but she erfuse ter say a word, an’ atter while he went on
up-town.
“Ef dey ever wuz hard-headed folks, suh, dat wuz de tribe. He
went up-town, but he ain’t stay long, an’ when he come back he
foun’ Sally in de house cryin’ an’ gwine on. She won’t tell what de
matter, an’ she won’t let nobody do nothin’ fer ’er. Now, ef she’d ’a’
been mine, suh, I’d ’a’ frailed ’er out den an’ dar, an’ I’d ’a’ kep’ on
frailin’ ’er out twel she’d ’a’ vowed dat she never know’d no gal name
Mary Ellen. Dat’s me! But Marse Bolivar ain’t look at it dat away, an’
de man what never knuckle ter no human bein’, rich er po’, high er
low, had ter knuckle ter dat chile, an’ she wa’n’t much bigger dan yo’
two fists.
“So bimeby he say, ‘Honey, I’m gwine atter Mary Ellen, ef dat’s her
name, an’ she can stay here all day an’ all night, too, fer what I
keer.’
“Sally ’low, ‘She sha’n’t come here! she sha’n’t! I don’t want
nobody ter come here dat’s got ter git der feelin’s hurted eve’y time
dey come.’
“Right dar, suh, is whar my han’ would ’a’ come down hard; but
Marse Bolivar, he knuckle. He say, ‘Well, honey, you’ll hafter fergive
me dis time. I’ll go fetch ’er ef she’ll come, an’ ef she won’t ’tain’t
my fault.’
“So out he went. I dunner how he coaxed Mary Ellen, but she say
he tol’ ’er dat Sally wuz feelin’ mighty bad, an’ wuz ’bleeze ter see
’er; an’ Mary Ellen, havin’ mo’ heart dan min’, come right along. An’
Marse Bolivar wuz happy fer ter see Sally happy.
“Dis wuz long ’fo’ de battlin’, suh, but even dat fur back dey wuz
talkin’ ’bout war. Ol’ Fed Tatum wuz a mighty long-headed man, an’
he know’d mighty well dat ef Mary Ellen stayed dar whar she wuz at,
she won’t have no mo’ show dan a chicken wid its head wrung off.
So he fixed ’er up an’ packed ’er off up dar whar de Northrons is at.
He’d ’a’ sont her mammy wid ’er, but she say no; she’d be in de way;
folks would ’spicion what de matter wuz; an’ so she shet her mouf
an’ stayed. Ef Mary Ellen had ’a’ been my chile, suh, I’d ’a’ gone wid
’er ef I had ter claw my way wid my naked han’s thoo forty miles er
brick wall. But her mammy was diffunt; she stayed an’ pined.
“Now, ef anybody want pinin’ done dey’ll hafter go ter somebody
else ’sides ol’ Minervy Ann Perdue. When you see me pinin’, suh, you
may know my tongue done cut out an’ my han’s pairlized. Ef Mary
Ellen had ’a’ been my chile dey’d ’a’ been murder done, suh. I’d ’a’
cotch ol’ Fed Tatum by what little hair he had an’ I’d ’a’ ruint ’im; an’
ez ’twuz, I come mighty nigh havin’ a fight wid ’im. An’ ef I had—ef I
had——”
Aunt Minervy Ann was on her feet. Her right arm was raised high
in the air, and her eyes blazed with passion. It was not a glimpse of
temper she gave us, but a fleeting portrayal of mother-love at white
heat. She had been carried away by her memory, and had carried us
away with her; but she caught herself, as it were, in the act,
laughed, and sat down again by the sofa, caressing it with both
arms. Presently she resumed her narrative, addressing herself this
time to the lady of the house. It was a stroke of rare tact that had
its effect.
“Wellum, Mary Ellen wa’n’t my chile, an’ ol’ Fed Tatum sont ’er off
up dar ’mongst de Northrons; an’ ’bout de time de two sides ’gun
der battlin’ he sol’ some lan’ an’ sont her ’nuff money ter las’ ’er twel
she got all de larnin’ she want. Den de war come, an’ nobody ain’t
hear no mo’ ’bout Mary Ellen. Dey fit an’ dey fout, an’ dey fout an’
dey fit, an’ den, bimeby, dey quit, an’ fer long days nobody didn’t
know whedder ter walk backerds er go forruds.
“Ol’ Fed Tatum wuz one er dem kinder folks, ma’am, what you
been seein’ an’ knowin’ so long dat you kinder git de idee dey er
gwine ter stay des like dey is; but one day ol’ Fed Tatum fetch’d a
grunt an’ went ter bed, an’ de nex’ day he fetch’d a groan an’ died.
He sho did. An’ den when dey come ter look into what he had, dey
foun’ dat he ain’t got nothin’ he kin call his own but a little cabin in
one een’ er town, an’ dis went ter Mary Ellen’s mammy.
“I tell you now, ma’am, dat ’oman tried me. She wuz long an’ lank
an’ slabsided, an’ she went ’bout wid ’er mouf shet, an’ ’er cloze
lookin’ like somebody had flung um at ’er. I like ter hear folks talk,
myself, an’ ef dey can’t do nothin’ else I like ter see um show dey
temper. But dat ’oman, she des walk ’roun’ an’ not open her mouf
fum mornin’ twel night, less’n you ax ’er sump’n. I tried ter git her
ter talk ’bout Mary Ellen, but she ain’t know no mo’ ’bout Mary Ellen
dan a rabbit.
“I dunner but what we’d ’a’ got in a fuss, ma’am, kaze dat ’oman
sho did try me, but ’long ’bout dat time Marse Bolivar’s gal tuck sick,
an’ ’twa’n’t long ’fo’ she died. ’Twuz a mighty pity, too, kaze dat chile
would ’a’ made a fine ’oman—none better. ’Long todes de las’ she
got ter gwine on ’bout Mary Ellen. Look like she could see Mary Ellen
in de fever-dreams, an’ she’d laugh an’ go on des like she useter
when she wuz a little bit er gal.
“Wellum, when dat chile died Marse Bolivar come mighty nigh
losin’ ’is min’. He ain’t make no fuss ’bout it, but he des fell back on
hisse’f an’ walk de flo’ night atter night, an’ moan an’ groan when he
think nobody ain’t lis’nin’. An’ den, atter so long a time, here come a
letter fum Mary Ellen, an’ dat broke ’im all up. I tell you right now,
ma’am, Marse Bolivar had a hard fight wid trouble. I don’t keer what
folks may say; dey may tell you he’s a hard man, ready ter fight an’
quick ter kill. He’s all dat, an’ maybe mo’; but I know what I know.
“Wellum, de days went an’ de days come. Bimeby I hear some er
de niggers say dat Mary Ellen done come back. I laid off ter go an’
see de chile; but one day I wuz gwine ’long de street an’ I met a
white lady. She say, ‘Ain’t dat Aunt Minervy Ann?’ I ’low, ‘Yessum, dis
is de remnants.’ Wid dat, ma’am, she grab me ’roun’ de neck an’ hug
me, an’ bu’st out a-cryin’, an’ ’twa’n’t nobody in de worl’ but Mary
Ellen.
“Purty! I never has foun’ out, ma’am, how any human can be ez
purty ez Mary Ellen. Her skin wuz white ez milk an’ her eyes shine
like stars. I’d ’a’ never know’d her in de worl’. But dar she wuz, cryin’
one minnit an’ laughin’ de nex’. An’ she wuz in trouble too. She had
a telegraph in her han’ tellin’ ’er dat one er her ol’ schoolmates
gwine on ter Flurridy wuz gwine ter stop over one train des ter see
Mary Ellen. Hit seem like dat up dar whar she been stayin’ at she
ain’t never tell nobody but what she wuz white, an’ de human wa’n’t
born dat could tell de diffunce. So dar ’twuz. Here wuz de Northron
lady comin’ fer ter see Mary Ellen, an’ what wuz Mary Ellen gwine ter
do?—whar wuz she gwine ter take de Northron lady? Dar wuz de
ramshackle cabin, an’ dar wuz my kitchen. You may think ’twuz
funny, ma’am——”
“But I don’t,” said the lady of the house, abruptly and
unexpectedly; “I don’t think it was funny at all.”
Aunt Minervy Ann looked at me and lifted her chin triumphantly,
as she resumed: “No’m, ’twa’n’t funny. Mary Ellen wuz proud an’
high-strung; you could read dat in de way she walk an’ eve’y motion
she make, an’ dat ar telegraph dat de Northron lady sont ’er fum
Atlanty kinder run ’er in a corner. She dunner what ter do, ner which
way ter turn. Look at it yo’se’f, ma’am, an’ see whar she wuz.
“She laughed, ma’am, but she wuz in trouble, an’ I’m sech a big
fool dat I’m allers in trouble ’long wid dem what I like. Take de tape-
line ter der trouble an’ den ter mine, an’ you’ll fin’ dat dey medjer
’bout de same. Mary Ellen laugh an’ say, ‘Dey’s two things I kin do; I
kin leave town, er I kin go down dar ter de cabin an’ kill myse’f.’ Oh,
she wuz in a corner, ma’am—don’t you doubt it.
“Right den an’ dar sump’n pop in my head. I ’low, ‘Is you been ter
call on Marse Bolivar Blasengame?’ She say ‘No, I ain’t, Aunt Minervy
Ann. I started ter go, but I’m afear’d ter.’ I ’low, ‘Well, I’m gwine dar
right now; come go wid me.’
“So we went dar, and I left Mary Ellen on de back porch, an’ I
went in de house. Marse Bolivar wuz settin’ down, gwine over some
papers, an’ Mis’ Em’ly wuz darnin’ an’ patchin’.
“I say, ‘Marse Bolivar, dey’s a gal out here dat I thought maybe
you an’ Mis’ Em’ly would be glad ter see?”
“He ’low, ‘Dang you’ hide, Minervy Ann! You like ter make me
jump out’n my skin. Who is de gal?’
“I say, ‘I wanter see ef you know ’er.’ Wid dat I went back an’
fotch Mary Ellen in. Well, dey didn’t know ’er, ma’am, na’er one un
um; an’ I dunner how it all happened, but de fust thing I know Mary
Ellen fell on ’er knees, by a lounge what sot under de place whar
Miss Sally’s pictur’ wuz hangin’ at. She fell on her knees, Mary Ellen
did, and ’low, ‘She’d know who I is,’ an’ wid dat she bust aloose an’
went ter cryin’ des like ’er heart wuz done broke in two.
“Marse Bolivar stood dar an’ wait twel Mary Ellen cool off, an’ quiet
down. Mis’ Em’ly, ma’am, is one er dem ar primity, dried-up
wimmen, which, ef dey ain’t fightin’ you wid bofe han’s, er huggin’
you wid bofe arms, ain’t sayin’ nothin’ ’tall. An’ ef Mis’ Em’ly ain’t
sayin’ nothin’ you can’t put de key in de Bible an’ fin’ no tex’ dat’ll
tell you what she got in ’er min’. But she wuz darnin’, an’ I see ’er
wipe one eye on de leg er de sock, an’ den present’y she wipe t’er
eye.
“Wellum, Marse Bolivar stood dar an’ look at Mary Ellen, an’ when
she riz fum her knees an’ stood dar, her head hangin’ down, still a-
cryin’, but mo’ quieter, he went close up an’ ’low, ‘I know you, Mary
Ellen, an’ I’m mighty glad ter see you. Dat ar letter what you writ
me, I got it yit, an’ I’m gwine ter keep it whiles I live.’
“He talk right husky, ma’am, an’ I ’gun ter feel husky myse’f; an’
den I know’d dat ef I didn’t change de tune, I’d be boo-hooin’ right
dar ’fo’ all un um wid needer ’casion nor ’skuce. I went up ter Mary
Ellen an’ cotch ’er by de shoulder and say, ‘Shucks, gal! Dat train’ll
be here terreckly, an’ den what you gwine ter do?’
“’Twuz a hint ez broad ez a horse-blanket, ma’am, but Mary Ellen
never tuck it. She des stood dar an’ look at me. An’ ’bout dat time
Marse Bolivar he ketch’d holt er my shoulder an’ whirlt me ’roun’, an’
’low, ‘What de matter, Minervy Ann? Talk it right out!’
“Wellum, I let you know I tol’ ’im; I des laid it off! I tol’ des how
’twuz; how Mary Ellen been sont up dar by ol’ Fed Tatum, an’ how,
on de ’count er no fault er her’n de Northron folks tuck ’er ter be a
white gal; an’ how one er de gals what went ter school wid ’er wuz
gwine ter come ter see ’er an’ stay ’twixt trains. Den I ’low, ‘Whar is
Mary Ellen gwine ter see ’er? In dat ar mud-shack whar her ma live
at? In de big road? In de woods? In de hoss-lot?”
The whole scene from beginning to end had been enacted by Aunt
Minervy Ann. In the empty spaces of the room she had placed the
colonel, his wife, and Mary Ellen, and they seemed to be before us,
and not only before us, but the passionate earnestness with which
she laid the case of Mary Ellen before the colonel made them live
and move under our very eyes.
“In de big road? In de woods? In de hoss-lot?”
And when she paused for the reply of the colonel, the look of
expectation on her face was as keen and as eager as it could have
been on the day and the occasion when she was pleading for Mary
Ellen. The spell was broken by the lady of the house, who leaned
forward eagerly as if expecting the colonel himself to reply. Perhaps
Aunt Minervy Ann misunderstood the movement. She paused a
moment as if dazed, and then sank by the sofa with a foolish laugh.
“I know you all put me down ter be a fool,” she said, “an’ I ’speck
I is.”
“Nonsense!” cried the lady of the house, sharply. “What did the
colonel reply?”
Aunt Minervy remained silent a little while, picking at one of the
fringes of the sofa. She was evidently trying to reassemble in her
mind the incidents and surroundings of her narrative. Presently she
began again, in a tone subdued and confidential:
“Marse Bolivar look at me right hard, den he look at Mary Ellen,
an’ den he pull at de tip-een’ er his year. Wellum, I fair helt my breff;
I say ter myse’f, ‘Man, whyn’t you look at poor Miss Sally’s pictur’? I
wuz feared a fly might light on ’im an’ change his min’. But, look at
de pictur’ he did, an’ dat settled it.
“He ’low, ‘Set down, Mary Ellen; you look tired. Minervy Ann, fetch
’er a drink er water.’ Wellum, you may well b’lieve dat I flied up an’
flew’d ’roun’ an’ fotch dat water. Den he ’low, ‘Minervy Ann, go in dar
an’ straighten out dat parlor; fling open de blinds an’ do ’bout in
dar!’”
Again Aunt Minervy Ann arose from her reclining position by the
sofa and stood in the floor; again, by a wave of her hand, she
brought the scene before our eyes.
“I stood dar, I did, an’ look at dat man. I ’low, ‘Marse Bolivar,
less’n it’s Marse Tumlin, youer de bes’ man dat God A’mighty ever
breathe de breath er life inter!’ He rub his han’ over his face an’ say,
‘Dang yo’ ol’ hide! go on an’ hush up! Fum de time I fust know’d
you, you been gittin’ me an’ Tumlin in hot water.’
“I flung back at ’im, ‘’Tain’t never scald you! ’Tain’t never been too
deep fer you!’ He straighten hisse’f up an’ helt his head back an’
laugh. He ’low, ‘Dang it all, Minervy Ann! Dey er times when I want
it bofe hot an’ deep. You go an’ scuffle ’roun’ in dat parlor, an’ don’t
you let yo’ Mis’ Em’ly do a han’s-turn in dar.’
“Wellum, dat uz ’bout de upshot un it. De Northron lady wuz name
Miss Wilbur, er Willard, I disremember which, but she was a mighty
nice white gal. Marse Bolivar an’ Hamp wuz bofe at de train ter meet
’er, an’ Marse Bolivar fotch ’er right ter de house, an’ show’d ’er in de
parlor. Atter while, Mary Ellen went in dar, an’ ’twuz a mighty meetin’
’twix um. Dey chattered same ez a flock er blackbirds on a windy
day; an’ atter so long a time Marse Bolivar went in dar. ’Twa’n’t long
’fo’ he got ter tellin’ tales, an’ de Northron lady laugh so she kin
hardly set on de cheer. Den he open de pianner, an’ ax de white lady
ter play, but she vow she can’t play atter he been hearin’ Mary Ellen.
Den he say, ‘Won’t you play me a chune, Mary Ellen? Sump’n ol’
timey?’
“Dat gal went ter de pianner, ma’am, an’ sot dar wid her han’s
over her face like she prayin’, an’ den she laid her han’s on de keys
an’ started a chune des like yo’ hear in yo’ dreams. It got a little
louder, an’ den present’y you could hear ’er singin’. I never did know
whar’bouts her voice slipped inter dat chune; but dar ’twuz, an’ it fit
in wid de pianner des like a flute does.
“Wellum, it tuck me back, way back dar in de ol’ days, an’ den
brung me down ter later times, fer many a moonlight night did I
hear Miss Sally an’ Mary Ellen sing dat song when dey wuz chillun.
Den atter dat de Northron lady plump herse’f down at de pianner,

You might also like