Recently, in my financial statements analysis class, I had to perform a valuation of Apple Inc. with a number of different valuation methods. One of the things that made valuation simpler is the lack of long-term debt on Apple's balance sheet. This simple fact means that Apple's WACC is equal to the cost of equity.

To find the cost of equity, I use CAPM, which states

where is the expected return on capital, after accounting for the market risk premium. To find the component pieces , , and , I will use R with the quantmod package, and I will also use the PerformanceAnalytics Package, although I will show you how to avoid using it if you choose.

The sourcecode for the project:

^{?}Download betacalc.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 | #Packages required require(PerformanceAnalytics) require(quantmod) require(car) #Here we get the symbols for the SP500 (GSPC), AAPL, and 5yr Treasuries (GS5) getSymbols("^GSPC", src = "yahoo", from = as.Date("2008-01-01"), to = as.Date("2011-12-31")) getSymbols("AAPL", src = "yahoo", from = as.Date("2009-01-01"), to = as.Date("2011-12-31")) getSymbols("GS5", src = "FRED", from = as.Date("2008-12-01"), to = as.Date("2011-12-31")) #Market risk R_m is the arithmetic mean of SP500 from 2009 through 2011 #Riskfree rate is arithmetic mean of 5yr treasuries marketRisk<- mean(yearlyReturn(GSPC['2009::2011'])) riskFree <- mean(GS5['2009::2011']) #My professor advised us to use weekly returns taken on wednesday #so I take a subset of wednesdays and use the quantmod function #weeklyReturn() AAPL.weekly <- subset(AAPL,weekdays(time(AAPL))=='Wednesday') AAPL.weekly <- weeklyReturn(AAPL['2009::2011']) GSPC.weekly <- subset(GSPC,weekdays(time(GSPC))=='Wednesday') GSPC.weekly <- weeklyReturn(GSPC['2009::2011']) #Here I use PerformanceAnalytics functions for alpha+beta #Then we calculate Cost of equity using our calculated figures AAPL.beta <- CAPM.beta(AAPL.weekly,GSPC.weekly) AAPL.alpha <- CAPM.alpha(AAPL.weekly,GSPC.weekly) AAPL.expectedReturn <- riskFree + AAPL.beta * (marketRisk-riskFree) #For my graph, I want to show R^2, so we get it from the #lm object AAPL.reg AAPL.reg<-lm(AAPL.weekly~GSPC.weekly) AAPL.rsquared<-summary(AAPL.reg)$r.squared #Lastly, we graph the returns and fit line, along with info scatterplot(100*as.vector(GSPC.weekly),100*as.vector(AAPL.weekly), smooth=FALSE, main='Apple Inc. vs. S&P 500 2009-2011',xlab='S&P500 Returns', ylab='Apple Returns',boxplots=FALSE) text(5,-10,paste('y = ',signif(AAPL.alpha,digits=4),' + ',signif(AAPL.beta,digits=5),'x \n R^2 = ',signif(AAPL.rsquared,digits=6),'\nn=',length(as.vector(AAPL.weekly)),sep=''),font=2) |

The code is commented, but I will make some additional comments on specific sections to explain the process for those unsure. I apologize for my unstandardized variable names as well!

First of all, I use the getQuotes() function, which has a few sources. In this example, I use Yahoo data for equity data and FRED for information on 5yr Treasuries. For reference, the ticker for retrieving the SP500 on Yahoo is "^GSPC", and the FRED code for 5yr treasuries is "GS5". Other symbols should be self explanatory.

Next is the issue of regression parameters. To find alpha and beta, I use the capm functions of PerformanceAnalytics, but to find I read it out of the the regression object using

^{?}View Code RSPLUS

1 2 | AAPL.reg <- lm(AAPL.weekly~GSPC.weekly) AAPL.rsquared <- summary(AAPL.reg)$r.squared |

It is possible to do this with beta and alpha, however, I did not do this because I did not originally did not start out to find , and turned to PerformanceAnalytics out of convenience.

Finally, I graphed the results and regression line for the benefit of my teacher, the results of which can be seen here: