I'll be posting my general thoughts on R later. Mostly it seems to be a neat language. Lots of ways to do things. The ability to create output seems limited. I played with a number of things trying to create rich HTML output like I did with SAS. R2HTML might be what I need; I couldn't get it to work.

So here is what I have

require(fImport)

require(PerformanceAnalytics)

These two packages seem to do a lot of what I need. PerformanceAnalytics has a wealth of charting tools for financial data.

#Function to load stock data into a Time Series objectI learned a lot about data handling in R putting this function together.

importSeries = function (symbol,from,to) {

#Read data from Yahoo! Finance

input = yahooSeries(symbol,from=from,to=to)

#Character Strings for Column Names

adjClose = paste(symbol,".Adj.Close",sep="")

inputReturn = paste(symbol,".Return",sep="")

CReturn = paste(symbol,".CReturn",sep="")

#Calculate the Returns and put it on the time series

input.Return = returns(input[,adjClose])

colnames(input.Return)[1] = inputReturn

input = merge(input,input.Return)

#Calculate the cumulative return and put it on the time series

input.first = input[,adjClose][1]

input.CReturn = fapply(input[,adjClose],FUN=function(x) log(x) - log(input.first))

colnames(input.CReturn)[1] = CReturn

input = merge(input,input.CReturn)

#Deleting things (not sure I need to do this, but I can't not delete things if

# given a way to...

rm(input.first,input.Return,input.CReturn,adjClose,inputReturn,CReturn)

#Return the timeseries

return(input)

}

#Load SPY dataNothing fancy here. The merge() function is nice, but I have no idea how to do anything but the "full" join that it defaults to. If anyone knows of a good tutorial on doing more advanced SQL style joins, please let me know.

spy = importSeries("spy",from="2010-01-01",to="2011-10-22")

#Load Google data

goog = importSeries("goog",from="2010-01-01",to="2011-10-22")

#merge the time series

merged = merge(spy,goog)

#Chart the Cumulative ReturnsFirst, the chart.CumReturns() produces a nice graph. Better than I was able to do with plot().

png("c:\\temp\\Returns_r.png")

chart.CumReturns(merged[,c("spy.Return","goog.Return"),drop=FALSE],

main="Total Returns SPY vs Google",

legend.loc="topleft")

dev.off()

#Create the Correlation plot

png("c:\\temp\\Corr.png")

chart.Correlation(merged[,c("spy.Return","goog.Return")],histogram=TRUE,pch="+")

dev.off()

Second, the char.Correlation() also gives a neat output. I would really like to find a comparable method to produce the alpha ellipses that I did in SAS.

Third, I cannot find a good method that is comparable to PROC CORR. Can I get a good output with both correlation, covariance, mean, std, etc? Please, let me know.

#Regress Google on SPYLinear Regression seems pretty easy. It took me a while to decipher the R help to figure out the confidence interval stuff. Again, if there is a way to produce a rich set of output from a regression like SAS and PROC REG, please show me.

reg = lm(merged[,"goog.Return"]~merged[,"spy.Return"])

#Create the confidence interval

newx = merged[,"spy.Return"]

prd = predict(reg,newdata=newx,interval="confidence",level=.95, type="response")

#Print the Regression Summary

summary(reg)

Here is the R output:

Call:Matches SAS. It's not exact, but very close. That's good.

lm(formula = merged[, "goog.Return"] ~ merged[, "spy.Return"])

Residuals:

Min 1Q Median 3Q Max -0.089348 -0.005702 -0.000083 0.005513 0.116929

Coefficients:

Estimate Std. Error t value Pr(>|t|) (Intercept) -0.0003841 0.0006424 -0.598 0.55 merged[, "spy.Return"] 0.9641218 0.0509346 18.929 <2e-16 ***

--- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0137 on 453 degrees of freedom (1 observation deleted due to missingness)

Multiple R-squared: 0.4416, Adjusted R-squared: 0.4404

F-statistic: 358.3 on 1 and 453 DF, p-value: < 2.2e-16

#Chart the regressionUsing the chart.Regression() from PerformanceAnalytics. The fit interval looks suspect. Maybe I did something wrong.

png("c:\\temp\\Regression.png")

chart.Regression(merged[,"goog.Return",drop=FALSE],

merged[,"spy.Return",drop=FALSE],

fit=c("linear"),

main="Google ~ SPY",

xlab="SPY Return",

ylab="Google Return")

#add the confidence interval

lines(newx$spy.Return,prd[,2],col="Red",lty=2)

lines(newx$spy.Return,prd[,3],col="Red",lty=2)

dev.off()