Learn R Programming

VGAM (version 0.7-5)

alsqreg: Asymmetric Least Squares Quantile Regression

Description

Quantile regression using asymmetric least squares error loss.

Usage

alsqreg(w=1, method.init=1)

Arguments

w
Positive constant controlling the percentile. The larger the value the larger the fitted percentile value (the proportion of points below the ``w-regression plane''). The default value of unity results in the ordinary least squares (OLS) solution.
method.init
Integer, either 1 or 2 or 3. Initialization method. Choose another value if convergence fails.

Value

  • An object of class "vglmff" (see vglmff-class). The object is used by modelling functions such as vglm, and vgam.

Warning

The loglikelihood slot currently does not return the log-likelihood but negative the total asymmetric squared error loss (2.5).

Details

This method was proposed by Efron (1991) and full details can be obtained there. Equation numbers below refer to that article. The model is essentially a linear model (see lm), however, the asymmetric squared error loss function for a residual $r$ is $r^2$ if $r \leq 0$ and $w r^2$ if $r > 0$. The solution is the set of regression coefficients that minimize the sum of these over the data set, weighted by the weights argument (so that it can contain frequencies). Newton-Raphson estimation is used here.

References

Efron, B. (1991) Regression percentiles using asymmetric squared error loss. Statistica Sinica, 1, 93--125.

See Also

bminz, lms.bcn and similar variants are alternative methods for quantile regression.

Examples

Run this code
# Example 1
data(bminz)
o = with(bminz, order(age))
bminz = bminz[o,]  # Sort by age
fit = vglm(BMI ~ bs(age), fam=alsqreg(w=0.07), data=bminz)
fit # Note "loglikelihood" is -total asymmetric squared error loss (2.5)
fit@extra  # Gives the w value and the percentile
coef(fit)
coef(fit, matrix=TRUE)

# Quantile plot
with(bminz, plot(age, BMI, col="blue", main=
     paste(round(fit@extra$percentile, dig=1), "percentile curve")))
with(bminz, lines(age, c(fitted(fit)), col="black"))



# Example 2
# Find the w values that give the 25, 50 and 75 percentiles
findw = function(w, percentile=50) {
    fit2 = vglm(BMI ~ bs(age), fam=alsqreg(w=w), data=bminz)
    fit2@extra$percentile - percentile
}
# Quantile plot
with(bminz, plot(age, BMI, col="blue", las=1, main=
     "25, 50 and 75 percentile curves"))
for(myp in c(25,50,75)) {
    bestw = uniroot(f=findw, interval=c(1/10^4, 10^4), percentile=myp)
    fit2 = vglm(BMI ~ bs(age), fam=alsqreg(w=bestw$root), data=bminz)
with(bminz, lines(age, c(fitted(fit2)), col="red"))
}



# Example 3; this is Example 1 but with smoothing splines.
data(bminz)
o = with(bminz, order(age))
bminz = bminz[o,]  # Sort by age
fit3 = vgam(BMI ~ s(age, df=4), fam=alsqreg(w=0.07), data=bminz, trac=TRUE)
fit3@extra  # Gives the w value and the percentile

# Quantile plot
with(bminz, plot(age, BMI, col="blue", main=
     paste(round(fit3@extra$percentile, dig=1), "percentile curve")))
with(bminz, lines(age, c(fitted(fit3)), col="red"))
with(bminz, lines(age, c(fitted(fit )), col="black")) # For comparison

Run the code above in your browser using DataLab