BGWeights {MuMIn} | R Documentation |
Bates-Granger minimal variance model weights
Description
Compute empirical weights based on out of sample forecast variances, following Bates and Granger (1969).
Usage
BGWeights(object, ..., data, force.update = FALSE)
Arguments
object , ... |
two or more fitted |
data |
a data frame containing the variables in the model. |
force.update |
if |
Details
Bates-Granger model weights are calculated using prediction covariance. To
get the estimate of prediction covariance, the models are fitted to
randomly selected half of data
and prediction is done on the
remaining half.
These predictions are then used to compute the variance-covariance between
models, \Sigma
. Model weights are then calculated as
w_{BG} = (1' \Sigma^{-1} 1)^{-1} 1 \Sigma^{-1}
,
where 1
a vector of 1-s.
Bates-Granger model weights may be outside of the [0,1]
range, which
may cause the averaged variances to be negative. Apparently this method
works best when data is large.
Value
A numeric vector of model weights.
Note
For matrix inversion, MASS::ginv()
is more stable near singularities
than solve
. It will be used as a fallback if solve
fails and
MASS is available.
Author(s)
Carsten Dormann, Kamil Bartoń
References
Bates, J. M. and Granger, C. W. J. 1969 The combination of forecasts. Journal of the Operational Research Society 20, 451-468.
Dormann, C. et al. (2018) Model averaging in ecology: a review of Bayesian, information-theoretic, and tactical approaches for predictive inference. Ecological Monographs 88, 485–504.
See Also
Other model weights:
bootWeights()
,
cos2Weights()
,
jackknifeWeights()
,
stackingWeights()
Examples
fm <- glm(Prop ~ mortality + dose, family = binomial, Beetle, na.action = na.fail)
models <- lapply(dredge(fm, evaluate = FALSE), eval)
ma <- model.avg(models)
# this produces warnings because of negative variances:
set.seed(78)
Weights(ma) <- BGWeights(ma, data = Beetle)
coefTable(ma, full = TRUE)
# SE for prediction is not reliable if some or none of coefficient's SE
# are available
predict(ma, data = test.data, se.fit = TRUE)
coefTable(ma, full = TRUE)