Return Calculations in R
Econ 424
Fall 2010
Eric Zivot
Updated: October 8, 2010

© Eric Zivot 2006

Example Data
# Set output options and location of data
> options(digits = 4)
> options(width = 75)> loadPath = "C:\\Users\\ezivot.SOCIOLOGY\\Documents\\FinBook\\excel\\"# read data into R> sbux.df = read.csv(file=paste(loadPath, "sbuxPrices.csv", sep=""),+
header=TRUE, stringsAsFactors=FALSE)> msft.df = read.csv(file=paste(loadPath, "msftPrices.csv", sep=""),+
header=TRUE,header TRUE, stringsAsFactors
stringsAsFactors=FALSE)FALSE)> class(sbux.df)[1] "data.frame“> str(sbux.df)'data.frame':
181 obs. of 2 variables:$ Date: chr "3/31/1993" "4/1/1993" "5/3/1993" "6/1/1993" ...
$ Adj.Close: num 1.19 1.21 1.5 1.53 1.48 1.52 1.71 1.67 1.39 1.39…
© Eric Zivot 2006

Example Data
> head(sbux.df)
Date Adj.Close
1 3/31/1993
1.19
2 4/1/1993
1.21
3 5/3/1993
1.50
4 6/1/1993
1.53
5 7/1/1993
1.48
6 8/2/1993
1.52> colnames(sbux.df)[1] "Date""Adj.Close"> class(sbux.df$Date)[1] "character"> class(sbux.df$Adj.Close)[1] "numeric"© Eric Zivot 2006

Plot Prices# Create line plot of msft prices> plot(msft.df$Adj.Close, type = "l", lty = "solid", lwd = 2,+
col = "blue", ylab = "return“)# Add sbux data to existing plot
> lines(sbux.df$Adj.Close, lty = "dotted", lwd = 2, col = "black")# Add legend to plot
> legend(x = "topleft", legend=c("MSFT", "SBUX"), lwd = 2,+lty = c("solid", "dotted"), col = c("blue", "black"))© Eric Zivot 2006

501020return

30040

MSFT
SBUX

050100Index© Eric Zivot 2006

150

Compute Returns# Compute simple monthly returns> n = nrow(sbux.df)> sbux.ret = sbux.df$Adj.Close[2:n]/sbux.df$Adj.Close[1:n-1] - 1> msft.ret = msft.df$Adj.Close[2:n]/msft.df$Adj.Close[1:n-1] - 1> head(cbind(sbux.ret, msft.ret))sbux.ret msft.ret[1,] 0.01681 -0.07407[2 ] 0.23967[2,]
0 23967 00.0844408444[3,] 0.02000 -0.04918[4,] -0.03268 -0.15948[5,] 0.02703 0.01538[6 ] 0.12500[6,]0 12500 00.09596
09596# Compute continuously compounded returns> sbux.ccret = log(1 + sbux.ret)> msft.ccret = log(1 + msft.ret)© Eric Zivot 2006

PerformanceAnalytics Package> library(PerformanceAnalytics)
Loading required package: zoo
Loading required package: xts
Package PerformanceAnalytics (1.0.0) loaded.
Econometric tools for performance and risk analysis.
(c) 2004-2009 Peter Carl, Brian G. Peterson. License: GPL
http://braverock.com/R/

Attaching package: 'PerformanceAnalytics'# show detailed information about functions in packagepg> help(library="PerformanceAnalytics")© Eric Zivot 2006

“zoo”
zoo objects# create monthly date objects> dates.sbux = as.yearmon(sbux.df$Date, format="%m/%d/%Y")> dates.msftdf = as.yearmon(msft.df$Date,( f df$f
format="%m/%d/%Y")% /%d/% )> head(dates.sbux)[1] "Mar 1993" "Apr 1993" "May 1993" "Jun 1993" "Jul 1993" "Aug1993"> tail(dates.sbux)t il(d tb )[1] "Oct 2007" "Nov 2007" "Dec 2007" "Jan 2008" "Feb 2008" "Mar2008"# createt zoo objects
bj t ffrom data.framed t fobjects
bj t> sbux.z = zoo(x=sbux.df$Adj.Close, order.by=dates.sbux)> msft.z = zoo(x=msft.df$Adj.Close, order.by=dates.msft)> class(sbux.z)[1] ""zoo""> head(sbux.z)
Mar 1993 Apr 1993 May 1993 Jun 1993 Jul 1993 Aug 1993
1.19
1.21
1.50
1.53
1.48
1.52

© Eric Zivot 2006

Subsetting “zoo”
zoo objects# subsetting using date ranges> sbux.z[as.yearmon(c("Marb[( ("M1993"1993", "M"Mar 1994"))]
Mar 1993 Mar 1994
1.19
1.52

# subsetting using the window() function> window(sbux.z, start=as.yearmon("Mar 1993"),+end=as.yearmon("Mar 1994"))
Mar 1993 Apr 1993 May 1993 Jun 1993 Jul 1993 Aug 1993 Sep 1993 Oct 1993
1.19
1.21
1.50
1.53
1.48
1.52
1.71
1.67
Nov 1993 Dec 1993 Jan 1994 Feb 1994 Mar 1994
1.39
1.39
1.50
1.45
1.52

© Eric Zivot 2006

Merging “zoo”zoo objects# create merged time series> sbuxMsft.z = merge(sbux.z, msft.z)> head(sbuxMsft.z)
sbux z msft.z
sbux.zmsft zMar 1993
1.19
2.43
Apr 1993
1.21
2.25
May 1993
1.50
2.44
Jun 1993
11.53
53
2
2.32
32
Jul 1993
1.48
1.95
Aug 1993
1.52
1.98© Eric Zivot 2006

Plotting “zoo”
zoo objects# note: plot invokes the plot method for "zoo" objects# plot the monthly prices for msft
> plot(msft.z, lwd=2, col="blue", ylab="Prices", xlab="Months")# add prices for sbux
> lines(sbux.z, col="black", lwd=2, lty="dotted")# add legend to plot
> legend(x="topleft", legend=c("MSFT", "SBUX"),+
col=c("blue", "black"), lwd=2, lty=c("solid", "dotted"))© Eric Zivot 2006

50
10202Prices

30
3400MSFT
SBUX

1994

1996

1998

2000

2002

Months© Eric Zivot 2006

2004

2006

2008

20
30
200
10

MSFT

40

50
0

10SBUX
X

30# two series in two separate panels> plot(sbuxMsft.z, lwd=c(2,2), plot.type="multiple",+
col=c("black", "blue"), lty=c("solid",y"dotted"),+ylab=c("SBUX", "MSFT"), main="")

1994

1996

1998

2000

2002

Index

© Eric Zivot 2006

2004

2006

2008