fastglmPure.Rd
fast generalized linear model fitting
fastglmPure(x, y, family = gaussian(), weights = rep(1, NROW(y)), offset = rep(0, NROW(y)), start = NULL, etastart = NULL, mustart = NULL, method = 0L, tol = 1e-07, maxit = 100L)
x | input model matrix. Must be a matrix object |
---|---|
y | numeric response vector of length nobs. |
family | a description of the error distribution and link function to be used in the model.
For |
weights | an optional vector of 'prior weights' to be used in the fitting process. Should be a numeric vector. |
offset | this can be used to specify an a priori known component to be included in the linear predictor during fitting. This should be a numeric vector of length equal to the number of cases |
start | starting values for the parameters in the linear predictor. |
etastart | starting values for the linear predictor. |
mustart | values for the vector of means. |
method | an integer scalar with value 0 for the column-pivoted QR decomposition, 1 for the unpivoted QR decomposition, 2 for the LLT Cholesky, 3 for the LDLT Cholesky, 4 for the full pivoted QR decomposition, 5 for the Bidiagonal Divide and Conquer SVD |
tol | threshold tolerance for convergence. Should be a positive real number |
maxit | maximum number of IRLS iterations. Should be an integer |
A list with the elements
a vector of coefficients
a vector of the standard errors of the coefficient estimates
a scalar denoting the computed rank of the model matrix
a scalar denoting the degrees of freedom in the model
the vector of residuals
a numeric scalar - the root mean square for residuals
the vector of fitted values
set.seed(1) x <- matrix(rnorm(1000 * 25), ncol = 25) eta <- 0.1 + 0.25 * x[,1] - 0.25 * x[,3] + 0.75 * x[,5] -0.35 * x[,6] #0.25 * x[,1] - 0.25 * x[,3] y <- 1 * (eta > rnorm(1000)) yp <- rpois(1000, eta ^ 2) yg <- rgamma(1000, exp(eta) * 1.75, 1.75) # binomial system.time(gl1 <- glm.fit(x, y, family = binomial()))#> user system elapsed #> 0.007 0.000 0.008system.time(gf1 <- fastglmPure(x, y, family = binomial(), tol = 1e-8))#> user system elapsed #> 0.003 0.000 0.004system.time(gf2 <- fastglmPure(x, y, family = binomial(), method = 1, tol = 1e-8))#> user system elapsed #> 0.004 0.001 0.003system.time(gf3 <- fastglmPure(x, y, family = binomial(), method = 2, tol = 1e-8))#> user system elapsed #> 0.002 0.000 0.003system.time(gf4 <- fastglmPure(x, y, family = binomial(), method = 3, tol = 1e-8))#> user system elapsed #> 0.002 0.000 0.002max(abs(coef(gl1) - gf1$coef))#> [1] 1.998401e-15max(abs(coef(gl1) - gf2$coef))#> [1] 8.881784e-16max(abs(coef(gl1) - gf3$coef))#> [1] 1.776357e-15max(abs(coef(gl1) - gf4$coef))#> [1] 1.776357e-15# poisson system.time(gl1 <- glm.fit(x, yp, family = poisson(link = "log")))#> user system elapsed #> 0.007 0.000 0.008system.time(gf1 <- fastglmPure(x, yp, family = poisson(link = "log"), tol = 1e-8))#> user system elapsed #> 0.003 0.000 0.003system.time(gf2 <- fastglmPure(x, yp, family = poisson(link = "log"), method = 1, tol = 1e-8))#> user system elapsed #> 0.003 0.000 0.003system.time(gf3 <- fastglmPure(x, yp, family = poisson(link = "log"), method = 2, tol = 1e-8))#> user system elapsed #> 0.002 0.000 0.002system.time(gf4 <- fastglmPure(x, yp, family = poisson(link = "log"), method = 3, tol = 1e-8))#> user system elapsed #> 0.002 0.000 0.002max(abs(coef(gl1) - gf1$coef))#> [1] 3.538836e-16max(abs(coef(gl1) - gf2$coef))#> [1] 3.816392e-16max(abs(coef(gl1) - gf3$coef))#> [1] 2.63678e-16max(abs(coef(gl1) - gf4$coef))#> [1] 2.428613e-16# gamma system.time(gl1 <- glm.fit(x, yg, family = Gamma(link = "log")))#> user system elapsed #> 0.020 0.001 0.022system.time(gf1 <- fastglmPure(x, yg, family = Gamma(link = "log"), tol = 1e-8))#> user system elapsed #> 0.008 0.000 0.010system.time(gf2 <- fastglmPure(x, yg, family = Gamma(link = "log"), method = 1, tol = 1e-8))#> user system elapsed #> 0.008 0.000 0.008system.time(gf3 <- fastglmPure(x, yg, family = Gamma(link = "log"), method = 2, tol = 1e-8))#> user system elapsed #> 0.007 0.000 0.006system.time(gf4 <- fastglmPure(x, yg, family = Gamma(link = "log"), method = 3, tol = 1e-8))#> user system elapsed #> 0.006 0.000 0.005max(abs(coef(gl1) - gf1$coef))#> [1] 6.661338e-16max(abs(coef(gl1) - gf2$coef))#> [1] 5.551115e-16max(abs(coef(gl1) - gf3$coef))#> [1] 8.881784e-16max(abs(coef(gl1) - gf4$coef))#> [1] 8.881784e-16