Skip to content

Instantly share code, notes, and snippets.

@mages
Last active October 8, 2017 12:48

Revisions

  1. mages revised this gist Oct 8, 2017. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -51,15 +51,15 @@ generated quantities{
    real Y_mean[N + N_mis];
    real Y_pred[N + N_mis];
    for(i in 1:N){
    # Posterior parameter distribution of the mean
    // Posterior parameter distribution of the mean
    Y_mean[i] = ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    # Posterior predictive distribution
    // Posterior predictive distribution
    Y_pred[i] = normal_rng(Y_mean[i], sigma*sqrt(Y_mean[i]));
    }
    for(i in 1:N_mis){
    # Posterior parameter distribution of the mean
    // Posterior parameter distribution of the mean
    Y_mean[N + i] = ult[origin_mis[i]] * weibull_cdf(dev_mis[i], omega, theta);
    # Posterior predictive distribution
    // Posterior predictive distribution
    Y_pred[N + i] = normal_rng(Y_mean[N + i], sigma*sqrt(Y_mean[N + i]));
    }
    }
  2. mages revised this gist Oct 30, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -30,7 +30,7 @@ model {
    omega ~ normal(1, 2); // shape parameter
    mu_ult ~ normal(5000, 1000);
    sigma ~ cauchy(0, 5);
    sigma_ult ~ cauchy(0, 5);
    sigma_ult ~ cauchy(0, 5);
    // Hyperparameters: Modelled parameters
    ult ~ normal(mu_ult, sigma_ult);
    for (i in 1:N){
  3. mages revised this gist Oct 30, 2016. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -4,6 +4,9 @@ data {
    real dev[N]; // development period
    int<lower=0> n_origin; // number of origin years
    int<lower=1, upper=n_origin> origin[N]; // origin years
    // Treat future payments as missing data, see BUGS book:
    // http://www.mrc-bsu.cam.ac.uk/wp-content/uploads/bugsbook_chapter9.pdf, page 194
    // and Stan Manual
    int<lower=0> N_mis; // number of rows of prediction data set
    real dev_mis[N_mis]; // development periods to predict
    int<lower=1, upper=n_origin> origin_mis[N_mis]; // origin periods to predict
  4. mages revised this gist Oct 30, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -15,7 +15,7 @@ parameters {
    real<lower=0> mu_ult; // mean ultimate loss across origin periods
    real<lower=0> sigma; // process error
    real<lower=0> sigma_ult; // random error
    real cum_mis[N_mis];
    real cum_mis[N_mis]; // cumulative paid to predict
    }
    model {
    real mu[N];
  5. mages revised this gist Oct 30, 2016. 1 changed file with 30 additions and 20 deletions.
    50 changes: 30 additions & 20 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -4,49 +4,59 @@ data {
    real dev[N]; // development period
    int<lower=0> n_origin; // number of origin years
    int<lower=1, upper=n_origin> origin[N]; // origin years
    int<lower=0> new_N; // number of rows of prediction data set
    real new_dev[new_N]; // development periods to predict
    int<lower=1, upper=n_origin> new_origin[new_N]; // origin periods to predict
    int<lower=0> N_mis; // number of rows of prediction data set
    real dev_mis[N_mis]; // development periods to predict
    int<lower=1, upper=n_origin> origin_mis[N_mis]; // origin periods to predict
    }
    parameters {
    real<lower=0> theta; // scale parameter
    real<lower=0> omega; // shape parameter
    real<lower=0> ult[n_origin]; // ultimate loss per origin period
    real<lower=0> mu_ult; // mean ultimate loss across origin periods
    real<lower=0> tau; // model precession
    real<lower=0> tau_ult; // ultimate precession
    }
    transformed parameters {
    real sigma; // process error
    real sigma_ult; // random error
    sigma <- 1 / sqrt(tau);
    sigma_ult <- 1 / sqrt(tau_ult);
    real<lower=0> sigma; // process error
    real<lower=0> sigma_ult; // random error
    real cum_mis[N_mis];
    }
    model {
    real mu[N];
    real mu_mis[N_mis];
    real disp_sigma[N];
    real disp_sigma_mis[N_mis];
    // Priors
    theta ~ normal(46, 10); // scale parameter
    omega ~ normal(1, 2); // shape parameter
    mu_ult ~ normal(5000, 1000);
    tau ~ gamma(.0001, .0001);
    tau_ult ~ gamma(.0001, .0001);
    sigma ~ cauchy(0, 5);
    sigma_ult ~ cauchy(0, 5);
    // Hyperparameters: Modelled parameters
    ult ~ normal(mu_ult, sigma_ult);
    for (i in 1:N){
    mu[i] <- ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] <- sigma * sqrt(cum[i]);
    mu[i] = ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] = sigma * sqrt(mu[i]);
    }

    for (i in 1:N_mis){
    mu_mis[i] = ult[origin_mis[i]] * weibull_cdf(dev_mis[i], omega, theta);
    disp_sigma_mis[i] = sigma * sqrt(mu_mis[i]);
    }

    // Likelihood: Modelled data
    cum ~ normal(mu, disp_sigma);
    cum_mis ~ normal(mu_mis, disp_sigma_mis);
    }
    generated quantities{
    real Y_mean[new_N];
    real Y_pred[new_N];
    for(i in 1:new_N){
    real Y_mean[N + N_mis];
    real Y_pred[N + N_mis];
    for(i in 1:N){
    # Posterior parameter distribution of the mean
    Y_mean[i] = ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    # Posterior predictive distribution
    Y_pred[i] = normal_rng(Y_mean[i], sigma*sqrt(Y_mean[i]));
    }
    for(i in 1:N_mis){
    # Posterior parameter distribution of the mean
    Y_mean[i] <- ult[new_origin[i]] * weibull_cdf(new_dev[i], omega, theta);
    Y_mean[N + i] = ult[origin_mis[i]] * weibull_cdf(dev_mis[i], omega, theta);
    # Posterior predictive distribution
    Y_pred[i] <- normal_rng(Y_mean[i], sigma*sqrt(Y_mean[i]));
    Y_pred[N + i] = normal_rng(Y_mean[N + i], sigma*sqrt(Y_mean[N + i]));
    }
    }
  6. mages revised this gist Nov 3, 2015. 1 changed file with 26 additions and 30 deletions.
    56 changes: 26 additions & 30 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -1,48 +1,44 @@
    data {
    int<lower=0> N;
    real cum[N];
    real dev[N];
    int<lower=0> n_origin;
    int<lower=1, upper=n_origin> origin[N];

    int<lower=0> new_N;
    real new_dev[new_N];
    int<lower=1, upper=n_origin> new_origin[new_N];
    int<lower=0> N; // total number of rows
    real cum[N]; // cumulative paid
    real dev[N]; // development period
    int<lower=0> n_origin; // number of origin years
    int<lower=1, upper=n_origin> origin[N]; // origin years
    int<lower=0> new_N; // number of rows of prediction data set
    real new_dev[new_N]; // development periods to predict
    int<lower=1, upper=n_origin> new_origin[new_N]; // origin periods to predict
    }
    parameters {
    real<lower=0> theta;
    real<lower=0> omega;
    vector[n_origin] ult;
    real mu_ult;
    real<lower=0> tau;
    real<lower=0> tau_ult;
    real<lower=0> theta; // scale parameter
    real<lower=0> omega; // shape parameter
    real<lower=0> ult[n_origin]; // ultimate loss per origin period
    real<lower=0> mu_ult; // mean ultimate loss across origin periods
    real<lower=0> tau; // model precession
    real<lower=0> tau_ult; // ultimate precession
    }
    transformed parameters {
    real sigma;
    real sigma_ult;

    real sigma; // process error
    real sigma_ult; // random error
    sigma <- 1 / sqrt(tau);
    sigma_ult <- 1 / sqrt(tau_ult);
    }
    model {
    real mu[N];
    real disp_sigma[N];

    ult ~ normal(mu_ult, sigma_ult);

    for (i in 1:N){
    mu[i] <- ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] <- sigma * sqrt(cum[i]);
    }

    cum ~ normal(mu, disp_sigma);

    // Priors
    theta ~ normal(46, 10); // scale parameter
    omega ~ normal(1, 2); // shape parameter
    mu_ult ~ normal(5000, 1000);

    tau ~ gamma(.0001, .0001);
    tau_ult ~ gamma(.0001, .0001);
    // Hyperparameters: Modelled parameters
    ult ~ normal(mu_ult, sigma_ult);
    for (i in 1:N){
    mu[i] <- ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] <- sigma * sqrt(cum[i]);
    }
    // Likelihood: Modelled data
    cum ~ normal(mu, disp_sigma);
    }
    generated quantities{
    real Y_mean[new_N];
    @@ -51,6 +47,6 @@ generated quantities{
    # Posterior parameter distribution of the mean
    Y_mean[i] <- ult[new_origin[i]] * weibull_cdf(new_dev[i], omega, theta);
    # Posterior predictive distribution
    Y_pred[i] <- normal_rng(Y_mean[i], sigma);
    Y_pred[i] <- normal_rng(Y_mean[i], sigma*sqrt(Y_mean[i]));
    }
    }
  7. mages revised this gist Oct 31, 2015. 1 changed file with 13 additions and 12 deletions.
    25 changes: 13 additions & 12 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -2,17 +2,17 @@ data {
    int<lower=0> N;
    real cum[N];
    real dev[N];
    int<lower=0> n_AY;
    int<lower=1, upper=n_AY> AY[N];
    int<lower=0> n_origin;
    int<lower=1, upper=n_origin> origin[N];

    int<lower=0> newN;
    real newdev[newN];
    int<lower=1, upper=n_AY> newAY[newN];
    int<lower=0> new_N;
    real new_dev[new_N];
    int<lower=1, upper=n_origin> new_origin[new_N];
    }
    parameters {
    real<lower=0> theta;
    real<lower=0> omega;
    vector[n_AY] ult;
    vector[n_origin] ult;
    real mu_ult;
    real<lower=0> tau;
    real<lower=0> tau_ult;
    @@ -31,24 +31,25 @@ model {
    ult ~ normal(mu_ult, sigma_ult);

    for (i in 1:N){
    mu[i] <- ult[AY[i]] * weibull_cdf(dev[i], omega, theta);
    mu[i] <- ult[origin[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] <- sigma * sqrt(cum[i]);
    }

    cum ~ normal(mu, disp_sigma);

    theta ~ normal(46, 10); // scale parameter
    omega ~ normal(1.4, 1); // shape parameter
    omega ~ normal(1, 2); // shape parameter
    mu_ult ~ normal(5000, 1000);

    tau ~ gamma(.0001, .0001);
    tau_ult ~ gamma(.0001, .0001);
    }
    generated quantities{
    real Y_mean[newN];
    real Y_pred[newN];
    for(i in 1:newN){
    real Y_mean[new_N];
    real Y_pred[new_N];
    for(i in 1:new_N){
    # Posterior parameter distribution of the mean
    Y_mean[i] <- ult[newAY[i]] * weibull_cdf(newdev[i], omega, theta);
    Y_mean[i] <- ult[new_origin[i]] * weibull_cdf(new_dev[i], omega, theta);
    # Posterior predictive distribution
    Y_pred[i] <- normal_rng(Y_mean[i], sigma);
    }
  8. mages created this gist Oct 30, 2015.
    55 changes: 55 additions & 0 deletions Hierachical_Model_for_Loss_Reserving.stan
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    data {
    int<lower=0> N;
    real cum[N];
    real dev[N];
    int<lower=0> n_AY;
    int<lower=1, upper=n_AY> AY[N];

    int<lower=0> newN;
    real newdev[newN];
    int<lower=1, upper=n_AY> newAY[newN];
    }
    parameters {
    real<lower=0> theta;
    real<lower=0> omega;
    vector[n_AY] ult;
    real mu_ult;
    real<lower=0> tau;
    real<lower=0> tau_ult;
    }
    transformed parameters {
    real sigma;
    real sigma_ult;

    sigma <- 1 / sqrt(tau);
    sigma_ult <- 1 / sqrt(tau_ult);
    }
    model {
    real mu[N];
    real disp_sigma[N];

    ult ~ normal(mu_ult, sigma_ult);

    for (i in 1:N){
    mu[i] <- ult[AY[i]] * weibull_cdf(dev[i], omega, theta);
    disp_sigma[i] <- sigma * sqrt(cum[i]);
    }

    cum ~ normal(mu, disp_sigma);

    theta ~ normal(46, 10); // scale parameter
    omega ~ normal(1.4, 1); // shape parameter

    tau ~ gamma(.0001, .0001);
    tau_ult ~ gamma(.0001, .0001);
    }
    generated quantities{
    real Y_mean[newN];
    real Y_pred[newN];
    for(i in 1:newN){
    # Posterior parameter distribution of the mean
    Y_mean[i] <- ult[newAY[i]] * weibull_cdf(newdev[i], omega, theta);
    # Posterior predictive distribution
    Y_pred[i] <- normal_rng(Y_mean[i], sigma);
    }
    }