Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you perform a goodness of link test for a generalized linear model in R?

I'm working on fitting a generalized linear model in R (using glm()) for some data that has two predictors in full factorial. I'm confident that the gamma family is the right error distribution to use but not sure about which link function to use so I'd like to test all possible link functions against one another. Of course, I can do this manually by making a separate model for each link function and then compare deviances, but I imagine there is a R function that will do this and compile results. I have searched on CRAN, SO, Cross-validated, and the web - the closest function I found was clm2 but I do not believe I want a cumulative link model - based on my understanding of what clm's are.

My current model looks like this:

CO2_med_glm_alf_gamma <- glm(flux_median_mod_CO2~PercentH2OGrav+
                           I(PercentH2OGrav^2)+Min_Dist+
                           I(Min_Dist^2)+PercentH2OGrav*Min_Dist, 
                  data = NC_alf_DF,
                  family=Gamma(link="inverse"))

How do I code this model into an R function that will do such a 'goodness-of-link' test?

(As far as the statistical validity of such a test goes, this discussion as well as a discussion with a stats post-doc lead me to believe that is valid to compare AIC or deviances between generalized linear models that are identical except for having different link functions)

like image 769
DirtStats Avatar asked Aug 31 '25 06:08

DirtStats


1 Answers

This is not "all possible links", it's testing against a specified class of links, but there is a goodness-of-link test by Pregibon that is implemented in the LDdiag package. It's not on CRAN, but you can install it from the archives via

devtools::install_version("LDdiag","0.1")

The example given (not that exciting) is

quine$Days <- ifelse(quine$Days==0, 1, quine$Days)
ex <- glm(Days ~ ., family = Gamma(link="log"), data = quine)
pregibon(ex)

The pregibon family of link functions is implemented in the glmx package. As pointed out by Achim Zeleis in comments, the package provides various parametric link functions and supports general estimation and inference based on such parametric links (or more generally parametric families). To see a worked example how this can be employed for a variety of goodness-of-link assessements, see example("WECO", package = "glmx"). This replicates the analyses from two papers by Koenker and Yoon (see below).

This example might be useful too.

  • Koenker R (2006). “Parametric Links for Binary Response.” R News, 6(4), 32--34; link to page with supplementary materials.
  • Koenker R, Yoon J (2009). “Parametric Links for Binary Choice Models: A Fisherian-Bayesian Colloquy.” Journal of Econometrics, 152, 120--130; PDF.
like image 171
Ben Bolker Avatar answered Sep 02 '25 20:09

Ben Bolker