[Returnanalytics-commits] r3441 - in pkg/FactorAnalytics: . R man

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Thu Jun 26 05:57:07 CEST 2014


Author: pragnya
Date: 2014-06-26 05:57:07 +0200 (Thu, 26 Jun 2014)
New Revision: 3441

Added:
   pkg/FactorAnalytics/R/plot.tsfm.r
   pkg/FactorAnalytics/R/predict.tsfm.r
   pkg/FactorAnalytics/R/print.tsfm.r
   pkg/FactorAnalytics/R/summary.tsfm.r
   pkg/FactorAnalytics/R/tsfm.r
   pkg/FactorAnalytics/man/fitTSFM.Rd
Removed:
   pkg/FactorAnalytics/R/plot.TimeSeriesFactorModel.r
   pkg/FactorAnalytics/R/predict.TimeSeriesFactorModel.r
   pkg/FactorAnalytics/R/print.TimeSeriesFactorModel.r
   pkg/FactorAnalytics/R/summary.TimeSeriesFactorModel.r
   pkg/FactorAnalytics/man/fitTimeSeriesFactorModel.Rd
Modified:
   pkg/FactorAnalytics/NAMESPACE
   pkg/FactorAnalytics/R/fitTSFM.R
Log:
Added help entry on class tsfm and corresponding edits to the generic methods.

Modified: pkg/FactorAnalytics/NAMESPACE
===================================================================
--- pkg/FactorAnalytics/NAMESPACE	2014-06-25 16:05:02 UTC (rev 3440)
+++ pkg/FactorAnalytics/NAMESPACE	2014-06-26 03:57:07 UTC (rev 3441)
@@ -23,7 +23,7 @@
 export(factorModelVaRDecomposition)
 export(fitFundamentalFactorModel)
 export(fitStatisticalFactorModel)
-export(fitTimeSeriesFactorModel)
+export(fitTSFM)
 export(pCornishFisher)
 export(paFM)
 export(qCornishFisher)

Modified: pkg/FactorAnalytics/R/fitTSFM.R
===================================================================
--- pkg/FactorAnalytics/R/fitTSFM.R	2014-06-25 16:05:02 UTC (rev 3440)
+++ pkg/FactorAnalytics/R/fitTSFM.R	2014-06-26 03:57:07 UTC (rev 3441)
@@ -5,7 +5,7 @@
 #' Users can choose between ordinary least squares-OLS, discounted least 
 #' squares-DLS (or) robust regression. Several variable selection options  
 #' including Stepwise, Subsets, Lars are available as well. An object of class 
-#' \code{tsfm} is returned.
+#' \code{\link{tsfm}} is returned.
 #' 
 #' @details 
 #' Estimation method "OLS" corresponds to ordinary least squares, "DLS" is 
@@ -87,22 +87,25 @@
 #' and "DLS" fits. Scope argument is not available presently. Also plan to
 #' include other controls passed to \code{lmRob} soon.
 #' 
-#' @return The returned value is an S3 object of class \code{tsfm} 
+#' @return fitTSFM returns an object of class 
+#' \code{tsfm}.The returned object is a list
 #' containing the following components:
-#' \item{asset.fit} {list of the fitted objects for each asset. Each fitted 
+#' \describe{
+#' \item{asset.fit}{list of the fitted objects for each asset. Each fitted 
 #' object is of class \code{lm} if \code{fit.method} is "OLS" or "DLS";
 #' of class \code{lmRob} if the \code{fit.method} is "Robust"; of class 
-#' \code{lars} if \code{variable.selection}="lars" or "lasso".
-#' \item{alpha} {N x 1 vector of estimated alphas.}
-#' \item{beta} {N x K matrix of estimated betas.}
-#' \item{r2} {N x 1 vector of R-squared values.}
-#' \item{resid.sd} {N x 1 vector of residual standard deviations.}
-#' \item{call} {the matched function call.}
-#' \item{data} {data as input.}
-#' \item{asset.names} {asset.names as input.}
-#' \item{factor.names{ {factor.names as input.}
-#' \item{fit.method} {fit.method as input.}
-#' \item{variable.selection} {variable.selection as input.}
+#' \code{lars} if \code{variable.selection}="lars" or "lasso".}
+#' \item{alpha}{N x 1 vector of estimated alphas.}
+#' \item{beta}{N x K matrix of estimated betas.}
+#' \item{r2}{N x 1 vector of R-squared values.}
+#' \item{resid.sd}{N x 1 vector of residual standard deviations.}
+#' \item{call}{the matched function call.}
+#' \item{data}{data as input.}
+#' \item{asset.names}{asset.names as input.}
+#' \item{factor.names}{factor.names as input.}
+#' \item{fit.method}{fit.method as input.}
+#' \item{variable.selection}{variable.selection as input.}
+#' }
 #' Where N is the number of assets and K is the number of factors.
 #' 
 #' @family Factor Models

Deleted: pkg/FactorAnalytics/R/plot.TimeSeriesFactorModel.r
===================================================================
--- pkg/FactorAnalytics/R/plot.TimeSeriesFactorModel.r	2014-06-25 16:05:02 UTC (rev 3440)
+++ pkg/FactorAnalytics/R/plot.TimeSeriesFactorModel.r	2014-06-26 03:57:07 UTC (rev 3441)
@@ -1,486 +0,0 @@
-#' plot TimeSeriesFactorModel object.
-#' 
-#' Generic function of plot method for fitTimeSeriesFactorModel. Either plot
-#' all assets or choose a single asset to plot.
-#' 
-#' 
-#' @param x fit object created by \code{fitTimeSeriesFactorModel}.
-#' @param colorset Defualt colorset the same as \code{barplot}.
-#' @param legend.loc Plot legend or not. Defualt is \code{NULL}.
-#' @param which.plot Integer indicates which plot to create: "none" will
-#' create a menu to choose. Defualt is none.\cr 
-#' 1 = "Fitted factor returns", \cr
-#' 2 = "R square", \cr
-#' 3 = "Variance of Residuals",\cr
-#' 4 = "FM Correlation",\cr
-#' 5 = "Factor Contributions to SD",\cr
-#' 6 = "Factor Contributions to ES",\cr
-#' 7 = "Factor Contributions to VaR"
-#' @param max.show Maximum assets to plot. Default is 6.
-#' @param plot.single Plot a single asset of lm class. Defualt is \code{FALSE}.
-#' @param asset.name Name of the asset to be plotted.
-#' @param which.plot.single Integer indicates which plot to create: "none"
-#' will create a menu to choose. Defualt is none.\cr
-#'  1 = time series plot of actual and fitted values,\cr
-#'  2 = time series plot of residuals with standard error bands, \cr
-#'  3 = time series plot of squared residuals, \cr
-#'  4 = time series plot of absolute residuals,\cr
-#'  5 = SACF and PACF of residuals,\cr
-#'  6 = SACF and PACF of squared residuals,\cr
-#'  7 = SACF and PACF of absolute residuals,\cr
-#'  8 = histogram of residuals with normal curve overlayed,\cr
-#'  9 = normal qq-plot of residuals,\cr
-#'  10= CUSUM plot of recursive residuals,\cr
-#'  11= CUSUM plot of OLS residuals,\cr
-#'  12= CUSUM plot of recursive estimates relative to full sample estimates,\cr
-#'  13= rolling estimates over 24 month window.
-#' @param VaR.method Character, method for computing VaR. Valid choices are
-#' either "modified","gaussian","historical", "kernel". computation is done with the \code{VaR}
-#' in the PerformanceAnalytics package. Default is "historical".
-#' @param ... further arguments passed to or from other methods.
-#' @author Eric Zivot and Yi-An Chen.
-#' @examples
-#' 
-#' \dontrun{
-#' # load data from the database
-#' data(managers.df)
-#' fit.macro <- fitTimeseriesFactorModel(assets.names=colnames(managers.df[,(1:6)]),
-#'                                 factors.names=c("EDHEC.LS.EQ","SP500.TR"),
-#'                                 data=managers.df,fit.method="OLS")
-#' # plot of all assets and show only first 4 assets.
-#' plot(fit.macro,max.show=4)
-#' # single plot of HAM1 asset 
-#' plot(fit.macro, plot.single=TRUE, asset.name="HAM1")
-#' }
-#' @method plot TimeSeriesFactorModel
-#' @export
-plot.TimeSeriesFactorModel <- 
-  function(x,colorset=c(1:12),legend.loc=NULL,
-           which.plot=c("none","1L","2L","3L","4L","5L","6L","7L"),max.show=6,
-           plot.single=FALSE, asset.name,which.plot.single=c("none","1L","2L","3L","4L","5L","6L",
-                                                             "7L","8L","9L","10L","11L","12L","13L"),
-           VaR.method = "historical", ...) {
-    
-    if (plot.single==TRUE) {
-      ## inputs:
-      ## fit.macro        lm object summarizing factor model fit. It is assumed that
-      ##                  time series date information is included in the names component
-      ##                  of the residuals, fitted and model components of the object.   
-      ## asset.name         charater. The name of the single asset to be ploted.
-      ## which.plot.single       integer indicating which plot to create:
-      ##                  1     time series plot of actual and fitted values
-      ##                  2     time series plot of residuals with standard error bands
-      ##                  3     time series plot of squared residuals
-      ##                  4     time series plot of absolute residuals
-      ##                  5     SACF and PACF of residuals
-      ##                  6     SACF and PACF of squared residuals
-      ##                  7     SACF and PACF of absolute residuals
-      ##                  8     histogram of residuals with normal curve overlayed
-      ##                  9     normal qq-plot of residuals
-      ##                  10    CUSUM plot of recursive residuals
-      ##                  11    CUSUM plot of OLS residuals
-      ##                  12    CUSUM plot of recursive estimates relative to full sample estimates
-      ##                  13    rolling estimates over 24 month window
-      which.plot.single<-which.plot.single[1]
-      if (missing(asset.name) == TRUE) {
-        stop("Neet to specify an asset to plot if plot.single is TRUE.")
-      }
-      
-      fit.lm = x$asset.fit[[asset.name]]
-      
-      if (x$variable.selection == "none") {
-        
-        ## extract information from lm object
-        
-        factorNames = colnames(fit.lm$model)[-1]
-        fit.formula = as.formula(paste(asset.name,"~", paste(factorNames, collapse="+"), sep=" "))
-        residuals.z = zoo(residuals(fit.lm), as.Date(names(residuals(fit.lm))))
-        fitted.z = zoo(fitted(fit.lm), as.Date(names(fitted(fit.lm))))
-        actual.z = zoo(fit.lm$model[,1], as.Date(rownames(fit.lm$model)))
-        tmp.summary = summary(fit.lm)
-        
-        
-        if (which.plot.single=="none")
-          which.plot.single<-menu(c("time series plot of actual and fitted values",
-                                    "time series plot of residuals with standard error bands",
-                                    "time series plot of squared residuals",
-                                    "time series plot of absolute residuals",
-                                    "SACF and PACF of residuals",
-                                    "SACF and PACF of squared residuals",
-                                    "SACF and PACF of absolute residuals",
-                                    "histogram of residuals with normal curve overlayed",
-                                    "normal qq-plot of residuals",
-                                    "CUSUM plot of recursive residuals",
-                                    "CUSUM plot of OLS residuals",
-                                    "CUSUM plot of recursive estimates relative to full sample estimates",
-                                    "rolling estimates over 24 month window"),
-                                  title="\nMake a plot selection (or 0 to exit):\n")
-        switch(which.plot.single,
-               "1L" =  {
-                 ##  time series plot of actual and fitted values
-                 plot(actual.z, main=asset.name, ylab="Monthly performance", lwd=2, col="black")
-                 lines(fitted.z, lwd=2, col="blue")
-                 abline(h=0)
-                 legend(x="bottomleft", legend=c("Actual", "Fitted"), lwd=2, col=c("black","blue"))
-               }, 
-               
-               "2L" = {
-                 ## time series plot of residuals with standard error bands
-                 plot(residuals.z, main=asset.name, ylab="Monthly performance", lwd=2, col="black")
-                 abline(h=0)
-                 abline(h=2*tmp.summary$sigma, lwd=2, lty="dotted", col="red")
-                 abline(h=-2*tmp.summary$sigma, lwd=2, lty="dotted", col="red")
-                 legend(x="bottomleft", legend=c("Residual", "+/ 2*SE"), lwd=2,
-                        lty=c("solid","dotted"), col=c("black","red"))
-               },
-               "3L" = {
-                 ## time series plot of squared residuals
-                 plot(residuals.z^2, main=asset.name, ylab="Squared residual", lwd=2, col="black")
-                 abline(h=0)
-                 legend(x="topleft", legend="Squared Residuals", lwd=2, col="black")
-               },
-               "4L" = {
-                 ## time series plot of absolute residuals
-                 plot(abs(residuals.z), main=asset.name, ylab="Absolute residual", lwd=2, col="black")
-                 abline(h=0)
-                 legend(x="topleft", legend="Absolute Residuals", lwd=2, col="black")
-               },
-               "5L" = {
-                 ## SACF and PACF of residuals
-                 chart.ACFplus(residuals.z, main=paste("Residuals: ", asset.name, sep=""))
-               },
-               "6L" = {
-                 ## SACF and PACF of squared residuals
-                 chart.ACFplus(residuals.z^2, main=paste("Residuals^2: ", asset.name, sep=""))
-               },
-               "7L" = {
-                 ## SACF and PACF of absolute residuals
-                 chart.ACFplus(abs(residuals.z), main=paste("|Residuals|: ", asset.name, sep=""))
-               },
-               "8L" = {
-                 ## histogram of residuals with normal curve overlayed
-                 chart.Histogram(residuals.z, methods="add.normal", main=paste("Residuals: ", asset.name, sep=""))
-               },
-               "9L" = {
-                 ##  normal qq-plot of residuals
-                 chart.QQPlot(residuals.z, envelope=0.95, main=paste("Residuals: ", asset.name, sep=""))
-               },
-               "10L"= {
-                 ##  CUSUM plot of recursive residuals
-                 if (as.character(x$call["fit.method"]) == "OLS") {
-                   cusum.rec = efp(fit.formula, type="Rec-CUSUM", data=fit.lm$model)
-                   plot(cusum.rec, sub=asset.name)
-                 } else 
-                   stop("CUMSUM applies only on OLS method")
-               },
-               "11L"= {
-                 ##  CUSUM plot of OLS residuals
-                 if (as.character(x$call["fit.method"]) == "OLS") {        
-                   cusum.ols = efp(fit.formula, type="OLS-CUSUM", data=fit.lm$model)
-                   plot(cusum.ols, sub=asset.name)
-                 } else 
-                   stop("CUMSUM applies only on OLS method")   
-               },
-               "12L"= {
-                 ##  CUSUM plot of recursive estimates relative to full sample estimates
-                 if (as.character(x$call["fit.method"]) == "OLS") {        
-                   cusum.est = efp(fit.formula, type="fluctuation", data=fit.lm$model)
-                   plot(cusum.est, functional=NULL, sub=asset.name)
-                 } else 
-                   stop("CUMSUM applies only on OLS method")
-               },
-               "13L"= {
-                 ##  rolling regression over 24 month window
-                 if (as.character(x$call["fit.method"]) == "OLS") {   
-                   rollReg <- function(data.z, formula) {
-                     coef(lm(formula, data = as.data.frame(data.z)))  
-                   }
-                   reg.z = zoo(fit.lm$model, as.Date(rownames(fit.lm$model)))
-                   rollReg.z = rollapply(reg.z, FUN=rollReg, fit.formula, width=24, by.column = FALSE, 
-                                         align="right")
-                   plot(rollReg.z, main=paste("24-month rolling regression estimates:", asset.name, sep=" "))
-                 } else if (as.character(x$call["fit.method"]) == "DLS") {
-                   decay.factor <- as.numeric(as.character(x$call["decay.factor"]))
-                   t.length <- 24
-                   w <- rep(decay.factor^(t.length-1),t.length)
-                   for (k in 2:t.length) {
-                     w[k] = w[k-1]/decay.factor 
-                   }   
-                   w <- w/sum(w)
-                   rollReg.w <- function(data.z, formula,w) {
-                     coef(lm(formula,weights=w, data = as.data.frame(data.z)))  
-                   }
-                   reg.z = zoo(fit.lm$model[-length(fit.lm$model)], as.Date(rownames(fit.lm$model)))
-                   factorNames = colnames(fit.lm$model)[c(-1,-length(fit.lm$model))]
-                   fit.formula = as.formula(paste(asset.name,"~", paste(factorNames, collapse="+"), sep=" "))
-                   rollReg.z = rollapply(reg.z, FUN=rollReg.w, fit.formula,w, width=24, by.column = FALSE, 
-                                         align="right")
-                   plot(rollReg.z, main=paste("24-month rolling regression estimates:", asset.name, sep=" ")) 
-                 } 
-               },
-               invisible()
-        )
-        
-      } else {
-        # lar or lasso
-        
-        factor.names  = x$factors.names
-        plot.data   = x$data[,c(asset.name,factor.names)]
-        alpha = x$alpha[asset.name]
-        beta = as.matrix(x$beta[asset.name,])        
-        fitted.z = zoo(alpha+as.matrix(plot.data[,factor.names])%*%beta,as.Date(rownames(plot.data)))
-        residuals.z = plot.data[,asset.name]-fitted.z
-        actual.z = zoo(plot.data[,asset.name],as.Date(rownames(plot.data)))       
-        t = length(residuals.z)
-        k = length(factor.names)
-        
-        which.plot.single<-menu(c("time series plot of actual and fitted values",
-                                  "time series plot of residuals with standard error bands",
-                                  "time series plot of squared residuals",
-                                  "time series plot of absolute residuals",
-                                  "SACF and PACF of residuals",
-                                  "SACF and PACF of squared residuals",
-                                  "SACF and PACF of absolute residuals",
-                                  "histogram of residuals with normal curve overlayed",
-                                  "normal qq-plot of residuals"),
-                                title="\nMake a plot selection (or 0 to exit):\n")
-        switch(which.plot.single,
-               "1L" =  {
-                 #       "time series plot of actual and fitted values",
-                 
-                 plot(actual.z[,asset.name], main=asset.name, ylab="Monthly performance", lwd=2, col="black")
-                 lines(fitted.z, lwd=2, col="blue")
-                 abline(h=0)
-                 legend(x="bottomleft", legend=c("Actual", "Fitted"), lwd=2, col=c("black","blue"))
-               },
-               "2L"={    
-                 #       "time series plot of residuals with standard error bands"
-                 plot(residuals.z, main=asset.name, ylab="Monthly performance", lwd=2, col="black")
-                 abline(h=0)
-                 sigma = (sum(residuals.z^2)*(t-k)^-1)^(1/2)
-                 abline(h=2*sigma, lwd=2, lty="dotted", col="red")
-                 abline(h=-2*sigma, lwd=2, lty="dotted", col="red")
-                 legend(x="bottomleft", legend=c("Residual", "+/ 2*SE"), lwd=2,
-                        lty=c("solid","dotted"), col=c("black","red"))     
-                 
-               },   
-               "3L"={
-                 #       "time series plot of squared residuals"
-                 plot(residuals.z^2, main=asset.name, ylab="Squared residual", lwd=2, col="black")
-                 abline(h=0)
-                 legend(x="topleft", legend="Squared Residuals", lwd=2, col="black")   
-               },                
-               "4L" = {
-                 ## time series plot of absolute residuals
-                 plot(abs(residuals.z), main=asset.name, ylab="Absolute residual", lwd=2, col="black")
-                 abline(h=0)
-                 legend(x="topleft", legend="Absolute Residuals", lwd=2, col="black")
-               },
-               "5L" = {
-                 ## SACF and PACF of residuals
-                 chart.ACFplus(residuals.z, main=paste("Residuals: ", asset.name, sep=""))
-               },
-               "6L" = {
-                 ## SACF and PACF of squared residuals
-                 chart.ACFplus(residuals.z^2, main=paste("Residuals^2: ", asset.name, sep=""))
-               },
-               "7L" = {
-                 ## SACF and PACF of absolute residuals
-                 chart.ACFplus(abs(residuals.z), main=paste("|Residuals|: ", asset.name, sep=""))
-               },
-               "8L" = {
-                 ## histogram of residuals with normal curve overlayed
-                 chart.Histogram(residuals.z, methods="add.normal", main=paste("Residuals: ", asset.name, sep=""))
-               },
-               "9L" = {
-                 ##  normal qq-plot of residuals
-                 chart.QQPlot(residuals.z, envelope=0.95, main=paste("Residuals: ", asset.name, sep=""))
-               },          
-               invisible()  )
-        
-      }  
-      # plot group data      
-    } else {    
-      which.plot<-which.plot[1]
-      
-      if(which.plot=='none') 
-        which.plot<-menu(c("Fitted factor returns",
-                           "R square",
-                           "Variance of Residuals",
-                           "FM Correlation",
-                           "Factor Contributions to SD",
-                           "Factor Contributions to ES",
-                           "Factor Contributions to VaR"),
-                         title="Factor Analytics Plot \nMake a plot selection (or 0 to exit):\n") 
-      
-      
-      variable.selection = x$variable.selection
-      asset.names = x$assets.names
-      factor.names  = x$factors.names
-      plot.data   = x$data[,c(asset.names,factor.names)]
-      cov.factors = var(plot.data[,factor.names])
-      n <- length(asset.names)
-      
-      switch(which.plot,
-             
-             "1L" = {
-               if (n > max.show) {
-                 cat(paste("numbers of assets are greater than",max.show,", show only first",
-                           max.show,"assets",sep=" "))
-                 n <- max.show 
-               }      
-               par(mfrow=c(n/2,2))
-               if (variable.selection == "lar" || variable.selection == "lasso") {
-                 for (i in 1:n) {
-                   alpha = x$alpha[i]
-                   beta = as.matrix(x$beta[i,])        
-                   fitted = alpha+as.matrix(plot.data[,factor.names])%*%beta  
-                   dataToPlot = cbind(fitted, plot.data[,i])
-                   colnames(dataToPlot) = c("Fitted","Actual")
-                   main = paste("Factor Model fit for",asset.names[i],seq="")
-                   chart.TimeSeries(dataToPlot,colorset = colorset, legend.loc = legend.loc,main=main)
-                 }
-               } else {
-                 for (i in 1:n) {
-                   dataToPlot = cbind(fitted(x$asset.fit[[i]]), na.omit(plot.data[,i]))
-                   colnames(dataToPlot) = c("Fitted","Actual")
-                   main = paste("Factor Model fit for",asset.names[i],seq="")
-                   chart.TimeSeries(dataToPlot,colorset = colorset, legend.loc = legend.loc,main=main)
-                 }
-               }
-               par(mfrow=c(1,1))
-             },
-             "2L" ={
-               barplot(x$r2)
-             },
-             "3L" = {
-               barplot(x$resid.variance)  
-             },    
-             
-             "4L" = {
-               cov.fm<- factorModelCovariance(x$beta,cov.factors,x$resid.variance)    
-               cor.fm = cov2cor(cov.fm)
-               rownames(cor.fm) = colnames(cor.fm)
-               ord <- order(cor.fm[1,])
-               ordered.cor.fm <- cor.fm[ord, ord]
-               plotcorr(ordered.cor.fm, col=cm.colors(11)[5*ordered.cor.fm + 6])
-             },
-             "5L" = {
-               factor.sd.decomp.list = list()
-               for (i in asset.names) {
-                 factor.sd.decomp.list[[i]] =
-                   factorModelSdDecomposition(x$beta[i,],
-                                              cov.factors, x$resid.variance[i])
-               }
-               # function to extract contribution to sd from list
-               getCSD = function(x) {
-                 x$cSd.fm
-               }
-               # extract contributions to SD from list
-               cr.sd = sapply(factor.sd.decomp.list, getCSD)
-               rownames(cr.sd) = c(factor.names, "residual")
-               # create stacked barchart
-               barplot(cr.sd, main="Factor Contributions to SD",
-                       legend.text=T, args.legend=list(x="topleft"))
-               
-             },
-             "6L"={
-               factor.es.decomp.list = list()
-               if (variable.selection == "lar" || variable.selection == "lasso") {
-                 
-                 for (i in asset.names) {
-                   idx = which(!is.na(plot.data[,i]))
-                   alpha = x$alpha[i]
-                   beta = as.matrix(x$beta[i,])        
-                   fitted = alpha+as.matrix(plot.data[,factor.names])%*%beta
-                   residual = plot.data[,i]-fitted
-                   tmpData = cbind(coredata(plot.data[idx,i]),
-                                   coredata(plot.data[idx,factor.names]),
-                                   (residual[idx,]/sqrt(x$resid.variance[i])) )
-                   colnames(tmpData)[c(1,length(tmpData))] = c(i, "residual")
-                   factor.es.decomp.list[[i]] = 
-                     factorModelEsDecomposition(tmpData, 
-                                                x$beta[i,],
-                                                x$resid.variance[i], tail.prob=0.05)
-                   
-                 }
-               } else {
-                 
-                 for (i in asset.names) {
-                   # check for missing values in fund data
-                   idx = which(!is.na(plot.data[,i]))
-                   tmpData = cbind(coredata(plot.data[idx,i]),
-                                   coredata(plot.data[idx,factor.names]),
-                                   residuals(x$asset.fit[[i]])/sqrt(x$resid.variance[i]))
-                   colnames(tmpData)[c(1,dim(tmpData)[2])] = c(i, "residual")
-                   factor.es.decomp.list[[i]] = 
-                     factorModelEsDecomposition(tmpData, 
-                                                x$beta[i,],
-                                                x$resid.variance[i], tail.prob=0.05,
-                                                VaR.method=VaR.method)
-                 }
-               }     
-               
-               # stacked bar charts of percent contributions to SD
-               getCETL = function(x) {
-                 x$cES.fm
-               }
-               # report as positive number
-               cr.etl = sapply(factor.es.decomp.list, getCETL)
-               rownames(cr.etl) = c(factor.names, "residual")
-               barplot(cr.etl, main="Factor Contributions to ES",
-                       legend.text=T, args.legend=list(x="topleft")) 
-             },
-             "7L" ={
-               
-               factor.VaR.decomp.list = list()
-               
-               if (variable.selection == "lar" || variable.selection == "lasso") {
-                 
-                 for (i in asset.names) {
-                   idx = which(!is.na(plot.data[,i]))
-                   alpha = x$alpha[i]
-                   beta = as.matrix(x$beta[i,])        
-                   fitted = alpha+as.matrix(plot.data[,factor.names])%*%beta
-                   residual = plot.data[,i]-fitted
-                   tmpData = cbind(coredata(plot.data[idx,i]),
-                                   coredata(plot.data[idx,factor.names]),
-                                   (residual[idx,]/sqrt(x$resid.variance[i])) )
-                   colnames(tmpData)[c(1,length(tmpData))] = c(i, "residual")
-                   factor.VaR.decomp.list[[i]] = 
-                     factorModelVaRDecomposition(tmpData, 
-                                                 x$beta[i,],
-                                                 x$resid.variance[i], tail.prob=0.05,VaR.method=VaR.method)
-                   
-                 }
-               } else {
-                 for (i in asset.names) {
-                   # check for missing values in fund data
-                   idx = which(!is.na(plot.data[,i]))
-                   tmpData = cbind(coredata(plot.data[idx,i]),
-                                   coredata(plot.data[idx,factor.names]),
-                                   residuals(x$asset.fit[[i]])/sqrt(x$resid.variance[i]))
-                   colnames(tmpData)[c(1,dim(tmpData)[2])] = c(i, "residual")
-                   factor.VaR.decomp.list[[i]] = 
-                     factorModelVaRDecomposition(tmpData, 
-                                                 x$beta[i,],
-                                                 x$resid.variance[i], tail.prob=0.05,
-                                                 VaR.method=VaR.method)
-                 }
-               }
-               
-               # stacked bar charts of percent contributions to SD
-               getCVaR = function(x) {
-                 x$cVaR.fm
-               }
-               # report as positive number
-               cr.VaR = sapply(factor.VaR.decomp.list, getCVaR)
-               rownames(cr.VaR) = c(factor.names, "residual")
-               barplot(cr.VaR, main="Factor Contributions to VaR",
-                       legend.text=T, args.legend=list(x="topleft"))
-             },
-             invisible()       
-      )         
-    }       
-    
-  }

Added: pkg/FactorAnalytics/R/plot.tsfm.r
===================================================================
--- pkg/FactorAnalytics/R/plot.tsfm.r	                        (rev 0)
+++ pkg/FactorAnalytics/R/plot.tsfm.r	2014-06-26 03:57:07 UTC (rev 3441)
@@ -0,0 +1,486 @@
+#' plot TimeSeriesFactorModel object.
+#' 
+#' Generic function of plot method for fitTimeSeriesFactorModel. Either plot
+#' all assets or choose a single asset to plot.
+#' 
+#' 
+#' @param x fit object created by \code{fitTimeSeriesFactorModel}.
+#' @param colorset Defualt colorset the same as \code{barplot}.
+#' @param legend.loc Plot legend or not. Defualt is \code{NULL}.
+#' @param which.plot Integer indicates which plot to create: "none" will
+#' create a menu to choose. Defualt is none.\cr 
+#' 1 = "Fitted factor returns", \cr
+#' 2 = "R square", \cr
+#' 3 = "Variance of Residuals",\cr
+#' 4 = "FM Correlation",\cr
+#' 5 = "Factor Contributions to SD",\cr
+#' 6 = "Factor Contributions to ES",\cr
+#' 7 = "Factor Contributions to VaR"
+#' @param max.show Maximum assets to plot. Default is 6.
+#' @param plot.single Plot a single asset of lm class. Defualt is \code{FALSE}.
+#' @param asset.name Name of the asset to be plotted.
+#' @param which.plot.single Integer indicates which plot to create: "none"
+#' will create a menu to choose. Defualt is none.\cr
+#'  1 = time series plot of actual and fitted values,\cr
+#'  2 = time series plot of residuals with standard error bands, \cr
+#'  3 = time series plot of squared residuals, \cr
+#'  4 = time series plot of absolute residuals,\cr
+#'  5 = SACF and PACF of residuals,\cr
+#'  6 = SACF and PACF of squared residuals,\cr
+#'  7 = SACF and PACF of absolute residuals,\cr
+#'  8 = histogram of residuals with normal curve overlayed,\cr
+#'  9 = normal qq-plot of residuals,\cr
+#'  10= CUSUM plot of recursive residuals,\cr
+#'  11= CUSUM plot of OLS residuals,\cr
+#'  12= CUSUM plot of recursive estimates relative to full sample estimates,\cr
+#'  13= rolling estimates over 24 month window.
+#' @param VaR.method Character, method for computing VaR. Valid choices are
+#' either "modified","gaussian","historical", "kernel". computation is done with the \code{VaR}
+#' in the PerformanceAnalytics package. Default is "historical".
+#' @param ... further arguments passed to or from other methods.
+#' @author Eric Zivot and Yi-An Chen.
+#' @examples
+#' 
+#' \dontrun{
+#' # load data from the database
+#' data(managers.df)
+#' fit.macro <- fitTimeseriesFactorModel(assets.names=colnames(managers.df[,(1:6)]),
+#'                                 factors.names=c("EDHEC.LS.EQ","SP500.TR"),
+#'                                 data=managers.df,fit.method="OLS")
+#' # plot of all assets and show only first 4 assets.
+#' plot(fit.macro,max.show=4)
+#' # single plot of HAM1 asset 
+#' plot(fit.macro, plot.single=TRUE, asset.name="HAM1")
+#' }
+#' @method plot TimeSeriesFactorModel
+#' @export
+plot.TimeSeriesFactorModel <- 
+  function(x,colorset=c(1:12),legend.loc=NULL,
+           which.plot=c("none","1L","2L","3L","4L","5L","6L","7L"),max.show=6,
+           plot.single=FALSE, asset.name,which.plot.single=c("none","1L","2L","3L","4L","5L","6L",
+                                                             "7L","8L","9L","10L","11L","12L","13L"),
+           VaR.method = "historical", ...) {
+    
+    if (plot.single==TRUE) {
+      ## inputs:
+      ## fit.macro        lm object summarizing factor model fit. It is assumed that
+      ##                  time series date information is included in the names component
+      ##                  of the residuals, fitted and model components of the object.   
+      ## asset.name         charater. The name of the single asset to be ploted.
+      ## which.plot.single       integer indicating which plot to create:
+      ##                  1     time series plot of actual and fitted values
+      ##                  2     time series plot of residuals with standard error bands
+      ##                  3     time series plot of squared residuals
+      ##                  4     time series plot of absolute residuals
+      ##                  5     SACF and PACF of residuals
+      ##                  6     SACF and PACF of squared residuals
+      ##                  7     SACF and PACF of absolute residuals
+      ##                  8     histogram of residuals with normal curve overlayed
+      ##                  9     normal qq-plot of residuals
+      ##                  10    CUSUM plot of recursive residuals
+      ##                  11    CUSUM plot of OLS residuals
+      ##                  12    CUSUM plot of recursive estimates relative to full sample estimates
[TRUNCATED]

To get the complete diff run:
    svnlook diff /svnroot/returnanalytics -r 3441


More information about the Returnanalytics-commits mailing list