From 119173b7214f88be7da320a594127c7a0f67902d Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Sat, 15 Oct 2016 05:50:55 -0700 Subject: [PATCH 1/3] MackChainLadder argument checks tail and est.sigma --- R/MackChainLadderFunctions.R | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/R/MackChainLadderFunctions.R b/R/MackChainLadderFunctions.R index ba310ecd..34d23f09 100755 --- a/R/MackChainLadderFunctions.R +++ b/R/MackChainLadderFunctions.R @@ -22,6 +22,11 @@ MackChainLadder <- function( # 2013-02-25 Parameter risk recursive formula may have a third term per # Murphy and BBMW if (! mse.method %in% c("Mack", "Independence")) stop("mse.method must be 'Mack' or 'Independence'") + if (! est.sigma %in% c("Mack", "log-linear")) { + if (!is.numeric(est.sigma)) + stop("est.sigma must be 'Mack' or 'log-linear' or numeric") + } + if (!is.logical(tail) & !is.numeric(tail)) stop("tail must be logical or numeric") Triangle <- checkTriangle(Triangle) m <- dim(Triangle)[1] From 1035a54063e38d560a4727df9f5d4da6f94ace22 Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Sat, 15 Oct 2016 13:40:47 -0700 Subject: [PATCH 2/3] NULL tail.se tail.sigma Before fitting loglinear regressions from which tail.se and/or tail.sigma will be predicted, check for the number of positive values of f.se and sigma. --- R/MackChainLadderFunctions.R | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/R/MackChainLadderFunctions.R b/R/MackChainLadderFunctions.R index 34d23f09..a0bdaaf2 100755 --- a/R/MackChainLadderFunctions.R +++ b/R/MackChainLadderFunctions.R @@ -352,15 +352,41 @@ tail.SE <- function(FullTriangle, StdErr, Total.SE, tail.factor, tail.se = NULL, if(is.null(tail.se)){ .fse <- StdErr$f.se[start:(n-2)] - mse <- lm(log(.fse) ~ .dev) - tail.se <- exp(predict(mse, newdata=data.frame(.dev=tail.pos))) + ndx <- .fse > 0 + numpos <- sum(ndx) + if (numpos) { + .devse <- .dev[ndx] + .fse <- .fse[ndx] + mse <- lm(log(.fse) ~ .devse) + if (numpos > 1) tail.se <- exp(predict(mse, newdata=data.frame(.devse=tail.pos))) + else { + warning("Only one column for estimating tail.se") + tail.se <- suppressWarnings( + exp(predict(mse, newdata=data.frame(.dev=tail.pos)))) + } + } + else { + warning("No development variability in triangle. Setting tail.se = 0") + tail.se <- 0 + } } StdErr$f.se <- c(StdErr$f.se, tail.se = tail.se) if(is.null(tail.sigma)){ .sigma <- StdErr$sigma[start:(n-2)] - msig <- lm(log(.sigma) ~ .dev) - tail.sigma <- exp(predict(msig, newdata = data.frame(.dev = tail.pos))) + ndx <- .sigma > 0 + numpos <- sum(ndx) + if (numpos) { + .devsigma <- .dev[ndx] + .sigma <- .sigma[ndx] + msig <- lm(log(.sigma) ~ .devsigma) + if (numpos > 1) tail.sigma <- exp( + predict(msig, newdata = data.frame(.devsigma = tail.pos))) + else { + warning("No development variability in triangle. Setting tail.sigma = 0") + tail.sigma <- 0 + } + } } StdErr$sigma <- c(StdErr$sigma, tail.sigma = as.numeric(tail.sigma)) From bae2f7f29b92b448bfea4e8beed62bea329c8f3f Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Sat, 15 Oct 2016 14:13:58 -0700 Subject: [PATCH 3/3] est.sigma can be a numeric vector Check only 1st element for Mack or log-linear --- R/MackChainLadderFunctions.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/MackChainLadderFunctions.R b/R/MackChainLadderFunctions.R index a0bdaaf2..9f6c9e5d 100755 --- a/R/MackChainLadderFunctions.R +++ b/R/MackChainLadderFunctions.R @@ -22,7 +22,7 @@ MackChainLadder <- function( # 2013-02-25 Parameter risk recursive formula may have a third term per # Murphy and BBMW if (! mse.method %in% c("Mack", "Independence")) stop("mse.method must be 'Mack' or 'Independence'") - if (! est.sigma %in% c("Mack", "log-linear")) { + if (! est.sigma[1] %in% c("Mack", "log-linear")) { if (!is.numeric(est.sigma)) stop("est.sigma must be 'Mack' or 'log-linear' or numeric") }