
Clark Cape Cod method
ClarkCapeCod.rd
Analyze loss triangle using Clark's Cape Cod method.
Usage
ClarkCapeCod(Triangle, Premium, cumulative = TRUE, maxage = Inf,
adol = TRUE, adol.age = NULL, origin.width = NULL,
G = "loglogistic")
Arguments
- Triangle
A loss triangle in the form of a matrix. The number of columns must be at least four; the number of rows may be as few as 1. The column names of the matrix should be able to be interpreted as the "age" of the losses in that column. The row names of the matrix should uniquely define the year of origin of the losses in that row. Losses may be inception-to-date or incremental.
- Premium
The vector of premium to use in the method. If a scalar (vector of length 1) is given, that value will be used for all origin periods. (See "Examples" below.) If the length is greater than 1 but does not equal the number of rows of
Triangle
thePremium
values will be "recycled" with a warning.- cumulative
If
TRUE
(the default), values inTriangle
are inception to date. IfFALSE
,Triangle
holds incremental losses.- maxage
The "ultimate" age to which losses should be projected.
- adol
If
TRUE
(the default), the growth function should be applied to the length of time from the average date of loss ("adol") of losses in the origin year. IfFALSE
, the growth function should be applied to the length of time since the beginning of the origin year.- adol.age
Only pertinent if
adol
isTRUE
. The age of the average date of losses within an origin period in the same units as the "ages" of theTriangle
matrix. IfNULL
(the default) it will be assumed to be half the width of an origin period (which would be the case if losses can be assumed to occur uniformly over an origin period).- origin.width
Only pertinent if
adol
isTRUE
. The width of an origin period in the same units as the "ages" of theTriangle
matrix. IfNULL
(the default) it will be assumed to be the mean difference in the "ages" of the triangle, with a warning if not all differences are equal.- G
A
character
scalar identifying the "growth function." The two growth functions defined at this time are "loglogistic" (the default) and "weibull".
Details
Clark's "Cape Cod" method assumes that the incremental losses across development periods in a loss triangle are independent. He assumes that the expected value of an incremental loss is equal to the theoretical expected loss ratio (ELR) times the on-level premium for the origin year times the change in the theoretical underlying growth function over the development period. Clark models the growth function, also called the percent of ultimate, by either the loglogistic function (a.k.a., "the inverse power curve") or the weibull function. Clark completes his incremental loss model by wrapping the expected values within an overdispersed poisson (ODP) process where the "scale factor" sigma^2 is assumed to be a known constant for all development periods.
The parameters of Clark's "Cape Cod" method are therefore: ELR, and omega and theta (the parameters of the loglogistic and weibull growth functions). Finally, Clark uses maximum likelihood to parameterize his model, uses the ODP process to estimate process risk, and uses the Cramer-Rao theorem and the "delta method" to estimate parameter risk.
Clark recommends inspecting the residuals to help assess the
reasonableness of the model relative to the actual data
(see plot.clark
below).
Value
A list
of class "ClarkLDF" with the components listed below.
("Key" to naming convention: all caps represent parameters;
mixed case represent origin-level amounts;
all-lower-case represent observation-level (origin, development age) results.)
- method
"CapeCod"
- growthFunction
name of the growth function
- Origin
names of the rows of the triangle
- Premium
Premium amount for each origin year
- CurrentValue
the most mature value for each row
- CurrentAge
the most mature "age" for each row
- CurrentAge.used
the most mature age used; differs from "CurrentAge" when adol=TRUE
- MAXAGE
same as 'maxage' argument
- MAXAGE.USED
the maximum age for development from the average date of loss; differs from MAXAGE when adol=TRUE
- FutureValue
the projected loss amounts ("Reserves" in Clark's paper)
- ProcessSE
the process standard error of the FutureValue
- ParameterSE
the parameter standard error of the FutureValue
- StdError
the total standard error (process + parameter) of the FutureValue
- Total
a
list
with amounts that appear on the "Total" row for components "Origin" (="Total"), "CurrentValue", "FutureValue", "ProcessSE", "ParameterSE", and "StdError"- PAR
the estimated parameters
- ELR
the estimated loss ratio parameter
- THETAG
the estimated parameters of the growth function
- GrowthFunction
value of the growth function as of the CurrentAge.used
- GrowthFunctionMAXAGE
value of the growth function as of the MAXAGE.used
- FutureGrowthFactor
the ("unreported" or "unpaid") percent of ultimate loss that has yet to be recorded
- SIGMA2
the estimate of the sigma^2 parameter
- Ldf
the "to-ultimate" loss development factor (sometimes called the "cumulative development factor") as defined in Clark's paper for each origin year
- LdfMAXAGE
the "to-ultimate" loss development factor as of the maximum age used in the model
- TruncatedLdf
the "truncated" loss development factor for developing the current diagonal to the maximum age used in the model
- FutureValueGradient
the gradient of the FutureValue function
- origin
the origin year corresponding to each observed value of incremental loss
- age
the age of each observed value of incremental loss
- fitted
the expected value of each observed value of incremental loss (the "mu's" of Clark's paper)
- residuals
the actual minus fitted value for each observed incremental loss
- stdresid
the standardized residuals for each observed incremental loss (= residuals/sqrt(sigma2*fitted), referred to as "normalized residuals" in Clark's paper; see p. 62)
- FI
the "Fisher Information" matrix as defined in Clark's paper (i.e., without the sigma^2 value)
- value
the value of the loglikelihood function at the solution point
- counts
the number of calls to the loglikelihood function and its gradient function when numerical convergence was achieved
References
Clark, David R., "LDF Curve-Fitting and Stochastic Reserving: A Maximum Likelihood Approach", Casualty Actuarial Society Forum, Fall, 2003 https://www.casact.org/sites/default/files/database/forum_03fforum_03ff041.pdf
Examples
X <- GenIns
colnames(X) <- 12*as.numeric(colnames(X))
CC.loglogistic <- ClarkCapeCod(X, Premium=10000000+400000*0:9, maxage=240)
CC.loglogistic
#> Origin CurrentValue Premium ELR FutureGrowthFactor FutureValue
#> 1 3,901,463 10,000,000 0.597 0.1304 778,463
#> 2 5,339,085 10,400,000 0.597 0.1594 989,952
#> 3 4,909,315 10,800,000 0.597 0.1950 1,257,443
#> 4 4,588,268 11,200,000 0.597 0.2392 1,599,333
#> 5 3,873,311 11,600,000 0.597 0.2947 2,041,248
#> 6 3,691,712 12,000,000 0.597 0.3655 2,618,547
#> 7 3,483,130 12,400,000 0.597 0.4563 3,377,840
#> 8 2,864,498 12,800,000 0.597 0.5721 4,371,698
#> 9 1,363,294 13,200,000 0.597 0.7138 5,625,140
#> 10 344,014 13,600,000 0.597 0.8617 6,996,681
#> Total 34,358,090 118,000,000 29,656,345
#> UltimateValue StdError CV%
#> 4,679,926 269,249 34.6
#> 6,329,037 311,329 31.4
#> 6,166,758 358,975 28.5
#> 6,187,601 412,520 25.8
#> 5,914,559 471,781 23.1
#> 6,310,259 535,626 20.5
#> 6,860,970 601,534 17.8
#> 7,236,196 665,861 15.2
#> 6,988,434 726,348 12.9
#> 7,340,695 786,672 11.2
#> 64,014,435 3,402,779 11.5
# Clark's "CapeCod method" also works with triangles that have
# more development periods than origin periods. The Premium
# is a contrived match to the "made up" 'qincurred' Triangle.
ClarkCapeCod(qincurred, Premium=1250+150*0:11, G="loglogistic")
#> Origin CurrentValue Premium ELR FutureGrowthFactor FutureValue UltimateValue
#> 1995 1,100 1,250 0.726 0.0071 6 1,106
#> 1996 1,300 1,400 0.726 0.0089 9 1,309
#> 1997 1,200 1,550 0.726 0.0113 13 1,213
#> 1998 1,298 1,700 0.726 0.0149 18 1,316
#> 1999 1,583 1,850 0.726 0.0204 27 1,610
#> 2000 1,066 2,000 0.726 0.0290 42 1,108
#> 2001 1,411 2,150 0.726 0.0438 68 1,479
#> 2002 1,820 2,300 0.726 0.0717 120 1,940
#> 2003 1,221 2,450 0.726 0.1308 233 1,454
#> 2004 1,212 2,600 0.726 0.2753 519 1,731
#> 2005 422 2,750 0.726 0.6363 1,270 1,692
#> 2006 13 2,900 0.726 0.9971 2,099 2,112
#> Total 13,646 24,900 4,425 18,071
#> StdError CV%
#> 16 256.6
#> 20 217.3
#> 23 183.1
#> 28 153.0
#> 35 126.3
#> 43 102.6
#> 56 81.3
#> 75 62.3
#> 106 45.5
#> 160 30.7
#> 247 19.5
#> 318 15.2
#> 546 12.3
# Method also works for a "triangle" with only one row:
# 1st row of GenIns; need "drop=FALSE" to avoid becoming a vector.
ClarkCapeCod(GenIns[1, , drop=FALSE], Premium=1000000, maxage=20)
#> Origin CurrentValue Premium ELR FutureGrowthFactor FutureValue
#> 1 3,901,463 1,000,000 5.180 0.1329 688,191
#> Total 3,901,463 1,000,000 688,191
#> UltimateValue StdError CV%
#> 4,589,654 332,977 48.4
#> 4,589,654 332,977 48.4
# If one value of Premium is appropriate for all origin years
# (e.g., losses are on-level and adjusted for exposure)
# then only a single value for Premium need be provided.
ClarkCapeCod(GenIns, Premium=1000000, maxage=20)
#> Origin CurrentValue Premium ELR FutureGrowthFactor FutureValue
#> 1 3,901,463 1,000,000 6.506 0.1220 793,689
#> 2 5,339,085 1,000,000 6.506 0.1497 973,638
#> 3 4,909,315 1,000,000 6.506 0.1838 1,195,562
#> 4 4,588,268 1,000,000 6.506 0.2264 1,473,293
#> 5 3,873,311 1,000,000 6.506 0.2807 1,826,208
#> 6 3,691,712 1,000,000 6.506 0.3506 2,281,212
#> 7 3,483,130 1,000,000 6.506 0.4417 2,873,992
#> 8 2,864,498 1,000,000 6.506 0.5602 3,644,648
#> 9 1,363,294 1,000,000 6.506 0.7084 4,609,114
#> 10 344,014 1,000,000 6.506 0.8666 5,638,009
#> Total 34,358,090 10,000,000 25,309,365
#> UltimateValue StdError CV%
#> 4,695,152 279,198 35.2
#> 6,312,723 314,887 32.3
#> 6,104,877 354,390 29.6
#> 6,061,561 397,940 27.0
#> 5,699,519 445,419 24.4
#> 5,972,924 496,063 21.7
#> 6,357,122 548,195 19.1
#> 6,509,146 599,501 16.4
#> 5,972,408 648,803 14.1
#> 5,982,023 697,588 12.4
#> 59,667,455 3,009,180 11.9
# Use of the weibull function generates a warning that the parameter risk
# approximation results in some negative variances. This may be of small
# concern since it happens only for older years with near-zero
# estimated reserves, but the warning should not be disregarded
# if it occurs with real data.
Y <- ClarkCapeCod(qincurred, Premium=1250+150*0:11, G="weibull")
#> Warning: The parameter risk approximation produced 'negative variances' for the following origin years (values set to zero):
#> Origin Reserve ApproxVar RelativeVar
#> 1995 0.00124 -6.17e-05 -0.0499
#> 1996 0.00823 -1.81e-03 -0.2198
#> 1997 0.04965 -4.13e-02 -0.8325
#> 1998 0.27093 -7.20e-01 -2.6563
#> 1999 1.33183 -9.22e+00 -6.9264
#> 2000 5.86716 -8.22e+01 -14.0080
#> 2001 22.99806 -4.54e+02 -19.7348
#> 2002 79.44399 -1.09e+03 -13.7447
# The plot of the standardized residuals by age indicates that the more
# mature observations are more loosely grouped than the less mature, just
# the opposite of the behavior under the loglogistic curve.
# This suggests that the model might be improved by analyzing the Triangle
# in two different "blocks": less mature vs. more mature.
# The QQ-plot shows that the tails of the empirical distribution of
# standardized residuals are "fatter" than a standard normal.
# The fact that the p-value is essentially zero says that there is
# virtually no chance that the standardized residuals could be
# considered draws from a standard normal random variable.
# The overall conclusion is that Clark's ODP-based CapeCod model with
# the weibull growth function does not match up well with the qincurred
# triangle and these premiums.
plot(Y)