Mercurial > forge
changeset 9324:6e47f7cd8aa1 octave-forge
actuarial: fix identation and use of usage()
author | carandraug |
---|---|
date | Mon, 09 Jan 2012 20:04:38 +0000 |
parents | 05e7c17b5051 |
children | 5dfc4caa3423 |
files | main/actuarial/inst/bfanalisis.m main/actuarial/inst/bferguson.m main/actuarial/inst/porcentual.m main/actuarial/inst/quotaad.m main/actuarial/inst/quotald.m main/actuarial/inst/quotamack.m main/actuarial/inst/quotapanning.m main/actuarial/inst/ultimatead.m main/actuarial/inst/ultimatecc.m main/actuarial/inst/ultimateld.m main/actuarial/inst/ultimatemack.m main/actuarial/inst/ultimatepanning.m |
diffstat | 12 files changed, 265 insertions(+), 267 deletions(-) [+] |
line wrap: on
line diff
--- a/main/actuarial/inst/bfanalisis.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/bfanalisis.m Mon Jan 09 20:04:38 2012 +0000 @@ -71,78 +71,77 @@ function [quotas,outcome] = bfanalisis (S,V,quota_ext,ultimate_ext) -#check number of arguments in -if (nargin==0) - usage("insuficient args. Enter a mxn triangle of losses at least"); -else - #check S - [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) - u = m - n; #rows of the upper square - S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular - quotas.ld = quotald(S); #quotas LD - quotas.panning = quotapanning(S); #Panning quotas - for k=1:n - outcome.ultld.quotasld(:,k) = bferguson(S,quotas.ld,ultimateld(S,quotas.ld),k-1); - outcome.ultld.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimateld(S,quotas.panning),k-1); - outcome.ultpanning.quotasld(:,k) = bferguson(S,quotas.ld,ultimatepanning(S,quotas.ld),k-1); - outcome.ultpanning.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatepanning(S,quotas.panning),k-1); - endfor - - if (nargin>1) - # verify V - if (size(V) ~= [m,1]) - usage(strcat("volume V must be of size [",num2str(m),",1]" )); - else - for k=1:n - quotas.ad = quotaad(S,V); #quotas AD - quotas.mack = quotamack(S,V); #quotas Mack - outcome.ultld.quotasad(:,k) = bferguson(S,quotas.ad,ultimateld(S,quotas.ad),k-1); - outcome.ultld.quotasmack(:,k) = bferguson(S,quotas.mack,ultimateld(S,quotas.mack),k-1); - outcome.ultpanning.quotasad(:,k) = bferguson(S,quotas.ad,ultimatepanning(S,quotas.ad),k-1); - outcome.ultpanning.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatepanning(S,quotas.mack),k-1); - outcome.ultad.quotasld(:,k) = bferguson(S,quotas.ld,ultimatead(S,V),k-1); - outcome.ultad.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatead(S,V),k-1); - outcome.ultad.quotasad(:,k) = bferguson(S,quotas.ad,ultimatead(S,V),k-1); - outcome.ultad.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatead(S,V),k-1); - outcome.ultcc.quotasld(:,k) = bferguson(S,quotas.ld,ultimatecc(S,V,quotas.ld),k-1); - outcome.ultcc.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatecc(S,V,quotas.panning),k-1); - outcome.ultcc.quotasad(:,k) = bferguson(S,quotas.ad,ultimatecc(S,V,quotas.ad),k-1); - outcome.ultcc.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatecc(S,V,quotas.mack),k-1); - outcome.ultmack.quotasld(:,k) = bferguson(S,quotas.ld,ultimatemack(S,V),k-1); - outcome.ultmack.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatemack(S,V),k-1); - outcome.ultmack.quotasad(:,k) = bferguson(S,quotas.ad,ultimatemack(S,V),k-1); - outcome.ultmack.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatemack(S,V),k-1); - endfor - if (nargin>2) - #check out quota_ext - if (size(quota_ext) ~= [1,n]) - usage(strcat("quota_ext must be of size [1,",num2str(n),"]" )); - else - for k=1:n - quotas.external = quota_ext; #external quotas - outcome.ultld.quotasexternal(:,k) = bferguson(S,quotas.external,ultimateld(S,quotas.external),k-1); - outcome.ultpanning.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatepanning(S,quotas.external),k-1); - outcome.ultad.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatead(S,V),k-1); - outcome.ultcc.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatecc(S,V,quotas.external),k-1); - outcome.ultmack.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatemack(S,V),k-1); - endfor - if (nargin>3) - #verify ultimate_ext - if (size(ultimate_ext) ~= [m,1]) - usage(strcat("ultimate_ext must be of size [",num2str(m),",1]" )); - else + #check number of arguments in + if (nargin==0) + print_usage; + else + #check S + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + quotas.ld = quotald(S); #quotas LD + quotas.panning = quotapanning(S); #Panning quotas + for k=1:n + outcome.ultld.quotasld(:,k) = bferguson(S,quotas.ld,ultimateld(S,quotas.ld),k-1); + outcome.ultld.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimateld(S,quotas.panning),k-1); + outcome.ultpanning.quotasld(:,k) = bferguson(S,quotas.ld,ultimatepanning(S,quotas.ld),k-1); + outcome.ultpanning.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatepanning(S,quotas.panning),k-1); + endfor + + if (nargin>1) + # verify V + if (size(V) ~= [m,1]) + error(strcat("volume V must be of size [",num2str(m),",1]" )); + else for k=1:n - outcome.ultexternal.quotasld(:,k) = bferguson(S,quotas.ld,ultimate_ext,k-1); - outcome.ultexternal.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimate_ext,k-1); - outcome.ultexternal.quotasad(:,k) = bferguson(S,quotas.ad,ultimate_ext,k-1); - outcome.ultexternal.quotasmack(:,k) = bferguson(S,quotas.mack,ultimate_ext,k-1); - outcome.ultexternal.quotasexternal(:,k) = bferguson(S,quotas.external,ultimate_ext,k-1); + quotas.ad = quotaad(S,V); #quotas AD + quotas.mack = quotamack(S,V); #quotas Mack + outcome.ultld.quotasad(:,k) = bferguson(S,quotas.ad,ultimateld(S,quotas.ad),k-1); + outcome.ultld.quotasmack(:,k) = bferguson(S,quotas.mack,ultimateld(S,quotas.mack),k-1); + outcome.ultpanning.quotasad(:,k) = bferguson(S,quotas.ad,ultimatepanning(S,quotas.ad),k-1); + outcome.ultpanning.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatepanning(S,quotas.mack),k-1); + outcome.ultad.quotasld(:,k) = bferguson(S,quotas.ld,ultimatead(S,V),k-1); + outcome.ultad.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatead(S,V),k-1); + outcome.ultad.quotasad(:,k) = bferguson(S,quotas.ad,ultimatead(S,V),k-1); + outcome.ultad.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatead(S,V),k-1); + outcome.ultcc.quotasld(:,k) = bferguson(S,quotas.ld,ultimatecc(S,V,quotas.ld),k-1); + outcome.ultcc.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatecc(S,V,quotas.panning),k-1); + outcome.ultcc.quotasad(:,k) = bferguson(S,quotas.ad,ultimatecc(S,V,quotas.ad),k-1); + outcome.ultcc.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatecc(S,V,quotas.mack),k-1); + outcome.ultmack.quotasld(:,k) = bferguson(S,quotas.ld,ultimatemack(S,V),k-1); + outcome.ultmack.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatemack(S,V),k-1); + outcome.ultmack.quotasad(:,k) = bferguson(S,quotas.ad,ultimatemack(S,V),k-1); + outcome.ultmack.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatemack(S,V),k-1); endfor + if (nargin>2) + #check out quota_ext + if (size(quota_ext) ~= [1,n]) + error(strcat("quota_ext must be of size [1,",num2str(n),"]" )); + else + for k=1:n + quotas.external = quota_ext; #external quotas + outcome.ultld.quotasexternal(:,k) = bferguson(S,quotas.external,ultimateld(S,quotas.external),k-1); + outcome.ultpanning.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatepanning(S,quotas.external),k-1); + outcome.ultad.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatead(S,V),k-1); + outcome.ultcc.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatecc(S,V,quotas.external),k-1); + outcome.ultmack.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatemack(S,V),k-1); + endfor + if (nargin>3) + #verify ultimate_ext + if (size(ultimate_ext) ~= [m,1]) + error(strcat("ultimate_ext must be of size [",num2str(m),",1]" )); + else + for k=1:n + outcome.ultexternal.quotasld(:,k) = bferguson(S,quotas.ld,ultimate_ext,k-1); + outcome.ultexternal.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimate_ext,k-1); + outcome.ultexternal.quotasad(:,k) = bferguson(S,quotas.ad,ultimate_ext,k-1); + outcome.ultexternal.quotasmack(:,k) = bferguson(S,quotas.mack,ultimate_ext,k-1); + outcome.ultexternal.quotasexternal(:,k) = bferguson(S,quotas.external,ultimate_ext,k-1); + endfor + end + end + end end - end - end + end end - end end - -end
--- a/main/actuarial/inst/bferguson.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/bferguson.m Mon Jan 09 20:04:38 2012 +0000 @@ -46,20 +46,20 @@ function [BF] = bferguson (S, quotas,ultimate,k) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -if (size(quotas) ~= [1,n]) - usage(strcat("quotas must be of size [1,",num2str(n),"]" )) -end -if (size(ultimate) ~= [m,1]) - usage(strcat("ultimate must be of size [",num2str(m),",1]" )) -end + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + if (size(quotas) ~= [1,n]) + error(strcat("quotas must be of size [1,",num2str(n),"]" )) + end + if (size(ultimate) ~= [m,1]) + error(strcat("ultimate must be of size [",num2str(m),",1]" )) + end -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -diagS = diag(fliplr(S),-u); + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + diagS = diag(fliplr(S),-u); -#calcs the proyection by the bornhuetter-ferguson method -BF = diagS((n-k+1):n,1) + (quotas(k+1)*ones(1,k) - quotas(k:-1:1))' .* ultimate((m-k+1):m); -BF = [S(1:m-k,k+1); BF]; + #calcs the proyection by the bornhuetter-ferguson method + BF = diagS((n-k+1):n,1) + (quotas(k+1)*ones(1,k) - quotas(k:-1:1))' .* ultimate((m-k+1):m); + BF = [S(1:m-k,k+1); BF]; end
--- a/main/actuarial/inst/porcentual.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/porcentual.m Mon Jan 09 20:04:38 2012 +0000 @@ -20,23 +20,23 @@ ## of the matrix @var{a} ## @end deftypefn -function [M] = porcentual (a,dim) +function [M] = porcentual (a, dim) -if (nargin==0) - usage("no data"); -end + if (nargin==0) + print_usage; + end -[m,n] = size(a); + [m,n] = size(a); -if (nargin == 1) - M = a./sum(sum(a)); -else - if (dim ==1) - M = a./ (ones(1,m)'*sum(a)); - elseif (dim==2) - M = (a'./ (ones(1,n)'*sum(a')))'; - else - usage("invalid dimension"); -end + if (nargin == 1) + M = a./sum(sum(a)); + else + if (dim ==1) + M = a./ (ones(1,m)'*sum(a)); + elseif (dim==2) + M = (a'./ (ones(1,n)'*sum(a')))'; + else + error("invalid dimension"); + end end
--- a/main/actuarial/inst/quotaad.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/quotaad.m Mon Jan 09 20:04:38 2012 +0000 @@ -15,7 +15,7 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s},@var{v}) +## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s}, @var{v}) ## Calculate the cumulative quotas by the Additive method. ## ## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years @@ -56,30 +56,30 @@ function [quotas] = quotaad (S,V) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(V) ~= [m,1]) - usage(strcat("volume V must be of size [",num2str(m),",1]" )); -end + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + if (size(V) ~= [m,1]) + error(strcat("volume V must be of size [",num2str(m),",1]" )); + end -# Z triangle -Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; -Z = fliplr(triu(fliplr(Z),-u)); #clean Z + # Z triangle + Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; + Z = fliplr(triu(fliplr(Z),-u)); #clean Z -# calc the empirical incremental loss ratios -LRI = Z ./ repmat (V,1,n); - -#weights V(i)/sum(1,n-k,V(i)) -W = repmat(V,1,n); #numerator -W =fliplr(triu(fliplr(W),-u)); #clean low triangle -a = repmat(sum(W),m,1); #denominator -a = fliplr(triu(fliplr(a),-u)); #clean low triangle -W = W./a; #divide by -W = fliplr(triu(fliplr(W),-u)); + # calc the empirical incremental loss ratios + LRI = Z ./ repmat (V,1,n); -# incremental Loss Ratios AD -LRI_AD = diag(LRI' * W)'; #weighted product -quotas = cumsum(porcentual(LRI_AD)); #calc cumulated quota + #weights V(i)/sum(1,n-k,V(i)) + W = repmat(V,1,n); #numerator + W =fliplr(triu(fliplr(W),-u)); #clean low triangle + a = repmat(sum(W),m,1); #denominator + a = fliplr(triu(fliplr(a),-u)); #clean low triangle + W = W./a; #divide by + W = fliplr(triu(fliplr(W),-u)); + + # incremental Loss Ratios AD + LRI_AD = diag(LRI' * W)'; #weighted product + quotas = cumsum(porcentual(LRI_AD)); #calc cumulated quota end
--- a/main/actuarial/inst/quotald.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/quotald.m Mon Jan 09 20:04:38 2012 +0000 @@ -49,24 +49,24 @@ function quotas = quotald(S) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -# calculate the triangle of individual development factors (LDI). -LDI = [ones(m,1), S(:,2:n)./S(:,1:n-1)]; -LDI = fliplr(triu(fliplr(LDI),-u)); -LDI (m,1) = 0; #last row element without partner + # calculate the triangle of individual development factors (LDI) + LDI = [ones(m,1), S(:,2:n)./S(:,1:n-1)]; + LDI = fliplr(triu(fliplr(LDI),-u)); + LDI (m,1) = 0; #last row element without partner -# weights -W = fliplr(triu(fliplr(S),1-u)); #get T values to use -W = shift (W,1,2); #redim k = k-1, -W = porcentual(W,1); + # weights + W = fliplr(triu(fliplr(S),1-u)); #get T values to use + W = shift (W,1,2); #redim k = k-1, + W = porcentual(W,1); -#individual development factors (LDI) or Chainladder factors -LDI_CL = diag(LDI' * W)'; #weighted product -quotas = 1./cumprod(fliplr(LDI_CL)); #calcs cumulated quota -quotas (n) = 1; #last value is 1 -quotas = fliplr(shift(quotas,1)); + #individual development factors (LDI) or Chainladder factors + LDI_CL = diag(LDI' * W)'; #weighted product + quotas = 1./cumprod(fliplr(LDI_CL)); #calcs cumulated quota + quotas (n) = 1; #last value is 1 + quotas = fliplr(shift(quotas,1)); end
--- a/main/actuarial/inst/quotamack.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/quotamack.m Mon Jan 09 20:04:38 2012 +0000 @@ -15,7 +15,7 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s},@var{v}) +## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s}, @var{v}) ## Calculate the cumulative quotas by the Mack method. ## ## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years @@ -82,47 +82,47 @@ ## @seealso {bferguson, quotald, quotapanning, quotaad} ## @end deftypefn -function [quotas] = quotamack (S,V) +function [quotas] = quotamack (S, V) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(V) ~= [m,1]) - usage(strcat("volume V must be of size [",num2str(m),",1]" )); -end + if (size(V) ~= [m,1]) + error(strcat("volume V must be of size [",num2str(m),",1]" )); + end -# Z triangle -Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; -Z = fliplr(triu(fliplr(Z),-u)); #clean Z + # Z triangle + Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; + Z = fliplr(triu(fliplr(Z),-u)); #clean Z -# calculate empirical individual loss ratios -a = repmat (V,1,n); -LRI = Z ./ a; + # calculate empirical individual loss ratios + a = repmat (V,1,n); + LRI = Z ./ a; -# weights V(i)/sum(1,n-k,V(i)) -num =fliplr(triu(fliplr(a),-u)); #numerator and clean low triangle -den = repmat(sum(num),m,1); #denominator -den = fliplr(triu(fliplr(den),-u)); #clean low triangle -W = num./den; #divide by -W = fliplr(triu(fliplr(W),-u)); + # weights V(i)/sum(1,n-k,V(i)) + num =fliplr(triu(fliplr(a),-u)); #numerator and clean low triangle + den = repmat(sum(num),m,1); #denominator + den = fliplr(triu(fliplr(den),-u)); #clean low triangle + W = num./den; #divide by + W = fliplr(triu(fliplr(W),-u)); -# incremental Loss Ratios AD -LRI_AD = diag(LRI' * W)'; #weighted product + # incremental Loss Ratios AD + LRI_AD = diag(LRI' * W)'; #weighted product -if (u==0) -b = (diag(fliplr(S),-u) ./ flipud(cumsum(LRI_AD)') ) ./ V; -else -b = ([S(1:u,n); diag(fliplr(S),-u)] ./ [sum(LRI_AD)*ones(1,u);flipud(cumsum(LRI_AD)')] ) ./ V; -end + if (u==0) + b = (diag(fliplr(S),-u) ./ flipud(cumsum(LRI_AD)') ) ./ V; + else + b = ([S(1:u,n); diag(fliplr(S),-u)] ./ [sum(LRI_AD)*ones(1,u);flipud(cumsum(LRI_AD)')] ) ./ V; + end -sZ = sum (Z); #sum of Z -sb = repmat(b,1,n); -sb = fliplr(triu(fliplr(sb),-u)); -sV = repmat(V,1,n); -sV = fliplr(triu(fliplr(sV),-u)); + sZ = sum (Z); #sum of Z + sb = repmat(b,1,n); + sb = fliplr(triu(fliplr(sb),-u)); + sV = repmat(V,1,n); + sV = fliplr(triu(fliplr(sV),-u)); -LRI_Mack = sZ ./ (diag(sb'*sV))'; -quotas = cumsum(porcentual(LRI_Mack)); #calculate cumulated quota + LRI_Mack = sZ ./ (diag(sb'*sV))'; + quotas = cumsum(porcentual(LRI_Mack)); #calculate cumulated quota end
--- a/main/actuarial/inst/quotapanning.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/quotapanning.m Mon Jan 09 20:04:38 2012 +0000 @@ -55,27 +55,27 @@ function quotas = quotapanning (S) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -# calculate Z -Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; -Z = fliplr(triu(fliplr(Z),-u)); #clean Z + # calculate Z + Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; + Z = fliplr(triu(fliplr(Z),-u)); #clean Z + + # calc empirical values of the incremental factors + B = Z ./ (Z * [ones(n,1),zeros(n,n-1)]'); -# calc empirical values of the incremental factors -B = Z ./ (Z * [ones(n,1),zeros(n,n-1)]'); - -# weights Z(i,0)^2/Z(0)^2 - W = repmat((Z(:,1).^2),1,n); #numerator - W =fliplr(triu(fliplr(W),-u)); #clean low triangle - a = repmat(sum(W),m,1); #denominator - a = fliplr(triu(fliplr(a),-u)); #clean low triangle - W = W./a; #divido - W = fliplr(triu(fliplr(W),-u)); #clean low triangle + # weights Z(i,0)^2/Z(0)^2 + W = repmat((Z(:,1).^2),1,n); #numerator + W =fliplr(triu(fliplr(W),-u)); #clean low triangle + a = repmat(sum(W),m,1); #denominator + a = fliplr(triu(fliplr(a),-u)); #clean low triangle + W = W./a; #divido + W = fliplr(triu(fliplr(W),-u)); #clean low triangle -# Pannings incremental factors -B_Pan = diag(B' * W)'; #weighted product -quotas = cumsum(porcentual(B_Pan)); #cumulated quota - + # Pannings incremental factors + B_Pan = diag(B' * W)'; #weighted product + quotas = cumsum(porcentual(B_Pan)); #cumulated quota + end
--- a/main/actuarial/inst/ultimatead.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/ultimatead.m Mon Jan 09 20:04:38 2012 +0000 @@ -15,7 +15,7 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{ultimate} =} ultimatead (@var{s},@var{v}) +## @deftypefn {Function File} {@var{ultimate} =} ultimatead (@var{s}, @var{v}) ## Calculate the ultimate values by the Additive method. ## ## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years @@ -49,8 +49,8 @@ ## @seealso {bferguson, quotald, quotapanning} ## @end deftypefn -function [ultimate] = ultimatead (S,V) +function [ultimate] = ultimatead (S, V) -ultimate = ultimatecc(S,V,quotaad(S,V)); + ultimate = ultimatecc(S,V,quotaad(S,V)); end
--- a/main/actuarial/inst/ultimatecc.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/ultimatecc.m Mon Jan 09 20:04:38 2012 +0000 @@ -69,26 +69,25 @@ function ultimate = ultimatecc (S,V,quotas) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(V) ~= [m,1]) - usage(strcat("volume V must be of size [",num2str(m),",1]" )); -end -if (size(quotas) ~= [1,n]) - usage("quotas must be of dimension [1,n]"); -end + if (size(V) ~= [m,1]) + error(strcat("volume V must be of size [",num2str(m),",1]" )); + elseif (size(quotas) ~= [1,n]) + error("quotas must be of dimension [1,n]"); + end -# CapeCods K K = S(i+k = n)/quotas*V + # CapeCods K K = S(i+k = n)/quotas*V -if (u==0) -K = sum(diag(fliplr(S))')/ (fliplr(quotas)*V); -else -K = sum([diag(fliplr(S),-u)' S(1:u,n)])/ (fliplr([quotas ones(u)])*V); -end + if (u==0) + K = sum(diag(fliplr(S))')/ (fliplr(quotas)*V); + else + K = sum([diag(fliplr(S),-u)' S(1:u,n)])/ (fliplr([quotas ones(u)])*V); + end -#ultimate value -ultimate = K * V; + #ultimate value + ultimate = K * V; end
--- a/main/actuarial/inst/ultimateld.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/ultimateld.m Mon Jan 09 20:04:38 2012 +0000 @@ -53,23 +53,23 @@ ## @seealso {bferguson, quotaad, quotapanning} ## @end deftypefn -function ultimate = ultimateld (S,quotas) +function ultimate = ultimateld (S, quotas) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(quotas) ~= [1,n]) - usage(strcat("quotas must be of size [1,",num2str(n),"]" )); -end + if (size(quotas) ~= [1,n]) + error(strcat("quotas must be of size [1,",num2str(n),"]" )); + end -#calculate the ultimate value + #calculate the ultimate value -if (u==0) -ultimate = flipud(diag(fliplr(S))) ./ quotas'; -else -ultimate = [(flipud(diag(fliplr(S),-u)) ./ quotas')', S(1:u,n)]'; -end -ultimate = flipud(ultimate); + if (u==0) + ultimate = flipud(diag(fliplr(S))) ./ quotas'; + else + ultimate = [(flipud(diag(fliplr(S),-u)) ./ quotas')', S(1:u,n)]'; + end + ultimate = flipud(ultimate); end
--- a/main/actuarial/inst/ultimatemack.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/ultimatemack.m Mon Jan 09 20:04:38 2012 +0000 @@ -76,50 +76,50 @@ ## @seealso {bferguson, quotald, quotapanning, quotaad, quotamack} ## @end deftypefn -function ultimate = ultimatemack (S,V) +function ultimate = ultimatemack (S, V) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(V) ~= [m,1]) - usage(strcat("volume V must be of size [",num2str(m),",1]" )); -end + if (size(V) ~= [m,1]) + error(strcat("volume V must be of size [",num2str(m),",1]" )); + end -# calcs Z triangle -Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; -Z = fliplr(triu(fliplr(Z),-u)); #clean Z + # calcs Z triangle + Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; + Z = fliplr(triu(fliplr(Z),-u)); #clean Z -# calculate empirical individual loss ratios -a = repmat (V,1,n); -LRI = Z ./ a; + # calculate empirical individual loss ratios + a = repmat (V,1,n); + LRI = Z ./ a; -# weights V(i)/sum(1,n-k,V(i)); -num =fliplr(triu(fliplr(a),-u)); #numerator, and clean low triangle -den = repmat(sum(num),m,1); #denominator -den = fliplr(triu(fliplr(den),-u)); #clean low triangle -W = num./den; #divide -W = fliplr(triu(fliplr(W),-u)); + # weights V(i)/sum(1,n-k,V(i)); + num =fliplr(triu(fliplr(a),-u)); #numerator, and clean low triangle + den = repmat(sum(num),m,1); #denominator + den = fliplr(triu(fliplr(den),-u)); #clean low triangle + W = num./den; #divide + W = fliplr(triu(fliplr(W),-u)); -# incremental Loss Ratios AD -LRI_AD = diag(LRI' * W)'; #weighted product + # incremental Loss Ratios AD + LRI_AD = diag(LRI' * W)'; #weighted product -if (u==0) -b = (diag(fliplr(S),-u) ./ flipud(cumsum(LRI_AD)') ) ./ V; -else -b = ([S(1:u,n); diag(fliplr(S),-u)] ./ [sum(LRI_AD)*ones(1,u);flipud(cumsum(LRI_AD)')] ) ./ V; -end + if (u==0) + b = (diag(fliplr(S),-u) ./ flipud(cumsum(LRI_AD)') ) ./ V; + else + b = ([S(1:u,n); diag(fliplr(S),-u)] ./ [sum(LRI_AD)*ones(1,u);flipud(cumsum(LRI_AD)')] ) ./ V; + end -sZ = sum (Z); # sum of Z -sb = repmat(b,1,n); -sb = fliplr(triu(fliplr(sb),-u)); -sV = repmat(V,1,n); -sV =fliplr(triu(fliplr(sV),-u)); + sZ = sum (Z); # sum of Z + sb = repmat(b,1,n); + sb = fliplr(triu(fliplr(sb),-u)); + sV = repmat(V,1,n); + sV =fliplr(triu(fliplr(sV),-u)); -LRI_Mack = sZ ./ (diag(sb'*sV))'; + LRI_Mack = sZ ./ (diag(sb'*sV))'; -K_Mack = b * sum(LRI_Mack); + K_Mack = b * sum(LRI_Mack); -ultimate = K_Mack .* V; + ultimate = K_Mack .* V; end
--- a/main/actuarial/inst/ultimatepanning.m Mon Jan 09 20:03:31 2012 +0000 +++ b/main/actuarial/inst/ultimatepanning.m Mon Jan 09 20:04:38 2012 +0000 @@ -15,7 +15,7 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{ultimate} =} ultimatepanning (@var{s},@var{quotas}) +## @deftypefn {Function File} {@var{ultimate} =} ultimatepanning (@var{s}, @var{quotas}) ## Calculate the ultimate value by the Panning method. ## ## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years @@ -49,14 +49,14 @@ function [ultimate] = ultimatepanning (S,quotas) -[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) -u = m - n; #rows of the upper square -S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular -if (size(quotas) ~= [1,n]) - usage(strcat("quotas must be of size [1,",num2str(n),"]" )); -end + if (size(quotas) ~= [1,n]) + error(strcat("quotas must be of size [1,",num2str(n),"]" )); + end -ultimate = S(:,1) / quotas(1); + ultimate = S(:,1) / quotas(1); end