# Table 6.14 werner (loss table)
# exposure: earned exposure
# count: closed claim count
# losses: paid  losses
# pp: pure premium
lt <- data.frame(
  quarter=seq(as.Date("2009-03-31"),as.Date("2013-12-31"),by="quarter"),
  exposure =  c(131911,132700,133602,
                135079,137384,138983,
                140396,140997,140378,
                139682,138982,138984,
                139155,139618,139996,
                140141,140754,141534,
                141800,1482986),
  count = c(7745,7785,7917,7928,7997,
           8037,7939,7831,7748,7719,
           7730,7790,7782,7741,7720,
           7691,7735,7769,7755,7778),
  losses = c(8220899,8381016,
             8594389,8705108,
             8816379,8901163,
             8873491,8799730,
             8736859,8676220,
             8629925,8642835,
             8602105,8535327,
             8466272,8412159,
             8513679,8614224,
             8702135,8761588),
  frequency = c(0.0587,0.0587,0.0593,
                0.0587,0.0582,0.0578,
                0.0565,0.0555,0.0552,
                0.0553,0.0556,0.0560,
                0.0559,0.0554,0.0551,
                0.0549,0.0550,0.0549,
                0.0547,0.0544),
  severity=c(1061.45,1076.56,1085.56,
             1098.02,1102.46,1107.52,
             1117.71,1123.70,1127.63,
             1124.01,1116.42,1109.48,
             1105.38,1102.61,1096.67,
             1093.77,1100.67,1108.79,
             1122.13,1126.46),
  pp=c(62.32,63.16,64.33,64.44,
       64.17,64.04,63.20,62.41,
       62.24,62.11,62.09,62.19,
       61.82,61.13,60.48,60.03,
       60.49,60.86,61.37,61.28)
)

# frequency <- c(0.0375, 0.0339, 0.0337, 0.0555,
#                0.0360, 0.0345, 0.0342, 0.0436,
#                0.0331, 0.0333, 0.0345, 0.0399,
#                0.0323, 0.0344, 0.0322, 0.0428,
#                0.0330, 0.0350, 0.0286, 0.0441)

expfit <- function(y, point=20) {
  x <- 1:point
  y <- tail(log(y),point)
  exp(coef(lm(y~x))[2])^4 - 1
}

expfit_r2 <- function(y, point=20) {
  x <- 1:point
  y <- tail(log(y),point)
  summary(lm(y~x))$r.squared
}

print_coef <- function(coef_table) {
  #coef_table$Freq_Severity <- (1+coef_table$Frequency) * (1+coef_table$Severity) - 1
  coef_table[,2:(ncol(coef_table))] <- sapply(2:(ncol(coef_table)),function(x)paste0(round(coef_table[,x]*100,1), "%"))
  print(coef_table)
}

# match parameters table shown in werner
points <- c(20,16, 12, 8, 6, 4)
fcoef <- sapply(points, function(m) expfit(y=lt$frequency,point=m))
fr2 <- sapply(points, function(m) expfit_r2(y=lt$frequency,point=m))
scoef <- sapply(points, function(m) expfit(y=lt$severity,point=m))
sr2 <- sapply(points, function(m) expfit_r2(y=lt$severity,point=m))
pcoef <- sapply(points, function(m) expfit(y=lt$pp,point=m))
ppr2 <- sapply(points, function(m) expfit_r2(y=lt$pp,point=m))
coef_table <- data.frame(Points=points,Frequency=fcoef,Frequency_R2=fr2,
                         Severity=scoef,Severity_R2=sr2,PP=pcoef,
                         PP_R2=ppr2)
print_coef(coef_table)
##   Points Frequency Frequency_R2 Severity Severity_R2    PP PP_R2
## 1     20     -1.7%        81.3%     0.5%       25.2% -1.2% 68.5%
## 2     16     -1.3%        67.1%    -0.1%        1.2% -1.4% 73.7%
## 3     12     -0.7%        53.6%    -0.2%        3.2% -0.9% 44.3%
## 4      8     -1.2%        87.1%     1.2%       51.7% -0.1%  0.2%
## 5      6     -0.9%        80.4%     2.5%       90.5%  1.6% 75.1%
## 6      4     -1.5%        95.2%     3.3%       96.7%  1.9% 83.8%