Chapter 11: Models for the Gamma family

library(glmbayes)

1. Introductory Discussion

Gamma regression models are used when the response variable is strictly positive and right‑skewed.
Typical applications include:

Gamma regression is a standard GLM for positive, right‑skewed responses (Nelder and Wedderburn 1972; McCullagh and Nelder 1989; Agresti 2015).

In classical statistics, these models are fit using

glm(…, family = Gamma(link = …)).

In glmbayes, the Bayesian analogue is

glmb(…, family = Gamma(link = …), pfamily = dNormal(…))

or, when dispersion is unknown and modeled,

glmb(…, family = Gamma(link = …), pfamily = dNormal_Gamma(…))

or related pfamilies.

This chapter:

  1. reviews the Gamma GLM structure and link functions
  2. shows how to fit classical and Bayesian Gamma regression models
  3. uses a realistic insurance example (carinsca)
  4. demonstrates how to estimate dispersion using gamma.dispersion()
  5. compares classical and Bayesian summaries, including DIC

4. Gamma Regression Example: Insurance Claims

We now consider a Gamma regression example based on the carinsca dataset.
The goal is to model average claim cost as a function of rating variables Merit and Class, using claim counts as weights.

4.1 Data Setup

We begin by preparing the data and setting appropriate factor levels and contrasts.


    data(carinsca)
    carinsca$Merit <- ordered(carinsca$Merit)
    carinsca$Class <- factor(carinsca$Class)
    oldopt <- options(contrasts = c("contr.treatment", "contr.treatment"))

    Claims  <- carinsca$Claims
    Insured <- carinsca$Insured
    Merit   <- carinsca$Merit
    Class   <- carinsca$Class
    Cost    <- carinsca$Cost

The response Cost/Claims represents the average claim cost (severity) per claim.
The weights Claims reflect the number of claims on which each average is based, improving efficiency and aligning with standard GLM practice for rate or average models.

4.2 Classical Gamma Regression Using glm()

We fit a classical Gamma GLM with a log link. As glm() only crudely estimates the dispersion, we use MASS::gamma.dispersion() (Venables and Ripley 2002) and pass the estimate to summary().


    out <- glm(Cost/Claims ~ Merit + Class,
               family  = Gamma(link = "log"),
               weights = Claims,
               x       = TRUE)

    ## Estimate the dispersion using MLE
    disp <- gamma.dispersion(out)
    
    summary(out,dispersion=disp)
#> 
#> Call:
#> glm(formula = Cost/Claims ~ Merit + Class, family = Gamma(link = "log"), 
#>     weights = Claims, x = TRUE)
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept) -1.17456    0.01195 -98.286  < 2e-16 ***
#> Merit1      -0.06867    0.02008  -3.420 0.000626 ***
#> Merit2      -0.07025    0.02238  -3.138 0.001700 ** 
#> Merit3      -0.05673    0.01254  -4.523 6.08e-06 ***
#> Class2       0.08274    0.02031   4.073 4.64e-05 ***
#> Class3       0.01583    0.01410   1.123 0.261529    
#> Class4       0.15981    0.01494  10.698  < 2e-16 ***
#> Class5      -0.08142    0.03005  -2.709 0.006744 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for Gamma family taken to be 7.840919)
#> 
#>     Null deviance: 1556.0  on 19  degrees of freedom
#> Residual deviance:  156.9  on 12  degrees of freedom
#> AIC: -2999165
#> 
#> Number of Fisher Scoring iterations: 4

The summary shows:

Under the log link, exp(\(\beta_{j}\)) can be interpreted as a multiplicative factor on the expected cost ratio for a one‑unit change in the corresponding covariate (or a change in factor level).

5. Bayesian Gamma Regression (fixed dispersion) with glmb()

To fit the Bayesian analogue, we proceed in two steps:

  1. estimate the dispersion parameter \(\phi\) from the classical Gamma GLM,
  2. construct a prior for the regression coefficients using ,
  3. call with a prior that incorporates the fixed dispersion \(\phi\).

5.1 Estimating Dispersion via gamma.dispersion()

The gamma.dispersion() helper estimates the dispersion parameter from a fitted classical Gamma GLM:


    ## better than the crude estimate from the summary function
    disp <- gamma.dispersion(out)
    disp
#> [1] 7.840919

This value will be treated as known in our Bayesian model, so that the Bayesian and classical fits are directly comparable in terms of how they treat phi.

5.2 Prior Setup Using Prior_Setup()

Next we use Prior_Setup() to construct a Zellner‑type g‑prior (Griffin and Brown 2010) for the coefficients, aligned with the Gamma log‑link model and weighting structure:

    ps <- Prior_Setup(Cost/Claims ~ Merit + Class,
                      family  = Gamma(link = "log"),
                      weights = Claims)
#> Using default pwt = 0.01 (low-d default).

    mu <- ps$mu
    V  <- ps$Sigma

The output from ps (if printed) will include:

With the default pwt = 0.01, the prior is weakly informative, and the posterior estimates typically remain close to the MLEs.

5.3 Fitting the Bayesian Gamma Model

We now call glmb(), specifying the same model and likelihood as in the classical fit, but adding a dNormal prior family that fixes dispersion at the value estimated above:

    out_glmb <- glmb(Cost/Claims ~ Merit + Class,
                 family  = Gamma(link = "log"),
                 pfamily = dNormal(mu = mu, Sigma = V, dispersion = disp),
                 weights = Claims)

The arguments mirror the glm() call, with pfamily providing the prior:

5.4 Summarizing the Bayesian Model

Bayesian summary:


    summary(out_glmb)
#> Call
#> glmb(formula = Cost/Claims ~ Merit + Class, family = Gamma(link = "log"), pfamily = dNormal(mu = mu, Sigma = V, dispersion = disp), weights = Claims) 
#> 
#> Expected Residuals:
#>       Min        1Q    Median        3Q       Max 
#> -5.997144 -2.129342 -0.316224  2.288881  6.335870 
#> 
#> Prior and Maximum Likelihood Estimates with Standard Deviations
#> 
#>             Null Mode Prior Mean Prior.sd Max Like. Like.sd
#> (Intercept)  -1.18283   -1.20215  0.15462  -1.17456   0.016
#> Merit1        0.00000    0.00000  0.25980  -0.06867   0.026
#> Merit2        0.00000    0.00000  0.28961  -0.07025   0.029
#> Merit3        0.00000    0.00000  0.16226  -0.05673   0.016
#> Class2        0.00000    0.00000  0.26281   0.08274   0.026
#> Class3        0.00000    0.00000  0.18245   0.01583   0.018
#> Class4        0.00000    0.00000  0.19328   0.15981   0.019
#> Class5        0.00000    0.00000  0.38885  -0.08142   0.039
#> 
#> Bayesian Estimates Based on 1000 iid draws
#> 
#>              Post.Mode  Post.Mean    Post.Sd   MC Error Pr(Null_tail) SE(tail)
#> (Intercept) -1.1747274 -1.1748529  0.0124049  0.0003923     0.2580000    0.003
#> Merit1      -0.0682525 -0.0683218  0.0201660  0.0006377     0.0000000    0.000
#> Merit2      -0.0698241 -0.0694499  0.0214487  0.0006783     0.0000000    0.000
#> Merit3      -0.0563841 -0.0563838  0.0131616  0.0004162     0.0000000    0.000
#> Class2       0.0822404  0.0820492  0.0206730  0.0006537     0.0000000    0.000
#> Class3       0.0157394  0.0155303  0.0141560  0.0004477     0.1320000    0.011
#> Class4       0.1588636  0.1590965  0.0146758  0.0004641     0.0000000    0.000
#> Class5      -0.0809389 -0.0805547  0.0307857  0.0009735     0.0070000    0.003
#>             Pr(Prior_tail)    
#> (Intercept)          0.012 *  
#> Merit1              <2e-16 ***
#> Merit2              <2e-16 ***
#> Merit3              <2e-16 ***
#> Class2              <2e-16 ***
#> Class3               0.132    
#> Class4              <2e-16 ***
#> Class5               0.007 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>   Directional Tail Summaries:
#> 
#>                Metric vs Null vs Prior
#>  Mahalanobis Distance 16.7241  15.8947
#>      Tail Probability  0.0000   0.0000
#>   [Tail probabilities are P(delta^T * Z <= 0) in whitened space]
#> 
#> 
#> Distribution Percentiles
#> 
#>                  1.0%      2.5%      5.0%    Median     95.0%     97.5%  99.0%
#> (Intercept) -1.202788 -1.198393 -1.196130 -1.174662 -1.154046 -1.150353 -1.148
#> Merit1      -0.114875 -0.105898 -0.099868 -0.067881 -0.034968 -0.027306 -0.021
#> Merit2      -0.119475 -0.110285 -0.103639 -0.068959 -0.035013 -0.027636 -0.019
#> Merit3      -0.086946 -0.082139 -0.078211 -0.056405 -0.035365 -0.031042 -0.025
#> Class2       0.031115  0.040998  0.048813  0.081588  0.116481  0.123424  0.128
#> Class3      -0.017186 -0.011762 -0.007127  0.015565  0.039685  0.043562  0.048
#> Class4       0.124614  0.129955  0.134472  0.159205  0.182577  0.187139  0.193
#> Class5      -0.153963 -0.138125 -0.129093 -0.079072 -0.031762 -0.019854 -0.008
#> 
#> Effective Number of Parameters: 8.151565 
#> Expected Residual Deviance: 220.873 
#> DIC: -106.9279 
#> 
#> Expected Mean dispersion: 7.840919 
#> Sq.root of Expected Mean dispersion: 2.800164 
#> 
#> Mean Likelihood Subgradient Candidates Per iid sample: 2.64
    options(oldopt)

The Bayesian summary will report:

Because dispersion is fixed at the same value in both models, differences between out and out_glmb reflect primarily the influence of the prior on \(\beta\), not differences in \(\phi\).

6. Interpretation and Model Diagnostics

6.1 Coefficients

Under the log link, coefficient interpretations are multiplicative:

With a weak prior, posterior means in out_glmb will be close to the MLEs in out, but with slightly more regularization and smaller posterior standard deviations.

6.2 Dispersion

By fixing dispersion at disp from the classical model, the Bayesian and classical fits share the same assumed level of variability.

This allows:

If desired, a more advanced model can estimate dispersion by switching to a pfamily such as dNormal_Gamma, but that is covered in more detail in the dispersion‑focused vignettes.

6.3 DIC and Model Fit

The Bayesian summary of out_glmb reports:

These can be compared to AIC and deviance from the classical model, especially when considering alternative specifications (for example, reduced models, different covariate sets, or alternative link functions).

7. Concluding Discussion

Gamma regression provides a flexible framework for modeling positive, skewed response variables (McCullagh and Nelder 1989; Gelman et al. 2013).
In this chapter, we have:

In later vignettes, we extend these ideas to:


Appendix A. Bayes Rules! companion

(Johnson et al. 2022) does not include a dedicated chapter on Gamma regression. Chapter 12.7 notes that stan_glm() can use family = Gamma, but the book’s worked positive-response examples (e.g. cherry_blossom_sample finishing times) are analyzed with Gaussian models in Chapters 15 and 17.

In this package:

Topic Where to read
Gamma regression (Gamma family, log link, carinsca) Main body of this chapter
Scalar Gamma–Gamma conjugate rate Chapter 02-S05 (cherry_blossom_sample with dGamma(Inv_Dispersion = FALSE))
Unknown Gamma dispersion Chapter 15 (dNormal_Gamma, glmbdisp)

If you are following Bayes Rules! sequentially, complete Chapter 12 (Poisson) and the Chapter 10, Appendix A example before Gamma regression here; use Chapter 02-S05 when you need conjugate intuition for a Gamma-distributed rate with known shape.

References

Agresti, Alan. 2015. Foundations of Linear and Generalized Linear Models. Cambridge University Press.
Gelman, Andrew, John B. Carlin, Hal S. Stern, David B. Dunson, Aki Vehtari, and Donald B. Rubin. 2013. Bayesian Data Analysis. 3rd ed. CRC Press.
Griffin, Jim E., and Philip J. Brown. 2010. “Inference with Normal-Gamma Prior Distributions in Regression Problems.” Bayesian Analysis 5 (1): 171–88. https://doi.org/10.1214/10-BA507.
Johnson, Alicia A., Miles Q. Ott, and Mine Dogucu. 2022. Bayes Rules! An Introduction to Applied Bayesian Modeling. CRC Press. https://www.bayesrulesbook.com.
McCullagh, P., and J. A. Nelder. 1989. Generalized Linear Models. Chapman; Hall.
Nelder, J. A., and R. W. M. Wedderburn. 1972. “Generalized Linear Models.” Journal of the Royal Statistical Society. Series A (General) 135 (3): 370–84. https://doi.org/10.2307/2344614.
Spiegelhalter, David J., Nicky G. Best, Bradley P. Carlin, and Angelika van der Linde. 2002. “Bayesian Measures of Model Complexity and Fit.” Journal of the Royal Statistical Society: Series B (Statistical Methodology) 64 (4): 583–639. https://doi.org/10.1111/1467-9868.00353.
Venables, W. N., and B. D. Ripley. 2002. Modern Applied Statistics with S. Springer.

mirror server hosted at Truenetwork, Russian Federation.