• Download Gist
vanguard and pimco performance distribution.r
R
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
#copied this function almost entirely from http://tradeblotter.wordpress.com/
#I only take credit for the ugly/bad code
#amended to accept data in long form and replace time with manager
 
# Histogram, QQPlot and ECDF plots aligned by scale for comparison
page.Distributions.long <- function (R, mgrcol, perfcol, ylim=c(0,0.25)) {
require(PerformanceAnalytics)
op <- par(no.readonly = TRUE)
# c(bottom, left, top, right)
par(oma = c(5,0,2,1), mar=c(0,0,0,3))
mgr = unique(R[,mgrcol])
layout(matrix(1:(4*length(mgr)), ncol=4, byrow=TRUE), widths=rep(c(.6,1,1,1),length(mgr)))
# layout.show(n=21)
chart.mins=min(R[,perfcol], na.rm=TRUE)
chart.maxs=max(R[,perfcol], na.rm=TRUE)
row.names = mgr
for(i in 1:length(mgr)){
if(i==length(mgr)){
plot.new()
text(x=1, y=0.5, adj=c(1,0.5), labels=row.names[i], cex=1.1)
chart.Histogram(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", xlim=c(chart.mins, chart.maxs), ylim=ylim,
breaks=seq(round(chart.mins, digits=2)-0.01, round(chart.maxs, digits=2)+0.01, by=0.01),
show.outliers=TRUE, methods=c("add.normal"), colorset =
c("black", "#00008F", "#005AFF", "#23FFDC", "#ECFF13", "#FF4A00", "#800000"))
abline(v=0, col="darkgray", lty=2)
chart.QQPlot(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", pch=20, envelope=0.95, col=c(1,"#005AFF"), ylim=c(chart.mins, chart.maxs))
abline(v=0, col="darkgray", lty=2)
chart.ECDF(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", xlim=c(chart.mins, chart.maxs), lwd=2)
abline(v=0, col="darkgray", lty=2)
}
else{
plot.new()
text(x=1, y=0.5, adj=c(1,0.5), labels=row.names[i], cex=1.1)
chart.Histogram(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", xlim=c(chart.mins, chart.maxs), ylim=ylim,
breaks=seq(round(chart.mins, digits=2)-0.01, round(chart.maxs, digits=2)+0.01, by=0.01),
xaxis=FALSE, yaxis=FALSE, show.outliers=TRUE, methods=c("add.normal"), colorset =
c("black", "#00008F", "#005AFF", "#23FFDC", "#ECFF13", "#FF4A00", "#800000"))
abline(v=0, col="darkgray", lty=2)
chart.QQPlot(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", xaxis=FALSE, yaxis=FALSE, pch=20, envelope=0.95, col=c(1,"#005AFF"), ylim=c(chart.mins, chart.maxs))
abline(v=0, col="darkgray", lty=2)
chart.ECDF(R[which(R[,mgrcol]==mgr[i]),perfcol], main="", xlim=c(chart.mins, chart.maxs), xaxis=FALSE, yaxis=FALSE, lwd=2)
abline(v=0, col="darkgray", lty=2)
}
}
par(op)
}
 
#data from pimco and vanguard websites imported into Excel and translated into csv
#if local uncomment next line
#pimco_vanguard <- read.csv("vanguard_pimco.csv")
#get data from published google doc spreadsheet
pimco_vanguard <- read.csv("https://docs.google.com/spreadsheet/pub?key=0AieeEIaS0AOsdDFET0ZmbTBKWDNoMnZrZ0oySWRia1E&single=true&gid=0&output=csv")
 
#do col 4 which is 1 year or past 12 months
#exclude 0 assuming that data does not exist for this fund
page.Distributions.long(pimco_vanguard[pimco_vanguard$X1Y != 0,], perfcol = 4, mgrcol = 1, ylim = c(0,10))
 
 
#do col 3 which is ytd
page.Distributions.long(pimco_vanguard[pimco_vanguard$YTD != 0,], perfcol = 3, mgrcol = 1, ylim = c(0,30))

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.