Introduction

The goal of this file is to gain a better understanding of the NAIC’s stochastic scenario generator under a variety of interest rate environments, with the hopes that a better understanding of the generator will assist in reducing Stochastic Reserve runtime.

The first step in doing so was to download the scenario generator from the website below: https://www.actuary.org/content/economic-scenario-generators

After downloading the generator and reviewing the FAQ’s, four sets of scenarios were generated. One scenario was under the interest rate environment as of 12/31, one was with rates shocked down 300bps (with a 1 bp floor), and one was with rates shocked MRP 300 bps. The shocked scenarios also contained shocked mean reversion parameters. Finally, a forth scenario was generated - this had baseline rates, but the mean reversion strength parameter was doubled.

These scenarios were generated. The scenario generator creates 10,000 scenarios, with projected interest rates for 360 months. The generator only creates treasury rates; corporate or other asset spreads must be added by a qualified actuary.

Preliminary analysis was conducted as follows.

Read in Data for 10 year treasury; under current interest rate environment, +300bps, -300bps, and the MRP strength scenario.

Base10YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_10y format.csv")
Base10YrCST2 <- Base10YrCST
Base10YrCST <- melt(Base10YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
Base10YrCSTsubset <- Base10YrCST[1:3610,]


Up10YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_10y format.csv")
Up10YrCST2 <- Up10YrCST
Up10YrCST <- melt(Up10YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
Up10YrCSTsubset <- Up10YrCST[1:3610,]


Dn10YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - dn300 - 10K/UST_10y format.csv")
Dn10YrCST2 <- Dn10YrCST
Dn10YrCST <- melt(Dn10YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
Dn10YrCSTsubset <- Dn10YrCST[1:3610,]

# MRP has mean reversion speed set to 0.01 to 0.00509
MRP10YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_10y format.csv")
MRP10YrCST2 <- MRP10YrCST
MRP10YrCST <- melt(MRP10YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
MRP10YrCSTsubset <- MRP10YrCST[1:3610,]

Preliminary data exploration

summary(Base10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00783 0.01933 0.02418 0.02615 0.03063 0.19796
summary(Dn10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01090 0.01219 0.01299 0.01419 0.08657
summary(Up10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00813 0.04053 0.04866 0.05270 0.06028 0.21801
summary(MRP10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00794 0.02185 0.02675 0.02785 0.03239 0.15526
sd(Base10YrCST[,3])
## [1] 0.009711092
sd(Dn10YrCST[,3])
## [1] 0.00326597
sd(Up10YrCST[,3])
## [1] 0.01938166
sd(MRP10YrCST[,3])
## [1] 0.008455064

Data exploration by scenario

This is slightly more complex than the analysis above - I took the average and standard deviation of the 10 year CST rates in each scenarios, then averaged those numbers across all 10,000 scenarios. The goal was to learn how much one scenario varied from another.

SummaryBase10YrCST <- Base10YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base Summary")
## [1] "Base Summary"
summary(SummaryBase10YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01339   Min.   :0.001565  
##  1st Qu.:0.02214   1st Qu.:0.004429  
##  Median :0.02533   Median :0.006054  
##  Mean   :0.02615   Mean   :0.006931  
##  3rd Qu.:0.02921   3rd Qu.:0.008440  
##  Max.   :0.06999   Max.   :0.050614
SummaryDn10YrCST <- Dn10YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Down 300bps Summary")
## [1] "Down 300bps Summary"
summary(SummaryDn10YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01026   Min.   :0.000849  
##  1st Qu.:0.01174   1st Qu.:0.001618  
##  Median :0.01255   Median :0.002093  
##  Mean   :0.01299   Mean   :0.002428  
##  3rd Qu.:0.01376   3rd Qu.:0.002839  
##  Max.   :0.03111   Max.   :0.021529
SummaryUp10YrCST <- Up10YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Up 300bps Summary")
## [1] "Up 300bps Summary"
summary(SummaryUp10YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.02537   Min.   :0.003060  
##  1st Qu.:0.04367   1st Qu.:0.007729  
##  Median :0.05058   Median :0.010453  
##  Mean   :0.05270   Mean   :0.012500  
##  3rd Qu.:0.05907   3rd Qu.:0.014846  
##  Max.   :0.14088   Max.   :0.055564
SummaryMRP10YrCST <- MRP10YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("MRP Speed doubled Summary")
## [1] "MRP Speed doubled Summary"
summary(SummaryMRP10YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01652   Min.   :0.001811  
##  1st Qu.:0.02486   1st Qu.:0.004890  
##  Median :0.02741   Median :0.006225  
##  Mean   :0.02785   Mean   :0.006782  
##  3rd Qu.:0.03027   3rd Qu.:0.008026  
##  Max.   :0.05645   Max.   :0.037872

A few random scenarios

The goal of these plots is to visualize some of the variance (or lack therof) found above. I set the y axis manually to show scale

p <-ggplot(Base10YrCSTsubset, aes(x=Month, y=Interest_Rate))+
    geom_line(aes(color=Scenario), size=0.2) +
   xlab("Month") + #ylab("Interest Rate") +
  scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.15)) +
    ggtitle("Int Rates By Scen & Month, Curr Environment") +
  theme(legend.position = "none") 

ggplotly(p)
q <-ggplot(Up10YrCSTsubset, aes(x=Month, y=Interest_Rate))+
    geom_line(aes(color=Scenario), size=0.2) +
   xlab("Month") + #ylab("Interest Rate") +
  scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0,0.15)) +
    ggtitle("+300bps Environment") +
  theme(legend.position = "none") 
  

ggplotly(q)
r <-ggplot(Dn10YrCSTsubset, aes(x=Month, y=Interest_Rate))+
    geom_line(aes(color=Scenario), size=0.2) +
   xlab("Month") + #ylab("Interest Rate") +
  scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.15)) +
    ggtitle("-300bps Environment") +
  theme(legend.position = "none")

ggplotly(r)
s <-ggplot(MRP10YrCSTsubset, aes(x=Month, y=Interest_Rate))+
    geom_line(aes(color=Scenario), size=0.2) +
   xlab("Month") + #ylab("Interest Rate") +
  scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.15)) +
    ggtitle("MRP Speed increasing") +
  theme(legend.position = "none")

ggplotly(s)

Map Interest rate curve

First, import data.

Base3mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_3m format.csv")
Base3mCST <- melt(Base3mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base6mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_6m format.csv")
Base6mCST <- melt(Base6mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base1YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_1Y format.csv")
Base1YrCST <- melt(Base1YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base2YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_2Y format.csv")
Base2YrCST <- melt(Base2YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base3YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_3Y format.csv")
Base3YrCST <- melt(Base3YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base5YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_5Y format.csv")
Base5YrCST <- melt(Base5YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base7YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_7Y format.csv")
Base7YrCST <- melt(Base7YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
#Already imported 10
Base20YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_20Y format.csv")
Base20YrCST <- melt(Base20YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base30YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 10K/UST_30Y format.csv")
Base30YrCST <- melt(Base30YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Then, create data frame

xaxis <-matrix(c(0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 30))
colnames(xaxis) <- c('Tenor')
xaxis = as.data.frame(xaxis)
x<-1
month1 <-matrix(c(x, x, x, x, x, x, x, x, x, x))
colnames(month1) <- c('Month')
month1 = as.data.frame(month1)

# https://www.statology.org/create-table-in-r/
Scen1Month1Curve <-matrix(c(Base3mCST[1,3],
                           Base6mCST[1,3],
                           Base1YrCST[1,3],
                           Base2YrCST[1,3],
                           Base3YrCST[1,3],
                           Base5YrCST[1,3],
                           Base7YrCST[1,3],
                           Base10YrCST[1,3],
                           Base20YrCST[1,3],
                           Base30YrCST[1,3]))
colnames(Scen1Month1Curve) <- c('Rate')
rownames(Scen1Month1Curve) <- c('3Mo',
                                '6Mo',
                                '1Yr',
                                '2Yr',
                                '3Yr',
                                '5Yr',
                                '7Yr',
                                '10Yr',
                                '20Yr',
                                '30Yr')

Scen1Month1Curve = as.data.frame(Scen1Month1Curve)
Scen1Month1Curve <- cbind.data.frame(month1,Scen1Month1Curve,xaxis)
x = 360
month360 <-matrix(c(x, x, x, x, x, x, x, x, x, x))
colnames(month360) <- c('Month')
month360 = as.data.frame(month360)
Scen1Month360Curve <-matrix(c(Base3mCST[x,3],
                           Base6mCST[x,3],
                           Base1YrCST[x,3],
                           Base2YrCST[x,3],
                           Base3YrCST[x,3],
                           Base5YrCST[x,3],
                           Base7YrCST[x,3],
                           Base10YrCST[x,3],
                           Base20YrCST[x,3],
                           Base30YrCST[x,3]))
colnames(Scen1Month360Curve) <- c('Rate')
Scen1Month360Curve <- cbind.data.frame(month360,Scen1Month360Curve,xaxis)
Combo <- rbind(Scen1Month1Curve, Scen1Month360Curve)

Finally, visualize Baseline Scenario 1 Months 1 & 360 - curve shape

s <-ggplot(Combo, aes(x=Tenor, y=Rate))+
      geom_line(aes(color=Month), size=0.2) +
   xlab("Tenor") + 
   scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.04)) +
   ggtitle("Scenario 1 Interest Rate Curves, Current Environment") +
    theme(legend.position = "none")
ggplotly(s)

I find it interesting that the curve is flattening.

Now do the same for the mean reversion parameter speed doubled; read in data first

MRP3mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_3m format.csv")
MRP3mCST <- melt(MRP3mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP6mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_6m format.csv")
MRP6mCST <- melt(MRP6mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP1YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_1Y format.csv")
MRP1YrCST <- melt(MRP1YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP2YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_2Y format.csv")
MRP2YrCST <- melt(MRP2YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP3YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_3Y format.csv")
MRP3YrCST <- melt(MRP3YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP5YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_5Y format.csv")
MRP5YrCST <- melt(MRP5YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP7YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_7Y format.csv")
MRP7YrCST <- melt(MRP7YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
#Already imported 10
MRP20YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_20Y format.csv")
MRP20YrCST <- melt(MRP20YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

MRP30YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - MRP/UST_30Y format.csv")
MRP30YrCST <- melt(MRP30YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Then create data frame

MRPScen1Month1Curve <-matrix(c(MRP3mCST[1,3],
                           MRP6mCST[1,3],
                           MRP1YrCST[1,3],
                           MRP2YrCST[1,3],
                           MRP3YrCST[1,3],
                           MRP5YrCST[1,3],
                           MRP7YrCST[1,3],
                           MRP10YrCST[1,3],
                           MRP20YrCST[1,3],
                           MRP30YrCST[1,3]))
colnames(MRPScen1Month1Curve) <- c('Rate')
rownames(MRPScen1Month1Curve) <- c('3Mo',
                                '6Mo',
                                '1Yr',
                                '2Yr',
                                '3Yr',
                                '5Yr',
                                '7Yr',
                                '10Yr',
                                '20Yr',
                                '30Yr')

MRPScen1Month1Curve = as.data.frame(MRPScen1Month1Curve)
MRPScen1Month1Curve <- cbind.data.frame(month1,MRPScen1Month1Curve,xaxis)

MRPScen1Month360Curve <-matrix(c(MRP3mCST[x,3],
                           MRP6mCST[x,3],
                           MRP1YrCST[x,3],
                           MRP2YrCST[x,3],
                           MRP3YrCST[x,3],
                           MRP5YrCST[x,3],
                           MRP7YrCST[x,3],
                           MRP10YrCST[x,3],
                           MRP20YrCST[x,3],
                           MRP30YrCST[x,3]))
colnames(MRPScen1Month360Curve) <- c('Rate')
MRPScen1Month360Curve <- cbind.data.frame(month360,MRPScen1Month360Curve,xaxis)
MRPCombo <- rbind(MRPScen1Month1Curve, MRPScen1Month360Curve)

Visualize MRP Scenario 1 Months 1 & 360 - curve shape

t <-ggplot(MRPCombo, aes(x=Tenor, y=Rate))+
      geom_line(aes(color=Month), size=0.2) +
   xlab("Tenor") + 
   scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.1)) +
   ggtitle("Scenario 1 Interest Rate Curves, MRP strength increasing") +
    theme(legend.position = "none")
ggplotly(t)

Now do the same for + 300; read in data first

Up3mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_3m format.csv")
Up3mCST <- melt(Up3mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up6mCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_6m format.csv")
Up6mCST <- melt(Up6mCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up1YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_1Y format.csv")
Up1YrCST <- melt(Up1YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up2YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_2Y format.csv")
Up2YrCST <- melt(Up2YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up3YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_3Y format.csv")
Up3YrCST <- melt(Up3YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up5YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_5Y format.csv")
Up5YrCST <- melt(Up5YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up7YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_7Y format.csv")
Up7YrCST <- melt(Up7YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")
#Already imported 10
Up20YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_20Y format.csv")
Up20YrCST <- melt(Up20YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Up30YrCST <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output +300 - 10K/UST_30Y format.csv")
Up30YrCST <- melt(Up30YrCST,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Then create data frame

UpScen1Month1Curve <-matrix(c(Up3mCST[1,3],
                           Up6mCST[1,3],
                           Up1YrCST[1,3],
                           Up2YrCST[1,3],
                           Up3YrCST[1,3],
                           Up5YrCST[1,3],
                           Up7YrCST[1,3],
                           Up10YrCST[1,3],
                           Up20YrCST[1,3],
                           Up30YrCST[1,3]))
colnames(UpScen1Month1Curve) <- c('Rate')
rownames(UpScen1Month1Curve) <- c('3Mo',
                                '6Mo',
                                '1Yr',
                                '2Yr',
                                '3Yr',
                                '5Yr',
                                '7Yr',
                                '10Yr',
                                '20Yr',
                                '30Yr')

UpScen1Month1Curve = as.data.frame(UpScen1Month1Curve)
UpScen1Month1Curve <- cbind.data.frame(month1,UpScen1Month1Curve,xaxis)

UpScen1Month360Curve <-matrix(c(Up3mCST[x,3],
                           Up6mCST[x,3],
                           Up1YrCST[x,3],
                           Up2YrCST[x,3],
                           Up3YrCST[x,3],
                           Up5YrCST[x,3],
                           Up7YrCST[x,3],
                           Up10YrCST[x,3],
                           Up20YrCST[x,3],
                           Up30YrCST[x,3]))
colnames(UpScen1Month360Curve) <- c('Rate')
UpScen1Month360Curve <- cbind.data.frame(month360,UpScen1Month360Curve,xaxis)
UpCombo <- rbind(UpScen1Month1Curve, UpScen1Month360Curve)

Visualize +300bps Scenario 1 Months 1 & 360 - curve shape

t <-ggplot(UpCombo, aes(x=Tenor, y=Rate))+
      geom_line(aes(color=Month), size=0.2) +
   xlab("Tenor") + 
   scale_y_continuous(name="Interest Rate", labels = scales::percent, limits = c(0, 0.1)) +
   ggtitle("Scenario 1 Interest Rate Curves, +300 Environment") +
    theme(legend.position = "none")
ggplotly(t)

This +300 chart is very interesting; I wasn’t expecting the rate curve to flatten out even more. After seeing this, I decided to analyze the “flatness” of each each scenario. This particular scenario could be a fluke. However, if it was not a fluke and the variance of each +300 scenario is that low, it could tell us not to bother with many scenarios in “up” scenarios of CFT. I should probably come up with a statistical test to tell us it is indeed “flat”…need to think that through.

Avg and standard deviations for each tenor, across all months

summary(Up3mCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.02678 0.03772 0.04250 0.05272 0.29259
summary(Up6mCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.02772 0.03842 0.04315 0.05314 0.28679
summary(Up1YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.02940 0.03969 0.04434 0.05393 0.27627
summary(Up2YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00226 0.03214 0.04180 0.04632 0.05527 0.25886
summary(Up3YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00395 0.03423 0.04345 0.04785 0.05637 0.24611
summary(Up5YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00620 0.03712 0.04578 0.05002 0.05803 0.22920
summary(Up7YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00720 0.03892 0.04728 0.05142 0.05917 0.22237
summary(Up10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00813 0.04053 0.04866 0.05270 0.06028 0.21801
summary(Up20YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00935 0.04262 0.05065 0.05447 0.06185 0.21218
summary(Up30YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00943 0.04329 0.05124 0.05505 0.06242 0.21184
sd(Up3mCST[,3])
## [1] 0.02412551
sd(Up6mCST[,3])
## [1] 0.02372688
sd(Up1YrCST[,3])
## [1] 0.02302754
sd(Up2YrCST[,3])
## [1] 0.0219464
sd(Up3YrCST[,3])
## [1] 0.02118878
sd(Up5YrCST[,3])
## [1] 0.02026286
sd(Up7YrCST[,3])
## [1] 0.0197639
sd(Up10YrCST[,3])
## [1] 0.01938166
sd(Up20YrCST[,3])
## [1] 0.01897378
sd(Up30YrCST[,3])
## [1] 0.01887676

Mins and Mean’s follow the patterns I expect, and imply the flatness doesn’t persist for all scenarios/projection periods. However, the max’s are wild! They imply there are inverted yield curves in the scenarios. To be sure, let’s look further.

Checking for inversion

Create a new variable - 30yr minus 3m.

UpScenInversion <- Up30YrCST
UpScenInversion$Delta <- Up30YrCST[,3] - Up3mCST[,3]
print("Summary of inversion across all up scenarios, projection months")
## [1] "Summary of inversion across all up scenarios, projection months"
summary(UpScenInversion[,4]) #confirms inversion
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.11690  0.00530  0.01285  0.01255  0.02009  0.12067
sd(UpScenInversion[,4])
## [1] 0.01229981
InversionByScen <-Up3mCST[1,]
looper <-c(1:10000)
for (val in looper)(
InversionByScen[val,3] <- Up30YrCST[361*val,3] - Up3mCST[361*val - 360,3])
print("Summary of inversion by end of each scenario")
## [1] "Summary of inversion by end of each scenario"
summary(InversionByScen[,3])
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.01683  0.01224  0.02309  0.02770  0.03771  0.15884
print("Count of up scenarios ending with an inverted yield curve")
## [1] "Count of up scenarios ending with an inverted yield curve"
sum(InversionByScen[,3] < 0 )
## [1] 446

The min is negative 11bps, meaning there’s quite a bit of inversion.

Looking at beginning, ending values in each scenario

Create a new variable - month 361 - 1

Up3mCSTDeltas <- Up3mCST[1,]
looper <-c(1:10000)
for (val in looper)(
Up3mCSTDeltas[val,3] <- Up3mCST[361*val,3] - Up3mCST[361*val - 360,3])

Up6mCSTDeltas <- Up6mCST[1,]
for (val in looper)(
Up6mCSTDeltas[val,3] <- Up6mCST[361*val,3] - Up6mCST[361*val - 360,3])

Up1YrCSTDeltas <- Up1YrCST[1,]
for (val in looper)(
Up1YrCSTDeltas[val,3] <- Up1YrCST[361*val,3] - Up1YrCST[361*val - 360,3])

Up2YrCSTDeltas <- Up2YrCST[1,]
for (val in looper)(
Up2YrCSTDeltas[val,3] <- Up2YrCST[361*val,3] - Up2YrCST[361*val - 360,3])

Up3YrCSTDeltas <- Up3YrCST[1,]
for (val in looper)(
Up3YrCSTDeltas[val,3] <- Up3YrCST[361*val,3] - Up3YrCST[361*val - 360,3])

Up5YrCSTDeltas <- Up5YrCST[1,]
for (val in looper)(
Up5YrCSTDeltas[val,3] <- Up5YrCST[361*val,3] - Up5YrCST[361*val - 360,3])

Up7YrCSTDeltas <- Up7YrCST[1,]
for (val in looper)(
Up7YrCSTDeltas[val,3] <- Up7YrCST[361*val,3] - Up7YrCST[361*val - 360,3])

Up10YrCSTDeltas <- Up10YrCST[1,]
for (val in looper)(
Up10YrCSTDeltas[val,3] <- Up10YrCST[361*val,3] - Up10YrCST[361*val - 360,3])

Up20YrCSTDeltas <- Up20YrCST[1,]
for (val in looper)(
Up20YrCSTDeltas[val,3] <- Up20YrCST[361*val,3] - Up20YrCST[361*val - 360,3])

Up30YrCSTDeltas <- Up30YrCST[1,]
for (val in looper)(
Up30YrCSTDeltas[val,3] <- Up30YrCST[361*val,3] - Up30YrCST[361*val - 360,3])

Taking avg and standard deviation for each

summary(Up3mCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.030500 -0.003403  0.009790  0.015409  0.027310  0.205150
sd(Up3mCSTDeltas[,3])
## [1] 0.02778782
summary(Up6mCSTDeltas[,3])
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.03180 -0.00385  0.00916  0.01475  0.02652  0.20078
sd(Up6mCSTDeltas[,3])
## [1] 0.02739338
summary(Up1YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.033800 -0.004180  0.008355  0.013905  0.025442  0.193230
sd(Up1YrCSTDeltas[,3])
## [1] 0.02670031
summary(Up2YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.033460 -0.004953  0.006950  0.012429  0.023390  0.180640
sd(Up2YrCSTDeltas[,3])
## [1] 0.02563798
summary(Up3YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.033000 -0.005452  0.006185  0.011530  0.022110  0.171070
sd(Up3YrCSTDeltas[,3])
## [1] 0.02490018
summary(Up5YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.032720 -0.005542  0.005650  0.010754  0.021010  0.159220
sd(Up5YrCSTDeltas[,3])
## [1] 0.02400803
summary(Up7YrCSTDeltas[,3])
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.03275 -0.00556  0.00532  0.01033  0.02032  0.15398
sd(Up7YrCSTDeltas[,3])
## [1] 0.02353472
summary(Up10YrCSTDeltas[,3])
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.03264 -0.00488  0.00596  0.01080  0.02077  0.14999
sd(Up10YrCSTDeltas[,3])
## [1] 0.02317303
summary(Up20YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.035940 -0.007162  0.003645  0.008307  0.018142  0.141520
sd(Up20YrCSTDeltas[,3])
## [1] 0.02281227
summary(Up30YrCSTDeltas[,3])
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.035230 -0.006160  0.004690  0.009297  0.019310  0.140440
sd(Up30YrCSTDeltas[,3])
## [1] 0.02272164

There are implications here for our reinvestment assumption.

Statistical tests

## 
##  Shapiro-Wilk normality test
## 
## data:  Base10YrCST2$X1
## W = 0.95593, p-value = 6.222e-09
## 
##  Shapiro-Wilk normality test
## 
## data:  Up10YrCST2$X1
## W = 0.90554, p-value = 3.222e-14
## 
##  Shapiro-Wilk normality test
## 
## data:  Dn10YrCST2$X1
## W = 0.87221, p-value < 2.2e-16
## 
##  Shapiro-Wilk normality test
## 
## data:  MRP10YrCST2$X1
## W = 0.96745, p-value = 3.25e-07

Next, evaluate something with the subsets….maybe min, max, and std dev etc by subset and tenor. Do subsets chose widest range of scenarios?

Read in the subsets

#50 SCENARIOS
Base3mCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_3m format.csv")
Base3mCST50 <- melt(Base3mCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base6mCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_6m format.csv")
Base6mCST50 <- melt(Base6mCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base1YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_1Y format.csv")
Base1YrCST50 <- melt(Base1YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base2YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_2Y format.csv")
Base2YrCST50 <- melt(Base2YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base3YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_3Y format.csv")
Base3YrCST50 <- melt(Base3YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base5YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_5Y format.csv")
Base5YrCST50 <- melt(Base5YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base7YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_7Y format.csv")
Base7YrCST50 <- melt(Base7YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base10YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_10Y format.csv")
Base10YrCST50 <- melt(Base10YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base20YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_20Y format.csv")
Base20YrCST50 <- melt(Base20YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base30YrCST50 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 50/UST_30Y format.csv")
Base30YrCST50 <- melt(Base30YrCST50,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

#200 SCENARIOS
Base3mCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_3m format.csv")
Base3mCST200 <- melt(Base3mCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base6mCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_6m format.csv")
Base6mCST200 <- melt(Base6mCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base1YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_1Y format.csv")
Base1YrCST200 <- melt(Base1YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base2YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_2Y format.csv")
Base2YrCST200 <- melt(Base2YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base3YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_3Y format.csv")
Base3YrCST200 <- melt(Base3YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base5YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_5Y format.csv")
Base5YrCST200 <- melt(Base5YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base7YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_7Y format.csv")
Base7YrCST200 <- melt(Base7YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base10YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_10Y format.csv")
Base10YrCST200 <- melt(Base10YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base20YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_20Y format.csv")
Base20YrCST200 <- melt(Base20YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base30YrCST200 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 200/UST_30Y format.csv")
Base30YrCST200 <- melt(Base30YrCST200,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

#500 SCENARIOS
Base3mCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_3m format.csv")
Base3mCST500 <- melt(Base3mCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base6mCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_6m format.csv")
Base6mCST500 <- melt(Base6mCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base1YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_1Y format.csv")
Base1YrCST500 <- melt(Base1YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base2YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_2Y format.csv")
Base2YrCST500 <- melt(Base2YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base3YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_3Y format.csv")
Base3YrCST500 <- melt(Base3YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base5YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_5Y format.csv")
Base5YrCST500 <- melt(Base5YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base7YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_7Y format.csv")
Base7YrCST500 <- melt(Base7YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base10YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_10Y format.csv")
Base10YrCST500 <- melt(Base10YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base20YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_20Y format.csv")
Base20YrCST500 <- melt(Base20YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base30YrCST500 <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 500/UST_30Y format.csv")
Base30YrCST500 <- melt(Base30YrCST500,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

#1000 SCENARIOS
Base3mCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_3m format.csv")
Base3mCST1K <- melt(Base3mCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base6mCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_6m format.csv")
Base6mCST1K <- melt(Base6mCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base1YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_1Y format.csv")
Base1YrCST1K <- melt(Base1YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base2YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_2Y format.csv")
Base2YrCST1K <- melt(Base2YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base3YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_3Y format.csv")
Base3YrCST1K <- melt(Base3YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base5YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_5Y format.csv")
Base5YrCST1K <- melt(Base5YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base7YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_7Y format.csv")
Base7YrCST1K <- melt(Base7YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base10YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_10Y format.csv")
Base10YrCST1K <- melt(Base10YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base20YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_20Y format.csv")
Base20YrCST1K <- melt(Base20YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Base30YrCST1K <- read.csv("C:/Users/15733/Documents/Practicum II/Generator output - base - 1k/UST_30Y format.csv")
Base30YrCST1K <- melt(Base30YrCST1K,value.name = "Interest_Rate",id.vars = "Month",variable.name = "Scenario")

Preliminary data exploration

3 MONTH

summary(Base3mCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00891 0.01496 0.01663 0.02195 0.11006
summary(Base3mCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00894 0.01478 0.01690 0.02215 0.15239
summary(Base3mCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00917 0.01491 0.01660 0.02211 0.12250
summary(Base3mCST1K[,3])
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.000100 0.009208 0.015120 0.017117 0.022490 0.152390
summary(Base3mCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00925 0.01516 0.01707 0.02254 0.23294
sd(Base3mCST50[,3])
## [1] 0.01120638
sd(Base3mCST200[,3])
## [1] 0.01201254
sd(Base3mCST500[,3])
## [1] 0.01073654
sd(Base3mCST1K[,3])
## [1] 0.01171852
sd(Base3mCST[,3])
## [1] 0.01149101

6 MONTH

summary(Base6mCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00964 0.01555 0.01721 0.02240 0.10946
summary(Base6mCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00964 0.01534 0.01748 0.02264 0.15102
summary(Base6mCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00987 0.01549 0.01719 0.02259 0.12089
summary(Base6mCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00991 0.01570 0.01769 0.02296 0.15102
summary(Base6mCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.00995 0.01573 0.01765 0.02301 0.23070
sd(Base6mCST50[,3])
## [1] 0.01103445
sd(Base6mCST200[,3])
## [1] 0.01184157
sd(Base6mCST500[,3])
## [1] 0.01058885
sd(Base6mCST1K[,3])
## [1] 0.01155267
sd(Base6mCST[,3])
## [1] 0.01132557

1 YEAR

summary(Base1YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01092 0.01664 0.01829 0.02324 0.10838
summary(Base1YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01093 0.01639 0.01854 0.02353 0.14853
summary(Base1YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01111 0.01654 0.01826 0.02347 0.11797
summary(Base1YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01115 0.01674 0.01874 0.02382 0.14853
summary(Base1YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00010 0.01119 0.01678 0.01870 0.02388 0.22663
sd(Base1YrCST50[,3])
## [1] 0.01072423
sd(Base1YrCST200[,3])
## [1] 0.01153138
sd(Base1YrCST500[,3])
## [1] 0.01032158
sd(Base1YrCST1K[,3])
## [1] 0.01125412
sd(Base1YrCST[,3])
## [1] 0.0110272

2 YEAR

summary(Base2YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00191 0.01297 0.01840 0.02009 0.02468 0.10659
summary(Base2YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00212 0.01299 0.01812 0.02032 0.02496 0.14441
summary(Base2YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00210 0.01313 0.01829 0.02007 0.02497 0.11314
summary(Base2YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00193 0.01316 0.01848 0.02051 0.02529 0.14441
summary(Base2YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00191 0.01320 0.01852 0.02046 0.02536 0.21990
sd(Base2YrCST50[,3])
## [1] 0.01024176
sd(Base2YrCST200[,3])
## [1] 0.01103698
sd(Base2YrCST500[,3])
## [1] 0.009909645
sd(Base2YrCST1K[,3])
## [1] 0.01078506
sd(Base2YrCST[,3])
## [1] 0.01055833

3 YEAR

summary(Base3YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00333 0.01456 0.01981 0.02149 0.02592 0.10519
summary(Base3YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00370 0.01453 0.01951 0.02171 0.02617 0.14121
summary(Base3YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00366 0.01468 0.01962 0.02147 0.02619 0.10937
summary(Base3YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00336 0.01470 0.01984 0.02188 0.02647 0.14128
summary(Base3YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00333 0.01473 0.01988 0.02183 0.02655 0.21465
sd(Base3YrCST50[,3])
## [1] 0.009926014
sd(Base3YrCST200[,3])
## [1] 0.01071172
sd(Base3YrCST500[,3])
## [1] 0.00965588
sd(Base3YrCST1K[,3])
## [1] 0.01048161
sd(Base3YrCST[,3])
## [1] 0.01025495

5 YEAR

summary(Base5YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00533 0.01670 0.02181 0.02346 0.02770 0.10321
summary(Base5YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00594 0.01669 0.02147 0.02366 0.02793 0.13748
summary(Base5YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00587 0.01682 0.02153 0.02344 0.02798 0.10696
summary(Base5YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00539 0.01680 0.02178 0.02382 0.02824 0.13766
summary(Base5YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00533 0.01683 0.02180 0.02376 0.02832 0.20721
sd(Base5YrCST50[,3])
## [1] 0.009581108
sd(Base5YrCST200[,3])
## [1] 0.01035245
sd(Base5YrCST500[,3])
## [1] 0.009408112
sd(Base5YrCST1K[,3])
## [1] 0.0101562
sd(Base5YrCST[,3])
## [1] 0.009929715

7 YEAR

summary(Base7YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00663 0.01799 0.02310 0.02473 0.02893 0.10194
summary(Base7YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00738 0.01800 0.02275 0.02492 0.02914 0.13623
summary(Base7YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00724 0.01814 0.02276 0.02472 0.02917 0.10653
summary(Base7YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00669 0.01812 0.02303 0.02506 0.02943 0.13623
summary(Base7YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00663 0.01814 0.02304 0.02501 0.02950 0.20241
sd(Base7YrCST50[,3])
## [1] 0.009421731
sd(Base7YrCST200[,3])
## [1] 0.01018327
sd(Base7YrCST500[,3])
## [1] 0.009316044
sd(Base7YrCST1K[,3])
## [1] 0.01001025
sd(Base7YrCST[,3])
## [1] 0.009783899

10 YEAR

summary(Base10YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00783 0.01920 0.02424 0.02589 0.03007 0.10075
summary(Base10YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00846 0.01919 0.02391 0.02608 0.03033 0.13508
summary(Base10YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00842 0.01933 0.02391 0.02588 0.03028 0.10775
summary(Base10YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00791 0.01930 0.02418 0.02621 0.03057 0.13508
summary(Base10YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00783 0.01933 0.02418 0.02615 0.03063 0.19796
sd(Base10YrCST50[,3])
## [1] 0.009336052
sd(Base10YrCST200[,3])
## [1] 0.01008716
sd(Base10YrCST500[,3])
## [1] 0.009295321
sd(Base10YrCST1K[,3])
## [1] 0.009936925
sd(Base10YrCST[,3])
## [1] 0.009711092

20 YEAR

summary(Base20YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00944 0.02085 0.02582 0.02751 0.03166 0.09916
summary(Base20YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00976 0.02080 0.02551 0.02768 0.03190 0.13354
summary(Base20YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00999 0.02097 0.02547 0.02750 0.03182 0.10962
summary(Base20YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00935 0.02089 0.02569 0.02779 0.03215 0.13354
summary(Base20YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00924 0.02093 0.02570 0.02774 0.03219 0.19199
sd(Base20YrCST50[,3])
## [1] 0.009238567
sd(Base20YrCST200[,3])
## [1] 0.009978185
sd(Base20YrCST500[,3])
## [1] 0.009285902
sd(Base20YrCST1K[,3])
## [1] 0.009857219
sd(Base20YrCST[,3])
## [1] 0.00963105

30 YEAR

summary(Base30YrCST50[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01000 0.02138 0.02636 0.02803 0.03220 0.09861
summary(Base30YrCST200[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01021 0.02131 0.02605 0.02820 0.03245 0.13300
summary(Base30YrCST500[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01027 0.02149 0.02601 0.02803 0.03235 0.11048
summary(Base30YrCST1K[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00949 0.02139 0.02621 0.02831 0.03268 0.13300
summary(Base30YrCST[,3])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00931 0.02144 0.02622 0.02825 0.03273 0.19044
sd(Base30YrCST50[,3])
## [1] 0.009254922
sd(Base30YrCST200[,3])
## [1] 0.009988735
sd(Base30YrCST500[,3])
## [1] 0.009332931
sd(Base30YrCST1K[,3])
## [1] 0.00987888
sd(Base30YrCST[,3])
## [1] 0.009653262

Data exploration by scenario

Similar to what I did with the base 10K, up 300bps 10K, etc: I took the average and standard deviation of the 10 year CST rates in each scenarios, then averaged those numbers across all scenarios. The goal was to learn how much one subset varied from another.

SummaryBase3mCST50 <- Base3mCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 3M treas")
## [1] "Base, 50 Scen Subset, 3M treas"
summary(SummaryBase3mCST50[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.004875   Min.   :0.003971  
##  1st Qu.:0.012041   1st Qu.:0.006221  
##  Median :0.015643   Median :0.008114  
##  Mean   :0.016627   Mean   :0.008738  
##  3rd Qu.:0.019580   3rd Qu.:0.009692  
##  Max.   :0.034463   Max.   :0.025901
SummaryBase3mCST200 <- Base3mCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 3M treas")
## [1] "Base, 200 Scen Subset, 3M treas"
summary(SummaryBase3mCST200[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.007193   Min.   :0.003486  
##  1st Qu.:0.012408   1st Qu.:0.006182  
##  Median :0.015622   Median :0.007863  
##  Mean   :0.016901   Mean   :0.009327  
##  3rd Qu.:0.020571   3rd Qu.:0.010897  
##  Max.   :0.037195   Max.   :0.032147
SummaryBase3mCST500 <- Base3mCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 3M treas")
## [1] "Base, 500 Scen Subset, 3M treas"
summary(SummaryBase3mCST500[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.006908   Min.   :0.003606  
##  1st Qu.:0.012732   1st Qu.:0.006342  
##  Median :0.015981   Median :0.008035  
##  Mean   :0.016602   Mean   :0.008755  
##  3rd Qu.:0.019348   3rd Qu.:0.010211  
##  Max.   :0.044716   Max.   :0.033047
SummaryBase3mCST1K <- Base3mCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 3M treas")
## [1] "Base, 1,000 Scen Subset, 3M treas"
summary(SummaryBase3mCST1K[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.006829   Min.   :0.003079  
##  1st Qu.:0.012941   1st Qu.:0.006261  
##  Median :0.016155   Median :0.008143  
##  Mean   :0.017117   Mean   :0.009165  
##  3rd Qu.:0.020069   3rd Qu.:0.010780  
##  Max.   :0.047020   Max.   :0.040749
SummaryBase3mCST <- Base3mCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 3M treas")
## [1] "Base, 10,000 Scens, 3M treas"
summary(SummaryBase3mCST[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.004875   Min.   :0.002621  
##  1st Qu.:0.012953   1st Qu.:0.006447  
##  Median :0.016087   Median :0.008141  
##  Mean   :0.017072   Mean   :0.009069  
##  3rd Qu.:0.020003   3rd Qu.:0.010647  
##  Max.   :0.060459   Max.   :0.056671
SummaryBase6mCST50 <- Base6mCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 6M treas")
## [1] "Base, 50 Scen Subset, 6M treas"
summary(SummaryBase6mCST50[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.005431   Min.   :0.003923  
##  1st Qu.:0.012804   1st Qu.:0.006076  
##  Median :0.016233   Median :0.007924  
##  Mean   :0.017215   Mean   :0.008550  
##  3rd Qu.:0.020282   3rd Qu.:0.009577  
##  Max.   :0.034880   Max.   :0.025683
SummaryBase6mCST200 <- Base6mCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 6M treas")
## [1] "Base, 200 Scen Subset, 6M treas"
summary(SummaryBase6mCST200[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.007826   Min.   :0.003380  
##  1st Qu.:0.012979   1st Qu.:0.006030  
##  Median :0.016235   Median :0.007776  
##  Mean   :0.017480   Mean   :0.009141  
##  3rd Qu.:0.021243   3rd Qu.:0.010723  
##  Max.   :0.037752   Max.   :0.032122
SummaryBase6mCST500 <- Base6mCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 6M treas")
## [1] "Base, 500 Scen Subset, 6M treas"
summary(SummaryBase6mCST500[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.007739   Min.   :0.003446  
##  1st Qu.:0.013250   1st Qu.:0.006201  
##  Median :0.016611   Median :0.007848  
##  Mean   :0.017188   Mean   :0.008582  
##  3rd Qu.:0.019940   3rd Qu.:0.010029  
##  Max.   :0.045225   Max.   :0.032914
SummaryBase6mCST1K <- Base6mCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 6M treas")
## [1] "Base, 1,000 Scen Subset, 6M treas"
summary(SummaryBase6mCST1K[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.007382   Min.   :0.003023  
##  1st Qu.:0.013451   1st Qu.:0.006076  
##  Median :0.016758   Median :0.007940  
##  Mean   :0.017691   Mean   :0.008981  
##  3rd Qu.:0.020626   3rd Qu.:0.010588  
##  Max.   :0.047544   Max.   :0.040200
SummaryBase6mCST <- Base6mCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 6M treas")
## [1] "Base, 10,000 Scens, 6M treas"
summary(SummaryBase6mCST[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.005431   Min.   :0.002494  
##  1st Qu.:0.013527   1st Qu.:0.006290  
##  Median :0.016682   Median :0.007964  
##  Mean   :0.017646   Mean   :0.008887  
##  3rd Qu.:0.020566   3rd Qu.:0.010452  
##  Max.   :0.061046   Max.   :0.056216
SummaryBase1YrCST50 <- Base1YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 1Yr treas")
## [1] "Base, 50 Scen Subset, 1Yr treas"
summary(SummaryBase1YrCST50[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.006552   Min.   :0.003731  
##  1st Qu.:0.014245   1st Qu.:0.005743  
##  Median :0.017122   Median :0.007550  
##  Mean   :0.018292   Mean   :0.008209  
##  3rd Qu.:0.021494   3rd Qu.:0.009441  
##  Max.   :0.035629   Max.   :0.025284
SummaryBase1YrCST200 <- Base1YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 1Yr treas")
## [1] "Base, 200 Scen Subset, 1Yr treas"
summary(SummaryBase1YrCST200[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.009013   Min.   :0.003207  
##  1st Qu.:0.014070   1st Qu.:0.005729  
##  Median :0.017392   Median :0.007408  
##  Mean   :0.018542   Mean   :0.008798  
##  3rd Qu.:0.022570   3rd Qu.:0.010327  
##  Max.   :0.038757   Max.   :0.032093
SummaryBase1YrCST500 <- Base1YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 1Yr treas")
## [1] "Base, 500 Scen Subset, 1Yr treas"
summary(SummaryBase1YrCST500[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.008702   Min.   :0.003136  
##  1st Qu.:0.014433   1st Qu.:0.005892  
##  Median :0.017690   Median :0.007541  
##  Mean   :0.018265   Mean   :0.008262  
##  3rd Qu.:0.021117   3rd Qu.:0.009676  
##  Max.   :0.046178   Max.   :0.032657
SummaryBase1YrCST1K <- Base1YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 1Yr treas")
## [1] "Base, 1,000 Scen Subset, 1Yr treas"
summary(SummaryBase1YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.00845   Min.   :0.002854  
##  1st Qu.:0.01449   1st Qu.:0.005835  
##  Median :0.01786   Median :0.007579  
##  Mean   :0.01874   Mean   :0.008646  
##  3rd Qu.:0.02168   3rd Qu.:0.010228  
##  Max.   :0.04854   Max.   :0.039218
SummaryBase1YrCST <- Base1YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 1Yr treas")
## [1] "Base, 10,000 Scens, 1Yr treas"
summary(SummaryBase1YrCST[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.006552   Min.   :0.002306  
##  1st Qu.:0.014609   1st Qu.:0.005982  
##  Median :0.017760   Median :0.007636  
##  Mean   :0.018698   Mean   :0.008553  
##  3rd Qu.:0.021615   3rd Qu.:0.010094  
##  Max.   :0.062114   Max.   :0.055415
SummaryBase3YrCST50 <- Base3YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 3Yr treas")
## [1] "Base, 50 Scen Subset, 3Yr treas"
summary(SummaryBase3YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01008   Min.   :0.003192  
##  1st Qu.:0.01811   1st Qu.:0.004775  
##  Median :0.02014   Median :0.006243  
##  Mean   :0.02149   Mean   :0.007314  
##  3rd Qu.:0.02451   3rd Qu.:0.009048  
##  Max.   :0.03783   Max.   :0.024225
SummaryBase3YrCST200 <- Base3YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 3Yr treas")
## [1] "Base, 200 Scen Subset, 3Yr treas"
summary(SummaryBase3YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01237   Min.   :0.002518  
##  1st Qu.:0.01726   1st Qu.:0.004938  
##  Median :0.02048   Median :0.006403  
##  Mean   :0.02171   Mean   :0.007850  
##  3rd Qu.:0.02524   3rd Qu.:0.009369  
##  Max.   :0.04171   Max.   :0.032107
SummaryBase3YrCST500 <- Base3YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 3Yr treas")
## [1] "Base, 500 Scen Subset, 3Yr treas"
summary(SummaryBase3YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01165   Min.   :0.002398  
##  1st Qu.:0.01759   1st Qu.:0.005052  
##  Median :0.02100   Median :0.006591  
##  Mean   :0.02147   Mean   :0.007401  
##  3rd Qu.:0.02422   3rd Qu.:0.008779  
##  Max.   :0.04912   Max.   :0.031901
SummaryBase3YrCST1K <- Base3YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 3Yr treas")
## [1] "Base, 1,000 Scen Subset, 3Yr treas"
summary(SummaryBase3YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01173   Min.   :0.002256  
##  1st Qu.:0.01796   1st Qu.:0.004950  
##  Median :0.02117   Median :0.006778  
##  Mean   :0.02188   Mean   :0.007739  
##  3rd Qu.:0.02485   3rd Qu.:0.009249  
##  Max.   :0.05157   Max.   :0.036389
SummaryBase3YrCST <- Base3YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 3Yr treas")
## [1] "Base, 10,000 Scens, 3Yr treas"
summary(SummaryBase3YrCST[,2:3])
##   Avg_IntRate       Standard_Deviation
##  Min.   :0.009827   Min.   :0.001763  
##  1st Qu.:0.017809   1st Qu.:0.005132  
##  Median :0.020983   Median :0.006768  
##  Mean   :0.021832   Mean   :0.007650  
##  3rd Qu.:0.024739   3rd Qu.:0.009149  
##  Max.   :0.065255   Max.   :0.053212
SummaryBase5YrCST50 <- Base5YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 5Yr treas")
## [1] "Base, 50 Scen Subset, 5Yr treas"
summary(SummaryBase5YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01226   Min.   :0.003230  
##  1st Qu.:0.01989   1st Qu.:0.004567  
##  Median :0.02228   Median :0.005691  
##  Mean   :0.02346   Mean   :0.006924  
##  3rd Qu.:0.02669   3rd Qu.:0.008275  
##  Max.   :0.03919   Max.   :0.023680
SummaryBase5YrCST200 <- Base5YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 5Yr treas")
## [1] "Base, 200 Scen Subset, 5Yr treas"
summary(SummaryBase5YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01411   Min.   :0.002306  
##  1st Qu.:0.01932   1st Qu.:0.004643  
##  Median :0.02254   Median :0.005865  
##  Mean   :0.02366   Mean   :0.007406  
##  3rd Qu.:0.02721   3rd Qu.:0.008968  
##  Max.   :0.04378   Max.   :0.032199
SummaryBase5YrCST500 <- Base5YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 5Yr treas")
## [1] "Base, 500 Scen Subset, 5Yr treas"
summary(SummaryBase5YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01337   Min.   :0.001981  
##  1st Qu.:0.01948   1st Qu.:0.004627  
##  Median :0.02304   Median :0.006166  
##  Mean   :0.02344   Mean   :0.007020  
##  3rd Qu.:0.02628   3rd Qu.:0.008491  
##  Max.   :0.05093   Max.   :0.031597
SummaryBase5YrCST1K <- Base5YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 5Yr treas")
## [1] "Base, 1,000 Scen Subset, 5Yr treas"
summary(SummaryBase5YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01375   Min.   :0.002092  
##  1st Qu.:0.01988   1st Qu.:0.004616  
##  Median :0.02303   Median :0.006263  
##  Mean   :0.02382   Mean   :0.007330  
##  3rd Qu.:0.02684   3rd Qu.:0.008854  
##  Max.   :0.05344   Max.   :0.034700
SummaryBase5YrCST <- Base5YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 5Yr treas")
## [1] "Base, 10,000 Scens, 5Yr treas"
summary(SummaryBase5YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01142   Min.   :0.001615  
##  1st Qu.:0.01977   1st Qu.:0.004724  
##  Median :0.02292   Median :0.006345  
##  Mean   :0.02376   Mean   :0.007240  
##  3rd Qu.:0.02672   3rd Qu.:0.008745  
##  Max.   :0.06719   Max.   :0.051981
SummaryBase7YrCST50 <- Base7YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 7Yr treas")
## [1] "Base, 50 Scen Subset, 7Yr treas"
summary(SummaryBase7YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01367   Min.   :0.003266  
##  1st Qu.:0.02102   1st Qu.:0.004454  
##  Median :0.02359   Median :0.005584  
##  Mean   :0.02473   Mean   :0.006745  
##  3rd Qu.:0.02810   3rd Qu.:0.008191  
##  Max.   :0.04006   Max.   :0.023371
SummaryBase7YrCST200 <- Base7YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 7Yr treas")
## [1] "Base, 200 Scen Subset, 7Yr treas"
summary(SummaryBase7YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01523   Min.   :0.002281  
##  1st Qu.:0.02076   1st Qu.:0.004438  
##  Median :0.02387   Median :0.005605  
##  Mean   :0.02492   Mean   :0.007183  
##  3rd Qu.:0.02851   3rd Qu.:0.008704  
##  Max.   :0.04521   Max.   :0.032288
SummaryBase7YrCST500 <- Base7YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 7Yr treas")
## [1] "Base, 500 Scen Subset, 7Yr treas"
summary(SummaryBase7YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01441   Min.   :0.001747  
##  1st Qu.:0.02071   1st Qu.:0.004395  
##  Median :0.02430   Median :0.006030  
##  Mean   :0.02472   Mean   :0.006842  
##  3rd Qu.:0.02776   3rd Qu.:0.008283  
##  Max.   :0.05210   Max.   :0.031464
SummaryBase7YrCST1K <- Base7YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 7Yr treas")
## [1] "Base, 1,000 Scen Subset, 7Yr treas"
summary(SummaryBase7YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01438   Min.   :0.002013  
##  1st Qu.:0.02106   1st Qu.:0.004483  
##  Median :0.02423   Median :0.006038  
##  Mean   :0.02506   Mean   :0.007133  
##  3rd Qu.:0.02808   3rd Qu.:0.008679  
##  Max.   :0.05464   Max.   :0.033635
SummaryBase7YrCST <- Base7YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 7Yr treas")
## [1] "Base, 10,000 Scens, 7Yr treas"
summary(SummaryBase7YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01245   Min.   :0.001617  
##  1st Qu.:0.02100   1st Qu.:0.004532  
##  Median :0.02416   Median :0.006151  
##  Mean   :0.02501   Mean   :0.007042  
##  3rd Qu.:0.02798   3rd Qu.:0.008544  
##  Max.   :0.06863   Max.   :0.051243
SummaryBase10YrCST50 <- Base10YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 10Yr treas")
## [1] "Base, 50 Scen Subset, 10Yr treas"
summary(SummaryBase10YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01496   Min.   :0.002882  
##  1st Qu.:0.02205   1st Qu.:0.004373  
##  Median :0.02481   Median :0.005543  
##  Mean   :0.02589   Mean   :0.006654  
##  3rd Qu.:0.02925   3rd Qu.:0.008282  
##  Max.   :0.04094   Max.   :0.023133
SummaryBase10YrCST200 <- Base10YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 10Yr treas")
## [1] "Base, 200 Scen Subset, 10Yr treas"
summary(SummaryBase10YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01606   Min.   :0.002334  
##  1st Qu.:0.02194   1st Qu.:0.004300  
##  Median :0.02494   Median :0.005523  
##  Mean   :0.02608   Mean   :0.007047  
##  3rd Qu.:0.02959   3rd Qu.:0.008681  
##  Max.   :0.04652   Max.   :0.032406
SummaryBase10YrCST500 <- Base10YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 10Yr treas")
## [1] "Base, 500 Scen Subset, 10Yr treas"
summary(SummaryBase10YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01536   Min.   :0.001565  
##  1st Qu.:0.02176   1st Qu.:0.004307  
##  Median :0.02549   Median :0.005949  
##  Mean   :0.02588   Mean   :0.006751  
##  3rd Qu.:0.02889   3rd Qu.:0.008200  
##  Max.   :0.05317   Max.   :0.031405
SummaryBase10YrCST1K <- Base10YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 10Yr treas")
## [1] "Base, 1,000 Scen Subset, 10Yr treas"
summary(SummaryBase10YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01487   Min.   :0.001810  
##  1st Qu.:0.02218   1st Qu.:0.004430  
##  Median :0.02540   Median :0.005973  
##  Mean   :0.02621   Mean   :0.007023  
##  3rd Qu.:0.02923   3rd Qu.:0.008586  
##  Max.   :0.05574   Max.   :0.032679
SummaryBase10YrCST <- Base10YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 10Yr treas")
## [1] "Base, 10,000 Scens, 10Yr treas"
summary(SummaryBase10YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01339   Min.   :0.001565  
##  1st Qu.:0.02214   1st Qu.:0.004429  
##  Median :0.02533   Median :0.006054  
##  Mean   :0.02615   Mean   :0.006931  
##  3rd Qu.:0.02921   3rd Qu.:0.008440  
##  Max.   :0.06999   Max.   :0.050614
SummaryBase20YrCST50 <- Base20YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 20Yr treas")
## [1] "Base, 50 Scen Subset, 20Yr treas"
summary(SummaryBase20YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01674   Min.   :0.002385  
##  1st Qu.:0.02349   1st Qu.:0.004294  
##  Median :0.02662   Median :0.005593  
##  Mean   :0.02751   Mean   :0.006538  
##  3rd Qu.:0.03100   3rd Qu.:0.007948  
##  Max.   :0.04217   Max.   :0.022800
SummaryBase20YrCST200 <- Base20YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 20Yr treas")
## [1] "Base, 200 Scen Subset, 20Yr treas"
summary(SummaryBase20YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01716   Min.   :0.002198  
##  1st Qu.:0.02351   1st Qu.:0.004047  
##  Median :0.02648   Median :0.005464  
##  Mean   :0.02768   Mean   :0.006872  
##  3rd Qu.:0.03097   3rd Qu.:0.008457  
##  Max.   :0.04833   Max.   :0.032540
SummaryBase20YrCST500 <- Base20YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 20Yr treas")
## [1] "Base, 500 Scen Subset, 20Yr treas"
summary(SummaryBase20YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01668   Min.   :0.001424  
##  1st Qu.:0.02341   1st Qu.:0.004228  
##  Median :0.02705   Median :0.005758  
##  Mean   :0.02750   Mean   :0.006635  
##  3rd Qu.:0.03048   3rd Qu.:0.008115  
##  Max.   :0.05465   Max.   :0.031325
SummaryBase20YrCST1K <- Base20YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 20Yr treas")
## [1] "Base, 1,000 Scen Subset, 20Yr treas"
summary(SummaryBase20YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01559   Min.   :0.001538  
##  1st Qu.:0.02381   1st Qu.:0.004302  
##  Median :0.02694   Median :0.005856  
##  Mean   :0.02779   Mean   :0.006880  
##  3rd Qu.:0.03093   3rd Qu.:0.008431  
##  Max.   :0.05727   Max.   :0.032540
SummaryBase20YrCST <- Base20YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 20Yr treas")
## [1] "Base, 10,000 Scens, 20Yr treas"
summary(SummaryBase20YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01470   Min.   :0.001424  
##  1st Qu.:0.02372   1st Qu.:0.004290  
##  Median :0.02695   Median :0.005911  
##  Mean   :0.02774   Mean   :0.006787  
##  3rd Qu.:0.03088   3rd Qu.:0.008299  
##  Max.   :0.07188   Max.   :0.049775
SummaryBase30YrCST50 <- Base30YrCST50 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 50 Scen Subset, 30Yr treas")
## [1] "Base, 50 Scen Subset, 30Yr treas"
summary(SummaryBase30YrCST50[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01732   Min.   :0.002363  
##  1st Qu.:0.02401   1st Qu.:0.004398  
##  Median :0.02718   Median :0.005647  
##  Mean   :0.02803   Mean   :0.006564  
##  3rd Qu.:0.03166   3rd Qu.:0.007868  
##  Max.   :0.04256   Max.   :0.022734
SummaryBase30YrCST200 <- Base30YrCST200 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 200 Scen Subset, 30Yr treas")
## [1] "Base, 200 Scen Subset, 30Yr treas"
summary(SummaryBase30YrCST200[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01751   Min.   :0.002121  
##  1st Qu.:0.02415   1st Qu.:0.004063  
##  Median :0.02695   Median :0.005514  
##  Mean   :0.02820   Mean   :0.006876  
##  3rd Qu.:0.03139   3rd Qu.:0.008414  
##  Max.   :0.04893   Max.   :0.032624
SummaryBase30YrCST500 <- Base30YrCST500 %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 500 Scen Subset, 30Yr treas")
## [1] "Base, 500 Scen Subset, 30Yr treas"
summary(SummaryBase30YrCST500[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01711   Min.   :0.001459  
##  1st Qu.:0.02397   1st Qu.:0.004248  
##  Median :0.02754   Median :0.005764  
##  Mean   :0.02803   Mean   :0.006661  
##  3rd Qu.:0.03103   3rd Qu.:0.008183  
##  Max.   :0.05514   Max.   :0.031355
SummaryBase30YrCST1K <- Base30YrCST1K %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 1,000 Scen Subset, 30Yr treas")
## [1] "Base, 1,000 Scen Subset, 30Yr treas"
summary(SummaryBase30YrCST1K[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01580   Min.   :0.001479  
##  1st Qu.:0.02426   1st Qu.:0.004334  
##  Median :0.02745   Median :0.005871  
##  Mean   :0.02831   Mean   :0.006896  
##  3rd Qu.:0.03145   3rd Qu.:0.008375  
##  Max.   :0.05777   Max.   :0.032624
SummaryBase30YrCST <- Base30YrCST %>%
select(Scenario,Interest_Rate) %>%
group_by(Scenario) %>%
summarise(Avg_IntRate = mean(Interest_Rate), Standard_Deviation = sd(Interest_Rate))
print("Base, 10,000 Scens, 30Yr treas")
## [1] "Base, 10,000 Scens, 30Yr treas"
summary(SummaryBase30YrCST[,2:3])
##   Avg_IntRate      Standard_Deviation
##  Min.   :0.01512   Min.   :0.001445  
##  1st Qu.:0.02422   1st Qu.:0.004300  
##  Median :0.02747   Median :0.005935  
##  Mean   :0.02825   Mean   :0.006802  
##  3rd Qu.:0.03143   3rd Qu.:0.008301  
##  Max.   :0.07250   Max.   :0.049539