Rev 5789 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{cv.glm}\alias{cv.glm}\title{Cross-validation for Generalized Linear Models}\description{This function calculates the estimated K-fold cross-validation predictionerror for generalized linear models.}\usage{cv.glm(data, glmfit, cost, K)}\arguments{\item{data}{A matrix or data frame containing the data. The rows should be cases andthe columns correspond to variables, one of which is the response.}\item{glmfit}{An object of class \code{"glm"} containing the results of a generalized linearmodel fitted to \code{data}.}\item{cost}{A function of two vector arguments specifying the cost function for thecross-validation. The first argument to \code{cost} should correspond to theobserved responses and the second argument should correspond to the predictedor fitted responses from the generalized linear model. \code{cost} must return anon-negative scalar value. The default is the average squared error function.}\item{K}{The number of groups into which the data should be split to estimate thecross-validation prediction error. The value of \code{K} must be such that allgroups are of approximately equal size. If the supplied value of \code{K} doesnot satisfy this criterion then it will be set to the closest integer whichdoes and a warning is generated specifying the value of \code{K} used. The defaultis to set \code{K} equal to the number of observations in \code{data} which gives theusual leave-one-out cross-validation.}}\value{The returned value is a list with the following components.\item{call}{The original call to \code{cv.glm}.}\item{K}{The value of \code{K} used for the K-fold cross validation.}\item{delta}{A vector of length two. The first component is the raw cross-validationestimate of prediction error. The second component is the adjustedcross-validation estimate. The adjustment is designed to compensate for thebias introduced by not using leave-one-out cross-validation.}\item{seed}{The value of \code{.Random.seed} when \code{cv.glm} was called.}}\section{Side Effects}{The value of \code{.Random.seed} is updated.}\details{The data is divided randomly into \code{K} groups. For each group the generalizedlinear model is fit to \code{data} omitting that group, then the function \code{cost}is applied to the observed responses in the group that was omitted from the fitand the prediction made by the fitted models for those observations.When \code{K} is the number of observations leave-one-out cross-validation is usedand all the possible splits of the data are used. When \code{K} is less thanthe number of observations the \code{K} splits to be used are found by randomlypartitioning the data into \code{K} groups of approximately equal size. In thislatter case a certain amount of bias is introduced. This can be reduced byusing a simple adjustment (see equation 6.48 in Davison and Hinkley, 1997).The second value returned in \code{delta} is the estimate adjusted by this method.}\references{Breiman, L., Friedman, J.H., Olshen, R.A. and Stone, C.J. (1984)\emph{Classification and Regression Trees}. Wadsworth.Burman, P. (1989) A comparative study of ordinary cross-validation,\emph{v}-fold cross-validation and repeated learning-testing methods.\emph{Biometrika}, \bold{76}, 503--514Davison, A.C. and Hinkley, D.V. (1997)\emph{Bootstrap Methods and Their Application}. Cambridge University Press.Efron, B. (1986) How biased is the apparent error rate of a prediction rule?\emph{Journal of the American Statistical Association}, \bold{81}, 461--470.Stone, M. (1974) Cross-validation choice and assessment of statisticalpredictions (with Discussion).\emph{Journal of the Royal Statistical Society, B}, \bold{36}, 111--147.}\seealso{\code{\link{glm}}, \code{\link{glm.diag}}, \code{\link{predict}}}\examples{# leave-one-out and 6-fold cross-validation prediction error for# the mammals data set.data(mammals, package="MASS")mammals.glm <- glm(log(brain) ~ log(body), data = mammals)(cv.err <- cv.glm(mammals, mammals.glm)$delta)(cv.err.6 <- cv.glm(mammals, mammals.glm, K = 6)$delta)# As this is a linear model we could calculate the leave-one-out# cross-validation estimate without any extra model-fitting.muhat <- fitted(mammals.glm)mammals.diag <- glm.diag(mammals.glm)(cv.err <- mean((mammals.glm$y - muhat)^2/(1 - mammals.diag$h)^2))# leave-one-out and 11-fold cross-validation prediction error for# the nodal data set. Since the response is a binary variable an# appropriate cost function iscost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)nodal.glm <- glm(r ~ stage+xray+acid, binomial, data = nodal)(cv.err <- cv.glm(nodal, nodal.glm, cost, K = nrow(nodal))$delta)(cv.11.err <- cv.glm(nodal, nodal.glm, cost, K = 11)$delta)}\keyword{regression}