Coder Social home page Coder Social logo

brixtools's Introduction

brixtools

The package and site are still under construction...

The goal of brixtools is to make it easier to model non-life insurance data with deductibles using maximum likelihood methods. The package is currently in its infancy and many more features can be implemented.

Installation

You can currently install brixtools from github with:

# install.packages("devtools")
devtools::install_github("kbrix/brixtools")

Example

Included in the package is a simulated data set of 10000 policies. See the documentation for normal_poisson_policy. Below is one of the policies with two losses, but only one (reported) claim:

library(brixtools)
occurrence <- lapply(normal_poisson_policy, function(x) unlist(x["occurrence"]))
reported <- lapply(normal_poisson_policy, function(x) unlist(x["reported"]))
set <- intersect(which(occurrence == 2), which(reported == 1))[1]
normal_poisson_policy[[set]]
#> $deductible
#> [1] 0.7735717
#> 
#> $occurrence
#> [1] 2
#> 
#> $loss
#> [1] 0.1178939 1.9849283
#> 
#> $claim
#> [1] 1.984928
#> 
#> $reported
#> [1] 1

Since the losses (and therefore also claims) within each policy are assumed i.i.d., we can simplify the indexing of the data to ease numerical procedures, see normal_poisson_x and normal_poisson_n.

The Normal-Poisson log-likelihood is called using normal_poisson_log_likelihood and can be used with brix_simple to find the optimum yielding the maximum likelihood estimates of the parameters:

model <- brix_simple(optimizer = optim,
                     fn = normal_poisson_log_likelihood,
                     X = normal_poisson_x, N = normal_poisson_n,
                     par = rep(1, 3),
                     control = list(fnscale = -1),
                     method = "Nelder-Mead",
                     hessian = TRUE)
summary(model)
#> Call used with brix_simple:
#> optim(fn = normal_poisson_log_likelihood, X = normal_poisson_x, 
#>     N = normal_poisson_n, par = rep(1, 3), control = list(fnscale = -1), 
#>     method = "Nelder-Mead", hessian = TRUE)
#> 
#> Coefficients:
#>         Estimate Std. Error z value  Pr(>|z|)    
#> mean   2.0719865  0.0774775  26.743 < 2.2e-16 ***
#> sd     1.4162340  0.0590935  23.966 < 2.2e-16 ***
#> lambda 0.1347086  0.0054767  24.597 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> Log-likelihood value: -4188.422  AIC: 8382.845

The true parameter values are 1.5 for the mean and standard deviation for the normal distribution and the mean for the non-thinned Poisson is 0.1. The model can be augmented with the unobserved claims, i.e., the losses smaller that the deductibles. This is advantageous for performing various tests on the claims, e.g. the claim distribution assumption (is it really normal?). This is done using augment:

model_augmented <- augment(model)
print(model_augmented)
#> $shapiro
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  normal
#> W = 0.99769, p-value = 0.3938
#> 
#> 
#> $ks
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  normal
#> D = 0.034845, p-value = 0.3262
#> alternative hypothesis: two-sided

Checking the p-values, we see that they are large and it is fair to say that the normal distribution fits well. This is not surpirsing, as the data was normal to begin with. We may also compare Q-Q plots as follows:

plot(model_augmented)
plot(model_augmented, augment = FALSE)

The augmented Q-Q plots looks great.

brixtools's People

Contributors

kbrix avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.