With Size, Does Risk–>Return?

[This article was first published on Timely Portfolio, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A basic tenet in finance is that higher risk should lead to higher return as the time horizon stretches to infinity.  However, in bonds, higher risk has not meant higher return with either credit risk (high-yield) or long duration risk (maturity > 15 years).  Based on some quick analysis of Kenneth French’s dataset on returns by market capitalization, it appears theory might better explain reality but not in a linear fashion.  For those more interested in risk and return on small caps, see this fascinating revelation refuting a basic tenet of finance About That Small Cap Effect: Oops!

From TimelyPortfolio
From TimelyPortfolio
From TimelyPortfolio

R code from GIST:

#use Ken French market cap series
#http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/Portfolios_Formed_on_ME.zip
require(PerformanceAnalytics)
require(quantmod)
my.url="http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/Portfolios_Formed_on_ME.zip"
my.tempfile<-paste(tempdir(),"\\frenchsize.zip",sep="")
my.usefile<-paste(tempdir(),"\\Portfolios_Formed_on_ME.txt",sep="")
download.file(my.url, my.tempfile, method="auto",
quiet = FALSE, mode = "wb",cacheOK = TRUE)
unzip(my.tempfile,exdir=tempdir(),junkpath=TRUE)
#read space delimited text file extracted from zip
french_size <- read.table(file=my.usefile,
header = TRUE, sep = "",
as.is = TRUE,
skip = 13, nrows=1020)
#for simplicity use small mid large but series contains more granular also
colnames(french_size)[3:5] <- c("Small30","Mid40","Large30")
#get dates ready for xts index
datestoformat <- french_size[,1]
datestoformat <- paste(substr(datestoformat,1,4),
substr(datestoformat,5,7),"01",sep="-")
#get xts for analysis
french_size_xts <- as.xts(french_size[,3:5],
order.by=as.Date(datestoformat))
mycolors = c("indianred3","slateblue4","darkolivegreen4")
french_size_xts <- french_size_xts/100
#jpeg#"size risk return.jpeg",height=6.5,width=6.5,res=96,units="in")
chart.RiskReturnScatter(french_size_xts, main="Risk and Return by Size
U. S. Stocks Since 1926",xlim=c(0,0.35),colorset=mycolors)
mtext("Source: http://mba.tuck.dartmouth.edu/pages/faculty/ken.french",
side=1,line=2,cex=0.8,adj=0)
#dev.off()
#jpeg#"size correlation.jpeg",height=6.5,width=6.5,res=96,units="in")
chart.Correlation(french_size_xts, main="Correlation by Size
U. S. Stocks Since 1926")
mtext("Source: http://mba.tuck.dartmouth.edu/pages/faculty/ken.french",
side=1,line=2,cex=0.8,adj=0)
#dev.off()
frontier <- portfolioFrontier(as.timeSeries(french_size_xts))
pointsFrontier = frontierPoints(frontier, frontier = "both", auto=TRUE)
targetRisk = getTargetRisk(frontier@portfolio)[,1]
targetReturn = getTargetReturn(frontier@portfolio)[,1]
ans = cbind(Risk = targetRisk, Return = targetReturn)
colnames(ans) = c("targetRisk", "targetReturn")
rownames(ans) = as.character(1:NROW(ans))
#points(ans)
#jpeg#"size frontier.jpeg",height=6.5,width=6.5,res=96,units="in")
plot(ans,xlim=c(min(ans[,1]),max(ans[,1])+.025),ylim=c(0,0.016),type="l",lwd=2, xlab=NA,ylab=NA)
#frontierPlot(frontier, pch=19,title=FALSE,xlim=c(min(ans[,1]),max(ans[,1])+.025),ylim=c(0,0.016),add=FALSE)
#minvariancePoints(frontier,pch=19,col="red")
#tangencyPoints(frontier,pch=19,col="blue")
#tangencyLines(frontier,pch=19,col="blue")
equalWeightsPoints(frontier,pch=15,col="grey")
singleAssetPoints(frontier,pch=19,cex=1.5,col=mycolors)
#twoAssetsLines(frontier,lty=3,col="grey")
#sharpeRatioLines(frontier,col="orange",lwd=2)
#legend("topleft",legend=colnames(french_size_xts),pch=19,col=mycolors,
# cex=0.65)
#label assets
stats <- getStatistics(frontier)
text(y=stats$mean,x=sqrt(diag(stats$Cov)),labels=names(stats$mean),pos=4,col=mycolors,cex=0.7)
title(main="Efficient Frontier by Size since 1926",xlab="Risk(cov)",ylab="Monthly Return")
mtext("Source: http://mba.tuck.dartmouth.edu/pages/faculty/ken.french",
side=1,line=2,cex=0.8,adj=0)
#dev.off()

To leave a comment for the author, please follow the link and comment on their blog: Timely Portfolio.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)