fic.glm {fic} | R Documentation |
Focused information criteria for generalized linear models
Description
Focused information criteria for generalized linear models fitted with glm
.
Used to compare models with different covariates (more generally,
different linear terms).
Usage
## S3 method for class 'glm'
fic(wide, inds, inds0 = NULL, gamma0 = 0, focus = NULL,
focus_deriv = NULL, wt = NULL, sub = "auto", B = 0, loss = loss_mse,
...)
Arguments
wide |
Fitted model object containing the wide model. |
inds |
Matrix or vector of indicators for which parameters are included in the submodel or submodels to be assessed. A matrix should be supplied if there are multiple submodels. This should have number of rows equal to the number of submodels, and number of columns equal to the total number of parameters in the wide model. It contains 1s in the positions where the parameter is included in the submodel, and 0s in positions where the parameter is excluded. This should always be 1 in the positions defining the narrow model, as specified in |
inds0 |
Vector of indicators specifying the narrow model, in the same format as |
gamma0 |
Vector of special values taken by the parameters This defaults to 0, as in covariate selection, where "excluded" coefficients are fixed to 0. This should either be a scalar, assumed to be the same for all parameters fixed in the narrow model, or a vector of length equal to the number of parameters from the wide model which are fixed in the narrow model, that is, the number of entries of |
focus |
An R function with:
The function should return the focus quantity of interest. If additional arguments are supplied which are vectors or matrices, e.g. Not required if Alternatively,
See |
focus_deriv |
Vector of partial derivatives of the focus function with respect to the parameters in the wide model. This is not usually needed, as it can generally be computed automatically and accurately from the function supplied in |
wt |
Vector of weights to apply to different covariate values in |
sub |
If |
B |
If |
loss |
A function returning an estimated loss for a submodel estimate under the sampling distribution of the wide model. Only applicable when using bootstrapping. This should have two arguments |
... |
Other arguments to the focus function can be supplied here. The built-in focus functions If just one focus is needed, then To compute focused model comparison statistics for multiple focuses defined by the same focus function evaluated at multiple covariate values, For a typical regression model, the first parameter will denote an intercept, so the first value of Arguments to the focus function other than |
Details
The model parameters include the intercept, followed by the coefficients of any covariates. Any "dispersion" parameter is excluded from the parameters indicated by inds
and inds0
.
Only covariate selection problems are supported in this function.
To compare between models with a fixed and unknown dispersion,
glm
would have to be replaced by maximum likelihood
estimation routines written by hand, along the lines described in
the "skew-normal models" vignette.
The focus function can however depend on the value of the
dispersion parameter. The focus function should then have
an argument called dispersion
. See the example of a gamma
GLM below, where the focus is the mean outcome for some covariate
value.
Examples of covariate selection in logistic regression are given in the main package vignette.
Examples
# Gamma regression with one binary covariate
# Simulated data
set.seed(1)
simx <- rbinom(1000, 1, 0.5)
mean0 <- 1.1
simy <- rgamma(1000, shape=2, scale=exp(log(mean0) + 0.2*simx))
mod <- glm(simy ~ simx, family=Gamma(link="log"))
# Check the parameter estimates are close to true
# values used for simulation
(shape <- 1 / summary(mod)$dispersion)
coef(mod)[2] # log mean ratio associated with covariate. true value 0.2
exp(coef(mod)[1] - log(shape)) # mean with x=0, true value 1.1
exp(coef(mod)[1] + coef(mod)[2] - log(shape)) # mean with x=1
focus_mean <- function(par, X, dispersion){
exp(X %*% par - log(1/dispersion))
}
X <- rbind("x0" = c(1,0), "x1" = c(1,1))
inds <- rbind("no_covariate"=c(1,0), "covariate"=c(1,1))
fic(mod, inds=inds, focus=focus_mean, X=X)
# The focus need not depend on X or the dispersion
focus_base_scale <- function(par, dispersion){
exp(par[1])
}
fic(mod, inds=inds, focus=focus_base_scale)
# ...equivalently,
focus_base_scale <- function(par){
exp(par[1])
}
fic(mod, inds=inds, focus=focus_base_scale)