[Returnanalytics-commits] r2340 - pkg/PApages/sandbox
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Wed Jun 12 21:30:32 CEST 2013
Author: peter_carl
Date: 2013-06-12 21:30:31 +0200 (Wed, 12 Jun 2013)
New Revision: 2340
Added:
pkg/PApages/sandbox/charts.onepager.R
Log:
- initial commit of a function that's been sitting around for years, whoops
Added: pkg/PApages/sandbox/charts.onepager.R
===================================================================
--- pkg/PApages/sandbox/charts.onepager.R (rev 0)
+++ pkg/PApages/sandbox/charts.onepager.R 2013-06-12 19:30:31 UTC (rev 2340)
@@ -0,0 +1,171 @@
+`charts.onepager` <-
+function (R, manager.column = 1, peer.columns = NULL, index.columns = NULL, manager.color = "red", peer.color = "darkgray", index.color = "orange", Rf = 0, main = NULL, method = c("ModifiedES","ModifiedVaR"), p=(1-1/12), width = 0, event.labels = NULL, ylog = FALSE, wealth.index = FALSE, gap = 12, begin=c("first","axis"), legend.loc="topleft", lwd = 2, ...)
+{ # @author Peter Carl
+
+ # DESCRIPTION:
+ # An extension of charts.PerformanceSummary.R
+
+ # Inputs:
+ # R: a matrix, data frame, or timeSeries, usually a set of monthly returns.
+ # The first column is assumed to be the returns of interest, the next
+ # columns are assumed to be relevant benchmarks for comparison.
+ # rf: this is the risk free rate. Remember to set this to the same
+ # periodicity as the data being passed in.
+ # method: Used to select the risk parameter to use in the chart.BarVaR. May
+ # be any of:
+ # modVaR - uses CF modified VaR
+ # VaR - uses traditional Value at Risk
+ # StdDev - monthly standard deviation of trailing 12 month returns
+ #
+
+ # Outputs:
+ # A stack of three related timeseries line charts
+
+ # FUNCTION:
+ begin = begin[1]
+ x = checkData(R, method = "zoo")
+ colnames = colnames(x)
+ ncols = ncol(x)
+
+# This repeats a bit of code from chart.CumReturns, but it's intended
+# to align the start dates of all of the following charts. Basically, it assumes
+# that the manager.column is the column of interest, and
+# starts everything from that start date
+
+ length.column.one = length(x[,manager.column])
+# find the row number of the last NA in the first column
+ start.row = 1
+ start.index = 0
+ while(is.na(x[start.row,manager.column])){
+ start.row = start.row + 1
+ }
+ x = x[start.row:length.column.one,]
+
+ colorset = c(rep(manager.color,length(manager.column)), rep(index.color, length(index.columns)), rep(peer.color,length(peer.columns)))
+ legend.colorset = c(rep(manager.color, length(manager.column)), peer.color, rep(index.color, length(index.columns)))
+
+ linetypes = c(rep(1, length(manager.column)), 1:length(index.columns), rep(1, length(peer.columns)))
+ legend.linetypes = c(rep(1, length(manager.column)), 1, 1:length(index.columns))
+
+ dottypes = c(rep(16, length(manager.column)), closedsymbols[1:length(index.columns)], rep(1, length(peer.columns)))
+ legend.dottypes = c(rep(16, length(manager.column)),1, closedsymbols[1:length(index.columns)])
+
+ if(ncols > 1){
+ legend.loc = legend.loc
+ legendnames = c(colnames(x[, manager.column, drop = FALSE]),"Peer group", colnames(x[, index.columns, drop = FALSE]))
+ }
+ else
+ legend.loc = NULL
+
+ if(is.null(main))
+ main = paste(colnames[manager.column],"Performance", sep=" ")
+
+ if(ylog)
+ wealth.index = TRUE
+
+ # First, we lay out the graphic as a three row, one column format
+# plot.new()
+# layout(matrix(c(1,2,3)),height=c(2,1,1.3),width=1)
+# pdf("test1.pdf", width=6.5, height=9, paper="letter")
+ layout(matrix(c(1,1,2,2,3,3,4,5),nrow=4,ncol=2,byrow=T),height=c(3,1.25,1.75,3),width=1)
+ # to see the resulting layout, use layout.show(5)
+
+ # mar: a numerical vector of the form c(bottom, left, top, right) which
+ # gives the number of lines of margin to be specified on the four sides
+ # of the plot. The default is c(5, 4, 4, 2) + 0.1
+
+ # The first row is the cumulative returns line plot
+ par(mar=c(1,4,4,2))
+ chart.CumReturns(x[,c(manager.column,index.columns,peer.columns),drop = FALSE], main = main, xaxis = FALSE, ylab = NULL, legend.loc = NULL, event.labels = event.labels, ylog = ylog, wealth.index = wealth.index, begin = begin, colorset = colorset, lwd = lwd, lty=linetypes, ...)
+
+ if(!is.null(legend.loc)){
+ # There's no good place to put this automatically, except under the graph.
+ # That requires a different solution, but here's the quick fix
+ legend(legend.loc, inset = 0.02, text.col = legend.colorset, col = legend.colorset, cex = .8, border.col = "gray", lwd = 2, bg = "white", legend = legendnames, lty=legend.linetypes, pch = legend.dottypes, pt.bg="white", pt.lwd = "1", merge = FALSE, pt.cex = 1.25)
+ }
+
+ # The second row is the monthly returns bar plot
+ par(mar=c(1,4,0,2))
+# chart.BarVaR(as.matrix(R[,1]), main = "", xaxis = FALSE, ylab = "Monthly Return", method = method)
+ chart.BarVaR(x[,c(manager.column,index.columns,peer.columns),drop = FALSE], main = "", xaxis = FALSE, width = width, ylab = "Monthly Return", method = method, event.labels = NULL, ylog=FALSE, gap = gap, colorset = colorset, lwd = lwd, p=p, ...)
+
+ # The third row is the underwater plot
+ par(mar=c(5,4,0,2))
+ chart.Drawdown(x[,c(manager.column,index.columns,peer.columns),drop = FALSE], main = "", xlab = "", ylab = "From Peak", event.labels = NULL, ylog=FALSE, colorset= colorset, lwd = lwd, lty = linetypes, ...)
+
+par()
+# chart.Histogram(x[,c(manager.column,index.columns,peer.columns),drop = FALSE],methods=c( "add.normal","add.density"), main="", colorset = c("lightgray", manager.color, "#005AFF", "#23FFDC", "#ECFF13", "#FF4A00", "#800000"), ...)
+
+chart.Boxplot(x[,c(manager.column,index.columns,peer.columns),drop = FALSE], colorset=colorset, mean.symbol = dottypes, symbol.color = colorset, as.Tufte = T, names=F, main = "", ylab = "", sort.by="variance", ...)
+
+par()
+chart.RiskReturnScatter(x[,c(manager.column,index.columns,peer.columns),drop = FALSE], Rf = Rf, main="",add.names=FALSE, colorset = colorset, symbolset = dottypes, ...)
+# layout.show(5)
+
+# dev.off()
+}
+
+###############################################################################
+# R (http://r-project.org/) Econometrics for Performance and Risk Analysis
+#
+# Copyright (c) 2004-2007 Peter Carl and Brian G. Peterson
+#
+# This library is distributed under the terms of the GNU Public License (GPL)
+# for full details see the file COPYING
+#
+# $Id: charts.onepager.R,v 1.2 2007-10-03 02:50:03 peter Exp $
+#
+###############################################################################
+# $Log: charts.onepager.R,v $
+# Revision 1.2 2007-10-03 02:50:03 peter
+# - merge set to FALSE in legend so that lines and points are easily
+# distinguished
+# - manager.columns changed to manager.column
+# - manager.column defaults to "1" but will now correctly use any column
+#
+# Revision 1.14 2007/08/23 02:12:04 peter
+# - added legend.loc as parameter so that legend can be shut off or moved
+# in top chart
+#
+# Revision 1.13 2007/08/15 00:04:44 peter
+# - aligns the three charts along the start date of the first column of
+# data
+#
+# Revision 1.12 2007/06/29 15:52:25 peter
+# - removed plot.new() that was causing two page pdf files
+#
+# Revision 1.11 2007/06/18 03:35:22 brian
+# - make method argument a list
+#
+# Revision 1.10 2007/04/30 12:56:05 peter
+# - changed 'method' to 'begin'
+#
+# Revision 1.9 2007/04/09 12:31:27 brian
+# - syntax and usage changes to pass R CMD check
+#
+# Revision 1.8 2007/04/04 02:46:34 peter
+# - added gap parameter for chart.BarVaR
+#
+# Revision 1.7 2007/03/22 13:48:11 peter
+# - removed yaxis label in favor of default
+#
+# Revision 1.6 2007/03/21 21:46:54 peter
+# - passing in wealth.index to top chart
+#
+# Revision 1.5 2007/03/21 21:44:21 peter
+# - fixed conditional test
+#
+# Revision 1.4 2007/03/21 21:40:48 peter
+# - added error handling for ylog passing in top chart
+#
+# Revision 1.3 2007/03/20 13:48:07 peter
+# - changed "n" attribute to "width" in chart.BarVaR call
+#
+# Revision 1.2 2007/02/07 13:24:49 brian
+# - fix pervasive comment typo
+#
+# Revision 1.1 2007/02/02 19:06:15 brian
+# - Initial Revision of packaged files to version control
+# Bug 890
+#
+###############################################################################
More information about the Returnanalytics-commits
mailing list