An Introduction to R

July 29, 2010 2 comments

Notes on R: A Programming Environment for Data Analysis and Graphics
Version 2.10.1 (2009-12-14)
W. N. Venables, D. M. Smith
and the R Development Core Team
Copyright
c 1990 W. N. Venables
Copyright
c 1992 W. N. Venables & D. M. Smith
Copyright
c 1997 R. Gentleman & R. Ihaka
Copyright
c 1997, 1998 M. Maechler
Copyright
c 1997– R Core Development Team
Copyright
c 1999–2009 R Development Core Team
Permission is granted to make and distribute verbatim copies of this manual provided the
copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions
for verbatim copying, provided that the entire resulting derived work is distributed
under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language,
under the above conditions for modified versions, except that this permission notice
may be stated in a translation approved by the R Development Core Team.
ISBN 3-900051-12-7
i
Table of Contents
Preface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1
1 Introduction and preliminaries : : : : : : : : : : : : : : : : 2
1.1 The R environment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2
1.2 Related software and documentation: : : : : : : : : : : : : : : : : : : : : : : : : : : : 2
1.3 R and statistics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2
1.4 R and the window system : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3
1.5 Using R interactively : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3
1.6 An introductory session : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
1.7 Getting help with functions and features : : : : : : : : : : : : : : : : : : : : : : : : 4
1.8 R commands, case sensitivity, etc. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5
1.9 Recall and correction of previous commands : : : : : : : : : : : : : : : : : : : : 5
1.10 Executing commands from or diverting output to a file : : : : : : : : 6
1.11 Data permanency and removing objects : : : : : : : : : : : : : : : : : : : : : : : 6
2 Simple manipulations; numbers and vectors : : 7
2.1 Vectors and assignment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
2.2 Vector arithmetic : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
2.3 Generating regular sequences : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
2.4 Logical vectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
2.5 Missing values: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
2.6 Character vectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
2.7 Index vectors; selecting and modifying subsets of a data set : : : : 11
2.8 Other types of objects: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 12
3 Objects, their modes and attributes : : : : : : : : : 13
3.1 Intrinsic attributes: mode and length : : : : : : : : : : : : : : : : : : : : : : : : : : 13
3.2 Changing the length of an object : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
3.3 Getting and setting attributes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
3.4 The class of an object : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 15
4 Ordered and unordered factors: : : : : : : : : : : : : : : 16
4.1 A specific example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
4.2 The function tapply() and ragged arrays : : : : : : : : : : : : : : : : : : : : : 16
4.3 Ordered factors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17
ii
5 Arrays and matrices: : : : : : : : : : : : : : : : : : : : : : : : : : : 19
5.1 Arrays : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 19
5.2 Array indexing. Subsections of an array : : : : : : : : : : : : : : : : : : : : : : : 19
5.3 Index matrices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 20
5.4 The array() function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21
5.4.1 Mixed vector and array arithmetic. The recycling rule : : : : 21
5.5 The outer product of two arrays : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
5.6 Generalized transpose of an array : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
5.7 Matrix facilities : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
5.7.1 Matrix multiplication: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
5.7.2 Linear equations and inversion: : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
5.7.3 Eigenvalues and eigenvectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
5.7.4 Singular value decomposition and determinants : : : : : : : : : : : 24
5.7.5 Least squares fitting and the QR decomposition : : : : : : : : : : 25
5.8 Forming partitioned matrices, cbind() and rbind(): : : : : : : : : : : 25
5.9 The concatenation function, c(), with arrays : : : : : : : : : : : : : : : : : : 26
5.10 Frequency tables from factors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26
6 Lists and data frames : : : : : : : : : : : : : : : : : : : : : : : : : 28
6.1 Lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
6.2 Constructing and modifying lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
6.2.1 Concatenating lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
6.3 Data frames : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
6.3.1 Making data frames : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
6.3.2 attach() and detach() : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
6.3.3 Working with data frames : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
6.3.4 Attaching arbitrary lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31
6.3.5 Managing the search path : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31
7 Reading data from files : : : : : : : : : : : : : : : : : : : : : : : 32
7.1 The read.table() function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 32
7.2 The scan() function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33
7.3 Accessing builtin datasets : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33
7.3.1 Loading data from other R packages : : : : : : : : : : : : : : : : : : : : : : 34
7.4 Editing data : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34
8 Probability distributions : : : : : : : : : : : : : : : : : : : : : : 35
8.1 R as a set of statistical tables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35
8.2 Examining the distribution of a set of data : : : : : : : : : : : : : : : : : : : : 36
8.3 One- and two-sample tests : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
9 Grouping, loops and conditional execution : : 42
9.1 Grouped expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
9.2 Control statements : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
9.2.1 Conditional execution: if statements : : : : : : : : : : : : : : : : : : : : : 42
9.2.2 Repetitive execution: for loops, repeat and while : : : : : : : 42
iii
10 Writing your own functions : : : : : : : : : : : : : : : : : 44
10.1 Simple examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44
10.2 Defining new binary operators: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
10.3 Named arguments and defaults : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
10.4 The ‘…’ argument : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 46
10.5 Assignments within functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 46
10.6 More advanced examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 46
10.6.1 Efficiency factors in block designs : : : : : : : : : : : : : : : : : : : : : : : 46
10.6.2 Dropping all names in a printed array : : : : : : : : : : : : : : : : : : : 47
10.6.3 Recursive numerical integration : : : : : : : : : : : : : : : : : : : : : : : : : 48
10.7 Scope : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 48
10.8 Customizing the environment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50
10.9 Classes, generic functions and object orientation : : : : : : : : : : : : : : 51
11 Statistical models in R: : : : : : : : : : : : : : : : : : : : : : : 54
11.1 Defining statistical models; formulae : : : : : : : : : : : : : : : : : : : : : : : : : 54
11.1.1 Contrasts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 56
11.2 Linear models: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
11.3 Generic functions for extracting model information : : : : : : : : : : : 57
11.4 Analysis of variance and model comparison : : : : : : : : : : : : : : : : : : : 58
11.4.1 ANOVA tables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
11.5 Updating fitted models: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
11.6 Generalized linear models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60
11.6.1 Families: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60
11.6.2 The glm() function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61
11.7 Nonlinear least squares and maximum likelihood models : : : : : : 63
11.7.1 Least squares : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64
11.7.2 Maximum likelihood : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
11.8 Some non-standard models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
12 Graphical procedures : : : : : : : : : : : : : : : : : : : : : : : : 67
12.1 High-level plotting commands : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67
12.1.1 The plot() function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67
12.1.2 Displaying multivariate data : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68
12.1.3 Display graphics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68
12.1.4 Arguments to high-level plotting functions : : : : : : : : : : : : : : : 69
12.2 Low-level plotting commands: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
12.2.1 Mathematical annotation: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71
12.2.2 Hershey vector fonts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
12.3 Interacting with graphics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
12.4 Using graphics parameters : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 73
12.4.1 Permanent changes: The par() function: : : : : : : : : : : : : : : : : 73
12.4.2 Temporary changes: Arguments to graphics functions : : : : 74
12.5 Graphics parameters list : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 74
12.5.1 Graphical elements : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 75
12.5.2 Axes and tick marks : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76
12.5.3 Figure margins : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76
iv
12.5.4 Multiple figure environment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78
12.6 Device drivers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
12.6.1 PostScript diagrams for typeset documents : : : : : : : : : : : : : : 80
12.6.2 Multiple graphics devices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80
12.7 Dynamic graphics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
13 Packages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82
13.1 Standard packages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82
13.2 Contributed packages and CRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82
13.3 Namespaces: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83
Appendix A A sample session: : : : : : : : : : : : : : : : : : 84
Appendix B Invoking R : : : : : : : : : : : : : : : : : : : : : : : : 88
B.1 Invoking R from the command line: : : : : : : : : : : : : : : : : : : : : : : : : : : : 88
B.2 Invoking R under Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92
B.3 Invoking R under Mac OS X: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93
B.4 Scripting with R: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93
Appendix C The command-line editor : : : : : : : : 95
C.1 Preliminaries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 95
C.2 Editing actions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 95
C.3 Command-line editor summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 95
Appendix D Function and variable index : : : : : 97
Appendix E Concept index : : : : : : : : : : : : : : : : : : : 100
Appendix F References : : : : : : : : : : : : : : : : : : : : : : : 102
Preface 1
Preface
This introduction to R is derived from an original set of notes describing the S and SPlus
environments written in 1990–2 by Bill Venables and David M. Smith when at the
University of Adelaide. We have made a number of small changes to reflect differences
between the R and S programs, and expanded some of the material.
We would like to extend warm thanks to Bill Venables (and David Smith) for granting
permission to distribute this modified version of the notes in this way, and for being a
supporter of R from way back.
Comments and corrections are always welcome. Please address email correspondence to
R-core@R-project.org.
Suggestions to the reader
Most R novices will start with the introductory session in Appendix A. This should give
some familiarity with the style of R sessions and more importantly some instant feedback
on what actually happens.
Many users will come to R mainly for its graphical facilities. In this case, Chapter 12
[Graphics], page 67 on the graphics facilities can be read at almost any time and need not
wait until all the preceding sections have been digested.
Chapter 1: Introduction and preliminaries 2
1 Introduction and preliminaries
1.1 The R environment
R is an integrated suite of software facilities for data manipulation, calculation and graphical
display. Among other things it has
 an effective data handling and storage facility,
 a suite of operators for calculations on arrays, in particular matrices,
 a large, coherent, integrated collection of intermediate tools for data analysis,
 graphical facilities for data analysis and display either directly at the computer or on
hardcopy, and
 a well developed, simple and effective programming language (called ‘S’) which includes
conditionals, loops, user defined recursive functions and input and output facilities.
(Indeed most of the system supplied functions are themselves written in the S language.)
The term “environment” is intended to characterize it as a fully planned and coherent
system, rather than an incremental accretion of very specific and inflexible tools, as is
frequently the case with other data analysis software.
R is very much a vehicle for newly developing methods of interactive data analysis. It
has developed rapidly, and has been extended by a large collection of packages. However,
most programs written in R are essentially ephemeral, written for a single piece of data
analysis.
1.2 Related software and documentation
R can be regarded as an implementation of the S language which was developed at Bell
Laboratories by Rick Becker, John Chambers and Allan Wilks, and also forms the basis of
the S-Plus systems.
The evolution of the S language is characterized by four books by John Chambers and
coauthors. For R, the basic reference is The New S Language: A Programming Environment
for Data Analysis and Graphics by Richard A. Becker, John M. Chambers and Allan R.
Wilks. The new features of the 1991 release of S are covered in Statistical Models in S
edited by John M. Chambers and Trevor J. Hastie. The formal methods and classes of
the methods package are based on those described in Programming with Data by John M.
Chambers. See Appendix F [References], page 102, for precise references.
There are now a number of books which describe how to use R for data analysis and
statistics, and documentation for S/S-Plus can typically be used with R, keeping the
differences between the S implementations in mind. See Section “What documentation
exists for R?” in The R statistical system FAQ.
1.3 R and statistics
Our introduction to the R environment did not mention statistics, yet many people use
R as a statistics system. We prefer to think of it of an environment within which many
classical and modern statistical techniques have been implemented. A few of these are
built into the base R environment, but many are supplied as packages. There are about 25
Chapter 1: Introduction and preliminaries 3
packages supplied with R (called “standard” and “recommended” packages) and many more
are available through the CRAN family of Internet sites (via http://CRAN.R-project.org)
and elsewhere. More details on packages are given later (see Chapter 13 [Packages], page 82).
Most classical statistics and much of the latest methodology is available for use with R,
but users may need to be prepared to do a little work to find it.
There is an important difference in philosophy between S (and hence R) and the other
main statistical systems. In S a statistical analysis is normally done as a series of steps,
with intermediate results being stored in objects. Thus whereas SAS and SPSS will give
copious output from a regression or discriminant analysis, R will give minimal output and
store the results in a fit object for subsequent interrogation by further R functions.
1.4 R and the window system
The most convenient way to use R is at a graphics workstation running a windowing system.
This guide is aimed at users who have this facility. In particular we will occasionally refer to
the use of R on an X window system although the vast bulk of what is said applies generally
to any implementation of the R environment.
Most users will find it necessary to interact directly with the operating system on their
computer from time to time. In this guide, we mainly discuss interaction with the operating
system on UNIX machines. If you are running R under Windows or Mac OS you will need
to make some small adjustments.
Setting up a workstation to take full advantage of the customizable features of R is a
straightforward if somewhat tedious procedure, and will not be considered further here.
Users in difficulty should seek local expert help.
1.5 Using R interactively
When you use the R program it issues a prompt when it expects input commands. The
default prompt is ‘>’, which on UNIX might be the same as the shell prompt, and so it
may appear that nothing is happening. However, as we shall see, it is easy to change to a
different R prompt if you wish. We will assume that the UNIX shell prompt is ‘$’.
In using R under UNIX the suggested procedure for the first occasion is as follows:
1. Create a separate sub-directory, say ‘work’, to hold data files on which you will use
R for this problem. This will be the working directory whenever you use R for this
particular problem.
$ mkdir work
$ cd work
2. Start the R program with the command
$ R
3. At this point R commands may be issued (see later).
4. To quit the R program the command is
> q()
At this point you will be asked whether you want to save the data from your R session.
On some systems this will bring up a dialog box, and on others you will receive a text
prompt to which you can respond yes, no or cancel (a single letter abbreviation will
Chapter 1: Introduction and preliminaries 4
do) to save the data before quitting, quit without saving, or return to the R session.
Data which is saved will be available in future R sessions.
Further R sessions are simple.
1. Make ‘work’ the working directory and start the program as before:
$ cd work
$ R
2. Use the R program, terminating with the q() command at the end of the session.
To use R under Windows the procedure to follow is basically the same. Create a folder
as the working directory, and set that in the ‘Start In’ field in your R shortcut. Then
launch R by double clicking on the icon.
1.6 An introductory session
Readers wishing to get a feel for R at a computer before proceeding are strongly advised to
work through the introductory session given in Appendix A [A sample session], page 84.
1.7 Getting help with functions and features
R has an inbuilt help facility similar to the man facility of UNIX. To get more information
on any specific named function, for example solve, the command is
> help(solve)
An alternative is
> ?solve
For a feature specified by special characters, the argument must be enclosed in double
or single quotes, making it a “character string”: This is also necessary for a few words with
syntactic meaning including if, for and function.
> help(“[[“)
Either form of quote mark may be used to escape the other, as in the string “It’s
important”. Our convention is to use double quote marks for preference.
On most R installations help is available in HTML format by running
> help.start()
which will launch a Web browser that allows the help pages to be browsed with hyperlinks.
On UNIX, subsequent help requests are sent to the HTML-based help system. The ‘Search
Engine and Keywords’ link in the page loaded by help.start() is particularly useful as
it is contains a high-level concept list which searches though available functions. It can be
a great way to get your bearings quickly and to understand the breadth of what R has to
offer.
The help.search command (alternatively ??) allows searching for help in various ways.
For example,
> ??solve
Try ?help.search for details and more examples.
The examples on a help topic can normally be run by
Chapter 1: Introduction and preliminaries 5
> example(topic)
Windows versions of R have other optional help systems: use
> ?help
for further details.
1.8 R commands, case sensitivity, etc.
Technically R is an expression language with a very simple syntax. It is case sensitive
as are most UNIX based packages, so A and a are different symbols and would refer to
different variables. The set of symbols which can be used in R names depends on the
operating system and country within which R is being run (technically on the locale in
use). Normally all alphanumeric symbols are allowed1 (and in some countries this includes
accented letters) plus ‘.’ and ‘_’, with the restriction that a name must start with ‘.’ or a
letter, and if it starts with ‘.’ the second character must not be a digit.
Elementary commands consist of either expressions or assignments. If an expression is
given as a command, it is evaluated, printed (unless specifically made invisible), and the
value is lost. An assignment also evaluates an expression and passes the value to a variable
but the result is not automatically printed.
Commands are separated either by a semi-colon (‘;’), or by a newline. Elementary
commands can be grouped together into one compound expression by braces (‘{’ and ‘}’).
Comments can be put almost2 anywhere, starting with a hashmark (‘#’), everything to the
end of the line is a comment.
If a command is not complete at the end of a line, R will give a different prompt, by
default
+
on second and subsequent lines and continue to read input until the command is syntactically
complete. This prompt may be changed by the user. We will generally omit the continuation
prompt and indicate continuation by simple indenting.
Command lines entered at the console are limited3 to about 4095 bytes (not characters).
1.9 Recall and correction of previous commands
Under many versions of UNIX and on Windows, R provides a mechanism for recalling and
re-executing previous commands. The vertical arrow keys on the keyboard can be used to
scroll forward and backward through a command history. Once a command is located in
this way, the cursor can be moved within the command using the horizontal arrow keys, and
characters can be removed with the DEL key or added with the other keys. More details
are provided later: see Appendix C [The command-line editor], page 95.
The recall and editing capabilities under UNIX are highly customizable. You can find
out how to do this by reading the manual entry for the readline library.
1 For portable R code (including that to be used in R packages) only A–Za–z0–9 should be used.
2 not inside strings, nor within the argument list of a function definition
3 some of the consoles will not allow you to enter more, and amongst those which do some will silently
discard the excess and some will use it as the start of the next line.
Chapter 1: Introduction and preliminaries 6
Alternatively, the Emacs text editor provides more general support mechanisms (via
ESS, Emacs Speaks Statistics) for working interactively with R. See Section “R and Emacs”
in The R statistical system FAQ.
1.10 Executing commands from or diverting output to a file
If commands4 are stored in an external file, say ‘commands.R’ in the working directory
‘work’, they may be executed at any time in an R session with the command
> source(“commands.R”)
For Windows Source is also available on the File menu. The function sink,
> sink(“record.lis”)
will divert all subsequent output from the console to an external file, ‘record.lis’. The
command
> sink()
restores it to the console once again.
1.11 Data permanency and removing objects
The entities that R creates and manipulates are known as objects. These may be variables,
arrays of numbers, character strings, functions, or more general structures built from such
components.
During an R session, objects are created and stored by name (we discuss this process in
the next session). The R command
> objects()
(alternatively, ls()) can be used to display the names of (most of) the objects which are
currently stored within R. The collection of objects currently stored is called the workspace.
To remove objects the function rm is available:
> rm(x, y, z, ink, junk, temp, foo, bar)
All objects created during an R sessions can be stored permanently in a file for use in
future R sessions. At the end of each R session you are given the opportunity to save all
the currently available objects. If you indicate that you want to do this, the objects are
written to a file called ‘.RData’5 in the current directory, and the command lines used in
the session are saved to a file called ‘.Rhistory’.
When R is started at later time from the same directory it reloads the workspace from
this file. At the same time the associated commands history is reloaded.
It is recommended that you should use separate working directories for analyses conducted
with R. It is quite common for objects with names x and y to be created during an
analysis. Names like this are often meaningful in the context of a single analysis, but it can
be quite hard to decide what they might be when the several analyses have been conducted
in the same directory.
4 of unlimited length.
5 The leading “dot” in this file name makes it invisible in normal file listings in UNIX.
Chapter 2: Simple manipulations; numbers and vectors 7
2 Simple manipulations; numbers and vectors
2.1 Vectors and assignment
R operates on named data structures. The simplest such structure is the numeric vector,
which is a single entity consisting of an ordered collection of numbers. To set up a vector
named x, say, consisting of five numbers, namely 10.4, 5.6, 3.1, 6.4 and 21.7, use the R
command
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
This is an assignment statement using the function c() which in this context can take
an arbitrary number of vector arguments and whose value is a vector got by concatenating
its arguments end to end.1
A number occurring by itself in an expression is taken as a vector of length one.
Notice that the assignment operator (‘<-’), which consists of the two characters ‘<’ (“less
than”) and ‘-’ (“minus”) occurring strictly side-by-side and it ‘points’ to the object receiving
the value of the expression. In most contexts the ‘=’ operator can be used as a alternative.
Assignment can also be made using the function assign(). An equivalent way of making
the same assignment as above is with:
> assign(“x”, c(10.4, 5.6, 3.1, 6.4, 21.7))
The usual operator, <-, can be thought of as a syntactic short-cut to this.
Assignments can also be made in the other direction, using the obvious change in the
assignment operator. So the same assignment could be made using
> c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
If an expression is used as a complete command, the value is printed and lost2. So now
if we were to use the command
> 1/x
the reciprocals of the five values would be printed at the terminal (and the value of x, of
course, unchanged).
The further assignment
> y <- c(x, 0, x)
would create a vector y with 11 entries consisting of two copies of x with a zero in the
middle place.
2.2 Vector arithmetic
Vectors can be used in arithmetic expressions, in which case the operations are performed
element by element. Vectors occurring in the same expression need not all be of the same
length. If they are not, the value of the expression is a vector with the same length as the
longest vector which occurs in the expression. Shorter vectors in the expression are recycled
as often as need be (perhaps fractionally) until they match the length of the longest vector.
In particular a constant is simply repeated. So with the above assignments the command
1 With other than vector types of argument, such as list mode arguments, the action of c() is rather
different. See Section 6.2.1 [Concatenating lists], page 29.
2 Actually, it is still available as .Last.value before any other statements are executed.
Chapter 2: Simple manipulations; numbers and vectors 8
> v <- 2*x + y + 1
generates a new vector v of length 11 constructed by adding together, element by element,
2*x repeated 2.2 times, y repeated just once, and 1 repeated 11 times.
The elementary arithmetic operators are the usual +, -, *, / and ^ for raising to a power.
In addition all of the common arithmetic functions are available. log, exp, sin, cos, tan,
sqrt, and so on, all have their usual meaning. max and min select the largest and smallest
elements of a vector respectively. range is a function whose value is a vector of length two,
namely c(min(x), max(x)). length(x) is the number of elements in x, sum(x) gives the
total of the elements in x, and prod(x) their product.
Two statistical functions are mean(x) which calculates the sample mean, which is the
same as sum(x)/length(x), and var(x) which gives
sum((x-mean(x))^2)/(length(x)-1)
or sample variance. If the argument to var() is an n-by-p matrix the value is a p-by-p sample
covariance matrix got by regarding the rows as independent p-variate sample vectors.
sort(x) returns a vector of the same size as x with the elements arranged in increasing
order; however there are other more flexible sorting facilities available (see order() or
sort.list() which produce a permutation to do the sorting).
Note that max and min select the largest and smallest values in their arguments, even
if they are given several vectors. The parallel maximum and minimum functions pmax
and pmin return a vector (of length equal to their longest argument) that contains in each
element the largest (smallest) element in that position in any of the input vectors.
For most purposes the user will not be concerned if the “numbers” in a numeric vector
are integers, reals or even complex. Internally calculations are done as double precision real
numbers, or double precision complex numbers if the input data are complex.
To work with complex numbers, supply an explicit complex part. Thus
sqrt(-17)
will give NaN and a warning, but
sqrt(-17+0i)
will do the computations as complex numbers.
2.3 Generating regular sequences
R has a number of facilities for generating commonly used sequences of numbers. For
example 1:30 is the vector c(1, 2, …, 29, 30). The colon operator has high priority
within an expression, so, for example 2*1:15 is the vector c(2, 4, …, 28, 30). Put n
<- 10 and compare the sequences 1:n-1 and 1:(n-1).
The construction 30:1 may be used to generate a sequence backwards.
The function seq() is a more general facility for generating sequences. It has five
arguments, only some of which may be specified in any one call. The first two arguments, if
given, specify the beginning and end of the sequence, and if these are the only two arguments
given the result is the same as the colon operator. That is seq(2,10) is the same vector as
2:10.
Parameters to seq(), and to many other R functions, can also be given in named form,
in which case the order in which they appear is irrelevant. The first two parameters may be
Chapter 2: Simple manipulations; numbers and vectors 9
named from=value and to=value; thus seq(1,30), seq(from=1, to=30) and seq(to=30,
from=1) are all the same as 1:30. The next two parameters to seq() may be named
by=value and length=value, which specify a step size and a length for the sequence
respectively. If neither of these is given, the default by=1 is assumed.
For example
> seq(-5, 5, by=.2) -> s3
generates in s3 the vector c(-5.0, -4.8, -4.6, …, 4.6, 4.8, 5.0). Similarly
> s4 <- seq(length=51, from=-5, by=.2)
generates the same vector in s4.
The fifth parameter may be named along=vector, which if used must be the only
parameter, and creates a sequence 1, 2, …, length(vector), or the empty sequence if
the vector is empty (as it can be).
A related function is rep() which can be used for replicating an object in various complicated
ways. The simplest form is
> s5 <- rep(x, times=5)
which will put five copies of x end-to-end in s5. Another useful version is
> s6 <- rep(x, each=5)
which repeats each element of x five times before moving on to the next.
2.4 Logical vectors
As well as numerical vectors, R allows manipulation of logical quantities. The elements of
a logical vector can have the values TRUE, FALSE, and NA (for “not available”, see below).
The first two are often abbreviated as T and F, respectively. Note however that T and F are
just variables which are set to TRUE and FALSE by default, but are not reserved words and
hence can be overwritten by the user. Hence, you should always use TRUE and FALSE.
Logical vectors are generated by conditions. For example
> temp <- x > 13
sets temp as a vector of the same length as x with values FALSE corresponding to elements
of x where the condition is not met and TRUE where it is.
The logical operators are <, <=, >, >=, == for exact equality and != for inequality. In
addition if c1 and c2 are logical expressions, then c1 & c2 is their intersection (“and”),
c1 | c2 is their union (“or”), and !c1 is the negation of c1.
Logical vectors may be used in ordinary arithmetic, in which case they are coerced into
numeric vectors, FALSE becoming 0 and TRUE becoming 1. However there are situations
where logical vectors and their coerced numeric counterparts are not equivalent, for example
see the next subsection.
2.5 Missing values
In some cases the components of a vector may not be completely known. When an element
or value is “not available” or a “missing value” in the statistical sense, a place within a
vector may be reserved for it by assigning it the special value NA. In general any operation
Chapter 2: Simple manipulations; numbers and vectors 10
on an NA becomes an NA. The motivation for this rule is simply that if the specification of
an operation is incomplete, the result cannot be known and hence is not available.
The function is.na(x) gives a logical vector of the same size as x with value TRUE if
and only if the corresponding element in x is NA.
> z <- c(1:3,NA); ind <- is.na(z)
Notice that the logical expression x == NA is quite different from is.na(x) since NA is not
really a value but a marker for a quantity that is not available. Thus x == NA is a vector of
the same length as x all of whose values are NA as the logical expression itself is incomplete
and hence undecidable.
Note that there is a second kind of “missing” values which are produced by numerical
computation, the so-called Not a Number, NaN, values. Examples are
> 0/0
or
> Inf – Inf
which both give NaN since the result cannot be defined sensibly.
In summary, is.na(xx) is TRUE both for NA and NaN values. To differentiate these,
is.nan(xx) is only TRUE for NaNs.
Missing values are sometimes printed as <NA> when character vectors are printed without
quotes.
2.6 Character vectors
Character quantities and character vectors are used frequently in R, for example as plot
labels. Where needed they are denoted by a sequence of characters delimited by the double
quote character, e.g., “x-values”, “New iteration results”.
Character strings are entered using either matching double (“) or single (’) quotes, but
are printed using double quotes (or sometimes without quotes). They use C-style escape
sequences, using \ as the escape character, so \\ is entered and printed as \\, and inside
double quotes ” is entered as \”. Other useful escape sequences are \n, newline, \t, tab
and \b, backspace—see ?Quotes for a full list.
Character vectors may be concatenated into a vector by the c() function; examples of
their use will emerge frequently.
The paste() function takes an arbitrary number of arguments and concatenates them
one by one into character strings. Any numbers given among the arguments are coerced
into character strings in the evident way, that is, in the same way they would be if they were
printed. The arguments are by default separated in the result by a single blank character,
but this can be changed by the named parameter, sep=string, which changes it to string,
possibly empty.
For example
> labs <- paste(c(“X”,”Y”), 1:10, sep=””)
makes labs into the character vector
c(“X1″, “Y2″, “X3″, “Y4″, “X5″, “Y6″, “X7″, “Y8″, “X9″, “Y10″)
Chapter 2: Simple manipulations; numbers and vectors 11
Note particularly that recycling of short lists takes place here too; thus c(“X”, “Y”) is
repeated 5 times to match the sequence 1:10.3
2.7 Index vectors; selecting and modifying subsets of a data
set
Subsets of the elements of a vector may be selected by appending to the name of the vector
an index vector in square brackets. More generally any expression that evaluates to a vector
may have subsets of its elements similarly selected by appending an index vector in square
brackets immediately after the expression.
Such index vectors can be any of four distinct types.
1. A logical vector. In this case the index vector must be of the same length as the vector
from which elements are to be selected. Values corresponding to TRUE in the index
vector are selected and those corresponding to FALSE are omitted. For example
> y <- x[!is.na(x)]
creates (or re-creates) an object y which will contain the non-missing values of x, in
the same order. Note that if x has missing values, y will be shorter than x. Also
> (x+1)[(!is.na(x)) & x>0] -> z
creates an object z and places in it the values of the vector x+1 for which the corresponding
value in x was both non-missing and positive.
2. A vector of positive integral quantities. In this case the values in the index vector must
lie in the set {1, 2, . . . , length(x)}. The corresponding elements of the vector are
selected and concatenated, in that order, in the result. The index vector can be of any
length and the result is of the same length as the index vector. For example x[6] is
the sixth component of x and
> x[1:10]
selects the first 10 elements of x (assuming length(x) is not less than 10). Also
> c(“x”,”y”)[rep(c(1,2,2,1), times=4)]
(an admittedly unlikely thing to do) produces a character vector of length 16 consisting
of “x”, “y”, “y”, “x” repeated four times.
3. A vector of negative integral quantities. Such an index vector specifies the values to
be excluded rather than included. Thus
> y <- x[-(1:5)]
gives y all but the first five elements of x.
4. A vector of character strings. This possibility only applies where an object has a names
attribute to identify its components. In this case a sub-vector of the names vector may
be used in the same way as the positive integral labels in item 2 further above.
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c(“orange”, “banana”, “apple”, “peach”)
> lunch <- fruit[c("apple","orange")]
3 paste(…, collapse=ss) joins the arguments into a single character string putting ss in between.
There are more tools for character manipulation, see the help for sub and substring.
Chapter 2: Simple manipulations; numbers and vectors 12
The advantage is that alphanumeric names are often easier to remember than numeric
indices. This option is particularly useful in connection with data frames, as we shall
see later.
An indexed expression can also appear on the receiving end of an assignment, in which
case the assignment operation is performed only on those elements of the vector. The
expression must be of the form vector[index_vector] as having an arbitrary expression
in place of the vector name does not make much sense here.
The vector assigned must match the length of the index vector, and in the case of a
logical index vector it must again be the same length as the vector it is indexing.
For example
> x[is.na(x)] <- 0
replaces any missing values in x by zeros and
> y[y < 0] <- -y[y < 0]
has the same effect as
> y <- abs(y)
2.8 Other types of objects
Vectors are the most important type of object in R, but there are several others which we
will meet more formally in later sections.
 matrices or more generally arrays are multi-dimensional generalizations of vectors. In
fact, they are vectors that can be indexed by two or more indices and will be printed
in special ways. See Chapter 5 [Arrays and matrices], page 19.
 factors provide compact ways to handle categorical data. See Chapter 4 [Factors],
page 16.
 lists are a general form of vector in which the various elements need not be of the same
type, and are often themselves vectors or lists. Lists provide a convenient way to return
the results of a statistical computation. See Section 6.1 [Lists], page 28.
 data frames are matrix-like structures, in which the columns can be of different types.
Think of data frames as ‘data matrices’ with one row per observational unit but with
(possibly) both numerical and categorical variables. Many experiments are best described
by data frames: the treatments are categorical but the response is numeric.
See Section 6.3 [Data frames], page 29.
 functions are themselves objects in R which can be stored in the project’s workspace.
This provides a simple and convenient way to extend R. See Chapter 10 [Writing your
own functions], page 44.
Chapter 3: Objects, their modes and attributes 13
3 Objects, their modes and attributes
3.1 Intrinsic attributes: mode and length
The entities R operates on are technically known as objects. Examples are vectors of numeric
(real) or complex values, vectors of logical values and vectors of character strings. These
are known as “atomic” structures since their components are all of the same type, or mode,
namely numeric1, complex, logical, character and raw.
Vectors must have their values all of the same mode. Thus any given vector must be
unambiguously either logical, numeric, complex, character or raw. (The only apparent
exception to this rule is the special “value” listed as NA for quantities not available, but in
fact there are several types of NA). Note that a vector can be empty and still have a mode.
For example the empty character string vector is listed as character(0) and the empty
numeric vector as numeric(0).
R also operates on objects called lists, which are of mode list. These are ordered sequences
of objects which individually can be of any mode. lists are known as “recursive” rather
than atomic structures since their components can themselves be lists in their own right.
The other recursive structures are those of mode function and expression. Functions are
the objects that form part of the R system along with similar user written functions, which
we discuss in some detail later. Expressions as objects form an advanced part of R which
will not be discussed in this guide, except indirectly when we discuss formulae used with
modeling in R.
By the mode of an object we mean the basic type of its fundamental constituents. This
is a special case of a “property” of an object. Another property of every object is its length.
The functions mode(object) and length(object) can be used to find out the mode and
length of any defined structure2.
Further properties of an object are usually provided by attributes(object), see
Section 3.3 [Getting and setting attributes], page 14. Because of this, mode and length are
also called “intrinsic attributes” of an object.
For example, if z is a complex vector of length 100, then in an expression mode(z) is the
character string “complex” and length(z) is 100.
R caters for changes of mode almost anywhere it could be considered sensible to do so,
(and a few where it might not be). For example with
> z <- 0:9
we could put
> digits <- as.character(z)
after which digits is the character vector c(“0″, “1”, “2”, …, “9”). A further coercion,
or change of mode, reconstructs the numerical vector again:
1 numeric mode is actually an amalgam of two distinct modes, namely integer and double precision, as
explained in the manual.
2 Note however that length(object) does not always contain intrinsic useful information, e.g., when
object is a function.
Chapter 3: Objects, their modes and attributes 14
> d <- as.integer(digits)
Now d and z are the same.3 There is a large collection of functions of the form
as.something() for either coercion from one mode to another, or for investing an object
with some other attribute it may not already possess. The reader should consult the
different help files to become familiar with them.
3.2 Changing the length of an object
An “empty” object may still have a mode. For example
> e <- numeric()
makes e an empty vector structure of mode numeric. Similarly character() is a empty
character vector, and so on. Once an object of any size has been created, new components
may be added to it simply by giving it an index value outside its previous range. Thus
> e[3] <- 17
now makes e a vector of length 3, (the first two components of which are at this point both
NA). This applies to any structure at all, provided the mode of the additional component(s)
agrees with the mode of the object in the first place.
This automatic adjustment of lengths of an object is used often, for example in the
scan() function for input. (see Section 7.2 [The scan() function], page 33.)
Conversely to truncate the size of an object requires only an assignment to do so. Hence
if alpha is an object of length 10, then
> alpha <- alpha[2 * 1:5]
makes it an object of length 5 consisting of just the former components with even index.
(The old indices are not retained, of course.) We can then retain just the first three values
by
> length(alpha) <- 3
and vectors can be extended (by missing values) in the same way.
3.3 Getting and setting attributes
The function attributes(object) returns a list of all the non-intrinsic attributes currently
defined for that object. The function attr(object, name) can be used to select a specific
attribute. These functions are rarely used, except in rather special circumstances when
some new attribute is being created for some particular purpose, for example to associate
a creation date or an operator with an R object. The concept, however, is very important.
Some care should be exercised when assigning or deleting attributes since they are an
integral part of the object system used in R.
When it is used on the left hand side of an assignment it can be used either to associate
a new attribute with object or to change an existing one. For example
> attr(z, “dim”) <- c(10,10)
allows R to treat z as if it were a 10-by-10 matrix.
3 In general, coercion from numeric to character and back again will not be exactly reversible, because of
roundoff errors in the character representation.
Chapter 3: Objects, their modes and attributes 15
3.4 The class of an object
All objects in R have a class, reported by the function class. For simple vectors this is
just the mode, for example “numeric”, “logical”, “character” or “list”, but “matrix”,
“array”, “factor” and “data.frame” are other possible values.
A special attribute known as the class of the object is used to allow for an object-oriented
style4 of programming in R. For example if an object has class “data.frame”, it will be
printed in a certain way, the plot() function will display it graphically in a certain way,
and other so-called generic functions such as summary() will react to it as an argument in
a way sensitive to its class.
To remove temporarily the effects of class, use the function unclass(). For example if
winter has the class “data.frame” then
> winter
will print it in data frame form, which is rather like a matrix, whereas
> unclass(winter)
will print it as an ordinary list. Only in rather special situations do you need to use this
facility, but one is when you are learning to come to terms with the idea of class and generic
functions.
Generic functions and classes will be discussed further in Section 10.9 [Object orientation],
page 51, but only briefly.
4 A different style using ‘formal’ or ‘S4’ classes is provided in package methods.
Chapter 4: Ordered and unordered factors 16
4 Ordered and unordered factors
A factor is a vector object used to specify a discrete classification (grouping) of the components
of other vectors of the same length. R provides both ordered and unordered factors.
While the “real” application of factors is with model formulae (see Section 11.1.1 [Contrasts],
page 56), we here look at a specific example.
4.1 A specific example
Suppose, for example, we have a sample of 30 tax accountants from all the states and
territories of Australia1 and their individual state of origin is specified by a character vector
of state mnemonics as
> state <- c(“tas”, “sa”, “qld”, “nsw”, “nsw”, “nt”, “wa”, “wa”,
“qld”, “vic”, “nsw”, “vic”, “qld”, “qld”, “sa”, “tas”,
“sa”, “nt”, “wa”, “vic”, “qld”, “nsw”, “nsw”, “wa”,
“sa”, “act”, “nsw”, “vic”, “vic”, “act”)
Notice that in the case of a character vector, “sorted” means sorted in alphabetical order.
A factor is similarly created using the factor() function:
> statef <- factor(state)
The print() function handles factors slightly differently from other objects:
> statef
[1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
[16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
Levels: act nsw nt qld sa tas vic wa
To find out the levels of a factor the function levels() can be used.
> levels(statef)
[1] “act” “nsw” “nt” “qld” “sa” “tas” “vic” “wa”
4.2 The function tapply() and ragged arrays
To continue the previous example, suppose we have the incomes of the same tax accountants
in another vector (in suitably large units of money)
> incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
59, 46, 58, 43)
To calculate the sample mean income for each state we can now use the special function
tapply():
> incmeans <- tapply(incomes, statef, mean)
giving a means vector with the components labelled by the levels
act nsw nt qld sa tas vic wa
44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
1 Readers should note that there are eight states and territories in Australia, namely the Australian Capital
Territory, New South Wales, the Northern Territory, Queensland, South Australia, Tasmania, Victoria
and Western Australia.
Chapter 4: Ordered and unordered factors 17
The function tapply() is used to apply a function, here mean(), to each group of components
of the first argument, here incomes, defined by the levels of the second component,
here statef2, as if they were separate vector structures. The result is a structure of the
same length as the levels attribute of the factor containing the results. The reader should
consult the help document for more details.
Suppose further we needed to calculate the standard errors of the state income means.
To do this we need to write an R function to calculate the standard error for any given
vector. Since there is an builtin function var() to calculate the sample variance, such a
function is a very simple one liner, specified by the assignment:
> stderr <- function(x) sqrt(var(x)/length(x))
(Writing functions will be considered later in Chapter 10 [Writing your own functions],
page 44, and in this case was unnecessary as R also has a builtin function sd().) After this
assignment, the standard errors are calculated by
> incster <- tapply(incomes, statef, stderr)
and the values calculated are then
> incster
act nsw nt qld sa tas vic wa
1.5 4.3102 4.5 4.1061 2.7386 0.5 5.244 2.6575
As an exercise you may care to find the usual 95% confidence limits for the state mean
incomes. To do this you could use tapply() once more with the length() function to find
the sample sizes, and the qt() function to find the percentage points of the appropriate
t-distributions. (You could also investigate R’s facilities for t-tests.)
The function tapply() can also be used to handle more complicated indexing of a vector
by multiple categories. For example, we might wish to split the tax accountants by both
state and sex. However in this simple instance (just one factor) what happens can be
thought of as follows. The values in the vector are collected into groups corresponding
to the distinct entries in the factor. The function is then applied to each of these groups
individually. The value is a vector of function results, labelled by the levels attribute of
the factor.
The combination of a vector and a labelling factor is an example of what is sometimes
called a ragged array, since the subclass sizes are possibly irregular. When the subclass sizes
are all the same the indexing may be done implicitly and much more efficiently, as we see
in the next section.
4.3 Ordered factors
The levels of factors are stored in alphabetical order, or in the order they were specified to
factor if they were specified explicitly.
Sometimes the levels will have a natural ordering that we want to record and want our
statistical analysis to make use of. The ordered() function creates such ordered factors
but is otherwise identical to factor. For most purposes the only difference between ordered
2 Note that tapply() also works in this case when its second argument is not a factor, e.g.,
‘tapply(incomes, state)’, and this is true for quite a few other functions, since arguments are coerced
to factors when necessary (using as.factor()).
Chapter 4: Ordered and unordered factors 18
and unordered factors is that the former are printed showing the ordering of the levels, but
the contrasts generated for them in fitting linear models are different.
Chapter 5: Arrays and matrices 19
5 Arrays and matrices
5.1 Arrays
An array can be considered as a multiply subscripted collection of data entries, for example
numeric. R allows simple facilities for creating and handling arrays, and in particular the
special case of matrices.
A dimension vector is a vector of non-negative integers. If its length is k then the array
is k-dimensional, e.g. a matrix is a 2-dimensional array. The dimensions are indexed from
one up to the values given in the dimension vector.
A vector can be used by R as an array only if it has a dimension vector as its dim
attribute. Suppose, for example, z is a vector of 1500 elements. The assignment
> dim(z) <- c(3,5,100)
gives it the dim attribute that allows it to be treated as a 3 by 5 by 100 array.
Other functions such as matrix() and array() are available for simpler and more natural
looking assignments, as we shall see in Section 5.4 [The array() function], page 21.
The values in the data vector give the values in the array in the same order as they
would occur in FORTRAN, that is “column major order,” with the first subscript moving
fastest and the last subscript slowest.
For example if the dimension vector for an array, say a, is c(3,4,2) then there are
342 = 24 entries in a and the data vector holds them in the order a[1,1,1], a[2,1,1],
…, a[2,4,2], a[3,4,2].
Arrays can be one-dimensional: such arrays are usually treated in the same way as
vectors (including when printing), but the exceptions can cause confusion.
5.2 Array indexing. Subsections of an array
Individual elements of an array may be referenced by giving the name of the array followed
by the subscripts in square brackets, separated by commas.
More generally, subsections of an array may be specified by giving a sequence of index
vectors in place of subscripts; however if any index position is given an empty index vector,
then the full range of that subscript is taken.
Continuing the previous example, a[2,,] is a 42 array with dimension vector c(4,2)
and data vector containing the values
c(a[2,1,1], a[2,2,1], a[2,3,1], a[2,4,1],
a[2,1,2], a[2,2,2], a[2,3,2], a[2,4,2])
in that order. a[,,] stands for the entire array, which is the same as omitting the subscripts
entirely and using a alone.
For any array, say Z, the dimension vector may be referenced explicitly as dim(Z) (on
either side of an assignment).
Also, if an array name is given with just one subscript or index vector, then the corresponding
values of the data vector only are used; in this case the dimension vector is
ignored. This is not the case, however, if the single index is not a vector but itself an array,
as we next discuss.
Chapter 5: Arrays and matrices 20
5.3 Index matrices
As well as an index vector in any subscript position, a matrix may be used with a single
index matrix in order either to assign a vector of quantities to an irregular collection of
elements in the array, or to extract an irregular collection as a vector.
A matrix example makes the process clear. In the case of a doubly indexed array, an
index matrix may be given consisting of two columns and as many rows as desired. The
entries in the index matrix are the row and column indices for the doubly indexed array.
Suppose for example we have a 4 by 5 array X and we wish to do the following:
 Extract elements X[1,3], X[2,2] and X[3,1] as a vector structure, and
 Replace these entries in the array X by zeroes.
In this case we need a 3 by 2 subscript array, as in the following example.
> x <- array(1:20, dim=c(4,5)) # Generate a 4 by 5 array.
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> i <- array(c(1:3,3:1), dim=c(3,2))
> i # i is a 3 by 2 index array.
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
> x[i] # Extract those elements
[1] 9 6 3
> x[i] <- 0 # Replace those elements by zeros.
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 13 17
[2,] 2 0 10 14 18
[3,] 0 7 11 15 19
[4,] 4 8 12 16 20
>
Negative indices are not allowed in index matrices. NA and zero values are allowed: rows in
the index matrix containing a zero are ignored, and rows containing an NA produce an NA
in the result.
As a less trivial example, suppose we wish to generate an (unreduced) design matrix
for a block design defined by factors blocks (b levels) and varieties (v levels). Further
suppose there are n plots in the experiment. We could proceed as follows:
> Xb <- matrix(0, n, b)
> Xv <- matrix(0, n, v)
> ib <- cbind(1:n, blocks)
> iv <- cbind(1:n, varieties)
Chapter 5: Arrays and matrices 21
> Xb[ib] <- 1
> Xv[iv] <- 1
> X <- cbind(Xb, Xv)
To construct the incidence matrix, N say, we could use
> N <- crossprod(Xb, Xv)
However a simpler direct way of producing this matrix is to use table():
> N <- table(blocks, varieties)
Index matrices must be numerical: any other form of matrix (e.g. a logical or character
matrix) supplied as a matrix is treated as an indexing vector.
5.4 The array() function
As well as giving a vector structure a dim attribute, arrays can be constructed from vectors
by the array function, which has the form
> Z <- array(data_vector, dim_vector)
For example, if the vector h contains 24 or fewer, numbers then the command
> Z <- array(h, dim=c(3,4,2))
would use h to set up 3 by 4 by 2 array in Z. If the size of h is exactly 24 the result is the
same as
> Z <- h ; dim(Z) <- c(3,4,2)
However if h is shorter than 24, its values are recycled from the beginning again to make
it up to size 24 (see Section 5.4.1 [The recycling rule], page 21) but dim(h) <- c(3,4,2)
would signal an error about mismatching length. As an extreme but common example
> Z <- array(0, c(3,4,2))
makes Z an array of all zeros.
At this point dim(Z) stands for the dimension vector c(3,4,2), and Z[1:24] stands
for the data vector as it was in h, and Z[] with an empty subscript or Z with no subscript
stands for the entire array as an array.
Arrays may be used in arithmetic expressions and the result is an array formed by
element-by-element operations on the data vector. The dim attributes of operands generally
need to be the same, and this becomes the dimension vector of the result. So if A, B and C
are all similar arrays, then
> D <- 2*A*B + C + 1
makes D a similar array with its data vector being the result of the given element-by-element
operations. However the precise rule concerning mixed array and vector calculations has to
be considered a little more carefully.
5.4.1 Mixed vector and array arithmetic. The recycling rule
The precise rule affecting element by element mixed calculations with vectors and arrays is
somewhat quirky and hard to find in the references. From experience we have found the
following to be a reliable guide.
 The expression is scanned from left to right.
Chapter 5: Arrays and matrices 22
 Any short vector operands are extended by recycling their values until they match the
size of any other operands.
 As long as short vectors and arrays only are encountered, the arrays must all have the
same dim attribute or an error results.
 Any vector operand longer than a matrix or array operand generates an error.
 If array structures are present and no error or coercion to vector has been precipitated,
the result is an array structure with the common dim attribute of its array operands.
5.5 The outer product of two arrays
An important operation on arrays is the outer product. If a and b are two numeric arrays,
their outer product is an array whose dimension vector is obtained by concatenating their
two dimension vectors (order is important), and whose data vector is got by forming all
possible products of elements of the data vector of a with those of b. The outer product is
formed by the special operator %o%:
> ab <- a %o% b
An alternative is
> ab <- outer(a, b, “*”)
The multiplication function can be replaced by an arbitrary function of two variables.
For example if we wished to evaluate the function f(x; y) = cos(y)=(1 + x2) over a regular
grid of values with x- and y-coordinates defined by the R vectors x and y respectively, we
could proceed as follows:
> f <- function(x, y) cos(y)/(1 + x^2)
> z <- outer(x, y, f)
In particular the outer product of two ordinary vectors is a doubly subscripted array
(that is a matrix, of rank at most 1). Notice that the outer product operator is of course
non-commutative. Defining your own R functions will be considered further in Chapter 10
[Writing your own functions], page 44.
An example: Determinants of 2 by 2 single-digit matrices
As an artificial but cute example, consider the determinants of 2 by 2 matrices [a; b; c; d]
where each entry is a non-negative integer in the range 0; 1; : : : ; 9, that is a digit.
The problem is to find the determinants, ad 􀀀 bc, of all possible matrices of this form
and represent the frequency with which each value occurs as a high density plot. This
amounts to finding the probability distribution of the determinant if each digit is chosen
independently and uniformly at random.
A neat way of doing this uses the outer() function twice:
> d <- outer(0:9, 0:9)
> fr <- table(outer(d, d, “-“))
> plot(as.numeric(names(fr)), fr, type=”h”,
xlab=”Determinant”, ylab=”Frequency”)
Notice the coercion of the names attribute of the frequency table to numeric in order to
recover the range of the determinant values. The “obvious” way of doing this problem with
for loops, to be discussed in Chapter 9 [Loops and conditional execution], page 42, is so
inefficient as to be impractical.
Chapter 5: Arrays and matrices 23
It is also perhaps surprising that about 1 in 20 such matrices is singular.
5.6 Generalized transpose of an array
The function aperm(a, perm) may be used to permute an array, a. The argument perm
must be a permutation of the integers f1; : : : ; kg, where k is the number of subscripts in a.
The result of the function is an array of the same size as a but with old dimension given by
perm[j] becoming the new j-th dimension. The easiest way to think of this operation is
as a generalization of transposition for matrices. Indeed if A is a matrix, (that is, a doubly
subscripted array) then B given by
> B <- aperm(A, c(2,1))
is just the transpose of A. For this special case a simpler function t() is available, so we
could have used B <- t(A).
5.7 Matrix facilities
As noted above, a matrix is just an array with two subscripts. However it is such an
important special case it needs a separate discussion. R contains many operators and
functions that are available only for matrices. For example t(X) is the matrix transpose
function, as noted above. The functions nrow(A) and ncol(A) give the number of rows and
columns in the matrix A respectively.
5.7.1 Matrix multiplication
The operator %*% is used for matrix multiplication. An n by 1 or 1 by n matrix may of
course be used as an n-vector if in the context such is appropriate. Conversely, vectors
which occur in matrix multiplication expressions are automatically promoted either to row
or column vectors, whichever is multiplicatively coherent, if possible, (although this is not
always unambiguously possible, as we see later).
If, for example, A and B are square matrices of the same size, then
> A * B
is the matrix of element by element products and
> A %*% B
is the matrix product. If x is a vector, then
> x %*% A %*% x
is a quadratic form.1
The function crossprod() forms “crossproducts”, meaning that crossprod(X, y) is
the same as t(X) %*% y but the operation is more efficient. If the second argument to
crossprod() is omitted it is taken to be the same as the first.
The meaning of diag() depends on its argument. diag(v), where v is a vector, gives
a diagonal matrix with elements of the vector as the diagonal entries. On the other hand
1 Note that x %*% x is ambiguous, as it could mean either xT x or xxT , where x is the column form. In such
cases the smaller matrix seems implicitly to be the interpretation adopted, so the scalar xT x is in this
case the result. The matrix xxT may be calculated either by cbind(x) %*% x or x %*% rbind(x) since
the result of rbind() or cbind() is always a matrix. However, the best way to compute xT x or xxT is
crossprod(x) or x %o% x respectively.
Chapter 5: Arrays and matrices 24
diag(M), where M is a matrix, gives the vector of main diagonal entries of M. This is the
same convention as that used for diag() in Matlab. Also, somewhat confusingly, if k is a
single numeric value then diag(k) is the k by k identity matrix!
5.7.2 Linear equations and inversion
Solving linear equations is the inverse of matrix multiplication. When after
> b <- A %*% x
only A and b are given, the vector x is the solution of that linear equation system. In R,
> solve(A,b)
solves the system, returning x (up to some accuracy loss). Note that in linear algebra,
formally x = A􀀀1b where A􀀀1 denotes the inverse of A, which can be computed by
solve(A)
but rarely is needed. Numerically, it is both inefficient and potentially unstable to compute
x <- solve(A) %*% b instead of solve(A,b).
The quadratic form xTA􀀀1x which is used in multivariate computations, should be computed
by something like2 x %*% solve(A,x), rather than computing the inverse of A.
5.7.3 Eigenvalues and eigenvectors
The function eigen(Sm) calculates the eigenvalues and eigenvectors of a symmetric matrix
Sm. The result of this function is a list of two components named values and vectors.
The assignment
> ev <- eigen(Sm)
will assign this list to ev. Then ev$val is the vector of eigenvalues of Sm and ev$vec is the
matrix of corresponding eigenvectors. Had we only needed the eigenvalues we could have
used the assignment:
> evals <- eigen(Sm)$values
evals now holds the vector of eigenvalues and the second component is discarded. If the
expression
> eigen(Sm)
is used by itself as a command the two components are printed, with their names. For large
matrices it is better to avoid computing the eigenvectors if they are not needed by using
the expression
> evals <- eigen(Sm, only.values = TRUE)$values
5.7.4 Singular value decomposition and determinants
The function svd(M) takes an arbitrary matrix argument, M, and calculates the singular
value decomposition of M. This consists of a matrix of orthonormal columns U with the
same column space as M, a second matrix of orthonormal columns V whose column space
is the row space of M and a diagonal matrix of positive entries D such that M = U %*% D %*%
t(V). D is actually returned as a vector of the diagonal elements. The result of svd(M) is
actually a list of three components named d, u and v, with evident meanings.
2 Even better would be to form a matrix square root B with A = BBT and find the squared length of the
solution of By = x, perhaps using the Cholesky or eigendecomposition of A.
Chapter 5: Arrays and matrices 25
If M is in fact square, then, it is not hard to see that
> absdetM <- prod(svd(M)$d)
calculates the absolute value of the determinant of M. If this calculation were needed often
with a variety of matrices it could be defined as an R function
> absdet <- function(M) prod(svd(M)$d)
after which we could use absdet() as just another R function. As a further trivial but
potentially useful example, you might like to consider writing a function, say tr(), to
calculate the trace of a square matrix. [Hint: You will not need to use an explicit loop.
Look again at the diag() function.]
R has a builtin function det to calculate a determinant, including the sign, and another,
determinant, to give the sign and modulus (optionally on log scale),
5.7.5 Least squares fitting and the QR decomposition
The function lsfit() returns a list giving results of a least squares fitting procedure. An
assignment such as
> ans <- lsfit(X, y)
gives the results of a least squares fit where y is the vector of observations and X is the
design matrix. See the help facility for more details, and also for the follow-up function
ls.diag() for, among other things, regression diagnostics. Note that a grand mean term is
automatically included and need not be included explicitly as a column of X. Further note
that you almost always will prefer using lm(.) (see Section 11.2 [Linear models], page 57)
to lsfit() for regression modelling.
Another closely related function is qr() and its allies. Consider the following assignments
> Xplus <- qr(X)
> b <- qr.coef(Xplus, y)
> fit <- qr.fitted(Xplus, y)
> res <- qr.resid(Xplus, y)
These compute the orthogonal projection of y onto the range of X in fit, the projection
onto the orthogonal complement in res and the coefficient vector for the projection in b,
that is, b is essentially the result of the Matlab ‘backslash’ operator.
It is not assumed that X has full column rank. Redundancies will be discovered and
removed as they are found.
This alternative is the older, low-level way to perform least squares calculations. Although
still useful in some contexts, it would now generally be replaced by the statistical
models features, as will be discussed in Chapter 11 [Statistical models in R], page 54.
5.8 Forming partitioned matrices, cbind() and rbind()
As we have already seen informally, matrices can be built up from other vectors and matrices
by the functions cbind() and rbind(). Roughly cbind() forms matrices by binding
together matrices horizontally, or column-wise, and rbind() vertically, or row-wise.
In the assignment
> X <- cbind(arg_1, arg_2, arg_3, …)
Chapter 5: Arrays and matrices 26
the arguments to cbind() must be either vectors of any length, or matrices with the same
column size, that is the same number of rows. The result is a matrix with the concatenated
arguments arg 1, arg 2, . . . forming the columns.
If some of the arguments to cbind() are vectors they may be shorter than the column
size of any matrices present, in which case they are cyclically extended to match the matrix
column size (or the length of the longest vector if no matrices are given).
The function rbind() does the corresponding operation for rows. In this case any vector
argument, possibly cyclically extended, are of course taken as row vectors.
Suppose X1 and X2 have the same number of rows. To combine these by columns into a
matrix X, together with an initial column of 1s we can use
> X <- cbind(1, X1, X2)
The result of rbind() or cbind() always has matrix status. Hence cbind(x) and
rbind(x) are possibly the simplest ways explicitly to allow the vector x to be treated as a
column or row matrix respectively.
5.9 The concatenation function, c(), with arrays
It should be noted that whereas cbind() and rbind() are concatenation functions that
respect dim attributes, the basic c() function does not, but rather clears numeric objects
of all dim and dimnames attributes. This is occasionally useful in its own right.
The official way to coerce an array back to a simple vector object is to use as.vector()
> vec <- as.vector(X)
However a similar result can be achieved by using c() with just one argument, simply
for this side-effect:
> vec <- c(X)
There are slight differences between the two, but ultimately the choice between them is
largely a matter of style (with the former being preferable).
5.10 Frequency tables from factors
Recall that a factor defines a partition into groups. Similarly a pair of factors defines a
two way cross classification, and so on. The function table() allows frequency tables to be
calculated from equal length factors. If there are k factor arguments, the result is a k-way
array of frequencies.
Suppose, for example, that statef is a factor giving the state code for each entry in a
data vector. The assignment
> statefr <- table(statef)
gives in statefr a table of frequencies of each state in the sample. The frequencies are
ordered and labelled by the levels attribute of the factor. This simple case is equivalent
to, but more convenient than,
> statefr <- tapply(statef, statef, length)
Further suppose that incomef is a factor giving a suitably defined “income class” for
each entry in the data vector, for example with the cut() function:
Chapter 5: Arrays and matrices 27
> factor(cut(incomes, breaks = 35+10*(0:7))) -> incomef
Then to calculate a two-way table of frequencies:
> table(incomef,statef)
statef
incomef act nsw nt qld sa tas vic wa
(35,45] 1 1 0 1 0 0 1 0
(45,55] 1 1 1 1 2 0 1 3
(55,65] 0 3 1 3 2 2 2 1
(65,75] 0 1 0 0 0 0 1 0
Extension to higher-way frequency tables is immediate.
Chapter 6: Lists and data frames 28
6 Lists and data frames
6.1 Lists
An R list is an object consisting of an ordered collection of objects known as its components.
There is no particular need for the components to be of the same mode or type, and,
for example, a list could consist of a numeric vector, a logical value, a matrix, a complex
vector, a character array, a function, and so on. Here is a simple example of how to make
a list:
> Lst <- list(name=”Fred”, wife=”Mary”, no.children=3,
child.ages=c(4,7,9))
Components are always numbered and may always be referred to as such. Thus if Lst is
the name of a list with four components, these may be individually referred to as Lst[[1]],
Lst[[2]], Lst[[3]] and Lst[[4]]. If, further, Lst[[4]] is a vector subscripted array then
Lst[[4]][1] is its first entry.
If Lst is a list, then the function length(Lst) gives the number of (top level) components
it has.
Components of lists may also be named, and in this case the component may be referred
to either by giving the component name as a character string in place of the number in
double square brackets, or, more conveniently, by giving an expression of the form
> name$component_name
for the same thing.
This is a very useful convention as it makes it easier to get the right component if you
forget the number.
So in the simple example given above:
Lst$name is the same as Lst[[1]] and is the string “Fred”,
Lst$wife is the same as Lst[[2]] and is the string “Mary”,
Lst$child.ages[1] is the same as Lst[[4]][1] and is the number 4.
Additionally, one can also use the names of the list components in double square brackets,
i.e., Lst[["name"]] is the same as Lst$name. This is especially useful, when the name of
the component to be extracted is stored in another variable as in
> x <- “name”; Lst[[x]]
It is very important to distinguish Lst[[1]] from Lst[1]. ‘[[...]]’ is the operator
used to select a single element, whereas ‘[...]’ is a general subscripting operator. Thus the
former is the first object in the list Lst, and if it is a named list the name is not included.
The latter is a sublist of the list Lst consisting of the first entry only. If it is a named list,
the names are transferred to the sublist.
The names of components may be abbreviated down to the minimum number of letters
needed to identify them uniquely. Thus Lst$coefficients may be minimally specified as
Lst$coe and Lst$covariance as Lst$cov.
The vector of names is in fact simply an attribute of the list like any other and may be
handled as such. Other structures besides lists may, of course, similarly be given a names
attribute also.
Chapter 6: Lists and data frames 29
6.2 Constructing and modifying lists
New lists may be formed from existing objects by the function list(). An assignment of
the form
> Lst <- list(name_1=object_1, …, name_m=object_m)
sets up a list Lst of m components using object 1, . . . , object m for the components and
giving them names as specified by the argument names, (which can be freely chosen). If
these names are omitted, the components are numbered only. The components used to form
the list are copied when forming the new list and the originals are not affected.
Lists, like any subscripted object, can be extended by specifying additional components.
For example
> Lst[5] <- list(matrix=Mat)
6.2.1 Concatenating lists
When the concatenation function c() is given list arguments, the result is an object of mode
list also, whose components are those of the argument lists joined together in sequence.
> list.ABC <- c(list.A, list.B, list.C)
Recall that with vector objects as arguments the concatenation function similarly joined
together all arguments into a single vector structure. In this case all other attributes, such
as dim attributes, are discarded.
6.3 Data frames
A data frame is a list with class “data.frame”. There are restrictions on lists that may be
made into data frames, namely
 The components must be vectors (numeric, character, or logical), factors, numeric
matrices, lists, or other data frames.
 Matrices, lists, and data frames provide as many variables to the new data frame as
they have columns, elements, or variables, respectively.
 Numeric vectors, logicals and factors are included as is, and character vectors are
coerced to be factors, whose levels are the unique values appearing in the vector.
 Vector structures appearing as variables of the data frame must all have the same
length, and matrix structures must all have the same row size.
A data frame may for many purposes be regarded as a matrix with columns possibly
of differing modes and attributes. It may be displayed in matrix form, and its rows and
columns extracted using matrix indexing conventions.
6.3.1 Making data frames
Objects satisfying the restrictions placed on the columns (components) of a data frame may
be used to form one using the function data.frame:
> accountants <- data.frame(home=statef, loot=incomes, shot=incomef)
A list whose components conform to the restrictions of a data frame may be coerced into
a data frame using the function as.data.frame()
Chapter 6: Lists and data frames 30
The simplest way to construct a data frame from scratch is to use the read.table()
function to read an entire data frame from an external file. This is discussed further in
Chapter 7 [Reading data from files], page 32.
6.3.2 attach() and detach()
The $ notation, such as accountants$statef, for list components is not always very convenient.
A useful facility would be somehow to make the components of a list or data frame
temporarily visible as variables under their component name, without the need to quote
the list name explicitly each time.
The attach() function takes a ‘database’ such as a list or data frame as its argument.
Thus suppose lentils is a data frame with three variables lentils$u, lentils$v,
lentils$w. The attach
> attach(lentils)
places the data frame in the search path at position 2, and provided there are no variables
u, v or w in position 1, u, v and w are available as variables from the data frame in their
own right. At this point an assignment such as
> u <- v+w
does not replace the component u of the data frame, but rather masks it with another
variable u in the working directory at position 1 on the search path. To make a permanent
change to the data frame itself, the simplest way is to resort once again to the $ notation:
> lentils$u <- v+w
However the new value of component u is not visible until the data frame is detached
and attached again.
To detach a data frame, use the function
> detach()
More precisely, this statement detaches from the search path the entity currently at
position 2. Thus in the present context the variables u, v and w would be no longer visible,
except under the list notation as lentils$u and so on. Entities at positions greater than 2
on the search path can be detached by giving their number to detach, but it is much safer
to always use a name, for example by detach(lentils) or detach(“lentils”)
Note: In R lists and data frames can only be attached at position 2 or above,
and what is attached is a copy of the original object. You can alter the attached
values via assign, but the original list or data frame is unchanged.
6.3.3 Working with data frames
A useful convention that allows you to work with many different problems comfortably
together in the same working directory is
 gather together all variables for any well defined and separate problem in a data frame
under a suitably informative name;
 when working with a problem attach the appropriate data frame at position 2, and use
the working directory at level 1 for operational quantities and temporary variables;
 before leaving a problem, add any variables you wish to keep for future reference to
the data frame using the $ form of assignment, and then detach();
Chapter 6: Lists and data frames 31
 finally remove all unwanted variables from the working directory and keep it as clean
of left-over temporary variables as possible.
In this way it is quite simple to work with many problems in the same directory, all of
which have variables named x, y and z, for example.
6.3.4 Attaching arbitrary lists
attach() is a generic function that allows not only directories and data frames to be
attached to the search path, but other classes of object as well. In particular any object of
mode “list” may be attached in the same way:
> attach(any.old.list)
Anything that has been attached can be detached by detach, by position number or,
preferably, by name.
6.3.5 Managing the search path
The function search shows the current search path and so is a very useful way to keep track
of which data frames and lists (and packages) have been attached and detached. Initially
it gives
> search()
[1] “.GlobalEnv” “Autoloads” “package:base”
where .GlobalEnv is the workspace.1
After lentils is attached we have
> search()
[1] “.GlobalEnv” “lentils” “Autoloads” “package:base”
> ls(2)
[1] “u” “v” “w”
and as we see ls (or objects) can be used to examine the contents of any position on the
search path.
Finally, we detach the data frame and confirm it has been removed from the search path.
> detach(“lentils”)
> search()
[1] “.GlobalEnv” “Autoloads” “package:base”
1 See the on-line help for autoload for the meaning of the second term.
Chapter 7: Reading data from files 32
7 Reading data from files
Large data objects will usually be read as values from external files rather than entered
during an R session at the keyboard. R input facilities are simple and their requirements
are fairly strict and even rather inflexible. There is a clear presumption by the designers of
R that you will be able to modify your input files using other tools, such as file editors or
Perl1 to fit in with the requirements of R. Generally this is very simple.
If variables are to be held mainly in data frames, as we strongly suggest they should be,
an entire data frame can be read directly with the read.table() function. There is also a
more primitive input function, scan(), that can be called directly.
For more details on importing data into R and also exporting data, see the R Data
Import/Export manual.
7.1 The read.table() function
To read an entire data frame directly, the external file will normally have a special form.
 The first line of the file should have a name for each variable in the data frame.
 Each additional line of the file has as its first item a row label and the values for each
variable.
If the file has one fewer item in its first line than in its second, this arrangement is
presumed to be in force. So the first few lines of a file to be read as a data frame might
look as follows.

Input file form with names and row labels:
Price Floor Area Rooms Age Cent.heat
01 52.00 111.0 830 5 6.2 no
02 54.75 128.0 710 5 7.5 no
03 57.50 101.0 1000 5 4.2 no
04 57.50 131.0 690 6 8.8 no
05 59.75 93.0 900 5 1.9 yes

By default numeric items (except row labels) are read as numeric variables and nonnumeric
variables, such as Cent.heat in the example, as factors. This can be changed if
necessary.
The function read.table() can then be used to read the data frame directly
> HousePrice <- read.table(“houses.data”)
Often you will want to omit including the row labels directly and use the default labels.
In this case the file may omit the row label column as in the following.
1 Under UNIX, the utilities Sed or Awk can be used.
Chapter 7: Reading data from files 33

Input file form without row labels:
Price Floor Area Rooms Age Cent.heat
52.00 111.0 830 5 6.2 no
54.75 128.0 710 5 7.5 no
57.50 101.0 1000 5 4.2 no
57.50 131.0 690 6 8.8 no
59.75 93.0 900 5 1.9 yes

The data frame may then be read as
> HousePrice <- read.table(“houses.data”, header=TRUE)
where the header=TRUE option specifies that the first line is a line of headings, and hence,
by implication from the form of the file, that no explicit row labels are given.
7.2 The scan() function
Suppose the data vectors are of equal length and are to be read in parallel. Further suppose
that there are three vectors, the first of mode character and the remaining two of mode
numeric, and the file is ‘input.dat’. The first step is to use scan() to read in the three
vectors as a list, as follows
> inp <- scan(“input.dat”, list(“”,0,0))
The second argument is a dummy list structure that establishes the mode of the three
vectors to be read. The result, held in inp, is a list whose components are the three vectors
read in. To separate the data items into three separate vectors, use assignments like
> label <- inp[[1]]; x <- inp[[2]]; y <- inp[[3]]
More conveniently, the dummy list can have named components, in which case the names
can be used to access the vectors read in. For example
> inp <- scan(“input.dat”, list(id=””, x=0, y=0))
If you wish to access the variables separately they may either be re-assigned to variables
in the working frame:
> label <- inp$id; x <- inp$x; y <- inp$y
or the list may be attached at position 2 of the search path (see Section 6.3.4 [Attaching
arbitrary lists], page 31).
If the second argument is a single value and not a list, a single vector is read in, all
components of which must be of the same mode as the dummy value.
> X <- matrix(scan(“light.dat”, 0), ncol=5, byrow=TRUE)
There are more elaborate input facilities available and these are detailed in the manuals.
7.3 Accessing builtin datasets
Around 100 datasets are supplied with R (in package datasets), and others are available in
packages (including the recommended packages supplied with R). To see the list of datasets
currently available use
Chapter 7: Reading data from files 34
data()
As from R version 2.0.0 all the datasets supplied with R are available directly by name.
However, many packages still use the earlier convention in which data was also used to load
datasets into R, for example
data(infert)
and this can still be used with the standard packages (as in this example). In most cases
this will load an R object of the same name. However, in a few cases it loads several objects,
so see the on-line help for the object to see what to expect.
7.3.1 Loading data from other R packages
To access data from a particular package, use the package argument, for example
data(package=”rpart”)
data(Puromycin, package=”datasets”)
If a package has been attached by library, its datasets are automatically included in
the search.
User-contributed packages can be a rich source of datasets.
7.4 Editing data
When invoked on a data frame or matrix, edit brings up a separate spreadsheet-like environment
for editing. This is useful for making small changes once a data set has been read.
The command
> xnew <- edit(xold)
will allow you to edit your data set xold, and on completion the changed object is assigned
to xnew. If you want to alter the original dataset xold, the simplest way is to use fix(xold),
which is equivalent to xold <- edit(xold).
Use
> xnew <- edit(data.frame())
to enter new data via the spreadsheet interface.
Chapter 8: Probability distributions 35
8 Probability distributions
8.1 R as a set of statistical tables
One convenient use of R is to provide a comprehensive set of statistical tables. Functions
are provided to evaluate the cumulative distribution function P(X  x), the probability
density function and the quantile function (given q, the smallest x such that P(X  x) > q),
and to simulate from the distribution.
Distribution R name additional arguments
beta beta shape1, shape2, ncp
binomial binom size, prob
Cauchy cauchy location, scale
chi-squared chisq df, ncp
exponential exp rate
F f df1, df2, ncp
gamma gamma shape, scale
geometric geom prob
hypergeometric hyper m, n, k
log-normal lnorm meanlog, sdlog
logistic logis location, scale
negative binomial nbinom size, prob
normal norm mean, sd
Poisson pois lambda
Student’s t t df, ncp
uniform unif min, max
Weibull weibull shape, scale
Wilcoxon wilcox m, n
Prefix the name given here by ‘d’ for the density, ‘p’ for the CDF, ‘q’ for the quantile
function and ‘r’ for simulation (random deviates). The first argument is x for dxxx, q for
pxxx, p for qxxx and n for rxxx (except for rhyper and rwilcox, for which it is nn). In not
quite all cases is the non-centrality parameter ncp are currently available: see the on-line
help for details.
The pxxx and qxxx functions all have logical arguments lower.tail and log.p and
the dxxx ones have log. This allows, e.g., getting the cumulative (or “integrated”) hazard
function, H(t) = 􀀀log(1 􀀀 F(t)), by
– pxxx(t, …, lower.tail = FALSE, log.p = TRUE)
or more accurate log-likelihoods (by dxxx(…, log = TRUE)), directly.
In addition there are functions ptukey and qtukey for the distribution of the studentized
range of samples from a normal distribution.
Here are some examples
> ## 2-tailed p-value for t distribution
> 2*pt(-2.43, df = 13)
> ## upper 1% point for an F(2, 7) distribution
> qf(0.01, 2, 7, lower.tail = FALSE)
Chapter 8: Probability distributions 36
8.2 Examining the distribution of a set of data
Given a (univariate) set of data we can examine its distribution in a large number of ways.
The simplest is to examine the numbers. Two slightly different summaries are given by
summary and fivenum and a display of the numbers by stem (a “stem and leaf” plot).
> attach(faithful)
> summary(eruptions)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.600 2.163 4.000 3.488 4.454 5.100
> fivenum(eruptions)
[1] 1.6000 2.1585 4.0000 4.4585 5.1000
> stem(eruptions)
The decimal point is 1 digit(s) to the left of the |
16 | 070355555588
18 | 000022233333335577777777888822335777888
20 | 00002223378800035778
22 | 0002335578023578
24 | 00228
26 | 23
28 | 080
30 | 7
32 | 2337
34 | 250077
36 | 0000823577
38 | 2333335582225577
40 | 0000003357788888002233555577778
42 | 03335555778800233333555577778
44 | 02222335557780000000023333357778888
46 | 0000233357700000023578
48 | 00000022335800333
50 | 0370
A stem-and-leaf plot is like a histogram, and R has a function hist to plot histograms.
> hist(eruptions)
## make the bins smaller, make a plot of density
> hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE)
> lines(density(eruptions, bw=0.1))
> rug(eruptions) # show the actual data points
More elegant density plots can be made by density, and we added a line produced by
density in this example. The bandwidth bw was chosen by trial-and-error as the default
gives too much smoothing (it usually does for “interesting” densities). (Better automated
Chapter 8: Probability distributions 37
methods of bandwidth choice are available, and in this example bw = “SJ” gives a good
result.)
Histogram of eruptions
eruptions
Relative Frequency
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
We can plot the empirical cumulative distribution function by using the function ecdf.
> plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)
This distribution is obviously far from any standard distribution. How about the righthand
mode, say eruptions of longer than 3 minutes? Let us fit a normal distribution and
overlay the fitted CDF.
> long <- eruptions[eruptions > 3]
> plot(ecdf(long), do.points=FALSE, verticals=TRUE)
> x <- seq(3, 5.4, 0.01)
> lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)
3.0 3.5 4.0 4.5 5.0
0.0 0.2 0.4 0.6 0.8 1.0
ecdf(long)
x
Fn(x)
Quantile-quantile (Q-Q) plots can help us examine this more carefully.
Chapter 8: Probability distributions 38
par(pty=”s”) # arrange for a square figure region
qqnorm(long); qqline(long)
which shows a reasonable fit but a shorter right tail than one would expect from a normal
distribution. Let us compare this with some simulated data from a t distribution
−2 −1 0 1 2
3.0 3.5 4.0 4.5 5.0
Normal Q−Q Plot
Theoretical Quantiles
Sample Quantiles
x <- rt(250, df = 5)
qqnorm(x); qqline(x)
which will usually (if it is a random sample) show longer tails than expected for a normal.
We can make a Q-Q plot against the generating distribution by
qqplot(qt(ppoints(250), df = 5), x, xlab = “Q-Q plot for t dsn”)
qqline(x)
Finally, we might want a more formal test of agreement with normality (or not). R
provides the Shapiro-Wilk test
> shapiro.test(long)
Shapiro-Wilk normality test
data: long
W = 0.9793, p-value = 0.01052
and the Kolmogorov-Smirnov test
> ks.test(long, “pnorm”, mean = mean(long), sd = sqrt(var(long)))
One-sample Kolmogorov-Smirnov test
data: long
D = 0.0661, p-value = 0.4284
alternative hypothesis: two.sided
(Note that the distribution theory is not valid here as we have estimated the parameters of
the normal distribution from the same sample.)
Chapter 8: Probability distributions 39
8.3 One- and two-sample tests
So far we have compared a single sample to a normal distribution. A much more common
operation is to compare aspects of two samples. Note that in R, all “classical” tests including
the ones used below are in package stats which is normally loaded.
Consider the following sets of data on the latent heat of the fusion of ice (cal/gm) from
Rice (1995, p.490)
Method A: 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
80.05 80.03 80.02 80.00 80.02
Method B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
Boxplots provide a simple graphical comparison of the two samples.
A <- scan()
79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
80.05 80.03 80.02 80.00 80.02
B <- scan()
80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
boxplot(A, B)
which indicates that the first group tends to give higher results than the second.
1 2
79.94 79.96 79.98 80.00 80.02 80.04
To test for the equality of the means of the two examples, we can use an unpaired t-test
by
> t.test(A, B)
Welch Two Sample t-test
data: A and B
t = 3.2499, df = 12.027, p-value = 0.00694
alternative hypothesis: true difference in means is not equal to 0
Chapter 8: Probability distributions 40
95 percent confidence interval:
0.01385526 0.07018320
sample estimates:
mean of x mean of y
80.02077 79.97875
which does indicate a significant difference, assuming normality. By default the R function
does not assume equality of variances in the two samples (in contrast to the similar S-Plus
t.test function). We can use the F test to test for equality in the variances, provided that
the two samples are from normal populations.
> var.test(A, B)
F test to compare two variances
data: A and B
F = 0.5837, num df = 12, denom df = 7, p-value = 0.3938
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.1251097 2.1052687
sample estimates:
ratio of variances
0.5837405
which shows no evidence of a significant difference, and so we can use the classical t-test
that assumes equality of the variances.
> t.test(A, B, var.equal=TRUE)
Two Sample t-test
data: A and B
t = 3.4722, df = 19, p-value = 0.002551
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.01669058 0.06734788
sample estimates:
mean of x mean of y
80.02077 79.97875
All these tests assume normality of the two samples. The two-sample Wilcoxon (or
Mann-Whitney) test only assumes a common continuous distribution under the null hypothesis.
> wilcox.test(A, B)
Wilcoxon rank sum test with continuity correction
data: A and B
W = 89, p-value = 0.007497
alternative hypothesis: true location shift is not equal to 0
Chapter 8: Probability distributions 41
Warning message:
Cannot compute exact p-value with ties in: wilcox.test(A, B)
Note the warning: there are several ties in each sample, which suggests strongly that these
data are from a discrete distribution (probably due to rounding).
There are several ways to compare graphically the two samples. We have already seen
a pair of boxplots. The following
> plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B))
> plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE)
will show the two empirical CDFs, and qqplot will perform a Q-Q plot of the two samples.
The Kolmogorov-Smirnov test is of the maximal vertical distance between the two ecdf’s,
assuming a common continuous distribution:
> ks.test(A, B)
Two-sample Kolmogorov-Smirnov test
data: A and B
D = 0.5962, p-value = 0.05919
alternative hypothesis: two-sided
Warning message:
cannot compute correct p-values with ties in: ks.test(A, B)
Chapter 9: Grouping, loops and conditional execution 42
9 Grouping, loops and conditional execution
9.1 Grouped expressions
R is an expression language in the sense that its only command type is a function or
expression which returns a result. Even an assignment is an expression whose result is the
value assigned, and it may be used wherever any expression may be used; in particular
multiple assignments are possible.
Commands may be grouped together in braces, {expr_1; …; expr_m}, in which case
the value of the group is the result of the last expression in the group evaluated. Since such
a group is also an expression it may, for example, be itself included in parentheses and used
a part of an even larger expression, and so on.
9.2 Control statements
9.2.1 Conditional execution: if statements
The language has available a conditional construction of the form
> if (expr_1) expr_2 else expr_3
where expr 1 must evaluate to a single logical value and the result of the entire expression
is then evident.
The “short-circuit” operators && and || are often used as part of the condition in an if
statement. Whereas & and | apply element-wise to vectors, && and || apply to vectors of
length one, and only evaluate their second argument if necessary.
There is a vectorized version of the if/else construct, the ifelse function. This has the
form ifelse(condition, a, b) and returns a vector of the length of its longest argument,
with elements a[i] if condition[i] is true, otherwise b[i].
9.2.2 Repetitive execution: for loops, repeat and while
There is also a for loop construction which has the form
> for (name in expr_1) expr_2
where name is the loop variable. expr 1 is a vector expression, (often a sequence like 1:20),
and expr 2 is often a grouped expression with its sub-expressions written in terms of the
dummy name. expr 2 is repeatedly evaluated as name ranges through the values in the
vector result of expr 1.
As an example, suppose ind is a vector of class indicators and we wish to produce
separate plots of y versus x within classes. One possibility here is to use coplot(),1 which
will produce an array of plots corresponding to each level of the factor. Another way to do
this, now putting all plots on the one display, is as follows:
> xc <- split(x, ind)
> yc <- split(y, ind)
> for (i in 1:length(yc)) {
plot(xc[[i]], yc[[i]])
1 to be discussed later, or use xyplot from package lattice.
Chapter 9: Grouping, loops and conditional execution 43
abline(lsfit(xc[[i]], yc[[i]]))
}
(Note the function split() which produces a list of vectors obtained by splitting a larger
vector according to the classes specified by a factor. This is a useful function, mostly used
in connection with boxplots. See the help facility for further details.)
Warning: for() loops are used in R code much less often than in compiled
languages. Code that takes a ‘whole object’ view is likely to be both clearer
and faster in R.
Other looping facilities include the
> repeat expr
statement and the
> while (condition) expr
statement.
The break statement can be used to terminate any loop, possibly abnormally. This is
the only way to terminate repeat loops.
The next statement can be used to discontinue one particular cycle and skip to the
“next”.
Control statements are most often used in connection with functions which are discussed
in Chapter 10 [Writing your own functions], page 44, and where more examples will emerge.
Chapter 10: Writing your own functions 44
10 Writing your own functions
As we have seen informally along the way, the R language allows the user to create objects
of mode function. These are true R functions that are stored in a special internal form and
may be used in further expressions and so on. In the process, the language gains enormously
in power, convenience and elegance, and learning to write useful functions is one of the main
ways to make your use of R comfortable and productive.
It should be emphasized that most of the functions supplied as part of the R system,
such as mean(), var(), postscript() and so on, are themselves written in R and thus do
not differ materially from user written functions.
A function is defined by an assignment of the form
> name <- function(arg_1, arg_2, …) expression
The expression is an R expression, (usually a grouped expression), that uses the arguments,
arg i, to calculate a value. The value of the expression is the value returned for the function.
A call to the function then usually takes the form name(expr_1, expr_2, …) and may
occur anywhere a function call is legitimate.
10.1 Simple examples
As a first example, consider a function to calculate the two sample t-statistic, showing “all
the steps”. This is an artificial example, of course, since there are other, simpler ways of
achieving the same end.
The function is defined as follows:
> twosam <- function(y1, y2) {
n1 <- length(y1); n2 <- length(y2)
yb1 <- mean(y1); yb2 <- mean(y2)
s1 <- var(y1); s2 <- var(y2)
s <- ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2)
tst <- (yb1 – yb2)/sqrt(s*(1/n1 + 1/n2))
tst
}
With this function defined, you could perform two sample t-tests using a call such as
> tstat <- twosam(data$male, data$female); tstat
As a second example, consider a function to emulate directly the Matlab backslash
command, which returns the coefficients of the orthogonal projection of the vector y onto
the column space of the matrix, X. (This is ordinarily called the least squares estimate of
the regression coefficients.) This would ordinarily be done with the qr() function; however
this is sometimes a bit tricky to use directly and it pays to have a simple function such as
the following to use it safely.
Thus given a n by 1 vector y and an n by p matrix X then X y is defined as (XTX)􀀀XT y,
where (XTX)􀀀 is a generalized inverse of X0X.
> bslash <- function(X, y) {
X <- qr(X)
qr.coef(X, y)
Chapter 10: Writing your own functions 45
}
After this object is created it may be used in statements such as
> regcoeff <- bslash(Xmat, yvar)
and so on.
The classical R function lsfit() does this job quite well, and more1. It in turn uses the
functions qr() and qr.coef() in the slightly counterintuitive way above to do this part of
the calculation. Hence there is probably some value in having just this part isolated in a
simple to use function if it is going to be in frequent use. If so, we may wish to make it a
matrix binary operator for even more convenient use.
10.2 Defining new binary operators
Had we given the bslash() function a different name, namely one of the form
%anything%
it could have been used as a binary operator in expressions rather than in function form.
Suppose, for example, we choose ! for the internal character. The function definition would
then start as
> “%!%” <- function(X, y) { … }
(Note the use of quote marks.) The function could then be used as X %!% y. (The backslash
symbol itself is not a convenient choice as it presents special problems in this context.)
The matrix multiplication operator, %*%, and the outer product matrix operator %o% are
other examples of binary operators defined in this way.
10.3 Named arguments and defaults
As first noted in Section 2.3 [Generating regular sequences], page 8, if arguments to called
functions are given in the “name=object” form, they may be given in any order. Furthermore
the argument sequence may begin in the unnamed, positional form, and specify
named arguments after the positional arguments.
Thus if there is a function fun1 defined by
> fun1 <- function(data, data.frame, graph, limit) {
[function body omitted]
}
then the function may be invoked in several ways, for example
> ans <- fun1(d, df, TRUE, 20)
> ans <- fun1(d, df, graph=TRUE, limit=20)
> ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)
are all equivalent.
In many cases arguments can be given commonly appropriate default values, in which
case they may be omitted altogether from the call when the defaults are appropriate. For
example, if fun1 were defined as
> fun1 <- function(data, data.frame, graph=TRUE, limit=20) { … }
it could be called as
1 See also the methods described in Chapter 11 [Statistical models in R], page 54
Chapter 10: Writing your own functions 46
> ans <- fun1(d, df)
which is now equivalent to the three cases above, or as
> ans <- fun1(d, df, limit=10)
which changes one of the defaults.
It is important to note that defaults may be arbitrary expressions, even involving other
arguments to the same function; they are not restricted to be constants as in our simple
example here.
10.4 The ‘…’ argument
Another frequent requirement is to allow one function to pass on argument settings to
another. For example many graphics functions use the function par() and functions like
plot() allow the user to pass on graphical parameters to par() to control the graphical
output. (See Section 12.4.1 [The par() function], page 73, for more details on the par()
function.) This can be done by including an extra argument, literally ‘…’, of the function,
which may then be passed on. An outline example is given below.
fun1 <- function(data, data.frame, graph=TRUE, limit=20, …) {
[omitted statements]
if (graph)
par(pch=”*”, …)
[more omissions]
}
10.5 Assignments within functions
Note that any ordinary assignments done within the function are local and temporary and
are lost after exit from the function. Thus the assignment X <- qr(X) does not affect the
value of the argument in the calling program.
To understand completely the rules governing the scope of R assignments the reader
needs to be familiar with the notion of an evaluation frame. This is a somewhat advanced,
though hardly difficult, topic and is not covered further here.
If global and permanent assignments are intended within a function, then either the
“superassignment” operator, <<- or the function assign() can be used. See the help
document for details. S-Plus users should be aware that <<- has different semantics in R.
These are discussed further in Section 10.7 [Scope], page 48.
10.6 More advanced examples
10.6.1 Efficiency factors in block designs
As a more complete, if a little pedestrian, example of a function, consider finding the
efficiency factors for a block design. (Some aspects of this problem have already been
discussed in Section 5.3 [Index matrices], page 20.)
A block design is defined by two factors, say blocks (b levels) and varieties (v levels).
If R and K are the v by v and b by b replications and block size matrices, respectively, and
Chapter 10: Writing your own functions 47
N is the b by v incidence matrix, then the efficiency factors are defined as the eigenvalues
of the matrix
E = Iv 􀀀 R􀀀1=2NTK􀀀1NR􀀀1=2 = Iv 􀀀 AT A;
where A = K􀀀1=2NR􀀀1=2. One way to write the function is given below.
> bdeff <- function(blocks, varieties) {
blocks <- as.factor(blocks) # minor safety move
b <- length(levels(blocks))
varieties <- as.factor(varieties) # minor safety move
v <- length(levels(varieties))
K <- as.vector(table(blocks)) # remove dim attr
R <- as.vector(table(varieties)) # remove dim attr
N <- table(blocks, varieties)
A <- 1/sqrt(K) * N * rep(1/sqrt(R), rep(b, v))
sv <- svd(A)
list(eff=1 – sv$d^2, blockcv=sv$u, varietycv=sv$v)
}
It is numerically slightly better to work with the singular value decomposition on this
occasion rather than the eigenvalue routines.
The result of the function is a list giving not only the efficiency factors as the first
component, but also the block and variety canonical contrasts, since sometimes these give
additional useful qualitative information.
10.6.2 Dropping all names in a printed array
For printing purposes with large matrices or arrays, it is often useful to print them in close
block form without the array names or numbers. Removing the dimnames attribute will
not achieve this effect, but rather the array must be given a dimnames attribute consisting
of empty strings. For example to print a matrix, X
> temp <- X
> dimnames(temp) <- list(rep(“”, nrow(X)), rep(“”, ncol(X)))
> temp; rm(temp)
This can be much more conveniently done using a function, no.dimnames(), shown
below, as a “wrap around” to achieve the same result. It also illustrates how some effective
and useful user functions can be quite short.
no.dimnames <- function(a) {
## Remove all dimension names from an array for compact printing.
d <- list()
l <- 0
for(i in dim(a)) {
d[[l <- l + 1]] <- rep(“”, i)
}
dimnames(a) <- d
a
}
With this function defined, an array may be printed in close format using
Chapter 10: Writing your own functions 48
> no.dimnames(X)
This is particularly useful for large integer arrays, where patterns are the real interest
rather than the values.
10.6.3 Recursive numerical integration
Functions may be recursive, and may themselves define functions within themselves. Note,
however, that such functions, or indeed variables, are not inherited by called functions in
higher evaluation frames as they would be if they were on the search path.
The example below shows a naive way of performing one-dimensional numerical integration.
The integrand is evaluated at the end points of the range and in the middle. If
the one-panel trapezium rule answer is close enough to the two panel, then the latter is
returned as the value. Otherwise the same process is recursively applied to each panel. The
result is an adaptive integration process that concentrates function evaluations in regions
where the integrand is farthest from linear. There is, however, a heavy overhead, and the
function is only competitive with other algorithms when the integrand is both smooth and
very difficult to evaluate.
The example is also given partly as a little puzzle in R programming.
area <- function(f, a, b, eps = 1.0e-06, lim = 10) {
fun1 <- function(f, a, b, fa, fb, a0, eps, lim, fun) {
## function ‘fun1’ is only visible inside ‘area’
d <- (a + b)/2
h <- (b – a)/4
fd <- f(d)
a1 <- h * (fa + fd)
a2 <- h * (fd + fb)
if(abs(a0 – a1 – a2) < eps || lim == 0)
return(a1 + a2)
else {
return(fun(f, a, d, fa, fd, a1, eps, lim – 1, fun) +
fun(f, d, b, fd, fb, a2, eps, lim – 1, fun))
}
}
fa <- f(a)
fb <- f(b)
a0 <- ((fa + fb) * (b – a))/2
fun1(f, a, b, fa, fb, a0, eps, lim, fun1)
}
10.7 Scope
The discussion in this section is somewhat more technical than in other parts of this document.
However, it details one of the major differences between S-Plus and R.
The symbols which occur in the body of a function can be divided into three classes;
formal parameters, local variables and free variables. The formal parameters of a function
are those occurring in the argument list of the function. Their values are determined by
the process of binding the actual function arguments to the formal parameters. Local
Chapter 10: Writing your own functions 49
variables are those whose values are determined by the evaluation of expressions in the
body of the functions. Variables which are not formal parameters or local variables are
called free variables. Free variables become local variables if they are assigned to. Consider
the following function definition.
f <- function(x) {
y <- 2*x
print(x)
print(y)
print(z)
}
In this function, x is a formal parameter, y is a local variable and z is a free variable.
In R the free variable bindings are resolved by first looking in the environment in which
the function was created. This is called lexical scope. First we define a function called cube.
cube <- function(n) {
sq <- function() n*n
n*sq()
}
The variable n in the function sq is not an argument to that function. Therefore it
is a free variable and the scoping rules must be used to ascertain the value that is to be
associated with it. Under static scope (S-Plus) the value is that associated with a global
variable named n. Under lexical scope (R) it is the parameter to the function cube since
that is the active binding for the variable n at the time the function sq was defined. The
difference between evaluation in R and evaluation in S-Plus is that S-Plus looks for a
global variable called n while R first looks for a variable called n in the environment created
when cube was invoked.
## first evaluation in S
S> cube(2)
Error in sq(): Object “n” not found
Dumped
S> n <- 3
S> cube(2)
[1] 18
## then the same function evaluated in R
R> cube(2)
[1] 8
Lexical scope can also be used to give functions mutable state. In the following example
we show how R can be used to mimic a bank account. A functioning bank account needs to
have a balance or total, a function for making withdrawals, a function for making deposits
and a function for stating the current balance. We achieve this by creating the three functions
within account and then returning a list containing them. When account is invoked
it takes a numerical argument total and returns a list containing the three functions. Because
these functions are defined in an environment which contains total, they will have
access to its value.
The special assignment operator, <<-, is used to change the value associated with total.
This operator looks back in enclosing environments for an environment that contains the
Chapter 10: Writing your own functions 50
symbol total and when it finds such an environment it replaces the value, in that environment,
with the value of right hand side. If the global or top-level environment is reached
without finding the symbol total then that variable is created and assigned to there. For
most users <<- creates a global variable and assigns the value of the right hand side to
it2. Only when <<- has been used in a function that was returned as the value of another
function will the special behavior described here occur.
open.account <- function(total) {
list(
deposit = function(amount) {
if(amount <= 0)
stop(“Deposits must be positive!\n”)
total <<- total + amount
cat(amount, “deposited. Your balance is”, total, “\n\n”)
},
withdraw = function(amount) {
if(amount > total)
stop(“You don’t have that much money!\n”)
total <<- total – amount
cat(amount, “withdrawn. Your balance is”, total, “\n\n”)
},
balance = function() {
cat(“Your balance is”, total, “\n\n”)
}
)
}
ross <- open.account(100)
robert <- open.account(200)
ross$withdraw(30)
ross$balance()
robert$balance()
ross$deposit(50)
ross$balance()
ross$withdraw(500)
10.8 Customizing the environment
Users can customize their environment in several different ways. There is a site initialization
file and every directory can have its own special initialization file. Finally, the special
functions .First and .Last can be used.
The location of the site initialization file is taken from the value of the R_PROFILE
environment variable. If that variable is unset, the file ‘Rprofile.site’ in the R home
2 In some sense this mimics the behavior in S-Plus since in S-Plus this operator always creates or assigns
to a global variable.
Chapter 10: Writing your own functions 51
subdirectory ‘etc’ is used. This file should contain the commands that you want to execute
every time R is started under your system. A second, personal, profile file named
‘.Rprofile’3 can be placed in any directory. If R is invoked in that directory then that file
will be sourced. This file gives individual users control over their workspace and allows for
different startup procedures in different working directories. If no ‘.Rprofile’ file is found
in the startup directory, then R looks for a ‘.Rprofile’ file in the user’s home directory
and uses that (if it exists). If the environment variable R_PROFILE_USER is set, the file it
points to is used instead of the ‘.Rprofile’ files.
Any function named .First() in either of the two profile files or in the ‘.RData’ image
has a special status. It is automatically performed at the beginning of an R session and
may be used to initialize the environment. For example, the definition in the example below
alters the prompt to $ and sets up various other useful things that can then be taken for
granted in the rest of the session.
Thus, the sequence in which files are executed is, ‘Rprofile.site’, the user profile,
‘.RData’ and then .First(). A definition in later files will mask definitions in earlier files.
> .First <- function() {
options(prompt=”$ “, continue=”+\t”) # $ is the prompt
options(digits=5, length=999) # custom numbers and printout
x11() # for graphics
par(pch = “+”) # plotting character
source(file.path(Sys.getenv(“HOME”), “R”, “mystuff.R”))
# my personal functions
library(MASS) # attach a package
}
Similarly a function .Last(), if defined, is (normally) executed at the very end of the
session. An example is given below.
> .Last <- function() {
graphics.off() # a small safety measure.
cat(paste(date(),”\nAdios\n”)) # Is it time for lunch?
}
10.9 Classes, generic functions and object orientation
The class of an object determines how it will be treated by what are known as generic
functions. Put the other way round, a generic function performs a task or action on its
arguments specific to the class of the argument itself. If the argument lacks any class
attribute, or has a class not catered for specifically by the generic function in question,
there is always a default action provided.
An example makes things clearer. The class mechanism offers the user the facility
of designing and writing generic functions for special purposes. Among the other generic
functions are plot() for displaying objects graphically, summary() for summarizing analyses
of various types, and anova() for comparing statistical models.
3 So it is hidden under UNIX.
Chapter 10: Writing your own functions 52
The number of generic functions that can treat a class in a specific way can be quite
large. For example, the functions that can accommodate in some fashion objects of class
“data.frame” include
[ [[<- any as.matrix
[<- mean plot summary
A currently complete list can be got by using the methods() function:
> methods(class=”data.frame”)
Conversely the number of classes a generic function can handle can also be quite large.
For example the plot() function has a default method and variants for objects of classes
“data.frame”, “density”, “factor”, and more. A complete list can be got again by using
the methods() function:
> methods(plot)
For many generic functions the function body is quite short, for example
> coef
function (object, …)
UseMethod(“coef”)
The presence of UseMethod indicates this is a generic function. To see what methods are
available we can use methods()
> methods(coef)
[1] coef.aov* coef.Arima* coef.default* coef.listof*
[5] coef.nls* coef.summary.nls*
Non-visible functions are asterisked
In this example there are six methods, none of which can be seen by typing its name. We
can read these by either of
> getAnywhere(“coef.aov”)
A single object matching ’coef.aov’ was found
It was found in the following places
registered S3 method for coef from namespace stats
namespace:stats
with value
function (object, …)
{
z <- object$coef
z[!is.na(z)]
}
> getS3method(“coef”, “aov”)
function (object, …)
{
z <- object$coef
z[!is.na(z)]
}
Chapter 10: Writing your own functions 53
The reader is referred to the R Language Definition for a more complete discussion of
this mechanism.
Chapter 11: Statistical models in R 54
11 Statistical models in R
This section presumes the reader has some familiarity with statistical methodology, in
particular with regression analysis and the analysis of variance. Later we make some rather
more ambitious presumptions, namely that something is known about generalized linear
models and nonlinear regression.
The requirements for fitting statistical models are sufficiently well defined to make it
possible to construct general tools that apply in a broad spectrum of problems.
R provides an interlocking suite of facilities that make fitting statistical models very
simple. As we mention in the introduction, the basic output is minimal, and one needs to
ask for the details by calling extractor functions.
11.1 Defining statistical models; formulae
The template for a statistical model is a linear regression model with independent, homoscedastic
errors
yi =
Xp
j=0
jxij + ei; ei  NID(0; 2); i = 1; : : : ; n
In matrix terms this would be written
y = X + e
where the y is the response vector, X is the model matrix or design matrix and has columns
x0; x1; : : : ; xp, the determining variables. Very often x0 will be a column of ones defining an
intercept term.
Examples
Before giving a formal specification, a few examples may usefully set the picture.
Suppose y, x, x0, x1, x2, . . . are numeric variables, X is a matrix and A, B, C, . . . are
factors. The following formulae on the left side below specify statistical models as described
on the right.
y ~ x
y ~ 1 + x Both imply the same simple linear regression model of y on x. The first has an
implicit intercept term, and the second an explicit one.
y ~ 0 + x
y ~ -1 + x
y ~ x – 1 Simple linear regression of y on x through the origin (that is, without an intercept
term).
log(y) ~ x1 + x2
Multiple regression of the transformed variable, log(y), on x1 and x2 (with an
implicit intercept term).
Chapter 11: Statistical models in R 55
y ~ poly(x,2)
y ~ 1 + x + I(x^2)
Polynomial regression of y on x of degree 2. The first form uses orthogonal
polynomials, and the second uses explicit powers, as basis.
y ~ X + poly(x,2)
Multiple regression y with model matrix consisting of the matrix X as well as
polynomial terms in x to degree 2.
y ~ A Single classification analysis of variance model of y, with classes determined by
A.
y ~ A + x Single classification analysis of covariance model of y, with classes determined
by A, and with covariate x.
y ~ A*B
y ~ A + B + A:B
y ~ B %in% A
y ~ A/B Two factor non-additive model of y on A and B. The first two specify the same
crossed classification and the second two specify the same nested classification.
In abstract terms all four specify the same model subspace.
y ~ (A + B + C)^2
y ~ A*B*C – A:B:C
Three factor experiment but with a model containing main effects and two
factor interactions only. Both formulae specify the same model.
y ~ A * x
y ~ A/x
y ~ A/(1 + x) – 1
Separate simple linear regression models of y on x within the levels of A, with
different codings. The last form produces explicit estimates of as many different
intercepts and slopes as there are levels in A.
y ~ A*B + Error(C)
An experiment with two treatment factors, A and B, and error strata determined
by factor C. For example a split plot experiment, with whole plots (and
hence also subplots), determined by factor C.
The operator ~ is used to define a model formula in R. The form, for an ordinary linear
model, is
response ~ op_1 term_1 op_2 term_2 op_3 term_3 …
where
response is a vector or matrix, (or expression evaluating to a vector or matrix) defining
the response variable(s).
op i is an operator, either + or -, implying the inclusion or exclusion of a term in
the model, (the first is optional).
term i is either
 a vector or matrix expression, or 1,
Chapter 11: Statistical models in R 56
 a factor, or
 a formula expression consisting of factors, vectors or matrices connected
by formula operators.
In all cases each term defines a collection of columns either to be added to or
removed from the model matrix. A 1 stands for an intercept column and is by
default included in the model matrix unless explicitly removed.
The formula operators are similar in effect to the Wilkinson and Rogers notation used
by such programs as Glim and Genstat. One inevitable change is that the operator ‘.’
becomes ‘:’ since the period is a valid name character in R.
The notation is summarized below (based on Chambers & Hastie, 1992, p.29):
Y ~ M Y is modeled as M.
M_1 + M_2 Include M 1 and M 2.
M_1 – M_2 Include M 1 leaving out terms of M 2.
M_1 : M_2 The tensor product of M 1 and M 2. If both terms are factors, then the “subclasses”
factor.
M_1 %in% M_2
Similar to M_1:M_2, but with a different coding.
M_1 * M_2 M_1 + M_2 + M_1:M_2.
M_1 / M_2 M_1 + M_2 %in% M_1.
M^n All terms in M together with “interactions” up to order n
I(M) Insulate M. Inside M all operators have their normal arithmetic meaning, and
that term appears in the model matrix.
Note that inside the parentheses that usually enclose function arguments all operators
have their normal arithmetic meaning. The function I() is an identity function used to
allow terms in model formulae to be defined using arithmetic operators.
Note particularly that the model formulae specify the columns of the model matrix, the
specification of the parameters being implicit. This is not the case in other contexts, for
example in specifying nonlinear models.
11.1.1 Contrasts
We need at least some idea how the model formulae specify the columns of the model
matrix. This is easy if we have continuous variables, as each provides one column of the
model matrix (and the intercept will provide a column of ones if included in the model).
What about a k-level factor A? The answer differs for unordered and ordered factors.
For unordered factors k 􀀀 1 columns are generated for the indicators of the second, . . . ,
kth levels of the factor. (Thus the implicit parameterization is to contrast the response at
each level with that at the first.) For ordered factors the k 􀀀 1 columns are the orthogonal
polynomials on 1; : : : ; k, omitting the constant term.
Although the answer is already complicated, it is not the whole story. First, if the
intercept is omitted in a model that contains a factor term, the first such term is encoded
into k columns giving the indicators for all the levels. Second, the whole behavior can be
changed by the options setting for contrasts. The default setting in R is
Chapter 11: Statistical models in R 57
options(contrasts = c(“contr.treatment”, “contr.poly”))
The main reason for mentioning this is that R and S have different defaults for unordered
factors, S using Helmert contrasts. So if you need to compare your results to those of a
textbook or paper which used S-Plus, you will need to set
options(contrasts = c(“contr.helmert”, “contr.poly”))
This is a deliberate difference, as treatment contrasts (R’s default) are thought easier for
newcomers to interpret.
We have still not finished, as the contrast scheme to be used can be set for each term in
the model using the functions contrasts and C.
We have not yet considered interaction terms: these generate the products of the columns
introduced for their component terms.
Although the details are complicated, model formulae in R will normally generate the
models that an expert statistician would expect, provided that marginality is preserved.
Fitting, for example, a model with an interaction but not the corresponding main effects
will in general lead to surprising results, and is for experts only.
11.2 Linear models
The basic function for fitting ordinary multiple models is lm(), and a streamlined version
of the call is as follows:
> fitted.model <- lm(formula, data = data.frame)
For example
> fm2 <- lm(y ~ x1 + x2, data = production)
would fit a multiple regression model of y on x1 and x2 (with implicit intercept term).
The important (but technically optional) parameter data = production specifies that
any variables needed to construct the model should come first from the production data
frame. This is the case regardless of whether data frame production has been attached on
the search path or not.
11.3 Generic functions for extracting model information
The value of lm() is a fitted model object; technically a list of results of class “lm”. Information
about the fitted model can then be displayed, extracted, plotted and so on by using
generic functions that orient themselves to objects of class “lm”. These include
add1 deviance formula predict step
alias drop1 kappa print summary
anova effects labels proj vcov
coef family plot residuals
A brief description of the most commonly used ones is given below.
anova(object_1, object_2)
Compare a submodel with an outer model and produce an analysis of variance
table.
coef(object)
Extract the regression coefficient (matrix).
Long form: coefficients(object).
Chapter 11: Statistical models in R 58
deviance(object)
Residual sum of squares, weighted if appropriate.
formula(object)
Extract the model formula.
plot(object)
Produce four plots, showing residuals, fitted values and some diagnostics.
predict(object, newdata=data.frame)
The data frame supplied must have variables specified with the same labels as
the original. The value is a vector or matrix of predicted values corresponding
to the determining variable values in data.frame.
print(object)
Print a concise version of the object. Most often used implicitly.
residuals(object)
Extract the (matrix of) residuals, weighted as appropriate.
Short form: resid(object).
step(object)
Select a suitable model by adding or dropping terms and preserving hierarchies.
The model with the smallest value of AIC (Akaike’s An Information Criterion)
discovered in the stepwise search is returned.
summary(object)
Print a comprehensive summary of the results of the regression analysis.
vcov(object)
Returns the variance-covariance matrix of the main parameters of a fitted model
object.
11.4 Analysis of variance and model comparison
The model fitting function aov(formula, data=data.frame) operates at the simplest level
in a very similar way to the function lm(), and most of the generic functions listed in the
table in Section 11.3 [Generic functions for extracting model information], page 57 apply.
It should be noted that in addition aov() allows an analysis of models with multiple error
strata such as split plot experiments, or balanced incomplete block designs with recovery
of inter-block information. The model formula
response ~ mean.formula + Error(strata.formula)
specifies a multi-stratum experiment with error strata defined by the strata.formula. In the
simplest case, strata.formula is simply a factor, when it defines a two strata experiment,
namely between and within the levels of the factor.
For example, with all determining variables factors, a model formula such as that in:
> fm <- aov(yield ~ v + n*p*k + Error(farms/blocks), data=farm.data)
would typically be used to describe an experiment with mean model v + n*p*k and three
error strata, namely “between farms”, “within farms, between blocks” and “within blocks”.
Chapter 11: Statistical models in R 59
11.4.1 ANOVA tables
Note also that the analysis of variance table (or tables) are for a sequence of fitted models.
The sums of squares shown are the decrease in the residual sums of squares resulting from an
inclusion of that term in the model at that place in the sequence. Hence only for orthogonal
experiments will the order of inclusion be inconsequential.
For multistratum experiments the procedure is first to project the response onto the
error strata, again in sequence, and to fit the mean model to each projection. For further
details, see Chambers & Hastie (1992).
A more flexible alternative to the default full ANOVA table is to compare two or more
models directly using the anova() function.
> anova(fitted.model.1, fitted.model.2, …)
The display is then an ANOVA table showing the differences between the fitted models
when fitted in sequence. The fitted models being compared would usually be an hierarchical
sequence, of course. This does not give different information to the default, but rather makes
it easier to comprehend and control.
11.5 Updating fitted models
The update() function is largely a convenience function that allows a model to be fitted
that differs from one previously fitted usually by just a few additional or removed terms.
Its form is
> new.model <- update(old.model, new.formula)
In the new.formula the special name consisting of a period, ‘.’, only, can be used to
stand for “the corresponding part of the old model formula”. For example,
> fm05 <- lm(y ~ x1 + x2 + x3 + x4 + x5, data = production)
> fm6 <- update(fm05, . ~ . + x6)
> smf6 <- update(fm6, sqrt(.) ~ .)
would fit a five variate multiple regression with variables (presumably) from the data frame
production, fit an additional model including a sixth regressor variable, and fit a variant
on the model where the response had a square root transform applied.
Note especially that if the data= argument is specified on the original call to the model
fitting function, this information is passed on through the fitted model object to update()
and its allies.
The name ‘.’ can also be used in other contexts, but with slightly different meaning.
For example
> fmfull <- lm(y ~ . , data = production)
would fit a model with response y and regressor variables all other variables in the data
frame production.
Other functions for exploring incremental sequences of models are add1(), drop1() and
step(). The names of these give a good clue to their purpose, but for full details see the
on-line help.
Chapter 11: Statistical models in R 60
11.6 Generalized linear models
Generalized linear modeling is a development of linear models to accommodate both nonnormal
response distributions and transformations to linearity in a clean and straightforward
way. A generalized linear model may be described in terms of the following sequence of
assumptions:
 There is a response, y, of interest and stimulus variables x1, x2, : : : , whose values
influence the distribution of the response.
 The stimulus variables influence the distribution of y through a single linear function,
only. This linear function is called the linear predictor, and is usually written
 = 1×1 + 2×2 +    + pxp;
hence xi has no influence on the distribution of y if and only if i = 0.
 The distribution of y is of the form
fY (y; ; ‘) = exp

A

fy() 􀀀
(())g +  (y; ‘)

where ‘ is a scale parameter (possibly known), and is constant for all observations, A
represents a prior weight, assumed known but possibly varying with the observations,
and  is the mean of y. So it is assumed that the distribution of y is determined by its
mean and possibly a scale parameter as well.
 The mean, , is a smooth invertible function of the linear predictor:
 = m();  = m􀀀1() = `()
and this inverse function, `(), is called the link function.
These assumptions are loose enough to encompass a wide class of models useful in
statistical practice, but tight enough to allow the development of a unified methodology
of estimation and inference, at least approximately. The reader is referred to any of the
current reference works on the subject for full details, such as McCullagh & Nelder (1989)
or Dobson (1990).
11.6.1 Families
The class of generalized linear models handled by facilities supplied in R includes gaussian,
binomial, poisson, inverse gaussian and gamma response distributions and also quasilikelihood
models where the response distribution is not explicitly specified. In the latter
case the variance function must be specified as a function of the mean, but in other cases
this function is implied by the response distribution.
Each response distribution admits a variety of link functions to connect the mean with
the linear predictor. Those automatically available are shown in the following table:
Family name Link functions
binomial logit, probit, log, cloglog
gaussian identity, log, inverse
Gamma identity, inverse, log
Chapter 11: Statistical models in R 61
inverse.gaussian 1/mu^2, identity, inverse, log
poisson identity, log, sqrt
quasi logit, probit, cloglog, identity, inverse,
log, 1/mu^2, sqrt
The combination of a response distribution, a link function and various other pieces of
information that are needed to carry out the modeling exercise is called the family of the
generalized linear model.
11.6.2 The glm() function
Since the distribution of the response depends on the stimulus variables through a single
linear function only, the same mechanism as was used for linear models can still be used to
specify the linear part of a generalized model. The family has to be specified in a different
way.
The R function to fit a generalized linear model is glm() which uses the form
> fitted.model <- glm(formula, family=family.generator, data=data.frame)
The only new feature is the family.generator, which is the instrument by which the family
is described. It is the name of a function that generates a list of functions and expressions
that together define and control the model and estimation process. Although this may seem
a little complicated at first sight, its use is quite simple.
The names of the standard, supplied family generators are given under “Family Name”
in the table in Section 11.6.1 [Families], page 60. Where there is a choice of links, the name
of the link may also be supplied with the family name, in parentheses as a parameter. In
the case of the quasi family, the variance function may also be specified in this way.
Some examples make the process clear.
The gaussian family
A call such as
> fm <- glm(y ~ x1 + x2, family = gaussian, data = sales)
achieves the same result as
> fm <- lm(y ~ x1+x2, data=sales)
but much less efficiently. Note how the gaussian family is not automatically provided with
a choice of links, so no parameter is allowed. If a problem requires a gaussian family with
a nonstandard link, this can usually be achieved through the quasi family, as we shall see
later.
The binomial family
Consider a small, artificial example, from Silvey (1970).
On the Aegean island of Kalythos the male inhabitants suffer from a congenital eye
disease, the effects of which become more marked with increasing age. Samples of islander
males of various ages were tested for blindness and the results recorded. The data is shown
below:
Age: 20 35 45 55 70
No. tested: 50 50 50 50 50
No. blind: 6 17 26 37 44
Chapter 11: Statistical models in R 62
The problem we consider is to fit both logistic and probit models to this data, and to
estimate for each model the LD50, that is the age at which the chance of blindness for a
male inhabitant is 50%.
If y is the number of blind at age x and n the number tested, both models have the form
y  B(n; F( 0 + 1x))
where for the probit case, F(z) = Φ(z) is the standard normal distribution function, and in
the logit case (the default), F(z) = ez=(1 + ez). In both cases the LD50 is
LD50 = 􀀀 0= 1
that is, the point at which the argument of the distribution function is zero.
The first step is to set the data up as a data frame
> kalythos <- data.frame(x = c(20,35,45,55,70), n = rep(50,5),
y = c(6,17,26,37,44))
To fit a binomial model using glm() there are three possibilities for the response:
 If the response is a vector it is assumed to hold binary data, and so must be a 0=1
vector.
 If the response is a two-column matrix it is assumed that the first column holds the
number of successes for the trial and the second holds the number of failures.
 If the response is a factor, its first level is taken as failure (0) and all other levels as
‘success’ (1).
Here we need the second of these conventions, so we add a matrix to our data frame:
> kalythos$Ymat <- cbind(kalythos$y, kalythos$n – kalythos$y)
To fit the models we use
> fmp <- glm(Ymat ~ x, family = binomial(link=probit), data = kalythos)
> fml <- glm(Ymat ~ x, family = binomial, data = kalythos)
Since the logit link is the default the parameter may be omitted on the second call. To
see the results of each fit we could use
> summary(fmp)
> summary(fml)
Both models fit (all too) well. To find the LD50 estimate we can use a simple function:
> ld50 <- function(b) -b[1]/b[2]
> ldp <- ld50(coef(fmp)); ldl <- ld50(coef(fml)); c(ldp, ldl)
The actual estimates from this data are 43.663 years and 43.601 years respectively.
Poisson models
With the Poisson family the default link is the log, and in practice the major use of
this family is to fit surrogate Poisson log-linear models to frequency data, whose actual
distribution is often multinomial. This is a large and important subject we will not discuss
further here. It even forms a major part of the use of non-gaussian generalized models
overall.
Chapter 11: Statistical models in R 63
Occasionally genuinely Poisson data arises in practice and in the past it was often analyzed
as gaussian data after either a log or a square-root transformation. As a graceful
alternative to the latter, a Poisson generalized linear model may be fitted as in the following
example:
> fmod <- glm(y ~ A + B + x, family = poisson(link=sqrt),
data = worm.counts)
Quasi-likelihood models
For all families the variance of the response will depend on the mean and will have the
scale parameter as a multiplier. The form of dependence of the variance on the mean
is a characteristic of the response distribution; for example for the poisson distribution
Var[y] = .
For quasi-likelihood estimation and inference the precise response distribution is not
specified, but rather only a link function and the form of the variance function as it depends
on the mean. Since quasi-likelihood estimation uses formally identical techniques to those
for the gaussian distribution, this family provides a way of fitting gaussian models with
non-standard link functions or variance functions, incidentally.
For example, consider fitting the non-linear regression
y = 1z1
z2 􀀀 2
+ e
which may be written alternatively as
y =
1
1×1 + 2×2
+ e
where x1 = z2=z1, x2 = 􀀀1=z1, 1 = 1=1 and 2 = 2=1. Supposing a suitable data frame
to be set up we could fit this non-linear regression as
> nlfit <- glm(y ~ x1 + x2 – 1,
family = quasi(link=inverse, variance=constant),
data = biochem)
The reader is referred to the manual and the help document for further information, as
needed.
11.7 Nonlinear least squares and maximum likelihood
models
Certain forms of nonlinear model can be fitted by Generalized Linear Models (glm()). But
in the majority of cases we have to approach the nonlinear curve fitting problem as one
of nonlinear optimization. R’s nonlinear optimization routines are optim(), nlm() and
(from R 2.2.0) nlminb(), which provide the functionality (and more) of S-Plus’s ms()
and nlminb(). We seek the parameter values that minimize some index of lack-of-fit, and
they do this by trying out various parameter values iteratively. Unlike linear regression for
example, there is no guarantee that the procedure will converge on satisfactory estimates.
All the methods require initial guesses about what parameter values to try, and convergence
may depend critically upon the quality of the starting values.
Chapter 11: Statistical models in R 64
11.7.1 Least squares
One way to fit a nonlinear model is by minimizing the sum of the squared errors (SSE) or
residuals. This method makes sense if the observed errors could have plausibly arisen from
a normal distribution.
Here is an example from Bates & Watts (1988), page 51. The data are:
> x <- c(0.02, 0.02, 0.06, 0.06, 0.11, 0.11, 0.22, 0.22, 0.56, 0.56,
1.10, 1.10)
> y <- c(76, 47, 97, 107, 123, 139, 159, 152, 191, 201, 207, 200)
The fit criterion to be minimized is:
> fn <- function(p) sum((y – (p[1] * x)/(p[2] + x))^2)
In order to do the fit we need initial estimates of the parameters. One way to find
sensible starting values is to plot the data, guess some parameter values, and superimpose
the model curve using those values.
> plot(x, y)
> xfit <- seq(.02, 1.1, .05)
> yfit <- 200 * xfit/(0.1 + xfit)
> lines(spline(xfit, yfit))
We could do better, but these starting values of 200 and 0.1 seem adequate. Now do the
fit:
> out <- nlm(fn, p = c(200, 0.1), hessian = TRUE)
After the fitting, out$minimum is the SSE, and out$estimate are the least squares estimates
of the parameters. To obtain the approximate standard errors (SE) of the estimates
we do:
> sqrt(diag(2*out$minimum/(length(y) – 2) * solve(out$hessian)))
The 2 in the line above represents the number of parameters. A 95% confidence interval
would be the parameter estimate  1.96 SE. We can superimpose the least squares fit on a
new plot:
> plot(x, y)
> xfit <- seq(.02, 1.1, .05)
> yfit <- 212.68384222 * xfit/(0.06412146 + xfit)
> lines(spline(xfit, yfit))
The standard package stats provides much more extensive facilities for fitting non-linear
models by least squares. The model we have just fitted is the Michaelis-Menten model, so
we can use
> df <- data.frame(x=x, y=y)
> fit <- nls(y ~ SSmicmen(x, Vm, K), df)
> fit
Nonlinear regression model
model: y ~ SSmicmen(x, Vm, K)
data: df
Vm K
212.68370711 0.06412123
residual sum-of-squares: 1195.449
Chapter 11: Statistical models in R 65
> summary(fit)
Formula: y ~ SSmicmen(x, Vm, K)
Parameters:
Estimate Std. Error t value Pr(>|t|)
Vm 2.127e+02 6.947e+00 30.615 3.24e-11
K 6.412e-02 8.281e-03 7.743 1.57e-05
Residual standard error: 10.93 on 10 degrees of freedom
Correlation of Parameter Estimates:
Vm
K 0.7651
11.7.2 Maximum likelihood
Maximum likelihood is a method of nonlinear model fitting that applies even if the errors
are not normal. The method finds the parameter values which maximize the log likelihood,
or equivalently which minimize the negative log-likelihood. Here is an example from Dobson
(1990), pp. 108–111. This example fits a logistic model to dose-response data, which clearly
could also be fit by glm(). The data are:
> x <- c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113,
1.8369, 1.8610, 1.8839)
> y <- c( 6, 13, 18, 28, 52, 53, 61, 60)
> n <- c(59, 60, 62, 56, 63, 59, 62, 60)
The negative log-likelihood to minimize is:
> fn <- function(p)
sum( – (y*(p[1]+p[2]*x) – n*log(1+exp(p[1]+p[2]*x))
+ log(choose(n, y)) ))
We pick sensible starting values and do the fit:
> out <- nlm(fn, p = c(-50,20), hessian = TRUE)
After the fitting, out$minimum is the negative log-likelihood, and out$estimate are the
maximum likelihood estimates of the parameters. To obtain the approximate SEs of the
estimates we do:
> sqrt(diag(solve(out$hessian)))
A 95% confidence interval would be the parameter estimate  1.96 SE.
11.8 Some non-standard models
We conclude this chapter with just a brief mention of some of the other facilities available
in R for special regression and data analysis problems.
 Mixed models. The recommended nlme package provides functions lme() and nlme()
for linear and non-linear mixed-effects models, that is linear and non-linear regressions
in which some of the coefficients correspond to random effects. These functions make
heavy use of formulae to specify the models.
Chapter 11: Statistical models in R 66
 Local approximating regressions. The loess() function fits a nonparametric regression
by using a locally weighted regression. Such regressions are useful for highlighting a
trend in messy data or for data reduction to give some insight into a large data set.
Function loess is in the standard package stats, together with code for projection
pursuit regression.
 Robust regression. There are several functions available for fitting regression models
in a way resistant to the influence of extreme outliers in the data. Function lqs in
the recommended package MASS provides state-of-art algorithms for highly-resistant
fits. Less resistant but statistically more efficient methods are available in packages,
for example function rlm in package MASS.
 Additive models. This technique aims to construct a regression function from smooth
additive functions of the determining variables, usually one for each determining variable.
Functions avas and ace in package acepack and functions bruto and mars in
package mda provide some examples of these techniques in user-contributed packages
to R. An extension is Generalized Additive Models, implemented in user-contributed
packages gam and mgcv.
 Tree-based models. Rather than seek an explicit global linear model for prediction
or interpretation, tree-based models seek to bifurcate the data, recursively, at critical
points of the determining variables in order to partition the data ultimately into groups
that are as homogeneous as possible within, and as heterogeneous as possible between.
The results often lead to insights that other data analysis methods tend not to yield.
Models are again specified in the ordinary linear model form. The model fitting function
is tree(), but many other generic functions such as plot() and text() are well
adapted to displaying the results of a tree-based model fit in a graphical way.
Tree models are available in R via the user-contributed packages rpart and tree.
Chapter 12: Graphical procedures 67
12 Graphical procedures
Graphical facilities are an important and extremely versatile component of the R environment.
It is possible to use the facilities to display a wide variety of statistical graphs and
also to build entirely new types of graph.
The graphics facilities can be used in both interactive and batch modes, but in most
cases, interactive use is more productive. Interactive use is also easy because at startup
time R initiates a graphics device driver which opens a special graphics window for the
display of interactive graphics. Although this is done automatically, it is useful to know
that the command used is X11() under UNIX, windows() under Windows and quartz()
under Mac OS X.
Once the device driver is running, R plotting commands can be used to produce a variety
of graphical displays and to create entirely new kinds of display.
Plotting commands are divided into three basic groups:
 High-level plotting functions create a new plot on the graphics device, possibly with
axes, labels, titles and so on.
 Low-level plotting functions add more information to an existing plot, such as extra
points, lines and labels.
 Interactive graphics functions allow you interactively add information to, or extract
information from, an existing plot, using a pointing device such as a mouse.
In addition, R maintains a list of graphical parameters which can be manipulated to
customize your plots.
This manual only describes what are known as ‘base’ graphics. A separate graphics
sub-system in package grid coexists with base – it is more powerful but harder to use.
There is a recommended package lattice which builds on grid and provides ways to produce
multi-panel plots akin to those in the Trellis system in S.
12.1 High-level plotting commands
High-level plotting functions are designed to generate a complete plot of the data passed
as arguments to the function. Where appropriate, axes, labels and titles are automatically
generated (unless you request otherwise.) High-level plotting commands always start a new
plot, erasing the current plot if necessary.
12.1.1 The plot() function
One of the most frequently used plotting functions in R is the plot() function. This is a
generic function: the type of plot produced is dependent on the type or class of the first
argument.
plot(x, y)
plot(xy) If x and y are vectors, plot(x, y) produces a scatterplot of y against x. The
same effect can be produced by supplying one argument (second form) as either
a list containing two elements x and y or a two-column matrix.
plot(x) If x is a time series, this produces a time-series plot. If x is a numeric vector, it
produces a plot of the values in the vector against their index in the vector. If
Chapter 12: Graphical procedures 68
x is a complex vector, it produces a plot of imaginary versus real parts of the
vector elements.
plot(f)
plot(f, y)
f is a factor object, y is a numeric vector. The first form generates a bar plot
of f ; the second form produces boxplots of y for each level of f.
plot(df)
plot(~ expr)
plot(y ~ expr)
df is a data frame, y is any object, expr is a list of object names separated
by ‘+’ (e.g., a + b + c). The first two forms produce distributional plots of the
variables in a data frame (first form) or of a number of named objects (second
form). The third form plots y against every object named in expr.
12.1.2 Displaying multivariate data
R provides two very useful functions for representing multivariate data. If X is a numeric
matrix or data frame, the command
> pairs(X)
produces a pairwise scatterplot matrix of the variables defined by the columns of X, that
is, every column of X is plotted against every other column of X and the resulting n(n 􀀀 1)
plots are arranged in a matrix with plot scales constant over the rows and columns of the
matrix.
When three or four variables are involved a coplot may be more enlightening. If a and
b are numeric vectors and c is a numeric vector or factor object (all of the same length),
then the command
> coplot(a ~ b | c)
produces a number of scatterplots of a against b for given values of c. If c is a factor,
this simply means that a is plotted against b for every level of c. When c is numeric, it is
divided into a number of conditioning intervals and for each interval a is plotted against b
for values of c within the interval. The number and position of intervals can be controlled
with given.values= argument to coplot()—the function co.intervals() is useful for
selecting intervals. You can also use two given variables with a command like
> coplot(a ~ b | c + d)
which produces scatterplots of a against b for every joint conditioning interval of c and d.
The coplot() and pairs() function both take an argument panel= which can be used to
customize the type of plot which appears in each panel. The default is points() to produce
a scatterplot but by supplying some other low-level graphics function of two vectors x and
y as the value of panel= you can produce any type of plot you wish. An example panel
function useful for coplots is panel.smooth().
12.1.3 Display graphics
Other high-level graphics functions produce different types of plots. Some examples are:
Chapter 12: Graphical procedures 69
qqnorm(x)
qqline(x)
qqplot(x, y)
Distribution-comparison plots. The first form plots the numeric vector x against
the expected Normal order scores (a normal scores plot) and the second adds a
straight line to such a plot by drawing a line through the distribution and data
quartiles. The third form plots the quantiles of x against those of y to compare
their respective distributions.
hist(x)
hist(x, nclass=n)
hist(x, breaks=b, …)
Produces a histogram of the numeric vector x. A sensible number of classes is
usually chosen, but a recommendation can be given with the nclass= argument.
Alternatively, the breakpoints can be specified exactly with the breaks= argument.
If the probability=TRUE argument is given, the bars represent relative
frequencies divided by bin width instead of counts.
dotchart(x, …)
Constructs a dotchart of the data in x. In a dotchart the y-axis gives a labelling
of the data in x and the x-axis gives its value. For example it allows easy visual
selection of all data entries with values lying in specified ranges.
image(x, y, z, …)
contour(x, y, z, …)
persp(x, y, z, …)
Plots of three variables. The image plot draws a grid of rectangles using different
colours to represent the value of z, the contour plot draws contour lines to
represent the value of z, and the persp plot draws a 3D surface.
12.1.4 Arguments to high-level plotting functions
There are a number of arguments which may be passed to high-level graphics functions, as
follows:
add=TRUE Forces the function to act as a low-level graphics function, superimposing the
plot on the current plot (some functions only).
axes=FALSE
Suppresses generation of axes—useful for adding your own custom axes with
the axis() function. The default, axes=TRUE, means include axes.
log=”x”
log=”y”
log=”xy” Causes the x, y or both axes to be logarithmic. This will work for many, but
not all, types of plot.
type= The type= argument controls the type of plot produced, as follows:
type=”p” Plot individual points (the default)
type=”l” Plot lines
type=”b” Plot points connected by lines (both)
Chapter 12: Graphical procedures 70
type=”o” Plot points overlaid by lines
type=”h” Plot vertical lines from points to the zero axis (high-density)
type=”s”
type=”S” Step-function plots. In the first form, the top of the vertical defines
the point; in the second, the bottom.
type=”n” No plotting at all. However axes are still drawn (by default) and
the coordinate system is set up according to the data. Ideal for
creating plots with subsequent low-level graphics functions.
xlab=string
ylab=string
Axis labels for the x and y axes. Use these arguments to change the default
labels, usually the names of the objects used in the call to the high-level plotting
function.
main=string
Figure title, placed at the top of the plot in a large font.
sub=string
Sub-title, placed just below the x-axis in a smaller font.
12.2 Low-level plotting commands
Sometimes the high-level plotting functions don’t produce exactly the kind of plot you
desire. In this case, low-level plotting commands can be used to add extra information
(such as points, lines or text) to the current plot.
Some of the more useful low-level plotting functions are:
points(x, y)
lines(x, y)
Adds points or connected lines to the current plot. plot()’s type= argument
can also be passed to these functions (and defaults to “p” for points() and
“l” for lines().)
text(x, y, labels, …)
Add text to a plot at points given by x, y. Normally labels is an integer or
character vector in which case labels[i] is plotted at point (x[i], y[i]).
The default is 1:length(x).
Note: This function is often used in the sequence
> plot(x, y, type=”n”); text(x, y, names)
The graphics parameter type=”n” suppresses the points but sets up the axes,
and the text() function supplies special characters, as specified by the character
vector names for the points.
abline(a, b)
abline(h=y)
abline(v=x)
abline(lm.obj)
Adds a line of slope b and intercept a to the current plot. h=y may be used to
specify y-coordinates for the heights of horizontal lines to go across a plot, and
Chapter 12: Graphical procedures 71
v=x similarly for the x-coordinates for vertical lines. Also lm.obj may be list
with a coefficients component of length 2 (such as the result of model-fitting
functions,) which are taken as an intercept and slope, in that order.
polygon(x, y, …)
Draws a polygon defined by the ordered vertices in (x, y) and (optionally) shade
it in with hatch lines, or fill it if the graphics device allows the filling of figures.
legend(x, y, legend, …)
Adds a legend to the current plot at the specified position. Plotting characters,
line styles, colors etc., are identified with the labels in the character vector
legend. At least one other argument v (a vector the same length as legend)
with the corresponding values of the plotting unit must also be given, as follows:
legend( , fill=v)
Colors for filled boxes
legend( , col=v)
Colors in which points or lines will be drawn
legend( , lty=v)
Line styles
legend( , lwd=v)
Line widths
legend( , pch=v)
Plotting characters (character vector)
title(main, sub)
Adds a title main to the top of the current plot in a large font and (optionally)
a sub-title sub at the bottom in a smaller font.
axis(side, …)
Adds an axis to the current plot on the side given by the first argument (1 to 4,
counting clockwise from the bottom.) Other arguments control the positioning
of the axis within or beside the plot, and tick positions and labels. Useful for
adding custom axes after calling plot() with the axes=FALSE argument.
Low-level plotting functions usually require some positioning information (e.g., x and y
coordinates) to determine where to place the new plot elements. Coordinates are given in
terms of user coordinates which are defined by the previous high-level graphics command
and are chosen based on the supplied data.
Where x and y arguments are required, it is also sufficient to supply a single argument
being a list with elements named x and y. Similarly a matrix with two columns is also
valid input. In this way functions such as locator() (see below) may be used to specify
positions on a plot interactively.
12.2.1 Mathematical annotation
In some cases, it is useful to add mathematical symbols and formulae to a plot. This can
be achieved in R by specifying an expression rather than a character string in any one of
text, mtext, axis, or title. For example, the following code draws the formula for the
Binomial probability function:
Chapter 12: Graphical procedures 72
> text(x, y, expression(paste(bgroup(“(“, atop(n, x), “)”), p^x, q^{n-x})))
More information, including a full listing of the features available can obtained from
within R using the commands:
> help(plotmath)
> example(plotmath)
> demo(plotmath)
12.2.2 Hershey vector fonts
It is possible to specify Hershey vector fonts for rendering text when using the text and
contour functions. There are three reasons for using the Hershey fonts:
 Hershey fonts can produce better output, especially on a computer screen, for rotated
and/or small text.
 Hershey fonts provide certain symbols that may not be available in the standard fonts.
In particular, there are zodiac signs, cartographic symbols and astronomical symbols.
 Hershey fonts provide cyrillic and japanese (Kana and Kanji) characters.
More information, including tables of Hershey characters can be obtained from within
R using the commands:
> help(Hershey)
> demo(Hershey)
> help(Japanese)
> demo(Japanese)
12.3 Interacting with graphics
R also provides functions which allow users to extract or add information to a plot using a
mouse. The simplest of these is the locator() function:
locator(n, type)
Waits for the user to select locations on the current plot using the left mouse
button. This continues until n (default 512) points have been selected, or
another mouse button is pressed. The type argument allows for plotting at the
selected points and has the same effect as for high-level graphics commands; the
default is no plotting. locator() returns the locations of the points selected
as a list with two components x and y.
locator() is usually called with no arguments. It is particularly useful for interactively
selecting positions for graphic elements such as legends or labels when it is difficult to
calculate in advance where the graphic should be placed. For example, to place some
informative text near an outlying point, the command
> text(locator(1), “Outlier”, adj=0)
may be useful. (locator() will be ignored if the current device, such as postscript does
not support interactive pointing.)
identify(x, y, labels)
Allow the user to highlight any of the points defined by x and y (using the left
mouse button) by plotting the corresponding component of labels nearby (or
Chapter 12: Graphical procedures 73
the index number of the point if labels is absent). Returns the indices of the
selected points when another button is pressed.
Sometimes we want to identify particular points on a plot, rather than their positions.
For example, we may wish the user to select some observation of interest from a graphical
display and then manipulate that observation in some way. Given a number of (x; y)
coordinates in two numeric vectors x and y, we could use the identify() function as
follows:
> plot(x, y)
> identify(x, y)
The identify() functions performs no plotting itself, but simply allows the user to
move the mouse pointer and click the left mouse button near a point. If there is a point
near the mouse pointer it will be marked with its index number (that is, its position in the
x/y vectors) plotted nearby. Alternatively, you could use some informative string (such as a
case name) as a highlight by using the labels argument to identify(), or disable marking
altogether with the plot = FALSE argument. When the process is terminated (see above),
identify() returns the indices of the selected points; you can use these indices to extract
the selected points from the original vectors x and y.
12.4 Using graphics parameters
When creating graphics, particularly for presentation or publication purposes, R’s defaults
do not always produce exactly that which is required. You can, however, customize almost
every aspect of the display using graphics parameters. R maintains a list of a large number
of graphics parameters which control things such as line style, colors, figure arrangement
and text justification among many others. Every graphics parameter has a name (such as
‘col’, which controls colors,) and a value (a color number, for example.)
A separate list of graphics parameters is maintained for each active device, and each
device has a default set of parameters when initialized. Graphics parameters can be set
in two ways: either permanently, affecting all graphics functions which access the current
device; or temporarily, affecting only a single graphics function call.
12.4.1 Permanent changes: The par() function
The par() function is used to access and modify the list of graphics parameters for the
current graphics device.
par() Without arguments, returns a list of all graphics parameters and their values
for the current device.
par(c(“col”, “lty”))
With a character vector argument, returns only the named graphics parameters
(again, as a list.)
par(col=4, lty=2)
With named arguments (or a single list argument), sets the values of the named
graphics parameters, and returns the original values of the parameters as a list.
Setting graphics parameters with the par() function changes the value of the parameters
permanently, in the sense that all future calls to graphics functions (on the current device)
Chapter 12: Graphical procedures 74
will be affected by the new value. You can think of setting graphics parameters in this way
as setting “default” values for the parameters, which will be used by all graphics functions
unless an alternative value is given.
Note that calls to par() always affect the global values of graphics parameters, even
when par() is called from within a function. This is often undesirable behavior—usually
we want to set some graphics parameters, do some plotting, and then restore the original
values so as not to affect the user’s R session. You can restore the initial values by saving
the result of par() when making changes, and restoring the initial values when plotting is
complete.
> oldpar <- par(col=4, lty=2)
. . . plotting commands . . .
> par(oldpar)
To save and restore all settable1 graphical parameters use
> oldpar <- par(no.readonly=TRUE)
. . . plotting commands . . .
> par(oldpar)
12.4.2 Temporary changes: Arguments to graphics functions
Graphics parameters may also be passed to (almost) any graphics function as named arguments.
This has the same effect as passing the arguments to the par() function, except
that the changes only last for the duration of the function call. For example:
> plot(x, y, pch=”+”)
produces a scatterplot using a plus sign as the plotting character, without changing the
default plotting character for future plots.
Unfortunately, this is not implemented entirely consistently and it is sometimes necessary
to set and reset graphics parameters using par().
12.5 Graphics parameters list
The following sections detail many of the commonly-used graphical parameters. The R help
documentation for the par() function provides a more concise summary; this is provided
as a somewhat more detailed alternative.
Graphics parameters will be presented in the following form:
name=value
A description of the parameter’s effect. name is the name of the parameter,
that is, the argument name to use in calls to par() or a graphics function.
value is a typical value you might use when setting the parameter.
Note that axes is not a graphics parameter but an argument to a few plot methods:
see xaxt and yaxt.
1 Some graphics parameters such as the size of the current device are for information only.
Chapter 12: Graphical procedures 75
12.5.1 Graphical elements
R plots are made up of points, lines, text and polygons (filled regions.) Graphical parameters
exist which control how these graphical elements are drawn, as follows:
pch=”+” Character to be used for plotting points. The default varies with graphics
drivers, but it is usually ‘’. Plotted points tend to appear slightly above or
below the appropriate position unless you use “.” as the plotting character,
which produces centered points.
pch=4 When pch is given as an integer between 0 and 25 inclusive, a specialized
plotting symbol is produced. To see what the symbols are, use the command
> legend(locator(1), as.character(0:25), pch = 0:25)
Those from 21 to 25 may appear to duplicate earlier symbols, but can be
coloured in different ways: see the help on points and its examples.
In addition, pch can be a character or a number in the range 32:255 representing
a character in the current font.
lty=2 Line types. Alternative line styles are not supported on all graphics devices
(and vary on those that do) but line type 1 is always a solid line, line type 0
is always invisible, and line types 2 and onwards are dotted or dashed lines, or
some combination of both.
lwd=2 Line widths. Desired width of lines, in multiples of the “standard” line width.
Affects axis lines as well as lines drawn with lines(), etc. Not all devices
support this, and some have restrictions on the widths that can be used.
col=2 Colors to be used for points, lines, text, filled regions and images. A number
from the current palette (see ?palette) or a named colour.
col.axis
col.lab
col.main
col.sub The color to be used for axis annotation, x and y labels, main and sub-titles,
respectively.
font=2 An integer which specifies which font to use for text. If possible, device drivers
arrange so that 1 corresponds to plain text, 2 to bold face, 3 to italic, 4 to bold
italic and 5 to a symbol font (which include Greek letters).
font.axis
font.lab
font.main
font.sub The font to be used for axis annotation, x and y labels, main and sub-titles,
respectively.
adj=-0.1 Justification of text relative to the plotting position. 0 means left justify, 1
means right justify and 0.5 means to center horizontally about the plotting
position. The actual value is the proportion of text that appears to the left of
the plotting position, so a value of -0.1 leaves a gap of 10% of the text width
between the text and the plotting position.
Chapter 12: Graphical procedures 76
cex=1.5 Character expansion. The value is the desired size of text characters (including
plotting characters) relative to the default text size.
cex.axis
cex.lab
cex.main
cex.sub The character expansion to be used for axis annotation, x and y labels, main
and sub-titles, respectively.
12.5.2 Axes and tick marks
Many of R’s high-level plots have axes, and you can construct axes yourself with the lowlevel
axis() graphics function. Axes have three main components: the axis line (line style
controlled by the lty graphics parameter), the tick marks (which mark off unit divisions
along the axis line) and the tick labels (which mark the units.) These components can be
customized with the following graphics parameters.
lab=c(5, 7, 12)
The first two numbers are the desired number of tick intervals on the x and
y axes respectively. The third number is the desired length of axis labels, in
characters (including the decimal point.) Choosing a too-small value for this
parameter may result in all tick labels being rounded to the same number!
las=1 Orientation of axis labels. 0 means always parallel to axis, 1 means always
horizontal, and 2 means always perpendicular to the axis.
mgp=c(3, 1, 0)
Positions of axis components. The first component is the distance from the axis
label to the axis position, in text lines. The second component is the distance to
the tick labels, and the final component is the distance from the axis position to
the axis line (usually zero). Positive numbers measure outside the plot region,
negative numbers inside.
tck=0.01 Length of tick marks, as a fraction of the size of the plotting region. When
tck is small (less than 0.5) the tick marks on the x and y axes are forced to
be the same size. A value of 1 gives grid lines. Negative values give tick marks
outside the plotting region. Use tck=0.01 and mgp=c(1,-1.5,0) for internal
tick marks.
xaxs=”r”
yaxs=”i” Axis styles for the x and y axes, respectively. With styles “i” (internal) and
“r” (the default) tick marks always fall within the range of the data, however
style “r” leaves a small amount of space at the edges. (S has other styles not
implemented in R.)
12.5.3 Figure margins
A single plot in R is known as a figure and comprises a plot region surrounded by margins
(possibly containing axis labels, titles, etc.) and (usually) bounded by the axes themselves.
Chapter 12: Graphical procedures 77
A typical figure is
x
y
−3.0 −1.5 0.0 1.5 3.0
−3.0 −1.5 0.0 1.5 3.0
Plot region
mai[1]
mai[2]
Margin
−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−
mar[3]
Graphics parameters controlling figure layout include:
mai=c(1, 0.5, 0.5, 0)
Widths of the bottom, left, top and right margins, respectively, measured in
inches.
mar=c(4, 2, 2, 1)
Similar to mai, except the measurement unit is text lines.
mar and mai are equivalent in the sense that setting one changes the value of the other.
The default values chosen for this parameter are often too large; the right-hand margin is
rarely needed, and neither is the top margin if no title is being used. The bottom and left
margins must be large enough to accommodate the axis and tick labels. Furthermore, the
default is chosen without regard to the size of the device surface: for example, using the
postscript() driver with the height=4 argument will result in a plot which is about 50%
margin unless mar or mai are set explicitly. When multiple figures are in use (see below) the
margins are reduced, however this may not be enough when many figures share the same
page.
Chapter 12: Graphical procedures 78
12.5.4 Multiple figure environment
R allows you to create an n by m array of figures on a single page. Each figure has its own
margins, and the array of figures is optionally surrounded by an outer margin, as shown in
the following figure.
mfg=c(3,2,3,2)
omi[1]
omi[4]
mfrow=c(3,2)
−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−
oma[3]
The graphical parameters relating to multiple figures are as follows:
mfcol=c(3, 2)
mfrow=c(2, 4)
Set the size of a multiple figure array. The first value is the number of rows;
the second is the number of columns. The only difference between these two
parameters is that setting mfcol causes figures to be filled by column; mfrow
fills by rows.
The layout in the Figure could have been created by setting mfrow=c(3,2); the
figure shows the page after four plots have been drawn.
Setting either of these can reduce the base size of symbols and text (controlled
by par(“cex”) and the pointsize of the device). In a layout with exactly two
rows and columns the base size is reduced by a factor of 0.83: if there are three
or more of either rows or columns, the reduction factor is 0.66.
mfg=c(2, 2, 3, 2)
Position of the current figure in a multiple figure environment. The first two
numbers are the row and column of the current figure; the last two are the
number of rows and columns in the multiple figure array. Set this parameter
to jump between figures in the array. You can even use different values for the
last two numbers than the true values for unequally-sized figures on the same
page.
fig=c(4, 9, 1, 4)/10
Position of the current figure on the page. Values are the positions of the left,
right, bottom and top edges respectively, as a percentage of the page measured
Chapter 12: Graphical procedures 79
from the bottom left corner. The example value would be for a figure in the
bottom right of the page. Set this parameter for arbitrary positioning of figures
within a page. If you want to add a figure to a current page, use new=TRUE as
well (unlike S).
oma=c(2, 0, 3, 0)
omi=c(0, 0, 0.8, 0)
Size of outer margins. Like mar and mai, the first measures in text lines and
the second in inches, starting with the bottom margin and working clockwise.
Outer margins are particularly useful for page-wise titles, etc. Text can be added to the
outer margins with the mtext() function with argument outer=TRUE. There are no outer
margins by default, however, so you must create them explicitly using oma or omi.
More complicated arrangements of multiple figures can be produced by the
split.screen() and layout() functions, as well as by the grid and lattice packages.
12.6 Device drivers
R can generate graphics (of varying levels of quality) on almost any type of display or
printing device. Before this can begin, however, R needs to be informed what type of
device it is dealing with. This is done by starting a device driver. The purpose of a device
driver is to convert graphical instructions from R (“draw a line,” for example) into a form
that the particular device can understand.
Device drivers are started by calling a device driver function. There is one such function
for every device driver: type help(Devices) for a list of them all. For example, issuing the
command
> postscript()
causes all future graphics output to be sent to the printer in PostScript format. Some
commonly-used device drivers are:
X11() For use with the X11 window system on Unix-alikes
windows()
For use on Windows
quartz() For use on Mac OS X
postscript()
For printing on PostScript printers, or creating PostScript graphics files.
pdf() Produces a PDF file, which can also be included into PDF files.
png() Produces a bitmap PNG file. (Not always available: see its help page.)
jpeg() Produces a bitmap JPEG file, best used for image plots. (Not always available:
see its help page.)
When you have finished with a device, be sure to terminate the device driver by issuing
the command
> dev.off()
This ensures that the device finishes cleanly; for example in the case of hardcopy devices
this ensures that every page is completed and has been sent to the printer. (This will
happen automatically at the normal end of a session.)
Chapter 12: Graphical procedures 80
12.6.1 PostScript diagrams for typeset documents
By passing the file argument to the postscript() device driver function, you may store
the graphics in PostScript format in a file of your choice. The plot will be in landscape
orientation unless the horizontal=FALSE argument is given, and you can control the size
of the graphic with the width and height arguments (the plot will be scaled as appropriate
to fit these dimensions.) For example, the command
> postscript(“file.ps”, horizontal=FALSE, height=5, pointsize=10)
will produce a file containing PostScript code for a figure five inches high, perhaps for
inclusion in a document. It is important to note that if the file named in the command
already exists, it will be overwritten. This is the case even if the file was only created earlier
in the same R session.
Many usages of PostScript output will be to incorporate the figure in another document.
This works best when encapsulated PostScript is produced: R always produces conformant
output, but only marks the output as such when the onefile=FALSE argument is supplied.
This unusual notation stems from S-compatibility: it really means that the output will be a
single page (which is part of the EPSF specification). Thus to produce a plot for inclusion
use something like
> postscript(“plot1.eps”, horizontal=FALSE, onefile=FALSE,
height=8, width=6, pointsize=10)
12.6.2 Multiple graphics devices
In advanced use of R it is often useful to have several graphics devices in use at the same
time. Of course only one graphics device can accept graphics commands at any one time,
and this is known as the current device. When multiple devices are open, they form a
numbered sequence with names giving the kind of device at any position.
The main commands used for operating with multiple devices, and their meanings are
as follows:
X11() [UNIX]
windows()
win.printer()
win.metafile()
[Windows]
quartz() [Mac OS X]
postscript()
pdf()
png()
jpeg()
tiff()
bitmap()
… Each new call to a device driver function opens a new graphics device, thus
extending by one the device list. This device becomes the current device, to
which graphics output will be sent.
Chapter 12: Graphical procedures 81
dev.list()
Returns the number and name of all active devices. The device at position 1
on the list is always the null device which does not accept graphics commands
at all.
dev.next()
dev.prev()
Returns the number and name of the graphics device next to, or previous to
the current device, respectively.
dev.set(which=k)
Can be used to change the current graphics device to the one at position k of
the device list. Returns the number and label of the device.
dev.off(k)
Terminate the graphics device at point k of the device list. For some devices,
such as postscript devices, this will either print the file immediately or correctly
complete the file for later printing, depending on how the device was
initiated.
dev.copy(device, …, which=k)
dev.print(device, …, which=k)
Make a copy of the device k. Here device is a device function, such as
postscript, with extra arguments, if needed, specified by ‘…’. dev.print is
similar, but the copied device is immediately closed, so that end actions, such
as printing hardcopies, are immediately performed.
graphics.off()
Terminate all graphics devices on the list, except the null device.
12.7 Dynamic graphics
R does not have builtin capabilities for dynamic or interactive graphics, e.g. rotating point
clouds or to “brushing” (interactively highlighting) points. However, extensive dynamic
graphics facilities are available in the system GGobi by Swayne, Cook and Buja available
from

http://www.ggobi.org/

and these can be accessed from R via the package rggobi, described at

http://www.ggobi.org/rggobi.

Also, package rgl provides ways to interact with 3D plots, for example of surfaces.
Chapter 13: Packages 82
13 Packages
All R functions and datasets are stored in packages. Only when a package is loaded are its
contents available. This is done both for efficiency (the full list would take more memory and
would take longer to search than a subset), and to aid package developers, who are protected
from name clashes with other code. The process of developing packages is described in
Section “Creating R packages” in Writing R Extensions. Here, we will describe them from
a user’s point of view.
To see which packages are installed at your site, issue the command
> library()
with no arguments. To load a particular package (e.g., the boot package containing functions
from Davison & Hinkley (1997)), use a command like
> library(boot)
Users connected to the Internet can use the install.packages() and
update.packages() functions (available through the Packages menu in the Windows and
RAqua GUIs, see Section “Installing packages” in R Installation and Administration) to
install and update packages.
To see which packages are currently loaded, use
> search()
to display the search list. Some packages may be loaded but not available on the search list
(see Section 13.3 [Namespaces], page 83): these will be included in the list given by
> loadedNamespaces()
To see a list of all available help topics in an installed package, use
> help.start()
to start the HTML help system, and then navigate to the package listing in the Reference
section.
13.1 Standard packages
The standard (or base) packages are considered part of the R source code. They contain the
basic functions that allow R to work, and the datasets and standard statistical and graphical
functions that are described in this manual. They should be automatically available in any
R installation. See Section “R packages” in R FAQ, for a complete list.
13.2 Contributed packages and CRAN
There are hundreds of contributed packages for R, written by many different authors. Some
of these packages implement specialized statistical methods, others give access to data or
hardware, and others are designed to complement textbooks. Some (the recommended packages)
are distributed with every binary distribution of R. Most are available for download
from CRAN (http://CRAN.R-project.org/ and its mirrors), and other repositories such
as Bioconductor (http://www.bioconductor.org/). The R FAQ contains a list that was
current at the time of release, but the collection of available packages changes frequently.
Chapter 13: Packages 83
13.3 Namespaces
Packages can have namespaces, and currently all of the base and recommended packages do
except the datasets package. Namespaces do three things: they allow the package writer
to hide functions and data that are meant only for internal use, they prevent functions from
breaking when a user (or other package writer) picks a name that clashes with one in the
package, and they provide a way to refer to an object within a particular package.
For example, t() is the transpose function in R, but users might define their own function
named t. Namespaces prevent the user’s definition from taking precedence, and breaking
every function that tries to transpose a matrix.
There are two operators that work with namespaces. The double-colon operator ::
selects definitions from a particular namespace. In the example above, the transpose function
will always be available as base::t, because it is defined in the base package. Only
functions that are exported from the package can be retrieved in this way.
The triple-colon operator ::: may be seen in a few places in R code: it acts like the
double-colon operator but also allows access to hidden objects. Users are more likely to use
the getAnywhere() function, which searches multiple packages.
Packages are often inter-dependent, and loading one may cause others to be automatically
loaded. The colon operators described above will also cause automatic loading of the
associated package. When packages with namespaces are loaded automatically they are not
added to the search list.
Appendix A: A sample session 84
Appendix A A sample session
The following session is intended to introduce to you some features of the R environment
by using them. Many features of the system will be unfamiliar and puzzling at first, but
this puzzlement will soon disappear.
Login, start your windowing system.
$ R Start R as appropriate for your platform.
The R program begins, with a banner.
(Within R, the prompt on the left hand side will not be shown to avoid confusion.)
help.start()
Start the HTML interface to on-line help (using a web browser available at
your machine). You should briefly explore the features of this facility with the
mouse.
Iconify the help window and move on to the next part.
x <- rnorm(50)
y <- rnorm(x)
Generate two pseudo-random normal vectors of x- and y-coordinates.
plot(x, y)
Plot the points in the plane. A graphics window will appear automatically.
ls() See which R objects are now in the R workspace.
rm(x, y) Remove objects no longer needed. (Clean up).
x <- 1:20 Make x = (1; 2; : : : ; 20).
w <- 1 + sqrt(x)/2
A ‘weight’ vector of standard deviations.
dummy <- data.frame(x=x, y= x + rnorm(x)*w)
dummy Make a data frame of two columns, x and y, and look at it.
fm <- lm(y ~ x, data=dummy)
summary(fm)
Fit a simple linear regression and look at the analysis. With y to the left of the
tilde, we are modelling y dependent on x.
fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)
summary(fm1)
Since we know the standard deviations, we can do a weighted regression.
attach(dummy)
Make the columns in the data frame visible as variables.
lrf <- lowess(x, y)
Make a nonparametric local regression function.
plot(x, y)
Standard point plot.
Appendix A: A sample session 85
lines(x, lrf$y)
Add in the local regression.
abline(0, 1, lty=3)
The true regression line: (intercept 0, slope 1).
abline(coef(fm))
Unweighted regression line.
abline(coef(fm1), col = “red”)
Weighted regression line.
detach() Remove data frame from the search path.
plot(fitted(fm), resid(fm),
xlab=”Fitted values”,
ylab=”Residuals”,
main=”Residuals vs Fitted”)
A standard regression diagnostic plot to check for heteroscedasticity. Can you
see it?
qqnorm(resid(fm), main=”Residuals Rankit Plot”)
A normal scores plot to check for skewness, kurtosis and outliers. (Not very
useful here.)
rm(fm, fm1, lrf, x, dummy)
Clean up again.
The next section will look at data from the classical experiment of Michaelson and Morley
to measure the speed of light. This dataset is available in the morley object, but we will
read it to illustrate the read.table function.
filepath <- system.file(“data”, “morley.tab” , package=”datasets”)
filepath Get the path to the data file.
file.show(filepath)
Optional. Look at the file.
mm <- read.table(filepath)
mm Read in the Michaelson and Morley data as a data frame, and look at it. There
are five experiments (column Expt) and each has 20 runs (column Run) and sl
is the recorded speed of light, suitably coded.
mm$Expt <- factor(mm$Expt)
mm$Run <- factor(mm$Run)
Change Expt and Run into factors.
attach(mm)
Make the data frame visible at position 3 (the default).
plot(Expt, Speed, main=”Speed of Light Data”, xlab=”Experiment No.”)
Compare the five experiments with simple boxplots.
fm <- aov(Speed ~ Run + Expt, data=mm)
summary(fm)
Analyze as a randomized block, with ‘runs’ and ‘experiments’ as factors.
Appendix A: A sample session 86
fm0 <- update(fm, . ~ . – Run)
anova(fm0, fm)
Fit the sub-model omitting ‘runs’, and compare using a formal analysis of variance.
detach()
rm(fm, fm0)
Clean up before moving on.
We now look at some more graphical features: contour and image plots.
x <- seq(-pi, pi, len=50)
y <- x x is a vector of 50 equally spaced values in 􀀀  x  . y is the same.
f <- outer(x, y, function(x, y) cos(y)/(1 + x^2))
f is a square matrix, with rows and columns indexed by x and y respectively,
of values of the function cos(y)=(1 + x2).
oldpar <- par(no.readonly = TRUE)
par(pty=”s”)
Save the plotting parameters and set the plotting region to “square”.
contour(x, y, f)
contour(x, y, f, nlevels=15, add=TRUE)
Make a contour map of f; add in more lines for more detail.
fa <- (f-t(f))/2
fa is the “asymmetric part” of f. (t() is transpose).
contour(x, y, fa, nlevels=15)
Make a contour plot, . . .
par(oldpar)
. . . and restore the old graphics parameters.
image(x, y, f)
image(x, y, fa)
Make some high density image plots, (of which you can get hardcopies if you
wish), . . .
objects(); rm(x, y, f, fa)
. . . and clean up before moving on.
R can do complex arithmetic, also.
th <- seq(-pi, pi, len=100)
z <- exp(1i*th)
1i is used for the complex number i.
par(pty=”s”)
plot(z, type=”l”)
Plotting complex arguments means plot imaginary versus real parts. This
should be a circle.
Appendix A: A sample session 87
w <- rnorm(100) + rnorm(100)*1i
Suppose we want to sample points within the unit circle. One method would be
to take complex numbers with standard normal real and imaginary parts . . .
w <- ifelse(Mod(w) > 1, 1/w, w)
. . . and to map any outside the circle onto their reciprocal.
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=”+”,xlab=”x”, ylab=”y”)
lines(z)
All points are inside the unit circle, but the distribution is not uniform.
w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=”+”, xlab=”x”, ylab=”y”)
lines(z)
The second method uses the uniform distribution. The points should now look
more evenly spaced over the disc.
rm(th, w, z)
Clean up again.
q() Quit the R program. You will be asked if you want to save the R workspace,
and for an exploratory session like this, you probably do not want to save it.
Appendix B: Invoking R 88
Appendix B Invoking R
B.1 Invoking R from the command line
When working in UNIX or at a command line in Windows, the command ‘R’ can be used
both for starting the main R program in the form
R [options] [<infile] [>outfile],
or, via the R CMD interface, as a wrapper to various R tools (e.g., for processing files in
R documentation format or manipulating add-on packages) which are not intended to be
called “directly”.
You need to ensure that either the environment variable TMPDIR is unset or it points to
a valid place to create temporary files and directories.
Most options control what happens at the beginning and at the end of an R session.
The startup mechanism is as follows (see also the on-line help for topic ‘Startup’ for more
information, and the section below for some Windows-specific details).
 Unless ‘–no-environ’ was given, R searches for user and site files to process for
setting environment variables. The name of the site file is the one pointed to by
the environment variable R_ENVIRON; if this is unset, ‘R_HOME/etc/Renviron.site’ is
used (if it exists). The user file is the one pointed to by the environment variable R_
ENVIRON_USER if this is set; otherwise, files ‘.Renviron’ in the current or in the user’s
home directory (in that order) are searched for. These files should contain lines of
the form ‘name=value’. (See help(“Startup”) for a precise description.) Variables
you might want to set include R_PAPERSIZE (the default paper size), R_PRINTCMD (the
default print command) and R_LIBS (specifies the list of R library trees searched for
add-on packages).
 Then R searches for the site-wide startup profile unless the command line option
‘–no-site-file’ was given. The name of this file is taken from the value
of the R_PROFILE environment variable. If that variable is unset, the default
‘R_HOME/etc/Rprofile.site’ is used if this exists.
 Then, unless ‘–no-init-file’ was given, R searches for a user profile and sources it.
The name of this file is taken from the environment variable R_PROFILE_USER; if unset,
a file called ‘.Rprofile’ in the current directory or in the user’s home directory (in
that order) is searched for.
 It also loads a saved image from ‘.RData’ if there is one (unless ‘–no-restore’ or
‘–no-restore-data’ was specified).
 Finally, if a function .First exists, it is executed. This function (as well as .Last
which is executed at the end of the R session) can be defined in the appropriate startup
profiles, or reside in ‘.RData’.
In addition, there are options for controlling the memory available to the R process (see
the on-line help for topic ‘Memory’ for more information). Users will not normally need to
use these unless they are trying to limit the amount of memory used by R.
R accepts the following command-line options.
‘–help’
‘-h’ Print short help message to standard output and exit successfully.
Appendix B: Invoking R 89
‘–version’
Print version information to standard output and exit successfully.
‘–encoding=enc’
Specify the encoding to be assumed for input from the console or stdin. This
needs to be an encoding known to iconv: see its help page.
‘RHOME’ Print the path to the R “home directory” to standard output and exit successfully.
Apart from the front-end shell script and the man page, R installation
puts everything (executables, packages, etc.) into this directory.
‘–save’
‘–no-save’
Control whether data sets should be saved or not at the end of the R session.
If neither is given in an interactive session, the user is asked for the desired
behavior when ending the session with q(); in non-interactive use one of these
must be specified or implied by some other option (see below).
‘–no-environ’
Do not read any user file to set environment variables.
‘–no-site-file’
Do not read the site-wide profile at startup.
‘–no-init-file’
Do not read the user’s profile at startup.
‘–restore’
‘–no-restore’
‘–no-restore-data’
Control whether saved images (file ‘.RData’ in the directory where R was
started) should be restored at startup or not. The default is to restore.
(‘–no-restore’ implies all the specific ‘–no-restore-*’ options.)
‘–no-restore-history’
Control whether the history file (normally file ‘.Rhistory’ in the directory
where R was started, but can be set by the environment variable R_HISTFILE)
should be restored at startup or not. The default is to restore.
‘–no-Rconsole’
(Windows only) Prevent loading the ‘Rconsole’ file at startup.
‘–vanilla’
Combine ‘–no-save’, ‘–no-environ’, ‘–no-site-file’, ‘–no-init-file’
and ‘–no-restore’. Under Windows, this also includes ‘–no-Rconsole’.
‘-f file’
‘–file=file’
Take input from file: ‘-’ means stdin. Implies ‘–no-save’ unless ‘–save’ has
been set.
‘-e expression’
Use expression as an input line. One or more ‘-e’ options can be used, but not
together with ‘-f’ or ‘–file’. Implies ‘–no-save’ unless ‘–save’ has been
Appendix B: Invoking R 90
set. (There is a limit of 10,000 bytes on the total length of expressions used in
this way.)
‘–no-readline’
(UNIX only) Turn off command-line editing via readline. This is useful when
running R from within Emacs using the ESS (“Emacs Speaks Statistics”)
package. See Appendix C [The command-line editor], page 95, for more
information. Command-line editing is enabled by default interactive use (see
‘–interactive’). This option also affects tilde-epansion: see the help for
path.expand.
‘–min-vsize=N’
‘–max-vsize=N’
Specify the minimum or maximum amount of memory used for variable size
objects by setting the “vector heap” size to N bytes. Here, N must either be
an integer or an integer ending with ‘G’, ‘M’, ‘K’, or ‘k’, meaning ‘Giga’ (2^30),
‘Mega’ (2^20), (computer) ‘Kilo’ (2^10), or regular ‘kilo’ (1000).
‘–min-nsize=N’
‘–max-nsize=N’
Specify the amount of memory used for fixed size objects by setting the number
of “cons cells” to N. See the previous option for details on N. A cons cell takes
28 bytes on a 32-bit machine, and usually 56 bytes on a 64-bit machine.
‘–max-ppsize=N’
Specify the maximum size of the pointer protection stack as N locations. This
defaults to 10000, but can be increased to allow large and complicated calculations
to be done. Currently the maximum value accepted is 100000.
‘–max-mem-size=N’
(Windows only) Specify a limit for the amount of memory to be used both for
R objects and working areas. This is set by default to the smaller of 1.5Gb1
and the amount of physical RAM in the machine, and must be between 32Mb
and the maximum allowed on that version of Windows.
‘–quiet’
‘–silent’
‘-q’ Do not print out the initial copyright and welcome messages.
‘–slave’ Make R run as quietly as possible. This option is intended to support programs
which use R to compute results for them. It implies ‘–quiet’ and ‘–no-save’.
‘–interactive’
(UNIX only) Assert that R really is being run interactively even if input has
been redirected: use if input is from a FIFO or pipe and fed from an interactive
program. (The default is to deduce that R is being run interactively if and
only if ‘stdin’ is connected to a terminal or pty.) Using ‘-e’, ‘-f’ or ‘–file’
asserts non-interactive use even if ‘–interactive’ is given.
1 2.5Gb on versions of Windows that support 3Gb per process and have the support enabled: see the
‘rw-FAQ’ Q2.9; 3.5Gb on some 64-bit versions of Windows.
Appendix B: Invoking R 91
‘–ess’ (Windows only) Set Rterm up for use by R-inferior-mode in ESS, including
asserting interactive use without the command-line editor.
‘–verbose’
Print more information about progress, and in particular set R’s option verbose
to TRUE. R code uses this option to control the printing of diagnostic messages.
‘–debugger=name’
‘-d name’ (UNIX only) Run R through debugger name. For most debuggers (the exceptions
are valgrind and recent versions of gdb), further command line options
are disregarded, and should instead be given when starting the R executable
from inside the debugger.
‘–gui=type’
‘-g type’ (UNIX only) Use type as graphical user interface (note that this also includes
interactive graphics). Currently, possible values for type are ‘X11’ (the default)
and, provided that ‘Tcl/Tk’ support is available, ‘Tk’. (For back-compatibility,
‘x11’ and ‘tk’ are accepted.)
‘–args’ This flag does nothing except cause the rest of the command line to be skipped:
this can be useful to retrieve values from it with commandArgs(TRUE).
Note that input and output can be redirected in the usual way (using ‘<’ and ‘>’), but
the line length limit of 4095 bytes still applies. Warning and error messages are sent to the
error channel (stderr).
The command R CMD allows the invocation of various tools which are useful in conjunction
with R, but not intended to be called “directly”. The general form is
R CMD command args
where command is the name of the tool and args the arguments passed on to it.
Currently, the following tools are available.
BATCH Run R in batch mode.
COMPILE (UNIX only) Compile files for use with R.
SHLIB Build shared library for dynamic loading.
INSTALL Install add-on packages.
REMOVE Remove add-on packages.
build Build (that is, package) add-on packages.
check Check add-on packages.
LINK (UNIX only) Front-end for creating executable programs.
Rprof Post-process R profiling files.
Rdconv
Rd2txt Convert Rd format to various other formats, including HTML, LATEX, plain text,
and extracting the examples. Rd2txt can be used as shorthand for Rd2txt -t
txt.
Appendix B: Invoking R 92
Rd2dvi
Rd2pdf Convert Rd format to DVI/PDF. Rd2pdf can be used as shorthand for Rd2dvi
–pdf.
Sd2Rd Convert S documentation to Rd format.
Stangle Extract S/R code from Sweave documentation
Sweave Process Sweave documentation
Rdiff Diff R output ignoring headers etc
config Obtain configuration information.
javareconf
(Unix only) Update the Java configuration variables
Use
R CMD command –help
to obtain usage information for each of the tools accessible via the R CMD interface.
In addition, you can use
R CMD cmd args
for any other executable cmd on the path: this is useful to have the same environment
as R or the specific commands run under, for example to run ldd or pdflatex. Under
a Unix-alike, if cmd is ‘perl’ or ‘awk’ it is replaced by the full path to the Perl or AWK
command found when R was configured.
B.2 Invoking R under Windows
There are two ways to run R under Windows. Within a terminal window (e.g. cmd.exe or
command.com or a more capable shell), the methods described in the previous section may
be used, invoking by R.exe or more directly by Rterm.exe. (These are principally intended
for batch use.) For interactive use, there is a console-based GUI (Rgui.exe).
The startup procedure under Windows is very similar to that under UNIX, but references
to the ‘home directory’ need to be clarified, as this is not always defined on
Windows. If the environment variable R_USER is defined, that gives the home directory.
Next, if the environment variable HOME is defined, that gives the home directory.
After those two user-controllable settings, R tries to find system defined home directories.
It first tries to use the Windows “personal” directory (typically C:\Documents and
Settings\username\My Documents in Windows XP). If that fails, and environment variables
HOMEDRIVE and HOMEPATH are defined (and they normally are) these define the home
directory. Failing all those, the home directory is taken to be the starting directory.
You need to ensure that either the environment variables TMPDIR, TMP and TEMP are
either unset or one of them points to a valid place to create temporary files and directories.
Environment variables can be supplied as ‘name=value’ pairs on the command line.
If there is an argument ending ‘.RData’ (in any case) it is interpreted as the path to
the workspace to be restored: it implies ‘–restore’ and sets the working directory to the
parent of the named file. (This mechanism is used for drag-and-drop and file association
with RGui.exe, but also works for Rterm.exe. If the named file does not exist it sets the
working directory if the parent directory exists.)
Appendix B: Invoking R 93
The following additional command-line options are available when invoking RGui.exe.
‘–mdi’
‘–sdi’
‘–no-mdi’
Control whether Rgui will operate as an MDI program (with multiple child
windows within one main window) or an SDI application (with multiple toplevel
windows for the console, graphics and pager). The command-line setting
overrides the setting in the user’s ‘Rconsole’ file.
‘–debug’ Enable the “Break to debugger” menu item in Rgui, and trigger a break to the
debugger during command line processing.
In Windows with R CMD you may also specify your own ‘.bat’, ‘.exe’, ‘.sh’ or ‘.pl’
file. It will be run under the appropriate interpreter (Perl for ‘.pl’) with several environment
variables set appropriately, including R_HOME, R_VERSION, R_CMD, R_OSTYPE, PATH,
PERL5LIB, and TEXINPUTS. For example, if you already have ‘latex.exe’ on your path,
then
R CMD latex.exe mydoc
will run LATEX on ‘mydoc.tex’, with the path to R’s ‘share/texmf’ macros appended to
TEXINPUTS. (Unfortunately, this does not help with the MiKTeX build of LATEX.)
B.3 Invoking R under Mac OS X
There are two ways to run R under Mac OS X. Within a Terminal.app window by invoking
R, the methods described in the first subsection apply. There is also console-based GUI
(R.app) that by default is installed in the Applications folder on your system. It is a
standard double-clickable Mac OS X application.
The startup procedure under Mac OS X is very similar to that under UNIX. The ‘home
directory’ is the one inside the R.framework, but the startup and current working directory
are set as the user’s home directory unless a different startup directory is given in the
Preferences window accessible from within the GUI.
B.4 Scripting with R
If you just want to run a file ‘foo.R’ of R commands, the recommended way is to use R CMD
BATCH foo.R. If you want to run this in the background or as a batch job use OS-specific
facilities to do so: for example in most shells on Unix-alike OSes R CMD BATCH foo.R & runs
a background job.
You can pass parameters to scripts via additional arguments on the command line: for
example
R CMD BATCH –args arg1 arg2 foo.R &
will pass arguments to a script which can be retrieved as a character vector by
args <- commandArgs(TRUE)
This is made simpler by the alternative front-end Rscript, which can be invoked by
Rscript foo.R arg1 arg2
and this can also be used to write executable script files like (at least on Unix-alikes, and
in some Windows shells)
Appendix B: Invoking R 94
#! /path/to/Rscript
args <- commandArgs(TRUE)

q(status=<exit status code>)
If this is entered into a text file ‘runfoo’ and this is made executable (by chmod 755 runfoo),
it can be invoked for different arguments by
runfoo arg1 arg2
For further options see help(“Rscript”). This writes R output to ‘stdout’ and ‘stderr’,
and this can be redirected in the usual way for the shell running the command.
If you do not wish to hardcode the path to Rscript but have it in your path (which is
normally the case for an installed R except on Windows), use
#! /usr/bin/env Rscript

At least in Bourne and bash shells, the #! mechanism does not allow extra arguments like
#! /usr/bin/env Rscript –vanilla.
One thing to consider is what stdin() refers to. It is commonplace to write R scripts
with segments like
chem <- scan(n=24)
2.90 3.10 3.40 3.40 3.70 3.70 2.80 2.50 2.40 2.40 2.70 2.20
5.28 3.37 3.03 3.03 28.95 3.77 3.40 2.20 3.50 3.60 3.70 3.70
and stdin() refers to the script file to allow such traditional usage. If you want to refer to
the process’s ‘stdin’, use “stdin” as a file connection, e.g. scan(“stdin”, …).
Another way to write executable script files (suggested by Fran¸cois Pinard) is to use a
here document like
#!/bin/sh
[environment variables can be set here]
R –slave [other options] <<EOF
R program goes here…
EOF
but here stdin() refers to the program source and “stdin” will not be usable.
Very short scripts can be passed to Rscript on the command-line via the ‘-e’ flag.
Appendix C: The command-line editor 95
Appendix C The command-line editor
C.1 Preliminaries
When the GNU readline library is available at the time R is configured for compilation
under UNIX, an inbuilt command line editor allowing recall, editing and re-submission of
prior commands is used. Note that other versions of readline exist and may be used by the
inbuilt command line editor: this may happen on Mac OS X.
It can be disabled (useful for usage with ESS1) using the startup option ‘–no-readline’.
Windows versions of R have somewhat simpler command-line editing: see ‘Console’
under the ‘Help’ menu of the GUI, and the file ‘README.Rterm’ for command-line editing
under Rterm.exe.
When using R with readline capabilities, the functions described below are available.
Many of these use either Control or Meta characters. Control characters, such as
Control-m, are obtained by holding the CTRL down while you press the M key, and are
written as C-m below. Meta characters, such as Meta-b, are typed by holding down META2
and pressing B, and written as M-b in the following. If your terminal does not have a
META key, you can still type Meta characters using two-character sequences starting with
ESC. Thus, to enter M-b, you could type ESCB. The ESC character sequences are also
allowed on terminals with real Meta keys. Note that case is significant for Meta characters.
C.2 Editing actions
The R program keeps a history of the command lines you type, including the erroneous lines,
and commands in your history may be recalled, changed if necessary, and re-submitted as
new commands. In Emacs-style command-line editing any straight typing you do while in
this editing phase causes the characters to be inserted in the command you are editing,
displacing any characters to the right of the cursor. In vi mode character insertion mode
is started by M-i or M-a, characters are typed and insertion mode is finished by typing a
further ESC.
Pressing the RET command at any time causes the command to be re-submitted.
Other editing actions are summarized in the following table.
C.3 Command-line editor summary
Command recall and vertical motion
C-p Go to the previous command (backwards in the history).
C-n Go to the next command (forwards in the history).
C-r text Find the last command with the text string in it.
On most terminals, you can also use the up and down arrow keys instead of C-p and
C-n, respectively.
1 The ‘Emacs Speaks Statistics’ package; see the URL http://ESS.R-project.org
2 On a PC keyboard this is usually the Alt key, occasionally the ‘Windows’ key.
Appendix C: The command-line editor 96
Horizontal motion of the cursor
C-a Go to the beginning of the command.
C-e Go to the end of the line.
M-b Go back one word.
M-f Go forward one word.
C-b Go back one character.
C-f Go forward one character.
On most terminals, you can also use the left and right arrow keys instead of C-b and
C-f, respectively.
Editing and re-submission
text Insert text at the cursor.
C-f text Append text after the cursor.
DEL Delete the previous character (left of the cursor).
C-d Delete the character under the cursor.
M-d Delete the rest of the word under the cursor, and “save” it.
C-k Delete from cursor to end of command, and “save” it.
C-y Insert (yank) the last “saved” text here.
C-t Transpose the character under the cursor with the next.
M-l Change the rest of the word to lower case.
M-c Change the rest of the word to upper case.
RET Re-submit the command to R.
The final RET terminates the command line editing sequence.
Appendix D: Function and variable index 97
Appendix D Function and variable index
!
! : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
!= : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
%
%*%: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
%o%: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
&
& : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
&& : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
*
* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
+
+ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
-
– : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
.
. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
.First : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
.Last : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
/
/ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
:
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
:: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83
:::: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83
<
< : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
<<-: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 49
<= : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
=
== : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
>
> : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
>= : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
?
? : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
?? : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
^
^ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
|
| : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
|| : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
~
~ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 55
A
abline : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
ace: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
add1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
anova: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57, 59
aov: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
aperm : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
array : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21
as.data.frame : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
as.vector : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26
attach : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
attr : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
attributes: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
avas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
axis : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71
B
boxplot : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
break : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
bruto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
C
c : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7, 10, 26, 29
C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
cbind : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
coef : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
coefficients : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
contour : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
contrasts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
Appendix D: Function and variable index 98
coplot : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68
cos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
crossprod : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21, 23
cut: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 27
D
data : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33
data.frame: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
density : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36
det: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
detach : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
determinant : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
dev.list : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
dev.next : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
dev.off : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
dev.prev : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
dev.set : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
deviance : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
diag : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
dim: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 19
dotchart : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
drop1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
E
ecdf : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
edit : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34
eigen : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
else : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
Error : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5
exp : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
F
F : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
factor : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
FALSE : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
fivenum : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36
for: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
formula : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
function : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44
G
getAnywhere : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52
getS3method : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52
glm: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61
H
help: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
help.search: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
help.start: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
hist : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36, 69
I
identify : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
if : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
ifelse : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
image : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
is.na : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
is.nan : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
J
jpeg : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
K
ks.test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38
L
legend : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71
length: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8, 13
levels : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
lines : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
list : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
lm : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
lme: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
locator : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
loess : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
log : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
lqs: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
lsfit : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
M
mars : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
max : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
mean: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
methods : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52
min : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
mode : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13
N
NA : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
NaN: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
ncol : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
next : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
nlm : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63, 64, 65
nlme : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
nlminb : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63
nrow : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
O
optim : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63
order : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
ordered : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17
outer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
Appendix D: Function and variable index 99
P
pairs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68
par: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 73
paste : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
pdf: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
persp : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
plot : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58, 67
pmax: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
pmin: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
png: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
points : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
polygon : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71
postscript: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
predict : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
print : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
prod: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
Q
qqline: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37, 69
qqnorm: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37, 69
qqplot : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
qr : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
quartz : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
R
range : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
rbind : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
read.table: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 32
rep : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
repeat : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
resid : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
residuals : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
rlm: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
rm : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
S
scan : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33
sd : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17
search : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31
seq : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
shapiro.test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38
sin : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
sink: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
solve : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
sort: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
source : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
split : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
sqrt: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
stem : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36
step : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58, 59
sum : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36, 58
svd: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
T
t : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
T : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
t.test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
table: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21, 26
tan : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
tapply : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
text : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
title : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71
tree : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
TRUE: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
U
unclass : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 15
update : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59
V
var : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8, 17
var.test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40
vcov : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
vector : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
W
while : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
wilcox.test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40
windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
X
X11: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
Appendix E: Concept index 100
Appendix E Concept index
A
Accessing builtin datasets: : : : : : : : : : : : : : : : : : : : : : 33
Additive models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
Analysis of variance : : : : : : : : : : : : : : : : : : : : : : : : : : : 58
Arithmetic functions and operators : : : : : : : : : : : : : 8
Arrays : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 19
Assignment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
Attributes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13
B
Binary operators : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
Box plots : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
C
Character vectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 15, 51
Concatenating lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
Contrasts: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 56
Control statements : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
CRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82
Customizing the environment : : : : : : : : : : : : : : : : : : 50
D
Data frames : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
Default values : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
Density estimation: : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36
Determinants : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
Diverting input and output : : : : : : : : : : : : : : : : : : : : : 6
Dynamic graphics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
E
Eigenvalues and eigenvectors : : : : : : : : : : : : : : : : : : : 24
Empirical CDFs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
F
Factors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16, 56
Families : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60
Formulae : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54
G
Generalized linear models : : : : : : : : : : : : : : : : : : : : : : 60
Generalized transpose of an array : : : : : : : : : : : : : : 23
Generic functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
Graphics device drivers : : : : : : : : : : : : : : : : : : : : : : : : 79
Graphics parameters: : : : : : : : : : : : : : : : : : : : : : : : : : : 73
Grouped expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
I
Indexing of and by arrays : : : : : : : : : : : : : : : : : : : : : : 19
Indexing vectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 11
K
Kolmogorov-Smirnov test : : : : : : : : : : : : : : : : : : : : : : 38
L
Least squares fitting : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
Linear equations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
Linear models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
Lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
Local approximating regressions : : : : : : : : : : : : : : : 66
Loops and conditional execution : : : : : : : : : : : : : : : 42
M
Matrices: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 19
Matrix multiplication : : : : : : : : : : : : : : : : : : : : : : : : : : 23
Maximum likelihood : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
Missing values : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
Mixed models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
N
Named arguments : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
Namespace : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83
Nonlinear least squares : : : : : : : : : : : : : : : : : : : : : : : : 63
O
Object orientation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
Objects : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13
One- and two-sample tests : : : : : : : : : : : : : : : : : : : : : 39
Ordered factors : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16, 56
Outer products of arrays: : : : : : : : : : : : : : : : : : : : : : : 22
P
Packages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2, 82
Probability distributions : : : : : : : : : : : : : : : : : : : : : : : 35
Q
QR decomposition : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
Quantile-quantile plots : : : : : : : : : : : : : : : : : : : : : : : : 37
R
Reading data from files : : : : : : : : : : : : : : : : : : : : : : : : 32
Recycling rule: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7, 21
Appendix E: Concept index 101
Regular sequences : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8
Removing objects : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
Robust regression: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
S
Scope : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 48
Search path : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31
Shapiro-Wilk test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38
Singular value decomposition : : : : : : : : : : : : : : : : : : 24
Statistical models: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54
Student’s t test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
T
Tabulation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26
Tree-based models : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66
U
Updating fitted models : : : : : : : : : : : : : : : : : : : : : : : : 59
V
Vectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
W
Wilcoxon test : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40
Workspace: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
Writing functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44
Appendix F: References 102
Appendix F References
D. M. Bates and D. G. Watts (1988), Nonlinear Regression Analysis and Its Applications.
John Wiley & Sons, New York.
Richard A. Becker, John M. Chambers and Allan R. Wilks (1988), The New S Language.
Chapman & Hall, New York. This book is often called the “Blue Book”.
John M. Chambers and Trevor J. Hastie eds. (1992), Statistical Models in S. Chapman &
Hall, New York. This is also called the “White Book”.
John M. Chambers (1998) Programming with Data. Springer, New York. This is also called
the “Green Book”.
A. C. Davison and D. V. Hinkley (1997), Bootstrap Methods and Their Applications, Cambridge
University Press.
Annette J. Dobson (1990), An Introduction to Generalized Linear Models, Chapman and
Hall, London.
Peter McCullagh and John A. Nelder (1989), Generalized Linear Models. Second edition,
Chapman and Hall, London.
John A. Rice (1995), Mathematical Statistics and Data Analysis. Second edition. Duxbury
Press, Belmont, CA.
S. D. Silvey (1970), Statistical Inference. Penguin, London.

Categories: Ekonometrik Tags:

Econometrics in R

July 29, 2010 Leave a comment

Econometrics in R
Grant V. Farnsworth
October 26, 2008
This paper was originally written as part of a teaching assistantship and has subsequently become a personal reference.
I learned most of this stu by trial and error, so it may contain ineciencies, inaccuracies, or incomplete explanations. If
you nd something here suboptimal or have suggestions, please let me know. Until at least 2009 I can be contacted at
g-farnsworth@kellogg.northwestern.edu.
Contents
1 Introductory Comments 3
1.1 What is R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 How is R Better Than Other Packages? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Obtaining R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Using R Interactively and Writing Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Getting Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Working with Data 6
2.1 Basic Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Caveat: Math Operations and the Recycling Rule . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Important Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2 Arrays, Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.3 Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.4 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.5 S3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.6 S4 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Working with Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Merging Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Opening a Data File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Working With Very Large Data Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.1 Reading elds of data using scan() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.2 Utilizing Unix Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.3 Using Disk instead of RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.7.4 Using RSQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.8 Issuing System Commands|Directory Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.9 Reading Data From the Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.10 Editing Data Directly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 Cross Sectional Regression 14
3.1 Ordinary Least Squares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Extracting Statistics from the Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Heteroskedasticity and Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3.1 Breusch-Pagan Test for Heteroskedasticity . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3.2 Heteroskedasticity (Autocorrelation) Robust Covariance Matrix . . . . . . . . . . . . . 16
3.4 Linear Hypothesis Testing (Wald and F) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.5 Weighted and Generalized Least Squares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6 Models With Factors/Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4 Special Regressions 18
4.1 Fixed/Random E ects Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1.1 Fixed E ects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1.2 Random E ects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Qualitative Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.1 Logit/Probit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.2 Multinomial Logit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.3 Ordered Logit/Probit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3 Tobit and Censored Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4 Quantile Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5 Robust Regression – M Estimators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.6 Nonlinear Least Squares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.7 Two Stage Least Squares on a Single Structural Equation . . . . . . . . . . . . . . . . . . . . 21
4.8 Systems of Equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2
4.8.1 Seemingly Unrelated Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.8.2 Two Stage Least Squares on a System . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5 Time Series Regression 22
5.1 Di erences and Lags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2 Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2.1 Canned AR and MA lters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2.2 Manual Filtration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2.3 Hodrick Prescott Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.2.4 Kalman Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.3 ARIMA/ARFIMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.4 ARCH/GARCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4.1 Basic GARCH{garch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4.2 Advanced GARCH{garchFit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.4.3 Miscellaneous GARCH{Ox G@RCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.5 Correlograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.6 Predicted Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.7 Time Series Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.7.1 Durbin-Watson Test for Autocorrelation . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.7.2 Box-Pierce and Breusch-Godfrey Tests for Autocorrelation . . . . . . . . . . . . . . . 27
5.7.3 Dickey-Fuller Test for Unit Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.8 Vector Autoregressions (VAR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6 Plotting 28
6.1 Plotting Empirical Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.2 Contour Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 Adding Legends and Stu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.4 Adding Arrows, Text, and Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.5 Multiple Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.6 Saving Plots|png, jpg, eps, pdf, x g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.7 Adding Greek Letters and Math Symbols to Plots . . . . . . . . . . . . . . . . . . . . . . . . 31
6.8 Other Graphics Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7 Statistics 32
7.1 Working with Common Statistical Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2 P-Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.3 Sampling from Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8 Math in R 34
8.1 Matrix Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8.1.1 Matrix Algebra and Inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8.1.2 Factorizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.2 Numerical Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.2.1 Unconstrained Minimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.2.2 Minimization with Linear Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.3 Numerical Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9 Programming 37
9.1 Writing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.2 Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.3 Avoiding Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.3.1 Applying a Function to an Array (or a Cross Section of it) . . . . . . . . . . . . . . . 38
9.3.2 Replicating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.4 Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.4.1 Binary Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3
9.4.2 WARNING: Conditionals and NA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.5 The Ternary Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.6 Outputting Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.7 Pausing/Getting Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.8 Timing Blocks of Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.9 Calling C functions from R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.9.1 How to Write the C Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.9.2 How to Use the Compiled Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.10 Calling R Functions from C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
10 Changing Con gurations 43
10.1 Default Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.1.1 Signi cant Digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.1.2 What to do with NAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.1.3 How to Handle Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.1.4 Suppressing Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11 Saving Your Work 44
11.1 Saving the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11.2 Saving the Session Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11.3 Saving as LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
12 Final Comments 45
13 Appendix: Code Examples 46
13.1 Monte Carlo Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
13.2 The Haar Wavelet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
13.3 Maximum Likelihood Estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
13.4 Extracting Info From a Large File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
13.5 Contour Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1 Introductory Comments
1.1 What is R?
R is an implementation of the object-oriented mathematical programming language S. It is developed by
statisticians around the world and is free software, released under the GNU General Public License. Syntactically
and functionally it is very similar (if not identical) to S+, the popular statistics package.
1.2 How is R Better Than Other Packages?
R is much more more
exible than most software used by econometricians because it is a modern mathematical
programming language, not just a program that does regressions and tests. This means our analysis
need not be restricted to the functions included in the default package. There is an extensive and constantly
expanding collection of libraries online for use in many disciplines. As researchers develop new algorithms
and processes, the corresponding libraries get posted on the R website. In this sense R is always at the
forefront of statistical knowledge. Because of the ease and
exibility of programming in R it is easy to
extend.
The S language is the de facto standard for statistical science. Reading the statistical literature, we nd
that examples and even pseudo-code are written in R-compatible syntax. Since most users have a statistical
background, the jargon used by R experts sometimes di ers from what an econometrician (especially a
beginning econometrician) may expect. A primary purpose of this document is to eliminate this language
barrier and allow the econometrician to tap into the work of these innovative statisticians.
Code written for R can be run on many computational platforms with or without a graphical user
interface, and R comes standard with some of the most
exible and powerful graphics routines available
anywhere.
And of course, R is completely free for any use.
1.3 Obtaining R
The R installation program can be downloaded free of charge from http://www.r-project.org. Because
R is a programming language and not just an econometrics program, most of the functions we will be
interested in are available through libraries (sometimes called packages) obtained from the R website. To
obtain a library that does not come with the standard installation follow the CRAN link on the above
website. Under contrib you will nd is a list of compressed libraries ready for download. Click on the one
you need and save it somewhere you can nd it later. If you are using a gui, start R and click install package
from local directory under the package menu. Then select the le that you downloaded. Now the package
will be available for use in the future. If you are using R under linux, install new libraries by issuing the
following command at the command prompt: \R CMD INSTALL packagename”
Alternately you can download and install packages at once from inside R by issuing a command like
> install.packages(c(“car”,”systemfit”),repo=”http://cran.stat.ucla.edu&#8221;,dep=TRUE)
which installs the car and system t libraries. The repo parameter is usually auto-con gured, so there is
normally no need to specify it. The dependencies or dep parameter indicates that R should download
packages that these depend on as well, and is recommended. Note: you must have administrator (or root)
privileges to your computer to install the program and packages.
5
Contributed Packages Mentioned in this Paper and Why
(* indicates package is included by default)
adapt Multivariate numerical integration
car Regression tests and robust standard errors
DBI Interact with databases
dse1 State space models, Kalman ltration, and Vector ARMA
lehash Use hard disk instead of RAM for large datasets
fSeries Garch models with nontrivial mean equations
fracdi Fractionally integrated ARIMA models
foreign* Loading and saving data from other programs
ggplot2 Graphics and plotting
graphics* Contour graphs and arrows for plots
grid Graphics and plotting
Hmisc LATEX export
lattice An alternate type of contour plot and other graphics
lmtest Breusch-Pagan and Breusch-Godfrey tests
MASS* Robust regression, ordered logit/probit
Matrix Matrix norms and other matrix algebra stu
MCMCpack Inverse gamma distribution
MNP Multinomial probit via MCMC
nlme* Nonlinear xed and random e ects models
nls* Nonlinear least squares
nnet Multinomial logit/probit
quantreg Quantile Regressions
R.matlab Read matlab data les
RSQLite Interact with SQL databases
sandwich (and zoo) Heteroskedasticity and autocorrelation robust covariance
sem Two stage least squares
survival* Tobit and censored regression
system t SUR and 2SLS on systems of equations
ts* Time series manipulation functions
tseries Garch, ARIMA, and other time series functions
VAR Vector autoregressions
xtable Alternative LATEX export
zoo required in order to have the sandwich package
From time to time we can get updates of the installed packages by running update.packages().
1.4 Using R Interactively and Writing Scripts
We can interact directly with R through its command prompt. Under windows the prompt and what we
type are in red and the output it returns is blue{although you can control the font colors though \GUI
preferences” in the edit menu. Pressing the up arrow will generally cycle through commands from the
history. Notice that R is case sensitive and that every function call has parentheses at the end. Instead of
issuing commands directly we can load script les that we have previously written, which may include new
function de nitions.
Script les generally have the extension \.R”. These les contain commands as you would enter them at
the prompt, and they are recommended for any project of more than a few lines. In order to load a script
le named \mcmc.R” we would use the command
> source(“mcmc.R”)
One way to run R is to have a script le open in an external text editor and run periodically from the R
window. Commands executed from a script le may not print as much output to the screen as they do when
run interactively. If we want interactive-level verbosity, we can use the echo argument
6
> source(“mcmc.R”,echo=TRUE)
If no path is speci ed to the script le, R assumes that the le is located in the current working directory.
The working directory can be viewed or changed via R commands
> getwd()
[1] “/home/gvfarns/r”
> setwd(“/home/gvfarns”)
> getwd()
[1] “/home/gvfarns”
or under windows using the menu item change working directory. Also note that when using older versions
of R under windows the slashes must be replaced with double backslashes.
> getwd()
[1] “C:\\Program Files\\R\\rw1051\\bin”
> setwd(“C:\\Program Files\\R\\scripts”)
> getwd()
[1] “C:\\Program Files\\R\\scripts”
We can also run R in batch (noninteractive) mode under linux by issuing the command:\R CMD BATCH
scriptname.R” The output will be saved in a le named scriptname.Rout. Batch mode is also available under
windows using Rcmd.exe instead of Rgui.exe.
Since every command we will use is a function that is stored in one of the libraries, we will often have
to load libraries before working. Many of the common functions are in the library base, which is loaded by
default. For access to any other function, however, we have to load the appropriate library.
> library(foreign)
will load the library that contains the functions for reading and writing data that is formatted for other
programs, such as SAS and Stata. Alternately (under windows), we can pull down the package menu and
select library
1.5 Getting Help
There are several methods of obtaining help in R
> ?qt
> help(qt)
> help.start()
> help.search(“covariance”)
Preceding the command with a question mark or giving it as an argument to help() gives a description of its
usage and functionality. The help.start() function brings up a menu of help options and help.search()
searches the help les for the word or phrase given as an argument. Many times, though, the best help
available can be found by a search online. Remember as you search that the syntax and functionality of R
is almost identical to that of the proprietary statistical package S+.
The help tools above only search through the R functions that belong to packages on your computer. A
large percentage of R questions I hear are of the form \Does R have a function to do. . . ” Users do not know
if functionality exists because the corresponding package is not installed on their computer. To search the
R website for functions and references, use
> RSiteSearch(“Kalman Filter”)
The results from the search should appear in your web browser.
7
2 Working with Data
2.1 Basic Data Manipulation
R allows you to create many types of data storage objects, such as numbers, vectors, matrices, strings,
and dataframes. The command ls() gives a list of all data objects currently available. The command rm()
removes the data object given it as an argument. We can determine the type of an object using the command
typeof() or its class type (which is often more informative) using class().
Entering the name of the object typically echos its data to the screen. In fact, a function is just another
data member in R. We can see the function’s code by typing its name without parenthesis.
The command for creating and/or assigning a value to a data object is the less-than sign followed by the
minus sign.
> g <- 7.5
creates a numeric object called g, which contains the value 7.5. True vectors in R (as opposed to one
dimensional matrices) are treated as COLUMN vectors, when the distinction needs to be made.
> f <- c(7.5,6,5)
> F <- t(f)
uses the c() (concatenate) command to create a vector with values 7.5, 6, and 5. c() is a generic function
that can be used on multiple types of data. The t() command transposes f to create a 1×2 matrix|because
\vectors” are always column vectors. The two data objects f and F are separate because of the case sensitivity
of R. The command cbind() concatenates the objects given it side by side: into an array if they are vectors,
and into a single dataframe if they are columns of named data.
> dat <- cbind(c(7.5,6,5),c(1,2,3))
Similarly, rbind() concatenates objects by rows|one above the other|and assumes that vectors given it
are ROW vectors (see 2.3.1).
Notice that if we were concatenating strings instead of numeric values, we would have to put the strings
in quotes. Alternately, we could use the Cs() command from the Hmisc library, which eliminates the need
for quotes.
> Cs(Hey,you,guys)
[1] “Hey” “you” “guys”
Elements in vectors and similar data types are indexed using square brackets. R uses one-based indexing.
> f
[1] 7.5 6.0 5.0
> f[2]
[1] 6
Notice that for multidimensional data types, such as matrices and dataframes, leaving an index blank refers
to the whole column or row corresponding to that index. Thus if foo is a 4×5 array of numbers,
> foo
will print the whole array to the screen,
> foo[1,]
will print the rst row,
> foo[,3]
will print the third column, etc. We can get summary statistics on the data in goo using the summary() and
we can determine its dimensionality using the NROW(), and NCOL() commands. More generally, we can use
the dim() command to know the dimensions of many R objects.
If we wish to extract or print only certain rows or columns, we can use the concatenation operator.
8
> oddfoo <- foo[,c(1,3,5)]
makes a 4×3 array out of columns 1,3, and 5 of foo and saves it in oddfoo. By prepending the subtraction
operator, we can remove certain columns
> nooddfoo <- foo[,-c(1,3,5)]
makes a 4×2 array out of columns 2 and 4 of foo (i.e., it removes columns 1,3, and 5). We can also use
comparison operators to extract certain columns or rows.
> smallfoo <- foo[foo[,1]<1,]
compares each entry in the rst column of foo to one and inserts the row corresponding to each match into
smallfoo. We can also reorder data. If wealth is a dataframe with columns year, gdp, and gnp, we could
sort the data by year using order() or extract a period of years using the colon operator
> wealth <- wealth[order(wealth$year),]
> firstten <- wealth[1:10,]
> eighty <- wealth[wealth$year==1980,]
This sorts by year and puts the rst ten years of data in rstten. All rows from year 1980 are stored in
eighty (notice the double equals sign).
Using double instead of single brackets for indexing changes the behavior slightly. Basically it doesn’t
allow referencing multiple objects using a vector of indices, as the single bracket case does. For example,
> w[[1:10]]
does not return a vector of the rst ten elements of w, as it would in the single bracket case. Also, it strips
o attributes and types. If the variable is a list, indexing it with single brackets yields a list containing the
data, double brackets return the (vector of) data itself. Most often, when getting data out of lists, double
brackets are wanted, otherwise single brackets are more common.
Occasionally we have data in the incorrect form (i.e., as a dataframe when we would prefer to have a
matrix). In this case we can use the as. functionality. If all the values in goo are numeric, we could put
them into a matrix named mgoo with the command
> mgoo <- as.matrix(goo)
Other data manipulation operations can be found in the standard R manual and online. There are a lot
of them.
2.2 Caveat: Math Operations and the Recycling Rule
Mathematical operations such as addition and multiplication operate elementwise by default. The matrix
algebra operations are generally surrounded by % (see section 8). The danger here happens when one tries
to do math using certain objects of di erent sizes. Instead of halting and issuing an error as one might
expect, R uses a recycling rule to decide how to do the math|that is, it repeats the values in the smaller
data object. For example,
> a<-c(1,3,5,7)
> b<-c(2,8)
> a+b
[1] 3 11 7 15
Only if the dimensions are not multiples of each other does R return a warning (although it still does the
computation)
> a<-c(2,4,16,7)
> b<-c(2,8,9)
> a+b
9
[1] 4 12 25 9
Warning message:
longer object length
is not a multiple of shorter object length in: a + b
At rst the recycling rule may seem like a dumb idea (and it can cause error if the programmer is
not careful) but this is what makes operations like scalar addition and scalar multiplication of vectors and
matrices (as well as vector-to-matrix addition) possible. One just needs to be careful about dimensionality
when doing elementwise math in R.
Notice that although R recycles vectors when added to other vectors or data types, it does not recycle
when adding, for example, two matrices. Adding matrices or arrays of di erent dimensions to each other
produces an error.
2.3 Important Data Types
2.3.1 Vectors
The most fundamental numeric data type in R is an unnamed vector. A scalar is, in fact, a 1-vector. Vectors
are more abstract than one dimensional matrices because they do not contain information about whether
they are row or column vectors|although when the distinction must be made, R usually assumes that
vectors are columns.
The vector abstraction away from rows/columns is a common source of confusion in R by people familiar
with matrix oriented languages, such as matlab. The confusion associated with this abstraction can be shown
by an example
a<-c(1,2,3)
b<-c(4,6,8)
Now we can make a matrix by stacking vertically or horizontally and R assumes that the vectors are either
rows or columns, respectively.
> cbind(a,b)
a b
[1,] 1 4
[2,] 2 6
[3,] 3 8
> rbind(a,b)
[,1] [,2] [,3]
a 1 2 3
b 4 6 8
One function assumed that these were column vectors and the other that they were row vectors. The take
home lesson is that a vector is not a one dimensional matrix, so don’t expect them to work as they do in a
linear algebra world. To convert a vector to a 1xN matrix for use in linear algebra-type operations (column
vector) us as.matrix().
Note that t() returns a matrix, so that the object t(t(a)) is not the same as a.
2.3.2 Arrays, Matrices
In R, homogeneous (all elements are of the same type) multivariate data may be stored as an array or a
matrix. A matrix is a two-dimensional object, whereas an array may be of many dimensions. These data
types may or may not have special attributes giving names to columns or rows (although one cannot reference
a column using the $ operator as with dataframes) but can hold only numeric data. Note that one cannot
make a matrix, array, or vector of two di erent types of data (numeric and character, for example). Either
they will be coerced into the same type or an error will occur.
10
2.3.3 Dataframes
Most econometric data will be in the form of a dataframe. A dataframe is a collection of vectors (we think
of them as columns) containing data, which need not all be of the same type, but each column must have
the same number of elements. Each column has a title by which the whole vector may be addressed. If goo
is a 3×4 data frame with titles age, gender, education, and salary, then we can print the salary column
with the command
> goo$salary
or view the names of the columns in goo
> names(goo)
Most mathematical operations a ect multidimensional data elementwise (unlike some mathematical languages,
such as matlab). From the previous example,
> salarysq <- (goo$salary)^2
creates a dataframe with one column entitled salary with entries equal to the square of the corresponding
entries in goo$salary. Output from actions can also be saved in the original variable, for example,
> salarysq <- sqrt(salarysq)
replaces each of the entries in salarysq with its square root.
> goo$lnsalary <- log(salarysq)
adds a column named lnsalary to goo, containing the log of the salary.
2.3.4 Lists
A list is more general than a dataframe. It is essentially a bunch of data objects bound together, optionally
with a name given to each. These data objects may be scalars, strings, dataframes, or any other type.
Functions that return many elements of data (like summary()) generally bind the returned data together as
a list, since functions return only one data object. As with dataframes, we can see what objects are in a
list (by name if they have them) using the names() command and refer to them either by name (if existent)
using the $ symbol or by number using brackets. Remember that referencing a member of a list is
generally done using double, not single, brackets (see section 2.1). Sometimes we would like to
simplify a list into a vector. For example, the function strsplit() returns a list containing substrings of
its argument. In order to make them into a vector of strings, we must change the list to a vector using
unlist(). Lists sometimes get annoying, so unlist() is a surprisingly useful function.
2.3.5 S3 Classes
Many functions return an object containing many types of data, like a list, but would like R to know
something about what type of object it is. A list with an associated \class” attribute designating what type
of list it is is an S3 class. If the class is passed as an argument, R will rst search for an appropriately named
function. If x is of class foo and you print it with
> print(x)
the print() routine rst searches for a function named print.foo() and will use that if it exists. Otherwise
it will use the generic print.default(). For example, if x is the output of a call to lm(), then
> print(x)
will call print.lm(x), which prints regression output in a meaningful and aesthetically pleasing manner.
S3 lists are quite simple to use. The are really just lists with an extra attribute. We can create them
either using the class() function or just adding the class attribute after creation of a list.
11
> h <- list(a=rnorm(3),b=”This shouldn’t print”)
> class(h) <- “myclass”
> print.myclass<-function(x){cat(“A is:”,x$a,”\n”)}
> print(h)
A is: -0.710968 -1.611896 0.6219214
If we were to call print() without assigning the class, we would get a di erent result.
Many R packages include extensions to common generic functions like print(), summary(), and plot()
which operate on the particular classes produced by that package. The ability of R to choose a function to
execute depending on the class of the data passed to it makes interacting with new classes very convenient.
On the other hand, many extensions have options speci c to them, so we must read the help le on that
particular extension to know how to best use it. For example, we should read up on the regression print
routine using
> ?summary.lm
instead of
> ?summary
2.3.6 S4 Classes
S4 classes are a recent addition to R. They generically hold data and functions, just like S3 classes, but
have some technical advantages, which transcend the scope of this document. For our purposes, the most
important di erence between an S3 and S4 class is that attributes of the latter are referenced using @ instead
of $ and it can only be created using the new() command.
> g <- garchFit(~arma(0,1)+garch(2,3),y)
> fitvalues <- g@fit
2.4 Working with Dates
The standard way of storing dates internally in R is as an object of class Date. This allows for such things as
subtraction of one date from another yielding the number of days between them. To convert data to dates,
we use as.Date(). This function takes as input a character string and a format. If the given vector of dates
is stored as a numeric format (like \20050627″) it should be converted to a string using as.character()
rst. The format argument informs the code what part of the string corresponds to what part of the date.
Four digit year is %Y, two digit year is %y, numeric month is %m, alphabetic (abbreviated) month is %b,
alphabetic (full) month is %B, day is %d. For other codes, see the help les on strptime. For example, if d
is a vector of dates formatted like \2005-Jun-27″, we could use
> g<-as.Date(d,format=”%Y-%b-%d”)
Internally, Date objects are numeric quantities, so they don’t take up very much memory.
We can perform the reverse operation of as.Date()|formatting or extracting parts of a Date object|
using format(). For example, given a column of numbers like \20040421″, we can extract a character string
representing the year using
> year<-format(as.Date(as.character(v$DATE),format=”%Y%m%d”),format=”%Y”)
Although we can extract day of the week information in string or numeric form using format(), a simpler
interface is available using the weekdays() function.
> mydates<-as.Date(c(“19900307″,”19900308″),format=”%Y%m%d”)
> weekdays(mydates)
[1] “Wednesday” “Thursday”
12
Notice that in order to get a valid date, we need to have the year, month, and day. Suppose we were using
monthly data, we would need to assign each data point to, for example, the rst day of the month. In the
case of a numeric format such as 41985″ where the rst two digits represent the month and the last four
the year, we can simply add 10,000,000 to the number, convert to string, and use the format \%d%m%Y”.
In the case of a string date such as \April 1985″ we can use
> as.Date(paste(“1 “,v$DATE),format=”%d %B %Y”)
Notice that in order for paste to work correctly v$DATE must be a vector of character strings. Some read
methods automatically convert strings to factors by default, which we can rectify by passing the as.is=T
keyword to the read method or converting back using as.character().
2.5 Merging Dataframes
If we have two dataframes covering the same time or observations but not completely aligned, we can merge
the two dataframes using merge(). Either we can specify which column to use for aligning the data, or
merge() will try to identify column names in common between the two.
For example, if B is a data frame of bond data prices over a certain period of time and had a column
named date containing the dates of the observations and E was a similar dataframe of equity prices over
about the same time period, we could merge them into one dataframe using
> OUT<-merge(B,E)
If the date column was named date in B but day in E, the command would instead be
> OUT<-merge(B,E,by.x=”date”,by.y=”day”)
Notice that by default merge() includes only rows in which data are present in both B and E. To put NA
values in the empty spots instead of omitting the rows we include the all=T keyword. We can also specify
whether to include NA values only from one or the other using the all.x and all.y keywords.
2.6 Opening a Data File
R is able to read data from many formats. The most common format is a text le with data separated into
columns and with a header above each column describing the data. If blah.dat is a text le of this type
and is located on the windows desktop we could read it using the command
> mydata <- read.table(“C:/WINDOWS/Desktop/blah.dat”,header=TRUE)
Now mydata is a dataframe with named columns, ready for analysis. Note that R assumes that there are
no labels on the columns, and gives them default values, if you omit the header=TRUE argument. Now let’s
suppose that instead of blah.dat we have blah.dta, a stata le.
> library(foreign)
> mydata <- read.dta(“C:/WINDOWS/Desktop/blah.dta”)
Stata les automatically have headers.
Another data format we may read is .csv comma-delimited les (such as those exported by spreadsheets).
These les are very similar to those mentioned above, but use punctuation to delimit columns and rows.
Instead of read.table(), we use read.csv(). Fixed width les can be read using read.fwf().
Matlab (.mat) les can be read using readMat() from the R.matlab package. The function writeMat()
from the same package writes matlab data les.
13
2.7 Working With Very Large Data Files
R objects can be as big as our physical computer memory (and operating system) will allow, but it is
not designed for very large datasets. This means that extremely large objects can slow everything down
tremendously and suck up RAM greedily. The read.table() family of routines assume that we are not
working with very large data sets and so are not careful to conserve on memory1. They load everything at
once and probably make at least one copy of it. A better way to work with huge datasets is to read the le
a line (or group of lines) at a time. We do this using connections. A connection is an R object that points
to a le or other input/output stream. Each time we read from a connection the location in the le from
which we read moves forward.
Before we can use a connection, we must create it using file() if our data source is a le or url() for an
online source (there are other types of connections too). Then we use open() to open it. Now we can read
one or many lines of text using readLines(), read elds of data using scan(), or write data using cat() or
one of the write.table() family of routines. When we are done we close using close().
2.7.1 Reading elds of data using scan()
Reading elds of data from a huge le is a very common task, so we give it special attention. The most
important argument to scan() is what, which speci es what type of data to read in. If the le contains
columns of data, what should be a list, with each member of the list representing a column of data. For
example, if the le contains a name followed by a comma separator and an age, we could read a single line
using
> a <- scan(f,what=list(name=””,age=0),sep=”,”,nlines=1)
where f is an open connection. Now a is a list with elds name and age. Example 13.4 shows how to read
from a large data le.
If we try to scan when the connection has reached the end of the le, scan() returns an empty list. We
can check it using length() in order to terminate our loop.
Frequently we know how many elds are in each line and we want to make sure the scan() gets all of
them, lling the missing ones with NA. To do this we specify fill=T. Notice that in many cases scan() will
ll empty elds with NA anyway.
Unfortunately scan returns an error if it tries to read a line and the data it nds is not what it is expecting.
For example, if the string “UNK” appeared under the age column in the above example, we would have an
error. If there are only a few possible exceptions, they can be passed to scan() as na.strings. Otherwise
we need to read the data in as strings and then convert to numeric or other types using as.numeric() or
some other tool.
Notice that reading one line at a time is not the fastest way to do things. R can comfortably read 100,
1000, or more lines at a time. Increasing how many lines are read per iteration could speed up large reads
considerably. With large les, we could read lines 1000 at a time, transform them, and then write 1000 at a
time to another open connection, thereby keep system memory free.
If all of the data is of the same type and belong in the same object (a 2000×2000 numeric matrix, for
example) we can use scan() without including the nlines argument and get tremendously faster reads. The
resulting vector would need only to be converted to type matrix.
2.7.2 Utilizing Unix Tools
If you are using R on a linux/unix machine2 you can use various unix utilities (like grep and awk) to read
only the colunms and rows of your le that you want. The utility grep trims out rows that do or do not
contain a speci ced pattern. The programming language awk is a record oriented tool that can pull out and
manipulate columns as well as rows based on a number of criteria.
1According to the help le for read.table() you can improve memory usage by informing read.table() of the number of
rows using the nrows parameter. On unix/linux you can obtain the number of rows in a text le using \wc -l”.
2Thanks to Wayne Folta for these suggestions
14
Some of these tools are useful within R as well. For example, we can preallocate our dataframes according
to the number of records (rows) we will be reading in. For example to know how large a dataframe to allocate
for the calls in the above example, we could use
> howmany <- as.numeric(system (“grep -c ‘,C,’ file.dat”))
Since allocating and reallocating memory is one of the time consuming parts of the scan() loop, this can
save a lot of time and troubles this way. To just determine the number of rows, we can use the utility wc.
> totalrows <- as.numeric(strsplit(system(“wc -l Week.txt”,intern=T),split=” “)[[1]][1])
Here system() returns the number of rows, but with the le name as well, strsplit() breaks the output
into words, and we then convert the rst word to a number.
The bottom line is that we should use the right tool for the right job. Unix utilities like grep, awk, and
wc can be fast and dirty ways to save a lot of work in R.
2.7.3 Using Disk instead of RAM
Unfortunately, R uses only system RAM by default. So if the dataset we are loading is very large it is likely
that our operating system will not be able to allocate a large enough chunck of system RAM for it, resulting
in termination of our program with a message that R could not allocate a vector of that size. Although
R has no built in disk cache system, there is a package called lehash that allows us to store our variables
on disk instead of in system RAM. Clearly this will be slower, but at least our programs will run as long
as we have sucient disk space and our le size does not exceed the limits of our operating system. And
sometimes that makes all the di erence.
Instead of reading a le into memory, we read into a database and load that database as an environment
> dumpDF(read.table(“large.txt”, header=T), dbName=”mydb”)
> myenv<-db2env(db=”mydb”)
Now we can operate on the data within its environment using with()
> with(mydb, z<-y+x )
Actually I haven’t spent much time with this package so I’m not familiar with its nuances, but it seems very
promising3.
2.7.4 Using RSQLite
Many times the best way to work with large datasets is to store them in SQL databases and then just query
the stu you need using mySQL or SQLite from within R. This functionality is available using the RSQLite
and DBI libraries.
2.8 Issuing System Commands|Directory Listing
Sometimes we want to issue a command to the operating system from inside of R. For example, under unix
we may want to get a list of the les in the current directory that begin with the letter x. We could execute
this command using
> system(“ls x*”)
xaa xab xac xad xae
If we want to save the output of the command as an R object, we use the keyword intern
> files <- system(“ls x*”,intern=T)
3For more information see http://yusung.blogspot.com/2007/09/dealing-with-large-data-set-in-r.html
15
2.9 Reading Data From the Clipboard
When importing from other applications, such as spreadsheets and database managers, the quickest way to
get the data is to highlight it in the other application, copy it to the desktop clipboard, and then read the
data from the clipboard. R treats the clipboard like a le, so we use the standard read.table() command
> indata <- read.table(“clipboard”)
2.10 Editing Data Directly
R has a built-in spreadsheet-like interface for editing data. It’s not very advanced, but it works in a pinch.
Suppose a is a dataframe, we can edit it in place using
> data.entry(a)
Any changes we make (including changing the type of data contained in a column) will be re
ected in a
immediately. If we want to save the changed data to a di erent variable, we could have used
> b <- de(a)
Notice that both de() and data.entry() return a variable of type list. If what we wanted was a dataframe,
for example, we need to convert it back after editing.
The function edit() works like de() but for many di erent data types. In practice, it calls either de()
or the system default text editor (which is set using options()).
A similar useful function is fix(), which edits an R object in place. fix() operates on any kind of data:
dataframes are opened with de() and functions are opened with a text editor. This can be useful for quick
edits either to data or code.
3 Cross Sectional Regression
3.1 Ordinary Least Squares
Let’s consider the simplest case. Suppose we have a data frame called byu containing columns for age,
salary, and exper. We want to regress various forms of age and exper on salary. A simple linear
regression might be
> lm(byu$salary ~ byu$age + byu$exper)
or alternately:
> lm(salary ~ age + exper,data=byu)
as a third alternative, we could \attach” the dataframe, which makes its columns available as regular variables
> attach(byu)
> lm(salary ~ age + exper)
Notice the syntax of the model argument (using the tilde). The above command would correspond to
the linear model
salary = 0 + 1age + 2exper +  (1)
Using lm() results in an abbreviated summary being sent to the screen, giving only the coecient
estimates. For more exhaustive analysis, we can save the results in as a data member or \ tted model”
> result <- lm(salary ~ age + exper + age*exper,data=byu)
> summary(result)
> myresid <- result$resid
> vcov(result)
16
The summary() command, run on raw data, such as byu$age, gives statistics, such as the mean and
median (these are also available through their own functions, mean and median). When run on an ols
object, summary gives important statistics about the regression, such as p-values and the R2.
The residuals and several other pieces of data can also be extracted from result, for use in other computations.
The variance-covariance matrix (of the beta coecients) is accessible through the vcov() command.
Notice that more complex formulae are allowed, including interaction terms (speci ed by multiplying
two data members) and functions such as log() and sqrt(). Unfortunately, in order to include a power
term, such as age squared, we must either rst compute the values, then run the regression, or use the I()
operator, which forces computation of its argument before evaluation of the formula
> salary$agesq <- (salary$age)^2
> result <- lm(salary ~ age + agesq + log(exper) + age*log(exper),data=byu)
or
> result <- lm(salary ~ age + I(age^2) + log(exper) + age*log(exper),data=byu)
Notice that if we omit the I() operator and don’t explicitly generate a power term variable (like agesq)
then lm() will not behave as expected4, but it will not give we an error or warning, so we must be careful.
In order to run a regression without an intercept, we simply specify the intercept explicitly, traditionally
with a zero.
> result <- lm(smokes ~ 0 + male + female ,data=smokerdata)
3.2 Extracting Statistics from the Regression
The most important statistics and parameters of a regression are stored in the lm object or the summary
object. Consider the smoking example above
> output <- summary(result)
> SSR <- deviance(result)
> LL <- logLik(result)
> DegreesOfFreedom <- result$df
> Yhat <- result$fitted.values
> Coef <- result$coefficients
> Resid <- result$residuals
> s <- output$sigma
> RSquared <- output$r.squared
> CovMatrix <- s^2*output$cov
> aic <- AIC(result)
Where SSR is the residual sum of squares, LL is the log likelihood statistic, Yhat is the vector of tted
values, Resid is the vector of residuals, s is the estimated standard deviation of the errors (assuming
homoskedasticity), CovMatrix is the variance-covariance matrix of the coecients (also available via vcov()),
aic is the Akaike information criterion and other statistics are as named.
Note that the AIC criterion is de ne by R as
AIC = 􀀀2 log L(p) + 2p
where p is the number of estimated parameters and L(p) is the likelihood. Some econometricians prefer to
call AIC=N the information criterion. To obtain the Bayesian Information Criterion (or Schwartz Bayesian
Criterion) we use AIC but specify a di erent \penalty” parameter as follows
> sbc <- AIC(result,k=log(NROW(smokerdata)))
which means
SBC = 􀀀2 log L(p) + p log(N)
4Generally it just omits power terms whose rst power is already included in the regression.
17
3.3 Heteroskedasticity and Friends
3.3.1 Breusch-Pagan Test for Heteroskedasticity
In order to test for the presence of heteroskedasticity, we can use the Breusch-Pagan test from the lmtest
package. Alternately we can use the the ncv.test() function from the car package. They work pretty much
the same way. After running the regression, we call the bptest() function with the tted regression.
> unrestricted <- lm(z~x)
> bptest(unrestricted)
Breusch-Pagan test
data: unrestricted
BP = 44.5465, df = 1, p-value = 2.484e-11
This performs the \studentized” version of the test. In order to be consistent with some other software
(including ncv.test()) we can specify studentize=FALSE.
3.3.2 Heteroskedasticity (Autocorrelation) Robust Covariance Matrix
In the presence of heteroskedasticity, the ols estimates remain unbiased, but the ols estimates of the variance
of the beta coecients are no longer correct. In order to compute the heteroskedasticity consistent covariance
matrix5 we use the hccm() function (from the car library) instead of vcov(). The diagonal entries are
variances and o diagonals are covariance terms.
This functionality is also available via the vcovHC() command in the sandwich package. Also in that
package is the heteroskedasticity and autocorrelation robust Newey-West estimator, available in the function
vcovHAC() or the function NeweyWest().
3.4 Linear Hypothesis Testing (Wald and F)
The car package provides a function that automatically performs linear hypothesis tests. It does either an
F or a Wald test using either the regular or adjusted covariance matrix, depending on our speci cations. In
order to test hypotheses, we must construct a hypothesis matrix and a right hand side vector. For example,
if we have a model with ve parameters, including the intercept and we want to test against
H0 : 0 = 0; 3 + 4 = 1
The hypothesis matrix and right hand side vector would be

1 0 0 0 0
0 0 1 1 0

=

01

and we could implement this as follows
> unrestricted <- lm(y~x1+x2+x3+x4)
> rhs <- c(0,1)
> hm <- rbind(c(1,0,0,0,0),c(0,0,1,1,0))
> linear.hypothesis(unrestricted,hm,rhs)
Notice that if unrestricted is an lm object, an F test is performed by default, if it is a glm object, a
Wald 2 test is done instead. The type of test can be modi ed through the type argument.
Also, if we want to perform the test using heteroskedasticity or autocorrelation robust standard errors,
we can either specify white.adjust=TRUE to use white standard errors, or we can supply our own covariance
matrix using the vcov parameter. For example, if we had wished to use the Newey-West corrected covariance
matrix above, we could have speci ed
5obtaining the White standard errors, or rather, their squares.
18
> linear.hypothesis(unrestricted,hm,rhs,vcov=NeweyWest(unrestricted))
See the section on heteroskedasticity robust covariance matrices for information about the NeweyWest() function.
We should remember that the speci cation white.adjust=TRUE corrects for heteroskedasticity using an
improvement to the white estimator. To use the classic white estimator, we can specify white.adjust=”hc0″.
3.5 Weighted and Generalized Least Squares
You can do weighted least squares by passing a vector containing the weights to lm().
> result <- lm(smokes ~ 0 + male + female ,data=smokerdata,weights=myweights)
Generalized least squares is available through the lm.gls() command in the MASS library. It takes a
formula, weighting matrix, and (optionally) a dataframe from which to get the data as arguments.
The glm() command provides access to a plethora of other advanced linear regression methods. See the
help le for more details.
3.6 Models With Factors/Groups
There is a separate datatype for qualitative factors in R. When a variable included in a regression is of type
factor, the requisite dummy variables are automatically created. For example, if we wanted to regress the
adoption of personal computers (pc) on the number of employees in the rm (emple) and include a dummy
for each state (where state is a vector of two letter abbreviations), we could simply run the regression
> summary(lm(pc~emple+state))
Call:
lm(formula = pc ~ emple + state)
Residuals:
Min 1Q Median 3Q Max
-1.7543 -0.5505 0.3512 0.4272 0.5904
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.572e-01 6.769e-02 8.232 <2e-16 ***
emple 1.459e-04 1.083e-05 13.475 <2e-16 ***
stateAL -4.774e-03 7.382e-02 -0.065 0.948
stateAR 2.249e-02 8.004e-02 0.281 0.779
stateAZ -7.023e-02 7.580e-02 -0.926 0.354
stateDE 1.521e-01 1.107e-01 1.375 0.169

stateFL -4.573e-02 7.136e-02 -0.641 0.522
stateWY 1.200e-01 1.041e-01 1.153 0.249

Signif. codes: 0 `***’ 0.001 `**’ 0.01 `*’ 0.05 `.’ 0.1 ` ‘ 1
Residual standard error: 0.4877 on 9948 degrees of freedom
Multiple R-Squared: 0.02451, Adjusted R-squared: 0.01951
F-statistic: 4.902 on 51 and 9948 DF, p-value: < 2.2e-16
The three dots indicate that some of the coecients have been removed for the sake of brevity.
In order to convert data (either of type string or numeric) to a factor, simply use the factor() command.
It can even be used inside the regression. For example, if we wanted to do the same regression, but by a
numeric code specifying an area, we could use the command
19
> myout <- lm(pc~emple+factor(naics6))
which converts naics6 into a factor, generates the appropriate dummies, and runs a standard regression.
4 Special Regressions
4.1 Fixed/Random E ects Models
Warning: The de nitions of xed and random e ects models are not standardized across disciplines. I
describe xed and random e ects estimation as these terms are generally used by econometricians. The
terms \ xed” and \random” have historical roots and are econometrically misleading.
Within the context of economics, xed and random e ects estimators are panel data models that account
for cross sectional variation in the intercept. Letting i denote the cross sectional index (or the one by which
data is grouped) and t the time index (or the index that varies within a group), a standard xed e ects
model can be written
yit = + ui + Xit + it: (2)
Essentially, each individual has a di erent time-invariant intercept ( + ui). Usually we are interested in
but not any of the ui. A random e ects model has the same mean equation, but imposes the additional
restriction that the individual speci c e ect is uncorrelated with the explanatory variables Xit. That is,
E[uiXit] = 0. Econometrically this is a more restrictive version of the xed e ects estimator (which allows
for arbitrary correlation between the \e ect” and exogenous variables). One should not let the unfortunate
nomenclature confuse the relationship between these models.
4.1.1 Fixed E ects
A simple way to do a xed e ects estimation, particularly if the cross sectional dimension is not large, is to
include a dummy for each individual|that is, make the cross sectional index a factor. If index identi es
the individuals in the sample, then
> lm(y~factor(index)+x)
will do a xed e ects estimation and will report the correct standard errors on . Unfortunately, in cases
where there are many individuals in the sample and we are not interested in the value of their xed e ects,
the lm() results are awkward to deal with and the estimation of a large number of ui coecients could
render the problem numerically intractable.
A more common way to estimate xed e ects models is to remove the xed e ect by time demeaning
each variable (the so called within estimator). Then equation (2) becomes
(yit 􀀀 yi) = + (Xit 􀀀 Xi) + it: (3)
Most econometric packages (for example, stata’s xtreg) use this method when doing xed e ects estimation.
Using R, one can manually time demean the independent and dependent variables. If d is a dataframe
containing year, firm, profit, and predictor and we wish to time demean each rm’s pro t and predictor,
we could run something like
> g<-d
> for (i in unique(d$firm)){
+ timemean<-mean(d[d$firm==i,])
+ g$profit[d$firm==i]<-d$profit[d$firm==i]-timemean["profit"]
+ g$predictor[d$firm==i]<-d$predictor[d$firm==i]-timemean["predictor"]
+ }
> output<-lm(profit~predictor,data=g)
Notice that the standard errors reported by this regression will be biased downward. The ^2 reported by
lm() is computed using
^2 = SSR
NT 􀀀 K
20
whereas the true standard errors in this xed e ects regression are
^2 = SSR
N(T 􀀀 1) 􀀀 K
For small T this can be an important correction.
Another, generally less popular, way to do xed e ects estimation is to use the rst di erences estimator
(yit 􀀀 yi(t􀀀1)) = + (Xit 􀀀 Xi(t􀀀1)) + it:
which can be computed by hand in a manner similar to the within estimator.
4.1.2 Random E ects
The package nlme contains functions for doing random e ects regression (but not xed e ects|the documentation
refers to the statistics interpretation of the term \ xed e ect”) in a linear or nonlinear framework.
Suppose we had a linear model with a random e ect on the sic3 code.
ldsal = ( + i) + lempit +
ldnptit + it
We could t this model using
> lme(ldsal~lemp+ldnpt,random=~1|sic3)
In general the random e ects will be after the vertical bar in the random parameter of the model. Placing
a 1 between the tilde and vertical bar indicates that the random e ect is an intercept term. If we wanted a
random e ect on one of the exogenous variables as well as the intercept, we could put that variable in the
same place as the 1. For example
> lme(ldsal~lemp+ldnpt,random=~1+lemp|sic3)
corresponds to
ldsal = ( + i) + ( + i)lempit +
ldnptit + it
For nonlinear random e ects models, use nlme() instead of lme().
4.2 Qualitative Response
4.2.1 Logit/Probit
There are several ways to do logit and probit regressions in R. The simplest way may be to use the glm()
command with the family option.
> h <- glm(c~y, family=binomial(link=”logit”))
or replace logit with probit for a probit regression. The glm() function produces an object similar to the
lm() function, so it can be analyzed using the summary() command. In order to extract the log likelihood
statistic, use the logLik() command.
> logLik(h)
`log Lik.’ -337.2659 (df=1)
4.2.2 Multinomial Logit
There is a function for performing a multinomial logit estimation in the nnet library called multinom(). To
use it, simply transform our dependent variable to a vector of factors (including all cases) and use syntax
like a normal regression. If our factors are stored as vectors of dummy variables, we can use the properties
of decimal numbers to create unique factors for all combinations. Suppose my factors are pc, inetacc, and
iapp, then
> g <- pc*1 + inetacc*10 + iapp*100
> multinom(factor(g)~pc.subsidy+inet.subsidy+iapp.subsidy+emple+msamissing)
and we get a multinomial logit using all combinations of factors.
Multinomial probit models are characteristically ill conditioned. A method that uses markov chain monte
carlo simulations, mnp(), is available in the MNP library.
21
4.2.3 Ordered Logit/Probit
The MASS library has a function to perform ordered logit or probit regressions, called polr(). If Sat is an
ordered factor vector, then
> house.plr <- polr(Sat ~ Infl + Type + Cont, method=”probit”)
4.3 Tobit and Censored Regression
In order to estimate a model in which the values of some of the data have been censored, we use the survival
library. The function survreg() performs this type of regression, and takes as its dependent variable a Surv
object. The best way to see how to do this type of regression is by example. Suppose we want to regress y
on x and z, but a number of y observations were censored on the left and set to zero.
result <- survreg(Surv(y,y>0,type=’left’) ~ x + z, dist=’gaussian’)
The second argument to the Surv() function speci es whether each observation has been censored or not
(one indicating that it was observed and zero that it was censored). The third argument indicates on which
side the data was censored. Since it was the lower tail of this distribution that got censored, we specify left.
The dist option passed to the survreg is necessary in order to get a classical Tobit model.
4.4 Quantile Regression
Ordinary least squares regression methods produce an estimate of the expectation of the dependent variable
conditional on the independent. Fitted values, then, are an estimate of the conditional mean. If instead of
the conditional mean we want an estimate of the expected conditional median or some other quantile, we
use the rq() command from the quantreg package. The syntax is essentially the same as lm() except that
we can specify the parameter tau, which is the quantile we want (it is between 0 and 1). By default, tau=.5,
which corresponds to a median regression|another name for least absolute deviation regression.
4.5 Robust Regression – M Estimators
For some datasets, outliers in
uence the least squares regression line more than we would like them to. One
solution is to use a minimization approach using something besides the sum of squared residuals (which
corresponds to minimizing the L2 norm) as our objective function. Common choices are the sum of absolute
deviations (L1) and the Huber method, which is something of a mix between the L1 and L2 methods. R
implements this robust regression functionality through the rlm() command in the MASS library. The
syntax is the same as that of the lm() command except that it allows the choice of objective function to
minimize. That choice is speci ed by the psi parameter. Possible implemented choices are psi.huber,
psi.hampel, and psi.bisquare.
In order to specify a custom psi function, we write a function that returns  (x)=x if deriv=0 and  0(x)
for deriv=1. This function than then be passed to rlm() using the psi parameter.
4.6 Nonlinear Least Squares
Sometimes the economic model just isn’t linear. R has the capability of solving for the coecients a generalized
least squares model that can be expressed
Y = F(X; ) +  (4)
Notice that the error term must be additive in the functional form. If it is not, transform the model equation
so that it is. The R function for nonlinear least squares is nls() and has a syntax similar to lm(). Consider
the following nonlinear example.
Y = 
1 + e 1X1+ 2X2
(5)
log(Y ) = 􀀀log(1 + e 1X1+ 2X2 ) + log() (6)
22
The second equation is the transformed version that we will use for the estimation. nls() takes the formula
as its rst argument and also requires starting estimates for the parameters. The entire formula should be
speci ed, including the parameters. R looks at the starting values to see which parameters it will estimate.
> result <- nls(log(Y)~-log(1+exp(a*X1+b*X2)),start=list(a=1,b=1),data=mydata)
stores estimates of a and b in an nls object called result. Estimates can be viewed using the summary()
command. In the most recent versions of R, the nls() command is part of the base package, but in older
versions, we may have to load the nls library.
4.7 Two Stage Least Squares on a Single Structural Equation
For single equation two stage least squares, the easiest function is probably tsls() from the sem library.
If we want to nd the e ect of education on wage while controlling for marital status but think educ is
endogenous, we could use motheduc and fatheduc as instruments by running
> library(sem)
> outputof2sls <- tsls(lwage~educ+married,~married+motheduc+fatheduc)
The rst argument is the structural equation we want to estimate and the second is a tilde followed by all
the instruments and exogenous variables from the structural equation|everything we need for the Z matrix
in the 2SLS estimator ~ = (X0Z(Z0Z)􀀀1Z0X)􀀀1X0Z(Z0Z)􀀀1Z0y.
The resulting output can be analyzed using summary() and other ols analysis functions. Note that since
this command produces a two stage least squares object, the summary statistics, including standard errors,
will be correct. Recall that if we were to do this using an actual two stage approach, the resulting standard
errors would be bogus.
4.8 Systems of Equations
The commands for working with systems of equations (including instrumental variables, two stage least
squares, seemingly unrelated regression and variations) are contained in the system t library. In general
these functions take as an argument a list of regression models. Note that in R an equation model (which
must include the tilde) is just another data type. Thus we could create a list of equation models and a
corresponding list of labels using the normal assignment operator
> demand <- q ~ p + d
> supply <- q ~ p + f + a
> system <- list(demand,supply)
> labels <- list(“demand”,”supply”)
4.8.1 Seemingly Unrelated Regression
Once we have the system and (optionally) labels set up, we can use systemfit() with the SUR option to
specify that the system describes a seemingly unrelated regression.
> resultsur <- systemfit(“SUR”,system,labels)
4.8.2 Two Stage Least Squares on a System
Instruments can be used as well in order to do a two stage least squares on the above system. We create a
model object (with no left side) to specify the instruments that we will use and specify the 2SLS option
> inst <- ~ d + f + a
> result2sls <- systemfit(“2SLS”,system,labels,inst)
There are also routines for three stage least squares, weighted two stage least squares, and a host of others.
23
5 Time Series Regression
R has a special datatype, ts, for use in time series regressions. Vectors, arrays, and dataframes can be coerced
into this type using the ts() command for use in time series functions.
> datats <- ts(data)
Most time-series related functions automatically coerce the data into ts format, so this command is often
not necessary.
5.1 Di erences and Lags
We can compute di erences of a time series object using the diff() operator, which takes as optional
arguments which di erence to use and how much lag should be used in computing that di erence. For
example, to take the rst di erence with a lag of two, so that wt = vt 􀀀 vt􀀀3 we would use
> w <- diff(v,lag=2,difference=1)
By default, diff() returns the simple rst di erence of its argument.
There are two general ways of generating lagged data. If we want to lag the data directly (without
necessarily converting to a time series object), one way to do it is to omit the rst few observations using
the minus operator for indices. We can then remove the last few rows of un-lagged data in order to achieve
conformity. The commands
> lagy <- y[-NROW(y)]
> ysmall <- y[-1]
produce a once lagged version of y relative to ysmall. This way of generating lags can get awkward if we
are trying combinations of lags in regressions because for each lagged version of the variable, conformability
requires that we have a corresponding version of the original data that has the rst few observations removed.
Another way to lag data is to convert it to a time series object and use the lag() function. It is very
important to remember that this function does not actually change the data, it changes an attribute of a time
series object that indicates where the series starts. This allows for more
exibility with time series functions,
but it can cause confusion for general functions such as lm() that do not understand time series attributes.
Notice that lag() only works usefully on time series objects. For example, the code snippet
> d <- a – lag(a,-1)
creates a vector of zeros named d if a is a normal vector, but returns a ts object with the rst di erence of
the series if a is a ts object. There is no warning issued if lag() is used on regular data, so care should be
exercised.
In order to use lagged data in a regression, we can use time series functions to generate a dataframe with
various lags of the data and NA characters stuck in the requisite leading and trailing positions. In order
to do this, we use the ts.union() function. Suppose X and Y are vectors of ordinary data and we want to
include a three times lagged version of X in the regression, then
> y <- ts(Y)
> x <- ts(X)
> x3 <- lag(x,-3)
> d <- ts.union(y,x,x3)
converts the vectors to ts data and forms a multivariate time series object with columns yt, xt, and xt􀀀3.
Again, remember that data must be converted to time series format before lagging or binding together with
the union operator in order to get the desired o set. The ts.union() function automatically decides on
a title for each column, must as the data.frame() command does. We can also do the lagging inside the
union and assign our own titles
> y <- ts(Y)
> x <- ts(X)
> d <- ts.union(y,x,x1=lag(xt,-1),x2=lag(xt,-2),x3=lag(xt,-3))
24
It is critical to note that the lag operator works in the opposite direction of what one might
expect: positive lag values result in leads and negative lag values result in lags.
When the resulting multivariate time series object is converted to a data frame (as it is read by ls() for
example), the o set will be preserved. Then
> lm(y~x3,data=d)
will then regress yt on xt􀀀3.
Also note that by default observations that have a missing value (NA) are omitted. This is what we want.
If the default setting has somehow been changed, we should include the argument na.action=na.omit in
the lm() call. In order to get the right omission behavior, it is generally necessary to bind all the data we
want to use (dependent and independent variables) together in a single union.
In summary, in order to use time series data, convert all data to type ts, lag it appropriately (using the
strange convention that positive lags are leads), and bind it all together using ts.union(). Then proceed
with the regressions and other operations.
5.2 Filters
5.2.1 Canned AR and MA lters
One can pass data through lters constructed by polynomials in the lag operator using the filter() command.
It handles two main types of lters: moving average or \convolution” lters and autoregressive or
\recursive” lters. Convolution lters have the form
y = (a0 + a1L + : : : + apLp)x
while recursive lters solve
y = (a1L + a2L2 + : : : + apLp)y + x
In both cases, x is the input to the lter and y the output. If x is a vector of innovations, the convolution
lter generates a moving average series and the recursive lter generates an autoregressive series. Notice
that there is no a0 term in the recursive lter (it would not make sense theoretically). The recursive lter
can equivalently be thought of as solving
y = (1 􀀀 a1L 􀀀 a2L2 􀀀 : : : 􀀀 apLp)􀀀1x
When we use the filter() command, we supply the fang vector as follows
> y <- filter(x,c(1,.2,-.35,.1),method=”convolution”,sides=1)
The data vector x may be a time series object or a regular vector of data, and the output y will be a ts
object. It is necessary to specify sides=1 for a convolution lter, otherwise the software tries to center the
lter (in positive and negative lags), which is not usually what the econometrician wants. The recursive
lter ignores the sides keyword. Notice that (except for data loss near the beginning of the series) we can
recover the data from y above using a recursive lter
> X<-filter(y,c(-.2,.35,-.1),method=”recursive”)
5.2.2 Manual Filtration
If the filter() command does not work for our application|or we just prefer doing things ourselves|we
can manually generate the lags and compute the result. We could imitate the convolution lter above with
> x <- ts(x)
> y <- x+.2*lag(x,-1)-.35*lag(x,-2)+.1*lag(x,-3)
The autoregressive lter would require a for loop to reproduce. Remember that the lag method of
ltering will only work if x is a ts object.
25
5.2.3 Hodrick Prescott Filter
Data may be passed through the Hodrick-Prescott lter a couple of ways, neither of which require the data
to be a time series vector. First, we can lter manually using the function de ned below (included without
prompts so it may be copied and pasted into R)
hpfilter <- function(x,lambda=1600){
eye <- diag(length(x))
result <- solve(eye+lambda*crossprod(diff(eye,lag=1,d=2)),x)
return(result)
}
where lambda is the standard tuning parameter, often set to 1600 for macroeconomic data. Passing a series
to this function will return the smoothed series.
This lter is also a special case of the smooth.spline() function in which the parameter tt all.knots=TRUE
has been passed. Unfortunately, the tuning parameter for the smooth.spline() function, spar is di erent
from the lambda above and we have not gured out how to convert from spar to lambda. If the reader
knows how to use smooth.spline() to do HP ltration, please let me know.
5.2.4 Kalman Filter
R has multiple functions for smoothing, ltering, and evaluating the likelihood of a state space model using
the Kalman lter. The most frequently mentioned is the KalmanLike family of functions, but they work
only for univariate state space models (that is, models in which there is only one variable in the observations
equation). For this reason, the methods in the dse1 package (SS.l() and others) and sspir package are often
preferred. Because of their greater simplicity, I describe the functions in the sspir package.
First we use a function to generate a state space model object, then we can Kalman lter it and optionally
smooth the ltered results.. The function for generating the state space object is SS(). Recall that a state
space model can be written
yt = F0
t t + vt
t = Gtt􀀀1 + wt
where
vt  N(0; Vt); wt  N(0;Wt):
t is the unobserved state vector, and yt is the observed data vector. For Kalman ltering, the initial value
of  is drawn from N(m0;C0).
Because of the possibly time varying nature of this general model, the coecient matrices must be given
as functions. One caveat to remember is that the input Fmat is the transpose of Ft. After writing functions to
input Ft;Gt; Vt;Wt and generating the input variables  (a vector of parameters to be used by the functions
that generate Ft;Gt; Vt; and Wt), m0; and C0, we run SS() to create the state space model. Then we
run kfilter() on the model object to lter and obtain the log likelihood|it returns a copy of the model
with estimated parameters included. If we want to run the Kalman smoother, we take the output model of
kfilter() and run smoother() on it.
The functions in package dse1 appear more
exible but more complicated to initialize.
5.3 ARIMA/ARFIMA
The arima() command from the ts() library can t time series data using an autoregressive integrated
moving average model.
dyt =  +
1dyt􀀀1 + ::: +
pdyt􀀀p + t + 1t􀀀1 + ::: + qt􀀀q (7)
where
yt = yt 􀀀 yt􀀀1 (8)
26
The parameters p, d, and q specify the order of the arima model. These values are passed as a vector
c(p,d,q) to arima(). Notice that the model used by R makes no assumption about the sign of the  terms,
so the sign of the corresponding coecients may di er from those of other software packages (such as S+).
> ar1 <- arima(y,order=c(1,0,0))
> ma1 <- arima(y,order=c(0,0,1))
Data-members ar1 and ma1 contain estimated coecients obtained by tting y with an AR(1) and MA(1)
model, respectively. They also contain the log likelihood statistic and estimated standard errors.
Sometimes we want to estimate a high order arima model but set the rst few coecients to zero (or
some other value). We do this using the fixed parameter. It takes a vector of the same length as the number
of estimable parameters. An NA entry indicates you want the corresponding parameter to be estimated. For
example, to estimate
yt =
2yt􀀀2 + 1t􀀀1 + t (9)
we could use
> output <- arima(y,order=c(2,0,1),fixed=c(0,NA,NA))
I have had reports that if the fixed parameter is used, the parameter transform.pars=FALSE should also
be passed.
If we are modeling a simple autoregressive model, we could also use the ar() command, from the ts
package, which either takes as an argument the order of the model or picks a reasonable default order.
> ar3 <- ar(y,order.max=3)
ts an AR(3) model, for example.
The function fracdiff(), from the fracdi library ts a speci ed ARMA(p,q) model to our data and
nds the optimal fractional value of d for an ARFIMA(p,d,q). Its syntax di ers somewhat from the arima()
command.
> library(fracdiff)
> fracdiff(y,nar=2,nma=1)
nds the optimal d value using p=2 and q=1. Then it estimates the resulting ARFIMA(p,d,q) model.
5.4 ARCH/GARCH
5.4.1 Basic GARCH{garch()
R can numerically t data using a generalized autoregressive conditional heteroskedasticity model GARCH(p,q),
written
y = C +  (10)
2
t = 0 + 12
t􀀀1 + ::: + p2
t􀀀p + 12
t + ::: + q2
t􀀀q (11)
setting p = 0 we obtain the ARCH(q) model. The R command garch() comes from the tseries library. It’s
syntax is
> archoutput <- garch(y,order=c(0,3))
> garchoutput <- garch(y,order=c(2,3))
so that archoutput is the result of modeling an ARCH(3) model and garchoutput is the result of modeling
a GARCH(2,3). Notice that the rst value in the order argument is q, the number of deltas, and the second
argument is q, the number of alpha parameters. The resulting coecient estimates will be named a0, a1,
. . . for the alpha and b1, b2, . . . for the delta parameters. Estimated values of the conditional standard
deviation process are available via
fitted(garchoutput)
27
5.4.2 Advanced GARCH{garchFit()
Of course, we may want to include exogenous variables in the mean equation (10), which garch() does not
allow. For this we can use the more
exible function garchFit() in the fSeries package.
> garchFitoutput <- garchFit(~arma(0,1)+garch(2,3),y)
ts the same model as above, but the mean equation now is an MA(1).
This function returns an S4 class object, which means to access the data inside we use the @ operator
> coef <- garchFitoutput@fit$coef
> fitted <- garchFitoutput@fit$series$h
Here h gives the estimated 2 process, not , so it is the square of the \ tted” values from garch(), above.
As of this writing, garchFit() produces copious output as it estimates the parameters. Some of this can
be avoided by passing the parameter trace=FALSE.
5.4.3 Miscellaneous GARCH{Ox G@RCH
fSeries also provides an interface to some functions from the Ox G@RCH6 software, which is not free in the same
sense as R is, although as of this writing it was free for academic use. That interface provides routines for
estimation of EGARCH, GJR, APARCH, IGARCH, FIGARCH, FIEGARCH, FIAPARCH and HYGARCH
models, according to the documentation.
5.5 Correlograms
It is common practice when analyzing time series data to plot the autocorrelation and partial autocorrelation
functions in order to try to guess the functional form of the data. To plot the autocorrelation and
partial autocorrelation functions, use the ts library functions acf() and pacf(), respectively. The following
commands plot the ACF and PACF on the same graph, one above (not on top of) the other. See section 6.5
for more details on arranging multiple graphs on the canvas.
> par(mfrow=c(2,1))
> acf(y)
> pacf(y)
These functions also return the numeric values of the ACF and PACF functions along with some other
output. Plotting can be suppressed by passing plot=F.
0 5 10 15 20 25
0.0 0.4 0.8
Lag
ACF
Series y
0 5 10 15 20 25
−0.2 0.4 0.8
Lag
Partial ACF
Series y
6Ox and G@RCH are distributed by Timberlake Consultants Ltd. Timberlake Consultants can be contacted through the
web site http://www.timberlake.co.uk
28
5.6 Predicted Values
The predict() command takes as its input an lm, glm, arima, or other regression object and some options
and returns corresponding predicted values. For time series regressions, such as arima() the argument is
the number of periods into the future to predict.
> a <- arima(y,order=c(1,1,2))
> predict(a,5)
returns predictions on ve periods following the data in y, along with corresponding standard error estimates.
5.7 Time Series Tests
5.7.1 Durbin-Watson Test for Autocorrelation
The Durbin-Watson test for autocorrelation can be administered using the durbin.watson() function from
the car library. It takes as its argument an lm object (the output from an lm() command) and returns
the autocorrelation, DW statistic, and an estimated p-value. The number of lags can be speci ed using the
max.lag argument. See help le for more details.
> library(car)
> results <- lm(Y ~ x1 + x2)
> durbin.watson(results,max.lag=2)
5.7.2 Box-Pierce and Breusch-Godfrey Tests for Autocorrelation
In order to test the residuals (or some other dataset) for autocorrelation, we can use the Box-Pierce test
from the ts library.
> library(ts)
> a <- arima(y,order=c(1,1,0))
> Box.test(a$resid)
Box-Pierce test
data: a$resid
X-squared = 18.5114, df = 1, p-value = 1.689e-05
would lead us to believe that the model may not be correctly speci ed, since we soundly reject the Box-Pierce
null. If we want to the Ljung-Box test instead, we include the parameter type=”Ljung-Box”.
For an appropriate model, this test is asymptotically equivalent to the Breusch-Godfrey test, which is
available in the lmtest() library as bgtest(). It takes a tted lm object instead of a vector of data as an
argument.
5.7.3 Dickey-Fuller Test for Unit Root
The augmented Dickey-Fuller test checks whether a series has a unit root. The default null hypothesis is
that the series does have a unit root. Use the adf.test() command from the tseries library for this test.
> library(tseries)
> adf.test(y)
Augmented Dickey-Fuller Test
data: y
Dickey-Fuller = -2.0135, Lag order = 7, p-value = 0.5724
alternative hypothesis: stationary
29
5.8 Vector Autoregressions (VAR)
The standard ar() routine can do the estimation part of a vector autoregression. In order to do this type of
regression, one need only bind the vectors together as a dataframe and give that dataframe as an argument
to ar(). Notice that ar() by default uses AIC to determine how many lags to use, so it may be necessary
to speci y aic=FALSE and/or an order.max parameter. Remember that if aic is TRUE (the default), the
function uses AIC to choose a model using up to the number of lags speci ed by order.max.
> y <- ts.union(Y1,Y2,Y3)
> var6 <- ar(y,aic=FALSE,order=6)
Unfortunately, the ar() approach does not have built in functionality for such things as predictions and
impulse response functions. The reader may have to code those up by hand if necessary.
Alternately, the ARMA() function in the dse1 library can t multivariate time series regression in great
generality, but the programming overhead is correspondingly great.
There is also a vector autoregression package on CRAN named VAR, but I have not used it.
6 Plotting
One of R’s strongest points is its graphical ability. It provides both high level plotting commands and the
ability to edit even the smallest details of the plots.
The plot() command opens a new window and plots the the series of data given it. By default a single
vector is plotted as a time series line. If two vectors are given to plot(), the values are plotted in the x-y
place using small circles. The type of plot (scatter, lines, histogram, etc.) can be determined using the type
argument. Strings for the main, x, and y labels can also be passed to plot.
> plot(x,y,type=”l”, main=”X and Y example”,ylab=”y values”,xlab=”x values”)
plots a line in the x-y plane, for example. Colors, symbols, and many other options can be passed to plot().
For more detailed information, see the help system entries for plot() and par().
After a plotting window is open, if we wish to superimpose another plot on top of what we already have,
we use the lines() command or the points() command, which draw connected lines and scatter plots,
respectively. Many of the same options that apply to plot() apply to lines() and a host of other graphical
functions.
We can plot a line, given its coecients, using the abline() command. This is often useful in visualizing
the placement of a regression line after a bivariate regression
> results <- lm(y ~ x)
> plot(x,y)
> abline(results$coef)
abline() can also be used to plot a vertical or horizontal line at a particular value using the parameters v
or h respectively.
To draw a nonlinear deterministic function, like f(x) = x3, we don’t need to generate a bunch of data
that lie on the function and then connect those dots. We can plot the function directly using the curve()
function. If we want to lay the function on top of an already created plot, we can pass the add=TRUE
parameter.
> x <- 1:10
> y <- (x+rnorm(10))^3
> plot(x,y)
> curve(x^3,add=TRUE)
30
6.1 Plotting Empirical Distributions
We typically illustrate the distribution of a vector of data by separating it into bins and plotting it as a
histogram. This functionality is available via the hist() command. Histograms can often hide true trends in
the distribution because they depend heavily on the choice of bin width. A more reliable way of visualizing
univariate data is the use of a kernel density estimator, which gives an actual empirical estimate of the PDF
of the data. The density() function computes a kernel estimator and can be plotted using the plot()
command.
> d <- density(y)
> plot(d,main=”Kernel Density Estimate of Y”)
0 5 10 15
0.00 0.02 0.04 0.06 0.08 0.10 0.12
Kernel Density Estimate of Y
N = 25 Bandwidth = 1.386
Density
We can also plot the empirical CDF of a set of data using the ecdf() command from the stepfun library,
which is included in the default distribution. We could then plot the estimated CDF using plot().
> library(stepfun)
> d <- ecdf(y)
> plot(d,main=”Empirical CDF of Y”)
6.2 Contour Plots
The command contour() from the graphics package takes a grid of function values and optionally two vectors
indicating the x and y values of the grid and draws the contour lines. Contour lines can be added to another
plot using the contourLines() function in a similar manner. The lattice package provides a functions called
levelplot() and contourplot() that are more
exible but less simple to use in my experience. A contour
example appears in appendix 13.5.
6.3 Adding Legends and Stu
After plotting we often wish to add annotations or other graphics that should really be placed manually.
Functions like text() (see below) and legend() take as their rst two arguments coordinates on the graph
where the resulting objects should be placed. In order to manually determine the location of a point on the
graph, use the locator() function. The location of one or several right clicks on the graph will be returned
by this function after a left click. Those coordinates can then be used to place text, legends, or other add-ons
to the graph.
An example of a time series, with a predicted curve and standard error lines around it
31
> plot(a.true,type=”l”,lty=1,ylim=c(11.6,12.5),main=”Predicted vs True”,xlab=””,ylab=””)
> lines(a.predict$pred,lty=2,type=”l”)
> lines(a.predict$pred+a.predict$se,lty=3,type=”l”)
> lines(a.predict$pred-a.predict$se,lty=3,type=”l”)
> legend(145,11.95,c(“true values”,”predicted”),lty=c(1,2))
Predicted vs True
146 148 150 152 154 156
11.6 12.0 12.4
true values
predicted
6.4 Adding Arrows, Text, and Markers
After drawing a plot of some type, we can add arrows using the arrows() function from the graphics library.
It takes \from” and \to” coordinates. Text and markers can be added anywhere on the plot using the text()
and points() functions. For points() the type of marker is determined by the pch parameter. There are
many values this can take on, including letters. A quick chart of possible values is the last output of running
the command
> example(points)
An example plot using some of these features is in appendix 13.5.
6.5 Multiple Plots
We can partition the drawing canvas to hold several plots. There are several functions that can be used to
do this, including split.screen(), layout(), and par(). The simplest and most important is probably
par(), so we will examine only it for now. The par() function sets many types of defaults about the plots,
including margins, tick marks, and layout. We arrange several plots on one canvas by modifying the mfrow
attribute. It is a vector whose rst entry speci es the number of rows of gures we will be plotting and the
second, the number of columns. Sometimes when plotting several gures, the default spacing may not be
pleasing to the eye. In this case we can modify the default margin (for each plot) using the mar attribute.
This is a four entry vector specifying the default margins in the form (bottom, left, top, right). The default
setting is c(5; 4; 4; 2) + 0:1. For a top/bottom plot, we may be inclined to decrease the top and bottom
margins somewhat. In order to plot a time series with a seasonally adjusted version of it below, we could
use
> op <- par(no.readonly=TRUE)
> par(mfrow=c(2,1),mar=c(3,4,2,2)+.1)
> plot(d[,1],main=”Seasonally Adjusted”,ylab=NULL)
> plot(d[,2],main=”Unadjusted”, ylab=NULL)
> par(op)
Notice that we saved the current settings in op before plotting so that we could restore them after our
plotting and that we must set the no.readonly attribute while doing this.
32
6.6 Saving Plots|png, jpg, eps, pdf, x g
In order to save plots to les we change the graphics device via the png(), jpg(), or postscript() commands,
then we plot what we want and close the special graphics device using dev.off(). For example,
> png(“myplot.png”)
> plot(x,y,main=”A Graph Worth Saving”)
> dev.off()
creates a png le of the plot of x and y. In the case of the postscript le, if we intend to include the graphics
in another le (like in a LATEX document), we could modify the default postscript settings controlling the
paper size and orientation. Notice that when the special paper size is used (and for best results at other
times as well), the width and height must be speci ed. Actually with LATEX we often resize the image
explicitly, so the resizing may not be that important.
> postscript(“myplot.eps”,paper=”special”,width=4,height=4,horizontal=FALSE)
> plot(x,y,main=”A Graph Worth Including in LaTeX”)
> dev.off()
One more thing to notice is that the default paper size is a4, which is the European standard. For 8.5×11
paper, we use paper=”letter”. When using images that have been generated as a postscript, then converted
to pdf, incorrect paper speci cations are a common problem.
There is also a pdf() command that works the same way the postscript command does, except that
by default its paper size is special with a height and width of 6 inches. A common example with pdf(),
which includes a little room for margins, would be
> pdf(“myplot.pdf”,paper=”letter”,width=8,height=10.5)
> par(mfrow=c(2,1))
> plot(x,y,main=”First Graph (on top)”)
> plot(x,z,main=”Second Graph (on bottom)”)
> dev.off()
Notice also that the par() command is used after the device command, pdf().
Finally, many scienti c diagrams are written using the free software x g. R has the capability to export
to x g format, which allows us complete
exibility in adding to and altering our plots. If we want to use R
to make a generic plot (like indi erence curves), we remove the axis numbers and other extraneous marks
from the gure.
> xfig(“myoutput.fig”, horizontal=F)
> plot(x,(x-.3)^2,type=”l”,xlab=””,ylab=””,xaxt=”n”,yaxt=”n”)
> dev.off()
The xaxt and yaxt parameters remove the numbers and tic marks from the axes.
6.7 Adding Greek Letters and Math Symbols to Plots
R can typeset a number of mathematical expressions for use in plots using the substitute() command. I
illustrate with an example (which, by the way, is completely devoid of economic meaning, so don’t try to
understand the function).
> plot(x,y,main=substitute(y==Psi*z-sum(beta^gamma)),type=”l”)
> text(3,40,substitute(Delta[K]==1))
> text(0.6,20,substitute(Delta[K]==epsilon))
33
0 1 2 3 4 5
−20 0 20 40 60 80 100 120
y = Yz -åbg
x
y
DK = 1
DK = e
Capitalizing the rst letter of the Greek symbol results in the \capital” version of the symbol. Notice
that to get the equal sign in the expression, one must use the double equal sign, as above. Brackets indicate
subscripts. We can optionally pass variables to substitute() to include their value in the formula. For
example
> for (g in seq(.1,1,.1)){
+ plot(f(g),main=substitute(gamma==x,list(x=g)))
> }
will make ten plots, in each plot the title will re
ect the value of
that was passed to f(). The rules for
generating mathematical expressions are available through the help for plotmath, which is the mathematical
typesetting engine used in R plots.
To mix text and symbols, use the paste() command inside of substitute()
plot(density(tstats),main=substitute(paste(“t-stat of “,beta[0])))
6.8 Other Graphics Packages
So far I have discussed the R base plotting package. It is very sophisticated and useful when compared with
the plotting capabilities of many other statistical software packages. It is not all inclusive, however, and
there are other graphics libraries in R which might prove useful, including grid, lattice, and ggplot2.
7 Statistics
R has extensive statistical functionality. The functions mean(), sd(), min(), max(), and var() operate on
data as we would expect7. If our data is a matrix and we would like to nd the mean or sum of each row or
column, the fastest and best way is to use one of rowMeans(), colMeans(), rowSums(), colSums().
7.1 Working with Common Statistical Distributions
R can also generate and analyze realizations of random variables from the standard distributions. Commands
that generate random realizations begin with the letter `r’ and take as their rst argument the number of
observations to generate; commands that return the value of the pdf at a particular observation begin with
`d'; commands that return the cdf value of a particular observation begin with `p'; commands that return
the number corresponding to a cdf value begin with q. Note that the `p’ and `q’ functions are inverses of
each other.
7Note: the functions pmax() and pmin() function like max and min but elementwise on vectors or matrices.
34
> rnorm(1,mean=2,sd=3)
[1] 2.418665
> pnorm(2.418665,mean=2,sd=3)
[1] 0.5554942
> dnorm(2.418665,mean=2,sd=3)
[1] 0.1316921
> qnorm(.5554942,mean=2,sd=3)
[1] 2.418665
These functions generate a random number from the N(2,9) distribution, calculate its cdf and pdf value,
and then verify that the cdf value corresponds to the original observation. If we had not speci ed the mean
and standard deviation, R would have assumed standard normal.
Command Meaning
rX() Generate random vector from distribution X
dX() Return the value of the PDF of distribution X
pX() Return the value of the CDF of distribution X
qX() Return the number at which the CDF hits input value [0,1]
Note that we could replace norm with one of the following standard distribution names
Distribution R Name Possible Arguments
beta beta shape1, shape2, ncp
binomial binom size, prob
Cauchy cauchy location, scale
chi-squared chisq df, ncp
exponential exp rate
F f df1, df1, ncp
gamma gamma shape, scale
geometric geom prob
hypergeometric hyper m, n, k
log-normal lnorm meanlog, sdlog
logistic logis location, scale
negative binomial nbinom size, prob
normal norm mean, sd
Poisson pois lambda
Students t t df, ncp
uniform unif min, max
Weibull weibull shape, scale
Wilcoxon wilcox m, n
The mvtnorm package provides the multivariate normal and t distributions with names mvnorm and
mvt, respectively. Other distributions are found in other packages. For example, invgamma is available in
MCMCpack.
7.2 P-Values
By way of example, in order to calculate the p-value of 3.6 using an f(4; 43) distribution, we would use the
command
> 1-pf(3.6,4,43)
[1] 0.01284459
and nd that we fail to reject at the 1% level, but we would be able to reject at the 5% level. Remember,
if the p-value is smaller than the alpha value, we are able to reject. Also recall that the p-value should be
multiplied by two if it we are doing a two tailed test. For example, the one and two tailed tests of a t statistic
of 2.8 with 21 degrees of freedom would be, respectively
35
> 1-pt(2.8,21)
[1] 0.005364828
> 2*(1-pt(2.8,21))
[1] 0.01072966
So that we would reject the null hypothesis of insigni cance at the 10% level if it were a one tailed test
(remember, small p-value, more evidence in favor of rejection), but we would fail to reject in the signagnostic
case.
7.3 Sampling from Data
R provides a convenient and fast interface for sampling from data (e.g., for bootstrapping). Because it calls a
compiled function, it is likely to be much faster than a hand-written sampler. The function is sample(). The
rst argument is either the data from which to sample or an integer|if an integer is given, then the sample
is taken from the vector of integers between one and that number. The second is the size of the sample to
obtain. The parameter replace indicates whether to sample with or without replacement. Finally, a vector
of sample probabilities can optionally be passed.
8 Math in R
8.1 Matrix Operations
8.1.1 Matrix Algebra and Inversion
Most R commands work with multiple types of data. Most standard mathematical functions and operators
(including multiplication, division, and powers) operate on each component of multidimensional objects.
Thus the operation A*B, where A and B are matrices, multiplies corresponding components. In order to
do matrix multiplication or inner products, use the %*% operator. Notice that in the case of matrix-vector
multiplication, R will automatically make the vector a row or column vector, whichever is conformable.
Matrix inversion is obtained via the solve() function. (Note: if solve() is passed a matrix and a vector,
it solves the corresponding linear problem) The t() function transposes its argument. Thus
= (X0X)􀀀1X0Y (12)
would correspond to the command
> beta <- solve(t(X)%*%X)%*%t(X)%*%Y
or more eciently
> beta <- solve(t(X)%*%X,t(X)%*%Y)
The Kronecker product is also supported and is speci ed by the the %x% operator.
> bigG <- g%x%h
calculates the Kronecker product of g with h. The outer product, %o% is also supported. When applied to
pure vectors (which we recall have only one dimension and thus are neither rows or columns), both matrix
products makes di erent assumptions about whether the arguments are row or column vectors, depending
on their position. For example
> h<-c(1,2,3)
> h%*%h
[,1]
[1,] 14
> h%o%h
[,1] [,2] [,3]
[1,] 1 2 3
36
[2,] 2 4 6
[3,] 3 6 9
> t(h)%*%h
[,1]
[1,] 14
> h%*%t(h)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 6
[3,] 3 6 9
Note that t(h)%o%h would produce a 1x3x3 array since the t() operator makes h into a row vector and
%o% makes the second h into a row vector. Strictly speaking those arguments are not conformable. That
combination should probably be avoided.
The trace of a square matrix is calculated by the function tr() and its determinant by det(). The Matrix
package provides the various matrix norms (norm()), sparse and symmetric matrix support, and other linear
algebra-ish functionality. It should be remembered that the Matrix package provides its own class Matrix,
which is distinct from the standard R type matrix. In order to use functions from the Matrix package, they
must be converted using Matrix().
8.1.2 Factorizations
R can compute the standard matrix factorizations. The Cholesky factorization of a symmetric positive
de nite matrix is available via chol(). It should be noted that chol() does not check for symmetry in its
argument, so the user must be careful.
We can also extract the eigenvalue decomposition of a symmetric matrix using eigen(). By default this
routine checks the input matrix for symmetry, but it is probably better to specify whether the matrix is
symmetric by construction or not using the parameter symmetric.
> J <- cbind(c(20,3),c(3,18))
> j <- eigen(J,symmetric=T)
> j$vec%*%diag(j$val)%*%t(j$vec)
[,1] [,2]
[1,] 20 3
[2,] 3 18
If the more general singular value decomposition is desired, we use instead svd(). For the QR factorization,
we use qr(). The Matrix package provides the lu() and Schur() decompositions|just remember to
convert the matrix to type Matrix (not matrix) before using them.
8.2 Numerical Optimization
8.2.1 Unconstrained Minimization
R can numerically minimize an arbitrary function using either nlm() or optim(). I prefer the latter because
it lets the user choose which optimization method to use (BFGS, conjugate gradients, simulated annealing,
and others), but they work in similar ways. For simplicity I describe nlm().
The nlm() function takes as an argument a function and a starting vector at which to evaluate the
function. The st argument of the user-de ned function should be the parameter(s) over which R will
minimize the function, additional arguments to the function (constants) should be speci ed by name in the
nlm() call.
> g <- function(x,A,B){
+ out <- sin(x[1])-sin(x[2]-A)+x[3]^2+B
+ out
+ }
37
> results <- nlm(g,c(1,2,3),A=4,B=2)
> results$min
[1] 6.497025e-13
> results$est
[1] -1.570797e+00 -7.123895e-01 -4.990333e-07
Here nlm() uses a matrix-secant method that numerically approximates the gradient, but if the return value
of the function contains an attribute called gradient, it will use a quasi-newton method. The gradient based
optimization corresponding to the above would be
> g <- function(x,A,B){
+ out <- sin(x[1])-sin(x[2]-A)+x[3]^2+B
+ grad <- function(x,A){
+ c(cos(x[1]),-cos(x[2]-A),2*x[3])
+ }
+ attr(out,”gradient”) <- grad(x,A)
+ return(out)
+ }
> results <- nlm(g,c(1,2,3),A=4,B=2)
If function maximization is wanted one should multiply the function by -1 and minimize. If optim() is
used, one can instead pass the parameter control=list(fnscale=-1), which indicates a multiplier for the
objective function and gradient. It can also be used to scale up functions that are nearly
at so as to avoid
numerical inaccuracies.
Other optimization functions which may be of interest are optimize() for one-dimensional minimization,
uniroot() for root nding, and deriv() for calculating numerical derivatives.
8.2.2 Minimization with Linear Constraints
Function minimization subject to a set of linear inequality constraints is provided by constrOptim(). The
set of constraints must be expressible in the form
U0
i 􀀀 Ci  0
where Ui and Ci are known constant vectors and  is the vector of parameters over which we are optimizing.
For example, to solve
^ = argmax0mi1f()
we would use
> thetahat<-constrOptim(c(0,0,0,0,0),-f,NULL,ui=-m,ci=-1)$par
The rst argument is the starting value ( has ve parameters), the function is multiplied by 􀀀1 since we
are maximizing. The next argument should be a function giving the gradient of f. If we do not have such a
function, we must insert NULL so that a non-gradient method optimization method is used.
8.3 Numerical Integration
We can use the function integrate() from the stats package to do unidimensional integration of a known
function. For example, if we wanted to nd the constant of integration for a posterior density function we
could de ne the function and then integrate it
> postdensity <- function(x){
+ exp(-1/2*((.12-x)^2+(.07-x)^2+(.08-x)^2))
+ }
> const <- 1/integrate(postdensity,-Inf,Inf)$value
We notice that integrate() returns additional information, such as error bounds, so we extract the value
using $value. Also, in addition to a function name, integrate() takes limits of integration, which|as in
this case|may be in nite. For multidimensional integration we instead use adapt() from the adapt library,
which does not allow in nite bounds.
38
9 Programming
9.1 Writing Functions
A function can be treated as any other object in R. It is created with the assignment operator and
function(), which is passed an argument list (use the equal sign to denote default arguments; all other
arguments will be required at runtime). The code that will operate on the arguments follows, surrounded
by curly brackets if it comprises more than one line.
If an expression or variable is evaluated within a function, it will not echo to the screen. However, if it
is the last evaluation within the function, it will act as the return value. This means the following functions
are equivalent
> g <- function(x,Alpha=1,B=0) sin(x[1])-sin(x[2]-Alpha)+x[3]^2+B
> f <- function(x,Alpha=1,B=0){
+ out <- sin(x[1])-sin(x[2]-Alpha)+x[3]^2+B
+ return(out)
+ }
Notice that R changes the prompt to a \+” sign to remind us that we are inside brackets.
Because R does not distinguish what kind of data object a variable in the parameter list is, we should
be careful how we write our functions. If x is a vector, the above functions would return a vector of the
same dimension. Also, notice that if an argument has a long name, it can be abbreviated as long as the
abbreviation is unique. Thus the following two statements are equivalent
> f(c(2,4,1),Al=3)
> f(c(2,4,1),Alpha=3)
Function parameters are passed by value, so changing them inside the function does not change them
outside of the function. Also variables de ned within functions are unavailable outside of the function. If a
variable is referenced inside of a function, rst the function scope is checked for that variable, then the scope
above it, etc. In other words, variables outside of the function are available to code inside for reading, but
changes made to a variable de ned outside a function are lost when the function terminates. For example,
> a<-c(1,2)
> k<-function(){
+ cat(“Before: “,a,”\n”)
+ a<-c(a,3)
+ cat(“After: “,a,”\n”)
+ }
> k()
Before: 1 2
After: 1 2 3
> a
[1] 1 2
If a function wishes to write to a variable de ned in the scope above it, it can use the \superassignment”
operator <<-. The programmer should think twice about his or her program structure before using this
operator. Its need can easily be the result of bad programming practices.
9.2 Looping
Looping is performed using the for command. It’s syntax is as follows
> for (i in 1:20){
+ cat(i)
> }
39
Where cat() may be replaced with the block of code we wish to repeat. Instead of 1:20, a vector or matrix
of values can be used. The index variable will take on each value in the vector or matrix and run the code
contained in curly brackets.
If we simply want a loop to run until something happens to stop it, we could use the repeat loop and a
break
> repeat {
+ g <- rnorm(1)
+ if (g > 2.0) break
+ cat(g);cat(“\n”)
> }
Notice the second cat command issues a newline character, so the output is not squashed onto one line. The
semicolon acts to let R know where the end of our command is, when we put several commands on a line.
For example, the above is equivalent to
> repeat {g <- rnorm(1);if (g>2.0) break;cat(g);cat(“\n”);}
In addition to the break keyword, R provides the next keyword for dealing with loops. This terminates
the current iteration of the for or repeat loop and proceeds to the beginning of the next iteration
(programmers experienced in other languages sometimes expect this keyword to be continue but it is not).
9.3 Avoiding Loops
9.3.1 Applying a Function to an Array (or a Cross Section of it)
To help the programmer avoid the sluggishness associated with writing and executing loops, R has a command
to call a function with each of the rows or columns of an array. We specify one of the dimensions in the
array, and for each element in that dimension, the resulting cross section is passed to the function.
For example, if X is a 50×10 array representing 10 quantities associated with 50 individuals and we want
to nd the mean of each row (or column), we could write
> apply(X,1,mean) # for a 50-vector of individual (row) means
> apply(X,2,mean) # for a 10-vector of observation (column) means
Of course, an array may be more than two dimensional, so the second argument (the dimension over which
to apply the function) may go above 2. A better way to do this particular example, of course, would be to
use rowMeans() or colMeans().
We can use apply() to apply a function to every element of an array individually by specifying more
than one dimension. In the above example, we could return a 50×10 matrix of normal quantiles using
> apply(X,c(1,2),qnorm,mean=3,sd=4)
After the required three arguments, any additional arguments are passed to the inside function, qnorm in
this case.
In order to execute a function on each member of a list, vector, or other R object, we can use the
function lapply(). The result will be a new list, each of whose elements is the result of executing the
supplied function on each element of the input. The syntax is the same as apply() except the dimension
attribute is not needed. To get the results of these function evaluations as a vector instead of a list, we can
use sapply().
9.3.2 Replicating
If the programmer wishes to run a loop to generate values (as in a simulation) that do not depend on the
index, the function replicate() provides a convenient and fast interface. To generate a vector of 50000
draws from a user de ned function called GetEstimate() which could, for example, generate simulated data
and return a corresponding parameter estimate, the programmer could execute
> estimates<-replicate(50000,GetEstimate(alpha=1.5,beta=1))
40
If GetEstimate() returns a scalar, replicate() generates a vector. It it returns a vector, replicate()
will column bind them into a matrix. Notice that replicate() always calls its argument function with the
same parameters|in this case 1.5 and 1.
9.4 Conditionals
9.4.1 Binary Operators
Conditionals, like the rest of R, are highly vectorized. The comparison
> x < 3
returns a vector of TRUE/FALSE values, if x is a vector. This vector can then be used in computations.
For example. We could set all x values that are less that 3 to zero with one command
> x[x<3] <- 0
The conditional within the brackets evaluates to a TRUE/FALSE vector. Wherever the value is TRUE, the
assignment is made. Of course, the same computation could be done using a for loop and the if command.
> for (i in 1:NROW(x)){
+ if (x[i] < 3) {
+ x[i] <- 0
+ }
+ }
Because R is highly vectorized, the latter code works much more slowly than the former. It is generally good
programming practice to avoid loops and if statements whenever possible when writing in any scripting
language8.
The Boolean Operators
! x NOT x
x & y x and y elementwise
x && y x and y total object
x j y x or y elementwise
x j j y x or y total object
xor(x, y) x xor y (true if one and only one argument is true)
9.4.2 WARNING: Conditionals and NA
It should be noted that using a conditional operator with an NA or NaN value returns NA. This is often
what we want, but causes problems when we use conditionals within an if statement. For example
> x <- NA
> if (x == 45) cat(“Hey There”)
Error in if (x == 45) cat(“Hey There”) : missing value where TRUE/FALSE needed
For this reason we must be careful to include plenty of is.na() checks within our code.
9.5 The Ternary Operator
Since code segments of the form
> if (x) {
+ y } else {
+ z }
8Although it is also possible to try too hard to remove loops, complicating beyond recognition and possibly even slowing the
code.
41
come up very often in programming, R includes a ternary operator that performs this in one line
> ifelse(x,y,z)
If x evaluates to TRUE, then y is returned. Otherwise z is returned. This turns out to be helpful because of
the vectorized nature of R programming. For example, x could be a vector of TRUE/FALSE values, whereas
the long form would have to be in a loop or use a roundabout coding method to achieve the same result.
9.6 Outputting Text
Character strings in R can be printed out using the cat() function. All arguments are coerced into strings
and then concatenated using a separator character. The default separator is a space.
> remaining <- 10
> cat(“We have”,remaining,”left\n”)
We have 10 left
> cat(“We have”,remaining,”left\n”,sep=””)
We have10left
In order to print special characters such as tabs and newlines, R uses the C escape system. Characters
preceded by a backslash are interpreted as special characters. Examples are nn and nt for newline and tab,
respectively. In order to print a backslash, we use a double backslash nn. When outputting from within
scripts (especially if there are bugs in the script) there may be a delay between the output command and
the printing. To force printing of everything in the bu er, use flush(stdout()).
To generate a string for saving (instead of displaying) we use the paste() command, which turns its
arguments into a string and returns it instead of printing immediately.
9.7 Pausing/Getting Input
Execution of a script can be halted pending input from a user via the readline() command. If readline()
is passed an argument, it is treated as a prompt. For example, a command to pause the script at some point
might read
> blah <- readline(“Press <ENTER> to Continue.”)
the function returns whatever the user inputted. It is good practice to assign the output of readline() to
something (even if it is just a throw-away variable) so as to avoid inadvertently printing the input to the
screen or returning it|recall that if a function does not explicitly call return() the last returned value
inside of it becomes its return value.
The function readline() always returns a string. If a numeric quantity is wanted, it should be converted
using as.numeric().
9.8 Timing Blocks of Code
If we want to know the compute time of a certain block of code, we can pass it as an argument to the
system.time() function. Suppose we have written a function called slowfunction() and we wish to know
how much processor time it consumes.
> mytime <- system.time(myoutput <- slowfunction(a,b))
> mytime
[1] 16.76666667 0.08333333 17.00000000 0.00000000 0.00000000
The output of slowfunction() is stored in myoutput and the elements of mytime are user, system and total
times (in seconds), followed by totals of user and system times of child processes spawned by the expression.
I often nd it inconvenient to pass code to system.time(), so instead we can call proc.time(), which
tells how much time this R session has consumed, directly and subtract.
42
> mytime <- proc.time()
> myoutput <- slowfunction(a,b)
> proc.time() – mytime
[1] 16.76666667 0.08333333 17.00000000 0.00000000 0.00000000
We are generally interested only in the rst number returned by system.time() or proc.time().
9.9 Calling C functions from R
Some programming problems have elements that are just not made for an interpreted language because
they require too much computing power (especially if they require too many loops). These functions can be
written in C, compiled, and then called from within R9. R uses the system compiler (if you have one) to
create a shared library (ending in .so or .dll, depending on your system) which can then be loaded using
the dyn.load() function.
9.9.1 How to Write the C Code
A function that will be called from within R should have type void (it should not return anything except
through its arguments). Values are passed to and from R by reference, so all arguments are pointers. Real
numbers (or vectors) are passed as type double*, integers and boolean as type int*, and strings as type
char**. If inputs to the function are vectors, their length should be passed manually. Also note that objects
such as matrices and arrays are just vectors with associated dimension attributes. When passed to C, only
the vector is passed, so the dimensions should be passed manually and the matrix recreated in C if necessary.
Here is an example of a C le to compute the dot product of two vectors
void gdot(double *x,double *y,int *n,double *output){
int i;
*output=0;
for (i=0;i<*n;i++){
*output+=x[i]*y[i];
}
}
No header les need to be included unless more advanced functionality is required, such as passing complex
numbers (which are passed as a particular C structure). In that case, include the le R.h.
Do not use malloc() or free() in C code to be used with R. Instead use the R functions Calloc() and
Free(). R does its own memory management, and mixing it with the default C memory stu is a bad idea.
Outputting from inside C code should be done using Rprintf(), warning(), or error(). These functions
have the same syntax as the regular C command printf(), which should not be used.
It should also be noted that long computations in compiled code cannot be interrupted by the user. In
order to check for an interrupt signal from the user, we include
#include <R_ext/Utils.h>

R_CheckUserInterrupt();
in appropriate places in the code.
9.9.2 How to Use the Compiled Functions
To compile the library, from the command line (not inside of R) use the command
R CMD SHLIB mycode.c
9My experience has been that the speedup of coding in C is not enough to warrant the extra programming time except for
extremely demanding problems. If possible, I suggest working directly in R. It’s quite fast|as interpreted languages go. It is
somewhat harder to debug C code from within R and the C/R interface introduces a new set of possible bugs as well.
43
This will generate a shared library called mycode.so. To call a function from this library we load the library
using dyn.load() and then call the function using the .C() command. This command makes a copy of each
of its arguments and passes them all by reference to C, then returns them as a list. For example, to call the
dot product function above, we could use
> x<-c(1,4,6,2)
> y<-c(3,2.4,1,9)
> dyn.load(“mycode.so”)
> product<-.C(“gdot”,myx=as.double(x),myy=as.double(y),myn=as.integer(NROW(x)),myoutput=numeric(1))
> product$myoutput
[1] 36.6
Notice that when .C() was called, names were given to the arguments only for convenience (so the resulting
list would have names too). The names are not passed to C. It is good practice (and often necessary) to use
as.double() or as.integer() around each parameter passed to .C(). If compiled code does not work or
works incorrectly, this should be checked rst.
It is important to create any vectors from within R that will be passed to .C() before calling them. If
the data being passed to .C() is large and making a copy for passing is not desirable, we can instruct .C()
to edit the data in place by passing the parameter DUP=FALSE. The programmer should be very wary when
doing this, because any variable changed in the C code will be changed in R also and there are subtle caveats
associated with this. The help le for .C() or online documentation give more information.
There is also a .Fortran() function. Notice that .C() and .Fortran() are the simple ways to call
functions from these languages, they do not handle NA values or complicated R objects. A more
exible and
powerful way of calling compiled functions is .Call(), which handles many more types of R objects but adds
signi cantly to the complexity of the programming. The .Call() function is a relatively recent addition to
R, so most of the language was written using the simple but in
exible .C().
9.10 Calling R Functions from C
Compiled C code that is called from R can also call certain R functions (fortran can not). In particular,
the functions relating to drawing from and evaluating statistical distributions are available. To access
these functions, the header le Rmath.h must be included. Unfortunately these C functions are not well
documented, so the programmer may have to look up their de nitions in Rmath.h on the local system. Before
calling these functions, GetRNGstate() must be called, and PutRNGstate() must be called afterward. Below
is a C function that generates an AR(1) series with N(0,1) errors and a supplied coecient.
#include<Rmath.h>
void ar1(double *y,double *rho,double *N){
int i;
GetRNGstate();
for (i=1;i<N[0];i++){
y[i]=rho[0]*y[i-1]+rnorm(0.0,1.0);
}
PutRNGstate();
}
which could be called (as usual) from within R using
> dyn.load(“ar1.so”)
> X<-.C(“ar1″,x=double(len=5000),rho=as.double(.9),n=as.integer(5000))$x
Most common mathematical operations, such as sqrt() are also available through the C interface.
Actual R expressions can also be called from within C, but this is not recommended since it invokes a
new instance of R and is slower than terminating the C code, doing a computation in R, and calling another
C function. The method for doing it is the (now depreciated) call R() function.
44
10 Changing Con gurations
10.1 Default Options
A number of runtime options relating to R’s behavior are governed by the options() function. Running
this function with no arguments returns a list of the current options. One can change the value of a single
option by passing the option name and a new value. For temporary changes, the option list may be saved
and then reused.
> oldops <- options()
> options(verbose=true)

> options(oldops)
10.1.1 Signi cant Digits
Mathematical operations in R are generally done to full possible precision, but the format in which, for
example, numbers are saved to a le when using a write command depends on the option digits.
> options(digits=10)
increases this from the default 7 to 10.
10.1.2 What to do with NAs
The behavior of most R functions when they run across missing values is governed by the option na.action.
By default it is set to na.omit, meaning that the corresponding observation will be ignored. Other possibilities
are na.fail, na.exclude, and na.pass. The value na.exclude di ers from na.omit only in the type
of data it returns, so they can usually be used interchangeably.
These NA handling routines can also be used directly on the data. Suppose we wish to remove all missing
values from an object d.
> cleand <- na.omit(d)
Notice that na.omit() adds an extra attribute to d called na.action which contains the row names that
were removed. We can remove this attribute using attr().
> attr(cleand,”na.action”)<-NULL
This is the general way to change attributes of an R object. We view all attributes using the attribute()
command.
10.1.3 How to Handle Errors
When an error occurs in a function or script more information may be needed than the type of error that
occurs. In this case, we can change the default behavior of error handling. This is set via the error option,
which is by default set to NULL or stop. Setting this option to recover we enter debug mode on error.
First R gives a list of \frames” or program locations to start from. After selecting one, the user can type
commands as if in interactive mode there. In the example below, one of the indices in my loop was beyond
the dimension of the matrix it was referencing. First I check i, then j.
> options(error=recover)
> source(“log.R”)
Error: subscript out of bounds
Enter a frame number, or 0 to exit
1: source(“log.R”)
45
2: eval.with.vis(ei, envir)
3: eval.with.vis(expr, envir, enclos)
4: mypredict(v12, newdata = newdata)
Selection: 4
Called from: eval(expr, envir, enclos)
Browse[1]> i
[1] 1
Browse[1]> j
[1] 301
Pressing enter while in browse mode takes the user back to the menu. After debugging, we can set error to
NULL again.
10.1.4 Suppressing Warnings
Sometimes non-fatal warnings issued by code annoyingly ugli es output. In order to suppress these warnings,
we use options() to set warn to a negative number. If warn is one, warnings are printed are printed as they
are issued by the code. By default warnings are saved until function completion warn=0. Higher numbers
cause warnings to be treated as errors.
11 Saving Your Work
11.1 Saving the Data
When we choose to exit, R asks whether we would like to save our workspace image. This saves our variables,
history, and environment. You manually can save R’s state at any time using the command
> save.image()
You can save one or several data objects to a speci ed le using the save() command.
> save(BYU,x,y,file=”BYUINFO.Rdata”)
saves the variables BYU, x, and y in the default R format in a le named \BYUINFO.Rdata”. They can be
loaded again using the command
> load(“BYUINFO.Rdata”)
R can save to a number of other formats as well. Use write.table() to write a data frame as a spacedelimited
text le with headers, for example. Some other formats are listed in section 2.6.
11.2 Saving the Session Output
We may also wish to write the output of our commands to a le. This is done using the sink() command.
> sink(“myoutput.txt”)
> a
> sink()
The output of executing the command a (that is, echoing whatever a is) is written to \myoutput.txt”. Using
sink() with no arguments starts output echoing to the screen again. By default, sink() hides the output
from us as we are interacting with R, so we can get a transcript of our session and still see the output by
passing the split=T keyword to tt sink()10.
If we are using a script le, a nice way to get a transcript of our work and output is to use sink() in
connection with source().
10Thanks to Trevor Davis for this observation.
46
> sink(“myoutput.txt”)
> source(“rcode.R”,echo=T)
> sink()
R can save plots and graphs as image les as well. Under windows, simply click once on the graph so
that it is in the foreground and then go to le/Save as and save it as jpeg or png. There are also ways to
save as an image or postscript le from the command line, as described in section 6.6.
11.3 Saving as LATEX
R objects can also be saved as LATEX tables using the latex() command from the Hmisc library. The most
common use we have had for this command is to save a table of the coecients and estimates of a regression.
> reg <- lm(educ~exper+south,data=d)
> latex(summary(reg)$coef)
produces a le named \summary.tex” that produces the following when included in a LATEX source le11
summary Estimate Std. Error t value Pr(>|t|)
(Intercept) 17:2043926 0:088618337 194:140323 0:00000e + 00
exper 􀀀0:4126387 0:008851445 􀀀46:618227 0:00000e + 00
south 􀀀0:7098870 0:074707431 􀀀9:502228 4:05227e 􀀀 21
which we see is pretty much what we want. The table lacks a title and the math symbols in the p-value
column are not contained in $ characters. Fixing these by hand we get
OLS regression of educ on exper and south
summary Estimate Std. Error t value Pr(> jtj)
(Intercept) 17:2043926 0:088618337 194:140323 0:00000e + 00
exper 􀀀0:4126387 0:008851445 􀀀46:618227 0:00000e + 00
south 􀀀0:7098870 0:074707431 􀀀9:502228 4:05227e 􀀀 21
Notice that the latex() command takes matrices, summaries, regression output, dataframes, and many
other data types. Another option, which may be more
exible, is the xtable() function from the xtable
library.
12 Final Comments
It is my opinion that R provides an e ective platform for econometric computation and research. It has builtin
functionality suciently advanced for professional research, is highly extensible, and has a large community
of users. On the other hand, it takes some time to become familiar with the syntax and reasoning of the
language, which is the problem I seek to address here.
I hope this paper has been helpful and easy to use. If a common econometric problem is not addressed
here, I would like to hear about it so I can add it and future econometricians need not su er through the
process of guring it out themselves. Please let me know by email (if the date today is before, say, May 2009)
what the problem is that you think should be addressed. My email is g-farnsworth@kellogg.northwestern.edu.
If possible, please include the solution as well.
11Under linux, at least, the latex() command also pops up a window showing how the output will look.
47
13 Appendix: Code Examples
13.1 Monte Carlo Simulation
The following block of code creates a vector of randomly distributed data X with 25 members. It then creates
a y vector that is conditionally distributed as
y = 2 + 3x + : (13)
It then does a regression of x on y and stores the slope coecient. The generation of y and calculation of
the slope coecient are repeated 500 times. The mean and sample variance of the slope coecient are then
calculated. A comparison of the sample variance of the estimated coecient with the analytic solution for
the variance of the slope coecient is then possible.
>A <- array(0, dim=c(500,1))
>x <- rnorm(25,mean=2,sd=1)
>for(i in 1:500){
+ y <- rnorm(25, mean=(3*x+2), sd=1)
+ beta <- lm(y~x)
+ A[i] <- beta$coef[2]
+ }
>Abar <- mean(A)
>varA <- var(A)
13.2 The Haar Wavelet
The following code de nes a function that returns the value of the Haar wavelet, de ned by
(H)(u) =
8><
>:
􀀀1=
p
2 􀀀1 < u  0
1=
p
2 0 < u  1
0 otherwise
(14)
of the scalar or vector passed to it. Notice that a better version of this code would use a vectorized comparison,
but this is an example of conditionals, including the else statement. The interested student could rewrite
this function without using a loop.
> haar <- function(x){
+ y <- x*0
+ for(i in 1:NROW(y)){
+ if(x[i]<0 && x[i]>-1){
+ y[i]=-1/sqrt(2)
+ } else if (x[i]>0 && x[i]<1){
+ y[i]=1/sqrt(2)
+ }
+ }
+ y
+ }
Notice also the use of the logical `and’ operator, &&, in the if statement. The logical `or’ operator is
the double vertical bar, jj. These logical operators compare the entire object before and after them. For
example, two vectors that di er in only one place will return FALSE under the && operator. For elementwise
comparisons, use the single & and j operators.
48
13.3 Maximum Likelihood Estimation
Now we consider code to nd the likelihood estimator of the coecients in a nonlinear model. Let us assume
a normal distribution on the additive errors
y = aLbKc +  (15)
Notice that the best way to solve this problem is a nonlinear least squares regression using nls(). We do
the maximum likelihood estimation anyway. First we write a function that returns the log likelihood value
(actually the negative of it, since minimization is more convenient) then we optimize using nlm(). Notice
that Y, L, and K are vectors of data and a, b, and c are the parameters we wish to estimate.
> mloglik <- function(beta,Y,L,K){
+ n <- length(Y)
+ sum( (log(Y)-beta[1]-beta[2]*log(L)-beta[3]*log(K))^2 )/(2*beta[4]^2) + \
+ n/2*log(2*pi) + n*log(beta[4])
+ }
> mlem <- nlm(mloglik,c(1,.75,.25,.03),Y=Y,L=L,K=K)
13.4 Extracting Info From a Large File
Let 301328226.csv be a large le (my test case was about 80 megabytes with 1.5 million lines). We want to
extract the lines corresponding to put options and save information on price, strike price, date, and maturity
date. The rst few lines are as follows (data has been altered to protect the innocent)
date,exdate,cp_flag,strike_price,best_bid,best_offer,volume,impl_volatility,optionid,cfadj,ss_flag
04JAN1997,20JAN1997,C,500000,215.125,216.125,0,,12225289,1,0
04JAN1997,20JAN1997,P,500000,0,0.0625,0,,11080707,1,0
04JAN1997,20JAN1997,C,400000,115.375,116.375,0,,11858328,1,0
Reading this le on my (relatively slow) computer is all but impossible using read.csv().
> LENGTH<-600000
> myformat<-list(date=””,exdate=””,cp=””,strike=0,bid=0,ask=0,
+ volume=0,impvolat=0,id=0,cjadj=0,ss=0)
> date=character(LENGTH)
> exdate=character(LENGTH)
> price=numeric(LENGTH)
> strike=numeric(LENGTH)
> f<-file(“301328226.csv”)
> open(f,open=”r”)
> titles<-readLines(f,n=1) # skip the first line
> i<-1
> repeat{
+ b<-scan(f,what=myformat,sep=”,”,nlines=1,quiet=T)
+ if (length(b$date)==0) break
+ if (b$cp==”P”){
+ date[i]<-b$date
+ exdate[i]<-b$exdate
+ price[i]<-(b$bid+b$ask)/2
+ strike[i]<-b$strike
+ i<-i+1
+ }
+ }
> close(f)
49
This read took about 5 minutes. Notice that I created the vectors ahead of time in order to prevent having
to reallocate every time we do a read. I had previously determined that there were fewer than 600000 puts in
the le. The variable i tells me how many were actually used. If there were more than 600000, the program
would still run, but it would reallocate the vectors at every iteration (which is very slow).
This probably could have been much speeded up by reading many rows at a time, and memory could
have been saved by converting the date strings to dates using as.Date() at each iteration (see section 2.4).
I welcome suggestions on improvements to this example.
13.5 Contour Plot
This code produces a contour plot of the function posterior(), which I had de ned elsewhere.
Posterior using a flat prior
sigma squared
gamma
0.0 0.1 0.2 0.3 0.4 0.5
0.7 0.8 0.9 1.0 1.1 1.2 1.3
Posterior Mode
> x <- seq(0,.5,.005)
> y <- seq(0.7,1.3,.005)
> output <- matrix(nrow=length(x),ncol=length(y))
> for(i in 1:length(x)) {
+ for(j in 1:length(y)) {
+ output[i,j] <- posterior(c(x[i],y[j]))
+ }
+ }
> contour(output,x=x,y=y,xlab=”sigma squared”,ylab=”gamma”,main=”Posterior using a flat prior”)
> points( 0.04647009 , 0.993137,pch=8)
> arrows(.1,.75,0.04647009,0.993137)
> text(.09,.73,”Posterior Mode”,pos=4)
50

Categories: Ekonometrik Tags:

PENGARUH RISIKO LITIGASI DAN TIPE STRATEGI TERHADAP HUBUNGAN ANTARA KONFLIK KEPENTINGAN DAN KONSERVATISMA AKUNTANSI

July 28, 2010 Comments off

AKPM‐10 1
PENGARUH RISIKO LITIGASI DAN TIPE STRATEGI TERHADAP
HUBUNGAN ANTARA KONFLIK KEPENTINGAN DAN KONSERVATISMA
AKUNTANSI
DR. AHMAD JUANDA, AK, MM
Universitas Muhammadiyah Malang
ABSTRACT
This research studies existence and determinant of accounting conservatism, especially related to conflict of interest between investor and creditor considering manager incentive due litigation risk and firm strategy typess. The objectives of this research are: (1) to investigate the effect of conflict of interest on accounting conservatism; (2) to investigate the effect of litigation risk on the relation between conflict of interest and accounting conservatism; (3) to investigate the effect of strategy types on the relation between conflict of interest and accounting conservatism.
Result of the research shows that there are variation accounting conservatism level inter-firm. The first testing hypothesis result shows that conflict of interest influence positively on accounting conservatism. The second testing hypothesis result shows litigation risk moderate the relation between conflict of interest and accounting conservatism, but the moderation role is weaken. This result is not support predicted hypothesis. The third testing hypothesis result shows firm strategy types moderate the relation between conflict of interest and accounting conservatism. The result shows when firm strategy is prospector, the positive relation conflict of interest and accounting conservatism is weaker. When firm strategy is defender, the positive relation conflict of interest and accounting conservatism is stronger. The result support predicted hypothesis.
This research shows litigation risk and strategy types can be assumed as condition that motivate manager in responding conflict of interest between investor and creditor related to conservative financial report. By unsupported the second hypothesis, possible reason for this matter because of the weakness of law enforcement in Indonesia, that influence manager in anticipating litigation risk.
Key words: conservatism, conflict of interest, litigation risks, strategy types
AKPM‐10 2
A. PENDAHULUAN
Konservatisma merupakan prinsip akuntansi yang jika diterapkan akan menghasilkan angka-angka laba dan aset cenderung rendah, serta angka-angka biaya dan utang cenderung tinggi. Kecenderungan seperti itu terjadi karena konservatisma menganut prinsip memperlambat pengakuan pendapatan serta mempercepat pengakuan biaya. Akibatnya, laba yang dilaporkan cenderung terlalu rendah (understatement).
Di kalangan para peneliti, prinsip konservatisma akuntansi masih dianggap sebagai prinsip yang kontroversial. Di satu sisi, konservatisma akuntansi dianggap sebagai kendala yang akan mempengaruhi kualitas laporan keuangan. Di sisi lain, konservatisma akuntansi bermanfaat untuk menghindari perilaku oportunistik manajer berkaitan dengan kontrak-kontrak yang menggunakan laporan keuangan sebagai media kontrak (Watts, 2003).
Perkembangan yang terjadi justru menunjukkan bahwa eksistensi praktik konservatisma akuntansi semakin meningkat. Eksistensi konservatisma yang dipraktikkan masing-masing perusahaan bisa berbeda, karena adanya berbagai alternatif pilihan metoda akuntansi. Disamping itu, disebabkan pula oleh adanya perbedaan kondisi masing-masing perusahaan.
Salah satu determinan yang dapat menjelaskan adanya variasi praktik konservatisma antarperusahaan adalah adanya konflik kepentingan antara investor dan kreditor. Konflik kepentingan di antara mereka dapat terjadi karena investor berusaha mengambil keuntungan dari dana kreditor melalui pembayaran dividen yang berlebihan, transfer aktiva, perolehan aktiva, dan penggantian aktiva. Sementara itu, pihak kreditor mempunyai kepentingan terhadap keamanan dananya yang diharapkan akan menghasilkan keuntungan bagi dirinya di masa mendatang. Untuk menghindari transfer kekayaan yang dilakukan pihak investor, maka pihak kreditor menginginkan pelaporan keuangan yang konservatif.
Hasil penelitian yang menyatakan bahwa konflik kepentingan antara investor dan kreditor berhubungan dengan konservatisma akuntansi belum konsisten. Ahmed et al. (2002) menyatakan bahwa konflik kepentingan antara investor dan kreditor berpengaruh positif terhadap tingkat konservatisma akuntansi. Namun, mereka tidak menyangkal adanya kemungkinan bagi perusahaan untuk tidak menggunakan akuntansi konservatif karena
AKPM‐10 3
untuk menerapkannya akan mengorbankan aspek lainnya, yakni kinerja laba yang dilaporkan akan lebih rendah yang menyebabkan penilaian dari pihak luar kurang baik [Sari (2004); Watt dan Zimmerman (2003)].
Untuk memperjelas hasil yang masih belum konsisten tersebut, perlu mempertimbangkan posisi manajer sebagai pihak yang berperan sebagai agen bagi investor dan kreditor, yang sudah barang tentu memiliki kepentingan sendiri. Posisi yang diperankan oleh manajer akan mempengaruhi dorongan mereka dalam menyikapi risiko ketidakpastian di masa mendatang. Jika mekanisma kontrak lebih berorientasi pada terciptanya kontrak efisien maka manajer akan mengambil jalan tengah yang bisa mengakomodasi kepentingan-kepentingan yang ada, termasuk kepentingan dirinya sendiri.
Dorongan manajer untuk memenuhi kepentingan investor dan kreditor akan semakin kondusif bila terdapat kondisi baik internal maupun eksternal yang mendukung terciptanya mekanisma kontrak efisisen. Penelitian ini mencoba untuk mempertimbangkan risiko litigasi sebagai faktor kondisi eksternal dan tipe strategi perusahaan sebagai faktor kondisi internal yang mempengaruhi dorongan manajer dalam menyikapi konflik kepentingan antara investor dan kreditor, yang pada gilirannya akan berpengaruh pada konservatisma akuntansi.
B. TINJAUAN PUSTAKA
Secara umum, beberapa literatur akuntansi antara lain [Belkaoui (1985); Hendriksen dan Van Breda (1995); dan Wolk et al. (1997)] mendefinisi konservatisma sebagai preferensi terhadap metoda-metoda akuntansi yang menghasilkan nilai paling rendah untuk aset dan pendapatan di satu sisi, dan menghasilkan nilai paling tinggi untuk utang dan biaya, di sisi lain. Atau dengan kata lain, konservatisma menghasilkan nilai buku ekuitas yang paling rendah.
Konservatisma dapat timbul pada kondisi yang didalamnya perusahaan melakukan investasi pada projek yang NPV-nya positif. Kelebihan present value seharusnya bisa direfleksikan dalam aliran kas dan laba, tapi historical cost accounting tidak memperbolehkan peng-akuan terhadap kelebihan tersebut pada saat perolehan. Dengan demikian terjadi keterlambatan dalam mengakui keuntungan ekonomis.
AKPM‐10 4
Menurut Beaver (1998), akuntansi berbasis historical cost akan mendorong adanya penundaan pengakuan (delayed recognition) nilai buku dibandingkan nilai pasarnya. Delayed recognition dapat mendorong adanya lag angka-angka akuntansi dengan harga sahamnya. Akibatnya, kandungan informasi harga saham lebih cepat dalam merespon peristiwa ekonomi dibanding laba akuntansi. Jika penundaan pengakuan laba tersebut berlangsung terus-menerus dalam beberapa perioda, maka akan terjadi bias pengakuan yang berakibat pada perbedaan nilai buku dan nilai pasarnya. Bias pengakuan tersebut merupakan indikator terjadinya praktik konservatisma.
Banyak kritik mengenai kegunaan konsep konservatisma berkaitan dengan kualitas laporan keuangan, karena penggunaan metoda yang konservatif akan menghasilkan angka-angka yang cenderung bias dan tidak mencerminkan realita. Namun, akhir-akhir ini banyak peneliti yang melihat konservatisma dari sisi manfaatnya, khususnya eksistensi konservatisma pada level perusahaan.
Salah satu penjelasannya adalah bahwa konservatisma muncul karena merupakan bagian dari mekanisma kontrak yang efisien antara perusahaan dengan berbagai pihak (Watts 2003). Atas dasar penjelasan kontrak, konservatisma akuntansi dapat digunakan untuk meng-hindari moral hazard yang disebabkan oleh pihak-pihak yang mempunyai informasi asimetris, pembayaran asimetris, harison waktu yang terbatas, dan tanggung jawab yang terbatas. Misalnya, konservatisma dapat menahan perilaku oportunistik manajer dalam melaporkan ukuran-ukuran akuntansi yang digunakan dalam kontrak. Kwon (2005) menyatakan bahwa laba akuntansi yang dijadikan media kontrak akan lebih bermanfaat untuk mengurangi biaya keagenan yang timbul dari moral hazard, jika disajikan secara konservatif.
Di Indonesia, studi konservatisma masih terbatas. [Mayangsari dan Wilopo (2002), dan Wibowo (2003)] menyatakan bahwa hubungan kontraktual yang diproksi dengan struktur kepemilikan, struktur utang, dan ukuran perusahaan mempengaruhi konservatisma akuntansi. Selain itu penelitian-penelitian tersebut memberikan bukti terjadinya praktik konservatisma akuntansi pada perusahaan-perusahaan di Indonesia. Sari (2004) membuktikan bahwa konservatisma akuntansi bermafaat untuk mengatasi konflik kepentingan di seputar kebijakan dividen. Selain itu dia membuktikan juga bahwa konservatisma berpengaruh terhadap penurunan biaya modal utang yang ditunjukkan dengan
AKPM‐10 5
meningkatnya rating obligasi. Widya (2004) membuktikan bahwa pilihan kebijakan akuntansi yang cenderung konservatif dipengaruhi oleh beberapa faktor antara lain, tingkat leverage, ukuran perusahaan dan tingkat kepemilikan.
Dari uraian beberapa hasil penelitian tersebut di atas, penelitian yang mempelajari tentang konservatisma akuntansi dengan berbagai determinannya, masih belum mempertimbangkan dorongan manajer sebagai pihak yang mempunyai posisi sentral dalam proses penyu-sunan laporan keuangan. Misalnya, Ahmed et al. (2002), mereka meneliti tentang hubungan antara konflik kepentingan dan konservatisma tapi mengabaikan posisi manajer yang mempunyai dorongan dan kepentingan yang bisa jadi berbeda dengan pihak prinsipal.
Upaya manajer untuk menjalankan fungsinya sebagai agen tidak terlepas dari dorongan mereka yang dipengaruhi kondisi eksternal dan internal perusahaan. Kondisi eksternal yang mendorong manajer adalah risiko litigasi, sedangkan kondisi internal yang mendorong manajer adalah tipe strategi perusahaan.
Risiko litigasi sebagai faktor kondisi eksternal, didasarkan pada pandangan bahwa investor dan kreditor adalah pihak yang memperoleh perlindungan secara hukum. Investor maupun kreditor dalam memperjuangkan hak dan kepentingannya dapat melakukan litigasi dan tuntutan hukum kepada perusahaan. Johnson et al. (2000) dan Qiang (2003) menyatakan bahwa risiko potensial terjadinya litigasi dipicu oleh potensi yang melekat pada perusahaan berkaitan dengan tidak terpenuhinya kepentingan investor dan kreditor.
Tuntutan litigasi dapat timbul dari pihak kreditor, investor atau pihak lain yang berkepentingan dengan perusahaan. Bagi perusahaan, upaya untuk menghindari tuntutan dan ancaman litigasi mendorong manajer mengungkapkan informasi yang cenderung mengarah pada: (i) pengungkapan berita buruk dengan segera dalam laporan keuangan, (ii) menunda berita baik, (iii) memilih kebijakan akuntansi yang cenderung konservatif (Seetharaman et al. 2002).
Tipe strategi perusahaan dapat dikaitkan dengan sistem akuntansi yang diterapkannya, bahkan strategi menjadi salah satu komponen untuk melengkapi penelilaian kinerja perusahaan. Beberapa studi telah membuktikan bahwa tipe strategi yang berbeda akan menghasilkan sistem pengendalian akuntansi yang berbeda pula, termasuk dalam hal pemilihan metoda akuntansinya apakah cenderung konservatif atau tidak
AKPM‐10 6
C. PERUMUSAN HIPOTESIS PENELITIAN
1. Konservatisma dan Konflik Kepentingan
Teori keagenan menyatakan bahwa pihak investor dan kreditor mempunyai konflik kepentingan. Konflik tersebut tercermin dari kebijakan dividen, pendanaan, dan kebijakan investasi (Jensen and Meckling 1976; Begley 1994). Ketiga kebijakan tersebut dapat digunakan oleh investor untuk mengatur manajer dan mentransfer keuntungan dari kekayaan kreditor. Myer (1977) dan Jensen dan Meckling (1976) menyatakan bahwa investor dapat mengambil keuntungan dari kekayaan kreditor dengan cara menerima sejumlah deviden yang berlebihan. Hasil penelitian yang sama dilakukan oleh Eastterbrook (1984), Jensen (1986), Hart dan Moore (1994), Ziewel (1996), dan Fluck (1998, 1999) yang menyatakan tentang potensi terjadinya konflik kepentingan antara kreditor dan investor maupun manajer. Investor melalui manajernya, dapat menggunakan sumberdaya perusahaan atas kepentingan dirinya dibanding untuk kepentingan kreditor.
Pemilihan metoda akuntansi yang lebih konservatif adalah salah satu cara yang dapat mengurangi risiko kepada kreditor yakni menghindari pembayaran dividen secara berlebihan. Pengurangan risiko tersebut semakin penting ketika konflik antara kepentingan investor dan kreditor berkaitan dengan kebijakan dividen semakin tinggi dan melebar pada bentuk konflik lainnya, seperti kebijakan pendanaan utang baru dan kebijakan investasi. Ahmed et.al (2002) meneliti tentang pengaruh konflik kepentingan terhadap konservatisma, namun konflik yang dimaksudkan masih bersifat parsial dan lebih ditekankan pada konflik kebijakan dividen. Atas dasar penjelasan tersebut, hipotesis yang diajukan adalah:
H1: Semakin tinggi intensitas konflik kepentingan antara kreditor dan investor, maka semakin tinggi kecenderungan diterapkannya konservatisma akuntansi.
2. Konflik Kepentingan, Konservatisma, dan Litigasi
Lingkungan hukum yang berlaku pada suatu wilayah tertentu mempunyai dampak yang signifikan terhadap kebijakan diskresioner manajer dalam melaporkan keuangannya (Ball et al. 1999 dan 2000). Manajer akan melakukan penyeimbangan antara kos litigasi yang akan timbul dengan keuntungan yang akan diperoleh karena akuntansi yang agresif.
AKPM‐10 7
Pada lingkungan hukum yang sangat ketat, kecenderungan manajer untuk melaporkan keuangan secara konservatif semakin tinggi. Pada lingkungan hukum yang longgar dorongan untuk melaporkan keuangan secara konservatif akan berkurang (Francis et al. 1994). Hal yang hampir sama, Ball et al. (2000) menyatakan bahwa pada negara common law yang di dalamnya penyedia modal tergantung pada laporan publikasian, tuntutan pengungkapan yang tepat waktu lebih tinggi daripada di negara code law yang konsekuensi hukum dan aturan pengungkapan informasi kepada publik relatif rendah.
Berbagai peraturan dan penegakan hukum yang berlaku dalam lingkungan akuntansi, menuntut manajer untuk lebih mencermati praktik-praktik akuntansi agar terhindar dari ancaman ketentuan hukum. Tuntutan penegakan hukum yang semakin ketat inilah akan berpotensi menimbulkan litigasi bila perusahaan melakukan pelanggaran sehingga akan semakin mendorong manajer untuk bersikap hati-hati dalam menerapkan akuntansinya. Demikian juga, bagi akuntan yang menyiapkan maupun yang memeriksa laporan keuangan akan cenderung lebih konservatif.
Karena kesalahan dalam memperkirakan kemungkinan keuntungan lebih berbahaya dibanding kesalahan karena memperkirakan kemungkinan rugi. Jadi semakin tinggi risiko litigasi yang akan dialami perusahaan, maka semakin besar pengaruh positif konflik kepentingan terhadap konservatisma akuntansi. Atas dasar hal tersebut, maka hipotesis kedua dirumuskan sebagai berikut:
H2 : Pada kondisi perusahaan berisiko litigasi tinggi, hubungan positif antara
konflik kepentingan dan konservatisma akuntansi semakin kuat.
3. Konflik Kepentingan, Konservatisma, dan Tipe Strategi
Konservatisma adalah reaksi yang hati-hati (prudent-reaction) dalam menghadapi ketidakpastian yang melekat dalam perusahaan untuk mencoba memastikan bahwa ketidakpastian dan risiko yang inheren dalam lingkungan bisnis sudah cukup diper-timbangkan (Dewi 2003). Selain merupakan konvensi penting dalam akuntansi, konservatisma berimplikasi pada strategi perusahaan dalam menghadapi ketidakpastian. Bukti empiris yang mengkaitkan antara strategi perusahaan dalam kaitannya dengan konflik kepentingan dan konservatisma masih terbatas.
AKPM‐10 8
Bushman et al. (2003) menemukan bahwa mekanisma corporate governance berhubungan erat dengan konservatisma dan strategi perusahaan. Mereka menemukan bahwa variasi ketepatan waktu akuntansi dengan kondisi sekarang sebagian dapat dijelaskan oleh struktur governance, pertumbuhan perusahaan, fluktuasi return, ukuran perusahaan, umur perusahaan, masa jabatan manajer, strategi diversifikasi dan kinerja masa lalu.
Keterkaitan konservatisma akuntansi dengan strategi dapat dilihat dari orientasi srategi yang diterapkan dalam memprioritaskan efisiensi dan inovasi. Perusahaan dengan strategi prospektor memiliki karakter inovasi produk-produk baru, variasi dan diversi-fikasi produk. Untuk menopang strategi tersebut, investasi di bidang pengembangan tenaga kerja, pengeluaran riset dan pengembangan, dan pengeluaran modal relatif lebih tinggi dibanding perusahann defender (Ittner dan Larcker 1997).
Hamid (2000), yang mengembangkan risetnya dari Ittner & Larcker (1997) dan Anthony & Ramesh (1992), menunjukan bahwa strategi yang berbeda akan menghasilkan rata-rata pertumbuhan laba dan penjualan yang berbeda pula. Rata-rata pertumbuhan perusahaan bertipe prospektor lebih besar dibanding dengan rata-rata pertumbuhan penjualan perusahaan bertipe defender. Demikian juga, rata-rata pertumbuhan laba perusahaan bertiplogi prospektor lebih besar dibanding dengan rata-rata pertumbuhan laba pada perusahaan bertipe defender.
Bagi manajer, dorongan untuk memilih kebijakan akuntansi harus disesuaikan dengan tipe strategi perusahaan yang sedang dijalankan. Perusahaan bertipe prospektor cenderung memiliki rata-rata pertumbuhan laba dan penjualan tinggi dibanding perusahaan bertipe defender. Jadi, ketika perusahaan bertipe defender, hubungan konflik kepentingan dan konservatisma akuntansi akan cen-derung menguat karena searah dengan dorongan manajer yang cenderung memeprtahankan laba dan penjualannya. Sebaliknya, ketika perusahaan bertipe prospektor hubungan konflik kepentingan dan konservatisma akuntansi akan cenderung melemah karena berlawanan dengan dorongan manajer yang ingin meningkatkan pertumbuhan penjualan dan labanya. Atas dasar penjelasan tersebut, penelitian ini mengajukan hipotesis:
H3: Pada kondisi perusahaan bertipe prospektor, hubungan positif antara konflik kepentingan dan konservatisma akuntansi semakin lemah.
AKPM‐10 9
atau
Pada kondisi perusahaan bertipe defender, hubungan positif antara konflik kepentingan dan konservatisma akuntansi semakin kuat.
D. METODA PENELITIAN
1. Definisi dan Pengukuran Variabel
Penelitian ini menggunakan variabel-variabel sebagai berikut: 1) konservatisma akuntansi, 2) konflik kepentingan, 3) risiko litigasi, dan 4) tipe strategi.
Konservatisma akuntansi adalah perbedaan antara nilai buku dan nilai pasar yang terjadi secara persisten selama jangka waktu beberapa perioda atau dikenal dengan bias permanen. Untuk mengukur konservatisma mengacu pada Beaver dan Ryan (2000) yang mengukur komponen bias dan lag dengan cara meregresi rasio BTM (book to market) pada return saham perioda sekarang dan perioda lag. Model regresi tersebut bertujuan untuk mencari pengaruh tetap antar-perusahaan (fixed effect).
Konflik kepentingan merupakan gambaran konflik yang terjadi antara kreditor dan investor. Proksi yang digunakan untuk mengukur konflik tersebut mengacu pada Ahmed, et al. (2002) yakni terdiri atas tiga proksi: operating uncertainty, level of dividend, dan leverage. Karena masing-masing proksi tidak bisa dilihat secara parsial, maka ketiga proksi tersebut digabung dengan melakukan analisis faktor untuk mencari satu indeks intensitas konflik kepentingan yang terjadi dalam perusahaan.
Risiko litigasi diartikan sebagai risiko yang melekat pada perusahaan yang memungkinkan terjadinya ancaman litigasi oleh pihak-pihak yang berkepentingan dengan perusahaan yang merasa dirugikan. Pihak-pihak yang berpentingan terhadap perusahaan meliputi kreditor, investor, dan regulator. Risiko litigasi dapat diukur dari berbagai indikator keuangan yang menjadi determinan kemungkinan terjadinya litigasi. Penelitian ini mengacu pada Qiang (2003) dan Johnson et al. (2001), yang mengukur biaya atau risiko litigasi dari sisi ex-ante yakni mengukur beberapa indikator yang dapat menimbulkan litigasi. Untuk mengukur risiko litigasi, penelitian ini melakukan analisis faktor (component factor analysis) terhadap variabel-variabel: (1) beta saham dan perputaran volume saham, keduanya merupakan proksi volatilitas saham; (2) likuiditas dan solvabilitas, keduanya
AKPM‐10 10
merupakan proksi dari risiko keuangan; (3) ukuran perusahaan yang merupakan proksi dari risiko politik.
Klasifikasi Strategi yang digunakan dalam penelitian ini didasarkan pada konsep Miles dan Snow (1978) untuk merepresentasi tipe strategi perusahaan, yakni tipe prospektor dan tipe defender. Penentuan sampel yang tergolong prospektor dan defender meng-gunakan model yang dikembangkan oleh Ittner dan Larcker (1997), Skinner (1993), dan Kallapur dan Trombbley (1999). Tipe strategi diukur dengan melakukan komposit melalui analisis faktor komponen terhadap variabel-veriabel yang menjadi proksi ukuran strategi, yakni: 1) rasio jumlah karyawan dibagi dengan total penjualan (KARPENJ); 2) rasio nilai pasar ekuitas dibandingkan dengan nilai buku ekuitas (PBV); 3) rasio pengeluaran modal dibagi dengan nilai pasar ekuitas (CEMVE); 4) rasio pengeluran modal dibagi dengan total asset (CETA).
2. Model Analisis
Penelitian ini mengunakan tiga model. Pertama, model yang digunakan untuk menguji pengaruh konflik kepentingan terhadap konservatisma. Kedua, model yang digunakan untuk menguji pengaruh variabel moderasi yakni litigasi terhadap hubungan antara konflik kepentingan dan konservatisma. Ketiga, model yang digunakan untuk menguji pengaruh variabel moderasi yakni tipe strategi terhadap hubungan antara konflik kepentingan dan konservatisma. Adapun model keempat merupakan model analisis tambahan. Tahapan model analisisnya sebagai berikut:
Model (1): KONit = β0 + β1 KONFLit + ei
Model (2a): KONi t= β0 + β1KONFLit + β2LITit + ei
Model(2b): KONit =β0+β1KONFLit+β2LITit+β3KONFL*LITit+ei
Model (3a): KONit= β0 + β1KONFLit + β2STRit + ei
Model (3b): KONit= β0+ β1KONFLit +β2STRit +β3KONFL* STRit +ei
KON adalah konservatisma akuntansi; KONFL adalah konflik kepentingan antara investor dan kreditor; LIT adalah risiko litigasi perusahaan; dan STR adalah tipe strategi
AKPM‐10 11
perusahaan. Hipotesis H1, H2, dan H3 diuji dengan menguji signifikansi koefisien β1 pada (model 1); koefisien β3 (model 2b), koefisien β3 (model 3b).
3. Data dan Pemilihan Sampel
Data akuntansi dikutip dari laporan keuangan tahunan yang diterbitkan oleh perusahaan-perusahaan yang mempublik di Bursa Efek Jakarta, untuk periode 1995 sampai 2003. Data laporan keuangan diperoleh dari berbagai sumber antara lain, Data Pasar Modal UGM, Pojok BEJ FE-UMM. Populasi penelitian ini adalah seluruh perusahaan pemanufakturan yang terdaftar di Bursa Efek Jakarta (BEJ).
Sampel penelitian dipilih dari seluruh populasi dengan menggunakan metoda penyampelan bersasaran (purposive sampling), dengan kriteria-kriteria: 1) termasuk dalam sektor industri manufaktur sesuai dengan klasifikasi sektor industri yang ada dalam Indonesian Capital Market Directory selama 9 tahun yakni mulai tahun 1995-2003, 2) memiliki akhir tahun fiskal 31 Desember dan laporan keuangan auditan, 3) memiliki data return yang ada dalam Data Pasar Modal–UGM, 4) memiliki data dividen. Sampel dibatasi hanya pada perusahaan yang berada dalam kelompok industri pemanufakturan. Pembatasan ini dimaksudkan untuk mengendalikan variabilitas sifat aset perusahaan yang disebabkan oleh karakteristik industri sehingga tidak dapat menggambarkan sifat pertumbuhan perusahaan dengan tepat. Analisis didasarkan pada 972 observasi dari 98 perusahaan-perusahaan pemanufakturan yang memenuhi kriteria untuk dianalisis.
E. HASIL PENELITIAN
1. Hasil Pengukuran Konservatisma Akuntansi
Konservatisma akuntansi berkaitan dengan bias yang sifatnya permanen yang tercermin dari koefisien intersep hubungan return saham dengan perbedaan nilai buku dan nilai pasar. Untuk menentukan bias permanen, diperlukan data gabungan time series dan crossection yang dianalisis dengan cara regresi BTM dengan RET pada tahun yang sama maupun tahun-tahun sebelumnya (lag). Penentuan panjangnya lag, didasarkan pada pertimbangan nilai signifikansi variabel lag terhadap BTM. Dalam penelitian ini, panjangnya lag ditentukan selama 3 tahun sebelumnya, sedangkan lag lebih dari tiga tahun akan menghasilkan nilai t yang tidak signifikan.
AKPM‐10 12
Tujuan dari analisis regresi tersebut adalah untuk mencari nilai koefisien fixed effect yang merupakan intersep dari masing-masing perusahaan sampel yang berasal dari data panel yang ada. Langkah-langkah dalam melaksanakan regresi fixed effect mengikuti tahapan dalam Gujarati (1995). Penggunaan model ini menggunakan asumsi bahwa intersep antarperusahaan akan berbeda sedangkan slopenya tetap sama. Koefisisen fixed effect yang dihasilkan dari model regresi dijadikan surogat untuk indeks konservatisma akuntansi dengan cara mengalikan nilai koefisien tersebut dengan (-1).
2. Hasil Pengukuran Konflik Kepentingan, Risiko Litigasi, dan tipe strategi.
Pengukuran variabel konflik kepentingan, risiko litigasi dan tipe strategi menggunakan analisis faktor. Konflik kepentingan (KONFL) diperoleh dari komposit beberapa ukuran antara lain deviasi standar ROA (std_ROA), level dividen (level_dvd), dan tingkat leverage (totlev). Risiko litigasi (LIT) diperoleh dari komposit beberapa ukuran antara lain risiko saham (BETA), rata-rata perputaran volume saham (TOS), likuiditas (LIKUID), solvabilitas (LEV), dan ukuran perusahaan (LG_aset). Tipe strategi (STR) diperoleh dari komposit beberapa ukuran antara lain rasio pengeluaran modal dengan nilai pasar (CEMVE), rasio pengeluaran modal dengan total aset (CETA), rasio jumlah karyawan dengan penjualan (KARPENJ), dan rasio nilai pasar dengan nilai buku (PBV).
Tahapan dalam melakukan analisis mengikuti tahapan analisis faktor dalam Hair et al. (1995) khususnya yang menggunakan pendekatan component factor analisys. Pendekatan ini dapat digunakan untuk menentukan satu ukuran nilai variabel dari komposit berbagai ukuran. Pertama, adalah menaksir signifikansi keseluruhan matrik korelasi dengan menggunakan Bartlett’s Test of Sphericity. Korelasi keseluruhan set variabel harus signifikan dan besarnya measure of sampling adequacy (MSA) harus bernilai minimal 0,50. Apabila MSA secara keseluruhan masih kurang dari 0,50 maka variabel yang mempunyai MSA terkecil atau kurang dari 0,50 harus tidak disertakan dalam analisis. Kedua, menghitung faktor matriks dan memilih jumlah faktor yang akan dipertahankan. Kemampuan penjelas relatif masing-masing faktor yang ditunjukkan oleh eigenvalue. Faktor yang dipilih sebagai wakil adalah faktor yang mempunyai eigenvalue sama dengan atau lebih besar dari satu (Hair et al. 1995).
3. Statistik Diskriptif
AKPM‐10 13
Nilai rata-rata untuk konservatisma akuntansi menunjukkan nilai –1,677. Hal ini menunjukkan bahwa perusahaan secara umum melakukan praktik konservatisma akuntansi, walaupun masih tergolong rendah karena nilai maksimumnya -0,270. Nilai rata-rata variabel konflik kepentingan sebesar –0,113. Hal ini menunjukkan perusahaan dalam sampel secara umum mengalami konflik kepentingan yang masih rendah. Nilai rata-rata LIT sebesar -0,0485 menunjukkan bahwa secara umum perusahaan sampel tidak memiliki risiko litigasi yang besar. Nilai rata-rata variabel STR sebesar 0,049. Nilai indeks cukup bervariasi berkisar dari nilai –2,094 sampai dengan 3,587. Hal ini menunjukkan bahwa nilai tipe strategi dalam sampel bervariasi.
4. Hasil Pengujian Hipotesis
a. Hipotesis 1
Hasil pengujian pada model 1, berhasil mendukung hipotesis 1, artinya konflik kepentingan berpengaruh positif terhadap konservatisma akuntansi yang ditunjukkan dengan nilai signifikansi t lebih kecil dari α yang ditetapkan (α=0,05), yaitu 0,028 atau nilai t hitung lebih besar dari t tabel (2,236 > 1,980). Dari hasil analisis diperoleh nilai Adj R2 = 0.040. Angka ini menunjukkan bahwa variasi nilai konservatisma akuntansi (Y) yang dapat dijelaskan oleh model regresi sebesar 4% sedangkan sisanya, yaitu 96%, dijelaskan oleh variabel lain di luar model.
b. Hipotesis 2
Pada model 2b, pengaruh utama konflik kepentingan terhadap konservatisma ditunjukkan oleh β1 sebesar 2,852 dan nilai t-hitung sebesar 5,083 dengan nilai probabilitas 0,000 berarti secara statistik signifikan pada α 1%. Hipotesis 2 (H2) diuji dengan t-test yaitu menguji secara parsial siginifikansi koefisien LIT*KONFL pada model 2b. Pengaruh pemoderasian atau interaksi variabel LIT ditunjukkan oleh koefisien LIT*KONFL (β3). Koefisien interaksi antara risiko litigasi dan konflik kepentingan (β3) adalah negatif -0,526. Nilai statistik t-hitung dari koefisien ini adalah -4,398 dengan nilai probabilitas sebesar 0,000.
Dari hasil interaksi pada model 2b, dapat dijelaskan bahwa pengaruh risiko litigasi sebagai variabel pemoderasi bersifat memperlemah yang ditunjukkan dari nilai koefisien (β3) sebesar -0,526. Hal ini ditunjukkan pula oleh pengaruh bersih dari model tersebut
AKPM‐10 14
yakni sebesar 2,326 (2,852 – 0,526), yang berarti bahwa pengaruh konflik kepentingan terhadap konservatisma semakin melemah. Hasil pengujian ini tidak berhasil mendukung hipotesis 2 yang menyatakan bahwa ketika risiko litigasi tinggi hubungan positif antara konflik kepentingan dan konservatisma akuntansi semakin kuat. Hasil temuan justru menunjukkan sebaliknya, yakni ketika risiko litigasi tinggi, hubungan positif antara konflik kepentingan dan konservatisma akuntansi semakin lemah.
c. Hipotesis 3
Hipotesis (H3) diuji dengan t-test yaitu menguji secara parsial siginifikansi koefisien KONFL*STR pada model 3b. Pengaruh pemode-rasian atau interaksi variabel STR pada hubungan KONFL dengan KON ditunjukkan oleh koefisien KONFL*STR (β3). Koefisien interaksi antara tipe strategi dan konflik kepentingan (β3) adalah -0,760. Nilai statistik t dari koefisien ini adalah -2,177 dengan nilai probabilitas sebesar 0,032.
Hasil pengujian ini berhasil mendukung hipotesis 3 bahwa tipe strategi berpengaruh terhadap hubungan antara konflik kepentingan dan konservatisma akuntansi. Dalam kondisi tipe strategi prospector, hubungan antara konflik kepentingan dan konservatisma akuntansi semakin lemah, bahkan mengarah pada hubungan yang negatif. Demikian untuk sebaliknya, pada kondisi perusahaan bertipe strategi defender, hubungan positif antara konflik kepentingan dan konser-vatisma akuntansi semakin kuat.
F. SIMPULAN DAN SARAN
Hasil penelitian ini mendukung argumen bahwa konservatisma akuntansi merupakan praktik umum yang dilakukan perusahaan secara diskresioner. Selanjutnya, terkait dengan pola hubungan yang diteliti, dapat disimpulkan bahwa, pertama, bukti empiris menunjukkan bahwa konflik kepentingan berpengaruh positif terhadap konservatisma akuntansi. Hal ini mendukung prediksi bahwa semakin tinggi intensitas konflik kepentingan, maka semakin tinggi kecenderungan penerapan konservatisma akuntansi. Hasil ini mendukung penelitian Ahmed et al. (2002).
Kedua, pengaruh pemoderasian risiko litigasi terhadap hubungan konflik kepentingan dan konservatisma akuntansi bersifat memperlemah. Hal ini menunjukkan bahwa semakin tinggi risiko litigasi perusahaan, maka hubungan positif konflik kepentingan dan konservatisma akuntansi semakin lemah. Hasil ini tidak mendukung
AKPM‐10 15
hipotesis yang diprediksi. Hal ini kemungkinan disebabkan oleh masih lemahnya penegakan hukum (law enforcement) di Indonesia, yang berakibat pada lemahnya antisipasi manajer terhadap risiko litigasi.
Ketiga, pengaruh pemoderasian tipe strategi perusahaan terhadap hubungan antara konflik kepentingan dan konservatisma akuntansi bersifat memper-lemah. Hal ini menunjukkan bahwa ketika perusahaan bertipe pros-pektor, maka hubungan positif konflik kepentingan dan konservatisma akuntansi semakin lemah. Demikian sebaliknya, ketika perusahaan bertipe defender, maka hubungan positif konflik kepentingan dan konservatisma akuntansi semakin kuat. Hasil ini berhasil mendukung hipotesis yang diprediksikan. Hasil ini konsisten dengan penelitian Hamid (2000) yang menyatakan bahwa rata-rata pertumbuhan laba perusahaan prospektor lebih tinggi dibanding perusahaan defender.
Hasil penelitian ini memberi kontribusi memperluas literatur terkait melalui pengujian dampak risiko litigasi dan tipe strategi perusahaan terhadap hubungan antara konflik kepentingan investor versus kreditor dan konservatisma akuntansi. Dampak dari kedua faktor kondisional tersebut akan semakin mempertegas eksistensi dan determinan konservatisma pada level perusahaan yang telah didukung oleh banyak penelitian dengan menggunakan teori hubungan keagenan dan mekanisma kontrak efisien.
Selain itu, hasil penelitian ini diharapkan bermanfaat bagi regulator dalam mempertimbangkan penetapan persyaratan pengungkapan laporan keuangan yang tidak saja mempertimbangkan kepentingan investor, tapi juga kepentingan kreditor maupun manajer. Juga, bukti empiris ini diharapkan bermanfaat bagi profesi auditor sebagai pendorong untuk ikut bertanggungjawab meningkatkan kualitas laporan keuangan perusahaan.
Berkaitan dengan risiko litigasi yang memperlemah hubungan antara konflik kepentingan dan konservatisma akuntansi, maka informasi ini sangat bermanfaat bagi regulator pasar modal (BAPEPAM) untuk lebih meningkatkan penegakan hukum agar risiko litigasi akan diapresiasi oleh manajer dan berdampak positif terhadap praktik konservatisma akuntansi.
Perbaikan atas penelitian ini dapat dilakukan dengan cara: 1) menggunakan ukuran konservatisma selain Beaver dan Ryan (2000); 2) meneliti potensi konflik
AKPM‐10 16
kepentingan selain konflik antara investor dan kreditor; 3) membedakan sampel perusahaan antara jenis perusahaan regulated dan unregulated, 4) mempertimbangkan faktor tingkat kesulitan keuangan perusahaan; 5) mempertimbangkan kualitas auditor.
AKPM‐10 17
DAFTAR PUSTAKA
Ahmed, AS., R.M. Morton and T.F. Schaefer, 2000. Accounting Conservatism and The Valuation of Accounting Numbers: Evidence on The Feltham-Ohlson (1996) Model. Journal of Accounting, Auditing and Finance (summer): 271-293.
Ahmed, AS., B. Billing, M.S. Haris, and R.M. Morton, 2002. The Role of Accounting Conservatism in Mitigating Bondholder-Shareholder Conflicts over Dividens Policy and In Reducing Debt Costs. The Accounting Review 77 No. 4 pp 867-890.
Anthony, H.J., and Ramesh, K., 1992. Association Between Accounting Performance Measures and Stock Prices: Corporate Life Cycle Perspective. Journal of Accounting and Economics 15:203-227.
Ball, R., Robin A., and Wu Y., 2000. Incentives Versus Standard: Properties of Accounting Income in Four East Asian Countries, and Implication for Acceptance of IAS. Working Paper, University of Chicago.
Ball, R., Kothari SP., and Robin A., 2002. The Effect of International Institution Factors on Properties of Accounting Earnings. Journal of Accounting and Economics 29:1-51.
Basu, Sudipta, 1997. The Conservatism Principle and The Asymetric Timeliness of Earnings. Journal of Accounting and Economis, 24: 3-37.
Beaver, WH., 1998. Financial Reporting: An Accounting Revolution. 3th Prentice Hall International, Inc.
Beaver WH., Clarke R., and Wright W., 1979. The Assosiation Between Asymetric Security Return And The Magnitude Of Earnings Forcast Errors. Journal of Accounting Research 17: 316-340.
_________, W., and S. Ryan, 2000. Biases and Lags In Book Value and Their Effect on Adibility of The Book-To-Market Rasio to Predict Book Return on Equity. Journal of Accounting Research 38 (1):127-148
AKPM‐10 18
Begley, J., 1994. Restrictive Covenants Included In Public Debt Agreements: An Empirical Investigation. Working paper, University of British Columbia.
Belkoui, Ahmed Riahi, Accounting Theory. Forth Worth: The Dryden Press, 1993
Bourgeois, L.J, 1980. Strategy and Environment : A Conceptual Integration. Academy of Management Review.
Brown S., Hillegeist S.A., and Lo, K., 2004. Management Forecasts and Litigation Risk. Working Paper, Goizueta Business School, Emory University
Bushman, R.M., and Piotroski, E., 2004. Encouraging Pessimism or Discouraging Optimism: The Influence of Legal, Political and Financial Institutions on Accounting Conservatism. Working Papers, the Kenan-Flagler Business School.
Cao, Z., and Narayanamoorthy, G., 2005. Accounting and Litigation Risk. Working Paper, Yale School of Management.
Dewi, Ratna AAA., 2003. Pengaruh Konservatisma Laporan Keuangan Terhadap Earnings Response Coefficient. Makalah SNA VI
Easterbrook, Frank, 1984. Two Agency Cost Expalanations of Dividens. American Economic Review 74, 650-659
Fluck, Z., 1998. Optimal Financing Contracts: Debt versus Outside Equity. Review of Financial Study 11, 383-418.
Fluck, Z., 1999. The Dynamics of The Management Shareholder Conflict. Review of Financial Study 12, 347-377.
Francis, J., D. Philbrick and K. Schipper, 1994, Shareholder Litigation and Corporate
Disclosures, Journal of Accounting Research, 32, 2, 137-164
Francis, J., LaFond, R.Z., Ohlson, P., and K. Schipper, 2003. Costs of Capital and Earnings Attributes. Working Paper, Duke University.
Gujarati, D., 1995. Essenetial Of Econometrics, International Editions, McGrawHill, Inc.
AKPM‐10 19
Hamid, H.A., 2000. Studi Terhadap Pengukuran Kinerja Akuntansi Perusahaan Prospektor And Defender, dan Hubungannya Dengan Harga Saham. SNA II. Jakarta.
Hart, oliver and J. Moore, 1994. A Theory of Debt Based on Inalienability of Human Capital, Quarterly Journal of Economis 109: 841-880.
Hendriksen ES., and Van Breda MF., 1992. Accounting Theory, 5th Edition, Irwin, Homewood, Boston.
Ittner, DC., Larcker D.F., and Rajan MV., 1997. The Choice Of Performance Measure In Annual Bonus Contract. The Accounting Review, 72, April, 231-255.
Jensen MC., and Meckling WH., 1976. Theory of The Firm: Managerial Behaviour, Agency Cost and Ownership Structure. Journal of Financial Economics (Oktober), 193-228.
Johnson, M.F., Kasznik, R., and Nelson, K.K., 2001. The Impact of Securities Litigation Reform on the Disclosure of Forward-Looking Information by High Technology Firms. Journal of Accounting Research 39 (2): 297-327.
Kalay, A., 1982. Stockholder-bondholder Conflict and Dividend Constraints. Journal of Financial Economics 10 (2): 211-33.
Kam, Vernon, 1990. Accounting Theory. New York: John Wiley & Sons.
Kasznik, R. and Lev, B. 1995. To Warn or Not to Warn: Management Disclosures in the Face of an Earnings Surprise. Accounting Review 70 (1): 113-34.
Kellogg, R.L., 1984. Accounting Activities, Security Prices, and Class Action Lawsuits. Journal of Accounting & Economics 6 (3): 185-204.
Kim Langfield & Smith. Management Control System and Strategy : A Critical Review. Accounting, Organization and Society, Vol. 22, 1997.
Kormendi R., and Lipe R., 1987. Earnings Innovations, Earnings Persistence and Stock Returns. Journal of business, 323-346.
AKPM‐10 20
Kothari SP., 1992. Price-Earnings Regression in The Presence of Price Leading Earnings: Earnings Level versus Change Specification and Alternative Deflators. Journal of Accounting and Economics 15, 173-202.
__________., and Sloan RG., 1992. Information in Earnings about Future Earnings : Implication for Earnings Responses Coefficients. Journal of Accounting and Economics 15, 143-171.
__________., and Zimmerman L., 1995. Price and Return Model. Journal of Accounting and Economics, 20, 155-192.
Kwon YK., Newman DP., and Suh Y., 2001. The Demand for Accounting Conservatism for Management Control. Reviev of Accounting Studies, 6, 29-51
Kwon, S. S., 2002. Value Relevance of Financial Information and Conservatism: High-Tech versus Low-Tech Stocks. Working Paper, Rutgers University- Camden.
Kwon, Y. P., 2005. Accounting Conservatism and Managerial Incentives, Forthcoming in Management Science.
Kothari, S. P., and R. G. Sloan, 1992, Information in Prices About Future Earnings:
Implications for Earnings Response Coefficients, Journal of Accounting an Economics 15: 143-171
Mayangsari, S.,and Wilopo, 2002. Konservatisma Akuntansi, Value Relevance And Discretionery Accruals: Implikasi Empiris Model Feltham and Ohlson (1996). Jurnal Riset Akuntansi Indonesia. Vol. 5, No. 3 (September): 229-310.
Mile, R., and Snow, 1978. Organizational Strategi, Structure And Process. New York, NY: McGraw-Hill.
Miler. D., and Friesen, P.H., 1982. Inovation in Conservative and Entrepreneurial Firm : Two Models of Strategic Momentum. Strategic Management Journal.
Monahan, 1999. Conservatism, Growth and the Role of Accounting Numbers in the Equity Valuation Process. Working Paper, the University of North Carolina.
Penman,S., and X. Zhang, 2002. Accounting Conservatism, Quality of Earnings, and Stock Returns. The Accounting Review, 77 (2): 237 –264.
AKPM‐10 21
Qiang, Xinrong, 2003. The Economic Determinants of Self-imposed Accounting Conservatism. Disertation, Ph.D. Candidate in Accounting Department of Accounting and Law School of Management State University of New York at Buffalo.
Rezaee, Z., and Jain, P.K., 2004. The Sarbanse-Oxley Act and Accounting Conservatism. Working paper. University of Memphis.
Sari, Dahlia, 2004. Hubungan Antara Konservatisma Akuntansi Dengan Konflik Bondholder-Shareholder Seputar Kebijakan Dividen dan Peringkat Obligasi Perusahaan. SNA IV , Denpasar
Seetharaman,A., B. Srinidhi., Zane, Swanson, 2002. The Effect of the Private Securities Litigation Reform Act of 1995 on Accounting Conservatism. Working Paper, Saint Louis University.
Smith CW., Jr., and Warner M., 1979. On Financial Contracting: An Analysis of Bond Covenants. Journal of Financial Economics (June), 117-161.
Sterling RR., 1967. Conservatism : The Fundamental Principle of Valuation in Traditional Accounting. Abacus, June:109-132.
Suko Priyono, B., 2004. Analisis Pengaruh Hubungan Ideal Tipologi Strategi and Budaya Organisasi Terhadap Kinerja. Jurnal Bisnis and Ekonomi, Vol 11 No. 1, UGM. Jogjakarta
Watts RL., 2003. Conservatism In Accounting Part I : Explanation and Implication. Accounting Horizons, September 17 No 3, 207-221.
Watts RL., 2003. Conservatism In Accounting Part II : Evidence and Research Opportunities. Accounting Horizons, Desember Vol. 17 No. 4, 287-302.
Watts RL., and Zimmerman JL., 1986. Positive Accounting Theory. Pretice Hall, Englewood Cliff, New Jersey.
Warfield, T., and J. Wild, 1992. Accounting Recognition And The Relevance Of Earnings As An Explanatory Variable For Returns. The Accounting Review 67, 821-842.
AKPM‐10 22
Wibowo, Joko, 2002. Implikasi Konservatisme Dalam Hubungan Laba-Return And Faktor-Faktor Yang Mempengaruhi. Thesis, PPS Akuntansi UGM.
Widya, 2004. Analisis Faktor-Faktor Yang Mempengaruhi Pilihan Perusahaan Terhadap Akuntansi Konservatif. Thesis, PPS-UGM.
Wolk, Harry I., Michael G Tearney, and James L.D., 2001. Accounting Theory: A Conceptual and Institutional Approach. South Western College Publishing
Zwiebel, J., 1996. Dynamic Capital Structure Under Managerial Entrenchment. American Economic Review 86, 1197-1215.
AKPM‐10 23
LAMPIRAN:
1. Statistik Deskriptif
2. Hasil Regresi Pengujian H1: konflik kepentingan dan konservatisma
3. Hasil Regresi Pengujian H2: interaksi konflik kepentingan dan risiko litigasi
4. Hasil Regresi Pengujian H3: interaksi konflik kepentingan dan tipologi strategi
Tabel 1: statistik deskriptif
KON
KONFL
STR
LIT
Valid
96
96
96
96
N
Missing
0
0
0
0
Mean
-1,677
-,113
,049
-,0485
Median
-1,483
-,133
,029
-,190
Std. Deviation
1,031
,247
,877
,866
Minimum
-6,140
-1,154
-2,094
-1,680
Maximum
-,270
1,635
3,587
3,965
Keterangan:
KON = Konservatisma akuntansi , KONFL = Konflik kepentingan, LIT= Risiko litigasi, STR= tipologi strategi
Tabel 2: hasil regresi pengujian H1
Model 1: KONit = β0 + β1 KONFLit + ei
Variabel
koefisien
T hitung
Sig.
Keterangan
intercept
-1,623
-15,130
0,000
KONFL
0,238
2,236
0,028
Signifikan
R
Adj R Square
F hitung
Sign. F
= 0,225
= 0,040
= 5,000
= 0,028
AKPM‐10 24
Tabel 3: hasil regresi pengujian H2
Model 2a: KONit = β0 + β1KONFLit + β2LITit + ei
Model 2b: KONit = β0 + β1KONFLit + β2LITit + β3KONFL*LITit+ ei
Variabel
koefisien
T hitung
Sig.
Keterangan
Model 2a
Intercept
-1,620
KONFL
0,433
3,570
0,001
Signifikan
LIT
-0,367
-2,987
0,004
Signifikan
R
Adj R Square
F hitung
Sign. F
= 0,366
= 0,115
= 7,172
= 0,000
α
Model 2b
= 0,05
intercept
-1,304
KONFL
2,852
5,083
0,000
Signifikan
LIT
-0,342
-3,046
0,003
Signifikan
KONFL*LIT
-0,526
-4,398
0,000
Signifikan
R
Adj R Square
= 0,533
= 0,261
F hitung
= 12,173
Sign. F
= 0,000
α
= 0,05
AKPM‐10 25
Tabel 4: hasil regresi pengujian H3
Model 3a: KONit = β0 + β1KONFLit + β2STRit + ei
Model 3b: KONit = β0+ β1KONFLit + β2STRit + β3KONFL* STRit + ei
Variabel
koefisien
T hitung
Sig.
Keterangan
Model 3a
Intercept
-1,623
KONFL
0,246
2,322
0,022
Signifikan
STR
-0,149
-1,386
0,169
Tidak Signifikan
R
Adj R Square
F hitung
Sign. F
α
Model 3b
= 0,264
= 0,050
= 3,485
= 0,035
= 0,05
Intercept
-1,578
KONFL
0,382
3,151
0,002
Signifikan
STR
-0,198
-1,835
0,078
Tidak Signifikan
KONFL*STR
-0,760
-2,177
0,032
Signifikan
R
Adj R Square
F hitung
= 0,340
= 0,086
= 3,997
Sign. F
= 0,010
α
= 0,05

ADVANCE PRICING AGREEMENT DALAM KAITANNYA DENGAN UPAYA MEMINIMALISASI POTENTIAL TAX RISK

July 28, 2010 Leave a comment

JURNAL AKUNTANSI PEMERINTAH
Vol. 3, No. 1, Oktober 2008
Hal 1 – 12
ADVANCE PRICING AGREEMENT DALAM KAITANNYA
DENGAN UPAYA MEMINIMALISASI POTENTIAL TAX RISK
Mardiasmo*
A b s t r a c t
Transfer pricing has been discussed as a serious problem in multinational company
business. It is not only related with the price determination among members of groups,
but also includes the obligation on taxation. Transactions commited within members of
multinational corporation involve cross border transaction. Thus, these transactions
might create an opportunity to shift the tax burden from one country to another.
In such way, potential losses on national revenues from corporate tax might be existed.
To overcome the problem, the government has attempted to minimize the potential tax
risk by introducing an Advance Pricing Agreement (APA). The APA gives authority to
tax officials to redetermine arm’s length prices over the transactions made among
related parties. Therefore, there is certainty in assessing tax liability for each transaction
made by groups of multinational company.
To what extent that the APA will be effective to minimize potential losses on revenue
collection, and what kind of risks that might be faced by the companies if they do not
make any contract arrangement with the tax authority? To answer these questions, this
paper tries to develop a tax planning with the study case on PT XYZ.
Keywords: transfer pricing, potential tax risk, tax planning, Advance Pricing Agreement,
* Prof. Dr. Mardiasmo, Ak., MBA saat ini menjabat sebagai Direktur Jenderal Perimbangan Keuangan,
Departemen Keuangan
JAP Vol. 3, No. 1, Oktober 2008
2
PENDAHULUAN
Pesatnya pertumbuhan kegiatan
ekonomi internasional turut merangsang
berkembangnya korporasi multinasional
(multinational company). Kegiatan korporasi
multinasional sebagai group-group
perusahaan telah menembus batas-batas
negara berkembang sehingga menjadi
unit-unit bisnis yang besar dan berkuasa,
dengan konsep dan strategi yang lebih
meluas.
Ada beberapa alasan utama yang
mendorong munculnya korporasi multinasional.
Brigham dan Houston (2003)
mengidentifikasi alasan utama pertumbuhan
korporasi multinasional yaitu untuk
memperluas pasar, mencari sumber bahan
baku, mencari teknologi baru, mencapai
efisiensi, menghindari peraturan atau
kebijakan pemerintah, dan diversifikasi.
Namun demikian, terdapat tiga
permasalahan khusus yang dihadapi
korporasi multinasional (Anthony dan
Govindarajan, 2004), yaitu :
1. perbedaan budaya (cultural differences)
2. transfer pricing
3. nilai tukar mata uang (exchange rate)
Sebagian besar transaksi yang terjadi
antar anggota group korporasi multinasional
dapat dikategorikan dalam
beberapa transaksi, seperti penjualan
barang dan jasa, lisensi, royalti, paten
dan know-how, penjaminan hutang,
penjualan komponen untuk kegiatan
produksi, dan seterusnya.
Penentuan harga atas berbagai
transaksi antar anggota group korporasi
multinasional tersebut dikenal dengan
sebutan transfer pricing (harga transfer).
Transfer pricing dapat ditentukan berbeda
dengan harga wajar atau harga
yang berlaku di pasaran bebas, serta
dapat pula ditetapkan lebih tinggi atau
lebih rendah.
Transfer pricing merupakan isu
klasik di bidang perpajakan, khususnya
menyangkut transaksi internasional yang
dilakukan oleh korporasi multinasional.
John Neighbour (2002) menyatakan bahwa
transfer pricing pada awalnya hanya
merupakan isu utama bagi administrasi
perpajakan dan ahli perpajakan saja,
akan tetapi pada masa sekarang ini
transfer pricing telah menjadi pembicaraan
para politisi, ahli ekonomi dan juga
lembaga-lembaga swadaya masyarakat
menyangkut kewajiban pembayaran
pajak atas aktivitas bisnis korporasi
multinasional.
Survey yang dilakukan oleh Ernst
and Young International pada tahun
1995 menunjukkan bahwa lebih dari
80% responden mengindikasikan transfer
pricing sebagai masalah utama dalam
perpajakan yang dihadapi oleh korporasi
multinasional (Ernst and Young, 1996).
Responden tersebut terdiri dari korporasi
multinasional di delapan negara termasuk
Kanada, Amerika Serikat, Jepang dan
Inggris.
Sementara itu, berdasarkan penelitian
tim UNTC PBB yang diketuai Silvain
Plasschaert sebagaimana dinyatakan
kembali oleh Gunadi (1999) disebutkan
bahwa motivasi transfer pricing di
Indonesia terkait dengan beberapa hal
antara lain: (i) Pengurangan objek pajak,
terutama pajak penghasilan; (ii) Pelonggaran
pengaruh pembatasan kepemilikan
luar negeri; (iii) Penurunan pengaruh
depresiasi rupiah; (iv) Menguatkan tuntutan
kenaikan harga atau proteksi terhadap
saingan impor; (v) Mempertahankan
sikap low profile tanpa mempedulikan
tingkat keuntungan usaha; (vi)
Mengamankan perusahaan dari tuntutan
atas imbalan atau kesejahteraan karyawan
dan kepedulian lingkungan; dan
(vii) Memperkecil akibat pembatasan
dan risiko bisnis di luar negeri.
Advance Pricing Agreement dalam Kaitannya
dengan Upaya Meminimalisasi Potential Risk
3
Dari uraian di atas nampak bahwa
pada prinsipnya praktik transfer pricing
dapat didorong oleh alasan pajak (tax
motive) maupun alasan bukan pajak
(non-tax motive).
Transaksi-transaksi yang terjadi antar
unit bisnis group korporasi multinasional
kebanyakan merupakan cross border
transaction yang menyebabkan otoritas
pajak menduganya sebagai salah satu
bentuk pengalihan (shifting) beban pajak
dari suatu negara yang mempunyai tarif
tinggi (high tax countries) ke negara
lainnya yang mempunyai tarif pajak
lebih rendah (low tax countries). Dengan
demikian, perlu kiranya untuk menentukan
berapa besar penghasilan kena pajak
yang wajar dari unit bisnis atau cabangcabang
perusahaan dari satu group yang
beroperasi di wilayah yurisdiksinya.
Untuk mengurangi terjadinya praktik
penyalahgunaan transfer pricing oleh
korporasi multinasional, Undang-undang
Republik Indonesia Nomor 7 Tahun 1983
tentang Pajak Penghasilan memberikan
kewenangan otoritas pajak untuk
menentukan kembali harga wajar transaksi
antar pihak-pihak yang mempunyai
hubungan istimewa (associated enterprise/
related parties) dan mewajibkan Wajib
Pajak yang mempunyai transaksi dengan
pihak-pihak yang mempunyai hubungan
istimewa agar membuat perjanjian dengan
Direktur Jenderal Pajak dalam bentuk
Advance Pricing Agreement/APA (kesepakatan
harga transfer) mengenai harga
wajar produk dalam transaksi mereka.
Terkait dengan pengaturan tersebut,
paper ini akan membahas mengenai
implikasi APA terhadap perencanaan
pajak, khususnya untuk meminimalkan
potensi risiko naiknya pajak terhutang.
Selain itu, paper ini juga akan membahas
mengenai risiko yang mungkin
dihadapi perusahaan bila tidak mengadakan
kesepakatan tersebut dengan
Direktorat Jenderal Pajak.
Dengan demikian, output dari
penulisan paper ini adalah sebuah ide
tentang tax planning (perencanaan pajak)
dalam upaya meminimalisasi potential
tax risk perusahaan. Sebagai gambaran
atas implementasi dan implikasi APA,
paper ini akan mendeskripsikannya
dengan menggunakan studi kasus terhadap
PT XYZ.
Transaksi-transaksi hubungan istimewa
PT XYZ dengan related party-nya
yang berkaitan dengan penjualan, pembelian
bahan baku dan transaksitransaksi
yang terkait seperti pembayaran
royalti, paten, dan sales commission
menjadi objek permasalahan yang
dianalisis dalam paper ini dengan
mempergunakan data time series laporan
keuangan dan kontrak perjanjian
(contract agreement) dalam kaitannya
dengan tax planning sebagai upaya
meminimalisasi potential tax risk yang
berkaitan dengan transaksi hubungan
istimewa.
TAHAPAN-TAHAPAN DALAM TAX
PLANNING
Tax planning (perencanaan pajak)
merupakan bagian dari perencanaan
strategis (strategic planning) yang apabila
dikelola dengan baik akan menambah
nilai positif suatu perusahaan, begitu
pula sebaliknya, apabila tidak dikelola
dengan baik dapat menurunkan nilai
suatu perusahaan.
Dalam memformulasi tax planning,
tahapan-tahapan yang dilakukan adalah
sebagai berikut:
1. Analisis profil/topografi bisnis perusahaan.
Tahapan ini menggambarkan karakteristik
bisnis perusahaan dengan
menggali sumber data internal yang
berupa laporan keuangan dan dokumendokumen
pendukungnya, serta kontrakkontrak
perjanjian.
JAP Vol. 3, No. 1, Oktober 2008
4
2. Analisis transaksi hubungan istimewa.
Tahapan ini dilakukan untuk mendapatkan
gambaran mengenai transaksitransaksi
hubungan istimewa dan
perilaku transaksi-transaksi tersebut.
3. Analisis mengenai potential tax risk.
Tahapan ini dilakukan untuk mendapatkan
gambaran mengenai potential
tax risk atas transaksi-transaksi hubungan
istimewa, baik pengaruh internal
maupun eksternal.
4. Penyusunan tax planning untuk mereduksi
atau mengeliminasi potential tax
risk.
Pada tahapan ini akan mencari
alternatif solusi untuk meminimalisasi
potential tax risk.
ANALISIS TOPOGRAFI BISNIS DAN
TRANSAKSI HUBUNGAN ISTIMEWA
PT XYZ
PT XYZ adalah perusahaan PMA
yang mayoritas sahamnya dimiliki oleh
SG Co yang berkedudukan di Singapura
dan merupakan anak perusahaan dari
MNE Co yang berkedudukan di Jepang.
PT XYZ merupakan unit bisnis
manufaktur yang sangat bergantung pada
mitra bisnis utamanya yaitu:
1. MNE Sales & Marketing Co, adalah
unit bisnis pemasaran MNE Co yang
berkedudukan di Jepang, berperan
sebagai pemesan/pembeli (buyer)
produk PT XYZ sekaligus sebagai
pemasok utama bahan baku.
2. HKG Co, merupakan unit bisnis MNE
Co Ltd yang berkedudukan di Hongkong.
Perusahaan ini sebagai pemasok
bahan baku kedua terbesar
setelah MNE Sales & Marketing Co.
3. MNE Co berkedudukan di Jepang dan
merupakan pemilik hak paten,
informasi teknologi, know-how atau
hak intelektual lainnya dalam kegiatan
manufakturing yang dilaksanakan
oleh PT XYZ.
Laporan keuangan PT XYZ dapat dilihat
pada tabel berikut:
2004 2003 2002
(unit: US$)
Purchase of Material 397,851,796 4 28,162,194 2 02,947,429
Third parties 1 1,587,916 2.9% 1 8,072,951 4.2% 3 ,979,361 2.0%
Related parties 3 86,263,880 97.1% 410,089,243 95.8% 198,968,068 98.0%
Net Sales 542,994,892 5 19,857,898 2 95,648,222
Third parties 3 0,358,870 5.6% 4 0,489,955 7.8% 4 4,197,620 14.9%
Related parties 5 12,636,022 94.4% 479,367,943 92.2% 251,450,602 85.1%
Royalty and Patent 17,612,267 1 6,581,997 9 ,863,274
Third parties 36,986 0.2% 3 4,822 0.2% 2 0,713 0.2%
Related parties 1 7,575,281 99.8% 1 6,547,175 99.8% 9 ,842,561 99.8%
Sales Commission 110,062 1 87,512 2 95,156
Third parties 7,869 7.2% 1 5,207 8.1% 3 2,880 11.1%
Related parties 102,193 92.9% 1 72,305 91.9% 2 62,276 88.9%
Tabel 1 : Transaksi-Transaksi Hubungan Istimewa
Advance Pricing Agreement dalam Kaitannya
dengan Upaya Meminimalisasi Potential Risk
5
Income Statements
(Unit: US$) 2004 2003 2002
Net sales 5 42,994,892 5 19,857,898 2 95,648,222
Operating costs 5 26,153,692 5 09,031,028 2 80,021,033
EBITDA 1 6,841,200 1 0,826,870 1 5,627,189
Depreciation and amortization 1 1,897,040 1 2,306,877 1 3,161,741
EBIT 4 ,944,160 ( 1,480,007) 2 ,465,448
Less interest 8 76,227 9 45,140 1 ,423,198
EBT 4 ,067,933 ( 2,425,147) 1 ,042,250
Income tax credit/(expense) ( 949,173) 2 ,740,240 ( 3,030,018)
Net Profit / (Loss) 3 ,118,760 3 15,093 ( 1,987,768)
Estimated income tax 1 ,469,764 3 40,434 1 ,675,247
Tabel 2 : Laporan Rugi Laba PT XYZ
Dalam Tabel 2 tersebut di atas,
estimated income tax dikalkulasi berdasarkan
angka-angka laporan keuangan
komersial yang telah disesuaikan dengan
Undang-undang Pajak Penghasilan.
Dari Tabel 1 dan Tabel 2 di atas
dapat diturunkan suatu grafik yang
menggambarkan tren antara variabelvariabel
analisis terhadap pajak penghasilan
sebagai berikut:
Grafik 1 : Tren Variabel-variabel Analisis Terhadap PPh
Angka penjualan tahun 2003
mencapai US$519,857,898 atau naik
1.76 kali dibandingkan dengan angka
penjualan tahun 2002 yang berjumlah
US$295,648,222. Operating cost tahun
2003 naik 1.82 kali dibandingkan tahun
sebelumnya yaitu dari US$280,021,033
menjadi US$509,031,028. Jumlah pem-
-
100,000,000
200,000,000
300,000,000
400,000,000
500,000,000
600,000,000
Net sales Op cost s HAKI Inc tax
2004
2003
2002
JAP Vol. 3, No. 1, Oktober 2008
6
bayaran HAKI -termasuk dalam operating
cost- tahun 2003 meningkat 1.68 kali
dibandingkan tahun 2002 yaitu dari
US$9,865,274 menjadi US$16,581,997.
Sebaliknya pajak penghasilan tahun
2003 hanya US$340,434 atau 0.2 kali
dibandingkan tahun 2002 yang berjumlah
US$1,675,247.
Penjualan tahun 2004 adalah
sebesar US$542,994,892 atau 1.04 kali
angka penjualan tahun 2003. Operating
cost 2004 sebesar US$526,153,692 atau
mengalami kenaikan 1.03 kali dibandingkan
tahun 2003 termasuk di
dalamnya pembayaran HAKI 2004 sebesar
US$17,612,267 yang meningkat
1.06 kali dibandingkan tahun sebelumnya.
Sementara pajak penghasilan
tahun 2004 mencapai US$1,469,764
atau meningkat 4.32 kali lebih besar
dibandingkan tahun 2003.
Dari Grafik 1 tersebut dapat ditarik
suatu kesimpulan terkait dengan
variabel-variabel analisis yaitu bahwa
naiknya jumlah penjualan selalu diikuti
dengan naiknya operating cost termasuk
di dalamnya pembayaran HAKI akan
tetapi tidak selalu diikuti dengan dengan
kenaikan pajak penghasilan.
ANALISIS POTENTIAL TAX RISK
Banyak korporasi multinasional
mengabaikan ketentuan-ketentuan formal
dalam transaksi cross border, seperti
pembuatan kontrak atau perjanjian yang
melandasi transaksi antar mereka sehingga
banyak biaya, tenaga dan waktu dikeluarkan
jika terjadi audit pajak hanya
untuk menjelaskan formalitas dari suatu
transaksi (Enrique Macgregor, 2004).
Walaupun Undang-undang PPh
yang mengatur hal-hal yang bersifat
materiil mempunyai kedudukan lebih
tinggi (lex specialis) daripada Undangundang
KUP yang mengatur ketentuan
formal (lex generalis), kontrak atau perjanjian
antar pihak yang mendasari suatu
transaksi sangat diperlukan. Terlebih lagi
apabila transaksi tersebut melibatkan
pihak-pihak yang mempunyai hubungan
istimewa yang besarannya amat signifikan
sehingga akan menarik perhatian (eye
catching) fiskus.
Dari studi kasus pada PT XYZ, hasil
analisis terhadap potential tax risk dapat
dijabarkan berikut ini.
§ Tidak Ada Kontrak Perjanjian
- Perolehan Bahan Baku Free of Charge
Dalam penentuan harga jual assembled
product harga negosiasi yang di buat
antara PT XYZ dengan MNE Sales &
Marketing Co tidak mengikutsertakan
unsur bahan baku free of charge yang
dipergunakan dalam proses produksi
yang merupakan bagian yang tidak terpisahkan
dari finished goods sehingga
harga jual dalam purchase contract
menjadi lebih rendah daripada yang seharusnya
(under valued) dan bila dibandingkan
dengan produk sejenis yang
dijual di Indonesia dapat menimbulkan
dugaan adanya transfer pricing sehingga
tidak tertutup kemungkinan fiskus akan
melakukan koreksi positif yang dapat
berakibat pada naiknya jumlah pajak
terhutang yaitu dengan menentukan
kembali harga jual produk tersebut.
- Revaluasi Nilai Persediaan
Terkait dengan sifat assembled product
yang cepat mengalami perubahan baik
model, features maupun teknologinya
sehingga mengakibatkan harga jualnya
mempunyai kecenderungan semakin
menurun. Dampak dari menurunnya
harga jual adalah nilai persediaan menjadi
over valued dan oleh karenanya harus
direvaluasi. Selisih nilai revaluasi persediaan
yang over valued setara dengan
aliran kas masuk ke PT XYZ dari MNE
Co.
Advance Pricing Agreement dalam Kaitannya
dengan Upaya Meminimalisasi Potential Risk
7
Revaluasi nilai persediaan yang dilakukan
secara rutin tiap akhir triwulan secara
potensial dapat menimbulkan dugaan
adanya praktik transfer pricing yang
tercermin dari adanya aliran kas ke PT
XYZ dari MNE Co sementara transaksi
pembelian bahan baku dilakukan dengan
MNE Sales & Marketing Co dan HKG Co.
Oleh karenanya ada kemungkinan harga
perolehan bahan baku akan dikoreksi
negatif oleh fiskus sesuai dengan arm’s
length price yang akan berdampak pada
menurunnya operating cost yang pada
akhirnya jumlah pajak terhutang akan
naik.
§ Variasi Tarif HAKI
Transaksi cross border dengan related
party seperti pembayaran royalti dan
management fee adalah salah satu target
pemeriksaan pajak. Untuk itu, kondisi
demikian harus menjadi salah satu
prioritas yang harus dipertimbangkan
dalam menyusun suatu tax planning
(Enrique Macgregor, 2004). Hal yang
sering menjadi sumber konflik antara
wajib pajak dengan fiskus dalam penggunaan
intangible assets tersebut adalah
besaran tarifnya (Glenn Desouza, 1997).
Banyaknya beban yang harus ditanggung
oleh PT XYZ berkaitan dengan penggunaan
HAKI termasuk juga perbedaan
tarif royalti yang ditetapkan dalam royalty
agreement. Terlebih untuk assembled
product, secara potensial dapat menimbulkan
dugaan adanya excessed burden
dan upaya pengalihan keuntungan dari
PT XYZ kepada MNE Co Ltd atau unit
bisnisnya sehingga fiskus dapat saja
melakukan koreksi negatif terhadap
pembayaran HAKI tersebut. Fiskus juga
akan memiliki pembenaran yang cukup
mendasar untuk melakukan koreksi
fiskal karena menduga adanya praktik
transfer pricing yang tercermin dari
meningkatnya angka penjualan secara
signifikan akan tetapi tidak diikuti oleh
meningkatnya jumlah pajak penghasilan.
§ Kewajiban Pengungkapan
Pengungkapan transaksi hubungan istimewa
dalam SPT sedikitnya memuat
informasi mengenai jenis dan besaran
transaksi serta pihak-pihak yang mempunyai
hubungan istimewa tesebut. Jika
informasi tersebut tidak diungkapkan
dalam SPT dapat berakibat SPT tersebut
dianggap tidak lengkap dan perusahaan
dapat dikira menyampaikan informasi
yang tidak benar.
§ Penetapan Kembali Jumlah Pajak
Terhutang
Direktur Jenderal Pajak diberikan kewenangan
oleh undang-undang untuk
menentukan kembali besarnya penghasilan
dan/atau biaya sesuai dengan keadaan
seandainya di antara para Wajib Pajak
tersebut tidak terdapat hubungan istimewa.
Kewenangan ini dirumuskan di Pasal 18
ayat (3) Undang-undang PPh Tahun
2000, yang berbunyi sebagai berikut:
“Direktur Jenderal Pajak berwenang
menentukan kembali besarnya penghasilan
dan pengurangan serta menentukan utang
sebagai modal untuk menghitung besarnya
penghasilan kena pajak bagi Wajib Pajak
yang mempunyai hubungan istimewa
dengan Wajib Pajak lainnya sesuai
dengan kewajaran dan kelaziman usaha
yang tidak dipengaruhi oleh hubungan
istimewa”.
Dalam menentukan kembali jumlah
penghasilan dan/atau biaya tersebut
dapat dipakai beberapa pendekatan,
misalnya data pembanding, alokasi laba
berdasar fungsi atau peran serta Wajib
Pajak yang mempunyai hubungan istimewa
dan indikasi serta data lainnya.
Sampai dengan saat ini belum ada peraturan
pelaksanaan tentang ketentuan di
atas sehingga berpotensi besar adanya
perbedaan penafsiran terhadap pasal
tersebut.
JAP Vol. 3, No. 1, Oktober 2008
8
§ Potensi Denda Pajak dan Pajak
Berganda
Dalam Surat Edaran Dirjen Pajak Nomor
SE-01/PJ.7/2003 tentang Kebijakan
Pemeriksaan Pajak disebutkan bahwa
untuk kasus-kasus transfer pricing jangka
waktu pemeriksaan ditetapkan selama 8
bulan dan dapat diperpanjang menjadi 2
tahun. Selain itu, disebutkan pula adanya
pemeriksaan yang didasarkan permintaan
khusus Direktur P4 yang waktunya
penyelesaiannya tidak disebutkan.
Secara umum semua jenis pemeriksaan
pajak akan daluwarsa selama 10 tahun.
Memang tidak mudah untuk mendefinisikan
dan menjabarkan angka-angka
koreksi fiskal yang menyangkut hubungan
istimewa sebagaimana juga halnya yang
terjadi di dalam transaksi-transaksi antara
PT XYZ dengan mitra bisnisnya. Akan
tetapi dengan mengacu kepada surat
edaran tersebut di atas diperkirakan
denda pajak yang harus ditanggung oleh
PT XYZ akan mencapai maksimum 48%
dari pajak yang kurang dibayar sebagai
akibat dilakukannya koreksi oleh fiskus
terhadap transaksi-transaksi hubungan
istimewa.
Disamping untuk menghindari pengenaan
pajak berganda, ketentuan tersebut juga
memberikan kewenangan apabila terjadi
masalah transfer pricing yang menurut
salah satu negara tidak mencerminkan
transaksi yang arm’s length, maka harga
transaksi dimaksud dapat dikoreksi oleh
otoritas pajak negara tersebut.
Pajak berganda dapat terjadi apabila atas
objek yang sama dikenakan pajak lebih
dari satu kali. Dalam hal ini sebagai
contoh adalah pembayaran HAKI
kepada MNE Co dan MNE Sales &
Marketing Co telah dipotong pajak
penghasilan (withholding tax) pasal 26
tapi kemudian biaya-biaya tersebut dikoreksi
oleh fiskus. Di lain pihak MNE
Co dan MNE Sales & Marketing Co
melaporkan pembayaran HAKI yang diterima
dalam laporan pajak mereka dan
withholding tax pasal 26 dijadikan uang
muka pajak (tax credit). Jika penetapan
pajak dimaksud merupakan hasil dari
koreksi terhadap transfer pricing, maka
negara lainnya, dalam hal ini Jepang,
wajib melakukan correlative adjustment.
Apabila Jepang menolak melakukannya
maka yang akan terjadi adalah pengenaan
pajak berganda yang harus ditanggung
oleh MNE Co dan MNE Sales &
Marketing Co.
Pada tahap ini, sesuai dengan ketentuan
pasal 9 dari OECD Model, kedua
competent authorities akan membahasnya.
Bila pembahasan antara competent
authorities tersebut tidak mencapai titik
temu maka tidak ada upaya hukum lain
untuk menyelesaikan masalah tersebut
kecuali mengajukan keberatan dan banding
atas putusan tersebut kepada Badan
Penyelesaian Sengketa Pajak (BPSP). Jika
ada pajak yang masih kurang dibayar
sebelum banding diajukan ke BPSP maka
50% dari kekurangannya tersebut harus
dilunasi terlebih dulu. Paling sedikit dibutuhkan
waktu selama 2 tahun untuk
mengajukan perkara ini, dimana satu
tahun diperlukan untuk pemeriksaan pajak
dan satu tahun lagi untuk proses keberatan.
Keputusan BPSP bersifat final dan sementara
itu kapan putusan harus dibuat dan
dikeluarkan oleh BPSP tidak ada peraturan
yang mengaturnya, sehingga kepastian
hukumnya menjadi tidak menentu
(uncertainty).
ADVANCE PRICING AGREEMENT
(APA) SEBAGAI SOLUSI TRANSFER
PRICING
Undang-undang PPh Tahun 2000
Pasal 18 ayat (3a) menyatakan, “Direktur
Jenderal Pajak berwenang melakukan
perjanjian dengan Wajib Pajak dan
bekerja sama dengan otoritas pajak
negara lain untuk menentukan harga
Advance Pricing Agreement dalam Kaitannya
dengan Upaya Meminimalisasi Potential Risk
9
transaksi antar pihak-pihak yang mempunyai
hubungan istimewa sebagaimana
dimaksud dalam ayat (4), yang berlaku
selama suatu periode tertentu dan mengawasi
pelaksanaannya serta melakukan
renegosiasi setelah periode tertentu tersebut
berakhir”.
Dalam penjelasan pasal tersebut
disebutkan “kesepakatan harga transfer
(Advance Pricing Agreement / APA)
adalah kesepakatan antara Wajib Pajak
dengan Direktur Jenderal Pajak mengenai
harga jual wajar produk yang dihasilkannya
kepada pihak-pihak yang mempunyai
hubungan istimewa (related parties)
dengannya. Tujuan diadakannya APA
adalah untuk mengurangi terjadinya
praktik penyalahgunaan transfer pricing
oleh perusahaan multinasional.
Persetujuan antara wajib pajak
dengan Direktur Jenderal Pajak dapat
mencakup beberapa hal antara lain
harga jual produk yang dihasilkan,
jumlah royalti, dan lain-lain, tergantung
pada kesepakatan. Keuntungan dari APA
selain memberikan kepastian hukum
dan kemudahan penghitungan pajak,
fiskus tidak perlu melakukan koreksi
atas harga jual dan keuntungan produk
yang dijual wajib pajak kepada perusahaan
dalam group yang sama. APA
dapat bersifat unilateral, yaitu merupakan
kesepakatan antara Direktur Jenderal
Pajak dengan wajib pajak atau bilateral,
yaitu kesepakatan antara Direktur Jenderal
Pajak dengan otoritas perpajakan negara
lain yang menyangkut wajib pajak yang
berada di wilyah yurisdiksinya”.
PENUTUP
a. Kesimpulan
Berdasarkan hasil analisis dan
pembahasan data sebagaimana telah
diuraikan di atas, dapat dibuat beberapa
kesimpulan sebagai berikut:
1. Potential tax risk dapat diakibatkan
karena faktor-faktor internal, antara
lain:
- Metode transfer pricing yang dipergunakan
mengakibatkan harga jual
produk, terutama produk OEM, lebih
rendah dari yang seharusnya karena
tidak menambahkan unsur bahan
baku free of charge sebagai komponen
produksi. Penetapan harga
jual yang lebih rendah tersebut dapat
mengakibatkan timbulnya koreksi
pajak pada sisi penjualan.
- Aliran kas masuk yang diterima
dari MNE Co Ltd atau sebaliknya
aliran kas keluar kepada MNE Co
Ltd sebagai konsekuensi dari revaluasi
persediaan yang disebabkan
oleh fluktuasi harga, dapat menimbulkan
adanya koreksi pajak terutama
pada sisi pembelian.
- Transaksi hubungan istimewa yang
tidak dilengkapi dengan dokumendokumen
perjanjian akan menimbulkan
beban pembuktian yang
sangat berat apabila terjadi pemeriksaan
pajak karena bagaimanapun
suatu transaksi yang terjadi yang
melibatkan pihak-pihak yang mempunyai
hubungan istimewa terlebih
lagi yang bersifat cross border
kelengkapan dokumen sangatlah
penting untuk dipersiapkan sebelum
transaksi tersebut dilaksanakan.
2. Sementara faktor-faktor eksternal yang
dapat menimbulkan potential tax risk,
antara lain:
- Penetapan kembali transaksitransaksi
PT XYZ berkaitan dengan
related party yang dapat mengakibatkan
naiknya jumlah pajak
terhutang.
- Denda kenaikan beban pajak
maksimum 48% dari pajak terhutang
sebagai akibat koreksi pajak oleh
fiskus.
JAP Vol. 3, No. 1, Oktober 2008
10
- Waktu audit pajak untuk transaksi
transfer pricing paling sedikit membutuhkan
waktu 8 bulan dan dapat
diperpanjang sampai 2 tahun.
- Apabila Wajib Pajak keberatan atas
hasil koreksi pajak oleh fiskus,
keberatan dapat diajukan dan
dapat diteruskan dengan banding
ke BPSP apabila keberatan Wajib
Pajak di tolak. Pengajuan banding
tidak menunda kewajiban pembayaran
pajak yang diakibatkan oleh
koreksi fiskus sementara jangka
waktu penyelesaian sengketa dan
keputusan hakim BPSP tidak dapat
dipastikan.
- Kemungkinan terjadi double taxation
apabila koreksi fiskal yang dilakukan
oleh otoritas pajak Indonesia
tidak diikuti dengan correlative
adjustment dari mitra P3B lainnya.
3. Undang-undang nomor 17 Tahun
2000 tentang Pajak Penghasilan pasal
18 ayat (4) telah memuat ketentuan
tentang APA, akan tetapi dari pihak
otoritas fiskal tidak pernah mengeluarkan
peraturan pelaksanaannya sehingga
membuat para Wajib Pajak tidak
mempunyai keyakinan dan kemauan
untuk membuat APA dengan Direktur
Jenderal Pajak. Walaupun demikian
para ahli dan praktisi perpajakan
yakin bahwa APA dapat mengeliminasi
potential tax risk akibat transaksi
hubungan istimewa.
4. Secara yuridis fiskal manfaat membuat
APA dengan Direktur Jenderal Pajak
akan memberikan manfaat-manfaat
antara lain:
- Adanya kepastian hukum sehingga
manajemen perusahaan dapat menjalankan
bisnisnya dengan lebih
tenang dan tidak khawatir mengenai
status transaksinya karena fiskus
tidak akan melakukan koreksi terhadap
transaksi-transaksi yang melibatkan
related party.
- Sengketa pajak yang disebabkan
oleh adanya perbedaan persepsi
atas suatu transaksi maupun peraturan
tertentu yang dapat berdampak
pada dikoreksinya pajak
terhutang dapat dieliminasi.
- Mudah dalam melakukan penghitungan
pajak, karena adanya
kepastian bahwa fiskus tidak akan
melakukan penghitungan atau penetapan
pajak terhutang yang diakibatkan
oleh adanya transaksitransaksi
yang melibatkan related
party.
- Jangka waktu pemeriksaan pajak
lebih singkat karena transaksitransaksi
yang melibatkan related
party tidak termasuk objek pemeriksaan
sehingga waktu yang dibutuhkan
hanya 2 bulan.
- Dimungkinkan melakukan renegosiasi
dengan otoritas pajak terhadap
APA yang pernah disepakati
sebelumnya sesuai dengan dinamika
usaha perusahaan.
b. Saran-Saran
Berdasarkan kesimpulan-kesimpulan
di atas, diusulkan beberapa saran untuk
dipertimbangkan oleh manajemen PT
XYZ untuk meminimalisasi potential tax
risk, antara lain:
1. Memperbaiki bentuk contract agreement
yang ada terutama yang
berkaitan dengan related party.
Contract agreement tersebut sebaiknya
memuat secara jelas definisi dan
dasar transaksi, sehingga tidak menimbulkan
pemahaman lain selain
apa yang tertulis di dalam contract
agreement tersebut.
2. Dokumentasi yang dapat menjelaskan
transaksi OEM dan hubungannya
dengan pembayaran royalti. Hal
Advance Pricing Agreement dalam Kaitannya
dengan Upaya Meminimalisasi Potential Risk
11
ini penting dilakukan karena konsep
OEM yang diaplikasikan oleh PT
XYZ jarang terjadi. Kebanyakan
produk OEM bersifat parsial dan
kontrak putus dalam arti produk
tersebut di pesan dan dipasarkan
tanpa ada kewajiban pembayaran
royalti.
3. Audit pajak yang berkaitan dengan
transfer pricing sangat erat hubungannya
dengan dokumentasi,
kekurangan atau ketiadaan dokumen
pendukung yang berkaitan dengan
transaksi tersebut dapat menjadi
objek koreksi fiskal. Disarankan agar
perusahaan mempersiapkan dokumendokumen
yang berkaitan dengan:
- Gambaran umum tentang bisnis
perusahaan dan hubungan keterkaitan
bisnis antar group korporasi.
- Jenis-jenis transaksi yang berkaitan
dengan related party.
- Metode transfer pricing yang dipergunakan.
- Informasi pendukung terkait
transaksi hubungan istimewa
berikut analisisnya termasuk
perbandingannya jika memungkinkan.
- Kondisi-kondisi khusus yang
mendorong terjadinya transfer
pricing seperti strategi penetrasi
pasar, dampak dari transfer pricing
terhadap perusahaan dan
related party-nya.
4. APA sebagai alternatif untuk menghindari
koreksi fiskal atas transaksi
hubungan istimewa layak untuk dipertimbangkan.
Disarankan sebelum
memutuskan membuat APA dengan
Direktur Jenderal Pajak, sebaiknya
PT XYZ berkonsultasi terlebih dahulu
dengan pihak-pihak related party
agar dapat tercipta kesamaan pandangan
serta manfaat yang maksimal
dari APA. Dikarenakan transaksi
antara PT XYZ dengan related partynya
merupakan cross border
transaction, penggunaan Mutual
Agreement Procedure sangat
disarankan untuk mengeliminasi
potential tax risk secara maksimal.
JAP Vol. 3, No. 1, Oktober 2008
12
DAFTAR PUSTAKA
Anthony, Robert N. and Govindarajan,
Vijay, 2003, Management Control
System. eleventh edition, Mc.
Graw-Hill.
Brigham, Eugene F. and Houston, F. Joel.,
2003, Fundamentals of Financial
Management, tenth edition,
Mc.Graw-Hill.
Desai, Nishith, 2002, Transfer Pricing
Problems, Strategies and Documentation:
Recent International
Case Law on Transfer Pricing,
White paper, Nishsith Desai
Associated, India, …………………….
http://www.nishithdesai.com
Gunadi, 1994, Transfer Pricing: Suatu
Tinjauan Akuntansi Manajemen
dan Pajak, Bina Rena Pariwara,
Jakarta
______ , 1997, Pajak Internasional, Edisi
Revisi. Lembaga Penerbit FEUI,
Jakarta.
Feinschreiber, Robert, 1992, Advance
Pricing Agreements: Advantageous
or Not?, CPA Journal Online,
http://www.luca.com/cpajournal/ol
d/12650269.htm
Hansen, Fay, 2004, Best Practices in Tax
Planning, International Transfer
Pricing Journal,…………………………
http://www.businessfinancemag.co
m
Henshall, John, 2006, Transfer Pricing
and Intellectual Property.
International Transfer Pricing
Journal,
http://www.buildingpvalue.com
Macgregor, Enrique, 2004, Transfer
Pricing: A Roadmap for CEOs.
International Transfer Pricing
Journal,
http://www.findarticles.com/p/articl
es/
Neubig, Tom, 2004, Tax Risk and Strong
Corporate Governance.
International Transfer Pricing
Journal,
http://www.findarticles.com/p/articl
es/
OECD, 1995, Transfer Pricing Guidelines
for Multinational Enterprises and
Tax Administrations, OECD, Paris
Santoso, Iman, 2004, Advance Pricing
Agreement dan Problematika
Transfer Pricing Dari Perspektif
Perpajakan Indonesia, Jurnal
Akuntansi dan Keuangan,
Universitas Kristen Petra,
http://puslit.petra.ac.id
Widiyanto, Agus, 2006, “Advance
Pricing Agreement Dan Implikasinya
Terhadap Perencanaan Pajak
Dalam Rangka Meminimalisasi
Potensi Risiko Kerugian Akibat
Beban Pajak (Studi Kasus Pada PT
XYZ)” 、Tesis Program MM,
Universitas Gadjah Mada,
Yogyakarta.
Zain, Mohammad, 2003, Manajemen
Perpajakan, Salemba Empat,
Jakarta.

PROSEDUR AKUNTANSI

July 28, 2010 Leave a comment

Sistem Akuntansi Keuangan Daerah
BUKU 4
PROSEDUR AKUNTANSI
Pokja IV
Evaluasi Pembiayaan & Informasi Keuangan Daerah
Tim Evaluasi dan Percepatan Pelaksanaan
Perimbangan Keuangan Pusat dan Daerah
BUKU 4 PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
i
KATA PENGANTAR
Penerapan otonomi daerah seutuhnya membawa konsekuensi logis berupa
pelaksanaan penyelenggaraan pemerintahan dan pembangunan berdasarkan
manajemen keuangan yang sehat. Sesuai dengan Peraturan Pemerintah Nomor
105 Tahun 2001, pemerintah daerah memiliki kewenangan untuk menetapkan
sistem dan prosedur pengelolaan keuangan daerah dalam bentuk Peraturan
Daerah. Sistem tersebut sangat diperlukan dalam memenuhi kewajjiban
pemerintah daerah dalam membuat laporan pertanggungjawaban keuangan
daerah yang bersangkutan.
Dalam buku-2 Pos-Pos Neraca dan Buku-3 Pos-Pos Perhitungan Anggaran
telah disebutkan bahwa pemahaman mengenai pedoman akuntansi pos-pos
tersebut mencakup pengertian dari masing-masing pos neraca, proses
pencatatan dan dokumen terkait, saldo normal (debet atau kredit), jurnal standar
yang berkaitan dengan pos tersebut, pengukuran nilai, dan pengungkapan yang
diperlukan untuk kejelasan dari pos tersebut. Sebagai kelengkapan sistem yang
terintegrasi diperlukan penggambaran bagan arus dokumen sumber (flowchart),
yang akan membantu pemahaman penerapan sistem yang bersangkutan.
Bagan arus dokumen sumber yang dimaksud meliputi penggambaran
prosedur pencatatan beberapa transaksi yang berkaitan dengan pos-pos
tertentu. Dengan adanya bagan arus tersebut maka diharapkan pelaksana
manajemen keuangan di daerah akan lebih mengerti mengenai penerapan
sistem secara visual. Bagan arus ini juga akan bermanfaat sebagai bimbingan
pada tahap awal penerapan sistem dimana pada umumnya penerapan sistem
komputerasi masih berjalan secara paralel dengan penerapan secara manual.
Buku-4 Prosedur Akuntansi ini diharapkan akan membantu penerapan
sistem akuntansi keuangan daerah sehingga untuk waktu yang tidak terlalu
lama, pemerintah daerah telah mampu menghasilkan Laporan
Pertanggungjawaban Keuangan. Penerapan Sistem Akuntansi Keuangan
Daerah menuntut adanya pemahaman utuh dari pelaksana manajemen
keuangan daerah dan adanya penyempurnaan secara terus-menerus dari
instansi yang berkewenangan sehingga pencapaian akuntabilitas kinerja instansi
pemerintah daerah sebagai bagian dari kepemerintahan yang baik (good
governance) dapat menjadi kenyataan.
Jakarta, 9 Januari 2002
Tim Penyusun
BUKU 4 PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
ii
DAFTAR ISI
halaman
KATA PENGANTAR ………………………………………………………………………………………. i
DAFTAR ISI ………………………………………………………………………………………………….. ii
Siklus Keuangan Daerah ………………………………………………………………………………… 1
Siklus Keuangan Daerah (Terinci) ……………………………………………………………………. 3
Kerangka Umum Sistem Informasi Keuangan Daerah ………………………………………… 6
Kerangka Umum Sistem Akuntansi Keuangan Daerah ……………………………………….. 8
Bagan Arus Prosedur Penyusunan Anggaran ……………………………………………………. 10
Bagan Arus Prosedur Akuntansi Anggaran (APBD) ……………………………………………. 13
Bagan Arus Prosedur Akuntansi Alokasi Anggaran…………………………………………….. 15
Bagan Arus Prosedur Akuntansi Pendapatan…………………………………………………….. 17
Bagan Arus Prosedur Akuntansi Penerimaan Perhitungan Fihak Ketiga (PFK)………. 19
Bagan Arus Prosedur Akuntansi Belanja Operasional Beban Tetap ……………………… 22
Bagan Arus Prosedur Akuntansi Pertanggungjawaban ……………………………………….. 24
Bagan Arus Prosedur Akuntansi Belanja Modal Beban Tetap………………………………. 26
Bagan Arus Prosedur Akuntansi Pengeluaran Perhitungan Fihak Ketiga (PFK)……… 28
Bagan Arus Prosedur Akuntansi Penyertaan Modal Pemerintah/Invest Permanen …. 31
Bagan Arus Prosedur Akuntansi Pencatatan Aset Tetap …………………………………….. 34
Bagan Arus Prosedur Akuntansi Penghapusan Aset Tetap …………………………………. 36
Bagan Arus Prosedur Akuntansi Pembentukan Dana Cadangan………………………….. 38
Bagan Arus Prosedur Akuntansi Pencairan Dana Cadangan……………………………….. 40
Bagan Arus Prosedur Akuntansi Penerimaan Pembiayaan Dari
Penjualan Aset Daerah …………………………………………………………………………………… 42
Bagan Arus Prosedur Pelaporan DAU & DAK Ke Menteri Keuangan ……………………. 44
Bagan Arus Prosedur Pelaporan APBD ke DPRD………………………………………………. 46
(Anggaran)
SIKLUS KEUANGAN DAERAH
Pelaporan
(Perhitungan
Realisasi Anggaran)
Pembukuan dan
Perhitungan
Pelaksanaan Belanja
Operasional dan
Belanja Modal
Penerimaan
Pendapatan
Penelaahan Otorisasi
Kredit Anggaran
Penyusunan
Anggaran
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
2
SIKLUS KEUANGAN DAERAH (ANGGARAN)
1. Siklus keuangan daerah dimulai dengan penyusunan anggaran. Penyusunan
Anggaran dimulai dengan menganalisis Laporan Pertanggungjawaban tahun
lalu yang menghasilkan Rencana Anggaran Pendapatan dan Belanja Daerah
(RAPBD). RAPBD akan dibahas dengan DPRD dan menjadi Perda APBD.
2. Untuk merealisasi pelaksanaan APBD, maka dibuat Otorisasi Kredit Anggaran
(OKA), Lembaran Kerja (LK) dan Petunjuk Operasional (PO) Penyusunan OKA
ini dilakukan oleh Unit Anggaran dengan Saruan kerja berdasarkan usulan
OKA, LK dan PO yang disampaikan oleh Satuan Kerja. OKA, LK, dan PO
selanjutnya disahkan oleh Kepala Unit Anggaran.
3. Satuan Kerja melakukan pemungutan pendapatan dan melakukan penyetoran
dana ke kas daerah dengan STS dan melakukan realisasi pengeluaran dengan
SPM . STS dan SPM tersebut akan menjadi dokumen sumber pembukuan
pendapatan dan belanja.
4. Unit Pembukuan akan menerima dokumen sumber pendapatan dan
pengeluaran (APBD, OKA, STS, SPM) dan membukukannya secara periodik.
Pada akhir tahun, Unit Pembukuan membuat Laporan Pertanggungjawaban
berupa Laporan Perhitungan APBD, Neraca dan Laporan Arus Kas yang
selanjutnya diserahkan ke Unit Perhitungan Anggaran untuk dianalisis.
5. Unit Perhitumgam Anggaran menganalisis Laporan Pertanggungjawaban dan
melengkapi Laporan Pertanggungjawaban tersebut dengan Nota Perhitungan
Anggaran. selanjutnya Laporan Pertanggungjawaban (Laporan Perhitungan
Anggaran, Neraca, Laporan Arus Kas dan Nota Perhitungan Anggaran)
disampaikan ke pada Kepala Daerah.
6. Kepala Daerah menyampaikan Laporan Pertanggungjawaban ke DPRD
sebagai pertanggungjawaban pelaksanaan anggaran Laporan
Pertanggungjawaban
UNIT PEMBUKUAN PANITIA ANGGARAN DPRD
SIKLUS KEUANGAN DAERAH (TERINCI)
UNIT ANGGARAN DAN UNIT UNIT PERBENDAHARAAN SATKER
UNIT PERHITUNGAN PENDAPATAN DAERAH KAS DAERAH

























































































































































































































































































































































































































































































































Laporan Perhitungan
Anggaran, Neraca,
Aliran Kas, Nota
Perhitungan
Perhitungan
Anggaran
Buku Besar/
Rekening
Penyusunan
Anggaran
Penelaahan
RAPBD
Pembuku
an
Lap. Perhitungan
Anggaran, Neraca,
Aliran Kas
Rancangan
APBD
Rancangan
APBD
Usulan OKA Rancangan APBD
Pembahasan
RAPBD dgn
Panitia Anggaran
APBD
APBD
APBD
Pembuatan OKAOKA
APBD
OKA
OKA
APBD
OKA
OKA
Pelaksanaan
anggaran
STS STS
Terbitkan
SPM
STS
SPP SPP
SPM
STS
SPP
Penerimaan dan
Pembayaran Kas
Buku Kas Umum
Daerah
APBD
OKA
STS
SPM
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
4
SIKLUS KEUANGAN DAERAH (TERINCI)
1. Unit Anggaran bersama dengan Unit Bina Pendapatan Daerah, melakukan
penyusunan anggaran dengan melihat masukan baik berupa data keuangan
tahun sebelumnya (Laporan Perhitungan Anggaran, Neraca, Aliran Kas, dan
Nota Perhitungan) maupun berupa usulan Otorisasi Kredit Anggaran (OKA)
dari masing-masing Satuan Kerja.
2. Penyusunan anggaran oleh Unit Keuangan menghasilkan Rancangan
Anggaran Pendapatan dan Belanja Daerah (RAPBD), yang selanjutnya akan
diserahkan ke Panitia Anggaran yang terdiri dari Badan Perencanaan
Pembangunan Daerah (Bappeda), Unit Pengawasan Daerah, Unit-unit
Keuangan, Unit Pembinaan Pendapatan Daerah, Unit Bina Program, Satuan
Kerja yang bersangkutan, dan Satuan Kerja terkait untuk ditelaah.
3. RAPBD yang telah ditelaah oleh Panitia anggaran selanjutnya dibahas oleh
Panitia Anggaran dengan DPRD. DPRD lebih lanjut menyetujui RAPBD
menjadi APBD dan menyerahkannya ke Unit Anggaran dan Unit Pendapatan
Daerah.
4. Sesudah Pemerintah Daerah mensahkan APBD menjadi Perda APBD, Unit
Anggaran akan membuat OKA sesudah melakukan pembahasan dengan
Satuan Kerja yang terkait. OKA-OKA tersebut diserahkan oleh Unit Anggaran
ke Satuan Kerja yang terkait. Disamping itu Unit Anggaran juga menyerahkan
APBD dan OKA ke Kas Daerah, Unit perbendaharaan dan Unit Pembukuan.
5. Berdasarkan OKA yang diterima, Satuan Kerja mengajukan Surat Permintaan
Pembayaran (SPP) untuk realisasi belanja dan Surat Tanda Setoran (STS)
untuk penyetoran pendapatan ke Unit Perbendaharaan.
6. Unit Perbendaharaan menerima SPP dan melakukan penelitian SPP tersebut
dengan OKA, Lembar Kerja maupun Petunjuk Operasional yang ada di Unit
Perbendaharaan dan selanjutnya menerbitkan Surat Pemerintah Membayar,
Unit perbendaharaan juga mensahkan STS yang diserahkan oleh Satuan Kerja
dengan mencap STS tersebut. SPM tersebut diserahkan oleh Unit
Perbendaharaan ke Kas daerah dan Unit Pembukuan.
7. Sebagai konsekuensi dari pelaksanaan belanja operasional, belanja modal,
dan penerimaan pendapatan daerah, Kas Daerah melaksanakan kegiatan
yang berkaitan dengan penerimaan, pendapatan, pengeluaran, dan belanja
berdasarkan SPM dan STS yang telah disahkan oleh Unit Perbendaharaan.
Pelaksanaan kegiatan ini dicatat dalam Buku Besar Kas Umum.
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
5
8. Anggaran dan Realisasi APBD secara keseluruhan akan dibukukan secara
computerized oleh Unit Pembukuan dan hasilnya dalam bentuk Buku Besar
Pengeluaran. Pada akhir periode anggaran, sistem akuntansi berbasis
komputer ini menghasilkan Laporan Perhitungan Anggaran, Neraca, dan Aliran
Kas.
9. Unit Perhitungan selanjutnya melakukan perhitungan anggaran yang akan
menghasilkan Laporan Perhitungan Anggaran, Neraca, Aliran Kas, dan Nota
Perhitungan sebagai wujud Laporan Pertanggungjawaban Keuangan oleh
pemerintah daerah dalam rangka memenuhi akuntabilitas kinerja instansi
pemerintah pada khususnya dan akuntabilitas publik pada umumnya.
10. Laporan Pertanggungjawaban Keuangan diatas akan menjadi umpan balik
dalam penyusunan anggaran di tahun anggaran berikutnya.
KERANGKA UMUM SISTEM INFORMASI AKUNTANSI KEUANGAN DAERAH
UNIT PENDAPATAN DAERAH UNIT-UNIT KEUANGAN UNIT PERLENGKAPAN KEPALA DAERAH















































































SERVER
PC PC PC PC
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
7
KERANGKA UMUM
SISTEM INFORMASI AKUNTANSI KEUANGAN DAERAH
Sistem Informasi Akuntansi Keuangan Daerah mempunyai karakteristik sbb:
1. Centralized Database
Sistem Informasi Akuntansi Keuangan Daerah (SIAKD) merupakan sistem
akuntansi yang berbasis relational database dengan pola database
tersentralisir (centralized single database) yang dapat diakses oleh seluruh
unit. Dengan digunakannya centralized single database maka pengelolaan
database ini lebih mudah karena kesamaan master table referensi selalu
terjamin dan database selalu dalam kondisi normal. Selain itu penggunaan
single database ini tidak membutuhkan proses upload dan download karena
seluruh user terhubung ke database melalui Local Area Network (LAN).
Dengan centralized single database, maka para user dapat berbagi
penggunaan data, sehingga untuk data yang sama, user tidak perlu menginput
kembali. Namun demikian kewenangan user atas suatu data dalam tabel
dibatasi sesuai dengan tugas pokok user tersebut, sehingga tidak seluruh user
berhak mengubah record dalam suatu tabel.
2. Distributed Access With Group of Users
Database Sistem Informasi Akuntansi Keuangan Daerah tersentralisir di Unitunit
Keuangan, namun database ini dapat diakses oleh seluruh user yang
punya otorisasi. Owner database ini adalah Unit Perbendaharaan, sehingga
unit ini mempunyai privilege tertinggi. User yang lain diberi hak membaca atau
mengupdate tabel-tabel tertentu. Misalkan Unit Perlengkapan diberi hak
membaca tabel SPMU tapi tidak dapat mengupdatenya, namun Biro
Perlengkapan ini diberi hak membaca dan mengupdate tabel rincian aset
tetap. Dengan distributed access ini maka Kepala Daerah setiap saat dapat
memantau perkembangan realisasi APBD.
3. Wide Area Network (WAN) dan Local Area Network (LAN)
Seluruh user atau pengguna Sistem Informasi Akuntansi Keuangan Daerah
terhubung dalam suatu jaringan WAN. WAN merupakan jaringan yang
menghubungkan antar LAN. Dengan WAN dan LAN ini seluruh user dapat
mengakses Database SIAKD yang terletak di Server. Untuk kepentingan
security maka seluruh transfer data antar LAN harus dalam kondisi encrypted.
Untuk setiap koneksi antar LAN juga digunakan firewall sehingga hanya user
yang punya otorisasi yang dapat masuk ke sistem.
SATKER UNIT PEMBUKUAN DAN UNIT PERHITUNGAN KEPALA DAERAH
KERANGKA UMUM SISTEM AKUNTANSI KEUANGAN DAERAH 







































































































































































Dokumen
Sumber
Dokumen
Sumber
Jurnal
Buku Besar
Laporan
Keuangan
Laporan
Keuangan
Laporan
Keuangan
Buku
Pembantu
Posting
Penjurnalan
Pelaporan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
9
KERANGKA UMUM SISTEM AKUNTANSI KEUANGAN DAERAH
1. Satuan Kerja memberikan dokumen-dokumen sumber (DS) seperti Surat
Perintah Membayar Uang (SPMU) dan Surat Tanda Setoran (STS) dari
transaksi keuangannya kepada Unit Keuangan Pemerintah Daerah.
2. Unit Pembukuan dan Unit Perhitungan melakukan pembukuan bulanan DS
tersebut dengan menggunakan komputer akuntansi (komputer yang telah
disiapkan untuk keperluan akuntansi) termasuk perangkat lunak (software)
akuntansi.
3. Dari proses akuntansi tersebut dihasilkan Jurnal yang sekaligus diposting
kedalam Buku Besar dan Buku Pembantu secara otomatis untuk setiap Satuan
Kerja.
4. Bila dokumen di atas telah diverifikasi dan benar maka dilanjutkan dengan
proses komputer untuk pembuatan Laporan Pertanggungjawaban (LPJ).
5. LPJ dikirimkan kepada Kepala Daerah sebagai pertanggung jawaban Satuan
Kerja atas pelaksanaan anggaran, satu copy dikirim kepada Satuan Kerja
yang bersangkutan untuk kebutuhan pertanggungjawaban dan manajemen,
satu copy untuk arsip Unit Perhitungan.
LPJ konsolidasi juga harus diberikan kepada Kepala Daerah agar dapat
mengetahui keseluruhan realiasi APBD pada suatu periode.
SATUAN KERJA UNIT ANGGARAN PANITIA ANGGARAN DPRD UNIT PERBENDAHARAAN UNIT PEMBUKUAN
BAGAN ARUS PROSEDUR PENYUSUNAN ANGGARAN 





































































































































































































































































































































































































Perevisian
RAPBD
Bahas & Rekam
OKA, LK, PO dgn
Sat. Kerja
Pembuatan
SKO
Ke Proses
Akuntansi
Anggaran
APBD yg
disetujui
APBD
APBD yg
disetujui
APBD yg
Disetujui
RAPBD Hasil
Perbaikan
SKO
Draft RAPBD
Penyusunan
Usulan OKA, LK,
PO.
Rekam dan
konsolidasi Usulan
OKA, LK, PO
Penelaahan
Draft RAPBD
Pembahasan
RAPBD
Penyusunan
draft RAPBD
Propeda
Repetada
Renstra
Lap. Keu.
Tahun lalu
Ptjk Operasional
Lembaran Kerja
Usulan OKA
OKA Konsolid.
OKA Konsolidasi
draft RAPBD
draft RAPBD
RAPBD
RAPBD
RAPBD
RAPBD
Persetujuan
APBD
Ptjk Operasional
Lembaran Kerja
LK
PO
OKA
LK
PO
OKA
LK
PO
APBD
Ke Proses
Akuntansi
Alokasi
Anggaran
RAPBD Hasil
RAPBD Hasil
Perbaikan
Usulan OKA
Pengesahan
APBD
APBD
OKA
LK
PO
OKA
APBD yg
disetujui
APBD yg
Disetujui
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
11
PROSEDUR PENYUSUNAN ANGGARAN
1. Untuk menerapkan penyusunan anggaran berdasarkan kinerja yang
menggambarkan klasifikasi anggaran berdasarkan kegiatan dan fungsi maka
anggaran harus disusun oleh setiap Satuan Kerja yang mewakili fungsi
pemerintahan daerah dengan mengacu pada Rencana Strategik (Renstra)
masing-masing. Renstra ini harus disusun oleh Satuan Kerja dalam koherensi
dengan Program Pembangunan Jangka Panjang Daerah (Propeda).
Berdasarkan Renstra, setiap Satuan Kerja menyusun usulan OKA yang
mencakup OKA Pendapatan (dulu Daftar Isian Pendapatan Daerah), Belanja
Operasi (dulu mirip dengan Daftar Usulan Kegiatan Daerah), Belanja Modal
(dulu mirip dengan Daftar Usulan Pembangunan Daerah), usulan Lembaran
Kerja (LK), Petunjuk Operasional (PO). Jika Pemerintah Daerah masih
mengeluarkan Rencana Pembangunan Tahunan Daerah (Repetada), maka
seluruh OKA yang disusun berdasarkan Renstra ini masih harus disesuaikan
sedapat mungkin dengan Repetada.
2. Setelah usulan OKA, LK dan PO disusun, masing-masing Satuan Kerja
menyerahkan usulan OKA, LK dan OKA tersebut kepada Unit Anggaran untuk
dikonsolidasikan menjadi OKA Konsolidasi Pemda secara keseluruhan.
Pengkonsolidasian OKA oleh Unit Anggaran dimaksudkan tidak saja untuk
merekam seluruh kegiatan dan dana yang diusulkan oleh masing-masing
Satuan Kerja, melainkan yang lebih penting adalah untuk meyakinkan apakah
usulan kegiatan telah sesuai dengan target rencana yang telah ditetapkan
dalam renstra. Sesudah konsolidasi OKA, Unit Anggaran menyusun Draft
RAPBD dan menyerahkan ke Panitia Anggaran
3. Panitia Anggaran yang terdiri atas Bappeda, Unit Pengawasan Daerah, Unitunit
Keuangan, Unit Perlengkapan, Unit Pembinaan Pendapatan Daerah,
melakukan penelahaan terhadap Draft RAPBD. Penelaahan anggaran oleh
Panitia Anggaran ini jauh lebih mendalam dan mencakup pertimbangan yang
lebih luas seperti kesesuaian dengan Program Pembangunan Nasional
(Propenas), Repetada, prediksi pendapatan daerah, evaluasi teknis
pelaksanaan, dukungan kelembagaan dan sumber daya manusia, dan
keselarasan antar regional serta arah pembangunan nasional.
4. Hasil penelaahan oleh Panitia Anggaran berupa RAPBD diserahkan ke DPRD
kepada Unit Anggaran untuk dibahas secara bersama antara Panitia Anggaran
dnegan DPRD. Jika ada unsur-unsur dalam RAPBD yang perlu diperbaiki
maka Panitia Anggaran memperbaiki RAPBD tersebut. Hasil perbaikan
tersebut dibahas lagi untuk disetujui DPRD menjadi APBD. APBD yang telah
disetujui oleh DPRD diserahkan ke Unit Anggaran.
5. APBD selanjutnya disahkan oleh Pemerintah. APBD yang telah disahkan
didistribusikan ke Unit Perbendaharaan sebagai acuan dalam penerbitan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
12
SPMU, Unit Pembukuan sebagai dokumen sumber untuk pembukuan APBD,
dan Arsip di Unit Anggaran.
6. Setelah APBD disahkan oleh pemerintah, Unit Anggaran melakukan
pembahasan Otorisasi Kredit Anggaran, Lembaran Kerja, dan Petunjuk
Operasi dengan Satuan Kerja. Selanjutnya OKA, LK, dan PO yang telah
disetujui didistribusikan ke Satuan Kerja untuk pengajuan SPP, Unit
Perbendaharaan untuk penerbitan SPMU, Unit Pembukuan sebagai dokumen
sumber pembukuan alokasi anggaran dan satu Arsip di Unit Anggaran.
7. Berdasarkan OKA, PO, dan LK Unit Perbendaharaan menyusun Surat
Keputusan Otorisasi dalam rangka pengendalian Kas Daerah.
8. Berdasarkan APBD Unit Pembukuan melakukan proses akuntansi anggaran.
Sedangkan OKA, PO, dan LK digunakan oleh Unit Pembukuan sebagai dasar
melakukan proses Akuntansi Alokasi Anggaran.
KEPALA DAERAH SATUAN KERJA
Catatan: Laporan keuangan hanya menyangkut informasi anggaran (APBD)
PROSEDUR AKUNTANSI ANGGARAN (APBD)
UNIT PEMBUKUAN
BAGAN ARUS












































































































































































































































































APBD
Posting
Cetak DTP
Pelaporan
Keuangan
Cek
Kebenaran
Proses PPK
DTP
Bandingkan DTP
dengan APBD
Benar?
Tidak
Benar?
Cetak
Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan Lap. Keuangan
Ya
Tidak
Ya
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
14
PROSEDUR AKUNTANSI ANGGARAN
1. Berdasarkan Peraturan Daerah tentang APBD, Unit Pembukuan akan
memposting jurnal penganggaran. Data APBD sudah terdapat dalam sistem
komputer yang merupakan hasil perekaman unit anggaran pada saat
membahas dan mengesahkan APBD. Proses posting ini dilakukan secara
komputer dan tidak memerlukan perekaman ulang data APBD. Di sini, jurnal
anggaran akan mencakup sekaligus jurnal estimasi pendapatan, apropriasi,
pembentukan cadangan, dan penerimaan pembiayaan dan saldo anggaran
lebih. Posting ini kemudian dicetak dalam bentuk Daftar Transaksi dan Posting
(DTP).
2. Untuk meyakinkan kebenaran hasil posting, data DTP kemudian dibandingkan
dengan APBD. Jika ada kesalahan, maka proses posting diulang kembali
sampai menghasilkan DTP yang sesuai dengan APBD.
3. Setelah DTP untuk APBD benar, dilakukan proses pembuatan Laporan
Pertanggungjawaban. Dalam proses ini dihasilkan lembar pengontrol yang
berfungsi sebagai alat untuk mengecek kebenaran proses pembuatan
pelaporan keuangan.
4. Jika lembar kontrol menunjukkan angka yang tidak sesuai, maka proses
pelaporan keuangan diulang sampai proses pelaporan keuangan benar. Jika
proses pelaporan keuangan sudah benar, maka Unit Pembukuan mencetak
Laporan Pertanggungjawaban. Laporan Pertanggungjawaban yang dihasilkan
untuk sementara hanya berisi data anggaran (APBD).
5. Laporan Pertanggungjawaban yang dihasilkan selanjutnya didistribusikan ke
Kepala Daerah dan Satuan Kerja.
KEPALA DAERAH SATUAN KERJA
Catatan: Laporan keuangan hanya berisi data alokasi anggaran
ke masing-masing satuan kerja.
PROSEDUR AKUNTANSI ALOKASI ANGGARAN
UNIT PEMBUKUAN
BAGAN ARUS














































































































 
























































































































OKA
Posting
Cetak DTP
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
DTP
Bandingkan DTP
dengan OKA
Benar?
Ya
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Akhir
Tahun?
Ya
Posting
Penutupan
Benar?
Tidak
Tidak
Tidak
Ya
Ya
Tidak
Lap. Keuangan Lap. Keuangan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
16
PROSEDUR ALOKASI ANGGARAN (OKA)
1. Berdasarkan dokumen sumber Otorisasi Kredit Anggaran, Unit Pembukuan
memposting jurnal penganggaran. Data OKA sudah terdapat dalam sistem
komputer yang merupakan hasil perekaman unit anggaran pada saat
membahas dan mengesahkan OKA. Proses posting ini dilakukan secara
komputer dan tidak memerlukan perekaman ulang data OKA. Posting ini
kemudian dicetak dalam bentuk Daftar Transaksi dan Posting (DTP).
2. Untuk meyakinkan kebenaran hasil posting, data DTP kemudian dibandingkan
dengan OKA. Jika ada kesalahan, maka proses posting diulang kembali
sampai menghasilkan DTP yang sesuai dengan OKA.
3. Setelah DTP untuk OKA benar, dilakukan proses pembuatan Laporan
Pertanggungjawaban. Dalam proses ini dihasilkan lembar pengontrol yang
berfungsi sebagai alat untuk mengecek kebenaran proses pembuatan
pelaporan keuangan.
4. Jika lembar kontrol menunjukkan angka yang tidak sesuai, maka proses
pelaporan keuangan diulang sampai proses pelaporan keuangan benar. Jika
proses pelaporan keuangan sudah benar, maka Unit Pembukuan mencetak
Laporan Pertanggungjawaban. Laporan Pertanggungjawaban yang dihasilkan
untuk sementara hanya berisi data alokasi anggaran (OKA).
5. Laporan Pertanggungjawaban yang dihasilkan selanjutnya didistribusikan ke
Kepala Daerah dan Satuan Kerja.
BAGAN ARUS
SATUAN KERJA/PENYETOR
PROSEDUR AKUNTANSI PENDAPATAN
UNIT PERBENDAHARAAN UNIT PEMBUKUAN










































































































Surat Tanda
Setoran
Surat Setoran
STS yang
disahkan
STS
Posting
Bulanan
Cetak DTP
DTP
Bandingkan
DTP dan STS
Benar? Koreksi
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Kirim ke Kepala
Daerah
Surat Tanda
Setoran
Pengesahan STS
STS
Tidak
Ya
Ya
Tidak
STS yang
disahkan
Perekaman STS
Rekap STS
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
18
PROSEDUR AKUNTANSI PENDAPATAN
1. Satuan Kerja atau Penyetor setelah melakukan pembayaran ke rekening Kas
Negara dan mendapat bukti setoran yaitu Surat Tanda Setoran (STS)
menyampaikan STS tersebut ke Unit Perbendaharaan.
2. Unit Perbendaharaan selanjutnya mengesahkan STS dengan memberi tera
ke STS tersebut. Unit Perbendaharaan selanjutnya merekam STS tersebut ke
dalam tabel STS dalam database, selanjutnya dibuat rekap STS. Satu
tembusan STS diserahkan ke Unit Pembukuan dan satu tembusan disimpan
sebagai arsip.
3. Unit Pembukuan mengarsipkan STS yang diterima dari Unit Perbendaharaan.
Secara bulanan Unit Pembukuan melakukan posting data STS yang sudah
terdapat dalam tabel STS divalidasi. Proses posting ini dilakukan secara
komputer dan tidak memerlukan perekaman ulang data STS. Dengan proses
posting ini maka data STS yang terdapat dalam tabel STS divalidasi akan
dicopy ke dalam tabel buku besar sesuai tabel posting rule yang tersedia
dalam database. Setelah dilakukan posting, selanjutnya dilakukan pencetakan
DTP. Selanjutnya DTP diteliti kebenarannya dan dibandingkan dengan STS.
Jika tidak benar proses posting diulang. Jika sudah benar, maka dilanjutkan
dengan proses pelaporan keuangan. Selanjutnya dilakukan cek kebenaran
proses pelaporan keuangan dengan membandingkan data yang dicetak dalam
lembar pengontrol. Jika belum benar, maka proses pelaporan keuangan
diulang. Jika sudah benar maka LK dicetak. Selanjutnya didistribusikan ke
Satuan Kerja, Kepala Daerah, dan Arsip.
BAGAN ARUS
PROSEDUR PENERIMAAN PERHITUNGAN FIHAK KETIGA (PFK)
UNIT PERBENDAHARAAN &
KAS DAERAH UNIT VERIFIKASI UNIT PEMBUKUAN FIHAK KE TIGA















































































































































SPP
Daftar Gaji &
Potongan PFK
SPM Ikuti Prosedur Belanja
Lakukan Pembayaran
& Pungut Potongan
SPM
Nota Kredit
SPM
Nota Kredit
SPM
Nota Kredit
Daftar Gaji &
Potongan PFK
Ikuti Prosedur
Pembukuan &
Pelaporan
Lap. Keuangan
Lap. PFK Lap. PFK
Daftar Gaji &
Potongan PFK
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
20
PROSEDUR AKUNTANSI
PENERIMAAN PERHITUNGAN FIHAK KETIGA (PFK)
1. Berdasarkan daftar gaji dan daftar potongan PFK, Unit Perbendaharaan akan
menerbitkan Surat Perintah Pembayaran (SPP). SPP akan direkam ke dalam
Database dan hasil perekaman tersebut akan dicetak. Hasil cetakan beserta
SPP akan dikirim ke Unit Verifikasi.
2. Unit Verifikasi melakukan verifikasi berkaitan dengan kebenaran materiil dan
formal SPP, serta kebenaran hasil rekaman dengan SPP. Jika Unit Verifikasi
menemukan ketidak benaran materiil dan formal di SPP, atau ketidak sesuaian
hasil rekaman dengan SPP maka Unit Verifikasi mengirimkan SPP beserta
Hasil rekamannya ke Unit Perbendaharaan, yang selanjutnya akan
memperbaikinya kemudian mengirimkannya kembali ke Unit Verifikasi.
Jika tidak ditemukan kesalahan, maka Unit Verifikasi akan membuat lembar
disposisi yang berisikan bahwa SPP dan Hasil rekaman SPP sudah benar
sehingga Unit Perbendaharaan sudah bisa mencetak SPM. SPP, hasil
rekaman SPP dan Lembar Disposisi akan dikirim ke Unit Perbendaharaan.
3. Unit Perbendaharaan akan menerima kembali SPP, hasil rekaman SPP dan
Disposisi Pencetakan SPM. Berdasarkan disposisi tersebut, Unit
Perbendaharaan akan mencetak SPMU 3 (tiga) lembar. SPMU akan dikirim ke
Kas daerah, Unit Pembukuan, dan arsip di Unit Perbendaharaan.
4. Berdasarkan SPMU yang diterima, Kas Daerah akan mentransfer dana ke
rekening Pihak Ketiga dan membuat 3 (tiga) lembar Nota Transfer sebagai
bukti transfer. Nota Transfer beserta SPMU akan dikirim ke Unit
Perbendaharaan, dan Nota Transfer akan diarsip di Kas Daerah.
5. Unit Perbendaharaan akan melakukan verifikasi terhadap Nota Transfer dan
SPMU yang diterima dari Kas Daerah untuk meneliti kebenaran apakah
transfer yang dilakukan oleh Kas Daerah telah sesuai dengan SPM yang
diterbitkan. Jika terjadi ketidaksesuaian, maka Unit Perbendaharaan akan
mengirimkannya kembali ke Kas Daerah, jika benar maka Nota Transfer dan
SPMU dikirim ke Unit Pembukuan.
6. Berdasarkan SPMU dan Nota Tranfer yang diterima dari Unit Perbendaharaan,
Unit Pembukuan mengarsipkan sementara sampai semua dokumen untuk
bulan transaksi yang sama terkumpul. Selanjutnya DS tersebut diproses dan
diposting dengan menggunakan data hasil perekaman Unit Perbendaharaan
dari database.
7. Dari posting tersebut akan dicetak DTP. DTP tersebut akan diverifikasi dengan
membandingkan DTP dengan DS (SPMU, STS, dll.). Jika dari hasil verifikasi
ditemukan ada ketidaksesuaian antara DTP dan DS maka akan dilakukan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
21
proses posting dan pencetakan DTP kembali. Jika DTP sudah sesuai dengan
dokumen sumbernya akan dilakukan proses pembuatan LPJ.
8. Proses pembuatan LPJ dilakukan dengan menggunakan data dari database
yang sama. Dari hasil proses pembuatan LPJ akan tercetak lembar pengontrol
yang akan diverifikasi untuk menguji kebenaran proses komputer dalam
membuat LPJ. Jika dari hasil verifikasi lembar pengontrol ditemukan kesalahan
proses pembuatan LPJ maka proses pembuatan LPJ diulang kembali sampai
proses pembuatan LPJ benar.
9. Jika proses pembuatan LPJ sudah benar maka LPJ akan dicetak. LPJ terdiri
dari laporan perhitungan, neraca, laporan arus kas dan laporan PFK. LPJ akan
dikirim ke Pihak Ketiga, Kas Daerah, Kepala Daerah, dan arsip.
BAGAN ARUS
SATUAN KERJA UNIT VERIFIKASI
PROSEDUR AKUNTANSI BELANJA OPERASIONAL BEBAN TETAP
UNIT PERBENDAHARAAN UNIT PEMBUKUAN





























































































































































































































































































SPP
Bukti Pendukung
SPP
Bukti
SPP
Bukti
SPP SPP
Teliti
Kelengkapan
Leng
kap?
Tidak
Perekaman &
Cetak Hasil
SPP
Ya
Printout
Rekaman
Printout
Rekaman
Verifikasi SPP
dengan SKO, Bukti
Pendukung dan
Printout
Benar?
SPP
Disposisi
Cetak SPMU
Printout Rekaman
Cetak SPMU
Disposisi
SPM
SPM
SPM
SPM
SPMU
Posting
Bulanan
Cetak DTP
DTP
Bandingkan DTP
dan SPMU
Benar? Koreksi
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Kirim ke Kepala
Daerah
Bukti
Pendukung
Bukti
Pendukung
Bukti
Pendukung
Bukti Pendukung
Printout Rekaman
Disposisi
Tidak
Ya
Tidak
Ya
Ya
Tidak
Menerima Bukti
pendukung dari
rekanan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
23
PROSEDUR AKUNTANSI
BELANJA OPERASIONAL BEBAN TETAP
1. Berdasarkan bukti-bukti pendukung yang diterima dari rekanan, Satuan Kerja
mengajukan SPP ke Unit Perbendaharaan disertai dengan bukti pendukung
antara lain faktur pembelian dan bukti pendukung lainnya.
2. Unit Perbendaharaan pertama meneliti kelengkapan dokumen SPP dan bukti
pendukung. Bila tidak lengkap maka berkas tersebut dikembalikan ke Satuan
Kerja. Bila sudah lengkap maka berkas SPP tersebut disampaikan ke petugas
Perekaman untuk direkam ke dalam tabel SPP dalam database, selanjutnya
dibuat printout rekaman dan dilampirkan ke berkas SPP. Berkas tersebut
selanjutnya disampaikan ke Unit Verifikasi.
3. Unit Verifikasi meneliti kebenaran perekaman SPP yaitu membandingkan
antara SPP dengan printout rekaman. Jika terdapat kesalahan dikembalikan ke
petugas perekaman. Jika sudah benar Unit Verifikasi meneliti kebenaran
hukum SPP dan bukti pendukungnya. Selanjutnya meneliti kesesuaian SPP
dengan SKO yang dapat dilakukan dengan membandingkan data SPP yang
sudah direkam dengan data SKO yang sudah ada dalam database. Jika tidak
sesuai maka dikembalikan ke Unit Perbendaharaan. Jika sudah sesuai maka
Unit Verifikasi dengan menggunakan menu komputer menyetujui SPP yang
secara otomatis komputer merekam data SPP ke dalam tabel SPMU dan
mencetak lembar disposisi cetak SPMU. Berkas SPP, dokumen pendukung,
printout rekaman, dan lembar disposisi cetak SPMU ke Unit Perbendaharaan.
4. Unit Perbendaharaan setelah menerima berkas dari Unit Verifikasi
selanjutnya mencetak SPMU berdasarkan data yang sekarang sudah terdapat
di tabel SPMU. Unit Perbendaharaan tidak dapat mengisi atau mengubah tabel
SPMU. Wewenang tersebut hanya diberikan kepada Unit Verifikasi. Unit
Perbendaharaan diberi hak membaca tabel tersebut sehingga unit ini dapat
mencetak SPMU. SPMU tersebut selanjutnya didistribusikan ke Satuan Kerja,
Unit Pembukuan, dan Arsip.
5. Unit Pembukuan mengarsipkan SPMU yang diterima dari Unit
Perbendaharaan. Secara bulanan Unit Pembukuan melakukan posting data
SPMU yang sudah terdapat dalam tabel SPMU. Proses posting ini dilakukan
secara komputer dan tidak memerlukan perekaman ulang data SPMU. Dengan
proses posting ini maka data SPMU yang terdapat dalam tabel SPMU akan
dicopy ke dalam tabel buku besar sesuai tabel posting rule yang tersedia
dalam database. Setelah dilakukan posting, selanjutnya dilakukan pencetakan
DTP dan DTP diteliti kebenarannya dan dibandingkan dengan SPMU. Jika
tidak benar proses posting diulang. Jika sudah benar, maka dilanjutkan dengan
proses pelaporan keuangan. Selanjutnya dilakukan cek kebenaran proses
pelaporan keuangan dengan membandingkan data yang dicetak dalam lembar
pengontrol. Jika belum benar, maka proses pelaporan keuangan diulang. Jika
sudah benar maka LPJ dicetak. Selanjutnya didistribusikan ke Satuan Kerja,
Kepala Daerah, dan Arsip.
BAGAN ARUS
PROSEDUR AKUNTANSI PERTANGGUNGJAWABAN UUDP (SPJ)
SATUAN KERJA UNIT PERBENDAHARAAN UNIT VERIFIKASI UNIT PEMBUKUAN 

























































































































































































































Teliti Kelengkapan
Lengkap?
Tidak
Perekaman &
Cetak Hasil
Ya
Verifikasi SPJ
dengan Faktur,
Buku UUDP,
Printout rekaman
Benar?
Disposisi Pengesahan
Sisa UUDP
Sahkan SPJ
SPJ Sah
SPJ Sah
Dikirim ke Unit
Perlengkapan
SPJ Sah
Posting
Bulanan
Cetak DTP
DTP
Bandingkan
DTP dan SPM
Benar? Koreksi
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Kirim ke Kepala
Daerah
SPJ
Faktur
Faktur
SPJ
Faktur
SPJ
Faktur
SPJ
Faktur
SPJ
Printout
Rekaman
Faktur
SPJ
Printout
Rekaman
Faktur
SPJ
Printout
Disposisi
Faktur
SPJ
Printout
SPJ Sah
SPJ Sah
SPJ Sah
Tidak
Ya
Tidak
Ya
Tidak
Ya
Disposisi
Menerima faktur
dari Rekanan
Buat SPJ
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
25
PROSEDUR AKUNTANSI
PERTANGGUNGJAWABAN UUDP (SPJ)
1. Berdasarkan bukti pengeluaran yang diterima dari rekanan antara lain berupa
faktur, Satuan Kerja mengajukan Surat Pertanggungjawaban (SPJ) ke Unit
Perbendaharaan yang disertai dengan bukti pendukung.
2. Unit Perbendaharaan pertama meneliti kelengkapan dokumen SPJ, faktur,
dan bukti pendukung lainnya. Bila tidak lengkap maka berkas tersebut
dikembalikan ke Satuan Kerja. Bila sudah lengkap maka berkas SPJ tersebut
disampaikan ke petugas Perekaman untuk direkam ke dalam tabel SPJ dalam
database, selanjutnya dibuat printout rekaman dan dilampirkan ke berkas SPJ.
Berkas tersebut selanjutnya disampaikan ke Unit Verifikasi.
3. Unit Verifikasi meneliti kebenaran perekaman SPJ yaitu membandingkan
antara SPJ dengan printout rekaman. Jika terdapat kesalahan dikembalikan ke
petugas perekaman. Jika sudah benar Unit Verifikasi meneliti kebenaran
hukum SPJ, Faktur, dan bukti pendukungnya. Selanjutnya meneliti kesesuaian
SPJ dengan SKO dan SPM Beban Sementaranya. Verifikasi ini dapat
dilakukan dengan membandingkan data SPJ yang sudah direkam dengan data
SKO dan data SPM Beban Sementara yang sudah ada dalam database. Jika
tidak sesuai maka dikembalikan ke Unit Perbendaharaan. Jika sudah sesuai
maka Unit Verifikasi dengan menggunakan menu komputer menyetujui SPJ
yang secara otomatis komputer merekam data SPJ ke dalam tabel SPJ
divalidasi dan mencetak lembar disposisi cetak SPJ Sah. Berkas SPJ, Faktur,
dokumen pendukung, printout rekaman, dan lembar disposisi cetak SPJ ke
Unit Perbendaharaan.
4. Unit Perbendaharaan setelah menerima berkas dari Unit Verifikasi
selanjutnya mensahkan SPJ berdasarkan data yang sekarang sudah terdapat
di tabel SPJ divalidasi. Unit Perbendaharaan tidak dapat mengisi atau
mengubah tabel SPJ divalidasi. Wewenang tersebut hanya diberikan kepada
Unit Verifikasi. Unit Perbendaharaan diberi hak membaca tabel tersebut
sehingga unit ini dapat mensahkan SPJ. SPJ tersebut selanjutnya
didistribusikan ke Satuan Kerja, Unit Pembukuan, dan Arsip.
5. Unit Pembukuan mengarsipkan SPJ Sah yang diterima dari Unit
Perbendaharaan. Secara bulanan Unit Pembukuan melakukan posting data
SPJ yang sudah terdapat dalam tabel SPJ divalidasi. Proses posting ini
dilakukan secara komputer dan tidak memerlukan perekaman ulang data SPJ.
Dengan proses posting ini maka data SPJ yang terdapat dalam tabel SPJ
divalidasi akan dicopy ke dalam tabel buku besar sesuai tabel posting rule
yang tersedia dalam database. Setelah dilakukan posting, selanjutnya
dilakukan pencetakan DTP, DTP diteliti kebenarannya dan dibandingkan
dengan SPJ Sah. Jika tidak benar proses posting diulang. Jika sudah benar,
maka dilanjutkan dengan proses pelaporan keuangan. Selanjutnya dilakukan
cek kebenaran proses pelaporan keuangan dengan membandingkan data
yang dicetak dalam lembar pengontrol. Jika belum benar, maka proses
pelaporan keuangan diulang. Jika sudah benar maka LPJ dicetak. Selanjutnya
didistribusikan ke Satuan Kerja, Kepala Daerah, dan Arsip.
BAGAN ARUS
UNIT PERBENDAHARAAN PEMBUKUAN
PROSEDUR AKUNTANSI BELANJA MODAL BEBAN TETAP
REKANAN SATUAN KERJA UNIT VERIFIKASI















































































































































































































































































































































Teliti
Kelengkapan
Leng-kap?
Tidak
Perekaman &
Cetak Hasil
Ya
Verifikasi SPP
dengan SKO,
BAST & Faktur
Benar?
Disposisi Cetak
SPM
Cetak SPM
SPM
SPM
SPM
SPM
SPM
Posting
Bulanan
Cetak DTP
DTP
Bandingkan
DTP dan SPM
Benar? Koreksi
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Kirim ke Kepala
Daerah
Buat Berita
Acara Serah
Terima Barang
BASTB
Buat SPP
Faktur
BASTB
SPP
Faktur
BASTB
SPP
Faktur
BASTB
SPP
Faktur
BASTB
SPP
Printout
Rekaman
Faktur
BASTB
SPP
Printout
Rekaman
Faktur
BASTB
SPP
Printout
Disposisi
Faktur
BASTB
SPP
Printout
Disposisi
Tidak
Ya
Tidak
Ya
Ya
Tidak
Faktur Faktur
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
27
PROSEDUR AKUNTANSI BELANJA MODAL BEBAN TETAP
1. Rekanan mengirimkan barang disertai Faktur Tagihan ke Satuan Kerja.
2. Satuan Kerja setelah menerima barang membuat Berita Acara Serah Terima
Barang (BASTB). Setelah BASTB ditandatangani, Satuan Kerja membuat
SPP. Selanjutnya mengajukan SPP, Faktur, BASTB dan bukti pendukung
lainnya ke Unit Perbendaharaan.
3. Unit Perbendaharaan pertama meneliti kelengkapan dokumen SPP, faktur,
BASTB dan bukti pendukung. Bila tidak lengkap maka berkas tersebut
dikembalikan ke Satuan Kerja. Bila sudah lengkap maka berkas SPP tersebut
disampaikan ke petugas Perekaman untuk direkam ke dalam tabel SPP dalam
database, selanjutnya dibuat printout rekaman dan dilampirkan ke berkas SPP.
Berkas tersebut selanjutnya disampaikan ke Unit Verifikasi.
4. Unit Verifikasi meneliti kebenaran perekaman SPP yaitu membandingkan
antara SPP dengan printout rekaman. Jika terdapat kesalahan dikembalikan ke
petugas perekaman. Jika sudah benar Unit Verifikasi meneliti kebenaran
hukum SPP, Faktur, BASTB dan bukti pendukungnya. Selanjutnya meneliti
kesesuaian SPP dengan SKO yang dapat dilakukan dengan membandingkan
data SPP yang sudah direkam dengan data SKO yang sudah ada dalam
database. Jika tidak sesuai maka dikembalikan ke Unit Perbendaharaan. Jika
sudah sesuai maka Unit Verifikasi dengan menggunakan menu komputer
menyetujui SPP yang secara otomatis komputer merekam data SPP ke dalam
tabel SPMU dan mencetak lembar disposisi cetak SPMU. Berkas SPP, Faktur,
BASTB, dokumen pendukung, printout rekaman, dan lembar disposisi cetak
SPMU ke Unit Perbendaharaan.
5. Unit Perbendaharaan setelah menerima berkas dari Unit Verifikasi
selanjutnya mencetak SPMU berdasarkan data yang sekarang sudah terdapat
di tabel SPMU. Unit Perbendaharaan tidak dapat mengisi atau mengubah tabel
SPMU. Wewenang tersebut hanya diberikan kepada Unit Verifikasi. Unit
Perbendaharaan diberi hak membaca tabel tersebut sehingga unit ini dapat
mencetak SPMU. SPMU tersebut selanjutnya didistribusikan ke Satuan Kerja,
Unit Pembukuan, dan Arsip.
6. Unit Pembukuan mengarsipkan SPMU yang diterima dari Unit
Perbendaharaan. Secara bulanan Unit Pembukuan melakukan posting data
SPMU yang sudah terdapat dalam tabel SPMU. Proses posting ini dilakukan
secara komputer dan tidak memerlukan perekaman ulang data SPMU. Dengan
proses posting ini maka data SPMU yang terdapat dalam tabel SPMU akan
dicopy ke dalam tabel buku besar sesuai tabel posting rule yang tersedia
dalam database. Setelah dilakukan posting, selanjutnya dilakukan pencetakan
DTP. Selanjutnya DTP diteliti kebenarannya dan dibandingkan dengan SPMU.
Jika tidak benar proses posting diulang. Jika sudah benar, maka dilanjutkan
dengan proses pelaporan keuangan. Selanjutnya dilakukan cek kebenaran
proses pelaporan keuangan dengan membandingkan data yang dicetak dalam
lembar pengontrol. Jika belum benar, maka proses pelaporan keuangan
diulang. Jika sudah benar maka LPJ dicetak. Selanjutnya didistribusikan ke
Satuan Kerja, Kepala Daerah, dan Arsip.
BAGAN ARUS
Jumlah PFK yang harus ditransfer
KAS DAERAH PIHAK KE TIGA
PROSEDUR PENGELUARAN PERHITUNGAN FIHAK KETIGA (PFK)
UNIT PERBENDAHARAAN UNIT VERIFIKASI UNIT PEMBUKUAN












































































































































































































SPMU Rekapitulasi PFK
Proses Transfer Ke
Pihak Ketiga
Rekapitulasi PFK
SPMU
Nota Transfer
Verifikasi
SPMU
Nota Transfer
SPMU
Nota Transfer
Ikuti Proses Pembukuan
& Pelaporan Keuangan
Lap. Keuangan Lap. PFK
Lap. PFK
SPMU
SPMU
Nota Transfer
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
29
PROSEDUR AKUNTANSI
PENGELUARAN PERHITUNGAN FIHAK KETIGA (PFK)
1. Berdasarkan rekapitulasi PFK, Unit Perbendaharaan akan menerbitkan SPP.
SPP akan direkam ke dalam Database dan hasil perekaman tersebut akan
dicetak. Hasil cetakan beserta SPP akan dikirim ke Unit Verifikasi.
2. Unit Verifikasi melakukan verifikasi berkaitan dengan kebenaran materiil dan
formal SPP, serta kebenaran hasil rekaman dengan SPP. Jika Unit Verifikasi
menemukan ketidak benaran materiil dan formal di SPP, atau ketidaksesuaian
hasil rekaman dengan SPP maka Unit Verifikasi mengirimkan SPP beserta
hasil rekamannya ke Unit Perbendaharaan. Unit Perbendaharaan akan
memperbaikinya kemudian mengirimkannya kembali ke Unit Verifikasi.
Jika tidak ditemukan kesalahan, maka Unit Verifikasi akan membuat lembar
disposisi yang berisikan bahwa SPP dan Hasil rekaman SPP sudah benar
sehingga Unit Perbendaharaan sudah bisa mencetak SPM. SPP, Hasil
Rekaman SPP dan Lembar Disposisi akan dikirim ke Unit Perbendaharaan.
3. Unit Perbendaharaan akan menerima kembali SPP, hasil rekaman SPP dan
Disposisi Pencetakan SPM. Berdasarkan disposisi tersebut, Unit
Perbendaharaan akan mencetak SPMU 3 (tiga) lembar. SPMU akan dikirim ke
Kas daerah dan arsip di Unit Perbendaharaan.
4. Berdasarkan SPMU yang diterima, Kas Daerah akan mentransfer dana ke
Pihak Ketiga dan membuat 3 (tiga) lembar Nota Transfer sebagai bukti
transfer. Nota transfer beserta SPMU akan dikirim ke Unit Perbendaharaan,
dan Nota Transfer akan dikirim ke Pihak Ketiga dan arsip di Kas Daerah.
5. Unit Perbendaharaan akan melakukan verifikasi terhadap Nota Transfer dan
SPMU yang diterima dari Kas Daerah untuk meneliti kebenaran apakah
transfer dan yang dilakukan oleh Kas Daerah telah sesuai dengan SPM yang
diterbitkan. Jika terjadi ketidaksesuaian, maka Unit Perbendaharaan akan
mengirimkannya kembali ke Kas Daerah, jika benar maka Nota Transfer dan
SPMU dikirim ke Unit Pembukuan.
6. Berdasarkan SPMU dan Nota Transfer yang diterima dari Unit
Perbendaharaan, Unit Pembukuan mengarsipkan sementara sampai semua
dokumen untuk bulan transaksi yang sama terkumpul. Selanjutnya DS tersebut
diproses dan diposting dengan menggunakan data hasil perekaman Unit
Perbendaharaan dari database.
7. Dari posting tersebut akan dicetak DTP. DTP tersebut akan diverifikasi dengan
membandingkan DTP dengan DS (SPMU, STS, dll.). Jika dari hasil verifikasi
ditemukan ada ketidaksesuaian antara DTP dan DS maka akan dilakukan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
30
proses posting dan pencetakan DTP kembali. Jika DTP sudah sesuai dengan
dokumen sumbernya akan dilakukan proses pembuatan LPJ.
8. Proses pembuatan LPJ dilakukan dengan menggunakan data dari database
yang sama. Dari hasil proses pembuatan LPJ akan tercetak lembar pengontrol
yang akan diverifikasi untuk menguji kebenaran proses komputer dalam
membuat LPJ. Jika dari hasil verifikasi lembar pengontrol ditemukan kesalahan
proses pembuatan LPJ maka proses pembuatan LPJ diulang kembali sampai
proses pembuatan LPJ benar.
9. Jika proses pembuatan LPJ sudah benar maka LPJ akan dicetak. LPJ terdiri
dari Laporan Perhitungan, Neraca, Laporan Arus Kas dan Laporan PFK. LPJ
akan dikirim ke Pihak Ketiga, Kas Daerah, Kepala Daerah, dan arsip.
BAGAN ARUS
BUMD/PERUSAHAAN SEKDA/KEPALA DAERAH
PROSEDUR PENYERTAAN MODAL PEMERINTAH/INVESTASI PERMANEN
KAS DAERAH UNIT PERBENDAHARAAN UNIT VERIFIKASI UNIT PEMBUKUAN




























































































































































































































































































































































































































































































































































































































































































































SPP
MoU PMP
Teliti untuk Proses
Pencairan
SPMU
MoU PMP
Nota Transfer
Siapkan Bukti
PMP
Bukti PMP
Nota Transfer
SPMU
Teliti, siapkan
Nota Transfer
SPMU
Nota Transfer
OKA Belanja
Modal
Rencana PMP
MoU PMP
Siapkan& Rekam
SPP
OKA Belanja
Modal
Rencana PMP
MoU PMP
SPP
OKA Belanja
Modal
Rencana PMP
MoU PMP
SPMU
SPMU
Nota Transfer
Bukti PMP
SPP
OKA Belanja
Modal
Rencana PMP
MoU PMP
SPP
OKA Belanja
Modal
Rencana PMP
MoU PMP
MoU PMP
Teliti untuk
Persetujuan
SPMU
Nota Transfer
Bukti PMP 2
Posting Bulanan &
Cetak DTP
Daftar Transaksi &
Posting
Proses Pelaporan
Bulanan
Lembar Pengontrol
Laporan PMP
Laporan
Keuangan
SPMU
Nota Transfer
Bukti PMP
Cek Kebenaran Proses
Pembuatan Lap.
Keuangan, bila benar
cetak laporan
Laporan PMP
Laporan
Keuangan
Tidak
Verifikasi Ya
Keabsahan PMP
Verifikasi, Disposisi
cetak SPM setelah
persetujuan Kepala
Daerah
Bandingkan DTP dan
SPMU, Nota Transfer
Cetak SPMU
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
32
PROSEDUR AKUNTANSI
PENYERTAAN MODAL PEMERINTAH/INVESTASI PERMANEN
1. Kepala Daerah/Setda berdasarkan Rencana Penyertaan Modal Pemerintah
(Rencana PMP) yang telah disetujui dalam APBD membuat Memorandum of
Understanding Penyertaan Modal Pemerintah (MoU PMP) dengan Badan
Usaha Milik Daerah (BUMD)/Perusahaan dimana pemerintah daerah akan
melakukan penyertaan atau investasi permanen.
2. Berdasarkan MoU PMP yang telah disepakati, Unit Perbendaharaan
menyiapkan proses pencairannya berdasarkan Otorisasi Kredit Anggaran
Belanja Modal (OKA Belanja Modal) dan Rencana PMP. Menyiapkan dan
merekam SPP dalam komputer akuntansi.
3. Unit Perbendaharaan menyerahkan MoU PMP, Rencana PMP, OKA Belanja
Modal dan SPP kepada Unit Verifikasi.
4. Unit Verifikasi melakukan verifikasi untuk kebenaran formal dan material
PMP, bila memenuhi persyaratan membuat Disposisi kepada Unit
Perbendaharaan untuk membuat SPMU, mengirimkan Mou PMP, Rencana
PMP, OKA Belanja Modal dan SPP kepada Kepala Daerah/Setda.
5. Kepala Daerah/Setda meneliti kesesuaian dokumen-dokumen tersebut
dengan MoU PMP yang dimilikinya untuk memberi persetujuan dalam lembar
disposisi dan mengirimkan dokumen-dokumen tersebut kepada Unit
Perbendaharaan.
6. Berdasarkan Mou PMP, Rencana PMP, OKA Belanja Modal dan SPP yang
telah didisposisi persetujuan Kepala Daerah/Setda, Unit Perbendaharaan
mencetak SPMU dan mengirimkan SPMU (bila perlu disertai foto copy MoU
PMP) kepada BUMD/Perusahaan yang dimaksud.
7. BUMD/Perusahaan meneliti kesesuaian SPMU dengan persyaratan dalam
MoU PMP untuk proses pencairan SPMU. Bila telah sesuai kesepakatan
mengajukan SPMU kepada Kas Daerah.
8. Kas Daerah meneliti keabsahan SPMU, menyiapkan Nota Transfer dan
mentransfer dana tersebut ke rekening BUMD/Perusahaan yang
bersangkutan. Mengirimkan copy SPMU dan Nota Transfer kepada Unit
Perbendaharaan, dan menyimpan satu copy untuk arsip.
9. Berdasarkan Nota Transfer dari Kas Daerah, BUMD/Perusahaan membuat
Bukti PMP dan menyerahkan 2 (dua) rangkap Bukti PMP kepada Pemerintah
Daerah melalui Unit Perbendaharaan dan menyimpan satu copy untuk arsip.
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
33
10. Unit Perbendaharaan menerima copy SPMU dan Nota Transfer dari Kas
Daerah, menerima dua copy Bukti PMP dari BUMD/Perusahaan, meneruskan
dokumen-dokumen tersebut kepada Unit Verfikasi dan mengarsipkan satu
copy Bukti PMP.
11. Unit Verifikasi melakukan verifikasi untuk meyakini keabsahan/legalitas Unit
PMP, bila telah sesuai menyerahkannya kepada Unit Pembukuan.
12. Unit Pembukuan menerima SPMU, Nota Transfer dan Bukti PMP, menyimpan
sementara untuk posting bulanan. Pada akhir bulan memposting transaksi
tersebut dan mencetak DTP.
13. Unit Pembukuan memverikasi kebenaran DTP dengan membandingkannya
dengan SPMU dan Nota Transfer, bila belum benar lakukan kembali proses
posting bulanan, bila telah sesuai lakukan proses pelaporan bulanan.
14. Unit Pembukuan mengecek kebenaran proses pelaporan bulanan dari data
Lembar Pengontrol, bila telah benar cetak LPJ dan Laporan PMP.
15. Unit Keuangan melalui Kepala Unit Keuangan menyerahkan LPJ dan Laporan
PMP kepada Kepala Daerah/Setda, dan mengarsipkan satu copy.
BAGAN ARUS
SATUAN KERJA UNIT PERLENGKAPAN UNIT PEMBUKUAN

 PROSEDUR AKUNTANSI PENCATATA N ASET TETAP




































































































































































































































































































Prosedur Belanja Modal
Beban Tetap
SPPA
Posting
Bulanan
Cetak DTP
DTP
Bandingkan DTP
dan SPPA
Benar? Koreksi
Pelaporan
Keuangan
Cek Kebenaran
Proses PPK
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Lap. Keuangan
Kirim ke Kepala
Daerah
Faktur
BAST
Cek Kebenaran
SPPA dg BAST,
Faktur dg BAST
Perekaman &
Cetak Hasil
Cek kebenaran
Perekaman
BAST
Benar?
Ya
Tidak
Faktur
Printout
Rekaman
Benar?
Pelaporan BM/KN
Laporan BM/KN
SPPA
Faktur
BAST
SPPA
Faktur
BAST
Laporan BM/KN
Siapkan SPPA
BAST
Faktur
SPPA
Lembar
Pengontrol
Ya
Tidak
Ya
Tidak
Ya
Tidak
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
35
PROSEDUR AKUNTANSI PENCATATAN ASET TETAP
1. Satuan Kerja setelah sebagaimana telah diuraikan dalam prosedur akuntansi
belanja modal beban tetap, membuat BASTB yang disertai faktur. Selain itu
sebagaimana telah diuraikan dalam prosedur penghapusan aset tetap Satuan
Kerja menerima Berita Acara Penghapusan Barang Milik/Kekayaan Negara
(BAPBM/KN). Berdasarkan dokumen tersebut, Satuan Kerja membuat Surat
Pemberitahuan Pencatatan Aset (SPPA). Selanjutnya SPPA dilampiri BASTB,
Faktur, BAPBM/KN disampaikan ke Unit Perlengkapan.
2. Unit Perlengkapan pertama meneliti kelengkapan dokumen dengan
membandingkan SPPA dengan BASTB, dan BAPBM/KN. Selanjutnya
membandingkan faktur dan BASTB. Jika belum benar dikembalikan ke Satuan
Kerja. Jika sudah benar dilakukan perekaman rincian aset tetap sampai ke
sub-sub kelompok aset tetap ke dalam tabel aset dalam database. Selanjutnya
dicetak hasil perekaman, untuk dilakukan pengecekan kebenaran perekaman.
Jika perekaman belum benar, maka dilakukan perbaikan perekaman. Jika
sudah benar, dilakukan proses pelaporan Barang Milik/Kekayaan Negara
(BM/KN). Laporan BM/KN adalah laporan mengenai aset tetap yang bukan
merupakan bagian dari Laporan Pertanggungjawaban. Laporan BM/KN antara
lain berupa Buku Inventaris, Laporan Mutasi Barang Triwulan, dan Laporan
Tahunan Inventaris. Laporan BM/KN didistribusikan ke Satuan Kerja dan Arsip.
SPPA, Faktur, BASTB, dan BAPBM/KN disampaikan ke Unit Pembukuan.
3. Unit Pembukuan mengarsipkan berkas pencatatan aset yang diterima dari
Unit Perlengkapan. Secara bulanan Unit Pembukuan melakukan posting data
aset yang sudah terdapat dalam tabel aset. Proses posting ini dilakukan
secara komputer dan tidak memerlukan perekaman ulang data aset. Dengan
proses posting ini maka data aset yang terdapat dalam tabel aset akan dicopy
ke dalam tabel buku besar sesuai tabel posting rule yang tersedia dalam
database. Setelah dilakukan posting, selanjutnya dilakukan pencetakan DTP.
Selanjutnya DTP diteliti kebenarannya dan dibandingkan dengan SPPA. Jika
tidak benar proses posting diulang. Jika sudah benar, maka dilanjutkan dengan
proses pelaporan keuangan. Selanjutnya dilakukan cek kebenaran proses
pelaporan keuangan dengan membandingkan data yang dicetak dalam lembar
pengontrol. Jika belum benar, maka proses pelaporan keuangan diulang. Jika
sudah benar maka LPJ dicetak. Selanjutnya didistribusikan ke Satuan Kerja,
Kepala Daerah dan Arsip.
BAGAN ARUS
SATUAN KERJA UNIT PERLENGKAPAN SETDA/KEPALA DAERAH
PROSEDUR PENGHAPUSAN ASET TETAP
















































































































































































































































































SPH BM/KN
SPH BM/KN
Lakukan penelitian
sesuai dengan Aturan
Penghapusan Aset
Tetap, Cek Phisik bila
perlu
SPH BM/KN
Laporan Hasil Penelitian
Konsep BA
Penghapusan
Teliti & Persetujuan
SPH BM/KN
Konsep BA
Penghapusan
Tandatangan BA
Penghapusan
Lanjut Ke Bagan
Arus Akuntansi
Aset Tetap
Laporan
BM/KN
SPH BM/KN
Konsep BA
Penghapusan
SPH BM/KN
SPH BM/KN
Laporan Hasil Penelitian
Konsep BA
Penghapusan
SPH BM/KN
Laporan Hasil Penelitian
Konsep BA
Penghapusan
SPH BM/KN
Laporan Hasil Penelitian
Konsep BA
Penghapusan
BA ditandatangani oleh
pihak-pihak terkait
BA
Penghapusan
BA
Penghapusan
BA ditandatangani
oleh pimpinan
Satker terkait
SPPA SPPA
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
37
PROSEDUR PENGHAPUSAN ASET TETAP
1. Bila terdapat aset tetap yang rusak berat, berlebih atau tidak akan digunakan
lagi, Satuan Kerja mengajukan Surat Permohonan Penghapusan Barang
Milik/Kekayaan Negara (SPH BM/KN) kepada Kepala Daerah/Sekretaris
Daerah (Setda) sesuai dengan batasan wewenang penghapusan barang yang
berlaku.
2. Kepala Daerah/Setda mendisposisikan SPH BM/KN kepada Unit
Perlengkapan.
3. Unit Perlengkapan meneliti kesesuaian SPH BM/KN dengan Peraturan
Penghapusan Aset Tetap dan Laporan BM/KN Satuan Kerja yang
bersangkutan yang ada di Unit Perlengkapan. Unit Perlengkapan dapat
melakukan cek phisik barang tersebut sesuai ketentuan penghapusan.
4. Berdasarkan hasil penelitian, Unit Keuangan membuat Laporan Hasil
Penelitian dan Konsep BAPBM/KN, mengajukan Konsep BAPBM/KN, Laporan
Hasil Penelitian dan SPH BM/KN kepada Kepala Daerah/Setda.
5. Kepala Daerah/Setda meneliti dan memberikan persetujuan penghapusan
dan mengembalikan dokumen-dokumen tersebut kepada Unit Perlengkapan.
6. Unit Perlengkapan mengirimkan Konsep Berita Acara (BA) Penghapusan dan
foto copy SPH BM/KN kepada Satuan Kerja, mengarsipkan SPH BM/KN asli
dan Laporan Hasil Penelitian.
7. Pimpinan Satuan Kerja menandatangani Konsep BAPBM/KN dan
mengembalikannya kepada Unit Perlengkapan.
8. Unit Perlengkapan menerima Konsep BAPBM/KN dan sesuai prosedur yang
berlaku untuk barang yang dihapus meminta tanda tangan pihak-pihak terkait
untuk keabsahan BA.
9. Unit Perlengkapan mengirimkan satu copy BAPBM/KN kepada Satuan Kerja
untuk dibuat Surat Permintaan Pencatatan Aset (SPPA), dalam hal ini
penghapusan barang dari pembukuan.
10. Satuan Kerja mengirimkan SPPA kepada Unit Perlengkapan untuk diproses
lebih lanjut sesuai dengan proses pencatatan aset tetap.
BAGAN ARUS
KAS DAERAH UNIT VERIFIKASI
PROSEDUR AKUNTANSI PEMBENTUKAN DANA CADANGAN
UNIT PERBENDAHARAAN UNIT PEMBUKUAN 



























































































































































































APBD
Perekaman &
Cetak Hasil
SPP
Printout
Rekaman
SPP
Printout
Rekaman
Verifikasi SPP
dengan SKO,
Printout
Benar?
Disposisi
Cetak SPM
SPP
Printout Rekaman
Disposisi
SPP
Printout Rekaman
Disposisi
Cetak SPM
SPM
SPM
SPM
SPM
Posting
Bulanan
Cetak DTP
DTP
Bandingkan
DTP dan SPM
Benar? Koreksi
Pelaporan
Keuangan
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan Lap. Keuangan 1 -3
Kirim ke Kepala
Daerah
PERDA
Cadangan
Lembar Pengontrol
Cek Kebenaran Proses
Pembuatan Lap.
Keuangan, bila benar
cetak laporan
Tidak
Ya
Siapkan SPP
SPP
Ya
Tidak
Ya
Tidak
Transfer ke
Rekening Dana
Cadangan
Nota Transfer Nota Transfer
SPM
Nota Transfer
Lap. Dana Cadangan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
39
PROSEDUR AKUNTANSI
PEMBENTUKAN DANA CADANGAN
1. Berdasarkan APBD dan Perda Cadangan yang ditetapkan, Unit
Perbendaharaan akan menerbitkan SPP. SPP akan direkam ke dalam
Database dan hasil perekaman tersebut akan dicetak. Hasil cetakan beserta
SPP akan dikirim ke Unit Verifikasi.
2. Unit Verifikasi melakukan verifikasi berkaitan dengan kebenaran materiil dan
formal SPP, serta kebenaran hasil rekaman dengan SPP. Jika Unit Verifikasi
menemukan ketidakbenaran materiil dan formal di SPP, atau ketidaksesuaian
hasil rekaman dengan SPP maka Unit Verifkasi mengirimkan SPP beserta
hasil rekamannya ke Unit Perbendaharaan, yang selanjutnya akan
memperbaikinya dan kemudian mengirimkannya kembali ke Unit Verifikasi.
Jika tidak ditemukan kesalahan, maka Unit Verifikasi akan membuat lembar
disposisi yang berisikan bahwa SPP dan Hasil rekaman SPP sudah benar
sehingga Unit Perbendaharaan sudah bisa mencetak SPM.
3. Unit Perbendaharaan akan menerima kembali SPP, hasil rekaman SPP dan
Disposisi Pencetakan SPM. Berdasarkan disposisi tersebut, Unit
Perbendaharaan akan mencetak SPM 3 (tiga) lembar. SPM akan dikirim ke
Kas Daerah, Unit Pembukuan dan arsip di Unit Perbendaharaan.
4. Berdasarkan SPM yang diterima, Kas Daerah akan mentransfer dana ke
rekening Dana Cadangan dan membuat 3 (tiga) lembar Nota Transfer sebagai
bukti transfer. Nota transfer dikirim ke Unit Perbendaharaan, Unit Pembukuan
dan arsip.
5. Berdasarkan SPM dan Nota Transfer yang diterima dari Unit Perbendaharaan
dan Kas Daerah, Unit Pembukuan mengarsipkan sementara sampai semua
dokumen untuk bulan transaksi yang sama terkumpul. Selanjutnya DS tersebut
diproses dan diposting dengan menggunakan data hasil perekaman Unit
Perbendaharaan dari database.
6. Dari posting tersebut akan dicetak DTP. DTP tersebut akan diverifikasi dengan
membandingkan DTP dengan DS (SPMU, STS, dll.). Jika dari hasil verifikasi
ditemukan ada ketidak sesuaian antara DTP dan DS maka akan dilakukan
proses posting dan pencetakan DTP kembali. Jika DTP sudah sesuai dengan
dokumen sumbernya akan dilakukan proses pembuatan LPJ.
7. Proses pembuatan LPJ dilakukan dengan menggunakan data dari database
yang sama. Dari hasil proses pembuatan LPJ akan tercetak lembar pengontrol
yang diverifikasi untuk menguji kebenaran proses komputer dalam membuat
LPJ. Jika dari hasil verifikasi lembar pengontrol ditemukan kesalahan proses
pembuatan LPJ maka proses pembuatan LPJ diulang kembali sampai proses
pembuatan LPJ benar.
8. Jika proses pembuatan LPJ sudah benar maka LPJ akan dicetak. LPJ terdiri
dari Laporan Perhitungan Anggaran, Neraca, Laporan Arus Kas dan Laporan
Dana Cadangan. LPJ akan dikirim ke Kas Daerah, Kepala Daerah, dan arsip
BAGAN ARUS
KAS DAERAH
PROSEDUR AKUNTANSI PENCAIRAN DANA CADANGAN
UNIT PERBENDAHARAAN UNIT VERIFIKASI UNIT PEMBUKUAN




























































































































































































































































































































Aplikasi Transfer
Perekaman
Aplikasi
Transfer
Aplikasi Transfer
Posting Bulanan
Cetak DTP
DTP
Bandingkan DTP
dan Nota
Transfer
Benar? Koreksi
Pelaporan
Keuangan
Benar?
Cetak Laporan
Keuangan
Lap. Keuangan 1- 3
Lap. Dana
Cadangan
Lap. Keuangan
Kirim ke Kepala
Daerah
Lembar Pengontrol
Cek Kebenaran Proses
Pembuatan Lap.
Keuangan, bila benar
cetak laporan
APBD
PERDA
Printout
Perekaman
Verifikasi Aplikasi
Transfer dengan
PERDA, APBD &
Printout
Tidak Benar?
Ya
Aplikasi
Transfer
Lakukan Pengeluaran
dana dari Dana
Cadangan
Nota Transfer Nota Transfer
Nota Transfer
Tidak
Ya
Tidak
Ya
Aplikasi Transfer
Printout
Perekaman
Aplikasi Transfer
Printout
Perekaman
Aplikasi Transfer
Printout
Perekaman
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
41
PROSEDUR AKUNTANSI
PENCAIRAN DANA CADANGAN
1. Berdasarkan APBD dan Perda Cadangan yang ditetapkan, untuk pemindahan
dana cadangan ke APBD, Unit Perbendaharaan akan menerbitkan Aplikasi
Transfer (AT). AT akan direkam ke dalam Database dan hasil perekaman
tersebut akan dicetak. Hasil cetakan beserta AT akan dikirim ke Unit Verifikasi.
2. Unit Verifikasi melakukan verifikasi berkaitan dengan kebenaran materiil dan
formal AT, serta kebenaran hasil rekaman dengan AT. Jika Unit Verifikasi
menemukan ketidakbenaran materiil dan formal di AT, atau ketidak sesuaian
hasil rekaman AT dengan AT maka Unit Verifikasi mengirimkan AT beserta
hasil rekamannya ke Unit Perbendaharaan. Unit Perbendaharaan akan
memperbaikinya kemudian mengirimkannya kembali ke Unit Verifikasi.
Jika tidak ditemukan kesalahan, maka Unit Verifikasi akan membuat lembaran
disposisi yang berisikan bahwa AT dan Hasil rekaman AT sudah benar dan
mengirimkannya ke Unit Perbendaharaan.
3. Unit Perbendaharaan akan menerima kembali AT, hasil rekaman AT dan
Disposisi. Berdasarkan disposisi tersebut, Unit Perbendaharaan akan
mengirim AT ke Kas Daerah, ke Unit Pembukuan, dan arsip.
4. Berdasarkan AT yang diterima, Kas Daerah akan mentransfer dana dari
rekening Dana Cadangan ke rekening APBD dan membuat 3 (tiga) lembar
Nota Transfer sebagai bukti transfer. Nota transfer dikirim ke Unit
Perbendaharaan, Unit Pembukuan, dan arsip.
5. Berdasarkan AT dan Nota Tranfer yang diterima dari Unit Perbendaharaan dan
Kas Daerah, Unit Pembukuan mengarsipkan sementara sampai semua
dokumen untuk bulan transaksi yang sama terkumpul. Selanjutnya DS tersebut
diproses dan diposting dengan menggunakan data hasil perekaman Unit
Perbendaharaan dari database.
6. Dari posting tersebut akan dicetak DTP. DTP tersebut akan diverifikasi dengan
membandingkan DTP dengan DS (SPMU, STS, dll.). Jika dari hasil verifikasi
ditemukan ada ketidaksesuaian antara DTP dan DS maka akan dilakukan
proses posting dan pencetakan DTP kembali. Jika DTP sudah sesuai dengan
dokumen sumbernya akan dilakukan proses pembuatan LPJ.
7. Proses pembuatan LPJ dilakukan dengan menggunakan data dari database
yang sama. Dari hasil proses pembuatan LPJ akan tercetak lembar pengontrol
yang akan diverifikasi untuk menguji kebenaran proses komputer dalam
membuat LPJ. Jika dari hasil verifikasi lembar pengontrol ditemukan kesalahan
proses pembuatan LPJ maka proses pembuatan LPJ diulang kembali sampai
proses pembuatan LPJ benar.
8. Jika proses pembuatan LPJ sudah benar maka LPJ akan dicetak. LPJ terdiri
dari Laporan Perhitungan Anggaran, Neraca, Laporan Arus Kas dan Laporan
Dana Cadangan. LPJ akan dikirim ke Kas Daerah, Kepala Daerah, dan arsip
UNIT PERLENGKAPAN KEPALA DAERAH PIHAK III KAS DAERAH UNIT PEMBUKUAN
PROSEDUR PENERIMAAN PEMBIAYAAN DARI HASIL PENJUALAN ASET DAERAH
BAGAN ARUS








































































































































































































































































































































































Usulan
Penghapusan
Asset
Usulan
Penghapusan
Asset
S Keputusan
Penghapusan
Asset
Mempersiapkan
Pelelangan,
KSO,
Penyewaan
Transfer uang
Setuju?
S Keputusan
Penghapusan
Asset
Transfer uang
Dokumen
Lelang
Surat tanda
Setoran
Surat tanda
Setoran
Surat tanda
Setoran
Surat tanda
Setoran
Realisasi
Kontrak
Realisasi
Kontrak
Prosedur
Pembukuan
pendapatan
Pemberitahuan
Pemenang
Pemberitahuan
Pemenang
ada
Pemenang?
Tidak
Ya
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
43
PROSEDUR PENERIMAAN PEMBIAYAAN
DARI PENJUALAN ASET DAERAH
1. Realisasi Penerimaan Pembiayaan Dari Penghapusan Aset adalah Realisasi
yang berasal dari berbagai usaha pemanfaatan aset yang telah dihapuskan.
Usaha pemanfaatan ini dapat berupa penjualan, tukar guling (ruilslag),
penyewaan, atau pelaksanaan kerja sama operasi. Untuk itu, sebelum ada
usaha pemanfaatan ini, diasumsikan bahwa pada awal tahun anggaran sudah
ada aset yang diidentifikasikan telah dihapuskan dari pembukuan tetapi belum
dilaksanakan usaha pemanfaatannya. Dengan demikian, proses pemanfaatan
aset daerah yang dihapuskan dimulai dari diterbitkannya surat persetujuan
Kepala Daerah dan DPRD untuk menghapuskan suatu aset.
2. Berdasarkan Surat Keputusan Penghapusan Aset Daerah, Unit Perlengkapan
menyusun dokumen bagi usaha pemanfaatan, yang bisa jadi berbentuk
dokumen pelelangan atau surat penunjukan kerja atau lainnya yang dapat
dibenarkan oleh peraturan pemanfaatan aset daerah.
3. Berdasarkan pemberitahuan oleh Unit Perlengkapan, berbagai pihak III seperti
Rekanan akan memasukkan tawarannya kepada Unit Perlengkapan atau
Panitia Pelelangan untuk mendapatkan hak membeli/tukar guling
(ruilslag)/menyewa/ atau melaksanakan kerjasama operasi.
4. Jika Unit Perlengkapan atau Panitia Pelelangan setuju menunjuk atau
menetapkan pemenang lelang, maka Unit Perlengkapan menunjuk pembeli
atau pelaksana kontrak. Pembeli atau pelaksana kontrak kemudian
mentransfer uang sebagai imbalan pemanfaatan aset Pemda ke Kas Daerah.
5. Atas penerimaan uang ini, Kas Daerah membuat STS, yang kemudian
diserahkan kepada pihak pembeli atau pelaksana kerja dan kepada Unit
Pembukuan. Oleh pihak pembeli atau pelaksana kerja, STS ini dijadikan bukti
untuk merealisasikan pengambilalihan aset atau pelaksanaan kerja sama
operasi. Sedangkan oleh Unit Pembukuan, STS ini dijadikan dokumen dasar
bagi akuntansi atas penerimaan pembiayaan dari penghapusan aset daerah.
6. Akuntansi penerimaan pembiayaan dari penghapusan aset daerah ini
dilakukan sesuai dengan prosedur akuntansi penerimaan.
BAGAN ARUS
SEKRETARIS DAERAH KEPALA DAERAH MENKEU (DJA)
PROSEDUR PELAPORAN DAU & DAK KE MENTERI KEUANGAN
UNIT PEMBUKUAN UNIT PERHITUNGAN








































































































































































































































































SPMU
Proses
Pembukuan
Lap. Perhitungan
DAU & DAK
Lap. Perhitungan
DAU & DAK
Verifikasi Kebenaran
Laporan
Lap. Perhitungan
DAU & DAK
Lap. Perhitungan
DAU & DAK
Tandatangan/
Sahkan
Lap. Perhitungan
DAU & DAK
Lap. Perhitungan
DAU & DAK
Persetujuan Kepala
Unit Keuangan
Lap. Perhitungan
DAU & DAK
Lap. Perhitungan
DAU & DAK
Proses Persetujuan
Kepala Daerah
Lap. Perhitungan
DAU & DAK
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
45
PROSEDUR PELAPORAN
DAU DAN DAK KE MENTERI KEUANGAN
1. Berdasarkan SPP yang diajukan oleh Satuan Kerja/Unit Organisasi Pengguna
Anggaran, Unit Perbendaharaan menerbitkan SPM 3 (tiga) rangkap. Satu
rangkap dikirim ke Unit Pembukuan sebagai dasar pembukuaan.
2. Unit Pembukuan membukukan SPM setiap bulan dengan menggunakan data
dari database hasil perekaman SPM oleh Unit Perbendaharaan dan
menghasilkan Laporan Perhitungan Anggaran. Laporan Perhitungan Anggaran
akan dikirim ke Unit Perhitungan.
3. Unit Perhitungan Anggaran memverifikasi kebenaran laporan yang diterima
dari Unit Pembukuan. Sesudah laporan diverifikasi, laporan tersebut akan
disetujui oleh Kepala Unit Keuangan kemudian dikirim Setda.
4. Setda akan meneliti dan menyetujui laporan perhitungan dan memarafnya.
Laporan perhitungan selanjutnya akan dikirim ke Kepala Daerah.
5. Kepala Daerah akan menandatangani Laporan Perhitungan dan
mengirimkannya ke Menteri Keuangan u.b. Direktorat Jenderal Anggaran
(DJA) sebagai pertanggungjawaban Pelaksanaan Anggaran DAU dan DAK.
DPRD
BAGAN ARUS
SEKRETARIS DAERAH KEPALA DAERAH APARAT PENGAWAS EKSTERN
PROSEDUR PELAPORAN APBD KE DPRD
UNIT PEMBUKUAN UNIT PERHITUNGAN





































































































































































































































































































































































































































































































































































Perda LPJ
DS
Proses Pembukuan
Neraca
Persetujuan Kepala
Unit Keuangan
Mensahkan LPJ
Keuangan
Perhitungan APBD
Aliran Kas
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Buat Analisis LK &
Nota Perhitungan
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Neraca
Perhitungan APBD
Aliran Kas
Perbendaharaan &
Unit Perlengkapan Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Proses untuk
Pengesahan Kepala
Daerah
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Audit
Lap. Hasil Audit
Lap. Hasil Audit Lap. Hasil Audit
Perbaikan Laporan
Pertanggungjawaban
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Nota Tanggapan
atas Hasil Audit
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Nota Perhitungan
Lap. Hasil Audit
Lap. Hasil
Audit
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
Nota Tanggapan
atas Hasil Audit
Pembahasan s/d
Persetujuan
LPJ yg telah disetujui
Neraca
Perhitungan APBD
Aliran Kas
Nota Perhitungan
BUKU 4 – PROSEDUR AKUNTANSI
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
47
PROSEDUR PERTANGGUNGJAWABAN
PELAKSANAAN APBD KE DPRD
1. Unit Pembukuan akan menerima DS dari Unit Perbendaharaan dan unit
organisasi lainnya. DS tersebut merupakan bukti pelaksanaan APBD.
Selanjutnya DS tersebut akan diproses setiap bulan dengan menggunakan
database yang sama dengan yang digunakan oleh Unit Perbendaharaan. Dan
pada akhir tahun anggaran akan menghasilkan LPJ untuk pelaksanaan APBD
satu tahun anggaran. Laporan yang dihasilkan di Unit Pembukuan ada 3 yaitu
Laporan Perhitungan Anggaran, Neraca dan Laporan Aliran Kas. Ketiga
Laporan tersebut pada akhir tahun anggaran disampaikan ke Unit Perhitungan.
2. Unit Perhitungan akan menganalisis LPJ yang diterima dari Unit Pembukuan
dan membuat Nota Perhitungan. Nota Perhitungan dibuat berdasarkan data
akuntansi dan data makro ekonomi serta data lain yang dikumpulkan dari unit
organisasi yang terkait. Laporan Perhitungan Anggaran, Neraca, Laporan
Aliran Kas dan Nota Perhitungan selanjutnya disetujui oleh Kepala Unit
Keuangan kemudian dikirim ke Setda.
3. Setda akan meneliti dan menyetujui ke 4 (empat) laporan, memarafnya dan
selanjutnya akan dikirim ke Kepala Daerah.
4. Kepala Daerah menyampaikan Laporan Pertanggungjawaban ke Aparat
Pengawas Ekstern untuk dilakukan pemeriksaan (audit) atas Laporan
Pertanggungjawaban tersebur.
5. Aparat Pengawasan Ekstern melakukan audit atas laporan
pertanggungjawaban dan menyampaikan laporan hasil pemeriksaannya ke
Kepala Daerah cq Unit Perhitungan dan DPRD.
6. Unit Perhitungan melakukan perbaikan Laporan Pertanggungjawaban dan
menyusun Nota Tanggapan atas hasil pemeriksaan aparat pengawasan
ekstern.
7. Laporan Pertanggungjawaban yang telah diperbaiki tersebut berikut Nota
Tanggapan atas hasil pemeriksaannya disampaikan ke DPRD setelah
ditandatangani oleh Kepala Daerah.
8. DPRD melakukan pembahasan atas Laporan Pertanggungjawaban yang
diterima dari Kepala Daerah.
9. Laporan Pertanggungjawaban yang telah disetujui dikembalikan ke Kepala
Daerah cq Sekretaris Daerah untuk disahkan dan disiapkan Perda
Pertanggungjawaban APBD.
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
PEDOMAN
SISTEM AKUNTANSI KEUANGAN DAERAH
Pengarah
1. Dr. Machfud Sidik, MSc
2. Drs. Arie Soelendro, MA
3. Dr. Mulia P. Nasution, DESS
4. Dr. Daeng M. Nazier
5. Drs. Imran
6. Adriansyah, SE
7. Drs. Sugijanto, Ak, MM
8. Drs. Sintong Nainggolan, Msi
9. Drs. Tahria. S, M.Acc
Tim Penyusun
1. Drs. Irsan Gunawan (Koordinator)
2. Syafri Adnan Baharuddin, Ak, MBA
3. Drs. Wawan Darmawan
4. Iman Bastari, Ak, M.Acc
5. Sonny Loho, Ak, MPM
6. Ardan Adiperdana, Ak, MBA
7. Drs. Sura P. Bangun, MBA
8. Drs. Hotman Siregar, MPA
9. Drs. Haryanto Kadi, M.Sc
10. Edison Sihombing, SE, MSP
11. Dra. Riyani Budiastuti
12. Amdi Veri Darma, Ak, M.Acc
13. Sumiyati, Ak, MFM
14. Drs. Sigit Edi Surono
15. Sugiyarto, SE, Ak, M.Sc
16. Ahmad Yani, SH, Ak
17. Edward UP Nainggolan, Ak
18. Arif Zainudin Fansyuri, Ak
19. Mahartha Titi, SE, Ak
20. Drs. Sudarisman, Ak
21. Zandy Akbar Rassat, SE, MA
Tim Pokja Evaluasi Pembiayaan Dan Informasi Keuangan Daerah:
Depkeu (DJPKPD, BAKUN, BINTEK), BPKP, dan Depdagri (KMK 355/KMK.07/2001).
PEDOMAN
SISTEM AKUNTANSI KEUANGAN DAERAH
Pengarah
1. Dr. Machfud Sidik, MSc
2. Drs. Arie Soelendro, MA
3. Dr. Mulia P. Nasution, DESS
4. Dr. Daeng M. Nazier
5. Drs. Imran
6. Adriansyah, SE
7. Drs. Sugijanto, Ak, MM
8. Drs. Sintong Nainggolan, Msi
9. Drs. Tahria. S, M.Acc
Tim Penyusun
1. Drs. Irsan Gunawan (Koordinator)
2. Syafri Adnan Baharuddin, Ak, MBA
3. Drs. Wawan Darmawan
4. Iman Bastari, Ak, M.Acc
5. Sonny Loho, Ak, MPM
6. Ardan Adiperdana, Ak, MBA
7. Drs. Sura P. Bangun, MBA
8. Drs. Hotman Siregar, MPA
9. Drs. Haryanto Kadi, M.Sc
10. Edison Sihombing, SE, MSP
11. Dra. Riyani Budiastuti
12. Amdi Veri Darma, Ak, M.Acc
13. Sumiyati, Ak, MFM
14. Drs. Sigit Edi Surono
15. Sugiyarto, SE, Ak, M.Sc
16. Ahmad Yani, SH, Ak
17. Edward UP Nainggolan, Ak
18. Arif Zainudin Fansyuri, Ak
19. Mahartha Titi, SE, Ak
20. Drs. Sudarisman, Ak
21. Zandy Akbar Rassat, SE, MA

Berbisnis dengan Hati

July 28, 2010 Comments off

Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 1 dari 48
Berbisnis
denganHati

The 10 Credos of
Compassionate Marketing
KH. ABDULLAH GYMNASTIAR
&
HERMAWAN KARTAJAYA
EDITOR :
YUSWOHADY
SUNARTO
MarkPlus&Co
Jakarta, 2004
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 2 dari 48
BAGIAN I
PENGANTAR
HERMAWAN KARTAJAYA
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 3 dari 48
KEJUJURAN SEBAGAI
KEUNGGULAN BERSAING
Oleh : Hermawan Kartajaya
Saya memikirkan compassionate marketing sejak tiga tahunan yang lalu saat
skandal keuangan merebak di Amerika yang memuncak dengan tumbangnya
perusahaan – perusahaan raksasa seperti Enron, Worldcom, atau Global Crossing.
Kasus manipulasi akuntansi terbesar dalam sejarah bisnis Amerika tersebut
menunjukkan keadaan kita betapa semakin tingginya kompleksitas bisnis,
semakin canggihnya tool – tool manajemen, dan semakain majunya perangkat
regulasi, ternyata bukannya menjadikan praktek bisnis kita menjadi semakin
dewasa dan beradab. Justru sebaliknya, ia semakin kebablasan tanpa etika, tanpa
nilai – nilai moral, tanpa pegangan.
Saya berpikir apakah ini tanda akan datangnya akhir jaman. Bisnis telah kian
terpuruk oleh tangan – tangan orang yang tidak punya etika dan moral. Bisnis
tidak lagi dijalankan dengan semangat kejujuran dan keadilan. Apa yang kita lihat
dari skandal tersebut adalah betapa para pebisnis semakin membabi – buta
menghalalkan cara apapun untuk mengeruk keuntungan pribadi tanpa peduli hal
itu merugikan pihak lain. Para pebisnis semakin kehilangan nuraninya.
Kejadian di Amerika tersebut sesungguhnya bukanlah konsern utama saya.
konsern dan keprihatinan saya justru pada praktek bisnis yang sudah berjalan
bertahun – tahun di negeri ini. Kalau mau jujur, sesungguhnya apa yang terjadi di
Amerika itu sudah menjadi keseharian kita selama ini. Secara kebetulan berita
skandal itu di blow up besar – besaran media massa di seluruh dunia sehingga kita
tahu dan tersentak karenanya.
Tapi bagi kita yang di Indonesia skandal tersebut adalah biasa saja. Karena di
negeri ini praktek bisnis yang sepuluh kali lipat lebih kotor dari praktek bisnis
yang dijalankan para eksekutif Enron itu begitu banyak dan telah membudaya
selama tiga puluh tahun lebih.
Kongkalikong politisi – pengusaha!
Bisnis “nginjak kaki”!
Praktek suap dan mark – up!
Sogok – menyogok pejabat untuk memenangkan proyek!
Mendirikan bank untuk mengeruk duit masyarakat untuk mendanai bisnis grup!
Mengelabui bank untuk menguras koceknya!
Kolusi pejabat untuk mendapatkan monopoli!
Dan masih banyak lagi.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 4 dari 48
Kalau mau lebih detail lagi bacalah artikel, Saya Bermimpi Menjadi Konglomerat
– nya Pak Kwik Kian Gie.
Semula saya berpikir bahwa dengan bergantinya pemerintahan Orde Baru politik
di negeri ini akan lebih jujur dan adil. Sehingga kalau politiknya oke diharapkan
praktek bisnisnya juga oke. Tapi seperti kita tahu semua, wajah politik pasca Orde
Baru bukannya lebih baik malah lebih compang – camping.
Kalau dulu korupsi bisa secara rapi “dipusatkan” di pusat – pusat pemerintahan,
maka kini korupsi tersebut semakin meluas dan merajalela di tingkat kabupaten
bahkan kecamatan. Kalau dulu kongkalikong pengusaha – pejabat hanya terbatas
di Jakarta maka kini hal yang sama dilakukan di secara massif di tingkat
kabupaten – kecamatan. Tak heran jika negeri kita ini tak bergeming posisinya
sebagai negara terkorup di dunia. Praktek bisnis kotor yang selama puluhan tahun
melingkupi keseharian kita semakin menyadarkan saya bahwa kejujuran dan etika
bisnis kini sudah menjadi suatu yang langka di negeri ini.
Di negeri yang compang – camping etika bisnisnya, kejujuran merupakan
“resources” yang semakin langka bagi perusahaan. Dan tak bisa di-leverage
menjadi komponen penting keunggulan bersaing perusahaan. Karena godaan
untuk berbisnis secara tidak jujur itu demikian kuat di negeri ini, maka tak banyak
perusahaan yang mampu melakukannya.
Apa artinya ini? Artinya adalah bahwa kejujuran bisa menjadi sumber keunggulan
bersaing yang sangat kokoh. Kenapa kokoh? Karena tak banyak perusahaan yang
mampu melakukannya dan kemampuan tersebut sulit ditiru pesaing. Dalam teori
manajemen, kalau sebuah perusahaan mampu melakukan sesuatu yang sulit ditiru
oleh pesaing maka ia akan memiliki daya saing yang kuat dan sustainable dalam
jangka panjang.
Saya melihat praktek bisnis dan marketing bergeser dan mengalami transformasi
dari level intelektual menuju ke emosional, dan akhirnya ke spiritual. Level
intelektual ditandai dengan penggunaan tool – tool marketing ampuh seperti
marketing mix, branding, positioning, dan sebagainya.
Lalu sejak sekitar sepuluh tahunan yang lalu konsep emotional marketing muncul
dan kini makin mendominasi praktek pemasaran yang dijalankan oleh para pelaku
bisnis. Saat ini varian dari emotional marketing ini sudah berkembang demikian
luas dan telah menjadi buzzword marketing yang popular. Sebut saja beberapa di
antaranya seperti : customer relationship management, experiential marketing,
emotional branding, dan sebagainya.
Tapi kini dan di masa datang, apalagi setelah pecahnya skandal keuangan yang
saya sebut di depan, saya melihat eranya akan bergeser kearah spiritual. Sehebat
apapun strategi bisnis yang Anda punyai, secanggih apapun tool marketing yang
Anda jalankan, semuanya tak akan ada gunanya kalau tidak dilandasi spiritualitas
yang kokoh, Mau bukti? Buktinya Enron, raksasa energi yang praktis habis dalam
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 5 dari 48
semalam karena tidak jujur kepada stakeholders-nya. Apapun bisnis Anda, rohnya
akan terletak pada kejujuran dan etika.
Saya sangat terkesan dengan logika yang dipakai Aa Gym mengenai berbisnis
yang jujur. Berikut ini ada perkataan Aa Gym, “Logikanya sederhana, Allah yang
menyuruh jujur, Allah yang memberi rezeki, untuk apa harus tidak jujur?”
Bisa dikatakan Aa Gym sudah seperti Raja Midas, apapun yang disentuhnya
menjadi emas. Maksudnya, apapun bisnis yang dimasukinya selalu membawa
kesuksesan. Kini beliau sudah mengelola 19 perusahaan dan semuanya
merupakan bisnis yang menguntungkan.
Semua kesuksesan tersebut kuncinya menurut Aa Gym cuma satu : Jujur.
Dalam tulisan ini berisi uraian Saya dan Aa Gym mengenai bisnis yang dilandasi
oleh kejujuran, etika, dan profesionalitas. Isinya sendiri merupakan rangkuman
dari butir – butir pemikiran Saya dan Aa Gym mengenai berbisnis yang jujur dan
beretika yang kami kemukakan dalam sebuah acara talk show dalam rangka
pengajian bulan Ramadhan tahun 2003 lalu.
Dalam tulisan ini Aa gym menguraikan prinsip – prinsip dasar bisnis yang
berlandaskan kejujuran dan Islam, tentu saja dalam konteks Manajemen Qolbu.
sementara saya menguraikan sebuah konsep terbaru yang sudah sejak setahun ini
saya gagas bersama rekan – rekan di MarkPlus&Co. yaitu apa yang saya sebut,
The 10 Credos of Compassionate Marketing.
Akhirnya saya berharap bahwa di negeri tercinta ini akan semakin banyak
perushaan yang mampu tumbuh, berkembang, dan memiliki daya saing kuat
karena prinsip kejujuran dan etika yang dipegang teguh. Betapa indah kalau
bisnis itu dijalankan dengan nurani.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 6 dari 48
BAGIAN II
PRINSIP – PRINSIP
COMPASSIONATE
MARKETING
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 7 dari 48
PRINSIP – PRINSIP BISNIS
DALAM ISLAM
Oleh : KH. Abdullah Gymnastiar
“BUTA HATI, LEBIH BERBAHAYA, BUTA MATA
TIDAK NAMPAK DUNIA, BUTA HATI TIDAK NAMPAK
KEBENARAN, BUTA HATI DITIPU NAFSU
DAN SYAITAN.”

Saudara – saudaraku, andaikata tujuan sudah ditetapkan sepelan apapun kita
bergerak insyaallah merupakan suatu kemajuan. Tapi bagi orang yang tujuannya
tidak tetap, segigih apapun bergerak bisa jadi menuju kehancuran.
Oleh karena itu kalau kita berbicara bisnis itu tergantung tujuannya apa. Ada yang
tujuannya hanya uang, ada yang tujuannya kepuasan. Tapi sebagai muslim paling
tidak ada tiga tujuan yang harus kita pahami sebagai manusia yang diciptakan
Allah.
Pertama, kita diciptakan oleh Allah untuk menjadikan segala aktifitas kita
sebagai ibadah. Itu artinya bisnis bagi kita adalah ibadah, bukan semata – mata
mencari uang.
Kedua, tugas hidup kita menjadi khalifah. Kita diberi kesempatan hidup di dunia
satu kali oleh karena itu kita harus berkarya seoptimal mungkin, sehingga saat
kematian kita kelak adalah puncak kita berkarya dalam hidup ini yang bermanfaat
bagi peradaban manusia, mensejahterakan diri dan mensejahterakan orang lain.
Ketiga, tugas kita dalam bahasa agama disebut dakwah. Artinya apapun aktifitas
yang kita lakukan harus menjadi pencerminan pribadi pribadi yang menjadi
teladan dalam kebenaran.
ini penting, ibadah, khalifah dan dakwah.
Saudaraku, ada orang yang sibuk dengan membanting tulang demi mencari sesuap
nasi. Ini rugi, sudah tulang yang dibanting hanya sesuap yang dicari.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 8 dari 48
Imam Ali pernah mengatakan , barang siapa yang memang kesibukannya hanya
untuk mencari isi perut, maaf derajatnya tidak jauh beda dengan apa yang keluar
dari perut.
Kalau hanya mencari makan apa bedanya dengan kambing?
Kalau hanya sekedar mencari uang, garong juga mencari uang.
Maka kita harus tahu bahwa kita tidak disuruh mencari uang.
Tetapi kita disuruh untuk menjemput rezeki karena setiap makhluk sudah
disiapkan rezekinya masing – masing.
Ada perbedaan mendasar antara “mencari” dan “menjemput”. Kalau “mencari itu
ada kemungkinan tidak mendapatkan apa yang dicari. Tapi kalau
“menjemput”,pasti ada. Maka itu sebabnya saya dalam bisnis tidak cemas lagi
dengan rezeki, dengan gaji karyawan, sebanyak apapun karyawan termasuk yang
cacat.
Kenapa? Karena setiap orang sudah ada rezekinya. Saya kasih contoh, mencari
istri itu belum tentu dia punya istri. tetapi menjemput istri pasti sudah punya istri
kecuali mancari yang lain. Ini penting. “Waman yatawakkal ‘ala Allah fahuwa
hasbuh,” Q.S. At Thalaq (65) : 3, artinya “Dan barang siapa yang bertawakkal
kepada Allah niscaya Allah akan mencukupkannya.”
Maaf kalau saya mengambil sudut pandang Islam, karena itu yang saya pahami.
Seorang Muslim, dikatakan professional kalau dia memenuhi dua hal. Pertama,
didalam mencari, dia sangat menjaga nilai – nilai kejujuran, tepat janji, etos kerja,
sehingga kalau dia mendapatkan uang maka dirinya lebih bernilai dari sebanyak
apapun uang yang didapatkan. Karena dia mencari dalam rangka untuk
membangun nilai – nilai.
Kedua, dalam mencari nafkah atau “menjemput rezekinya” dia sangat menjaga
sehingga terbangun nama baiknya. Dengan demikian, dia tidak pernah takut
kehilangan apapun.
Mau pensiun, mati uangnya habis, tidak ada masalah. Karena bukan itu yang dia
cari, tapi nilai – nilailah yang dia cari. Kalau uangnya banyak, dia lebih kaya dari
uangnya. Tapi maaf, kalau koruptor uangnya banyak, rumah berharga, mobil
berharga, tanah berharga, tapi yang tidak berharga adalah dirinya.
Maka tidak heran kalau koruptor sering minta – minta, segalanya dicolok. Maaf,
jangan ada yang merasa tersinggung, kecuali koruptor sendiri.
Bayangkan ada orang yang mencari, dia telah mendapat dunianya, tapi dia tidak
mendapatkan dirinya. Makanya dia takut sekali kehilangan jabatannya, karena itu
yang dia anggap sukses.
Kenapa orang takut turun dari jabatannya?
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 9 dari 48
Karena itu topeng dia. Jadi kalau orang bersembunyi di balik topeng, takut
diambil topengnya. Tapi kalau orang membangun dirinya, dia tidak pernah takut
kehilangan apapun.
Maka orang – orang yang pecinta dunia takut melihat pesaing. Padahal pesaing
adalah saudara kita juga. Tanpa pesaing hidup kita tidak bermutu. Persaingan itu
karunia Allah agar bisa memompa kemampuan kita secara optimal.
Saudara mau balap karung sendirian? Tidak bermutu walaupun meraih juara
umum. Begitu juga apabila balap karung dengan anak TK, walau juara dunia
tetapi tetap tidak ada harga karena lawannya adalah anak TK. Tapi balap karung
dengan petarung tangguh, walau kita menjadi juara kelima, tidak ada masalah.
Tapi kita sudah memompa kemampuan kita secara optimal.
Pesaing tidak akan mengurangi rezeki kita, kalau kita bertarung dengan keyakinan
bahwa Allah yang membagikan rezeki.
Mempunyai pesaing itu nikmat.
Bukankah tidak akan bisa menjadi pahlawan kalau tidak ada penjahatnya?
Yang menjadi masalah siapa yang menjadi penjahat? Itu saja.
Mencari rezeki, sekaligus menjaga nilai sehingga nama terbangun. kalau hal ini
dilakukan harga diri terbangun. Kalau hal ini dilakukan walau sudah pensiun, tua
atau mendapat mutasi, orang tersebut tidak pernah berkurang kemuliaannya
karena telah melekat pada dirinya, kekayaan pribadinya.
Kalau sudah mendapat rezeki, seorang professional yang baik dan berhati nurani
akan mendistribusikan rezekinya. Maka disebutkan oleh Nabi Muhammad,
“Khairunnas anfa’uhum linnas,” Hadits Riwayat Bukhari. Artinya, “Sebaik –
baik manusia adalah manusia yang paling banyak manfaatnya.”
Jadi kita bekerja keras, menjemput rezeki kita, nama kita terbangun, rezeki kita
dapatkan, lalu kita distribusikan. Makin banyak kekayaan, makin banyak orang
lapar tersantuni, makin banyak orang bodoh bisa belajar, makin banyak orang
yang tidak berpakain bisa memiliki baju, makin banyak orang yang tidak
mempunyai rumah bisa berteduh. dan ini akan membuat kita semakin
bersemangat dalam bekerja.
Dan luar biasa, kita bisa menikmati bagaimana kita mendistribusikan rezeki kita
ini. Sehingga kalau kita mati nanti, kita sudah puas. Nama insyaallah baik, orang
banyak manfaatnya. Kita tunggu saja saat kematian seperti ini. mau apa lagi,
dunia tidak pernah bisa kita bawa. Siapa orang kaya di dunia ini, bawa apa dia
mati? Tidak ada yang dibawa.
Kadang kita salah, melihat orang kaya itu yang banyak tabungannya. Padahal dia
hanya penunggu saja. Kalau menurut saya, orang yang kaya adalah orang yang
banyak mendistribusikan rezekinya.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 10 dari 48
Jadi maaf, menurut saya, para koruptor itu benar – benar orang yang miskin.
Tidak aad apa – apanya, walaupun jasnya bagus, dasinya bagus. Padahal kalau
mau jujur, dia ke atas menjilat, ke bawah menginjak, ke samping menyikut. Sudah
punya istri berzina, segala diangkut dari kantor ke rumah. Sampai – sampai
jepitan buku pun diangkut. Ini benar – benar miskin.
Makanya nanti ke depan kalau kita memilih pejabat itu harus orang yang kaya.
Bukan kaya dengan uang, tapi kaya batinnya. Tidak suka minta – minta. Orang
yang minta – minta itu orang miskin. Misalnya minta proyek. Salah kita memilih
orang yang miskin batinnya. Memiliki jabatan tetapi kerjanya minta – minta.
Saudara – saudaraku, kalau kita sudah tahu bahwa rezeki datangnya dari Allah,
untuk apa kita berbuat licik? Yang menyuruh jujur Allah, yang membagikan
rezeki juga Allah. Maaf mungkin kita pernah dengar perumpamaan ini. saya
pernah mendapat nasehat dari anak saya. “Pak, kita mah malu kalau hidup
mengeluh. Lihat nyamuk, untuk mencari sesuap makan saja dia harus bertarung
dengan nyawanya.”
Nyamuk itu mencari makan saja sudah terancam. Dan sudah berapa banyak
nyamuk tewas di tangan kita, ketika dia mencari nafkah. Anak saya bilang, “Lihat
ketika nyamuk itu makan, Pak. Makan saja terancam.” Berapa banyak nyamuk
yang terbunuh ketika makan, juga ditangan kita? Sudah selesai makan tangki
sudah penuh, mau terbang rasanya berat. malu jadi manusia kalau kita terus –
menerus mengeluh. Lihat nyamuk itu dari awal sampai akhir. mencari sesuap
darah saja nyawanya terancam.
Makanya orang – orang yang licik, mereka betul – betul menghinakan dirinya
sendiri. Orang yang bekerja cerdas bukan orang yang menjadi untung dengan
banyak liang, tapi sekali dayung dua, tiga empat pulau terlampaui. Ibarat sambil
menyelam minum air, memungut mutiara, ketemu dengan puteri duyung. Orang –
orang yang korupsi itu benar – benar, maaf, bodoh. Saya tidak menyebut dungu
ya, tapi apa bedanya?
Saya ini merasa gemas. Bayangkan dia mengambil tapi dan menghancurkan
dirinya dan nama baiknya. Dia memberi makan keluarga dengan harta haram, di
mana kecerdasannya? Bayangkan, nama itu tidak terbeli oleh harta. Mati dalam
aib, orang tua malu, anak tertekan, makanan yang dimakan pun haram. padahal
harta tidak dibawa kalau mati.
Saya pernah mendengar ada koruptor yang pusing. Menyimpan uang di bank,
karena takut ketahuan, maka dia memakai nama orang lain. Punya mobil bagus
takut ketahuan, akhirnya disimpan di kampung. Punya rumah, sertifikat dia atas
namakan orang lain. Jadi dia punya apa? Punya dosa. Apalagi sekarang ada
Komisi Pemberantasan Korupsi (KPK). Itu semakin membuat dia tertekan. sudah
tidak bisa menikmati tapi tetap saja korupsi. Na’udzubillahi min dzalik.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 11 dari 48
Mungkin ini yang disebut buta hati. Negara kita menjadi seperti ini karena
pebisnisnya bukan professional. Kalau professional pasti bagus. Jadi yang
professional itu selalu menggunakan basis moral. karena nilai keuntungan tidak
dilihat dari jumlah uang.
Bagi kami dalam bisnis, uang itu nomor sekian.
Pertama, yang namanya untung itu kalau bisnis ini menjadi amal. karena kita
semua pasti mati dan yang dibawa ke akhirat itu bukan uangnya tapi amalnya.
Oleh karena itu sejak mulai dari niat harus benar kalau niat sudah salah, cara juga
salah, tindakan kita tidak akan menjadi amal walaupun mungkin menghasilkan
uang. Namun untuk apa itu semua, karena uang tidak bisa kita bawa mati.
Kedua, yang disebut untung adalah, kalau dalam bisnis, nama kita menjadi
semakin lebih baik. Nabi Muhammad itu benar – benar menjadi orang yang sangat
credible, Al Amien seorang yang sangat – sangat terpercaya. Orang tidak ragu
saja kepada perkatannya. Makanya bagi kami bisnis itu kecil, tapi nama baik itu
yang sangat penting.
Ketiga, yang namanya untung itu ketika dalam bisnis, kita bisa manambah ilmu,
karena tanpa penambahan ilmu, pengalaman dan wawasan, keuntungan yang
didapat bisa menjadi bumerang. Segalanya berubah dalam hidup ini, bagaimana
mungkin menyikapinya tanpa kemampuan yang berubah. Saat ini untung, tapi
besok lusa bisa jadi keuntungan ini akan menjadi sumber kerugian. Makanya
keuntungan berupa uang yang tidak meng – upgrade diri kita, itu sebetulnya tidak
untung.
Yang keempat, keuntungan adalah ketika dengan bisnis, menambah silaturahmi,
menambah saudara, karena persaudaraan itu mahal. Buat apa mempunyai uang
banyak kalau musuh juga bertambah. sekali digarong, atau dibui, harta akan habis
dan percuma.
Jadi orientasi dalam bisnis itu adalah bagaimana semakin menambah saudara.
Tidak begitu untung barangkali tidak apa – apa, tetapi saudara bertambah. Kalau
orang sudah sayang ke kita, dia akan menajdi tim marketing kita.
Dan yang kelima, yang disebut keuntungan bagi bisnis yang bernuansa religi
adalah bagaimana dengan bisnis makin banyak orang yang mendapatkan
keuntungan. Karena setiap orang yang beruntung, yang menjadi bagian dari bisnis
kita, itu akan menjadikan kebagian diri kita pula.
Konsep – konsep tersebut di atas tidak hanya ideal, tapi realistis karena kita sudah
menjalani dan terbukti untung besar, kami tidak tertarik pada uang haram, untuk
apa? Logikanya sederhana, Allah yang menyuruh jujur, Allah yang memberi
rezeki, untuk apa harus tidak jujur?
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 12 dari 48
Kami membangun perusahaan dengan konsep ini. Beberapa waktu yang lalu kami
mencoba untuk membangun perumahan, hanya dalam tempo satu bulan sudah
laku 495 rumah. Bahkan belum diumumkan sudah habis. Ya mudah – mudahan
Allah menerima
Saya sendiri pribadi mengelola 19 perusahaan dengan konsep bisnis di atas. Bisnis
di perusahaan tersebut terus saja beranak pinak. Jadi konsep yang sudah saya
kemukakan di atas bukan saja ideal, tapi konsep yang realistis dan benar – benar
menguntungkan.
Logiknya sederhana. Dimana – mana orang akan selalu mencari rekanan yang
jujur dan bisa dipercaya. Karena berusaha untuk jujur, tentu kitalah yang mereka
cari. Para investor yang punya uang mencari orang yang bisa mengelola uangnya
dengan jujur. Para pembeli ingin pedagang yang jujur. Kita tinggal tampil saja,
karena mungkin menjadi barang langka.
Ini kisah nyata. Ada sekelompok warga punya tanah menawarkan kepada kami
agar tanahnya dibeli. Tapi dari mana uangnya. Kemudian datang investor pada
kami. Mereka mencari pengelola yang amanah. Kemudian masyarakat juga ingin
membeli dari pengelola yang jujur. Akhirnya tanpa modal, tanah terbeli dan
setelah jadi, perumahan segera terjual habis.
Jadi yang mengherankan, kenapa masih ada orang yang tidak jujur?
Contoh lain, beberapa waktu yang lalu kita menyelenggarakan pelatihan. Ada
peserta yang ingin me – mark up anggaran pelatihan tersebut. Kita tegas – tegas
menolak. silakan mencari tempat pelatihan lain, kita tidak kurang peserta.
Antriannya bertahun – tahun. Kita juga punya hotel yang ternyata bookingnya
sampai 3 – 4 bulan.
Dari contoh – contoh tersebut, menjadi aneh kenapa harus tidak jujur?
Tidak jujur itu karena kurang iman.
Kalau sudah yakin rezeki dari Allah, kenapa kita tidak jujur.
Nabi Muhammad telah memberikan teladan dalam bisnis semasa hidupnya
dengan julukan Al Amien. Al Amien itu komponennya tiga :
Pertama jujur terpercaya, tidak pernah bohong sekecil apapun.
Kedua, Sigma kepuasan, jadi ketemu puas bicara puas, terus menerus
memberikan kepuasan, semakin banyak titik kepuasan itu orang tersebut semakin
credible
Ketiga, inovatif dan solutif. Kalau orang terus meng – upgrade dirinya dan terus
menerus berinovasi, serta menjadi solusi, dia akan menjadi credible.
Orang yang tidak jujur, tidak memuaskan, tidak punya inovasi dia akan terkubur.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 13 dari 48
THE 10 CREDOS OF
COMPASSIONATE
MARKETING
Oleh : Hermawan Kartajaya
“CAN YOU PRACTICE WHAT YOU PREACH, AND
WOULD YOU TURN THE OTHER CHEEK?”
WHERE IS THE LOVE, BLACK EYED PEAS
***
Saya merasa terhormat ketika diundang untuk berceramah bersama dengan KH
Abdullah Gymnastiar. Bagi saya, Aa Gym adalah asset nasional. Dan kalau orang
di seluruh dunia tahu, sebetulnya Aa Gym sudah merupakan asset dunia.
Karena itu ketika saya mendapat undangan untuk mengisi ceramah bersama Aa
Gym, saya langsung membentuk tim di MarkPlus&Co yang terdiri dari teman –
teman Muslim. Saya minta mereka mempelajari buku – buku Aa Gym,
berkonsultasi dengan pakar bisnis Islam, dan mempelajari kitab suci untuk
memperkaya konsep yang sedang saya kembangkan.
Inilah konsep Compassionate Marketing yang pertama kali saya share bersama
Aa Gym di Bandung beberapa waktu yang lalu.
Saya melihat, dengan berkembangnya IT yang semakin meningkat, informasi
semakin banyak, ternyata orang menjadi semakin bingung. Tidak seperti yang
dulu diharapkan, kalau informasi semakin banyak, kita semakin pasti. Akibatnya,
sekarang orang lebih membutuhkan spiritualitas dari pada dulu.
Dalam pikiran saya ada tiga era perkembangan spiritual.
Era pertama ketika orang melakukan polaris, antara spiritual itu sendiri dan
bisnis. Saya masih ingat ada salah satu bos yang tidak perlu saya sebutkan
namanya. Dia adalah salah satu bos besar dalam bisnis di Indonesia. Bos ini
mengatakan pada saya “Hermawan, kalau kamu mau berbisnis jangan berpikir
soal agama. Bisnismu itu di kiri, agama itu di kanan. Kalau kamu mau mendalami
agama, pelajarilah betul – betul, jadilah kiai, jadilah pendeta, jadilah biarawan.”
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 14 dari 48
Inilah yang saya sebut sebagai era pertama ketika orang benar- benar memisahkan
antara urusan spiritual dengan urusan bisnis.
Kemudian muncul era kedua, yang dimulai ketika keadaan makin tidak menentu.
Ketika lanskap bisnis semakin berubah terus, tidak stabil, orang mulai bingung,
orang mulai melakukan yang namanya balancing. Mereka berbisnis dengan cara
dunia, mereka tidak segan – segan meminta – minta, berkolusi ataupun melakukan
tindakan – tindakan yang tidak etis. Tidak malu – malu, karena pada umumnya
semua pebisnis melakukan hal seperti itu. Bahkan kalau pebisnis tidak melakukan
hal seperti itu, mereka dianggap bukan pebisnis.
Namun ada sejumlah pebisnis yang menyumbangkan sebagian hasil binisnya yang
dilakukan secara kurang etis tersebut untuk kepentingan spiritual. Jadi semacam
Robin Hood. Di era tersebut orang akan berpikir, saya binisnya boleh menyuap,
boleh menerima hasil korupsi asal uangnya disumbangkan lagi untuk kegiatan –
kegiatan kemanusian, social dan keagamaan.
Saya melihatnya era ini sudah berlalu. kita mesti masuk pada era ketiga, bukan
lagi era balancing tetapi masuk pada era integration. Menurut pendapat saya
sekarang sudah tiba saatnya, bahwa kita harus melakukan 100% bisnis, 100%
spiritual.
Jadi tidak perlu lagi ada polarisasi : kalau saya berbisnis, tidak perlu spiritualitas,
kalau saya mandalami spiritualitas, tidak boleh lagi berbisnis. Atau dengan cara
kedua, balancing, saya berbisnis dengan cara yang tidak spiritual. Boleh korupsi
asal hasilnya saya sumbangkan untuk kegiatan spiritual.
Menurut saya, sekarang the ultimate stage adalah stage ketiga. Kita bisa
melakukan 100% bisnis dan spiritual sekaligus. Dan kalau kita persempit dalam
dunia marketing, orang akan bertanya – Tanya, apa bisa kita menjalankan 100%
marketing 100% spiritual?
Keraguan ini muncul karena banyak orang salah mengerti, yang dimaksud dengan
marketing hanyalah selling. Dan kebanyakan salesman adalah orang yang omong
besar dan manis. Yang dijanjikan seperti ini, tapi yang diserahkan bukan itu. Hal
ini membuat banyak orang salah mengerti. Marketing diidentikkan dengan selling.
Sedangkan selling itu diidentikkan dengan cheating. Ini yang keliru!
Kalau kita telusuri lebih mendalam akar – akar marketing yang sebenarnya, saya
menemukan sepuluh hal yang saya pikir sama sekali tidak boleh dipertentangkan,
bahkan tidak boleh diseimbangkan, tetapi harus diintegrasikan dengan nilai – nilai
spiritual. Dari telusuran saya bersam tim, ternyata di dalam Kitab Suci dan Hadist
banyak sekali ditemukan nilai – nilai spiritual dalam bisnis. Perkenankanlah saya
untuk mengutarakan konsep “The 10 Credos of Compassionate Marketing”
berikut ini satu per satu, mudah – mudahan ada inspirasi untuk kita semua.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 15 dari 48
PRINSIP # 1
LOVE YOUR CUSTOMER,
RESPECT YOUR COMPETITOR
Cintailah pelanggan Anda, dan hormatlah pada competitor Anda. Tim saya
menemukan ada disuatu hadist: “Allah tidak akan berbelas kasih pada seseorang
bila ia tidak mengasihi sesamanya,” Hadist riwayat Bukhari, dan Thabrani. Dan
tim saya juga menemukan suatu quotation, “Dan janganlah sekali – sekali
kebencianmu terhadap kamu untuk berlaku tidak adil,” Al Qur’an surat Al Maidah
: 8
Aa Gym sudah jelas mengatakan, mengapa harus takut bersaing? Bersaing itu
bagus. Kalau tidak ada lawannya kita selalu menjadi juara, tapi apa artinya juara?
Bagi orang marketing kita harus melihat hal – hal sebagai berikut :
Pertama, competitor akan memperbesar pasar, sebab tanpa competitor industri
tidak akan berkembang. Sebagai contoh, orang yang menjual martabak di suatu
tempat, kalau tidak ada orang yang menjual martabak di sebelah – sebelahnya,
maka pasar permartabakan mungkin tidak akan besar. Jadi your competitor will
increase your market.
Kedua, competitor Anda sebetulnya perlu dibenchmark, mana yang bagus dan
mana yang jelek. Yang bagus harus ditiru, namanya benchmarking. Dalam istilah
manajemen, mempelajari competitor itu tidak ada yang salah, malah dianjurkan.
Ketiga, kalau Anda tahu competitor Anda melakukan strategi, barangkali belum
tentu Anda harus meniru dia. Ada yang perlu ditiru, tapi justru ada yang harus
dilakukan diferensiasi, yakni dengan menciptakan hal yang berbeda dengan apa
yang telah dimiliki oleh competitor.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 16 dari 48
PRINSIP # 2
BE SENSITIVE TO CHANGE AND BE READY TO
TRANSFORM
Dunia tidak akan selamanya seperti ini. Lanskap bisnis akan terus berubah.
Kompetisi yang semakin sengit tidak mungkin dihindari lagi. Globalisasi dan
teknologi akan membuat pelanggan semakin pintar. Kalau kita tidak sensitive dan
tidak cepat – cepat mengubah diri, maka kita akan habis. Tim saya menemukan,
“Sesungguhnya Allah tidak mengubah keadaan suatu kaum sehingga mereka akan
mengubah keadaan yang ada pada mereka sendiri,” Al Qur’an Surat Ar – Ra’d :
11.
Dan saya ingat cerita yang indah Nabi Nuh yang dibisiki Tuhan bahwa akan ada
banjir besar, tapi Nabi adalah orang yang sensitif. Lalu Nabi Nuh membuat kapal.
Kita bukan Nabi, tidak munngkin Tuhan itu dengan gampang membisiki kita
kalau kita tidak sangat dekat dengan Tuhan. Karena itu kita harus mendekatkan
diri pada Tuhan secara terus menerus mengasah sensitifitas terhadap perubahan,
sehingga kita lebih siap menghadapi persaingan.
PRINSIP # 3
GUARD YOUR NAME, BE CLEAR AND
WHO YOUR ARE
Aa Gym sebelumnya telah mengatakan dengan jelas tentang pentingnya menjaga
nama baik. Menjadi koruptor termasuk orang yang tidak bisa menjaga nama baik.
padahal di dalam marketing diajarkan, “brand name is every thing”. Seringkali
orang membeli barang yang brand name bagus, walaupun secara kualitas, barang
tersebut sama dengan yang lain. Guard your name be clear of who your are.
Tim saya melihat, menyelidiki, dan memaparkan kepada saya bahwa sebelum
diangkat menjadi rasul, profesi Nabi adalah berdagang yang dia lakukan sejak
usia 12 tahun. Dalam berdagang Nabi dikenal jujur sehingga mendapat julukan Al
Amien. Mister Clean, Mister Trusty. Jadi dengan demikian Nabi Muhammad
sudah memberikan contoh, bahwa positioning dan diferensiasinya berbeda
dibanding dengan pedagang – pedagang lain.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 17 dari 48
PRINSIP # 4
CUSTOMER ARE DIFFERS, GO FIRST TO WHOM
REALLY NEED YOU
Sebetulnya ini adalah prinsip segmentation. Anda tidak perlu pergi ke semua
orang yang businessman, tetapi pergilah ke orang yang betul – betul
membutuhkan Anda. Tim saya menemukan ayat : “Hai manusia sesungguhnya
Kami menciptakan kamu dari seorang laki – laki dan perempuan, dan menjadikan
kamu berbangsa – bangsa dan bersuku – suku, supaya saling kenal mengenal,” Al-
Qur’an Surat Al Hujuraat : 13
Jadi kita berbisnis harus menentukan siapa target pasar kita. Be honest kalau Anda
tidak bisa melayani suatu segmen karena Anda tidak mampu, jangan masuk ke
situ. Layanilah orang – orang yang betul – betul menjadi priority target market
Anda.
PRINSIP # 5
ALLWAYS OFFER GOOD PACKAGE AT A FAIR PRICE
Dalam prinsip ini, kita tidak boleh menjual barang jelek dengan harga yang tinggi,
Sekali lagi tim saya menemukan kata – kata yang sangat bagus sekali, “Tidak
dihalalkan bagi seorang muslim menjual barang yang cacat, kecuali ia
memberitahukannya,” Hadist Riwayat Ibnu Majah dan Ibnu Hanbal.
Saya juga membaca sendiri cerita di mana Nabi Muhammad menemukan ada
seorang pedagang menjual jagung basah yang ditaruh tersembunyi. Nabi
menyuruh pedagang itu menaruh jagung tersebut di luar supaya orang tahu kalau
jagung itu basah.
Dan karena itu saya pikir, marketing yang benar adalah marketing yang fair, di
mana harga dan produk harus sesuai. Kalau kita menipu orang dengan
memberikan produk yang jelek lama – lama akan ketahuan dan akhirnya kita akan
ditinggalkan orang. Nabi sudah mengajarkan itu sejak dulu ketika beliau masih
menjadi seorang pedagang.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 18 dari 48
PRINSINP # 6
ALWAYS MAKE YOURSELF AVAILABLE, AND
SPREAD THE GOOD NEWS
Pada dasarnya, marketing harus menyebarkan kabar gembira, tapi kabar gembira
yang baik. Tim saya menemukan suatu kata – kata yang bagus, “Ketika
Rasulullah mengutus sahabatnya untuk menyelesaikan suatu urusan, beliau akan
bersabda, sampaikanlah kabar gembira dan janganlah menakut – nakuti, serta
permudahlah jangan mempersulit,” Hadist riwayat Abu Musa ra. Tim saya juga
menambahkan, pada Al Qur’an terdapat ayat : “Dan tiadalah Kami mengutus
kamu melainkan rahmat bagi semesta alam,” Al Qur’an surat Al Anbiyaa : 107.
Bagi saya, marketing adalah good news. Anda jangan menjual dengan menodong,
janganlah menjual dengan surat rekomendasi. Kalau Anda melakukan monopoli,
atau mendapatkan proyek dengan surat rekomendasi pejabat, ya mereka akan
membeli tapi Karena todongan. Dan yakinlah, hal itu tidak akan bertahan lama.
PRINSIP # 7
GET YOUR CUTOMER, KEEP, AND GROW THEM
Sekali Anda mendapatkan pelanggan, peliharalah hubungan yang baik dengan
mereka. Anda harus memastikan bahwa mereka selalu puas dengan layanan yang
Anda berikan, sehingga mereka menjadi loyal kepada Anda. Ini yang namanya
keep the customer. Keep the customer saja tidak cukup, seterusnya Anda juga
harus grow the customer. Artinya, Anda harus meningkatkan value yang Anda
tawarkan sehingga pelanggan berkembang, maka otomatis value yang Anda
terima dari mereka juga akan berkembang.
Tim saya menemukan kata – kata yang juga sering dikutip oleh Aa Gym :
“Barang siapa ingin dimudahkan rezekinya dan dipanjangkan umurnya, maka
hendaklah dia bersilahturahmi,” Hadist riwayat Muttafaqun Alaih. Itu yang
dinamakan customer relationship marketing atau apa yang kita sebut CRM.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 19 dari 48
PRINSIP # 8
WHATEVER YOUR BUSINESS, IT IS A SERVICE
BUSINESS
Service business bukan hanya diterapkan pada bisnis hotel. Service business
bukan hanya diterapkan pada bisnis retoran, tapi what ever your business Anda
harus mempunyai jiwa melayani pelanggan.
Tim saya menemukan lagi : “Karena tangan yang di atas atau yang memberi lebih
utama dari tangan yang dibawah, atau yang menerima. Dan mulailah dengan
orang yang kau tanggung,” Hadist riwayat Abu Hurairah ra. di dalam marketing,
customer satisfaction Anda tidak melakukan marketing.
PRINSIP # 9
ALWAYS REFINE YOUR BUSINESS PROCESS
IN TERM OF QUALITY, COST, AND DELIVERY
Tugas sebagai marketer adalah untuk selalu meningkatkan QCD : Quality, Cost,
and Delivery. Kasihan pelanggan kalau kita memberikan barang yang rongsokan.
Tim saya menemukan : “Dan penuhilah janji, karena janji itu pasti diminta
pertanggungjawabannya,” Al Qur’an Surat Al Israa : 34. Saya membaca, di dalam
Islam, dilarang melakukan tadlis, yaitu penipuan. Dalam bisnis, penipuan itu
banyak macamnya, baik yang menyangkut kualitas, kuantitas, dan waktu
penyerahan serta harga.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 20 dari 48
PRINSIP # 10
GATHER RELEVANT INFORMATION, BUT USE
WISDOM IN FINAL DECISION
Prinsip ini mengingkatkan kita untuk terus menerus belajar, belajar, dan belajar.
Karena dunia ini berubah terus, Anda tidak bisa menjadi businessman, atau
seorang marketer yang hanya menggunakan pendekatan – pendekatan lama,
walaupun pendekatan itu dulunya bagus. Tapi sekarang, pendekatan – pendekatan
itu harus terus – menerus diubah atau diperbaharui.
Tim saya menemukan bahwa : “Allah akan meninggikan orang – orang yang
beriman di antaramu dan orang – orang yang diberi ilmu pengetahuan beberapa
derajat,” Al Qur’an surat Al Mujadalah : 11
Menurut tim saya, dalam hadist juga disebutkan bahwa,” Menuntut ilmu
hukumnya wajib bagi muslim”, Hadist riwayat Ibnu Majah dan Baihaki. Bahkan
Nabi pernah bersabda “Tuntutlah ilmu walau sampai ke Negeri Cina.”

Saya belum berani mengatakan bahwa saya berbisnis dengan jujur itu karena
iman, karena saya merasa iman saya belum sekuat Aa gym. Tapi dalam bahasa
marketing, saya sering mengatakan begini kepada 140 orang anak buah saya,
MarkPlus&Co harus benar – benar menjadi konsultan yang mendapatkan proyek
tidak boleh menyuap.
Dan saya berani menjamin bahwa dalam mendapatkan klien, MarkPlus&Co selalu
mendapatkan proyek dengan bersih, termasuk di banyak BUMN. setiap saat saya
selalu menekankan pentingnya kejujuran. Kalau harus sampai kalah dalam tender,
tidak menjadi masalah, karena kita sudah berani bermain secara fair. Tetapi saya
belum berani mengatakan bahwa hal itu karena iman, tapi lebih karena apa yang
kita sebut sebagai diferensiasi.
Di dalam marketing kita mengatakan bahwa to be different is very important, jadi
jangan menjadi me too atau peniru. Sebetulnya ajaran marketing terbesar bukan
berarti berjualan dengan menipu. ajaran marketing terbesar adalah kenalilah
competitor Anda, dan jadilah different. Dan jagalah diferensiasi Anda kepada
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 21 dari 48
pelanggan sehingga mereka menghargai diferensiasi Anda. Dia membeli dengan
jujur. Dia membeli dengan senang.
MarkPlus&Co sudah dikenal barangkali karena sudah 15 tahun berkiprah di
Indonesia. MarkPlus&Co menjadi pioneer marketing sejak 15 tahun yang lalu,
ketika Pak Harto masih memiliki power. Saat itu tidak ada orang yang percaya
pada marketing, karena berbisnis itu gampang asal dekat dengan kekuasaan.
Tetapi kondisi persaingan telah membuat orang butuh marketing. Karena
MarkPlus&Co yang memulai terlebih dahulu, dari positioningnya jelas, tidak
boleh menyuap dalam bentuk apapun. Akhirnya semua orang tahu. Jadi orang
yang menghubungi kami sudah tahu, walaupun dia kepala proyek dia tidak bakal
mendapatkan apa – apa. Kalau dia menginginkan sesuatu dari proyeknya karena
kebetulan dia memegang anggaran besar, tak mungkin mereka minta dari kami.
Saya melihat tren dunia sebetulnya juga ke arah itu. Walupun mungkin terdapat
70% atau bahkan lebih orang yang melakukan bisnis dengan mengikuti arus. Di
dalam bisnis internasional, kita harus belajar dari kasus keterpurukan Enron.
Good corporate governance (GCG) saat ini sudah menjadi syarat mutlak
perusahaan, apalagi perusahaan public. Kalau perusahaan tidak menjalankan GCG
dengan bagus, tidak transparan kepada shareholder, main – main di belakang
dengan melakukan pembukuan ganda dan sebagainya, maka harga sahamnya akan
turun.
Dan pada waktu kami beberapa tahun yang lalu diminta membantu sebuah bank
syariah untuk merancang strategi marketingnya, ketika bank syariah untuk
pertama kalinya dibuka untuk umum, saya percaya bahwa bank syariah sesudah
momen krisis ini saatnya muncul. Hal ini mengingat positioning dari bank syariah
sebagai bank yang jujur, bank yang menerima simpanan orang tetapi diusahakan
secara jujur, dan keuntungan bersama.
Karena itu sekarang kita lihat di Indonesia bank syriah itu berkembeng dengan
pesat. Itu berkaitan dengan kebutuhan setiap orang untuk berhubungan dengan
bank – bank yang jujur. Jadi menurut keyakinan saya, sudah saatnya kita
melakukan bisnis dengan dilandasi semangat spiritual. Jadi 100% bisnis, 100%
spiritual, bukan balancing, bikan juga polaris, tetapi integrasi antara bisnis dan
spiritual.
Kalau kita betul – betul menjalankan integrasi, menjalankan bisnis kita dengan
cara jujur, secara iman mungkin seperti yang dikatakan Aa Gym, akan
mendapatkan rezeki dari Tuhan. Tetapi secara marketing benar, karena kita sedikit
dari sekian orang yang melakukan itu. Kita akan menjadi different, menjadi
semacam berlian dalam Lumpur.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 22 dari 48
Terakhir saya ingin menambahkan, bahwa semua topic yang menjadi tema Aa
Gym keyword-nya adalah hati. Hati yang bening hati yang bersih, karena hati
kelihatannya sudah banyak yang hilang untuk saat ini.
Dan itu bukan Cuma tren Indonesia atau tren agama – agama tertentu tapi saya
kira tren universal. Sehingga salah satu lagu yang menjadi hit di dunia
dinyanyikan oleh kelompok Black Eyed Peas, anak – anak muda dengan gaya
R&B berjudul “Where is the love.” Dimanakah cinta? Katanya, kebenaran masih
tersimpan di bawah karpet, jika kita tidak mengerti tentang kebenaran, maka kita
tidak akan pernah menemukan cinta.
Kebenaran, cinta dan moralitas, bermuara pada hati.
Mudah – mudahan kali ini Anda menemukan hati itu kembali.
Dan mulai berbisnis dengan hati.

Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 23 dari 48
BAGIAN III
KOLOM
HERMAWAN KARTAJAYA
MENGENAI
COMPASSIONATE
MARKETING
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 24 dari 48
PENGUTIL KERAH PUTIH
DAN MASA DEPAN
CORPORATE GOVERNANCE
Awalnya, stock option diciptakan dengan tujuan yang sangat indah dan mulia.
Intinya, manajer dan eksekutif perusahaan diberi opsi kepemilikan saham yang
nyaris risk – free untuk jangka waktu tertentu; opsi itu bisa di exercise ketika,
misalnya, harga saham tersebut sedang bagus.
Tujuannya apa? Tujuan mulianya adalah agar si eksekutif bisa bertindak layaknya
pemilik alias shareholder. Dengan demikian, akan terwujud “company of
owners”. Karena eksekutif bertindak layaknya pemilik, maka misi utama eksekutif
akan sama dan sebangun dengan misi pemilik, yaitu value creation. Atau
gampangnya, setiap jengkal pikiran dan tindakan eksekutif akan selalu mengarah
ke duit, duit, dan duit. Wajar saja, karena misi utama perusahaan memang value
creation atau mesin duit
Namun tujuan yang begitu mulia itu menjadi amburadul ketika kita melihat
kenyataan skandal keuangan yang terjadi beruntun beberapa bulan terakhir. Kira –
kira dua minggu lalu saya membaca survey majalah Fortune Hasil survey.
Ini menarik sekaligus menyedihkan. Melalui survey ini, Fortune berhasil
mengungkapkan, di tengah – tengah bangkrut dan hancurnya perusahaan –
perusahaan seperti Enron, Qwest Communications, Global Crossing, Tyco,
WorldCom (sebut saja mereka, the America’s Losingest Companies), terdapat
segelintir eksekutif yang mengambil keuntungan, dan bisa dipastikan mereka
mendadak kaya raya tak hanya sekadar kaya raya, tapi amat sangat kaya raya.
Kenapa mereka kaya raya? Karena, mereka berhasil meng-exercise opsi saham
mereka di tingkat harga saat posisi perusahaan tersebut di Wall Street berada di
puncak – puncaknya. Kita tahu perusahaan – perusahaan macam Enron,
WorldCom. Qwest, atau Global Crossing adalah perusahaan balon (bubble
companies) yang dimasa jayanya begitu perkasa di Wall Street karena ditiup
sebesar – besarnya oleh eksekutif puncak mereka. Namanya saja perusahaan
balon, dari luar memang kelihatan gemuk, perkasa, dan molek, tapi sesungguhnya
dalamnya kosong melompong dan rapuh. Umumnya, para eksekutif menjual opsi
saham mereka saat harga di puncak – puncaknya, kira – kira detik – detik
menjelang balon mau meletus.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 25 dari 48
Keuntungan yang mereka raup nggak kepalang tanggung. Philip Anschultz,
Direktur Qwest Communication, meraup tak kurang dari US$2,26 miliar; Lou Pai,
Kepala Divisi Enron meraup US$994 juta; Gary Winnick, Chairman Global
Crossing meraup US$951 juta. Fortune menghitung total transaksi opsi saham ini
selama setahun terakhir di perusahaan balon yang nilai sahamnya terjun bebas
minimal 75%. Anda mau tahu berapa angka yang dihasilkan survey fortune?
sangat fantastis, sekitar US$66 Miliar atau kira – kira setengah GDP kita
Apa artinya ini? Artinya, ketika investor public di Wall Street menangis meraung
– raung atau bahkan bunuh diri karena 70%, 90%, atau seluruh hartanya ludes,
segelintir eksekutif ini berhasil meraup dana segar US$66 miliar. Ketika investor
public jatuh miskin, mereka menimbun kekayaan yang tak habis tujuh turunan.
Pertanyaannya, apa salah mereka meng – exercise opsi saham mereka saat harga
sedang bagus – bagusnya? Sama Sekali tak salah. Yang salah adalah, ketika
dengan sadar mereka “meniup” kinerja palsu dari perusahaan balon yang mereka
kelola, kemudian mempercantiknya, dan setelah cantik kemudian mereka
mengedarkannya ke investor public, si investor kepincut dan jatuh cinta setengah
mati, si investor kemudian berburu saham perusahaan tersebut, harga saham
meroket, dan akhirnya ketika saham berada di puncak, inilah kesempatan emas
bagi si eksekutif meraup kekayaan. Jadi masalah etik yang sangat serius di sini
adalah, si eksekutif tamak ini tahu persis bahkan sengaja menjual dagangan yang
tampak luarnya saja cantik molek, tapi dalamnya busuk penuh ulat.
Yang menarik, cara para eksekutif ini mempercanrik perusahaan balon. Mereka
membawanya ke salon dan me-makeup-nya habis – habisan : diluluri, dibedaki,
dilipstiki. Bagaimana cara mereka me-makeup? Pertama, melalui creative
accounting: kapitalisasi expense, transaksi off-balance sheet; transfer pricing ke
account – account yang merupakan “tax heaven area”, dan sebagainya. Kedua,
dengan mengundang konsultan top dunia untuk membikinkan cetak biru strategi
dan model bisnis yang solid, yang laku keras ketika dijual di Wall Street.
Dan ketiga, berkongkalikong dengan para analis dari perushaan investment bank
top dunia untuk meroketkan harga saham. Kita tahu para analis ini adalah orang
kuat di Wall Street. Merekalah sesungguhnya yang berkuasa mempengaruhi,
membentuk, dan menaikturunkan harga saham, melalui nasihat dan laporan riset
mereka kepada investor. Seharusnya nasihat dan laporan riset tersebut jujur dan
obyektif, tapi karena mereka dibayar, ya nasihat dan laporan riset itu kemudian
menjadi alat mereka untuk mendongkrak harga saham perusahaan balon di atas.
Kasus di atas adalah bagian kecil saja dari gambaran muram praktik corporate
governance. Kasus tersebut menunjukkan kepada kita betapa semakin tingginya
kompleksitas bisnis, semakin canggihnya tools manajemen bisnis, dan semakin
majunya perangkat regulasi, ternyata bukannya menjadikan praktik corporate
governance semakin dewasa dan beradab. Justru sebaliknya, ia semakin
kebablasan tanpa etika, tanpa nilai – nilai moral, tanpa pegangan.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 26 dari 48
Karena itu, era pasca – Enron membutuhkan model perusahaan yang berbeda dari
masa – masa sebelumnya. Era ini membutuhkan tak hanya value – based
corporation, tapi juga values – based corporation. Yang pertama merupakan
model perusahaan yang fokusnya value creation alias cari duit, cari duit, dan cari
duit. Sementara yang kedua, fokusnya adalah nilai – nilai (values) moral dan etik.
Yang pertama akan menjadikan manajemen sebagai economic animal, sementara
yang kedua akan menjadikan manajemen sebagai etchical human. Alangkah
indahnya jika kedua model itu disintesiskan, karena dengan demikian perusahaan
tak akan keblinger seperti yang terjadi dalam kasus di atas.
(Ditulis oleh Yuswohady di majalah SWA. 24 Oktober – 4 November 2002)
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 27 dari 48
GANJARAN BAGI YANG
MEMBOHONGI PELANGGAN
Selama tahun tahun 2002 lalu kita diguncang oleh peristiwa demi peristiwa
rontoknya perusahaan – perusahaan top dunia yang tak hanya disegani oleh para
pakar manajemen karena kesolidan model bisnisnya.
Enron, Worldcom, Kmart, Global Crossing dinyatakan bangkrut oleh pengadilan
karena salah strategi dan melakukan manipulasi akuntansi. Arthur Andersen seprti
mati suri karena diduga bersama – sama dengan beberapa perusahaan tersebut
melakukan rekayasa laporan keuangan. Perusahaan itu limbung karena hilangnya
kredibilitas. Kalau kredibilitas hilang, maka ekuitas merek mereka rontok, dan
matinya perusahaan – perusahaan tersebut tinggal tunggu waktu saja.
Yang kita lihat adalah, bahwa hanya beberapa hari sebelum perusahaan –
perusahaan tersebut limbung dan akhirnya bangkrut, mereka memiliki ekuitas
merek yang kuat, nahkan sangat – sangat kuat, Enron adalah raksasa energi yang
dimasa puncaknya pernah dihargai Wall Street lebih dari $60 miliar – kira – kira
separoh GDP Indonesia. Arthur Andersen adalah anggota Big Five perusahaan
akuntansi terkemuka dunia dengan klien – klien besar sekelas GE dan IBM.
Sementara dibawah kepemimpinan CEO-nya yang flamboyant Bernie Ebbers,
Worldcom adalah raksasa telekomunikasi global dengan reputasi mengagumkan.
Namun ekuitas merek yang begitu tinggi dan kokoh tersebut bisa habis hanya
dalam semalam. Ada semacam ledakan disruptive, layaknya ledakan sebuah bom
atom, yang mampu memusnahkan bangunan merek tuntas hingga ke akar –
akarnya.
Bagaimana tidak disruptive? Coba saja kita lihat indicator – indicator berikut :
Sebelumnya Enron pernah bernilai $50-an miliar, begitu skandal terkuak
perusahaan ini praktis tak punya nilai, sebelum akhirnya bangkrut.
Sebelum terkena skandal, harga saham Worldcom masih berkisar $60-an per
saham, namun hanya dalam ukuran jam nilai saham ini terjun bebas tinggal
beberapa sen; Andersen lain lagi, walaupun tak sampai ditutup, hanya dalam
beberapa hari ia ditinggalkan oleh lebih dari 170 klien loyalnya, termasuk
Colgate-Palmolive yang telah menjadi kliennya selama 80 tahun. Bisa saya
katakana, sebagai sebuah merek Andersen saat ini sudah mati karena “jantung”
operasinya, yaitu integritas dan kredibilitas, sudah tidak dimilikinya lagi.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 28 dari 48
Pelajaran apa yang bisa kita petik dari kasus ini? Yang kita lihat adalh bahwa
Enron, Worldcom dan Global Crossing mencoba membohongi pelanggannya
dengan memanipulasi dan menyembunyikan informasi keuangannya.
Siapa pelanggan Enron, Worldcom, dan Global Crossing dalam hal ini?
Tak lain adalah para investor di Wall Street. Mereka ini adalah para “investor
customer” yang menanam dananya ke perusahaan – perusahaan tersebut. (Ingat
kita memiliki tiga jenis pelanggan: “external customer” , “internal customer”
yaitu para karyawan, dan “investor customer” yang menanam dananya di
perusahaan)
Begitu semua kebohongan itu terungkap akhir 2002 lalu, maka apa yang
kemudian terjadi? Pelanggan di Wall Street ini marah besar, dan wajar saja kalau
kemudian mereka melakukan rush, menarik dananya. Hasilnya, harga saham
perusahaan tersebut terjun bebas, dan dalam hitungan jam menjadi hampir tak
bernilai sama sekali.
Itulah ganjaran bagi perusahaan yang berbohong kepada pelanggannya!!!!!
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 29 dari 48
BRAND GOES SPIRITUAL
Apa yang membedakan merek – merek terkemuka seperti Singapore Airlines,
Harley Davidson, The Body Shop, Hard Rock Café, Starbucks dengan merek –
merek lainnya?
Merek – merek diatas memiliki charisma. Sebuah merek yang kharismatik tidak
hanya mengandung unsure emosional, intelektual atau functional value saja.
Tetapi merek tersebut juga mengandung spiritual value yang menjadi pengikat
antara merek dengan customer-nya
Ini pulalah yang dikemukakan oleh sejumlah raksasa bisnis dunia pada Global
Brand Forum di Singapore tanggal 1 dan 2 Desember 2003 lalu. Saya hadir
langsung pada acara yang diorganisir oleh The Ogilvy Group dan International
Enterprise Singapore ini. Pesertanya sangat ramai, sekitar 700 pimpinan
perusahaan terkemuka dari seluruh dunia menghadiri acara tahunan ini.
Memang, di lanskap bisnis baru saat ini, merek bukan lagi tugas dan tanggung
jawab brand managers atau marketing managers semata. Namun sesungguhnya
tanggung jawab seorang CEO. Ingat keputusan yang keliru bisa merusak value
corporate secara keseluruhan.
Bagi para pemasar dan pebisnis, Global Brand Forum yang dilangsungkan tiap
tahun di Davos, Swiss. Sejumlah nama kondang menjadi pembicara di acara ini,
mulai dari Scott Bedbury, mantan chief marketing strategist di Nike dan
Starbucks sampai Tom Peters, yang disebut sebagai the “Ur-Guru” (gurunya guru)
bidang manajemen oleh majalah Fortune, hadir mengungkapkan pandangan –
pandangannya tentang isu kritis menyangkut masalah merek dan bisnis di masa
depan.
Menurut Tom Peters, produk adalah sejarah. Perusahaan harus memasarkannya ke
hati (consumer’s heart) bukan ke pikirannya (consumer’s mind). Branding
bukanlah mensosialisasikan karakter mengenai siapa sesungguhnya saya. Kata
Tom Peters, “Branding is about our story and why it’s persuasive. Emotion, after
all, is the one ability that cannot be automated.”
Sementara Ho Kwon Ping, Chairman dari Banyan Tree Group, yang juga menjadi
pembicara, mengatakan lain lagi, bahwa sebuah merek harus mengandung
universal values yang membuat pelanggan dan karyawan merasa bangga
diasosiasikan dengan merek itu. Kata Ho, “Consumers have grown cynical about
slick advertising and are drawn to brands with deeply held values.”
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 30 dari 48
Pembicara lainnya, Naryana Murthy, Chairman of Infosys Technologies,
mengatakan bahwa merek adalah “a mark of trust.” Kata Murthy, kalau Anda
mau menciptakan merek, maka Anda harus menciptakan trust, confort dan
confidence ke pelanggan Anda. Dan untuk melakukannya Anda harus
menciptakan relationship jangka panjang berdasarkan integritas, kejujuran,
moralitas terpuji.
Saya sendiri merasa sangat beruntung, karena bisa makan siang bersama dengan
dua pembicara lainnya, Anita Roddick, pendiri The Body Shop, dan Deepak
Chopra, mind body Guru dan penulis buku best-seller dunia. Saya terkesan
dengan ucapan Deepak Chopra,”Leaders who look only for external goals, such
as money, will fail.”
Nah dari deretan pembicara dan materi yang mereka sajikan, bisa kita lihat bahwa
konsep mereka sudah menuju ke spiritual. Merek yang kokoh bukan hanya lagi
merek yang berbeda dari yang lain, memberikan value unggul, dan memberikan
kualitas nomor satu kepada pelanggan, namun juga harus mampu memberikan dan
memancarkan spiritual values kepada semua pihak, terutama pelanggan dan
karyawan.
Spiritual brand bukan bermakna merek yang berhubungan dengan agama. Bukan,
bukan itu. Mirip dengan yang dikatakan Murthy, spiritual brand artinya merek
yang berhasil membangun dirinya dengan penuh integritas, kejujuran dan estetika.
Merek dengan spiritual values inilah yang disebut spiritual brand.
Tentu saja, membangun spiritual brand membutuhkan waktu yang lama dan
upaya yang konsisten. Serangkain skandal keuangan yang terjadi di Amerika
Serikat dalam beberapa tahun terakhir menunjukkan bahwa merek yang sangat
kokoh seperti Enron bisa hancur dalam sekejap jika tidak menerapkan good
corporate governance dan business ethics dalam perusahaan itu. Kedua hal –
inilah good corporate governance dan business ethics – yang merupakan fondasi
utama dalam pembangunan spiritual brands.
Spiritual values harus benar – benar dihayati oleh seluruh karyawan yang terlibat
dalam proses brand building. Spiritual values harus menjadi kultur perusahaan.
Tugas top executive-lah – terutama CEO – untuk mengkomunikasikan spiritual
values yang dianut perusahaan kepada seluruh karyawan. Sppritual brands tidak
akan berbentuk jika spiritual values yang telah ditetapkan tidak “dibeli” terlebih
dahulu oleh seluruh karyawan (istilah karennya adalah: selling the brand inside).
pada akhirnya, spiritual brand mampu mebuat pelanggannya menjadi sangat
percaya kepada merek itu. Pelanggan ini tidak akan lagi melihat offering dari
merek itu. Secara otomatis, apapun yang ditawarkan akan dibelinya. Tidak heran
jika para pelanggan ini juga mau membayar dengan harga premium untuk
spiritual brands ini. Anda bisa lihat, harga secangkir kopi Starbucks atau tiket
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 31 dari 48
penerbangan Singapore Airlines misalnya, bisa beberapa kali lipat di atas para
pemain lain.
Pelanggan jenis ini juga akan mendukung upaya apapun yang dilakukan spiritual
brands itu. Bahkan jika ada yang mengkritik, pelanggan inilah yang akan maju
membela merek itu tanpa diminta. Inilah yang saya sebut sebagai spiritual
advocate customers. Pelanggan seperti inilah yang diidam – idamkan oleh seluruh
perusahaan, karena mereka merupakan pelanggan loyal kita seumur hidup.
(Dimuat di Asia Inc. edisi Maret 2004)
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 32 dari 48
POSITIONING
ADALAH JANJI
Dalam buku saya terbaru Marketing in Venus, saya menulis bahwa pelanggan
semakin lama menjadi semakin emosional layaknya wanita. Saya menulis di situ
bahwa dalam hal kejujuran, trust, dan kepercayaan karakteristik pelanggan di
Venus ini sudah mirip dengan wanita. Kita tahu bahwa wanita itu paling
menghargai yang namanya trust dan kepercayaan. Begitu ia tidak percaya kepada
Anda karena barangkali Anda bohong kepadanya, maka sampai kapanpun ia tak
akan mempercayai Anda. Akan sulit sekali Anda melakukan recovery untuk
memulihkan kepercayaannya.
Suatu kali Shakepeare, pujangga kenamaan Inggris, pernah memperingatkan agar
jangan sekali – kali kita membohongi wanita. Kenapa? Karena sekali Anda
membohongi wanita maka selamanya ia tak akan mempercayai Anda. Dan tak
hanya itu, ia juaga akan marah besar dan bahkan menjadikan Anda musuh tak
termaafkan. “Hell hathno fury like a woman scorned,” kata Sang Pujangga.
Karena itu dalam buku tersebut pun tegas saya mengatakan, “Jangan sekali – kali
Anda membohongi pelanggan Venus!!!!” Sekali saja Anda ketahuan membohongi
pelanggan Venus, untuk selamanya mereka akan meninggalkan Anda. Dan ingat!
Memusuhi Anda selamanya. Anda jangan berpikir bahwa pelanggan Venus itu
maksudnya pelanggan dari planet Venus nun jauh di sana. Pelanggan Venus itu ya
pelanggan yang sehari – hari kita hadapi. Pelanggan yang karena pengaruh
teknologi informasi menjadi semakin emosional dan sensitive terhadap value yang
Anda berikan.
Di dunia yang semakin emosional (“Dunia Venus”) tersebut Anda harus ekstra
hati – hati. Kenapa? Karena pelanggan Venus memiliki “indra keenam”, semacam
kemampuan “supranatural” yang memungkinkan mereka mengetahui apakah
Anda bohong atau tidak. Bukan melalui dari kata – kata, tapi terutama suara,
ekpresi wajah, dan bahasa tubuh Anda.
Anda barangkali tidak tahu bahwa dalam komunikasi face to face, ucapan dan
kata – kata hanya 7 – 10 persen saja menerangkan informasi yang Anda
sampaikan kepada orang lain. Sekitar 20 – 30 persen diterangkan oleh sinyal –
sinyal non verbal, apakah itu roman muka, gerak mata, atau bahasa tubuh yang
lain. Dengan kemampuan alat sensor yang canggih di otak pelanggan Venus bisa
menangkap dan menganalisa informasi ini, baik verbal maupun nonverbal, dengan
sangat baik.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 33 dari 48
Apa ini artinya? Artinya, pelanggan Venus akan tahu kalau Anda berbohong
katakan Anda mengatakan A padahal yang sesungguhnya B, Atau bilang mangga
yang Anda jual manis – manis padahal didalamnya banyak ulatnya. Mereka akan
tahu bukan dari perkataan Anda, tapi dari sinyal – sinyal nonverbal apakah itu
roman muka, emosi ataupun gerak mata Anda.
Artinya lagi, Anda tidak boleh main – main membohongi pelanggan Venus.
Serapi apapun Anda menyembunyikan kebohongan Anda, pada akhirnya mereka
akan mampu mengungkapkanya.
Sejak lebih dari sepuluh tahun lalu saat saya mengeluarkan model saya yang
pertama, Marketing Plus 2000, Saya sudah mengatakan bahwa positioning adalah
janji :
Kalau Dell mengatakan positioningnya adalah, “The world’s most customerfocused
comuter company,” maka sesungguhnya Dell mengumbar janji kepada
seluruh pelanggannya bahwa ia adalah perusahaan computer yang paling peduli
dengan pelanggannya.
Kalau BCA mengatakan positioningnya diwakili oleh satu kata “convenience”
maka sesungguhnya ia berjanji bahwa pelanggan akan mendapatkan seribu
kemudahan dari layanan – layanan BCA apakah iu layanan ATM, Klik BCA,
Mobile Banking, hingga kartu debit dan kredit.
Kalau Kijang memposisikan diri sebagai “Mobil Keluarga” maka sesungguhnya ia
sedang berjanji kepada semua keluarga di Indonesia bahwa mereka tak perlu
punya dua atau tiga mibil di rumah, karena hanya dengan satu Kijang, bapak-ibu,
anak-anak, kakek-nenek, teteh, bisa terangkut kalau mau liburan di Puncak.
Namanya saja janji, maka Anda harus memenuhinya. Tidak boleh tidak!
Kalau Dell mengatakan dirinya perusahaan computer yang paling focus ke
pelanggan maka ia harus paling peduli kepada pelanggan di banding raksasa
computer yang lain. Kalau BCA mengatakan dirinya adalah “convenience” maka
ia tak boleh membiarkan nasabahnya antri bermeter-meter di depan mesin ATMnya.
Kalau Kijang menyebut dirinya mobil keluarga maka ia harus mampu
menciptakan mobil yang pas untuk keluarga Indonesia. Kalau Anda janji ke
pelanggan untuk memberikan A, maka Anda harus meberikan A, tak boleh B atau
C.
Positioning adalah pertaruhan Anda ke pelanggan. Begitu Anda meleset
memenuhinya, maka habislah Anda. Begitu Anda ketahuan ingkar janji, maka
sesungguhnya nyawa merek Anda tinggal 5 Persen.
Dulu di Bumi yang pelanggannya rasional, barangkali nyawa Anda masih 20 atau
30 persen. Namun kini di Venus yang pelanggannya sangat emosional nyawa
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 34 dari 48
merek Anda betul – betul tinggal lima persen, atau barangkali malah habis sama
sekali.
Kenapa?
Karena seperti kata Shakespeare tadi, pelanggan Venus tak hanya meninggalkan
merek Anda untuk selama – lamanya, tapi jauh lebih buruk dari itu, memusuhi
merek Anda untuk selama – lamanya.
Dan ingat!!!
Pelanggan Venus paling suka ngobrol, bercerita, dan berbagi rasa dengan
sesamanya. Begitu seorang pelanggan Venus memproklamirkan bahwa merek
Anda menjadi musuhnya, maka ia akan cerita ke semua orang keburukan –
keburukannya. Ia akan menjadi advocator Anda – bukan advocator yang baik, tapi
advocator yang membawa merek Anda ke jurang kehancuran.
Karena itu saran saya : Jangan sekali kali janji kepada mereka kalau Anda masih
ragu – ragu untuk bisa memenuhinya. Lebih baik Anda bersabar untuk memenuhi
dulu apa – apa saja yang akan Anda janjikan. Begitu seratus duapuluh lima persen
Anda yakin mampu memenuhinya, pada saat itulah Anda boleh mengatakan janji
Anda dan tidak seharusnya mengatakan janji Anda ke pelanggan Venus bukanlah
persoalan kecil dan sepele. Itu adalah persoalan sangat – sangat besar, karena akan
menentukan mati – hidupnya merek Anda.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 35 dari 48
AA GYM :
THE SPIRITUAL
MARKETER
Saya pertama kali bertemu Aa Gym pada September 2003 lalu. Sebelumnya, saya
memang sudah sering membaca berbagai tulisan tentangnya dan sesekali
menonton acaranya di berbagai media massa. Staf dan klien saya pun sering
membicarakan sosok yang satu ini. Makanya saya jadi penasaran seperti apakah
Aa Gym ini in person?
Nah, waktu kebetulan saya ada di Bandung, saya langsung saja berkunjung ke
Pesantren Daarut Tauhiid yang diasuh oleh Aa Gym. Bersama beberapa staf saya,
kami disambut dengan sangat ramah dan hangat oleh Aa gym beserta para
santrinya. Kami pun lalu ngobrol banyak tentang berbagai hal. Salah satunya yang
membuat saya terkesan adalah pandangan Aa Gym tentang bisnis dan
kewirausahaan.
Memang saya saksikan sendiri, Pesantren Daarut Tauhid ini berbeda dari
bayangan saya semula. Pesantren ini membaur dengan masyarakat sekitarnya,
tidak ada tembok ataupun gerbang yang membatasi lingkungan pesantren. Para
santri tinggal dirumah – rumah penduduk sekitar. Mereka pun memenuhi
kebutuhan hidupnya dengan membeli berbagai barang dari penduduk sekitar itu.
Maka, dengan sendirinya, ekonomi masyarakat pun akan tumbuh dan mampu
memicu semangat kewirausahaan di sekitar wilayah itu.
Aa Gym ngomong kalau ia selalu menekankan kepada setiap orang agar mampu
menumbuhkan semangat wirausaha. Orang akan lebih memiliki rasa percaya diri
dan kehormatan jika mampu menjaga diri dari meminta – minta. Selain itu, Aa
Gym juga berpandangan bahwa dalam berbisnis pun niat dan caranya lah yang
paling penting. Niat kita haruslah bersih, caranya pun haruslah benar.
Saya nilai, dari sisi pemasaran, apa yang dilakukan oleh Aa Gym inilah yang saya
sebut sebagai spiritual marketing. Spiritual marketing bukan berarti bahwa kita
melakukan bisnis yang berhubungan dengan agama, yang berhubungan dengan
perangkat ibadah misalnya. Spiritual marketing berarti kita mampu memberikan
kebahagian kepada setiap orang yang terlibat dalam berbisnis, baik diri kita
maupun orang lain seperti pelanggan, pemasok, distributor, dan bahkan para
pesaing kita. Kita harus mencintai pelanggan dan sekaligus juga menghargai para
pesaing kita.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 36 dari 48
Nah, walaupun kita bergerak dalam bisnis yang berhubungan dengan agama,
namun jika tidak mampu memberikan kebahagian kepada semua pihak, berarti
kita belum melaksanakan spiritual marketing. Sebaliknya, jika dalam berbisnis
kita sudah mampu memberikan kebahagian ini, pada dasarnya kita sudah
menjalankan spiritual marketing, apapun bidang bisnis yang kita geluti.
Mungkin timbul pertanyaan, lho, kok bisa kita ikut membahagiakan para pesaing?
Bagi saya, persaingan itu baik, karena persaingan turut, membesarkan pasar. Jika
kita sukses, berarti permintaan pasar terhadap penawaran kita juga membesar.
Tentu saja kita memiliki keterbatasan – keterbatasan, sehingga tidak semua
permintaan yang ada dapat kita penuhi. Nah, permintaan pasar inilah yang
nantinya akan dipenuhi oleh para pesaing kita.
Selain itu, kita juga dapat belajar sesuatu dari para pesaing kita itu untuk
memperbaiki diri kita sendiri. Persaingan memberikan kita inspirasi dan semangat
untuk terus berusaha. Maka, pada akhirnya, terjadilah hubungan yang saling
menguntungkan antara kita dengan para pesaing.
Begitu pula dengan pelanggan. Jika pelanggan sudah sangat percaya kepada kita,
ia akan menjadi seseorang yang saya sebut Spiritual advocate. Ia bukan hanya
akan membeli produk atau servis yang kita tawarkan. Lebih jauh, ia akan
mendukung usaha apapun yang kita lakukan. Bahkan, jika ada yang mengkritik
kita, orang inilah yang akan maju membela kita tanpa diminta.
Bagi saya, pemasaran itu memiliki tiga dimensi, yaitu Strategy, Tactic, dan Value.
Strategy berorientasi pada cara memenangkan long – term mind share di benak
pelanggan. Tactic berorientasi pada short – term market share. Sedangkan Value
berorientasi pada lifetime heart – share. Nah, spiritual advocade inilah yang akan
kita dapatkan jika kita sudah mampu memenangkan lifetime heart – share.
Sikap empati kepada orang lain – baik pelanggan maupun pesaing – inilah yang
harus kita miliki. Kita harus selalu mencoba untuk menempatkan diri pada situasi
yang dialami orang tersebut. Kita pun harus memperlakukan mereka seperti
layaknya kita ingin diperlakukan oleh mereka. Jika kita tidak ingin membeli
produk yang kelihatannya bagus namun ternyata berkualitas buruk, tentunya kita
tidak boleh melakukan hal yang sama kepada pelanggan kita.
Memang, bagi sebagian orang, pemasaran itu masih sering disalah artikan.
Pemasaran sering disamakan dengan membujuk pelanggan atau konsumen.
Marketing is cheating, demikian anggapan sebagian orang. Namun, bagi saya,
marketing is not cheating. Marketing is about how to get customer and grow them
with your business.
Saat ini, pelanggan menjadi semakin pintar sekaligus emosional. Emosi adalah
pintu masuk bagi pelanggan. Mereka harus merasa enak (feel good) dulu dan
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 37 dari 48
sesudah itu mereka akan tetap ‘menyaring’ informasi yang masuk dengan
menggunakan rasionya. Jika secara emosional sudah tidak terbangun minat dalam
diri pelanggan, maka produk atau jasa yang kita tawarkan nantinya tidak akan
dapat masuk ke hati mereka.
Konsumen sekarang cenderung menggunakan EQ-nya dulu dan setelah itu baru
IQ-nya. Bahkan pada akhirnya mereka juga akan menggunakan SQ-nya.
Konsumen akan mempertimbangkan kesesuaian produk dan jasa terhadap nilai –
nilai spiritual yang diyakininya. Pemasaran itu bukan sekadar penjualan, tetapi
membuat pelanggan selalu berpikir tentang kita, membuat pelanggan jatuh cinta
kepada kita.
Sebelum jatuh cinta, tentunya kita harus membuat orang itu percaya kepada kita
terlebih dahulu. Kepercayaan orang adalah fondasi dasar dalam berbisnis.
Semakin orang itu percaya kepada kita, maka semakin mereka bersedia
menyerahkan segalanya kepada kita. Karena itu, di tengah – tengah era yang
semakin tidak pasti saat ini, integritas justru semakin meragukan banyak hal,
maka kecakapan, profesionalitas, dan yang terpenting, kejujuran, akan menjadi hal
– hal yang makin dibutuhkan.
Banyak orang berpendapat, bagaimana bisa berwirausaha, lha wong modalnya
sendiri tidak ada. Bagi saya, seperti yang sudah saya lihat sendiri pada diri Aa
Gym, modal pertama dan terbesar bukanlah materi, bukanlah uang atau harta –
benda, namun semangat dan keyakinan.
Begitu juga bicara masalah keuntungan. Banyak yang merasa bahwa menjadi
wirausahawan pendapatannya lebih kecil daripada pekerja kantoran misalnya.
Sekali lagi saya nyatakan, makna keuntungan (profit) di era spiritual marketing
bukanlah uang, harta, atau jabatan semata. Yang lebih penting adalah timbulnya
rasa kebahagiaan, rasa kedamaian dalam diri. Inilah jugalah yang saya lihat pada
diri Aa Gym. Walaupun sudah sangat sukses seperti sekarang ini, ia tidak memilih
hidup bermewah diri. Ia lebih merasa bahagia dengan hidupnya yang bersahaja
serta terus – menerus memimpin para santrinya untuk juga bersikap serupa
dengannya.
Memang, spiritual marketing bertujuan untuk mencapai sebuah solusi yang adil
dan transparan bagi semua pihak yang terlibat. Tidak akan ada pihak yang merasa
dirugikan. Tidak akan ada pula pihak yang berburuk sangka. Nilai – nilai spiritual
dalam berbisnis ini juga akan mampu memperbaiki inner – side kita. Sebaliknya,
semakin spiritual seseorang, ia pun akan lebih mampu menjalankan bisnisnya
dengan lebih tenang dan dicintai oleh semua pihak.
Aa Gym bukan hanya sekedar memberikan teori, tetapi ia pun telah
mempraktikkannya dan terbukti sangat sukses.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 38 dari 48
Maka, rasanya tidak salah kalau saya menjuluki Aa Gym sebagai seorang spiritual
marketer. Ia merupakan contoh paling nyata dan sempurna dari pelaksanaan
spiritual marketing. Mudah – mudahan akan muncul semakin banyak lagi spiritual
marketer – spiritual marketer Indonesia di masa depan, mengikuti jejak Aa Gym.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 39 dari 48
LIFE WITH A MISSION
Beberapa waktu lalu, saya terbang naik Garuda Indonesia dari Singapura ke
Jakarta. Selama penerbangan, saya dilayani oleh seorang pramugari cantik.
Namanya Dewi Sahyanti.
Saya terkesan dengannya. Saya lihat, pramugari yang satu ini beda dengan yang
lain. Wajahnya wajah senyum, smile face, atau sumeh kata orang Jawa. Sikapnya
pun sangat baik dalam melayani. Keramahan yang ditunjukkannya terkesan
natural dan memang berasal dari hati, tidak dibuat – buat atau sekedar sikap
professional semata.
Saya lantas ngobrol dengannya. Saya Tanya, sudah berapa tahun jadi pramugari ?
17 tahun katanya. Lho, biasanya kalau sudah 17 tahun begitukan sudah capek dan
sudah pension ? Jawabnya lagi, menjadi pramugari ini sudah meerupakan calling,
panggilan jiwa, bukan lagi dianggap pekerjaan. Dia senang melihat pramugari
yang selalu bepergian ke mana – mana dan selalu malayani orang. Jadi, walaupun
mungkin kadang – kadang terasa capek, ia tetap bisa menikmati. Ada kepuasan
batin tersendiri yang tidak bisa diukur dengan materi.
Wah, saya benar – benar terkesan dengan ucapannya ini. Jarang saya temui orang
yang menajalani pekerjaannya karena memang sesuai dengan panggilan jiwanya.
Saya langsung teringat dengan konsep progression of commitment value.
Memang, setiap saya mendapatkan masukan dari orang lain, selalu coba saya
hubungkan dengan berbagai konsep bisnis yang ada di kepala saya. DAlam
konsep progression of commitment value ada 4 tingkatan komitmen. Yaitu
berturut – turut dari mulai yang terendah tingkatannya : political commitment,
intellectual commitment, emotional commitment, dan spiritual commitment.
Tingkatan terendah adalah political commitment. Pada tingkatan ini, orang hanya
memiliki komitment terhadap sesuatu karena sifatnya yang terpaksa, misalnya
karena tuntutan pekerjaan atau pengaruh kekuasaan. Tingkatan selanjutnya adalah
intellectual commitment. Orang memiliki komitmen terhadap sesuatu karena hal
itu dipandang mampu memenuhi kebutuhan intelektualnya. Misalnya seseorang
yang dalam situasi apapun selalu menyempatkan diri untuk membaca buku.
Sedangkan tingkatan ketiga adalah emotional commitment. Komitmen orang yang
ada di tingkatan ini sudah bersifat emosional, sukarela dan tidak lagi memikirkan
untung – rugi. Misalnya saja adalah para pengikut tokoh tertentu yang selalu
mengikuti apa yang diucapkan pemimpinnya. Sedangkan spiritual commitment
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 40 dari 48
merupakan tingkatan komitmen tertinggi; seseorang akan berkomitmen dengan
apa yang dikerjakannya karena hal itu memang merupakan panggilan jiwanya.
Orang ini sudah tidak lagi terikat kepada hal – hal yang bersifat duniawi.
Bagi saya, hubungan antara Sahyanti dengan pekerjaannya ini sudah sampai
tingkatan spiritual commitment. Ia memiliki komitmen terhadap pekerjaannya
sebagai pramugari karena memang merupakan impiannya sejak kecil dan sesuai
dengan penggilan jiwanya.
Nah, kisah Sahyanti ini juga mirip dengan kisah pribadi saya sendiri.
Saat perayaan tahun baru Cina lalu, saya menyaksikan kisah Confusius di salah
satu stasiun televise. Anda tentu tahu, filsuf Cina yang hidup sekitar 2500 tahun
lalui ini selalau menginspirasi orang – orang untuk tidak hanya bekerja keras,
namun juga untuk selalu belajar setiap saat.
Confusius berkata, “Anda harus terus belajar sampai saat tutup peti mati Anda
ditutup!” Memang, Confusius dikenal sebagai seorang yang selalu belajar
(learning), membagi pengetahuan dan pengalamannya (sharing), serta
mengajarkannya (teaching) kepada siapapun sepanjang hidupnya. Dia juga tidak
pernah menyerah dan tidak pernah puas dengan apa yang telah dicapainya.
Nah, pada hari itu juga, sore hari, tiba – tiba hati saya merasa sangat tersentuh.
Saat itu, salah satu sahabat saya bercerita tentang pesan dari alamarhum ayah
saya. Walaupun kami telah bersahabat sangat lama, namun sahabat saya ini justru
lebih banyak ngobrol dengan ayah saya daripada dengan saya sendiri. Kisah ini
bahkan belum pernah disampaikan kepada saya oleh ayah saya.
Suatu malam, kepada sahabat saya itu, almarhum ayah saya menunjukkan gambar
Confusius yang berada disamping foto saya. Ayah saya bilang bahwa dia ingin
saya bisa menjadi seperti Confusius. Itulah sebabnya mengapa saya diberi nama
Tan Tjiu Shiok (nama kecil saya) yang berarti saya harus terus belajar setiap saat.
Rupanya, impian ayah saya ini tercapai. Waktu muda, saya mengajar murid SMP
untuk membiayai sekolah, karena keluarga saya sangat miskin. Saya sudah
menjadi guru matematika dan fisika sejak usia yang masih sangat muda, 17 tahun.
Bahkan, sebelum berusia 20 tahun saya sudah menjadi kepala sekolah SMP!
Secara keseluruhan, saya menjadi guru SMP, SMA, dan bahkan SD selama 20
tahun! Saya memang sangat menikmati pekerjaan mengajar ini. Saya itu selalu
berpikir dalam keadaan apapun. Saya selalu berpikir ketika saya bicara, berjalan,
berbelanja, mandi dan bahkan tidur! Dengan berpikir, saya menciptakan berbagai
model pemasaran saya, mulai dari Marketing Plus 2000, Sustainable Market-ing
Enterprise sampai Marketing in Venus.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 41 dari 48
Inilah yang namanya life with a mission. Dalam menjalani hidup ini, kita harus
tahu apa misi hidup kita. Lalu, apakah yang kita lakukan sesuai dengan misi hidup
kita itu banyak orang yang mengerjakan sesuatu, namun sebenarnya tidak tahu
untuk apa dia mengerjakan itu. Banyak pula orang yang bekerja keras, namun
tidak mendapatkan kebahagiaan. Ini semua karena tidak ada keselarasan antara
apa yang mereka kerjakan dengan tujuan hidup mereka.
Jadi, seperti kisah Sahyanti dan saya tadi. Kerjakanlah semua hal sesuai dengan
panggilan jiwa Anda. Niscaya, Anda pun akan mendapatkan kenikmatan batin
yang tidak akan tergantikan oleh apa pun!
(Dimuat di Garuda In-Flight Magazine edisi Mei 2004)
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 42 dari 48
BERBISNIS DENGAN CINTA
Tahukah Anda, apa kekuatan utama dalam bisnis ?
Uang ? Bukan
Kekuasaan ? Juga bukan
Lalu, apa ?
Cinta!!!!
Ya, kekuatan utama yang mampu menggerakkan bisnis kita hingga mencapai
kesuksesan adalah cinta. Dalam berbisnis, kita sering lupa bahwa yang kita hadapi
setiap hari sebenarnya adalah manusia, bukan mesin atau computer. Sukses
tidaknya kita berbisnis banyak bergantung dari dukungan orang – orang sekitar
kita. Jika mereka mencintai kita, tentu mereka akan dengan sepenuh hati
memberikan segalanya buat diri kita.
Bayangkan saja jika Anda sedang jatuh cinta kepada seseorang. Anda tentu selalu
berusaha menyenangkan Sang Kekasih, bukan ? Apapun yang dimintanya, pasti
akan diupayakan sekuat tenaga untuk dipenuhi Anda.
Selain itu, kita pun tentu harus mencintai apa yang kita kerjakan. Dengan
demikian, kita akan melakukan pekerjaan itu dengan tulus, penuh komitmen, dan
berusaha memberikan yang terbaik dari diri kita.
Maka, cinta bukan hanya elemen paling penting dalam kehidupan pribadi kita.
Dalam kehidupan professional atau bisnis, cinta juga sangat berperan penting.
Ini pulalah yang dikemukakan Tim Sanders, Chief Solutions Officer di Yahoo!,
dalam bukunya Love is the Killer App. Untuk berhasil dalam bisnis, seseorang
harus menjadi apa yang disebut oleh Tim Sanders sebagai ‘lovecat’. ‘Lovecat’
adalah seseorang yang pintar, mampu menyenangkan orang lain, dan mencintai
apa yang dikerjakannya dengan sepenuh hati.
Seorang ‘lovecat’ akan terus berupaya menambah pengetahuannya (knowledge)
dalam berbagai bidang. Namun, pengetahuan ini baru akan menjadi berguna jika
ia membaginya dengan orang lain. Karena itu, jika harus terus menjalin dan
mengembangkan relasi dengan semua orang (network). Seorang ‘lovecat’ juga
harus bisa menunjukkan rasa empati kepada orang lain dan tidak segan – segan
membantu jika diperlukan (compassion). Orang akan mengingat perlakuan baik
kita ini. Dan jangan lupa, sikap ini juga akan membuat orang lebih mudah
memaafkan jika kita membuat kesalahan.
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 43 dari 48
Ketiga asset tidak terlihat (intangible assets) inilah – pengetahuan (knowledge),
menjalin relasi (network), serta raa empati dan keinginan untuk selalu membantu
(compassion) – yang harus terus dikembangkan dalam diri kita. Inilah aspek –
aspek penting yang akan membuat kita mampu mempengaruhi orang lain, dan
akhirnya membuat mereka menghargai kita sebagai seorang rekan ataupun
pimpinan.
Kita juga harus menyadari, bisnis sebenarnya adalah sebuah permainan. Tentu
saja, kita semua ingin memenangkan ‘permainan bisnis’ ini. Pemenang permainan
ini adalah orang yang mencintai apa yang ia kerjakan dengan memahami aturan –
aturan permainan secara baik.
Namun, jika dibandingkan dengan pria, wanita tidak mengetahui dan memahami
sebagian besar aturan itu. Akibatnya, mereka kurang berhasil dalam ‘permainan
bisnis’ ini. Bisa kita lihat, hanya sedikit wanita yang berhasil menduduki posisi
puncak di berbagai perusahaan. Mengapa ? Pria tahu dan paham aturan – atuaran
ini karena mereka menciptakannya. ‘Permainan bisnis’ ini telah dimainkan oleh
para pria sejak mereka masih sangat muda. Di lain pihak, wanita tidak pernah
diajarkan bagaimana cara memainkan ‘permainan bisnis’ ini.
Dalam bukunya Play Like A Man, win Like A Woman, Gail Evans, seorang
Executive Vice President di CNN, mengatakan bahwa memang sudah dari
sononya, pria lebih agresif, lebih terus – terang, berani mempromosikan diri,
‘berkulit badak’ , dan lebih mementingkan mencapai kemenangan daripada
menjaga hubungan baik.
Sebaliknya, wanita diajarkan untuk lebih bersikap koorperatif daripada kompetitif,
lebih menikmati proses daripada hasil, dan lebih mencari persetujuan daripada
mencari kesuksesan. Wanita juga cenderung tidak berani mengungkapkan
pendapatnya, karena takut dianggap salah atau tidak sopan. Sifat – sifat dan sikap
– sikap yang kelihatannya saling bertolak belakang inilah yang membuat sebagian
besar wanita kurang berhasil menjadi pemimpin di lingkungan bisnis yang
didominasi pria ini.
Jangan salah, wanita tidak harus ‘menjadi’ pria untuk berhasil dalam bisnis.
Memang, wanita harus mengetahui dan memahami aturan – aturan ‘permainan
bisnis’ ini. Namun, ia harus tetap bersikap sebagai seorang wanita. Dengan kata
lain, seorang wanita harus mencintai ‘permainan bisnis’ ini dan sekaligus
mencintai dirinya sendiri.
Lantas, apa hubungannya semua ini dengan lanskap bisnis Venus seperti yang
sudah saya ceritakan bulan lalu ?
Di dunia Venus ini, keunggulan kompetitif utama kita sebagian besar berasal dari
feel benefit, bukan think benefit. Feeling atau perasaan merupakan akar yang
dalam banyak hal mempengaruhi semua perilaku, karena perasaan terkait dengan
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 44 dari 48
emosi. Emosi sangat mempengaruhi pemikiran seseorang. Emosi membentuk dan
mempengaruhi penilaian. Emosi pula yang membentuk perilaku.
Ingatlah pula, emosi ini ‘menular’. Maksudnya, jika karyawan perusahaan tidak
mersa nyaman dengan apa yang dikerjakannya, tentu ia tidak akan mampu
memberikan perasaan nyaman pula kepada pelanggan. Sebaliknya, jika karyawan
itu mencintai apa yang dikerjakannya, tentu ia akan dengan senang hati melayani
pelanggan dan membuat pelanggan merasa nyaman pula.
Maka, perhatikanlah hal ini dengan sungguh – sungguh!
Pemenang utama dalam ‘permainan bisnis’ adalah orang yang mencintai apa yang
dikerjakannya. Kita tidak dapat bermain dengan baik jika kita tidak
menikmatinya. Maka, cintailah sebenarnya kebutuhan utama dan satu – satunya
bagi kita, baik dalam kehidupan pribadi maupun professional. Ingat apa yang
diakatan The Beatles, band legendaries yang juga merupakan band favorit saya,
All You Need is Love ?
Bagaimana pendapat Anda ?
(Dimuat di Jawa Pos edisi Februari 2004)
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 45 dari 48
LEADERSHIP IN VENUS :
“I DID IT MY WAY”
Saya sudah berkeliling dunia untuk mengahadiri berbagai leadership forum dan
bertemu dengan berbagai pemimpin kelas dunia. Tapi, bagi saya, opening speech
Mahathir Mohamad pada acara Asia Inc Forum on Leadership for Southeast Asia
di Putrajaya, Malaysia tanggal 9 – 10 Juni 2003 lalu memang benar – benar
mengesankan.
Secara singkat, pemimpin Malaysia ini dalam kata – kata bijaknya mengatakan,
“If you do things that are expected of you, then that’s not a decision at all. You’re
not a leader, you are just follower …..As I have said, we [leaders] do not just
follow. We think about doing things our own way. You know the song My Way ?
People like to sing that song when I’m present because they say that I like to do
things my way.”
Luar biasa! Inilah gaya kepemimpinan Mahatir. Mari kita lihat kebelakang
sejenak beberapa langkah yang telah diambilnya sebagai Perdana Menteri
Malaysia.
Mahatir berhasil menciptakan sebuah kelas menengah Melayu melalui affirmative
action policies di bidang ketenagakerjaan dan pendidikan tinggi. Berbagai proyek
juga dikerjakan untuk membangkitkan kebanggaan Melayu yang selama ini
dianggap sebagai ras kelas dua; antara lain dengan membangun Menara Kembar
Petronas, yang merupakan gedung tertinggi di dunia, dan juga mengembangkan
“Multimedia Super Corridor” untuk menyaingi Silicon Valley di California.
Walaupun menerapkan kebijakan diskriminasi positif ini, tidak ada gejolak yang
berarti di negaranya. Ia berhasil mempertahankan keseimbangan dan keserasian di
antara tiga ras utama di Malaysia, yaitu Melayu, Cina, dan India.
Di lain pihak, Mahatir juga controversial. Ia kerap mengkritik secara keras dan
terbuka mengenai standar ganda yang diterapkan pihak Barat, padahal pihak Barat
ini jugalah yang banyak berinvesati di Malaysia. Di dalam negeri, ia juga tidak
segan – segan bertindak tegas terhadap berbagai pihak yang dianggap tidak
sejalan dengan dirinya.
Mahatir juga dengan berani mengubah system yang sudah berlaku selama puluhan
tahun. Misalnya, ia mengeluarkan kebijakan yang mengurangi kekuasaan (curbed
the powers of) sultan – sultan, sehingga mereka tidak lagi kebal hokum dan
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 46 dari 48
mendapatkan berbagai kemudahan dalam berbisnis seperti yang sudah dinimati
selama puluhan tahun.
Saat krisis Asia di tahun 1998, pemimpin Mahatir yang berusia 77 tahun ini
dengan berani mengambil langkah yang bertentangan dengan kebijakan
konvensional (conventional wisdom) saat itu. Ia tidak meminta bantuan IMF
seperti lazimnya negara – negara Asia lain yang terkena krisis. Ia pun mensuspend
perdagangan ringgit Malaysia dengan menerapkan kebijakan capital
control. Walaupun langkah ini ditentang IMF dan dikritik banyak pihak, nyatanya
ekonomi Malaysia bisa pulih lebih cepat daripada negara – negara tetangganya
yang justru meminta bantuan IMF.
Saya lihat, walaupun ia seorang intelektual, berbagai langkahnya ini terkadang
justru tidak dapat diterima secara logis. Jika berdasarkan pertimbangan –
pertimbangan rasional semata, para pemimpin lain mungkin tidak akan
mengambil langkah menentang system yang ada. Namun, di samping berbagai
pertimbangan rasional, Mahatir juga memiliki keyakinan emosional dan spiritual
bahwa yang dilakukannya adalah yang terbaik bagi rakyatnya. Keyakinan inilah
yang akhirnya melahirkan berbagai langkah yang kerap dipandang controversial.
Semua hal tersebut menunjukkan bahwa Mahatir berani challenged the process
dan mengambil resiko mengambil keputusan yang sulit dan tidak popular. Inilah
karakteristik utama seorang leader seperti yang diutarakan James M. Kouzes and
Barry Z. Posner dalam bukunya yang popular, The Leadership Challenge, yang
dipakai sebagai text book leadership di IBM.
Pemimpin adalah orang yang aktif, memilih bertindak daripada berdiam diri
menunggu inisiatif orang lain. Pemimpin adalah mereka yang berani melakukan
tindakan – tindakan yang belum pernah dilakukan sebelumnya. Mereka
melakukan inovasi dan eksperimen untuk menemukan cara – cara baru dan lebih
baik dalam melakukan suatu hal. Pendeknya, mereka adalah orang – orang yang
berani melakukan dan mengahadapi perubahan.
Pemimpin juga berusaha agar para pengikutnya siap untuk berubah. Pendekatan
yang dilakukan pun bukan hanya pendekatan rasional, namun juga emosonal.
Seperti yang dikatakan John P. Kotter dan Dan S. Cohen dalam bukunya The
Heart of Change, analisis rasional diberikan oleh pemimpin agar para pengikutnya
berpikir tentang perubahan yang terjadi, dan akhirnya mampu menyesuaikan diri
dengan perubahan itu (analysis – think – chage). Namun yang lebih penting,
pemimpin juga harus membantu pengikutnya untuk melihat perubahan yang ada,
merasakan pentingnya perubahan itu, dan akhirnya secara emosional mau
menyesuaikan diri dengan perubahan yang ada (see – feel – change).
Dengan bekal emosional dan spiritual competence itu, Mahatir sukses memimpin
dan memasarkan Malaysia. Selama 22 tahun masa kekuasaannya, ia berhasil
membawa Malaysia dari sekedar negara pengekspor karet dan timah menjadi
Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 47 dari 48
salah satu negara industri modern yang memproduksi peralatan elektronik, besi
baja, dan mobil. Brand “Malaysia” pun dihormati berbagai kalangan dan mampu
memikat customers di berbagai penjuru dunia.
Maka untuk menjadi seorang pemimpin yang sukses di lanskap bisnis baru yang
semakin emosional ini, atau istilah saya “Venus landscape”, intellectual
competence saja tidaklah cukup. Ia terutama harus memiliki emotional
competence dan spiritual competence agar mampu menjadi great leader di dunia
Venus ini.
(Dimuat di Asia Inc. edisi Agustus 2003)

Kumpulan Pustaka IKA ITT-STTT Periode 2004-2007 BLest 48 dari 48
TENTANG PENULIS
KH. Abdullah Gymnastiar, akrab disapa Aa Gym adalah dai sekaligus
penceramah yang paling popular di Indonesia. Beliau membawakan konsep baru
dalam dakwah dengan mengajak orang memahami hati atau qalbu, untuk
mengenali diri sendiri. Konsep ini dikenal dengan Manajemen Qolbu.
Pemimpin Ponpes Daarut Tauhiid Bandung itu pernah tampil di acara Sixty
Minutes di TV NBC, AS, bulan November 2002. Media televise di AS itu tertarik
menampilkan Aa Gym karena ia dinilai menghadirkan sebuah nuansa Islam yang
sejuk dan damai. Time bahkan menjuluki beliau sebagai The Holly Man.
Selain penceramah yang disegani, Aa Gym adalah marketer yang tangguh. Beliau
menjalankan bisnis sebagai ibadah. Konsep yang beliau jalankan adalah
menyatukan antara dzikir, piker dan ikhtiar. Selain berhasil mengelola Yayasan
Pesantren Daarut Tauhiid di Bandung, ia juga berhasil dalam mengelola kelompok
bisnisnya di bawah bendera Manajemen Qolbu. Holding company ini membawahi
sekitar 19 anak perusahaan yang bergerak di bidang mini market, warung
telekomunikasi, kafe, penerbitan, stasiun radio, televise local, pembuatan kaset,
dan VCD. Omzetnya mencapai miliaran rupiah.
Hermawan Kartajaya, adalah Founder dan President MarkPlus&Co dan
President Worl Marketing Association (WMA). Hermawan adalah pembicara
seminar serta penulis kolom dan buku yang produktif. Buku terakhirnya :
Repositioning Asia: Forum Bubble to Sustainable Economy (John Wiley&Son,
2000), Rethinking Market-ing:Sustainable Marketing Enterprise in Asia (Prentice
Hall, 2002), keduanya ditulis bersama Prof. Philip Kotler, Hermawan Kartajaya
on Marketing (Gramedia Pustaka Utama, 2003), Marketing in Venus (Gramedia
Pustaka Utama, 2003) dan On Becoming a Customer-Centric Company
(Gramedia Pustaka Utama, 2004). Pada tahun 2003, dianugrahi gelar sebagai “50
gurus who have shaped the future of marketing” oleh CIM-UK, bersama satu
orang wakil Asia yang lain, yakni Kenichi Ohmae dari Jepang.

ANALISIS PENGARUH KESEJAHTERAN KARYAWAN TERHADAP KINERJA KARYAWAN

July 28, 2010 Comments off

ANALISIS PENGARUH KESEJAHTERAN KARYAWAN TERHADAP
KINERJA KARYAWAN
(Studi empiris di PT. AIR MANCUR Palur)
SKRIPSI
Diajukan Untuk Memenuhi Tugas Dan Syarat-Syarat Guna Memperoleh
Gelar Sarjana Ekonomi Jurusan Akuntansi Pada Fakultas Ekonomi
Universitas Muhammadiyah Surakarta
Oleh:
IRMA NOVIA S
B 200 050 019
FAKULTAS EKONOMI
UNIVERSITAS MUHAMMADIYAH SURAKARTA
2009
ii
HALAMAN PENGESAHAN
Yang bertandatangan dibawah ini telah membaca Skripsi dengan judul:
ANALISIS PENGARUH KESEJAHTERAAN KARYAWAN TERHADAP
KINERJA KARYAWAN
(Studi empiris di PT. AIR MANCUR Palur)
Yang ditulis oleh IRMA NOVIA S dengan NIM : B 200 050 019
Penandatanganan berpendapat bahwa skripsi tersebut memenuhi syarat untuk
diterima.
Surakarta, 2009
Pembimbing Utama
(Drs. Suyatmin, M.Si)
Mengetahui,
Dekan Fakultas Ekonomi UMS
(Drs. H. Syamsudin, MM.)
iii
IRMA NOVIA S
05.6.106.02030.50019
AKUNTANSI
“ANALISIS PENGARUH KESEJAHTERAAN
IRMA NOVIA S
KARYAWAN TERHADAP KINERJA KARYAWAN
(Studi empiris di PT. AIR MANCUR Palur)
ii i
iv
MOTO
“Allah SWT meninggikan drajat orang-orang yang beriman di antaramu dan orang-orang
yang diberi ilmu pengetahuan”
( Qs. Al, Muajaadilah II )
“Kemulian itu tidak datang dari apapun dan siapapun, melainkan dari ketaatan dan
ketakwaan kita kepada allah SWT”
(AA, Gym ).
“Doa adalah nyanyian hati yang selalu membuka jalan kesinggasana tuhan walaupun
terhimpit nyanyian seribu jiwa”
( Kahlil Gibran )
“Mencintai seseorang adalah keindahan, Dicintai seseorang adalah lebih indah
Dicintai orang yang kau cintai adalah segalanya”
( Julie Withey )
Memperoleh kepercayaan sangatlah mudah, lebih mudah lagi menghianatinya, kepercayaan
yang telah kau miliki
( Penulis )
“A Friend is atreasura more precious than gold.
For love shared is princeless and never coreows old”.
Setiap detik kematian selalu menghampiri kita namun mengapa sang waktu dapat melupakan
kita akan kedatangannya.
( Penulis )
v
PERSEMBAHAN
Setiap lembar dan goresan tinta ini merupakan wujud dari keagungan dan kasih
sayang diberikan allah SWT kepadanya. Setiap detik penyelesaian skripsi ini merupakan hasil
getaran Do’a Bunda-ku yang tercinta, Ayah, serta saudara ku yang selama ini memberikan
perhatian yang tiada pernah henti.
Kupersembahkan karya sederhana ini untuk ;
􀂙 Bapakku dan Ibuku tercinta, yang telah memberiku support, doa, dan kasih sayang.
􀂙 Untuk seseorang yang aku cinta, terima kasih atas segala pengertian dan suportnya.
􀂙 Almamaterku, jembatan masa depanku.
v
vi
KATA PENGANTAR
Assalamu’alaikum Wr. Wb
Segala puji hanyalah bagi mu ya Allah ya Tuhan ku. Tuhan semesta alam
yang menguasai hari pembalasan, engkau senantiasa menganugrahkan bagiku
banyak nikmat kepada kami hingga dapat menyelesaikan skripsi dengan judul
“ANALISIS PENGARUH KESEJAHTERAAN KARYAWAN TERHADAP
KINERJA KARYAWAN (Studi empiris di PT. AIR MANCUR Palur)”
sebagai salah satu syarat untuk mencapai gelar Sarjana Ekonomi Jurusan
Akuntansi Fakultas Ekonomi Universitas Muhammadiyah Surakarta.
Pada kesempatan ini penulis menyampaikan terimakasih kepada semua
pihak yang telah membantu baik secara langsung maupun tidak langsung hingga
selesainya skripsi ini. Ucapan terimakasih penghargaan yang tulus penulis
ucapkan kepada :
1. Bapak Drs. Syamsudin, MM. Selaku Dekan Fakultas Ekonomi UMS.
2. Bpak Drs. Suyatmin, M.Si. Selaku dosen pembimbing utama yang selalu
dengan bijaksana, penuh kesabaran berkenan untuk membaca, mengoreksi,
membimbing dan mengarahkan hingga terselesaikannya skripsi ini.
3. Ayahanda dan Ibunda tercinta, yang telah berkorban dengan segala dukungan
dan Do’a restu sehingga penulis mampu menyelesaikan skripsi ini.
4. Seseorang yang aku cinta, mas Grenda, terima kasih atas dukungan, motivasi
dan kasih sayang yang diberikan hingga dapat menyelesaikan skripsi ini.
vi
vii
5. Sahabatku, momon, anik dan bang edi terima kasih atas dorongan dan
motivasi yang kalian berikan, semoga persahabatan kita abadi.
6. Teman-teman Akuntansi kelas A yang tidak dapat disebutkan satu persatu
yang telah membantu memberikan motivasi kepada penulis.
Meskipun segenap kemampuan penulis telah dikerahkan, namun penulis
menyadari bahwa skripsi ini belum sempurna, namun ketidaksempurnaan ini
masih tetap dapat memberi manfaat bagi pihak yang memerlukan.
Semoga Allah SWT melimpahkan rahmat, hidayahNya kepada kita, dan
semoga kita termasuk orang-orang yang bersyukur atas segala nikmatNya Amin
ya robbal a’lamin…
Surakarta, Juni 2009
PENULIS
vii
viii
DAFTAR ISI
HALAMAN JUDUL……………………………………………………………………………. i
HALAMAN PENGESAHAN……………………………………………………………….. ii
HALAMAN KEASLIAN SKRIPSI ………………………………………………………. iii
HALAMAN MOTTO………………………………………………………………………….. iv
HALAMAN PERSEMBAHAN ……………………………………………………………. v
KATA PENGANTAR …………………………………………………………………………. vi
DAFTAR ISI………………………………………………………………………………………. xiii
DAFTAR TABEL……………………………………………………………………………….. x
DAFTAR GAMBAR…………………………………………………………………………… xi
ABSTRAKSI ……………………………………………………………………………………… xii
BAB I PENDAHULUAN…………………………………………………………. 1
A. Latar Belakang Masalah…………………………………………….. 1
B. Perumusan Masalah ………………………………………………….. 2
C. Tujuan Penelitian ……………………………………………………… 3
D. Manfaat Penelitian ……………………………………………………. 3
E. Sistematika Penelitian ……………………………………………….. 4
BAB II TINJAUAN PUSTAKA………………………………………………….. 6
A. Pengertian Kesejahteraan Karyawan…………………………… 6
B. Pengertian Kinerja ……………………………………………………. 11
C. Pengaruh Kesejahteraan karyawan terhadap Kinerja
Karyawan ………………………………………………………………… 28
viii
ix
D. Kerangka pemikiran ………………………………………………….. 28
E. Penelitian Terdahulu ………………………………………………… 29
F. Hipotesis ………………………………………………………………… 30
BAB III METODE PENELITIAN………………………………………………… 31
A. Populasi ………………………………………………………………….. 31
B. Sampel dan Teknik Pengambilan Sampel ……………………. 31
C. Jenis Data dan Sumber Data ………………………………………. 32
D. Metode Pengumpulan Data ………………………………………… 33
E. Definisi Operasional Variabel dan Pengukuran…………… 34
F. Uji Kualitas Pengumpulan Data…………………………… 35
G. Uji Asumsi Klasik………………………………………… 36
H. Metode Analisis Data……………………………………… 37
BAB IV GAMBARAN UMUM DAN PEMBAHASAN…………………. 41
A. Gambaran Umum Perusahaan…………………………………….. 41
B. Deskripsi Responden Penelitian………………………………….. 61
C. Analisis Data……………………………………………… 65
D. Pembahasan ……………………………………………………………. 72
BAB V PENUTUP…………………………………………………………………….. 75
A. Simpulan …………………………………………………………………. 75
B. Keterbatasan Penelitian……………………………………………… 76
C. Saran-Saran ……………………………………………………………… 76
DAFTAR PUSTAKA
LAMPIRAN-LAMPIRAN
ix
x
DAFTAR TABEL
Halaman
Tabel IV. 1. Jumlah Tenaga Kerja PT. Air Mancur Palur ……………………… 52
Tabel IV. 2. Karakterisik Responden Berdasarkan Usia………………………… 61
Tabel IV. 3. Karakterisik Responden Berdasarkan Jenis Kelamin ………….. 62
Tabel IV. 4. Karakterisik Responden Berdasarkan Pendidikan………………. 63
Tabel IV. 5. Karakterisik Responden Berdasarkan Jumlah Keluarga………. 63
Tabel IV. 6. Deskripsi Statistik ………………………………………………………….. 64
Tabel IV.7. Rangkuman Uji Validitas Tunjangan Kesejahteraan
Karyawan …………………………………………………………………….. 65
Tabel IV.8. Rangkuman Uji Validitas Kinerja Karyawan ……………………. 66
Tabel IV.9. Hasil Uji Reliabilitas ……………………………………………………… 67
Tabel IV.10. Hasil Uji Regresi Linear Berganda ………………………………….. 68
Tabel IV.11. Hasil Uji Normalitas ……………………………………………………… 71
Tabel IV.12. Hasil Uji Heteroskedastisitas ………………………………………….. 72
x
xi
DAFTAR GAMBAR
Halaman
Gambar III.1. Grafik Uji F …………………………………………………………………… 38
Gambar III.2. Grafik Uji t …………………………………………………………………… 40
Gambar IV.1. Struktur Organisasi PT. Air Mancur …………………………………. 45
Gambar IV.2. Skema Saluran Distribusi ………………………………………………… 59
xi
xii
ABSTRAKSI
Prestasi kerja karyawan merupakan salah satu indakator keberhasilan
dalam operasional perusahaan dalam mencapai tujuan dari perusahaan. Penelitian
ini bertujuan untuk mengetahui hubungan antara kesejahteraan karyawan dengan
kinerja karyawan di PT. AIR MANCUR Palur.
Populasi dalam penelitian ini adalah seluruh karyawan. Jumlah sampel
yang diambil 88 responden. Metode pengumpulan data menggunakan kuesioner
dan metode analisis data menggunakan analisis regresi berganda, uji t, uji F dan
koefisien determinasi.
Berdasarkan hasil analisis data, hasil penelitian ini dapat disimpulkan
sebagai berikut: Hasil analisis regresi diperoleh koefisien regresi variabel
tunjangan kesejahteraan sebesar 0,507 bernilai positif, hal ini menunjukkan
bahwa tunjangan kesejahteraan mempunyai pengaruh positif terhadap kinerja
karyawan. Artinya tunjangan kesejahteraan yang diberikan perusahaan semakin
baik, akan meningkatkan kinerja karyawan. Hasil uji t menunjukkan bahwa
meliputi variabel tunjangan kesejahteraan berpengaruh signifikan terhadap
kinerja karyawan. Hal ini ditunjukkan oleh nilai signifikansi sebesar 0,000 < 0,05.
Hasil perhitungan untuk nilai R2 dengan bantuan program SPSS 10.0, dalam
analisis regresi berganda diperoleh angka koefisien determinasi atau R2 sebesar
0,343. Hal ini berarti 34,3% variasi perubahan kinerja karyawan dijelaskan oleh
variasi perubahan tunjangan kesejahteraan. Sementara sisanya sebesar 65,7%
diterangkan oleh faktor lain yang tidak ikut terobservasi
Kata kunci: kesejahteraan karyawan, kinerja karyawan
xii
1
BAB I
PENDAHULUAN
A. Latar Belakang Masalah
Sumber daya manusia merupakan aset paling penting dalam suatu
organisasi serta mempertahankan dan mengembangkan organisasi dalam
berbagai tuntutan masyarakat dan jaman. Kinerja sumber daya yang baik
merupakan hal penting bagi kelangsungan hidup organisasi. Jika organisasi
ingin berkembang dengan pesat, organisasi harus mempunyai sumber daya
manusia yang mampu menampilkan kinerja yang baik. Penilaian kinerja
sesungguhnya merupakan penilaian atas perilaku manusia dalam
melaksanakan peran yang mereka mainkan didalam organisasi karena pada
dasarnya organisasi dijalankan oleh manusia.
Dalam rangka pembinaan dan pengembangan sumber daya manusia
unsur kesejahteraan perlu diperhatikan dengan sungguh-sungguh karena
kesejahteraan karyawan merupakan faktor yang sangat menentukan dalam
memacu semangat kerja serta produktivitas kerja karyawan. Dengan
meningkatnya kinerja karyawan itu dapat pula menunjang atau mempengaruhi
kesejahteraan karyawan tersebut, baik secara langsung maupun tidak
langsung. Secara langsung yaitu dengan naiknya gaji karyawan, pemberian
bonus, pemberian tunjangan keluarga maupun bonus, sedangkan secara tidak
langsung yaitu bisa dengan memberikan kesempatan promosi jabatan kepada
karyawan yang berprestasi baik. Dengan demikian prestasi kerja karyawan
1
2
yang baik itu akan memberikan sumbangan atau dapat mendorong untuk
memajukan perusahaan yang lebih baik. Selain itu promosi jabatan bagi
karyawan yang berprestasi baik itu akan dapat menguntungkan bagi karyawan
itu sendiri, dimana dengan promosi jabatan itu akan memperbaiki posisi atau
kedudukan seorang karyawan tersebut di dalam perusahaan.
Selain dari pada itu jika dilihat dari segi keuntungan perusahaan,
dengan adanya kinerja karyawan yang baik itu dapat memajukan perusahaan
tersebut. Dengan demikian akan dapat meningkatkan keuntungan atau dapat
meningkatkan tingkat rentabilitas perusahaan tersebut.Untuk meningkatkan
produksi masing-masing unit perlu ditingkatkan kinerja para karyawan
sehingga prestasi kerja karyawan ini dapat menigkat. Peningkatan prestasi
kerja karyawan akan meningkatkan produksi jamu PT Air Mancur di daerah
Palur. Prestasi kerja karyawan merupakan salah satu indakator keberhasilan
dalam operasional perusahaan dalam mencapai tujuan dari perusahaan
Berdasarkan permasalahan dan latar belakang diatas, maka penulis
mengambil judul : ANALISIS PENGARUH KESEJAHTERAAN
KARYAWAN TERHADAP KINERJA KARYAWAN (Studi Empiris di PT
Air Mancur Palur).
B. Perumusan Masalah
Apakah terdapat pengaruh kesejahteraan karyawan terhadap kinerja
karyawan di PT AIR MANCUR Palur”
3
C. Tujuan Penelitian
Berdasarkan dari permasalahan dalam penelitian ini maka yang
menjadi tujuan dalam penelitian ini adalah:
1. Untuk mengetahui kesejahteraan karyawan di PT AIR MANCUR Palur.
2. Untuk mengetahui tentang Kinerja karyawan di PT AIR MANCUR Palur.
3. Untuk mengetahui pengaruh kesejahteraan karyawan terhadap kinerja
karyawan di PT AIR MANCUR Palur.
D. Manfaat Penelitian
Bedasarkan perumusan masalah, pada dasarnya peneliti akan
mengharapkan penelitian ini nantinya dapat member manfaat bagi pihak-pihak
yang berkepentingan:
1. Bagi PT AIR MANCUR
Diharapkan dapat digunakan sebagai masukan bagi pemimpin atau
pengurus koperasi didalam mengambil beberapa tindakan untuk
meningkatkan kinerja karyawan.
2. Bagi Masyarakat Umum
Penelitian ini diharapkan dapat memberikan masukan untuk meningkatkan
pegetahuan praktis dan memperluas wawasan mereka tentang
kesejahteraan karyawan pada khususnya serta ketenagakerjaan pada
umumnya.
4
3. Bagi Peneliti
Penelitian ini dapat digunakan untuk mempeluas wawasan tentang
ketenagakerjaan.
E. Sistematika Penelitian
Untuk memberikan gambaran yang lebih jelas tentang isi skripsi ini,
peneliti sajikan uraian dari sistematika skripsi yaitu:
BAB I Pendahuluan
Pendahuluan peneliti sajikan pada bagian pertama isi skripsi
yang didalamnya merupakan uraian dari Latar Belakang Masalah,
Perumusan Masalah, Tujuan Penelitian, Manfaat Penelitian, dan
Sistematika Skripsi.
BAB II Landasan Teori
Dalam landasan teori ini berisi tentang, Pengertian
Kesejahteraan Karyawan, Cara Mengklasifikasikan Kesejahteraan
Karyawan, Usaha-Usaha Untuk Memenuhi Kebutuhan Karyawan Atau
Program Kesejahteraan Ekonomi Karyawan, Faktor-Faktor Yang
Mempengaruhi Kesejahteraan Karyawan, Pengertian Kinerja,
Penilaian Kinerja, Hubungan Kesejahteraan Karyawan Dengan Kinerja
Karyawan serta Perumusan Hipotesis.
5
BAB III Metode Penelitian
Dalam bab ini berisi tentang: Pengertian dan Jenis-Jenis
Penelitian, Penetapan Populasi dan Variabel Penelitian, Metode
Pengumpulan Data dan Analisis Data.
BAB IV Laporan Penelitian
Bab ini diuraikan tentang: Persiapan, Pelaksanaan
Pengumpulan Data, Pengolahan Data dan Interpretasi Data.
BAB V Penutup
Yang didalamnya berisi tentang Simpulan, Implikasi Penelitian
dan Saran-saran.
Daftar Pustaka
Lampiran
6
BAB II
TINJAUAN PUSTAKA
A. Pengertian Kesejahteraan Karyawan
Setiap orang yang hidup selalu menginginkan kesejahteraan hidup
sebab dengan sejahtera hidupnya akan menjadi tenang dan tentram. Menurut
WJS Poerwodarminto (1984;492), Kesejahteraan adalah suatu kondisi aman
sentosa dan makmur terhindar dari berbagai ancaman dan kesulitan yang
dirasakan seseorang yang telah melakukan suatu pekerjaan di suatu tempat
atau perusahaan.
1. Cara mengklasifikasi kesejahteraan karyawan
Program kesejahteraan karyawan telah menjadi bagian integral dari
kebanyakan paket kompensasi. Program asuransi jiwa dan kesehatan dan
cuti yang dibayar adalah sedikit dari banyak tipe kesejahteraan karyawan
yang biasa ditemui dalam organisasi pemerintah maupun swasta. Ini dapat
terlihat dari atau dalam Undang-undang ketenagakerjaan yang telah
ditetapkan oleh pemerintah serta ketentuan tentang upah minimum
regional yang setiap kali sesuai dengan kondisi.
Dengan memberikan sederetan kesejahteraan untuk karyawan akan
membantu organisasi untuk menarik karyawan yang berkualitas tinggi,
disamping sebagai usaha untuk mempertinggi moral, dan kepuasan kerja
karyawan. Dengan demikian terjaminnya kesejahteraan karyawan itu
6
7
sangat menguntungkan bagi karyawan itu sendiri maupun perusahaan
tersebut.
Menurut Moekijat (1989;167), ada beberapa cara untuk
mengklasifikasikan kesejahteraan karyawan yaitu:
a. Pelayanan karyawan
b. Pembayaran untuk waktu tidak bekerja
c. Keamanan pegawai atau karyawan
2. Usaha-usaha untuk memenuhi kebutuhan karyawan atau program
kesejahteraan ekonomi karyawan.
Usaha-usaha untuk memenuhi kebutuhan karyawan atau pegawai
merupakan suatu usaha untuk meningkatkan kesejahteraan karyawan atau
pegawai adalah sebagai berikut :
a. Pemberian gaji atau upah yang adil.
Dalam pemberian gaji ini disesuaikan dengan tugas yang telah
dikerjakan dengan hasil yang memuaskan dengan waktu tertentu.
Sedangkan untuk tercapainya keadilan tersebut, maka ada beberapa
factor penting yang perlu diperhatikan dalam penetapan tingkat upah
seorang pegawai atau karyawan adalah pendidikan, pengalaman,
tanggungan keluarga, kemampuan perusahaan, daan kondisi pekerja.
b. Asuransi
Dalam lingkungan kerja dimanapun pasti menginginkan keselamatan,
keamanan dan kesehatan kerja. Karena bagaimanapun juga manusia
8
menginginkan ketiga hal itu dan sanggup mengorbankan apa saja asal
dapat sehat, aman dan selamat.
Sedangkan program asuransi ini bisa berbentuk Asuransi Jiwa,
Asuransi Kesehatan dan Asuransi Kecelakaan. Disini perusahaan bisa
melakukan kerja sama dengan Perusahaan Asuransi untuk
menanggung asuransi karyawannya.
Lingkungan kerja yang aman dan sehat sangat diperlukan oleh semua
orang karena ditempat kerja yang demikian seseorang dapat bekerja
dengan tenang sehingga dapat memperoleh seperti yang diharapkan
oleh perusahaan atau organisasi tersebut.
c. Melalui promosi atau kenaikan jenjang
Pihak perusahaan atau suatu organisasi biasanya menyenangi dasar
promosi adalah kecakapan kerja, karena kecakapan kerja atau kinerja
yang baik adalah merupakan dasar kemajuan. Sedangkan pihak
karyawan menghendaki unsure seniorisasi lebih ditekankan dalam
promosi, karena dengan makin lama masa kerja, maka makin
berpengalaman seseorang, sehingga kecakapan kerja mereka makin
baik.
Tetapi pada umumnya didalam menentukan dasar untuk promosi
sering digunakan keduanya yaitu dasar kecakapan kerja dan senioritas
jadi apabila ada karyawan atau pegawai yang mempunyai kecakapan
yang sama, maka karyawan atau pegawai yang lebih seniorlah yang
akan dipromosikan.
9
Sebagai salah satu pengembangan, promosi sangat diharapkan oleh
setiap karyawan atau pegawai dimanapun berada. Oleh karena itu dia
akan mendapatkan hak-hak yang lebih baik daripada yang diperoleh
sebelum promosi baik material maupun non material. Hak-hak yang
bersifat material misalnya kenaikan pendapatan, perbaikan fasilitas
sedangkan hak yang bersifat non material misalnya status sosial, dan
rasa bangga.
d. Program Rekreasi
Dengan adanya kesempatan rekreasi itu diharapkan para pegawai atau
karyawan selalu bergairah atau mempunyai semangat dalam bekerja.
Salah satu program rekreasi adalah mengadakan tour ke tempattempat
wisata bersama keluarga.
e. Pemberian Fasilitas
Yang dimaksud dengan fasilitas adalah segala sesuatu yang digunakan,
dipakai, ditempati dan dinikmati oleh pegawai baik dalam hubungan
langsung dengan pekerjaan seperti termasuk didalamnya semua alat
kerja di perusahaan dan secara tidak langsung untuk kelancaran
pekerjaan seperti gedung, alat komunikasi, ruangan kerja yang
memadai dan lain sebagainya.
3. Faktor-faktor yang mempengaruhi kesejahteraan karyawan.
a. Faktor kesejahteraan karyawan yang mempengaruhi hubungan antara
karyawan dengan karyawan meliputi :
10
1) Gaji dan upah yang baik
Gaji bisa dipakai untuk kebutuhan psikologis dan sosial
2) Rekan kerja yang kompak.
Keinginan ini merupakan cermin dari kebutuhan sosial.
Seorang karyawan mungkin berkeberatan untuk dipromosikan,
hanya karena tidak menginginkan kehilangan rekan kerja yang
kompak.
3) Kondisi kerja yang aman, nyaman dan menarik.
Kondisi kerja yang aman berasal dari kebutuhan akan rasa aman
disamping itu juga tempat kerja yang nyaman dan menarik.
b. Faktor kesejahteraan karyawan yang mempengaruhi hubungan antara
karyawan dengan pimpinan :
1) Pimpinan yang adil dan bijaksana.
Pimpinan yang baik menjamin bahwa pekerjaan akan tetap bisa
dipertahankan, demikian juga pimpinan yang tidak berat sebelah
akan menjadi ketenangan kerja.
2) Melengkapi para karyawan dengan sumber dana yang diperlukan
untuk menjalankan tugasnya.
3) Mengkomunikasikan kepada karyawan tentang apa yang
diharapkan dari mereka.
4) Memberikan penghargaan untuk mendorong kinerja.
Dari uraian tentang teori kesejahteraan karyawan di atas, maka
dalam peneliti ini, kesejahteraan karyawan yang dimaksud adalah:
11
a. Keamanan
Meliputi rasa aman terhadap suasana kerja, pemberian jaminan
asuransi dan pelayanan usaha kesehatan.
b. Kesenangan
Meliputi pemberian waktu rekreasi bersama, pemberian cuti dan
sebagainya.
c. Kemakmuran
Meliputi pemberian gaji yang sesuai, pemberian tunjangan kepada
karyawan, atau kantin bagi karyawan, pemberian seragam kerja kepada
karyawan.
Kesemuanya itu merupakan unsur-unsur kesejahteraan yang akan diteliti
di PT AIR MANCUR Palur. Dan unsur-unsur kesejahteraan karyawan
tersebut diatas akan diukur melalui angket yang disediakan oleh peneliti untuk
diisi responden, dalam hal ini responden tersebut adalah karyawan di PT AIR
MANCUR Palur.
B. Pengertian Kinerja
Pengertian kinerja berasal dari kata job performance/actual performance
yang berarti prestasi kerja atau prestasi sesungguhnya yang dicapai oleh
seseorang. Menurut Mangkunegara (2001;67) kinerja adalah hasil kerja secara
kualitas dan kuantitas yang dicapai oleh seorang pegawai dalam melaksanakan
tugasnya sesuai dengan tanggung jawab yang diberikan kepadanya.
Sedangkan menurut As’ad (1999;48) prestasi kerja adalah hasil yang dicapai
12
seseorang menurut ukuran yang berlaku untuk pekerjaan yang bersangkutan.
Pendapat diatas dapat diterangkan bahwa untuk dapat meraih keberhasilan
dalam pekerjaan seseorang perlu memenuhi kemampuan yang berhubungan
dengan pelaksanaan pekerjaan yang baik menyangkut pengetahuan dan
ketrampilan. Pelaksanaan pekerjaan akan lebih efektif apabila didukung
dengan keyakinan dan motivasi yang tinggi. Dengan adanya keyakinan akan
mendorong seseorang untuk bertanggung jawab terhadap pekerjaannya
sehingga dapat mengarahkan perilaku kerjanya demi tercapainya tujuan yang
diinginkan.
Menurut Kalbers dan Forgaty dalam David Effendi dan Sujono (2004)
kinerja adalah evaluasi terhadap pekerjaan yang dilakukan lewat atasan,
teman, dirinya sendiri dan bawahan. Sedangkan menurut Dessler (1992) dalam
Bambang Guritno dan Waridin (2005) menyatakan bahwa kinerja adalah
prestasi kerja yakni perbandingan antara hasil kerja yang secara nyata dengan
standar kerja yang ditetapkan. Berdasarkan pengertian kinerja dari beberapa
pendapat diatas, kinerja merupakan perbandingan hasil kerja yang dicapai oleh
karyawan dengan standar yang telah ditentukan.
John Witmore dalam Coaching for Performance (1997:104) dalam
Wikipedia “kinerja adalah pelaksanaan fungsi-fungsi yang dituntut dari
seorang atau suatu perbuatan, suatu prestasi, suatu pameran umum
ketrampilan”. Kinerja merupakan suatu kondisi yang harus diketahui dan
dikonfirmasikan kepada pihak tertentu untuk mengetahui tingkat pencapaian
hasil suatu instansi dihubungkan dengan visi yang diemban suatu organisasi
13
atau perusahaan serta mengetahui dampak positif dan negatif dari suatu
kebijakan operasional.
Beberapa pengertian kinerja karyawan selain tersebut diatas adalah
sebagai berikut :
1. Kinerja adalah banyaknya upaya yang dikeluarkan individu pada
pekerjaannya.
2. Kinerja adalah dapat dinilai dengan kinerja sesungguhnya masa sekarang,
serta dengan periode yang akan datang dalam lingkup tertentu, misalnya :
kinerja operasi, kinerja keuangan, kinerja sumber daya manusia, serta
kinerja perusahaan secara keseluruhan
3. Kinerja adalah hasil kerja yang dapat dicapai oleh seseorang atau
kelompok organisasi, sesuai dengan wewenang dan tanggung jawab
masing-masing dalam rangka upaya mencapai tujuan organisasi yang
berangkutan secara legal, tidak melanggar hukum dan sesuai dengan moral
atau etika.
4. Kinerja merupakan hasil kerja seseorang yang menggambarkan kualitas
dan kuantitas atas kerja yang telah dilakukan
Indicator kinerja adalah sebagai berikut:
1. Loyalitas
Yaitu kesetiaan pegawai terhadap organisasi dan semangat berkorban demi
tercapainya tujuan organisasi.
14
2. Tanggungjawab
Yaitu rasa memiliki organisasi dan kecintaan terhadap pekerjaan yang
dilakukan dan ditekuni serta berani menghadapi segala konsekuensi dan
resiko dari pekerjaan tersebut.
3. Ketrampilan
Yaitu kemampuan pegawai untuk melaksanakan tugas serta menyelesaikan
masalah yang berhubungan dengan pekerjaan.
4. Pengetahuan
Yaitu kemampuan pagawai untuk menguasai semua hal yang berhubungan
dengan pekerjaannya.
Pada dasarnya kinerja dipengaruhi oleh beberapa faktor. Faktor-faktor
tersebut adalah :
1. Motivasi
Motivasi adalah daya gerak yang mendorong untuk bertindak. Jika
motivasi kuat maka daya dorong untuk terciptanya kinerja yang baik akan
kuat pula.
2. Pendidikan dan pelatihan
Pendidikan dan pelatihan adalah upaya untuk meningkatkan berbagai
pengetahuan dan ketrampilan. Disamping itu pendidikan dan pelatihan
merupakan usaha untuk memungkinkan perubahan sikap yang dilandasi
motivasi untuk berprestasi.
15
3. Pengalaman
Pengalaman pada dasarnya membuat individu lebih mengenal dan
memahami proses kerjanya sehingga diharapkan dapat meningkatkan
kinerjanya.
4. Teknologi
Pengetahuan teknologi modern pada dasarnya akan menghasilkan
kinerjanya lebih banyak dibandingkan penggunaan peralatan tradisional.
Kinerja antara satu organisasi dengan yang lainnya dapat saja berbeda,
karena faktor pendorong yang berbeda. Beberapa faktor tersebut antara lain
factor lingkungan, kemampuan, budaya, pendidikan, kepemimpinan dan
organisasi. Dessler (2000) menyatakan beberapa syarat penilaian atas kerja
yang harus dipenuhi agar mendapatkan hasil kerja yang baik yaitu : relevan,
dapat diterima, dapat dipercaya, peka, dan dapat mendukung tujuan usaha.
Simmamora (1995) menyatakan bahwa kinerja adalah tingkat kerja yang
dicapai oleh seseorang dengan syarat-syarat yang telah ditentukan.
Kinerja dipengaruhi oleh faktor-faktor sebagai berikut :
1. Faktor individual yang terdiri dari : kemampuan dan faktor demografi.
2. Faktor psikologis yang terdiri dari : sikap, motivasi, persepsi, personality
dan pembelajaran.
3. Faktor organisasi yang terdiri dari : sumber daya, kepemimpinan,
penghargaan, struktur dan job design.
Kinerja menggambarkan tentang apa yang telah dicapai oleh individu
atau dengan kata lain hasil aktualyang telah dicapai (Riyadiningsih, 2001,
16
dalam Widyastuti dan Wahyuni, 2003). Ketika individu menetapkan tujuan
dan berusaha untuk mencapai tujuan itu, maka individu ini akan memperoleh
dan melihat hasil dari apa yang telah dilakukannya atau diusahakannya itu.
Nantinya hasil tersebut akan dinilai dan dibandingkan dengan tujuan yang
telah ditetapkan sebelumnya.
Gibson et al (1996;280) menyatakan bahwa performance berkaitan
dengan evaluasi kinerja, dimana evaluasi kinerja merupakan prestasi individu
yang merupakan cerminan prestasi organisasi, oleh karena itu prestasi pegawai
yang tinggi sangat penting artinya bagi keberhasilan organisasi. Bernadin dan
Beatty(1984;46) mendefinisikan kinerja sebagai catatan hasil yang berhasil
diproduksi pekerjaan khusus, seperti fungsi, aktivitas/perilaku hingga periode
waktu khusus, dengan demikian dapat disimpulkan bahwa kinerja organisasi
adalah prestasi dari suatu organisasi dan mengandung beberapa hal seperti
adanya target tertentu yang dicapai, memiliki jangka waktu dalam pencapaian
target dan terwujudnya efisiensi dan efektivitas.
Penilaian Kinerja
Pengukuran tentang kinerja tergantung dari jenis pekerjaan dan tujuan
dari organisasi perusahaan yang bersangkutan. Kriteria yang diinginkan dalam
pengukuran kinerja menurut As’ad (1999;63) adalah kuantitas, kualitas,waktu
yang dipakai, jabatan yang dipegang, absensi dan keselamtan dalam
menjalankan tugas pekerjaan. Pernyataan yang hamper sama dikemukakan
oleh Heidrachman dan Suad Husnan (1994;125) Bahwa kriteria kualitas dan
17
kuantitas pekerjaan, kerja sama, kepemimpinan, kehati-hatian, pengetahuan
mengenai jabatan, kerajinan, kesetiaan dan inisiatif
Menurut Dessler (1997) dalam Bambang Guritno dan Waridin (2005)
penilaian kinerja adalah memberikan umpan balik kepada karyawan dengan
tujuan memotivasi orang tersebut untuk menghilangkan kemerosotan kinerja
atau berkinerja lebih baik lagi. Menurut Mahoney,et al dalam David Effendi
dan Sujono (2004) dalam proses penlaian kinerja ada lima prinsip dasar yang
harus dipenuhi dalam proses penilaian kinerja yakni :
1. Melibatkan orang yang tepat dalam penilaian .
2. Penilaian harus dilihat sebagai suatu subsystem dari system yang
kompleks.
3. Belajar dari proses implementasi.
4. Fleksibilitas harus terjaga.
5. Bersikap sabar.
6. Unsur-unsur yang digunakan dalam penilaian kinerja pegawai
Tolok ukur atau ukuran penilaian kinerja pegawai berbeda tergantung
dari tujuan penilaian prestasi kerjaitu sendiri. Sejalan dengan hal tersebut,
faktor-faktor pembentuk prestasi kerja dapat dijabarkan dalam beberapa unsur
yang selanjutnya dapat digunakan sebagai tolok ukur penilaian kinerja.
Adapun unsur-unsur yang dimiliki menurut Malayu Hasibuan (2001;95)
adalah sebagai berikut :
18
1. Kesetiaan
Unsur kesetiaan dalam hal ini menyangkut loyalitas karyawan terhadap
pekerjaannya, jabatan organisasi. Kesetiaan ini dicerminkan oleh
kesediaan karyawan menjaga dan membela organisasi didalam maupun
diluar organisasi yang tidak bertanggung jawab.
2. Kedisiplinan
Penilai menilai disiplin dalam mematuhi peraturan-peraturan yang ada dan
melakukan pekerjaan sesuai dengan instruktur yang diberikan kepadanya.
3. Kejujuran
Penilai menilai kejujurandalam melaksanakan dalam melaksanakan
4. Kerja sama
Penilai menilai hasil kerja yang baik kualitas/kuantitas dapat dihasilkan
karyawan tersebut dari uraian pekerjaannya.
5. Kreativitas
Peniali menilai kemampuan karyawan dalam mengembangkan
kreativitasnyauntuk menyelesaikan pekerjaan sehingga bekerja lebih
berdaya guna dan berhasil guna.
6. Kepemimpinan
Penilai menilai kemampuan untuk memimpin berpengaruh, mempunyai
perbedaan yang kuat, dihormati, berwibawa dan dapat memotivasi orang
lain/bawahannya/bekerja secara aktif.
19
7. Kepribadian
Penilai menilai karyawan dan sikap perilaku, kesopanan, periang, disukai,
memberi kesan menyenangkan, memperlihatkan sikap yang baik serta
berpenampilan simpatik dan wajar.
Kriteria penilaian kinerja dibagi menjadi 3 tipe:
1. Penilaian kinerja berdasarkan hasil (result-based performance appraisal)
Tipe kriteria ini merumuskan pekerjaan berdasarkan pencapaian tujuan
organisasi, atau mengukur hasil akhir (end-result). Jajaran kinerja bisa
ditetapkan oleh manajemen atau kelompok kerja, tetapi jika menginginkan
agar pegawai meningkatkan kinerja mereka, maka penetatap sasaran
secara partisipasi dengan melibatkan para pegawai akan jauh berdampak
positif terhadap peningkatan kinerja organisasi.
2. Penilaian kinerja berdasarkan perilaku (behavior based performance
appraisal)
Tipe kriteria ini mengukur sarana (means) pencapaian sasaran (goals) dan
bukannya hasil akhir (end result).
3. Penilaian kinerja berdasarkan judgement (judgement based performance
appraisal)
Tipe kriteria ini menilai atau mengevaluasi kinerja pegawai berdasarkan
deskripsi perilaku yang spesifik yaitu:
a. Jumlah kerja yang dilakukan dalam satu periode yang ditentukan.
b. Kualitas kerja yang dicapai berdasarkan syarat-syarat kesesuaian dan
kesiapan.
20
c. Luasnya pengetahuan mengenai pekerjaannya dan keterampilannya.
d. Kesetiaan untuk kerja sama dengan orang lain (sesama anggota
organisasi).
e. Kesadaran dan dapat dipercaya dalam hal kehadiran dan penyelesaian
kerja.
f. Mengukur kepribadian, kepemimpinan, keramahtamahan dan integritas
pribadi.
Dalam penilaian kerja karyawan sering terjadi kekeliruan (gibson,
1997:20) mengungkapkan 5 (lima) masalah utama dalam skala/penilaian
kinerja dan pemecahannya, yaitu:
1. Standar kinerja yang tidak jelas
Standar kinerja yang tidak jelas adalah skala penilaian yang selalu terbuka
terhadap interprestasi sebagai gantinya memasukkan ungkapan-ungkapan
positif masing-masing ciri dan apa yang dimaksud dengan standar-standar
seperti “baik” atau “tidak memuaskan”.
2. Efek Hallo
Masalah yang dapat terjadi dalam kinerja bila penilain seorang penyelia
terhadap seorang bawahan pada satu ciri membiaskan penilain atas orang
itu pada ciri lainnya. Kesadaran pada masalah ini merupakan kangkah
utama untuk dapat menghindarinya. Selain itu pelatihan kepenyeliaan jadi
dapat mengurangi masalah.
21
3. Kecenderungan sentral
Suatu kecenderungan untuk menilai semua karyawannya dengan cara yang
sama, seperti menilai mereka dalam tingkat rata-rata. Sebagai gantinya
peningkatan karyawan dengan menggunakan skala grafik dapat
menghindari masalah kecenderungan sentral karena semua karyawan harus
diperingatkan dengan demikian tidak dapat terjadi dinilai rata-rata.
4. Terlalu keras atau terlalu longgar
Masalah lain yang mungkin terjadi ketika seorang penyelia
berkecenderungan untuk menilai semua bawahannya entah terlalu tinggi
atau terlalu rendah. Jika skala penilaian grafik yang harus digunakan,
maka perlu untuk mengandalkan satu distribusi kinerja, upayakan untuk
membuat penyebaran.
5. Prasangka
Kecenderungan untuk mengikuti perbedaan individual seperti usia, ras dan
jenis kelamin untuk mempengaruhi tingkat penilaian yang diterima
karyawan. Penting bila penilain dilakukan secara objektif dan usahakan
untuk membendung pengaruh dan dari faktor-faktor seperti kinerja
terdahulu usia, ras dan lainnya.
Penilaian kinerja pada seluruh karyawan merupakan kegiatan yang
harus secara rutin dilakukan dengan tujuan untuk meningkatkan kinerja
organisasi secara objektif tepat dan didokumentasikan secara baik cenderung
menurunkan potensi penyimpanan yang dilakukan karyawan sehingga kinerja
karyawan sesuai dengan yang dibutuhkan perusahaan.
22
Penilaian kinerja yang sistematik akan sangat bermanfaat untuk
berbagai kepentingan yaitu:
1. Mendorong peningkatan kinerja karyawan
Dengan mengetahui hasil penilaian karyawan maka pihak-pihak yang
terlibat dapat mengambil langkah-langkah yang diperlukan agar kinerja
karyawan dapat lebih meningkat lagi di masa yang akan datang.
2. Bahan pertimbangan keputusan dalam pemberian imbalan
Imbalan yang diberikan perusahaan tidak terbatas hanya pada upah atau
gaji saja akan tetapi juga berbagai imbalan lain seperti bonus akhir tahun,
hadiah pada hari raya atau bahkan ada perusahaan yang memperbolehkan
karyawannya yang memiliki sejumlah saham perusahaan sebagai denean
hasil penilaian kinerja dapat ditentukan siapa-siapa yang berhak menerima
berbagai imbalan tersebut.
3. Kepentingan mutasi karyawan
Hasil penilaian kinerja karyawan dimasa lalu dapat dijadikan dasar
pengambilan keputusan mutasi baginya dimasa depan. Mutasi tersebut
dapat berupa promosi dan alih wilayah.
4. Guna menyusun program pendidikan dan pelatihan
Guna mengatasi berbagai kekurangan dan kelemahan ataupun untuk
mengembangkan potensi karyawan yang sebelumnya belum tergaris
sepenuhnya, hal tersebut dapat terungkap pada hasil penilaian kinerja.
23
5. Membantu para pegawai menentukan rencana kariernya
Dengan hasil penilaian kinerja maka bagian personalia dapat membantu
karyawan dalam menyusun program pengembangan karier yang paling
tepat guna kepentingan karyawan dan perusahaan yang bersangkutan.
Tujuan Penilaian dan Pengukuran Kinerja
Tujuan dari penilaian kinerja dalam hal ini, tidak hanya berfokus pada
tujuan yang bersifat administrasi, tetapi juga terfokus pada tujuan strategi
pengembangan. Tujuan yang bersifat administrasi menunjukkan tanggung
jawab penilaian kinerja untuk melakukan pencatatan terhadap perilaku atau
prestasi karyawan selama periode tertentu sehingga berdasarkan dokumen itu
dapat ditentukan kompensasi yang harus diterima oleh karyawan. Dokumen
ini berfungsi pula sebagai sumber informasi bagi manajemen untuk
menjalankan kebijakan promosi atau pelatihan. Penilaian kinerja harus mampu
mengaitkan tugas-tugas dan karakteristik kemampuan karyawan dengan tujuan
strategi organisasi. Sedangkan tujuan pengembangan menunjukkan bagaimana
pengembangan kinerja menjadikan efektifnya tugas dan tanggung jawab
karyawan dalam melaksanakan perkerjaannya.
Penilaian kinerja penting untuk dilakukan sehubungan dengan individu
yang berbeda-beda. Perbedaan tersebut dapat menimbulkan perbedaan hasil
kerja, oleh karena itu dibutuhkan standarisasi dalam penilaian. Penilaian
kinerja sebagaimana diungkapkan oleh Pigordan Myers (dalam Kurniawan,
1999) meliputi dimensi-dimensi sebagai berikut:
24
1. Pengetahuan kerja
2. Kualitas kerja dan kuantitas kerja
3. Kemampuan mempelajari tugas-tugas baru
4. Inisiatif
5. Kerja sama
6. Pertimbangan dan akal sehat
Menurut Ahmad S. Ruki (2001) penilaian kinerja dapat dilihat dengan
menggunakan 6 faktor karakteristik pribadi sebagai objek penilaian yaitu
1. Kuantitas pekerjaan
2. Kualitas hasil kerja
3. Kejujuran
4. Ketaatan
5. Inisiatif
6. Kecerdasan
Pendapat lain yang dikemukakan oleh Flippo (dalam Kurniawan, 1999)
menyebutkan bahwa penilaian kinerja mencakup
1. Kualitas pekerjaan: ketepatan, keterampilan, ketelitian, kerapian.
2. Kuantitas kerja: output
3. Ketangguhan: disiplin, inisiatif, ketepatan waktu dan kehadiran.
4. Sikap: terhadap perubahan pekerjaan dan lingkungan kerja.
Handoko (2001;135) menyatakan bahwa penilaian kinerja adalah proses
melalui mana organisasi-organisasi mengevaluasi atau menilai prestasi kinerja
karyawan. Kegiatan ini dapat memperbaiki keputusan-keputusan personalia
25
dan memberikan umpan balik kepada para karyawan tentang pelaksanaan
kerja mereka. Kegunaan-kegunaan penilaian kinerja dapat dirinci sebagai
berikut:
1. Perbaikan prestasi atau kinerja
Umpan balik pelaksanaan kerja memungkinkan karyawan, manajer dan
departemen personalia dapat membetulkan kegiatan-kegiatan mereka
untuk memperbaiki kinerja atau prestasi.
2. Penyesuaian-penyesuaian kompensasi
Evaluasi kerja atau prestasi kerja membantu para pengambil keputusan
dalam menentukan kenaikan upah, pemberian bonus, dan bentuk
kompensasi lainnya.
3. Keputusan-keputusan penempatan
Promosi, transfer biasanya didasarkan pada kinerja atau prestasi kerja
masa lalu atau antisipasinya. Promosi sering merupakan bentuk
penghargaan terhadap kinerja atau prestasi kerja masa lalu.
4. Kebutuhan-kebutuhan latihan dan pengembangan
Prestasi atau kinerja yang jelek mungkin menunjukkan kebitihan latihan.
Demikian juga prestasi yang baik mungkin mencerminkan potensi yang
harus dikembangkan.
5. Penyimpangan-penyimpangan proses staffing
Kinerja atau prestasi kerja yang baik atau jelek mencerminkan kekuatan
atau kelemahan prosedur steffing departemen personalia.
26
6. Ketidak akuratan informasional
Kinerja atau prestasi yang jelek mungkin menunjukkan kesalahankesalahan
dalam informasi analisis jabatan, rencana-rencana sumber daya
manusia atau komponen-komponen lain sistem informasi manajemen
personalia. Menggantungkan informasi pada informasi yang tidak akurat
dapat menyebabkan keputusan-keputusan yang tidak tepat.
7. Kelemahan-kelemahan desain pekerjaan
Kinerja atau prestasi yang jelek mungkin merupakan suatu tanda kesalahan
dalam desain pekerjaan.
8. Kesempatan kerja yang adil
Penilaian kinerja atau prestasi secara akurat akan menjamin keputusankeputusan
penempatan internal diambil tanpa diskriminasi.
9. Tantangan-tantangan eksternal
Kadang-kadang kinerja atau prestasi kerja dipengaruhi oleh faktor-faktor
diluar lingkungan kerja seperti keluarga, kesehatan, kondisi finansial atau
masalah-masalah pribadi lainnya.
Masalah pengukuran kinerja dapat terjadi pada tahap penilaian kinerja
seperti yang diungkapkan oleh Olifer (dalam Dessler, 1997) adalah sebagai
berikut:
1. Kekuarangan standar
Tanpa adanya standar tidak ada penilaian yang objekif hanya ada dugaan
atau perasaan subjektif tentang kinerja.
27
2. Standar yang tidak relevan atau subjektif
Standar-standar hendaknya ditetapkan dengan menganalisis hasil
pekerjaan untuk memastikan bahwa pekerjaan-pekerjaan itu berhubungan
dengan pekerjaan.
3. Standar yang realitis
Standar-standar adalah tujuan untuk memberikan motivasi. Standarstandar
yang masuk akal dan menentang itu paling berpotensi untuk
memotivasi keryawan untuk bekerja lebih baik.
4. Ukuran yang jelek atas kinerja
Objektivitas dan perbandingan menuntut bahwa kemajuan kearah standar
atau pencapaian standar yang dapat diukur.
5. Umpan balik yang jelek terhadap karyawan
Standar dan atau penilaian harus dikomunikasikan kepada karyawan agar
evaluasi kinerja bias efektif.
6. Komunikasi yang efektif
Proses evaluasi itu dihalangi oleh komunikasi yang bersifat negatif, seperti
ketidakluwesan, pembelaan diri, dan pendekatan yang tidak bersifat
mengembangkan.
7. Kegagalan untuk menerapkan data evaluasi
Kegagalan untuk menggunakan evaluasi dalam pengambilan keputusan
personil meniadakan tujuan utama evaluasi kinerja. Penggunaan dan
pertimbangan berbagai ragam kriteria juga frekwensi evaluasi ikut
menimbulkan masalah.
28
Kesejahteraan
Karyawan
Kinerja
Karyawan
C. Pengaruh Kesejahteraan Karyawan terhadap Kinerja Karyawan
Kesejahteraan karyawan itu selalu menjadi keinginan setiap orang
karena dengan hidup sejahtera orang akan dapat menikmati hidupnya.
Demikian juga dengan karyawan disuatu Perusahaan, jika kesejahteraan
karyawan itu terjamin maka akan dapat meningkatakan prestasi kerja
karyawan.
Adapun manfaat yang diperoleh dengan diselenggarakan program
kesejahteraan karyawan adalah sebagai berikut :
1. Memperbaiki semangat dan kesejahteraan karyawan
2. Penarikan tenaga kerja atau karyawan yang lebih efektif
3. Menurunkan tingkat absensi
Disisi lain dengan semangat kerja atau prestasi kerja karyawan yang
baik itu dapat meningkatkan usaha dan juga akan meningkatkan
rentabilitasnya. Oleh sebab itu dengan meningkatnya tingkat rentabilitas suatu
perusahaan, maka dalam pemberian kesejahteraan kepada karyawan akan
bertambah atau meningkat.
D. Kerangka Pemikiran
Untuk dapat memahami permasalahan yang akan dibahas, maka perlu
suatu skema yang menunjukkan hubungan masing-masing variable yang
diteliti, kerangka ini penulis sajikan dalam bentuk gambar sebagai berikut :
29
H1 : Diduga kesejahteraan karyawan mempunyai pengaruh terhadap kinerja
karyawan
E. Penelitian Terdahulu
Sukir (2004) pernah melakukan penelitian dengan judul: “Pengaruh
Disiplin Kerja dan Pemberian Insentif Terhadap Produktivitas Kerja
Karyawan Bagian PT. Batik Keris Sukoharjo Tahun 2002-2003”. Penelitian
ini bertujuan untuk mengetahui pengaruh pemberian insentif terhadap
produktivitas kerja karyawan bagian produksi PT. Batik Keris Sukoharjo
Tahun 2002-2003. Berdasarkan analisis regresi linear berganda diperoleh hasil
bahwa disiplin kerja dan pemberian insentif secara parsial maupun bersamasama
berpengaruh positif dan signifikan terhadap produktivitas kerja
karyawan bagian produksi PT. Batik Keris Sukoharjo Tahun 2002-2003.
Suhari dan Tjokroamidjojo (2002) pernah melakukan penelitian
dengan judul: “Analisis Pengaruh Pemberian Kompensasi Terhadap Kinerja
Pada Perusahaan Perhotelan Di Surakarta”. Berdasarkan hasil analisis regresi
linear berganda diperoleh temuan bahwa variabel kompensasi yang diukur dari
gaji, tunjangan dan kesejahteraan karyawan secara individual maupun
bersama-sama berpengaruh signifikan terhadap kinerja pada Perusahaan
Perhotelan di Surakarta.
Novi (2004) pernah melakukan penelitian dengan judul: “Pengaruh
Gaji, Absensi Kerja dan Jaminan Sosial Terhadap Produktivitas Kerja
Karyawan Pada PT. Triangga Dewi Di Surakarta”. Menyimpulkan bahwa gaji
30
dan jaminan sosial berpengaruh positif terhadap produktivitas kerja karyawan
sedangkan absensi kerja berpengaruh negatif terhadap produktivitas kerja.
Masnurhadi (2003) meneliti tentang pengaruh iklim organisasi dan
kompensasi terhadap produktivitas kerja karyawan di Rumah Sakit Dr.
Moewardi Surakarta. Hasil penelitian data terbukti bahwa kedua variabel
independen secara bersama-sama memberikan pengaruh yang signifikan
terhadap produktifitas kerja karyawan. Besarnya koefisien determinasi 68,3%,
hal ini menunjukkan bahwa 68,3% produktivitas kerja karyawan dapat
dijelaskan oleh variabel independen dan sisanya 31,7% diterangkan variabel
lain.
Prastowo (2002) meneliti tentang pengaruh kepemimpinan, motivasi,
dan kepuasan terhadap kinerja karyawan di STSI Surakarta. Hasil penelitian
data terbukti bahwa ketiga variabel independen secara bersama-sama
memberikan pengaruh yang signifikan terhadap kinerja karyawan. Besarnya
koefisien determinasi 66,8%, hal ini menunjukkan bahwa 66,6% kinerja
karyawan dapat dijelaskan oleh variabel independen dan sisanya 33,4%
diterangkan variabel lain.
F. Hipotesis
Agar diperoleh suatu pandangan untuk menganalisis data selanjutnya,
maka dikemukakan bahwa hipotesis adalah jawaban sementara terhadap
pertanyaan yang diajukan dalam perumusan masalah. Untuk selanjutunya akan
dilakukan pengujian atau pembuktian atas kebenaran secara empiris.
31
BAB III
METODE PENELITIAN
A. Populasi
Menurut Djarwanto (1994;107) populasi adalah keseluruhan objek
yang karakteristiknya hendak diduga. Sebagai populasi dalam penelitian ini
adalah seluruh karyawan.
B. Sampel & Teknik Pengambilan Sampel
Sampel adalah sebagian dari populasi yang karakteristiknya hendak
diduga dianggap mewakili populasinya (Djarwanto, 1994;109). Metode
pengambilan sampling dalam penelitian ini menggunakan Conviniance
sampling. Pengambilan sampel berdasarkan rumus Slovin, yaitu sejumlah 88
responden,dengan rumus sebagai berikut :
n = ( 2 ) 1 N d
N
+
Keterangan :
n : Besarnya sampel
N : Jumlah populasi
d : estimasi penyimpangan 0,1 (Notoatmojo, 2005)
Adapun perhitungannya :
n = ( 2 ) 1 N d
N
+
31
32
= ( 2 ) 1 723 0,1
723
+
= ( ) 1 723 0,01
723
+
=
1 7,23
723
+
=
8,23
723
= 88
Dengan perhitungan tersebut maka dapat diambil sampel sejumlah 88
responden.
C. Jenis Data dan Sumber Data
Data penelitian ini pada dasarnya jenis data dikelompokkan menjadi:
1. Data kualitatif
Merupakan data yang banyak diinginkan dalam penelitian filosofis dan
sebagian juga terdapat dalam penelitian diskriptif dan penelitian historis.
Data kualitatif terdiri dari gambaran umum dan struktur organisasi.
2. Data kuantitatif
Merupakan data hasil transformasi dari data yang berjenjang dengan
memberikan simbol angka secara berjenjang. Data kuantitatif ini
didapatkan dari jawaban responden yang berupa pengisian angket.
33
Dengan menganalisa hubungan antaravariabel bebas dan variable
terikat diperlukan data-data. Data-data tersebut dapat diperoleh melalui
sumber-sumber data sebagai berikut:
1. Data primer: adalah data yang diperoleh langsung dari obyek penelitian.
Dalam hal ini beberapa jawaban angket dari karyawan yang disebarkan
oleh penulis tentang analisis hubungan antara kesejahteraan karyawan
dengan kinerja karyawan di Air Mancur Wonogiri.
2. Data sekunder: yaitu data yang diperoleh secara tidak langsung. Data ini
meliputi gambaran umum perusahaan, data jumlah karyawan dan literatur
yang berhubungan dengan penelitian.
D. Metode pengumpulan data
Pengumplan data penelitian ini menggunakan metode survey, dimana
alat pengumpulan data yang pokok dari sumber primer adalah kuisioner.
Metode kuisioner adalah metode yang digunakan untuk mengumpulkan
data dengan cara memakai daftar pertanyaan yang disebarkan kepada
responden. Peneliti menyusun dan membagikan daftar pertanyaan untuk
memperoleh data primer mengenai permasalahan yang diteliti dan responden
diminta mengisi sesuai pendapatnya.
34
E. Devinisi Operasional Variabel dan Pengukuran
1. Kesejahteraan Karyawan
Kesejahteraan mempunyai arti aman sentosa dan makmur, selamat,
terlepas dari segala macam gangguan, kesukaran dan sebagainya(WJS.
Poerwodarminto,1984;492). Sedangkan karyawan adalah tiap orang yang
melakukan pekerjaan. Dapat disimpulkan bahwa kesejahteraan karyawan
adalah suatu kondisi aman sentosa dan makmur terhindar dari berbagai
ancaman dan kesulitan yang dirasakan seseorang yang telah melakukan
suatu pekerjaan di suatu tempat. Adapun manfaat yang diperoleh bila
diselenggarakan kesejahteraan karyawan antara lain dapat memperbaiki
semangat dan kesejahteraan karyawan dan dapat menarik tenaga kerja atau
karyawan yang lebih efektif. Indikator kesejahteraan diukur dari
keamanan,kesenangan, dan kemakmuran.
2. Kinerja Karyawan
Kinerja karyawan adalah hasil kerja secara kualitas dan kuantitas
yang dicapai oleh seseorang pegawai dalam melaksanakan tugasnya sesuai
dengan tanggung jawab yang diberikan kepadanya(As ad,1999;63).
Pelaksanaan pekerjaan akan lebih efektif apabila didukung dengan
keyakinan dan motivasi yang tinggi. Dengan adanya keyakinan akan
mendorong seseorang untuk bertanggung jawab terhadap
pekerjaannyasehingga dapat mengarahkan perilaku kerjanya demi
tercapainya tujuan yang diinginkan. Indikator kinerja karyawan diukur dari
sikap kerja, kedisiplinan kerja, kerja sama, dan kualitas kerja.
35
Adapun dalam penilaian kuisioner tersebut digunakan standar penilaian ):
1, 2, 3, 4 (Suharsini Arikunto) yang peneliti uraikan sebagai berikut :
1) Nilai 4, apabila responden menjawab alternatif a.
2) Nilai 3, apabila responden menjawab alternatif b.
3) Nilai 2, apabila responden menjawab alternatif c.
4) Nilai 1, apabila responden menjawab alternatif d.
F. Uji Kualitas Pengumpulan Data
Untuk menguji data yang diperoleh digunakan dua teknik yaitu :
1. Uji Validitas
Uji validitas adalah uji yang digunakan untuk mengukur seberapa jauh alat
pengukur dapat mengungkap dengan jitu gejala yang hendak diukur
sehingga alat pengukur benar-benar mengukur apa yang diukur. Menurut
Sutrisno Hadi (1999;19) cara mengukur variable adalah dengan
mengkorelasikan antar skor items & skor total. Untuk uji validitas ini
menggunakan teknik korelasi product moment yang rumusnya :
Rxy =
( )( )
{N 2 2}{N 2 2}
N XY -
ΣΧ −ΣΧ ΣΥ −ΣΥ
Σ ΣΧ ΣΥ
2. Uji Reliabilitas
Uji reliabilitas dilakukan untuk mengetahui sejauh mana suatu pengukuran
dapat dipercaya untuk mencari reliabilitas instrument yang skornya berupa
skala bertingkat (ranting scale) dapat diuji dengan menggunakan teknik
cronbach alpha. Menurut Suharsini Arikunto (1993;165) metode ini dipilih
36
karena dapat digunakan untuk mengetahui tingkat keterkaitan antara butir
pernyataan dalam suatu instrument penelitian.
Penjabaran rumusnya adalah :
r =  


 
 Σ
−  


 

2
2
1
K-1
K
t
b
ρ
ρ
Dimana :
r = Reliabilitas instrument
k = Banyaknya butir pertanyaan /banyaknya soal
Σρb2 = Jumlah varians butir
ρt2 = Varians total
G. Uji Asumsi Klasik
Sebelum melakukan analisis regresi sederhana maka perlu adanya
persyaratan yang harus terpenuhi terlebih dahulu. Uji asumsi klasik dilakukan
untuk mengetahui ada atau tidaknya penyimpangan dalam model regresi.
Pegujian ini meliputi :
1. Uji Normalitas
Kenormalan data diperlukan untuk menguji keselarasan akan kepastian
data yang diperoleh. Pengujian normalitas dapat dilakukan dengan
program SPSS. Uji normalitas menggunakan kolmogarov smirnov (k-1).
Hasil dari uji normalitas adalah :
a. Nilai signifikan ≤ 0,05 maka Ho ditolak, hal ini berarti bahwa data
tidak berdistribusi normal.
37
b. Nilai signifikan ≥0,05 maka Ho diterima, hal ini berarti bahwa data
berdistribusi normal.
H. Metode Analisis Data
Untuk membuktikan hubungan antara variabel dalam penelitian ini
penulis menggunakan alat analisis:
1. Analisis regresi sederhana
Analisis regresi sederhana adalah suatu teknik yang digunakan untuk
mengetahui pengaruh variabel bebas terhadap variabel terikat.
Rumus yang digunakan sebagai berikut (Djarwanto Ps, 1994;230)
Y = a + bX + e
Dimana : Y = kinerja karyawan
X = kesejahteraan karyawan
b = koefisien regresi
a = bilangan konstan
e = variabel pengganggu
2. Uji Hipotesis
Untuk menguji hipotesis dalam penelitian ini adalah membuktikan adanya
pengaruh variabel bebas (kinerja) terhadap variabel terikat (kesejahteraan)
digunakan perhitungan uji F dan uji t.
38
a. Uji F
Uji F diperlukan untuk mengetahui pengaruh variabel independen (X)
terhadap variabel dependen (Y) secara simultan. Adapun langkahlangkahnya
(Djarwanto Ps, 1991:246).
2) Menentukan hipotesis nihil dan hipetesis alternaif
Ho : β1 = 0, tidak ada pengaruh dari variabel independen secara
serentak terhadap variabel dependen.
H1 : β1 ≠ 0, ada pengaruh dari variabel independen secara serentak
terhadap variabel dependen.
3) Menentukan level of signifikan (α = 5%), derajat kebebasan
(dF1 = k – 1 dan dF2 = n – k)
4) Menentukan kriteria pengujian
Ho diterima Fhitung ≤ Ftabel
Ho ditolak Fhitung ≥ Ftabel
Ho diterima Ho ditolak
F (α; n-k; k-1)
Gambar III.1. Grafik Uji F
5) Menentukan nilai Fhitung
Fhitung =
( )
(1 r )/ (n k 1)
r / k 1
2
2
− − −

Dimana: r 2 = koefisien determinasi
k = banyaknya variabel bebas (x)
39
n = jumlah sampel
6) Nilai Fhitung yang diperoleh dibandingkan dengan nilai Ftabel apabila
Fhitung > Ftabel, maka Ho ditolak sehingga dapat disimpulkan bahwa
ada pengaruh yang signifikan antara variabel-variabel independen
dengan variabel dependen. Apabila F hitung < Ftabel, maka Ho
diterima sehingga dapat disimpulkan bahwa tidak ada pengaruh
yang signifikan antara variabel independen dengan variabel
dependen.
a. Uji t (t-test)
Uji t digunakan untuk mengetahui pengaruh variabel independen
terhadap variabel dependen secara individual. Adapun langkahlangkahnya
(Djarwanto Ps, 19947:246)
1) Menentukan hipotesis nihil dan hipetesis alternaif
Ho : β1 = 0, tidak berpengaruh yang signifikan dari masing-masing
variabel independen terhadap variabel dependen.
H1 : β1 ≠ 0, ada pengaruh yang signifikan dari masing-masing
variabel independen terhadap variabel dependen.
2) Menentukan level of signifikan (α = 5%), dan tingkat kebebasan
(dF = n – 1)
3) Menentukan kriteria pengujian
Ho diterima apabila Ftabel ≤ Fhitung
Ho ditolak apabila Fhitung ≥ Ftabel
40
Gambar III.2
Grafik uji t
4) Menentukan nilai thitung dengan rumus:
thitung =
Sb
b
Dimana: b = koefisien regresi variabel
Sb = standar error koefisien regresi variabel
5) Setelah diperoleh nilai thitung kemudian dibandingkan dengan ttabel.
Apabila thitung ≥ ttabel maka Ho ditolak, berarti ada pengaruh antara
variabel independen terhadap variabel dependen. Apabila
thitung ≤ ttabel maka Ho diterima berarti tidak ada pengaruh antara
variabel independen terhadap variabel dependen.
-t(α/2;n-1) Ho ditolak Diterima Ho ditolak t(α/2;n-1)
41
BAB IV
ANALISA DATA DAN PEMBAHASAN
A. Gambaran Umum Perusahaan
1. Sejarah dan perkembangan perusahaan
PT AIR MANCUR dikenal oleh masyarakat sebagai sebuah
perusahaan jamu tradisional yang besar, dan modern di Indonesia. Selaras
dengan perkembangan dunia pengobatan secara tradisional tidak kalah
dengan perkembangan pengobatan secara modern. Bahkan pengobatan
yang berasal dari bahan tradisional ini selalu mendapat tempat di hati
masyarakat Indonesia. Kecenderungan ini pada dasarnya bukan hanya
sekedar karena masyarakat Indonesia konsumeris terhadap jamu, tetapi
lebih dari itu ada kepercayaan dari masyarakat bahwa obat tradisional
tidak mempunyai efek samping secara serius dibanding dengan obat
medis. PT AIR MANCUR bukanlah suatu perusahaan yang didirikan
dengan modal besar, melainkan perusahaan home industri yang tidak
dikenal sama sekali.
a. Dari Home Industri Sampai Menjadi Perseroan Terbatas (PT)
Perusahaan jamu PT AIR MANCUR adalah salah satu
perusahaan yang ada di Indonesia dan menempati tempat ternama
diantara perusahaan penghasil jamu lainnya. Mula pertama perusahaan
jamu ini hanyalah merupakan home industri dengan menggunakan 11
orang tenaga kerja dan menggunakan alat yang sangat sederhana.
41
42
Namun demikian ternyata hasil produksinya tidak mengecewakan,
bahkan dapat dikatakan tidak kalah dengan hasil produksi jamu yang
menggunakan mesin modern. Hal ini dibuktikan dengan adanya hasil
penjualan yang tinggi. Dan hasil penjualan yang tinggi ini terus
meningkat.
PT AIR MANCUR berdiri pada tanggal 23 Maret 1963 tepatnya
di Desa Pucang Sawit oleh Bapak L. Wonosantoso bersama dengan
dua temannya yaitu Bapak Rudi Hendrotanoyo dan Ongkosanjoyo.
Nama air mancur dipakai sebagai merek produk yang dihasilkan
mendapat hasil penjualan yang tinggi di kota Jakarta. Khususnya di
Jalan Moh. Husni Thamrin dimana terdapat air yang mancur dan nama
itu menjadi sangat popular. Kemudian mulai saat itu sampai sembilan
bulan pertama perkembangan usaha dapat dilihat sekaligus dapat
dirasakan hasilnya.
Melihat perkembangan usahanya, maka perlu dibentuk suatu
perusahaan yang berbadan hukum. Dan pada tanggal 23 Desember
1963, perusahaan ini berubah menjadi perusahaan yang berbadan
hokum Perseroan Terbatas (PT) dengan nama Perusahaan Jamu PT
AIR MANCUR dengan Akte Notaris Tan Sioe di Semarang No. 65,
serta Akte Pembetulan No. 65 yang dikeluarkan pada tanggal 5 Juli
1964, dan L. Wonosantoso menjadi direkturnya. Pada saat itu lokasi
perusahaan sudah pindah dari Pucang Sawit ke Wonogiri, yaitu pada
43
tanggal 11 Januari 1964. Ditempat baru ini produksi diperbesar dengan
jumlah tenaga kerja sebanyak 50 orang.
b. Perkembangan PT AIR MANCUR
Perkembangan yang dicapai semakin pesat, hal ini ditandai
dengan semakin meningkatnya jumlah karyawan yang dibutuhkan,
dengan bertambahnya jumlah karyawan mengakibatkan lokasi pabrik
semakin sempit, sehingga pada tahun 1973 perusahaan mempersiapkan
perluasan pabrik dilakukan di lokasi baru yaitu di daerah Palur yang
terletak di tepi jalan raya Solo-Sragen. Beberapa tahun kemudian
perusahaan dapat mendirikan pabrik baru:
1) Pda tahun 1976, mendirikan pabrik baru lagi di Daerah Jajar. Pabrik
ini digunakan untuk kegiatan logistik.
2) Pada tahun 1978, memperluas lagi pabrik baru di Klampisan dan
Salak.
3) Pada tahun 1995, memperluas lagi pabrik baru di Celep dan Jetis
sebagai produksi kosmerika.
2. Lokasi unit kerja perusahaan
PT AIR MANCUR mempunyai tiga daerah unit kerja yaitu:
a. Unit kerja Wonogiri (3 sayap produksi) yaitu di Wonogiri, Klampisan,
dan Salak.
b. Unit kerja Karanganyar (3 sayap produksi) yaitu di Palur, Celep dan
Jetis.
44
c. Sampai saat ini tenaga kerja yang dimiliki telah berjumlah 723 orang.
Perusahaan Jamu PT. AIR MANCUR semakin hari semakin
berkembang baik dari segi kuantitas maupun kualitasnya.
3. Visi dan misi PT AIR MANCUR
a. Visi
Visi PT AIR MANCUR adalah menjadi perusahaan terdepan di
Indonesia yang menghasilkan produk alami bagi kesehatan.
b. Misi
Misi PT AIR MANCUR adalah:
1) Memproduksi dan memasyarakatkan obat alami, minuman
kesehatan, kosmetika, dan suplemen berbahan baku alami yang
inovatif, memberi nilai tambah tinggi dan menyehatkan
masyarakat.
2) Memuaskan pelangan dan konsumen melalui manfaat yang lebih
tinggi dari harapannya.
3) Memuaskan para “stakeholders” melalui kinerja perusahaan yang
prima dan di atas rata-rata industri sejenis.
4) Selalu tumbuh di atas rata-rata industri sejenis sehingga selalu
meningkatkan market share di setiap kategori produk.
5) Membangun Sumber Daya Manusia yang handal dan kompeten di
bidangnya.
45
Gambar IV. 1
STRUKTUR ORGANISASI PT. AIR MANCUR
4. Struktur Organisasi Perusahaanisasi
Direktur Utama
RUPS
Staff Ahli Staff Ahli
Direktur Muda
Administrasi
Keuangan
Keagenan
Pembukuan
Logistik
Gudang
Bhn Baku
Seleksi
Cuci / Oven
Peracikan
Laboratorium
Produk
Development
Produksi
Giling
Ayak
Aduk
Gudang jamu setengah jadi
Etiket Bungkus
Sales Promotion
Perencanaan
Reklame
Potografi
Bengkel
reklame
Pengawas
Penghubung
Penyalur
Penjualan
Mobil-mobil
Propaganda
Pengawas
Penghubung
Penyalur
Umum
Humas
Personalia
Bengkel
Mobil
Direktur Muda
46
Tugas Masing-Masing Struktur Organisasi
Dalam rangka menjalankan usahanya agar perusahaan dapat
tercapai, maka perlu adanya suatu sistem organisasi yang baik, karena
dengan suatu sistem organisasi yang baik maka efisiensi kerja akan lebih
baik.
Sistem organisasi yang jelas dapat diketahui wewenang, tugas serta
tanggung jawab dari masing-masing bagian maka tidak akan menimbulkan
kesimpangsiuran dalam menjalankan tugas dari masing-masing bagian
tersebut.
Secara garis besar, sebagian tugas dan tanggung jawab beberapa
bagian yang terdapat struktur organisasi perusahaan sebagai berikut:
a. Rapat Persero
Bertugas:
1) Memegang kekuasaan tertinggi pada perusahaan
2) Memilih Komisaris dan Direktur
b. Komisaris
Bertugas:
1) Sebagai penasehat Direktur bila terjadi hal-hal yang bersifat khusus
dan membutuhkan pertimbangan-pertimbangan.
2) Mengawasi dan mamahami serta mengamati cara kerja Direktur
dalam memimpin perusahaan.
c. Direktur
Bertugas:
1) Merumuskan kebijakan yang dikepalainya.
47
2) Mengadakan koordinasi dan singkronisasi di berbagai aktivitas
kepala bagian yang berada di dalam wewenangnya sehingga
tercipta kerjasama yang baik.
3) Bertanggung jawab terhadap persero yang menangani hasil
operasional perusahaan.
4) Melaksanakan koordinasi, singkronisasi dan pengawasan terhadap
aktivitas perusahaan.
5) Menangani masalah di bagian pemasaran dan bagian umum dengan
merumuskan kebijakan mengenai bagian tersebut berdasar mufakat
dengan kepala bagian.
6) Selalu mengusahakan efisiensi kepada kepala pemasaran dan
umum serta menerima laporan kerja dari bagian pemasaran dan
umum.
d. Bagian Administrasi
Bertugas menyelenggarakan tugas-tugas administrasi perusahaan
secara keseluruhan.
1) Keuangan
Bertugas:
a) Menyusun laporan keuangan.
b) Membantu direksi dalam mengelola dan mengendalikan
keuangan.
2) Keagenan
Bertugas:
Meminta barang dan hasil produksi kepada gudang pengiriman.
48
3) Pembukuan
Bertugas:
a) Bertanggung jawab dalam pembukuan selama satu tahun.
b) Mengadakan tutup pembukuan.
c) Bertanggung jawab atas laporan yang dibuatnya.
e. Bagian Logistik
Bertugas membuat perencanaan bahan-bahan yang akan dibeli dengan
persetujuan bagian pembelian dan pengelolaan bahan baku yang ada di
gudang.
1) Gudang bahan baku
Bertugas:
a. Menampung bahan baku.
b. Menyimpan di samping proses seleksi dilakukan.
2) Seleksi
Bertugas:
Memisahkan bahan baku dari benda-benda lain yang tidak
berfungsi.
3) Cuci dan Oven
Bertugas:
a. Membersihkan bahan baku dengan proses mencuci.
b. Mengeringkan bahan baku proses mesin.
49
4) Racikan
Bertugas:
a. Meramu bahan baku yang ada menjdi ramuan jamu sesuai
dengan formula perusahaan.
b. Mengirim ke gudang racikan yang siap digiling.
f. Bagian Laboratorium
Bertugas:
1) Meningkatkan produk yang dihasilkan.
2) Mencari sistem pengembangan produk.
3) Mengadakan penelitian yang intensif.
g. Bagian Produksi
Bertugas memproduksi jamu, baik secara kuantitas maupun kualitas.
1) Giling
Bertugas:
Menggiling bahan jamu yang sudah diracik sesuai dengan formula
perusahaan.
2) Ayak
Bertugas:
Mengayak bahan-bahan yang sudah digiling supaya mendapatkan
hasil yang memuaskan.
3) Aduk
Bertugas:
Mengaduk jamu yang sudah diayak, supaya lebih homogen.
50
4) Gudang jamu dan setengah jadi
Bertugas:
Menyimpan jamu sementara waktu sampai proses pembungkusan.
5) Etiket dan bungkus
Bertugas:
Membungkus jamu sekaligus mengemas dalam bentuk kemasan
kardus besar dan kemasan kecil.
h. Bagian Marketing
Bertugas:
1) Memasarkan dan menyalurkan barang hasil produksi.
2) Memberi saran dan pertimbangan pada Direktur utama dalam
penentuan pasar yang akan dilaksanan.
3) Mengkoordinasi dan mengurusi seluruh kegiatan yang berada di
bawah wewenangnya.
Pada bagian marketing terdapat sales promotion yang bertugas untuk:
1) Merencanakan kegiatan.
2) Menentukan obyek dan media untuk melaksanakan program
promosi penjualan.
3) Menentukan tujuan dan kegiatan.
4) Mengadakan perbandingan antara hasil kegiatan dengan
direncanakan untuk mendapat perbaikan.
5) Menyusun rencana anggaran untuk biaya promosi penjualan.
51
i. Bagian Umum
Bertugas:
1) Membantu direksi dalam mengolah dan menampung masalah yang
berhubungan dengan masalah perusahaan.
2) Membantu direksi dalam tugas komunikasi.
3) Menyusun usulan rencana anggaran untuk biaya produksi.
5. Personalia
Sampai saat ini perkembangan perusahaan dapat dilihat secara
nyata. Hal ini tidak lepas dari manusia sebagai Sumber Daya Manusia
yang penting bagi perusahaan.
a. Jumlah Tenaga Kerja
Di bawah ini perincian mengenai tenaga kerja PT AIR
MANCUR sesuai dengan jabatannya masing-masing.
No Jabatan Banyaknya Jumlah
1. Komisaris 3 orang 3
2. Direktur 1 orang 1
3. Staf Ahli
- Bidang Personalia
- Bidang Administrasi
- Bidang Produksi
1 orang
4 orang
1 orang
6
4. Departemen Pemasaran
- Manajer
- Sales Promotion
- Bagian Penjualan
1 orang
35 orang
156 orang
192
5. Departemen Produksi
- Manajer
- Logistik
- Laboratorium
- Pabrik
1 orang
22 orang
14 orang
341 orang
378
6. Departemen Adminstrasi
- Manajer 1 orang
52
- Bidang Keuangan
- Bidang Pembukuan
- Bagian Keagenan
3 orang
10 orang
75 orang
89
7. Departemen Umum
- Manajer
- Bidang Keuangan
- Personalia
1 orang
16 orang
37 orang
54
Jumlah
Tabel IV.1
Jumlah Tenaga Kerja PT. Air Mancur Palur
Kabupaten Karanganyar
b. Jam Kerja Karyawan
Dalam melaksanakan tugas operasional perusahaan
menggunakan sistem kerja sendiri yang sudah menjadi Kesepakatan
Kerja Bersama (KKB). Perusahaan merasa sudah cukup dengan
menggunakan sistem kerja perusahaan. Karena dalam memenuhi
permintaan pasar terhadap jamu, tidak hanya dilayani oleh unit Kerja
Palur saja tetapi juga dilayani oleh cabang-cabang produksi yang ada
dibawah naungan PT Air Mancur. Dengan demikian dalam
melaksanakan kegiatan operasional menggunakan sistem kerja
perusahaan yaitu sistem kerja yang sesuai dengan KKB perusahaan
yang mengatur mengenai hari dan jam karyawan yaitu:
1) Dalam satu hari bekerja selama 8 jam penuh
2) Bekerja dimulai pukul 07.30 – 16.00 WIB
3) Hari kerja dimulai dari Senin sampai dengan hari Jum’at
4) Istirahat kerja mulai pukul 11.00 – 11.30 WIB
53
Ketentuan ini berlaku bagi semua karyawan baik dari tingkat
yang atas sampai dengan tingkat bawah kecuali satpam harus selalu
ada di tempat dengan bergantian. Sistem pembagian kerja ini efektif
selama 8 jam kerja, sedangkan waktu istirahat hanya ½ jam. Memang
istirahat yang hanya setengah jam ini secara fisik melelahkan namun
demikian ternyata perusahaan juga memberikan perhatiannya melalui
pemberian waktu istirahat selama 2 hari yaitu pada hari Sabtu dan
Minggu dan diharapkan dengan diberikannya waktu istirahat ini dapat
memulihkan stamina tubuh karyawan untuk bisa kembali bekerja
selama 5 hari kerja.
c. Pengupahan bagi karyawan
Sistem pemberian upah pada perusahaan jamu PT. Air Mancur
diterimakan setiap akhir bulan, sedang status karyawan dibagi menjadi
dual golongan:
1) Karyawan Kontrak yaitu karyawan yang penerimaannya diadakan
perjanjian kontrak antara perusahaan dan karyawan tersebut, dan
kontrak ini bisa diperpanjang 1 kali lagi maksimal dua tahun.
2) Karyawan Tetap yaitu Karyawan yang penerimaan pertama kalinya
diberlakukan masa percobaan selama 3 bulan, setelah dinilai
mampu baru diangkat menjadi karyawan tetap atau dijadikan
karyawan kontak terlebih dahulu.
Pemberian upah bagi karyawan harian tetap dilaksanakan
sesuai dengan status karyawan yang telah ditetapkan oleh perusahaan
54
ada yang lewat Bank BCA dan secara langsung diterimakan. Besar
kecilnya upah disesuaikan dengan prestasi kerja dan kemampuan
perusahaan serta peraturan-peraturan perusahaan.
Kerja lembur yang berlaku dalam perusahaan ini berlaku
maksimal 2 jam perhari dan upah kerja lembur dibayar pada hari
Jum’at. Pekerjaan lembur ini biasanya dikerjakan pada bagian giling.
Kerja lembur ini dilakukan kalau memang perusahaan tidak dapat
memenuhi kapasitas produksi untuk permintaan pasar.
d. Kesejahteraan Karyawan
Kesejahteraan karyawan menyangkut harkat karyawan untuk
saling menghormati antara satu dengan yang lain; serta kenyamanan
karyawan dalam bekerja. Fasilitas-fasilitas yang diberikan untuk
kesejahteraan karyawan adalah:
1) KB (Keluarga Berencana)
Karyawan yang mengikuti program KB mendapat kesejahteraan
berupa uang.
a) KB suntik mendapatkan Rp. 20.000,00
b) KB inflan mendapatkan Rp. 20.000,00
c) IUD mendapatkan Rp. 25.000,00
d) MOW mendapatkan Rp. 100.000,00
2) Melahirkan
a) Mendapatkan Rp. 100.000,00
b) Minyak kayu putih 100 cc
55
c) Jamu bersalin super 1 kaleng
3) Menikah mendapat Rp. 75.000,00
Insentif ini diberikan apabila karyawan menikah pertama kali atau
pernikahan pertama, dan tidak diberikan apabila karyawan
menikah lagi dikarenakan cerai.
4) Menikahkan anak mendapatkan Rp. 50.000,00
Insentif ini diberikan apabila karyawan menikahkan anaknya
sampai dengan anak ketiga, tidak berlaku apabila pernikahan
anaknya nikah kedua.
5) Mengkhitankan atau membaptiskan anak mendapatkan Rp,
40.000,00.
Insentif ini diberikan apabila karyawan mengkhitankan anaknya/
baptis bagi anaknya sampai dengan anak ketiga.
6) Meninggal dunia mendapatkan Rp. 100.000,00
Diberikan apabila keluarga karyawan atau karyawan itu sendiri
meninggal dunia. Dan bagi karyawan mendapatkan uang pesangon
sesuai ketentuan yang berlaku di perusahaan selain bantuan ini.
7) Poliklinik dengan dua dokter.
Selain JPK (Jaminan Pemeliharaan Kesehatan) yang diterapkan di
Perusahaan, karyawan juga bisa periksa/berobat di perusahaan
kepada dokter perusahaan yang jadwal kedatangannya sudah
ditentukan oleh perusahaan.
8) Tunjangan natura:
a) Beras 20 kg
56
b) Minyak tanah 10 liter
c) Sabun cuci 1 kg
9) Transportasi setiap karyawan mendapat Rp. 33.000,00
Uang transport diberikan bersama-sama dengan penerimaan gaji
akhir bulan, dan besarnya tetap tidak terpengaruh dengan kehadiran
karyawan.
10) Makan satu kali
Karyawan diberi makan oleh perusahaan satu kali yaitu pada jam
istirahat yang telah ditentukan sesuai dengan kemampuan
perusahaan.
11) Asuransi kecelakaan 24 jam dari Bank Bumi Putera
Asuransi ini adalah asuransi bagi karyawan, dengan keuntungan
karyawan diasuransikan selama 24 jam diluar jam kerja.
6. Produksi
Jenis produksi jamu memang sangat banyak ragamnya termasuk
PT. Air Mancur telah memproduksi 120 macam jamu rata-rata kapasitas
produksi sebanyak 400.000 pak/hari. Dari keseluruhan jenis jamu tersebut
masing-masing terbagi 5 jenis jamu yang di olah dalam bentuk serbuk,
tablet, kapsul dan cair.
Kelima jenis jamu tersebut antara lain meliputi:
1) Jamu-jamu untuk memelihara kesehatan
2) Jamu-jamu penyembuh sakit
3) Jamu-jamu obat luar
4) Tablet jamu dan kapsul jamu
57
5) Jamu-jamu cair
7. Produk Yang Dihasilkan
Secara garis besar, produk yang dihasilkan dikelompokkan
menjadi lima jenis, sebagai berikut:
a. Jamu-jamu untuk memelihara kesehatan
Untuk kelompok ini terbagi yaitu:
1) Untuk pria contohnya: jamu kuat manjur, sehat lelaki, jamu
kolesom dan sebagainya.
2) Untuk wanita contohnya: jamu sehat perempuan super, sari asih
super, dan sebagainya.
3) Untuk wanita haid, hamil, dan bersalin, contohnya: jamu cocok
bulan, terlambat bulan, bersalin dan sebagainya.
b. Jamu-jamu pengobatan, terbagi menjadi:
1) Untuk pria, contohnya: jamu klingsir super.
2) Untuk wanita, contohnya: jamu delima putih.
3) Untuk pria dan wanita, contohnya: jamu rematik.
c. Jamu-jamu obat luar, yaitu:
Contohnya: param kocok, bedak nirmala sari.
d. Jamu dalam bentuk Tablet jamu, pil dan kapsul
1) Kapsul ekstrak, contohnya: kuat manjur, galian singset, patmosari
dan mustika sari.
2) Tablet ekstrak, contohnya: terlambat bulan, kuat manjur, galian
singset, pegel linu.
58
3) Pil ekstrak, contohnya: sehat pria, galian putri langsing, encok,
galian param.
e. Lain-lain
Contohnya: madurasa, bubuk serbat.
8. Pemasaran
a. Dareah Pemasaran
Daerah pemasaran perusahaan Air Mancur bukan hanya didalam
negeri, tetapi juga telah menjangkau ke luar negeri yang meliputi
Singapura, Taiwan dan Malaysia, diutamakan yang berbentuk kapsul
dan tablet. Untuk pemasaran dalam negeri daerahnya meliputi wilayah
Indonesia, antara lain:
1) Daerah Jawa Barat dan DKI Jakarta
2) Daerah Jawa Tengah
3) Daerah Istimewa Yogyakarta
4) Daerah Jawa Timur
Daerah Luar Jawa, meliputi: Sumatra, Sulawesi, Kalimantan, Maluku
dan Irian Jaya.
b. Saluran Distribusi
Arus barang dari pensuplai atau gudang produk agar sampai
kepada konsumen melalui perantara dagang yaitu agen dan depo. Agen
bisa mempunyai sub agen bisa jadi tidak (tergantung kebijakan agen).
Agen atau sub agen mempunyai sales yang bertugas mendistribusikan
barang pada out lets dan konsumen. Sedangkan untuk depo sistemnya
sama dengan agen hanya perbedaannya depo digunakan untuk produk59
produk baru saja. Masing-masing depo dan agen ditempatkan seorang
pengawasan dari perusahaan. Hal ini untuk menghindari adanya halhal
yang tidak diinginkan terjadi. Setiap hari mereka harus melaporkan
barang-barang yang sudah terjual dan toko-toko mana yang sudah
didatangi dalam mendistribusikan barang.
Biasanya barang didistribusikan melalui dua cara, yaitu:
1) Distribusi pendek
Yaitu langsung dari perusahaan kepada konsumen melalui mobil
propaganda. Misalnya pada waktu pada pasar murah.
2) Distribusi panjang
Dari perusahaan ke agen tunggal, sub agen, kemudian sales dan
konsumen. Dan bila digambarkan sebagai berikut:
Gambar IV.2
Skema Saluran Distribusi
Produk
Agen
Sub Agen
Salesman
Out Lets
Konsumen
Depo
Salesmen
Out Lets
Konsumen
60
c. Promosi
Agar masyarakat dapat mengenal produk jamu, maka perusahaan
mempunyai sebuah program yang mengarah ke tujuan tersebut yaitu
dengan menggunakan program promosi, yang nantinya dapat dilakukan
dengan menggunakan cara-cara sebagai berikut:
1) Periklanan
a) Media Massa
Perusahaan memasang iklan pada media massa mengenai produk
yang bersangkutan.
b) Papan reklame
Pemasangan papan reklame atau layar dari perusahaan mengenai
produk yang bersangkutan pada tempat yang strategis.
c) Radio
d) Televisi
2) Personal Selling
Kegiatan yang dilakukan dalam personal selling yaitu dengan
menggunakan sales-sales yang berlangsung menjual ke toko-toko
kecil/pengecer (sub riding). Selain itu perusahaan juga menggunakan
sales Blitz yang langsung bertatap muka dengan konsumen.
3) Publikasi
Berkaitan dengan kegiatan perusahaan atau kegiatan yang lainnya
dimana perusahaan ikut andil sebagai sponsor pendukung dalam iveniven
tertentu, sehingga akan mengundang minat pihak pers untuk
mempublikasikan perusahaan.
61
4) Promosi penjualan
Dalam kegiatan promosi penjualan perusahaan melakukan dengan cara
memberikan sampel, memberikan potongan pembelian, memberikan
kupon, dan memberikan bonus.
B. Deskripsi Responden Penelitian
1. Karakteristik Responden
Populasi yang diteliti adalah karyawan PT. Air Mancur. Jumlah
sampel yang diambil 88 responden. Berdasarkan informasi yang diperoleh
dari kuesioner yang diberikan, responden digolongkan kedalam beberapa
kelompok yang berdasarkan atas usia, jenis kelamin, pendidikan,
pekerjaan dan pendapatan.
a. Usia
Usia menunjukkan umur mereka pada saat penelitian
dilakukan. Karakteristik usia responden dapat dilihat pada tabel IV.2
berikut ini :
Tabel IV.2
KARAKTERISTIK RESPONDEN BERDASARKAN USIA
No Keterangan Jumlah Persentase (%)
1 < 30 tahun 23 26,1
2 30 – 35 tahun 36 40,9
3 36 – 40 tahun 21 23,9
4 41 – 45 tahun 3 3,4
5 ≥ 45 tahun 5 5,7
Jumlah 88 100
Keterangan : Data primer yang diolah
62
Pada tabel IV.2 di atas menunjukkan bahwa jumlah responden
paling banyak adalah berusia antara 30-35 tahun yaitu 40,9%, diikuti
responden dengan usia kurang dari 30 tahun (26,1%), kemudian usia
antara 36-40 tahun 23,9%, responden yang berusia lebih dari 40 tahun
sebanyak 5,7% dan responden yang paling sedikit adalah responden
yang berusia antara 41-45 tahun sebesar 3,4%.
b. Jenis Kelamin
Karakteristik responden berdasarkan jenis kelamin dapat
dilihat pada tabel IV.3 dibawah ini.
Tabel IV.3
KARAKTERISTIK RESPONDEN BERDASARKAN JENIS
KELAMIN
No Keterangan Jumlah Persentase (%)
1 Perempuan 51 58
2 Laki-Laki 37 42
Jumlah 88 100
Keterangan : Data primer yang diolah
Pada tabel IV.3 di atas menunjukkan bahwa jumlah responden paling
banyak adalah perempuan sebanyak 51 responden (58%) dan
responden perempuan sebanyak 37 orang atau 42%.
c. Pendidikan
Karakteristik responden berdasarkan pendidikan dapat dilihat
pada tabel IV.4 dibawah ini.
63
Tabel IV.4
KARAKTERISTIK RESPONDEN BERDASARKAN
PENDIDIKAN
No Keterangan Jumlah Persentase (%)
1 SD 19 21,6
2 SLTP 11 12,5
3 SLTA 32 36,4
4 Akademi 6 6,8
5 PT 20 22,7
Jumlah 88 100
Keterangan : Data primer yang diolah
Pada tabel IV.4 di atas menunjukkan bahwa jumlah responden paling
banyak adalah yang berpendidikan SLTA sebanyak 32 responden
(36,4%), diikuti responden berpendidikan PT sebanyak 20 responden
(22,7%), responden dengan pendidikan SD sebanyak 19 responden
(21,6%), responden dengan pendidikan SLTP sebanyak 11 responden
(12,5%) dan paling sedikit adalah responden dengan pendidikan
Akademi sebanyak 6 responden (6,8%).
d. Jumlah Keluarga
Karakteristik responden berdasarkan jumlah keluarga dapat
dilihat pada tabel IV.5 dibawah ini.
Tabel IV.5
KARAKTERISTIK RESPONDEN BERDASARKAN JUMLAH
KELUARGA
No Keterangan Jumlah Persentase (%)
1 2 orang 17 19,3
2 3 orang 27 30,7
3 4 orang 31 35,2
4 5 orang 13 14,8
Jumlah 88 100
Keterangan : Data primer yang diolah
64
Pada tabel IV.5 di atas menunjukkan bahwa jumlah responden
paling banyak adalah yang mempunyai keluarga 4 orang sebanyak 31
responden (40%), diikuti responden yang memiliki keluarga 3 orang
sebanyak 27 responden (34%), kemudian responden yang memiliki
keluarga 2 orang sebanyak 17 responden (19,3%) dan yang paling
sedikit adalah responden yang memiliki keluarga 5 orang sebanyak 13
responden atau 14,8%.
2. Deskripsi Statistik
Deskripsi data digunakan untuk memberikan gambaran mengenai
data yang diperoleh dari hasil penelitian. Deskripsi data ini melputi mean,
standar deviasi, minimum dan nilai maksimumnya. Hasil perhitungan
deskripsi data dengan komputer program SPSS 10.0 dapat dilihat pada
tabel IV.6 dibawah ini.
Tabel IV.6
DESKRIPSI STATISTIK
Variabel Minimum Maksimum Mean Std deviasi
Tunjangan
kesejahteraan
Kinerja karyawan
22
42
52
58
43,76
50,76
3,90
3,38
Keterangan : Data primer yang diolah
Pada tabel IV.6 di atas diperoleh nilai rata-rata variabel tunjangan
kesejahteraan adalah sebesar 43,76 dengan standar deviasi sebesar 3,90,
sedangkan nilai minimum sebesar 22 dan nilai maksimum sebesar 52 dan
nilai rata-rata variabel kinerja karyawan adalah sebesar 50,76 dengan
standar deviasi sebesar 3,38, sedangkan nilai minimum sebesar 42 dan nilai
maksimum sebesar 58.
65
C. Analisa Data
1. Pengujian Instrumen Penelitian
Sebelum dilakukan analisis terhadap data primer maka perlu
dilakukan uji validitas dan reliabilitas terhadap kuesiner yang dipakai
dalam penelitian ini.
a. Uji Validitas
Uji validitas digunakan untuk mengetahui sejauh mana suatu
alat ukur dapat mengungkapkan ketepatan gejala yang dapat diukur.
Validitas alat ukur dicari dengan menguji korelasi antar skor butir
dengan skor faktor yang diperoleh dari jawaban terhadap kuesioner.
Korelasi antara skor pertanyaan dengan skor totalnya signifikan. Hal
ini ditunjukkan oleh ukuran statistik tertentu yaitu angka korelasi.
Angka korelasi yang diperoleh harus lebih besar dari critical value
yang diisyaratkan. Tehnik pengukuran yang digunakan adalah tehnik
Product Moment dari Pearson.
Tabel IV.7
RANGKUMAN HASIL UJI VALIDITAS TUNJANGAN
KESEJAHTERAAN
Variabel Butir r-hitung r-tabel Keterangan
Tunjangan
kesejahteraan
1
2
3
4
5
6
7
8
9
10
11
12
13
0.4579
0.5911
0.2842
0.5455
0.2351
0.5837
0.5077
0.4815
0.2950
0.4723
0.3386
0.3123
0.2513
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Keterangan : Data primer yang diolah
66
Berdasarkan hasil pengolahan data diatas, maka dapat
dikemukakan bahwa hasil uji r-hitung pada setiap item pertanyaan
lebih besar daripada r-tabel. Dengan demikian, semua item pertanyaan
yang digunakan dalam kuesioner tunjangan kesejahteraan adalah valid.
Tabel IV.8
RANGKUMAN HASIL UJI VALIDITAS KINERJA KARYAWAN
Variabel Butir r-hitung r-tabel Keterangan
Kinerja
karyawan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0.2545
0.2667
0.3277
0.4594
0.2436
0.2482
0.2784
0.3774
0.2918
0.3212
0.2412
0.3572
0.2994
0.3092
0.2727
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
0,195
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Valid
Keterangan : Data primer yang diolah
Berdasarkan hasil pengolahan data diatas, maka dapat
dikemukakan bahwa hasil uji r-hitung pada setiap item pertanyaan
lebih besar daripada r-tabel. Dengan demikian, semua item pertanyaan
yang digunakan dalam kinerja karyawan adalah valid.
b. Uji Reliabilitas
Uji reliabilitas digunakan untuk mengetahui sejauh mana suatu
alat ukur dapat digunakan, dipercaya, dan diandalkan untuk meneliti
suatu obyek. Dalam penelitian ini, dilakukan uji reliabilitas terhadap
67
kuesioner dengan mengetahui sejauh mana kuesioner tersebut dapat
digunakan, dipercaya, dan diandalkan.
Tehnik yang digunakan untuk uji reliabilitas adalah Alpha
Cronbach. Kuesioner dapat dikatakan reliabel jika mempunyai
koefisien korelasi lebih dari 0,6. Hasil yang diperoleh dari uji
reliabilitas terhadap kuesioner pada masing-masing variabel adalah
sebagai berikut :
Tabel IV.9
RANGKUMAN HASIL UJI RELIABILITAS
Variabel Koefisien
Alpha
Critical
Value
Keterangan
Tunjangan
kesejahteraan
0,7843 0,6 Reliabel
Kinerja karyawan 0,6981 0,6 Reliabel
Keterangan : Data primer yang diolah
Berdasarkan perhitungkan yang dilakukan dengan
menggunakan program SPSS 10.0, hasil perhitungan terhadap variabel
tunjangan kesejahteraan sebesar 0,7843 dan kinerja karyawan sebesar
0,6981. Dari hasil tersebut terlihat bahwa reliabilitas masing-masing
variabel menunjukkan angka yang lebih besar dari 0,6 maka kuesioner
dinyatakan reliabel.
2. Pengujian Hipotesis
Analisis data pada pengujian hipotesis dimaksudkan untuk
mengetahui ada tidaknya pengaruh tunjangan kesejahteraan terhadap
kinerja karyawan. Analisis ini dilakukan dengan menggunakan analisis
regresi linear sederhana. Hasil analisis dapat dilihat sebagai berikut.
68
Tabel IV.10
RANGKUMAN HASIL REGRESI LINIER BERGANDA
Variabel Koef.
regresi
Std.
Error
t-hitung Sign
Konstanta
Tunjangan
kesejahteraan
28,584
0,507
3,326
0,076
8,595
6,695
0,000
0,000
R 0,585
R-Squared 0,343
Adj. R-Squared 0,335
F-Hitung 44,821
Probabilitas F 0,000
Keterangan : Data primer yang diolah
a. Analisis Regresi Linier Berganda
Hasil pengolahan data untuk regresi linier berganda dengan
menggunakan program SPSS 10.0 dapat dilihat pada tabel IV.10 di
atas. Berdasarkan tabel tersebut dapat disusun persamaan regresi linier
berganda sebagai berikut :
Y = 28,584 + 0,507X
Berdasarkan persamaan regresi linier berganda di atas dapat
diuraikan sebagai berikut:
1) Nilai konstanta bernilai positif, hal ini menunjukkan bahwa apabila
variabel tunjangan kesejahteraan konstan, maka kinerja karyawan
bernilai positif.
2) Koefisien regresi variabel 0,507 (b1) bernilai positif, hal ini
menunjukkan bahwa tunjangan kesejahteraan mempunyai pengaruh
positif terhadap kinerja karyawan. Artinya setiap ada peningkatan
tunjangan kesejahteraan, maka mengakibatkan kinerja karyawan
naik.
69
b. Uji t
Uji t digunakan untuk mengetahui pengaruh masing-masing
variabel independen secara individu. Pengujian regresi digunakan
pengujian dua arah (two tailed test) dengan menggunakan α = 5% yang
berarti bahwa tingkat keyakinan adalah sebesar 95%. Perhitungan
besarnya t-tabel menggunakan rumus :
t-tabel = t α/2, n-1
= 0,05/2; 88-1
= 0,025; 87
= 1,960
Langkah-langkah prosedur pengujian :
a. Pengujian terhadap variabel tunjangan kesejahteraan
1) Formulasi hipotesis nol dan hipotesis alternatif
Ho: b1 = 0 (tunjangan kesejahteraan tidak memiliki
pengaruh yang signifikan terhadap kinerja
karyawan)
Ha: b1 ≠ 0 (tunjangan kesejahteraan memiliki pengaruh
yang signifikan terhadap kinerja karyawan)
2) Taraf signifikansi yang digunakan adalah 0,05
3) Nilai kritis = 1,960
Ho diterima apabila = -1,960 ≤ t-hitung ≤ 1,960
Daerah terima
Daerah tolak Daerah tolak
-1,960 1,960 6,695
70
Ho ditolak apabila = t-hitung > 1,960 atau t-hitung < -1,960
4) Hasil uji statistik
Berdasarkan hasil pengolahan data diperoleh nilai thitung
sebesar 6,695.
5) Kesimpulan
Berdasarkan hasil pengolahan data diperoleh nilai thitung
sebesar 6,695. Oleh karena hasil uji t statistik (t-hitung)
lebih besar dari nilai t tabel (6,695 > 1,960) atau Pobabilitas t
lebih kecil dari 0,05 (0,000 < 0,05) maka Ho ditolak pada taraf
signifikansi 0,05. Artinya bahwa variabel tunjangan
kesejahteraan mempunyai pengaruh yang signifikan terhadap
kinerja karyawan.
c. Uji R2
Tingkat ketepatan regresi dinyatakan dalam koefisien
determinasi yang besarnya antara nol dan 1 (satu). Jika koefisien
determinasi mendekati satu maka variabel independen berpengaruh
terhadap variabel dependen dengan sempurna atau terdapat suatu
kecocokan yang sempurna (variabel bebas yang dipakai dapat
menerangkan dengan baik variabel tidak bebasnya). Namun jika
koefisien determinasi adalah 0 (nol) bararti independen tidak
berpengaruh terhadap variabel dependen.
Hasil perhitungan untuk nilai R2 dengan bantuan program
SPSS 10.0, dalam analisis regresi berganda diperoleh angka koefisien
determinasi atau R2 sebesar 0,343. Hal ini berarti 34,3% variasi
71
perubahan kinerja karyawan dijelaskan oleh variasi perubahan faktorfaktor
tunjangan kesejahteraan. Sementara sisanya sebesar 65,7%
diterangkan oleh faktor lain yang tidak ikut terobservasi.
3. Uji Asumsi Klasik
a. Uji Normalitas
Uji normalitas menggunakan metode Kolmogorov-Smirnov.
Cara menguji normalitas yaitu dengan membandingkan probabilitas
(p) yang diperoleh dengan taraf signifikansi (α) 0,05. Apabila nilai p >
α maka distribusi data normal atau sebaliknya (Singgih, 2000: 179).
Hasil uji normalitas terhadap nilai residual model persamaan dengan
program SPSS 10.0 diperoleh nilai probabilitas di atas 0,05, hal ini
menunjukkan bahwa data berdistribusi secara normal ( p > 0,05).
Secara rinci hasil uji normalitas dapat dilihat pada tabel 4.16 di bawah
ini.
Tabel IV.11
HASIL UJI NORMALITAS
Variabel Sign Kesimpulan
Residual 0,995 Normal
Sumber : Hasil pengolahan data
b. Uji Heterokedastisitas
Heteroskedastisitas bertujuan menguji apakah dalam model
regresi terjadi ketidaksamaan variance dari residual satu pengamatan
ke pengamatan yang lain tetap, maka disebut homokedastisitas dan jika
72
berbeda disebut heteroskedastisitas. Model regresi yang baik adalah
homokedastisitas atau tidak terjadi heteroskedastisitas. Untuk menguji
ada tidaknya heteroskedastisitas di dalam penelitian ini menggunakan
uji Glejser yaitu dengan cara meregresikan nilai absolute residual
terhadap variabel independen. Ada tidaknya heteroskedastisitas
diketahui dengan melihat signifikansinya terhadap derajat kepercayaan
5%. Jika nilai signifikansi > 0,05 maka tidak terjadi
heteroskedastisitas. Hasil pengujian heteroskedastisitas dapat dilihat
pada tabel 4.18 dibawah ini.
Tabel IV.12
HASIL UJI HETEROSKEDASTISITAS
Variabel t hitung Prob Kesimpulan
Tunjangan
kesejahteraan
1,023 0,309 Bebas Heteroskedastisitas
Sumber : Hasil pengolahan data
Pada tabel IV.12 diketahui bahwa probabilitas masing-masing
variabel lebih besar dari 0,05, hal ini menunjukkan bahwa variabel
tersebut bebas dari masalah heteroskedastisitas.
D. Pembahasan
Kesejahteraan karyawan itu selalu menjadi keinginan setiap orang
karena dengan hidup sejahtera orang akan dapat menikmati hidupnya.
Demikian juga dengan karyawan disuatu Perusahaan, jika kesejahteraan
karyawan itu terjamin maka akan dapat meningkatakan prestasi kerja
73
karyawan. Hasil analisis menunjukkan bahwa tunjangan kesejahteraan
berpengaruh positif dan signifikan terhadap kinerja karyawan, hal ini
ditunjukkan oleh nilai signifikansi sebesar 0,000 ( p < 0,05). Pengaruh positif
menunjukkan bahwa semakin tinggi tunjangan kesejahteraan yang diberikan
perusahaan dapat meningkatkan kinerja karyawan konsumen. Usaha-usaha
untuk memenuhi kebutuhan karyawan atau pegawai merupakan suatu usaha
untuk meningkatkan kesejahteraan karyawan atau pegawai adalah dengan
pertama, pemberian gaji atau upah yang adil, dalam pemberian gaji ini
disesuaikan dengan tugas yang telah dikerjakan dengan hasil yang memuaskan
dengan waktu tertentu. Sedangkan untuk tercapainya keadilan tersebut, maka
ada beberapa factor penting yang perlu diperhatikan dalam penetapan tingkat
upah seorang pegawai atau karyawan adalah pendidikan, pengalaman,
tanggungan keluarga, kemampuan perusahaan, daan kondisi pekerja. Kedua,
asuransi. Dalam lingkungan kerja dimanapun pasti menginginkan
keselamatan, keamanan dan kesehatan kerja. Karena bagaimanapun juga
manusia menginginkan ketiga hal itu dan sanggup mengorbankan apa saja asal
dapat sehat, aman dan selamat. Sedangkan program asuransi ini bisa
berbentuk Asuransi Jiwa, Asuransi Kesehatan dan Asuransi Kecelakaan.
Disini perusahaan bisa melakukan kerja sama dengan Perusahaan Asuransi
untuk menanggung asuransi karyawannya. Ketiga, lingkungan kerja yang
aman dan sehat sangat diperlukan oleh semua orang karena ditempat kerja
yang demikian seseorang dapat bekerja dengan tenang sehingga dapat
memperoleh seperti yang diharapkan oleh perusahaan atau organisasi tersebut.
Keempat, melalui promosi atau kenaikan jenjang. Pihak perusahaan atau
74
suatu organisasi biasanya menyenangi dasar promosi adalah kecakapan kerja,
karena kecakapan kerja atau kinerja yang baik adalah merupakan dasar
kemajuan. Sedangkan pihak karyawan menghendaki unsure seniorisasi lebih
ditekankan dalam promosi, karena dengan makin lama masa kerja, maka
makin berpengalaman seseorang, sehingga kecakapan kerja mereka makin
baik. Tetapi pada umumnya didalam menentukan dasar untuk promosi sering
digunakan keduanya yaitu dasar kecakapan kerja dan senioritas jadi apabila
ada karyawan atau pegawai yang mempunyai kecakapan yang sama, maka
karyawan atau pegawai yang lebih seniorlah yang akan dipromosikan. Sebagai
salah satu pengembangan, promosi sangat diharapkan oleh setiap karyawan
atau pegawai dimanapun berada. Oleh karena itu dia akan mendapatkan hakhak
yang lebih baik daripada yang diperoleh sebelum promosi baik material
maupun non material. Hak-hak yang bersifat material misalnya kenaikan
pendapatan, perbaikan fasilitas sedangkan hak yang bersifat non material
misalnya status social, dan rasa bangga.
Kelima, Program Rekreasi. Dengan adanya kesempatan rekreasi itu
diharapkan para pegawai atau karyawan selalu bergairah atau mempunyai
semangat dalam bekerja. Salah satu program rekreasi adalah mengadakan tour
ke tempat-tempat wisata bersama keluarga. Keenam, Pemberian Fasilitas.
Yang dimaksud dengan fasilitas adalah segala sesuatu yang digunakan,
dipakai, ditempati dan dinikmati oleh pegawai baik dalam hubungan langsung
dengan pekerjaan seperti termasuk didalamnya semua alat kerja di perusahaan
dan secara tidak langsung untuk kelancaran pekerjaan seperti gedung, alat
komunikasi, ruangan kerja yang memadai dan lain sebagainya.
75
BAB V
PENUTUP
A. Simpulan
Berdasarkan hasil analisis data dan pembahasan pada bab sebelumnya,
hasil penelitian ini dapat disimpulkan sebagai berikut:
1. Hasil analisis regresi diperoleh koefisien regresi variabel tunjangan
kesejahteraan sebesar 0,507 bernilai positif, hal ini menunjukkan bahwa
tunjangan kesejahteraan mempunyai pengaruh positif terhadap kinerja
karyawan. Artinya tunjangan kesejahteraan yang diberikan perusahaan
semakin baik, akan meningkatkan kinerja karyawan.
2. Hasil uji t menunjukkan bahwa meliputi variabel tunjangan kesejahteraan
berpengaruh signifikan terhadap kinerja karyawan. Hal ini ditunjukkan
oleh nilai signifikansi sebesar 0,000 < 0,05 Berarti hipotesis yang
menyatakan “Diduga kesejahteraan karyawan mempunyai pengaruh yang
signifikan terhadap kinerja karyawan”, terbukti.
3. Hasil perhitungan untuk nilai R2 dengan bantuan program SPSS 10.0,
dalam analisis regresi berganda diperoleh angka koefisien determinasi atau
R2 sebesar 0,343. Hal ini berarti 34,3% variasi perubahan kinerja
karyawan dijelaskan oleh variasi perubahan tunjangan kesejahteraan.
Sementara sisanya sebesar 65,7% diterangkan oleh faktor lain yang tidak
ikut terobservasi.
75
76
B. Keterbatasan Penelitian
Penelitian yang dilaksanakan ini mempunyai keterbatasan, oleh karena itu
keterbatasan ini perlu lebih diperhatikan untuk peneliti-peneliti berikutnya.
Keterbatasan tersebut adalah sebagai berikut :
1. Hasil penelitian ini tidak dapat digeneralisasikan karena penelitian ini
hanya dibatasi pada karyawan PT. Air Mancur. Hasil penelitian ini
kemungkinan akan berbeda jika dilakukan pada instansi lain.
2. Keterbatasan yang melekat pada metode survey yaitu peneliti tidak dapat
mengontrol jawaban responden, dimana responden bisa saja tidak jujur
dalam responnya dan kemungkinan respon bias dari responden.
C. Saran
Berdasarkan hasil penelitian ini dapat diberikan saran-saran sebagai berikut :
1. Variabel tunjangan kesejahteraan demokratik berpengaruh signifikan
terhadap kinerja karyawan, oleh karena itu pihak PT. Air Mancur
sebaiknya memperhatikan faktor tersebut untuk meningkatkan kinerja
karyawannya.
2. Penelitian selanjutnya sebaiknya dilakukan dengan memperluas responden
tidak hanya pada PT. Air Mancur saja, tetapi dapat memperluas sampel
pada instansi yang lain sehingga daya generalisasi hasil penelitian dapat
diperbesar.
3. Penelitian selanjutnya sebaiknya mengembangkan variabel-variabel yang
diteliti, sebab tidak menutup kemungkinan bahwa dengan penelitian yang
77
mencakup lebih banyak variabel akan dapat menghasilkan kesimpulan
yang lebih baik.
4. Penelitian lain disarakan untuk menggunakan metode wawancara atau
observasi langsung kepada responden, sehingga jawaban responden dapat
dikontrol sehingga tidak terjadi bias atau salah persepsi dari responden
terhadap instrumen penelitian yang digunakan.
78
DAFTAR PUSTAKA
Algifari, 1997. Statistik Induktif Untuk Ekonomi Dan Bisnis. Yogyakarta:UPP
AMP YKPN.
Heidjrachman dan Suad Husnan.2002. Manajemen Personalia. Yogyakarta:
BPFE
Djarwanto.1992. Pokok-Pokok Analisa Laporan Keuangan. Yogyakarta :
Erlangga.
Djarwanto, Ps 1994. Statistik Induktif. BPFE .Yogyakarta.
Malayu Hasibuan. 2001. Manajemen Sumber Daya Manusia. Jakarta; CV. Haji
Masagung.
Mangkunegara . 2001. Manajemen Sumber Daya Manusia Perusahaan. Bandung
; PT. Remaja.
Moekijat. 1984. Manajemen Kepegawaian. Bandung: Penerbit CV. Mandar Maju.
Moh As’ad. 1999. Seri Ilmu Sumber Daya Manusia-Psikologi Industri.
Yogyakarta : BPFE.
Poerdarminto W.J.S. 1984. Kamus Umum Bahasa Indonesia. Jakarta: PN Balai
Pustaka.
. 1972. Kamus Lengkap Inggris-Indonesia, Indonesia-Inggris.
Jakarta: Penerbit Hasta.
Suharsini Arikunto. Prosedur Penelitian suatu Pedekatan Praktik. Yogyakarta:
Penerbit Reneka Cipta.
79
IDENTITAS RESPONDEN
Nama Responden :
Umur :
Jenis kelamin :
Pendidikan :
Jumlah anggota keluarga :
Status di keluarga : a. Kepala Keluarga
b. Anak
c. Lain-lain, sebutkan
PETUNJUK PENGISIAN ANGKET PENELITIAN:
1. Isilah identitas anda
2. Untuk menjawab angket penelitian ini anda cukup member tanda (X) pada
salah satu jawaban (a, b, c, d) yang sesuai dengan keadaan anda.
I. VARABEL KESEJAHTERAAN KARYAWAN
1. Bagaimana menurut anda tentang kondisi kenyamanan kerja yang anda
rasakan di dalam kantor?
a. Sangat nyaman
b. Cukup nyaman
c. Kurang nyaman
d. Tidak nyaman
2. Bagaimana menurut anda tentang jaminan asuransi yang diberikan oleh
AIR MANCUR Palur (Seperti jaminan kecelakaan kerja)
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
3. Apakah pimpinan anda dalam menempatkan karyawan pada job-jobnya
sudah obyektif berdasarkan kinerja karyawan?
a. Ya, sangat obyektif
b. Ya, cukup obyektif
c. Ya, kurang obyektif
d. Tidak obyektif
80
4. Bagaimana tentang fasilitas kesehatan yang disediakan oleh AIR
MANCUR pada karyawan. Menurut pendapat anda?
a. Berfungsi, baik untuk diri sendiri maupun keluarga dan tidak dipungut
biaya.
b. Berfungsi, baik untuk diri sendiri maupun keluarga tetapi dipungut
biaya
c. Berfungsi tetapi hanya untuk diri sendiri
d. Tidak berfungsi, karena belum pernah menggunakan.
5. Jika ada karyawan yang sakit dan harus dirawa di Rumah Sakit,
bagaimana menurut anda tentang banyuan biaya yang diberikan?
a. Sangat memuaskan
b. Cukup memuaskan
c. Kurang memuasakan
d. Tidak memuaskan
6. Bagaimana menurut pendapat anda tentang program rekreasi bagi
karyawan yang diadakan oleh AIR MANCUR setiap setahun sekali?
a. Sangat setuju
b. Setuju
c. Kurang Setuju
d. Tidak setuju
7. Bagaimana pendapat anda tentang cuti yang diberikan kepada karyawan
dalam satu tahun masa kerja?
a. Sangat menyenangkan
b. Cukup menyenangkan
c. Kurang menyenangkan
d. Tidak berpendapat
8. Apakah gaji atau imbalan yang anda terima itu sudah sesuai dengan
golongan masa kerja anda ?
a. Sangat sesuai
b. Cukup sesuai
c. Kurang sesuai
d. Tidak sesuai
81
9. Bagaimana menurut anda tentang potongan atas gaji atau intensif yang
anda terima atas alas an tertentu misalnya saat anda tidak masuk?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
10. Bagaimana menurut anda dengan tunjangan hari raya yang diberikan AIR
MANCUR kepada karyawan?
a. Sangat memuaskan
b. Cukup memuaskan
c. Kurang memuaskan
d. Tidak memuaskan
11. Bagaimana tentang pelayanan bimbingan dan penyuluhan yang diberikan
kepada karyawan?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
12. Bagaimana menurut anda tentang penghasilan yang anda terima?
a. Dapat mencukupi kebutuhan sehari hari, menabung dan investasi.
b. Dapat mencukupi kebutuhan sehari-hari dan menabung
c. Hanya bisa mencukupi kebutuha sehari-hari
d. Kurang bisa mencukupi kebutuhan sehari-hari
13. Bagaiman seragam kerja yang diberikan kepada karyawan di AIR
MANCUR
a. Diberikan dan sangat memuaskan
b. Diberikan dan cukup memuaskan
c. Diberikan dan kurang memuaskan
d. Diberikan tetapi tidak memuaskan
82
II. VARIABEL KINERJA KARYAWAN
14. Bagaiman anda menyelesaikan pekerjaan di pabrik?
a. Bersedia melakukan pekerjaan sesuai dengan tugas-tugas yang
diberikan dan melakukan tugas-tugas tambahan
b. Melakukan pekerjaan rutin tanpa menunggu perintah
c. Melakukan pekerjaan dengan menunggu perintah
d. Melakukan pekerjaan rutin dengan menunggu perintah
15. Bagaiman sikap anda terhadap pekerjaan yang anda hadapi?
a. Sangat antusias atau bersemangat terhadap pekerjaan yang dihadapi
b. Menunjukkan perhatian yang normal dan umum dalam menghadapi
pekerjaan
c. Cukup perhatian terhadap pekerjaan yang dihadapi
d. Kurang perhatian terhadap pekerjaan yang dihadapi
16. Bagaimana dengan motivasi atau dorongan yang dilakukan pimpinan
tentang pelaksanaan pekerjaan agar supaya karyawan dapat bekerja
dengan baik?
a. Sangat baik
b. Baik
c. Cukup baik
d. Tidak baik
17. Bagaimana menurut anda tentang pekerjaan yang menjadi tanggung jawab
anda apa sudah sesuai dengan bidangnya?
a. Sangat sesuai
b. Sudah sesuai
c. Kurang sesuai
d. Tidak sesuai
18. Bagaimana menurut anda tentang kenaikan jabatan yang berdasarkan pada
seniorotas karyawan atau berdasarkan masa kerja?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
83
19. Bagaimana menurut anda dengan penentuan jam kerja (jumlah jam kerja)
bagi karyawan dalam waktu 1 hari?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
20. Bagaiman dengan waktu istirahat kerja yang diberikan kapada karyawan?
a. Waktunya sangat mencukupi
b. Cukup digunakan untuk istirahat
c. Kurang mencukupi waktunya
d. Tidak mencukupi waktunya
21. Bagaimana dengan waktu istirahat kerja yang diberikan kepada karyawan?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
22. Bagaimana menurut anda tentang tindakan yang diambil pemimpin apabila
anda sering tidak masuk kerja?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
23. Bagaiman sikap anda tentang kedisiplinan yang dterapkan oleh pimpinan?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
24. Bagaimana menurut anda tentang hubungan antara sesame teman kerja?
a. Sangat baik
b. Cukup baik
c. Kurang baik
d. Tidak baik
84
25. Bagaimana menurut anda apabila teman kerja anda diberi peluang untuk
promosi atau kenaikan jabatan?
a. Sangat mendukung
b. Kurang mendukung
c. Tidak mendukung
d. Tidak berpendapat
26. Kerja sama antara karyawan dengan karyawan lain dan karyawan dengan
pihak pimpinan penting artinya dalam menaikkan produktivitas kerja,
bagaiman pendapat anda?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
27. Untuk mempertinggi mutu karyawan, baik pengetahuan, kemampuan dan
ketrampilan kepada karyawan perlu diberikan berbagai macam latihan dan
pendidikan, bagaiman pendapat anda?
a. Sangat setuju
b. Setuju
c. Kurang setuju
d. Tidak setuju
28. Kualitas hasil kerja anda mengenai katepatan, ketelitian, katrampilan dan
keberhasilan yang dinilai oleh pimpinan, bagaimana menurut anda?
a. Selalu memuaskan
b. Cukup memuaskan
c. Kurang memuaskan
d. Tidak memuaskan
85
Frequency Table
Usia
23 26.1 26.1 26.1
36 40.9 40.9 67.0
21 23.9 23.9 90.9
3 3.4 3.4 94.3
5 5.7 5.7 100.0
88 100.0 100.0
< 30 tahun
30 – 35 tahun
36 – 40 tahun
41 – 45 tahun
> 45 tahun
Total
Valid
Frequency Percent Valid Percent
Cumulative
Percent
Jenis Kelamin
51 58.0 58.0 58.0
37 42.0 42.0 100.0
88 100.0 100.0
Laki-laki
Perempuan
Total
Valid
Frequency Percent Valid Percent
Cumulative
Percent
Pendidikan
19 21.6 21.6 21.6
11 12.5 12.5 34.1
32 36.4 36.4 70.5
6 6.8 6.8 77.3
20 22.7 22.7 100.0
88 100.0 100.0
SD
SLTP
SLTA
Diploma
S1
Total
Valid
Frequency Percent Valid Percent
Cumulative
Percent
Jumlah Keluarga
17 19.3 19.3 19.3
27 30.7 30.7 50.0
31 35.2 35.2 85.2
13 14.8 14.8 100.0
88 100.0 100.0
2
3
4
5
Total
Valid
Frequency Percent Valid Percent
Cumulative
Percent
86
Descriptives
Descriptive Statistics
88 22 52 43.76 3.90
88 42 58 50.76 3.38
88
Tunjangan
Kesejahteraan
Kinerja Karyawan
Valid N (listwise)
N Minimum Maximum Mean Std. Deviation
87
Validity & Reliability Test : Tunjangan Kesejahteraan
****** Method 1 (space saver) will be used for this analysis
******
R E L I A B I L I T Y A N A L Y S I S – S C A L E (A L P H A)
Mean Std Dev Cases
1. B1 3.4432 .6925 88.0
2. B2 3.1591 .5443 88.0
3. B3 3.3295 .5616 88.0
4. B4 3.3182 .5580 88.0
5. B5 3.4205 .5408 88.0
6. B6 3.4318 .5631 88.0
7. B7 3.4318 .6214 88.0
8. B8 3.3068 .5541 88.0
9. B9 3.4432 .5644 88.0
10. B10 3.3409 .5850 88.0
11. B11 3.3750 .4869 88.0
12. B12 3.4545 .5232 88.0
13. B13 3.3068 .5745 88.0
N of
Statistics for Mean Variance Std Dev Variables
SCALE 43.7614 15.2412 3.9040 13
Item-total Statistics
Scale Scale Corrected
Mean Variance Item- Alpha
if Item if Item Total if Item
Deleted Deleted Correlation Deleted
B1 40.3182 12.5183 .4579 .7661
B2 40.6023 12.6561 .5911 .7538
B3 40.4318 13.7424 .2842 .7820
B4 40.4432 12.7554 .5455 .7577
B5 40.3409 13.9974 .2351 .7858
B6 40.3295 12.5913 .5837 .7539
B7 40.3295 12.6143 .5077 .7605
B8 40.4545 13.0094 .4815 .7639
B9 40.3182 13.6907 .2950 .7811
B10 40.4205 12.9131 .4723 .7644
B11 40.3864 13.7800 .3386 .7766
B12 40.3068 13.7554 .3123 .7790
B13 40.4545 13.8370 .2513 .7852
R E L I A B I L I T Y A N A L Y S I S – S C A L E (A L P H A)
Reliability Coefficients
N of Cases = 88.0 N of Items = 13
Alpha = .7843
88
Validity & Reliability Test : Kinerja Karyawan
****** Method 1 (space saver) will be used for this analysis
******
R E L I A B I L I T Y A N A L Y S I S – S C A L E (A L P
H A)
Mean Std Dev Cases
1. B14 3.4205 .4965 88.0
2. B15 3.3068 .4638 88.0
3. B16 3.4659 .5663 88.0
4. B17 3.4091 .5172 88.0
5. B18 3.4205 .5191 88.0
6. B19 3.4659 .5017 88.0
7. B20 3.3977 .4922 88.0
8. B21 3.2727 .4729 88.0
9. B22 3.4432 .4996 88.0
10. B23 3.5114 .5027 88.0
11. B24 3.4432 .5437 88.0
12. B25 3.3182 .5370 88.0
13. B26 3.3409 .5227 88.0
14. B27 3.2841 .5017 88.0
15. B28 3.2614 .5772 88.0
N of
Statistics for Mean Variance Std Dev Variables
SCALE 50.7614 11.4252 3.3801 15
Item-total Statistics
Scale Scale Corrected
Mean Variance Item- Alpha
if Item if Item Total if Item
Deleted Deleted Correlation Deleted
B14 47.3409 10.3652 .2545 .6889
B15 47.4545 10.4117 .2667 .6874
B16 47.2955 9.9347 .3277 .6801
B17 47.3523 9.6791 .4594 .6637
B18 47.3409 10.3422 .2436 .6904
B19 47.2955 10.3715 .2482 .6897
B20 47.3636 10.3030 .2784 .6861
B21 47.4886 10.0688 .3774 .6750
B22 47.3182 10.2424 .2918 .6846
B23 47.2500 10.1437 .3212 .6811
B24 47.3182 10.2884 .2412 .6911
B25 47.4432 9.9278 .3572 .6763
B26 47.4205 10.1545 .2994 .6837
B27 47.4773 10.1834 .3092 .6825
B28 47.5000 10.0920 .2727 .6876
R E L I A B I L I T Y A N A L Y S I S – S C A L E (A L P H A)
Reliability Coefficients
N of Cases = 88.0 N of Items = 15
Alpha = .6981
89
Regression
Variables Entered/Removedb
Tunjangan
Kesejahter
aan
a . Enter
Model
1
Variables
Entered
Variables
Removed Method
a. All requested variables entered.
b. Dependent Variable: Kinerja Karyawan
Model Summaryb
.585a .343 .335 2.76
Model
1
R R Square
Adjusted
R Square
Std. Error of
the Estimate
a. Predictors: (Constant), Tunjangan Kesejahteraan
b. Dependent Variable: Kinerja Karyawan
ANOVAb
340.552 1 340.552 44.821 .000a
653.436 86 7.598
993.989 87
Regression
Residual
Total
Model
1
Sum of
Squares df Mean Square F Sig.
a. Predictors: (Constant), Tunjangan Kesejahteraan
b. Dependent Variable: Kinerja Karyawan
Coefficientsa
28.584 3.326 8.595 .000
.507 .076 .585 6.695 .000
(Constant)
Tunjangan
Kesejahteraan
Model
1
B Std. Error
Unstandardized
Coefficients
Beta
Standardi
zed
Coefficien
ts
t Sig.
a. Dependent Variable: Kinerja Karyawan
90
Autocorrelation test :
Variables Entered/Removedb
Tunjangan
Kesejahter
aan
a . Enter
Model
1
Variables
Entered
Variables
Removed Method
a. All requested variables entered.
b. Dependent Variable: Kinerja Karyawan
Model Summaryb
.585a .343 .335 2.76 1.503
Model
1
R R Square
Adjusted
R Square
Std. Error of
the Estimate
Durbin-W
atson
a. Predictors: (Constant), Tunjangan Kesejahteraan
b. Dependent Variable: Kinerja Karyawan
ANOVAb
340.552 1 340.552 44.821 .000a
653.436 86 7.598
993.989 87
Regression
Residual
Total
Model
1
Sum of
Squares df Mean Square F Sig.
a. Predictors: (Constant), Tunjangan Kesejahteraan
b. Dependent Variable: Kinerja Karyawan
Coefficientsa
28.584 3.326 8.595 .000
.507 .076 .585 6.695 .000
(Constant)
Tunjangan
Kesejahteraan
Model
1
B Std. Error
Unstandardized
Coefficients
Beta
Standardi
zed
Coefficien
ts
t Sig.
a. Dependent Variable: Kinerja Karyawan
91
Normality test :
One-Sample Kolmogorov-Smirnov Test
88
4.402616E-09
2.7405767
.106
.080
-.106
.995
.275
N
Mean
Std. Deviation
Normal Parametersa,b
Absolute
Positive
Negative
Most Extreme
Differences
Kolmogorov-Smirnov Z
Asymp. Sig. (2-tailed)
Unstandardiz
ed Residual
a. Test distribution is Normal.
b. Calculated from data.
92
Heteroskedasticity test :
Variables Entered/Removedb
Tunjangan
Kesejahter
aan
a . Enter
Model
1
Variables
Entered
Variables
Removed Method
a. All requested variables entered.
b. Dependent Variable: ABSRES
Model Summary
.110a .012 .001 1.8497
Model
1
R R Square
Adjusted
R Square
Std. Error of
the Estimate
a. Predictors: (Constant), Tunjangan Kesejahteraan
ANOVAb
3.581 1 3.581 1.047 .309a
294.240 86 3.421
297.821 87
Regression
Residual
Total
Model
1
Sum of
Squares df Mean Square F Sig.
a. Predictors: (Constant), Tunjangan Kesejahteraan
b. Dependent Variable: ABSRES
Coefficientsa
-.264 2.232 -.118 .906
5.196E-02 .051 .110 1.023 .309
(Constant)
Tunjangan
Kesejahteraan
Model
1
B Std. Error
Unstandardized
Coefficients
Beta
Standardi
zed
Coefficien
ts
t Sig.
a. Dependent Variable: ABSRES
46
Tabel Nilai F0,05
Degrees of freedom for Nominator
1 2 3 4 5 6 7 8 9 10 12 15 20 24 30 40 60 120
1 161 200 216 225 230 234 237 239 241 242 244 246 248 249 250 251 252 253 254
2 18,5 19,0 19,2 19,2 19,3 19,3 19,4 19,4 19,4 19,4 19,4 19,4 19,4 19,5 19,5 19,5 19,5 19,5 19,5
3 10,1 9,55 9,28 9,12 9,01 8,94 8,89 8,85 8,81 8,79 8,74 8,70 8,66 8,64 8,62 8,59 8,57 8,55 8,53
4 7,71 6,94 6,59 6,39 6,26 6,16 6,09 6,04 6,00 5,96 5,91 5,86 5,80 5,77 5,75 5,72 5,69 5,66 5,63
5 6,61 5,79 5,41 5,19 5,05 4,95 4,88 4,82 4,77 4,74 4,68 4,62 4,56 4,53 4,50 4,46 4,43 4,40 4,37
6 5,99 5,14 4,76 4,53 4,39 4,28 4,21 4,15 4,10 4,06 4,00 3,94 3,87 3,84 3,81 3,77 3,74 3,70 3,67
7 5,59 4,74 4,35 4,12 3,97 3,87 3,79 3,73 3,68 3,64 3,57 3,51 3,44 3,41 3,38 3,34 3,30 3,27 3,23
8 5,32 4,46 4,07 3,84 4,69 3,58 3,50 3,44 3,39 3,35 3,28 3,22 3,15 3,12 3,08 3,04 3,01 2,97 2,93
9 5,12 4,26 3,86 3,63 3,48 3,37 3,29 3,23 3,18 3,14 3,07 3,01 2,94 2,90 2,86 2,83 2,79 2,75 2,71
10 4,96 4,10 3,71 3,48 3,33 3,22 3,14 3,07 3,02 2,98 2,91 2,85 2,77 2,74 2,70 2,66 2,62 2,58 2,54
11 4,84 3,98 3,59 3,36 3,20 3,09 3,01 2,95 2,90 2,85 2,79 2,72 2,65 2,61 2,57 2,53 2,49 2,45 2,40
12 4,75 3,89 3,49 3,26 3,11 3,00 2,91 2,85 2,80 2,75 2,69 2,62 2,54 2,51 2,47 2,43 2,38 2,34 2,30
13 4,67 3,81 3,41 3,13 3,03 2,92 2,83 2,77 2,71 2,67 2,60 2,53 2,46 2,42 2,38 2,34 2,30 2,25 2,21
14 4,60 3,74 3,34 3,11 2,96 2,85 2,76 2,70 2,65 2,60 2,53 2,46 2,39 2,35 2,31 2,27 2,22 2,18 2,13
15 4,54 3,68 3,29 3,06 2,90 2,79 2,71 2,64 6,59 2,54 2,48 2,40 2,33 2,29 2,25 2,20 2,16 2,11 2,07
16 4,49 3,63 3,24 3,01 2,85 2,74 2,66 2,59 2,54 2,49 2,42 2,35 2,28 2,24 2,19 2,15 2,11 2,06 2,01
17 4,45 3,59 3,20 2,96 2,81 2,70 2,61 2,55 2,49 2,45 2,38 2,31 2,23 2,19 2,15 2,10 2,06 2,01 1,96
18 4,41 3,55 3,16 2,93 2,77 2,66 2,58 2,51 2,46 2,41 2,34 2,27 2,19 2,15 2,11 2,06 2,02 1,97 1,92
19 4,38 3,52 3,13 2,90 2,74 2,63 2,54 2,48 2,42 2,38 2,31 2,23 2,16 2,11 2,07 2,03 1,98 1,93 1,88
20 4,35 3,49 3,10 2,87 2,71 2,60 2,51 2,45 2,39 2,35 2,28 2,20 2,12 2,08 2,04 1,99 1,95 1,90 1,84
21 4,32 3,47 3,07 2,84 2,68 2,57 2,49 2,42 2,37 2,32 2,25 2,18 2,10 2,05 2,01 1,96 1,92 1,87 1,81
22 4,30 3,44 3,05 2,82 2,66 2,55 2,46 2,40 2,34 2,30 2,23 2,15 2,07 2,03 1,98 1,94 1,89 1,84 1,78
23 4,28 3,42 3,03 2,80 2,64 2,53 2,44 2,37 2,32 2,27 2,20 2,13 2,05 2,01 1,96 1,91 1,86 1,81 1,76
24 4,26 3,40 3,01 2,78 2,62 2,51 2,42 2,36 2,30 2,25 2,18 2,11 2,03 1,98 1,94 1,89 1,84 1,79 1,73
25 4,24 3,39 2,99 2,76 2,60 2,49 2,40 2,34 2,28 2,24 2,16 2,09 2,01 1,96 1,92 1,87 1,82 1,77 1,71
30 4,17 3,32 2,92 2,69 2,53 2,42 2,33 2,27 2,21 2,16 2,09 2,01 1,93 1,89 1,84 1,79 1,74 1,68 1,62
40 4,08 3,23 2,84 2,61 2,45 2,34 2,25 2,18 2,12 2,08 2,00 1,92 1,84 1,79 1,74 1,69 1,64 1,58 1,51
60 4,00 3,15 2,76 2,53 2,37 2,25 2,17 2,10 2,04 1,99 1,92 1,84 1,75 1,70 1,65 1,59 1,53 1,47 1,39
120 3,92 3,07 2,68 2,45 2,29 2,18 2,09 2,02 1,96 1,91 1,83 1,75 1,66 1,61 1,55 1,50 1,43 1,35 1,22
Degrees of freedom for Denominator
3,84 3,00 2,60 2,37 2,21 2,10 2,01 1,94 1,88 1,83 1,75 1,67 1,57 1,52 1,46 1,39 1,32 1,22 1,00
Sumber: Aplikasi Analisis Multivariate Dengan Program SPSS (Dr. Imam Ghozali)
46
Tabel Nilai t
d.f. t0.10 t0.05 t0.025 t0.01 t0.005 d.f.
1 3.078 6.314 12.706 31.821 63.657 1
2 1.886 2.920 4.303 6.965 9.925 2
3 1.638 2.353 3.182 4.541 5.841 3
4 1.533 2.132 2.776 3.747 4.604 4
5 1.476 2.015 2.571 3.365 4.032 5
6 1.440 1.943 2.447 3.143 3.707 6
7 1.415 1.895 2.365 2.998 3.499 7
8 1.397 1.860 2.306 2.896 3.355 8
9 1.383 1.833 2.262 2.821 3.250 9
10 1.372 1.812 2.228 2.764 3.169 10
11 1.363 1.796 2.201 2.718 3.106 11
12 1.356 1.782 2.179 2.681 3.055 12
13 1.350 1.771 2.160 2.650 3.012 13
14 1.345 1.761 2.145 2.624 2.977 14
15 1.341 1.753 2.131 2.602 2.947 15
16 1.337 1.746 2.120 2.583 2.921 16
17 1.333 1.740 2.110 2.567 2.898 17
18 1.330 1.734 2.101 2.552 2.878 18
19 1.328 1.729 2.093 2.539 2.861 19
20 1.325 1.725 2.086 2.528 2.845 20
21 1.323 1.721 2.080 2.518 2.831 21
22 1.321 1.717 2.074 2.508 2.819 22
23 1.319 1.714 2.069 2.500 2.807 23
24 1.318 1.711 2.064 2.492 2.797 24
25 1.316 1.708 2.060 2.485 2.787 25
26 1.315 1.706 2.056 2.479 2.779 26
27 1.314 1.703 2.052 2.473 2.771 27
28 1.313 1.701 2.048 2.467 2.763 28
29 1.311 1.699 2.045 2.462 2.756 29
30 1.310 1.697 2.042 2.457 2.750 30
31 1.309 1.696 2.040 2.453 2.744 31
32 1.309 1.694 2.037 2.449 2.738 32
33 1.308 1.692 2.035 2.445 2.733 33
34 1.307 1.691 2.032 2.441 2.728 34
35 1.306 1.690 2.030 2.438 2.724 35
36 1.306 1.688 2.028 2.434 2.719 36
37 1.305 1.687 2.026 2.431 2.715 37
38 1.304 1.686 2.024 2.429 2.712 38
39 1.304 1.685 2.023 2.426 2.708 39
40 1.303 1.684 2.021 2.423 2.704 40
Sumber: Aplikasi Analisis Multivariate Dengan Program SPSS (Dr. Imam Ghozali)
47
Tabel Nilai t
d.f. t0.10 t0.05 t0.025 t0.01 t0.005 d.f.
41 1.303 1.683 2.020 2.421 2.701 41
42 1.302 1.682 2.018 2.418 2.698 42
43 1.302 1.681 2.017 2.416 2.695 43
44 1.301 1.680 2.015 2.414 2.692 44
45 1.301 1.679 2.014 2.412 2.690 45
46 1.300 1.679 2.013 2.410 2.687 46
47 1.300 1.678 2.012 2.408 2.685 47
48 1.299 1.677 2.011 2.407 2.682 48
49 1.299 1.677 2.010 2.405 2.680 49
50 1.299 1.676 2.009 2.403 2.678 50
51 1.298 1.675 2.008 2.402 2.676 51
52 1.298 1.675 2.007 2.400 2.674 52
53 1.298 1.674 2.006 2.399 2.672 53
54 1.297 1.674 2.005 2.397 2.670 54
55 1.297 1.673 2.004 2.396 2.668 55
56 1.297 1.673 2.003 2.395 2.667 56
57 1.297 1.672 2.002 2.394 2.665 57
58 1.296 1.672 2.002 2.392 2.663 58
59 1.296 1.671 2.001 2.391 2.662 59
60 1.296 1.671 2.000 2.390 2.660 60
61 1.296 1.670 2.000 2.389 2.659 61
62 1.295 1.670 1.999 2.388 2.657 62
63 1.295 1.669 1.998 2.387 2.656 63
64 1.295 1.669 1.998 2.386 2.655 64
65 1.295 1.669 1.997 2.385 2.654 65
66 1.295 1.668 1.997 2.384 2.652 66
67 1.294 1.668 1.996 2.383 2.651 67
68 1.294 1.668 1.995 2.382 2.650 68
69 1.294 1.667 1.995 2.382 2.649 69
70 1.294 1.667 1.994 2.381 2.648 70
71 1.294 1.667 1.994 2.380 2.647 71
72 1.293 1.666 1.993 2.379 2.646 72
73 1.293 1.666 1.993 2.379 2.645 73
74 1.293 1.666 1.993 2.378 2.644 74
75 1.293 1.665 1.992 2.377 2.643 75
76 1.293 1.665 1.992 2.376 2.642 76
77 1.293 1.665 1.991 2.376 2.641 77
78 1.292 1.665 1.991 2.375 2.640 78
79 1.292 1.664 1.990 2.374 2.640 79
80 1.292 1.664 1.990 2.374 2.639 80
Sumber: Aplikasi Analisis Multivariate Dengan Program SPSS (Dr. Imam Ghozali)
48
Tabel Nilai t
d.f. t0.10 t0.05 t0.025 t0.01 t0.005 d.f.
81 1.292 1.664 1.990 2.373 2.638 81
82 1.292 1.664 1.989 2.373 2.637 82
83 1.292 1.663 1.989 2.372 2.636 83
84 1.292 1.663 1.989 2.372 2.636 84
85 1.292 1.663 1.988 2.371 2.635 85
86 1.291 1.663 1.988 2.370 2.634 86
87 1.291 1.663 1.988 2.370 2.634 87
88 1.291 1.662 1.987 2.369 2.633 88
89 1.291 1.662 1.987 2.369 2.632 89
90 1.291 1.662 1.987 2.368 2.632 90
91 1.291 1.662 1.986 2.368 2.631 91
92 1.291 1.662 1.986 2.368 2.630 92
93 1.291 1.661 1.986 2.367 2.630 93
94 1.291 1.661 1.986 2.367 2.629 94
95 1.291 1.661 1.985 2.366 2.629 95
96 1.290 1.661 1.985 2.366 2.628 96
97 1.290 1.661 1.985 2.365 2.627 97
98 1.290 1.661 1.984 2.365 2.627 98
99 1.290 1.660 1.984 2.365 2.626 99
Inf. 1.290 1.660 1.984 2.364 2.626 Inf.
Sumber: Aplikasi Analisis Multivariate Dengan Program SPSS (Dr. Imam Ghozali)
49
TABLE VALUES OF rproduct moment
N The5 %Le vel of Sign1if%ic ant N The5 %Le vel of Sign1if%ic ant
3 0.997 0.999 38 0.320 0.413
4 0.950 0.990 39 0.316 0.408
5 0.878 0.959 40 0.312 0.403
6 0.811 0.917 41 0.308 0.398
7 0.754 0.874 42 0.304 0.393
8 0.707 0.834 43 0.301 0.389
9 0.666 0.798 44 0.297 0.384
10 0.632 0.765 45 0.294 0.380
11 0.602 0.735 46 0.291 0.376
12 0.576 0.708 47 0.288 0.372
13 0.553 0.684 48 0.284 0.368
14 0.532 0.661 49 0.281 0.364
15 0.514 0.641 50 0.279 0.361
16 0.497 0.623 55 0.266 0.345
17 0.482 0.606 60 0.254 0.330
18 0.468 0.590 65 0.244 0.317
19 0.456 0.575 70 0.235 0.306
20 0.444 0.561 75 0.227 0.296
21 0.433 0.549 80 0.220 0.286
22 0.432 0.537 85 0.213 0.278
23 0.413 0.526 90 0.207 0.267
24 0.404 0.515 95 0.202 0.263
25 0.396 0.505 100 0.195 0.256
26 0.388 0.496 125 0.176 0.230
27 0.381 0.487 150 0.159 0.210
28 0.374 0.478 175 0.148 0.194
29 0.367 0.470 200 0.138 0.181
30 0.361 0.463 300 0.113 0.148
31 0.355 0.456 400 0.098 0.128
32 0.349 0.449 500 0.088 0.115
33 0.344 0.442 600 0.080 0.105
34 0.339 0.436 700 0.074 0.097
35 0.334 0.430 800 0.070 0.091
36 0.329 0.424 900 0.065 0.086
37 0.325 0.418 1000 0.062 0.081
Sumber: Prosedur Penelitian (Prof. Dr. Suharsimi Arikunto)

Follow

Get every new post delivered to your Inbox.