Hello All,
I have a function which outputs graphically the results of a pass-through OAS analysis. ?The viewport is 2x2. ?The idea is to leave a small margin at the top and enter a title with something like the following.?
Bond Lab Pass Through OAS?
Bond Id: foo at bond.id
OAS : foo at OAS
I am a little lost on the viewport and can't quite get to the last step. ?The function is below and the code I have question about is in red.
Glenn
The function is below - The code I have a question about is in red
#' OAS Analaysis of Pass Though MBS
#'?
#' Function calls BondLab PassThroughOAS and plots the results
#' copyright Bond Lab Technologies, Inc 2015
#' @importFrom BondLab PassThroughOAS
#' @param bond.id a character string the bond id
#' @param trade.date a character string the trade date
#' @param settlement.date a character string the settlement date
#' @param original.balance a numeric value the original balance
#' @param price a numeric value the price
#' @param sigma a numeric the **annualized** volatility. ?The volatilty assumption assumes
#' a trading year of 252 days
#' @export
PassThrough.OAS <- function(bond.id = character,
? ? ? ? ? ? ? ? ? ? ? ? ? ? trade.date = character,
? ? ? ? ? ? ? ? ? ? ? ? ? ? settlement.date = character,
? ? ? ? ? ? ? ? ? ? ? ? ? ? original.balance = numeric(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? price = numeric(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? sigma = numeric(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? paths = numeric()){
? set.seed = 100
? sigma = sigma/sqrt(trading.days)
? OAS.Analysis <- PassThroughOAS(bond.id = bond.id,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?trade.date = trade.date,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?settlement.date = settlement.date,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?original.bal = original.balance,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?price = price, ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sigma = sigma,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?paths = paths,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PrepaymentAssumption = "MODEL")
??
? # price distribution
? OAS.Price <- data.frame(OAS.Analysis at PriceDist)
? OAS.Price <- data.frame(cbind(OAS.Price, seq(1: length(OAS.Price))))
? colnames(OAS.Price) <- c("value", "count")
??
? price.dist <- ggplot(OAS.Price, aes(x = value )) +
? ? geom_density(fill = "#56B4E9", colour = "#56B4E9", alpha = .6) +
? ? geom_histogram(aes(y =..density..), color = "lightgrey", fill = "#0072B2", bindwidth = .01) +
? ? theme_minimal() +
? ? #scale_x_continuous(breaks = seq(80,120, 5)) +
? ? labs(title = "Price Distribution") +
? ? ylab("Density")+
? ? xlab("Path Price") +
? ? theme(panel.grid.major = element_line(size = .25, color = "grey")) +
? ? theme(axis.text = element_text(size = 15)) +
? ? theme(axis.title = element_text(size = 20)) +?
? ? theme(legend.position = "none")
??
? # modified duration distribution
? OAS.Mdur <- data.frame(OAS.Analysis at PathModDur)
? OAS.Mdur <- data.frame(cbind(OAS.Mdur, seq(1:length(OAS.Mdur))))
? colnames(OAS.Mdur) <- c("value", "count")
??
? Mdur.dist <- ggplot(OAS.Mdur, aes(x = value )) +
? ? geom_density(fill = "#56B4E9", colour = "#56B4E9", alpha = .6) +
? ? geom_histogram(aes(y =..density..), color = "lightgrey", fill = "#0072B2", bindwidth = .01) +
? ? theme_minimal() +
? ? #scale_x_continuous(breaks = seq(80,120, 5)) +
? ? labs(title = "Mod. Duration Distribution") +
? ? ylab("Density")+
? ? xlab("Path Mod. Duration") +
? ? theme(panel.grid.major = element_line(size = .25, color = "grey")) +
? ? theme(axis.text = element_text(size = 15)) +
? ? theme(axis.title = element_text(size = 20)) +?
? ? theme(legend.position = "none")
??
? ? layout <- grid.layout(nrow = 2, ncol = 2,
? ? ? ? ? ? ? ? ? ? ? ? ? widths = unit(c(2,2), c("null", "null")),
? ? ? ? ? ? ? ? ? ? ? ? ? heights = unit(c(.3, 2), c("null", "null")))
??
? ? vplayout <- function(...){
? ? grid.newpage()
? ? pushViewport(viewport(layout = layout))}
??
? ? subplot <- function(x, y) {viewport(layout.pos.row = x,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? layout.pos.col = y)}
? ? mmplot <- function(a, b) {
? ? vplayout()
? ? print(a, vp = subplot(2, 1))
? ? print(b, vp = subplot(2, 2))
? }
??
? OAS <- mmplot(price.dist, Mdur.dist)
? plot(OAS)
??
}?