Getting started with fastkqr

This package provides tools for fitting kernel quantile regression.

The strengths and improvements that this package offers relative to other quantile regression packages are as follows:

  • Compiled Fortran code significantly speeds up the kernel quantile regression estimation process.

  • Solve non-crossing kernel quantile regression.

For this getting-started vignette, first, we will use a real data set named as GAGurine in the package MASS, which collects the concentration of chemical GAGs in the urine of 314 children aged 0 to 17 years. We used the concentration of GAG as the response variable.

library(fastkqr)
library(MASS)
data(GAGurine)
x <- as.matrix(GAGurine$Age)
y <- GAGurine$GAG

Then the kernel quantile regression model is formulated as the sum of check loss and an 2 penalty:

$$ \min_{\alpha\in\mathbb{R}^{n},b\in\mathbb{R}}\frac{1}{n} \sum_{i=1}^{n}\rho_{\tau}(y_{i}-b-\mathbf{K}_{i}^{\top}\alpha) +\frac{\lambda}{2} \alpha^{\top}\mathbf{K}\alpha \qquad (*). $$

kqr()

Given an input matrix x, a quantile level tau, and a response vector y, a kernel quantile regression model is estimated for a sequence of penalty parameter values. The other main arguments the users might supply are:

  • lambda: a user-supplied lambda sequence.
  • is_exact: exact or approximated solutions.
lambda <- 10^(seq(1, -4, length.out=10))
fit <- kqr(x, y, lambda=lambda, tau=0.1, is_exact=TRUE)

cv.kqr()

This function performs k-fold cross-validation (cv). It takes the same arguments as kqr.

cv.fit <- cv.kqr(x, y, lambda=lambda, tau=0.1)

Methods

A number of S3 methods are provided for nckqr object.

  • coef() and predict() return a matrix of coefficients and predictions given a matrix x at each lambda respectively. The optional s argument may provide a specific value of λ (not necessarily part of the original sequence).
coef <- coef(fit, s = c(0.02, 0.03))
predict(fit, x, tail(x), s = fit$lambda[2:3])
#>            s1       s2
#> [1,] 4.699993 4.699979
#> [2,] 4.700661 4.702405
#> [3,] 4.700897 4.703255
#> [4,] 4.701326 4.704802
#> [5,] 4.701718 4.706218
#> [6,] 4.704202 4.715175

nckqr()

Given an input matrix x, a sequence of quantile levels tau, and a response vector y, a non-crossing kernel quantile regression model is estimated for two sequences of penalty parameter values. It takes the same arguments x, y,is_exact, which are specified above. The other main arguments the users might supply are:

  • lambda2: a user-supplied lambda1 sequence for the L2 penalty.

  • lambda1: a user-supplied lambda2 sequence for the smooth ReLU penalty.

l2 <- 1e-4
tau <- c(0.1, 0.3, 0.5)
l1_list <- 10^seq(-8, 2, length.out=10)
fit1 <- nckqr(x ,y, lambda1 = l1_list, lambda2 = l2,  tau = tau)

cv.nckqr()

This function performs k-fold cross-validation (cv) for selecting the tuning parameter ‘lambda2’ of non-crossing kernel quantile regression. It takes the same arguments as nckqr.

l2_list <- 10^(seq(1, -4, length.out=10))
cv.fit1 <- cv.nckqr(x, y, lambda1=10, lambda2=l2_list, tau=tau)

Methods

A number of S3 methods are provided for nckqr object.

  • coef() and predict() return an array of coefficients and predictions given a matrix X and lambda2 at each lambda1 respectively. The optional s1 argument may provide a specific value of λ1 (not necessarily part of the original sequence).
coef <- coef(fit1, s2=1e-4, s1 = l1_list[2:3])
predict(fit1, x, tail(x), s1=l1_list[1:3], s2=l2)
#> , , 1
#> 
#>          [,1]     [,2]     [,3]
#> [1,] 2.113224 2.420619 2.708632
#> [2,] 1.601763 1.889033 2.149823
#> [3,] 1.590533 1.916073 2.142716
#> [4,] 1.695981 2.168901 2.368882
#> [5,] 1.903780 2.596512 2.827368
#> [6,] 4.698531 7.877953 9.211790
#> 
#> , , 2
#> 
#>          [,1]     [,2]     [,3]
#> [1,] 2.113224 2.420620 2.708636
#> [2,] 1.601763 1.889034 2.149823
#> [3,] 1.590533 1.916073 2.142716
#> [4,] 1.695981 2.168900 2.368881
#> [5,] 1.903780 2.596512 2.827368
#> [6,] 4.698530 7.877954 9.211790
#> 
#> , , 3
#> 
#>          [,1]     [,2]     [,3]
#> [1,] 2.113225 2.420603 2.708696
#> [2,] 1.601764 1.889037 2.149831
#> [3,] 1.590534 1.916077 2.142717
#> [4,] 1.695981 2.168902 2.368877
#> [5,] 1.903780 2.596510 2.827363
#> [6,] 4.698527 7.877953 9.211790