conquer/ 0000755 0001762 0000144 00000000000 14202037136 011724 5 ustar ligges users conquer/NAMESPACE 0000644 0001762 0000144 00000000631 14202030400 013126 0 ustar ligges users # Generated by roxygen2: do not edit by hand
export(conquer)
export(conquer.cv.reg)
export(conquer.process)
export(conquer.reg)
importFrom(Matrix,rankMatrix)
importFrom(Rcpp,evalCpp)
importFrom(matrixStats,colSds)
importFrom(matrixStats,rowMaxs)
importFrom(matrixStats,rowQuantiles)
importFrom(matrixStats,rowSds)
importFrom(stats,qnorm)
importFrom(stats,quantile)
importFrom(stats,runif)
useDynLib(conquer)
conquer/README.md 0000644 0001762 0000144 00000016675 14137314661 013232 0 ustar ligges users # conquer
**Con**volution-type smoothed **qu**antil**e** **r**egression
## Description
The `conquer` library performs fast and accurate convolution-type smoothed quantile regression ([Fernandes, Guerre and Horta, 2021](https://www.tandfonline.com/doi/full/10.1080/07350015.2019.1660177), [He et al., 2021](https://doi.org/10.1016/j.jeconom.2021.07.010), [Tan, Wang and Zhou, 2021](https://arxiv.org/abs/2109.05640)) for low/high-dimensional estimation and bootstrap inference.
In the low-dimensional setting, efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed. In high dimensions, the conquer methods complemented with *ℓ1*-penalization and iteratively reweighted *ℓ1*-penalization are used to fit sparse models.
## Updates
2021-10-24 (Version 1.2.0):
Major updates:
1. Add a function `conquer.process` for conquer process over a quantile range.
2. Add functions `conquer.reg`, `conquer.cv.reg` for high-dimensional conquer with Lasso, SCAD and MCP penalties. The first function is called with a prescribed *λ*, and the second function calibrate *λ* via cross-validation. The candidates of *λ* can be user-specified, or automatically generated by simulating the pivotal quantity proposed in [Belloni and Chernozhukov, 2011](https://doi.org/10.1214/10-AOS827).
Minor updates:
1. Add logistic kernel for all the functions.
2. Modify initialization using asymmetric Huber regression.
3. Default number of tightening iterations is now 3.
4. Parameters for SCAD (default = 3.7) and MCP (default = 3) are added as arguments into the functions.
## Installation
`conquer` is available on [CRAN](https://CRAN.R-project.org/package=conquer), and it can be installed into `R` environment:
```r
install.packages("conquer")
```
## Common errors or warnings
A collection of error / warning messages and their solutions:
* Error: smqr.cpp: 'quantile' is not a member of 'arma’. **Solution**: 'quantile' function was added into `RcppArmadillo` version 0.9.850.1.0 (2020-02-09), so reinstalling / updating the library `RcppArmadillo` will fix this issue.
* Error: unable to load shared object.. Symbol not found: _EXTPTR_PTR. **Solution**: This issue is common in some specific versions of `R` when we load Rcpp-based libraries. It is an error in R caused by a minor change about `EXTPTR_PTR`. Upgrading R to 4.0.2 will solve the problem.
## Functions
There are 4 functions in this library:
* `conquer`: convolution-type smoothed quantile regression
* `conquer.process`: convolution-type smoothed quantile regression process
* `conquer.reg`: convolution-type smoothed quantile regression with regularization
* `conquer.cv.reg`: cross-validated convolution-type smoothed quantile regression with regularization
## Examples
Let us illustrate conquer by a simple example. For sample size *n = 5000* and dimension *p = 500*, we generate data from a linear model *yi = β0 + i, β> + εi*, for *i = 1, 2, ... n*. Here we set *β0 = 1*, *β* is a *p*-dimensional vector with every entry being *1*, *xi* follows *p*-dimensional standard multivariate normal distribution (available in the library `MASS`), and *εi* is from *t2* distribution.
```r
library(MASS)
library(quantreg)
library(conquer)
n = 5000
p = 500
beta = rep(1, p + 1)
set.seed(2021)
X = mvrnorm(n, rep(0, p), diag(p))
err = rt(n, 2)
Y = cbind(1, X) %*% beta + err
```
Then we run both quantile regression using package `quantreg`, with a Frisch-Newton approach after preprocessing ([Portnoy and Koenker, 1997](https://projecteuclid.org/euclid.ss/1030037960)), and conquer (with Gaussian kernel) on the generated data. The quantile level *τ* is fixed to be *0.5*.
```r
tau = 0.5
start = Sys.time()
fit.qr = rq(Y ~ X, tau = tau, method = "pfn")
end = Sys.time()
time.qr = as.numeric(difftime(end, start, units = "secs"))
est.qr = norm(as.numeric(fit.qr$coefficients) - beta, "2")
start = Sys.time()
fit.conquer = conquer(X, Y, tau = tau)
end = Sys.time()
time.conquer = as.numeric(difftime(end, start, units = "secs"))
est.conquer = norm(fit.conquer$coeff - beta, "2")
```
It takes 7.4 seconds to run the standard quantile regression but only 0.2 seconds to run conquer. In the meanwhile, the estimation error is 0.5186 for quantile regression and 0.4864 for conquer. For readers’ reference, these runtimes are recorded on a Macbook Pro with 2.3 GHz 8-Core Intel Core i9 processor, and 16 GB 2667 MHz DDR4 memory. We refer to [He et al., 2021](https://doi.org/10.1016/j.jeconom.2021.07.010) for a more extensive numerical study.
## Getting help
Help on the functions can be accessed by typing `?`, followed by function name at the `R` command prompt.
For example, `?conquer` will present a detailed documentation with inputs, outputs and examples of the function `conquer`.
## License
GPL-3.0
## System requirements
C++11
## Authors
Xuming He , Xiaoou Pan , Kean Ming Tan and Wen-Xin Zhou
## Maintainer
Xiaoou Pan
## References
Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. *IMA J. Numer. Anal.* **8** 141-148. [Paper](https://doi.org/10.1093/imanum/8.1.141)
Belloni, A. and Chernozhukov, V. (2011) *ℓ1*-penalized quantile regression in high-dimensional sparse models. *Ann. Statist.* **39** 82-130. [Paper](https://doi.org/10.1214/10-AOS827)
Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. *Ann. Statist.* **46** 814-841. [Paper](https://projecteuclid.org/euclid.aos/1522742437)
Fernandes, M., Guerre, E. and Horta, E. (2021). Smoothing quantile regressions. *J. Bus. Econ. Statist.* **39** 338-357, [Paper](https://www.tandfonline.com/doi/full/10.1080/07350015.2019.1660177)
He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression with large-scale inference. *J. Econometrics*, to appear. [Paper](https://doi.org/10.1016/j.jeconom.2021.07.010)
Horowitz, J. L. (1998). Bootstrap methods for median regression models. *Econometrica* **66** 1327–1351. [Paper](https://www.jstor.org/stable/2999619)
Koenker, R. (2005). Quantile Regression. Cambridge Univ. Press, Cambridge. [Book](https://www.cambridge.org/core/books/quantile-regression/C18AE7BCF3EC43C16937390D44A328B1)
Koenker, R. (2019). Package "quantreg", version 5.54. [CRAN](https://CRAN.R-project.org/package=quantreg)
Koenker, R. and Bassett, G. (1978). Regression quantiles. *Econometrica* **46** 33-50. [Paper](https://www.jstor.org/stable/1913643?seq=1#metadata_info_tab_contents)
Portnoy, S. and Koenker, R. (1997). The Gaussian hare and the Laplacian tortoise: Computability of squared-error versus absolute-error estimators. *Statist. Sci.* **12** 279–300. [Paper](https://projecteuclid.org/euclid.ss/1030037960)
Sanderson, C. and Curtin, R. (2016). Armadillo: A template-based C++ library for linear algebra. *J. Open Source Softw.* **1** 26. [Paper](https://joss.theoj.org/papers/10.21105/joss.00026.pdf)
Tan, K. M., Wang, L. and Zhou, W.-X. (2021+). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, to appear. [arXiv](https://arxiv.org/abs/2109.05640)
conquer/man/ 0000755 0001762 0000144 00000000000 14202030402 012464 5 ustar ligges users conquer/man/conquer.reg.Rd 0000644 0001762 0000144 00000010111 14137702711 015215 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/smqr.R
\name{conquer.reg}
\alias{conquer.reg}
\title{Penalized Convolution-Type Smoothed Quantile Regression}
\usage{
conquer.reg(
X,
Y,
lambda = 0.2,
tau = 0.5,
kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"),
h = 0,
penalty = c("lasso", "scad", "mcp"),
para = NULL,
epsilon = 0.001,
iteMax = 500,
phi0 = 0.01,
gamma = 1.2,
iteTight = 3
)
}
\arguments{
\item{X}{A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates.}
\item{Y}{An \eqn{n}-dimensional response vector.}
\item{lambda}{(\strong{optional}) Regularization parameter. Default is 0.2.}
\item{tau}{(\strong{optional}) Quantile level (between 0 and 1). Default is 0.5.}
\item{kernel}{(\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".}
\item{h}{(\strong{optional}) Bandwidth/smoothing parameter. Default is \eqn{\max\{0.5 * (log(p) / n)^{0.25}, 0.05\}}.}
\item{penalty}{(\strong{optional}) A character string specifying the penalty. Default is "lasso". The other two options are "scad" and "mcp".}
\item{para}{(\strong{optional}) A constant parameter for "scad" and "mcp". Do not need to specify if the penalty is lasso. The default values are 3.7 for "scad" and 3 for "mcp".}
\item{epsilon}{(\strong{optional}) A tolerance level for the stopping rule. The iteration will stop when the maximum magnitude of the change of coefficient updates is less than \code{epsilon}. Default is 0.001.}
\item{iteMax}{(\strong{optional}) Maximum number of iterations. Default is 500.}
\item{phi0}{(\strong{optional}) The initial quadratic coefficient parameter in the local adaptive majorize-minimize algorithm. Default is 0.01.}
\item{gamma}{(\strong{optional}) The adaptive search parameter (greater than 1) in the local adaptive majorize-minimize algorithm. Default is 1.2.}
\item{iteTight}{(\strong{optional}) Maximum number of tightening iterations in the iteratively reweighted \eqn{\ell_1}-penalized algorithm. Do not need to specify if the penalty is lasso. Default is 3.}
}
\value{
An object containing the following items will be returned:
\describe{
\item{\code{coeff}}{A \eqn{(p + 1)} vector of estimated coefficients, including the intercept.}
\item{\code{bandwidth}}{Bandwidth value.}
\item{\code{tau}}{Quantile level.}
\item{\code{kernel}}{Kernel function.}
\item{\code{penalty}}{Penalty type.}
\item{\code{lambda}}{Regularization parameter.}
\item{\code{n}}{Sample size.}
\item{\code{p}}{Number of the covariates.}
}
}
\description{
Fit sparse quantile regression models in high dimensions via regularized conquer methods with "lasso", "scad" and "mcp" penalties. For "scad" and "mcp", the iteratively reweighted \eqn{\ell_1}-penalized algorithm is complemented with a local adpative majorize-minimize algorithm.
}
\examples{
n = 200; p = 500; s = 10
beta = c(rep(1.5, s), rep(0, p - s))
X = matrix(rnorm(n * p), n, p)
Y = X \%*\% beta + rt(n, 2)
## Regularized conquer with lasso penalty at tau = 0.8
fit.lasso = conquer.reg(X, Y, lambda = 0.05, tau = 0.8, kernel = "Gaussian", penalty = "lasso")
beta.lasso = fit.lasso$coeff
#' ## Regularized conquer with scad penalty at tau = 0.8
fit.scad = conquer.reg(X, Y, lambda = 0.13, tau = 0.8, kernel = "Gaussian", penalty = "scad")
beta.scad = fit.scad$coeff
}
\references{
Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
Tan, K. M., Wang, L. and Zhou, W.-X. (2021). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, to appear.
}
\seealso{
See \code{\link{conquer.cv.reg}} for regularized quantile regression with cross-validation.
}
\author{
Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
}
conquer/man/conquer.process.Rd 0000644 0001762 0000144 00000006535 14137702450 016135 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/smqr.R
\name{conquer.process}
\alias{conquer.process}
\title{Convolution-Type Smoothed Quantile Regression Process}
\usage{
conquer.process(
X,
Y,
tauSeq = seq(0.1, 0.9, by = 0.05),
kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"),
h = 0,
checkSing = FALSE,
tol = 1e-04,
iteMax = 5000
)
}
\arguments{
\item{X}{A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates. Number of observations \eqn{n} must be greater than number of covariates \eqn{p}.}
\item{Y}{An \eqn{n}-dimensional response vector.}
\item{tauSeq}{(\strong{optional}) A sequence of quantile values (between 0 and 1). Default is \eqn{\{0.1, 0.15, 0.2, ..., 0.85, 0.9\}}.}
\item{kernel}{(\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".}
\item{h}{(\strong{optional}) The bandwidth/smoothing parameter. Default is \eqn{\max\{((log(n) + p) / n)^{0.4}, 0.05\}}. The default will be used if the input value is less than 0.05.}
\item{checkSing}{(\strong{optional}) A logical flag. Default is FALSE. If \code{checkSing = TRUE}, then it will check if the design matrix is singular before running conquer.}
\item{tol}{(\strong{optional}) Tolerance level of the gradient descent algorithm. The iteration will stop when the maximum magnitude of all the elements of the gradient is less than \code{tol}. Default is 1e-04.}
\item{iteMax}{(\strong{optional}) Maximum number of iterations. Default is 5000.}
}
\value{
An object containing the following items will be returned:
\describe{
\item{\code{coeff}}{A \eqn{(p + 1)} by \eqn{m} matrix of estimated quantile regression process coefficients, including the intercept. m is the length of \code{tauSeq}.}
\item{\code{bandwidth}}{Bandwidth value.}
\item{\code{tauSeq}}{The sequence of quantile levels.}
\item{\code{kernel}}{The choice of kernel function.}
\item{\code{n}}{Sample size.}
\item{\code{p}}{Number the covariates.}
}
}
\description{
Fit a smoothed quantile regression process over a quantile range. The algorithm is essentially the same as \code{\link{conquer}}.
}
\examples{
n = 500; p = 10
beta = rep(1, p)
X = matrix(rnorm(n * p), n, p)
Y = X \%*\% beta + rt(n, 2)
## Smoothed quantile regression process with Gaussian kernel
fit.Gauss = conquer.process(X, Y, tauSeq = seq(0.2, 0.8, by = 0.05), kernel = "Gaussian")
beta.hat.Gauss = fit.Gauss$coeff
## Smoothe quantile regression with uniform kernel
fit.unif = conquer.process(X, Y, tauSeq = seq(0.2, 0.8, by = 0.05), kernel = "uniform")
beta.hat.unif = fit.unif$coeff
}
\references{
Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist., in press.
He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
}
\seealso{
See \code{\link{conquer}} for single-index smoothed quantile regression.
}
\author{
Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
}
conquer/man/conquer-package.Rd 0000644 0001762 0000144 00000004060 14137702450 016040 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/conquer-package.R
\docType{package}
\name{conquer-package}
\alias{conquer-package}
\title{Conquer: Convolution-Type Smoothed Quantile Regression}
\description{
Estimation and inference for conditional linear quantile regression models using a convolution smoothed approach. In the low-dimensional setting, efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed. In high dimensions, the conquer methods complemented with \eqn{\ell_1}-penalization and iteratively reweighted \eqn{\ell_1}-penalization are used to fit sparse models.
}
\references{
Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
Belloni, A. and Chernozhukov, V. (2011). \eqn{\ell_1} penalized quantile regression in high-dimensional sparse models. Ann. Statist. 39 82-130.
Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist. 39 338-357.
He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
Horowitz, J. L. (1998). Bootstrap methods for median regression models. Econometrica 66 1327–1351.
Koenker, R. (2005). Quantile Regression. Cambridge University Press, Cambridge.
Koenker, R. Package "quantreg".
Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
Tan, K. M., Wang, L. and Zhou, W.-X. (2021+). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, in press.
}
\author{
Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
}
conquer/man/conquer.cv.reg.Rd 0000644 0001762 0000144 00000011140 14137702450 015627 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/smqr.R
\name{conquer.cv.reg}
\alias{conquer.cv.reg}
\title{Cross-Validated Penalized Convolution-Type Smoothed Quantile Regression}
\usage{
conquer.cv.reg(
X,
Y,
lambdaSeq = NULL,
tau = 0.5,
kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"),
h = 0,
penalty = c("lasso", "scad", "mcp"),
kfolds = 5,
numLambda = 50,
para = NULL,
epsilon = 0.001,
iteMax = 500,
phi0 = 0.01,
gamma = 1.2,
iteTight = 3
)
}
\arguments{
\item{X}{A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates.}
\item{Y}{An \eqn{n}-dimensional response vector.}
\item{lambdaSeq}{(\strong{optional}) A sequence of candidate regularization parameters. If unspecified, the sequence will be generated by a simulated pivotal quantity approach proposed by Belloni and Chernozhukov (2011).}
\item{tau}{(\strong{optional}) Quantile level (between 0 and 1). Default is 0.5.}
\item{kernel}{(\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".}
\item{h}{(\strong{optional}) The bandwidth parameter for kernel smoothing. Default is \eqn{\max\{0.5 * (log(p) / n)^{0.25}, 0.05\}}.}
\item{penalty}{(\strong{optional}) A character string specifying the penalty. Default is "lasso". Choices are "lasso", "scad" or "mcp".}
\item{kfolds}{(\strong{optional}) Number of folds for cross-validation. Default is 5.}
\item{numLambda}{(\strong{optional}) Number of \eqn{\lambda} values for cross-validation if \code{lambdaSeq} is unspeficied. Default is 50.}
\item{para}{(\strong{optional}) A constant parameter for "scad" and "mcp". Do not need to specify if the penalty is lasso. The default values are 3.7 for "scad" and 3 for "mcp".}
\item{epsilon}{(\strong{optional}) A tolerance level for the stopping rule. The iteration will stop when the maximum magnitude of the change of coefficient updates is less than \code{epsilon}. Default is 0.001.}
\item{iteMax}{(\strong{optional}) Maximum number of iterations. Default is 500.}
\item{phi0}{(\strong{optional}) The initial quadratic coefficient parameter in the local adaptive majorize-minimize algorithm. Default is 0.01.}
\item{gamma}{(\strong{optional}) The adaptive search parameter (greater than 1) in the local adaptive majorize-minimize algorithm. Default is 1.2.}
\item{iteTight}{(\strong{optional}) Maximum number of tightening iterations in the iteratively reweighted \eqn{\ell_1}-penalized algorithm. Do not need to specify if the penalty is lasso. Default is 3.}
}
\value{
An object containing the following items will be returned:
\describe{
\item{\code{coeff}}{A \eqn{(p + 1)} vector of estimated coefficients, including the intercept.}
\item{\code{lambda}}{Regularization parameter selected by cross-validation.}
\item{\code{bandwidth}}{Bandwidth value.}
\item{\code{tau}}{Quantile level.}
\item{\code{kernel}}{Kernel function.}
\item{\code{penalty}}{Penalty type.}
\item{\code{n}}{Sample size.}
\item{\code{p}}{Number of covariates.}
}
}
\description{
Fit sparse quantile regression models via regularized conquer methods with "lasso", "scad" and "mcp" penalties. The regularization parameter \eqn{\lambda} is selected by cross-validation.
}
\examples{
n = 100; p = 100; s = 3
beta = c(rep(1.5, s), rep(0, p - s))
X = matrix(rnorm(n * p), n, p)
Y = X \%*\% beta + rt(n, 2)
## Cross-validated regularized conquer with lasso penalty at tau = 0.8
fit.lasso = conquer.cv.reg(X, Y, tau = 0.8, kernel = "Gaussian", penalty = "lasso")
beta.lasso = fit.lasso$coeff
#' ## Cross-validated regularized conquer with scad penalty at tau = 0.8
fit.scad = conquer.cv.reg(X, Y,tau = 0.8, kernel = "Gaussian", penalty = "scad")
beta.scad = fit.scad$coeff
}
\references{
Belloni, A. and Chernozhukov, V. (2011). \eqn{\ell_1} penalized quantile regression in high-dimensional sparse models. Ann. Statist. 39 82-130.
Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
Tan, K. M., Wang, L. and Zhou, W.-X. (2021). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, to appear.
}
\seealso{
See \code{\link{conquer.reg}} for regularized quantile regression with a prescribed \eqn{lambda}.
}
\author{
Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
}
conquer/man/conquer.Rd 0000644 0001762 0000144 00000010626 14137702450 014454 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/smqr.R
\name{conquer}
\alias{conquer}
\title{Convolution-Type Smoothed Quantile Regression}
\usage{
conquer(
X,
Y,
tau = 0.5,
kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"),
h = 0,
checkSing = FALSE,
tol = 1e-04,
iteMax = 5000,
ci = FALSE,
alpha = 0.05,
B = 1000
)
}
\arguments{
\item{X}{A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates. Number of observations \eqn{n} must be greater than number of covariates \eqn{p}.}
\item{Y}{An \eqn{n}-dimensional response vector.}
\item{tau}{(\strong{optional}) The desired quantile level. Default is 0.5. Value must be between 0 and 1.}
\item{kernel}{(\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".}
\item{h}{(\strong{optional}) Bandwidth/smoothing parameter. Default is \eqn{\max\{((log(n) + p) / n)^{0.4}, 0.05\}}. The default will be used if the input value is less than 0.05.}
\item{checkSing}{(\strong{optional}) A logical flag. Default is FALSE. If \code{checkSing = TRUE}, then it will check if the design matrix is singular before running conquer.}
\item{tol}{(\strong{optional}) Tolerance level of the gradient descent algorithm. The iteration will stop when the maximum magnitude of all the elements of the gradient is less than \code{tol}. Default is 1e-04.}
\item{iteMax}{(\strong{optional}) Maximum number of iterations. Default is 5000.}
\item{ci}{(\strong{optional}) A logical flag. Default is FALSE. If \code{ci = TRUE}, then three types of confidence intervals (percentile, pivotal and normal) will be constructed via multiplier bootstrap.}
\item{alpha}{(\strong{optional}) Miscoverage level for each confidence interval. Default is 0.05.}
\item{B}{(\strong{optional}) The size of bootstrap samples. Default is 1000.}
}
\value{
An object containing the following items will be returned:
\describe{
\item{\code{coeff}}{A \eqn{(p + 1)}-vector of estimated quantile regression coefficients, including the intercept.}
\item{\code{ite}}{Number of iterations until convergence.}
\item{\code{residual}}{An \eqn{n}-vector of fitted residuals.}
\item{\code{bandwidth}}{Bandwidth value.}
\item{\code{tau}}{Quantile level.}
\item{\code{kernel}}{Kernel function.}
\item{\code{n}}{Sample size.}
\item{\code{p}}{Number of covariates.}
\item{\code{perCI}}{The percentile confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
\item{\code{pivCI}}{The pivotal confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
\item{\code{normCI}}{The normal-based confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
}
}
\description{
Estimation and inference for conditional linear quantile regression models using a convolution smoothed approach. Efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed.
}
\examples{
n = 500; p = 10
beta = rep(1, p)
X = matrix(rnorm(n * p), n, p)
Y = X \%*\% beta + rt(n, 2)
## Smoothed quantile regression with Gaussian kernel
fit.Gauss = conquer(X, Y, tau = 0.5, kernel = "Gaussian")
beta.hat.Gauss = fit.Gauss$coeff
## Smoothe quantile regression with uniform kernel
fit.unif = conquer(X, Y, tau = 0.5, kernel = "uniform")
beta.hat.unif = fit.unif$coeff
## Construct three types of confidence intervals via multiplier bootstrap
fit = conquer(X, Y, tau = 0.5, kernel = "Gaussian", ci = TRUE)
ci.per = fit$perCI
ci.piv = fit$pivCI
ci.norm = fit$normCI
}
\references{
Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist., in press.
He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
}
\seealso{
See \code{\link{conquer.process}} for smoothed quantile regression process.
}
\author{
Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
}
conquer/DESCRIPTION 0000644 0001762 0000144 00000002717 14202037136 013441 0 ustar ligges users Package: conquer
Type: Package
Title: Convolution-Type Smoothed Quantile Regression
Version: 1.2.2
Date: 2022-02-12
Authors@R: c(person("Xuming", "He", email = "xmhe@umich.edu", role = "aut"),
person("Xiaoou", "Pan", email = "xip024@ucsd.edu", role = c("aut", "cre")),
person("Kean Ming", "Tan", email = "keanming@umich.edu", role = "aut"),
person("Wen-Xin", "Zhou", email = "wez243@ucsd.edu", role = "aut"))
Description: Estimation and inference for conditional linear quantile regression models using a convolution smoothed approach. In the low-dimensional setting, efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed. In high dimensions, the conquer methods complemented with l_1-penalization and iteratively reweighted l_1-penalization are used to fit sparse models.
Depends: R (>= 3.5.0)
License: GPL-3
Encoding: UTF-8
URL: https://github.com/XiaoouPan/conquer
SystemRequirements: C++11
Imports: Rcpp (>= 1.0.3), Matrix, matrixStats, stats
LinkingTo: Rcpp, RcppArmadillo (>= 0.9.850.1.0)
RoxygenNote: 7.1.1
NeedsCompilation: yes
Packaged: 2022-02-12 22:13:22 UTC; xopan
Author: Xuming He [aut],
Xiaoou Pan [aut, cre],
Kean Ming Tan [aut],
Wen-Xin Zhou [aut]
Maintainer: Xiaoou Pan
Repository: CRAN
Date/Publication: 2022-02-12 23:10:22 UTC
conquer/src/ 0000755 0001762 0000144 00000000000 14202030402 012500 5 ustar ligges users conquer/src/smqr.cpp 0000644 0001762 0000144 00000332367 14135571164 014230 0 ustar ligges users # include
# include
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
int sgn(const double x) {
return (x > 0) - (x < 0);
}
// [[Rcpp::export]]
double mad(const arma::vec& x) {
return 1.482602 * arma::median(arma::abs(x - arma::median(x)));
}
// Asymmetric huber regression adjusted to quantile tau for initialization
// [[Rcpp::export]]
void updateHuber(const arma::mat& Z, const arma::vec& res, const double tau, arma::vec& der, arma::vec& grad, const int n, const double rob, const double n1) {
for (int i = 0; i < n; i++) {
double cur = res(i);
if (cur > rob) {
der(i) = -2 * tau * rob;
} else if (cur > 0) {
der(i) = -2 * tau * cur;
} else if (cur > -rob) {
der(i) = 2 * (tau - 1) * cur;
} else {
der(i) = 2 * (1 - tau) * rob;
}
}
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
arma::vec huberReg(const arma::mat& Z, const arma::vec& Y, const double tau, arma::vec& der, arma::vec& gradOld, arma::vec& gradNew, const int n, const int p,
const double n1, const double tol = 0.0001, const double constTau = 1.345, const int iteMax = 5000) {
double rob = constTau * mad(Y);
updateHuber(Z, Y, tau, der, gradOld, n, rob, n1);
arma::vec beta = -gradOld, betaDiff = -gradOld;
arma::vec res = Y - Z * beta;
rob = constTau * mad(res);
updateHuber(Z, res, tau, der, gradNew, n, rob, n1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
rob = constTau * mad(res);
updateHuber(Z, res, tau, der, gradNew, n, rob, n1);
gradDiff = gradNew - gradOld;
ite++;
}
return beta;
}
// [[Rcpp::export]]
arma::mat standardize(arma::mat X, const arma::rowvec& mx, const arma::vec& sx1, const int p) {
for (int i = 0; i < p; i++) {
X.col(i) = (X.col(i) - mx(i)) * sx1(i);
}
return X;
}
// Different kernels for low-dimensional conquer
// [[Rcpp::export]]
void updateGauss(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau, const double n1, const double h1) {
der = arma::normcdf(-res * h1) - tau;
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
void updateGaussWeight(const arma::mat& Z, const arma::vec& weight, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau,
const double n1, const double h1) {
der = weight % (arma::normcdf(-res * h1) - tau);
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
void updateLogistic(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau, const double n1, const double h1) {
der = 1.0 / (1.0 + arma::exp(res * h1)) - tau;
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
void updateUnif(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h,
const double n1, const double h1) {
for (int i = 0; i < n; i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
} else if (cur < h) {
der(i) = 0.5 - tau - 0.5 * h1 * cur;
} else {
der(i) = -tau;
}
}
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
void updatePara(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h,
const double n1, const double h1, const double h3) {
for (int i = 0; i < n; i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
} else if (cur < h) {
der(i) = 0.5 - tau - 0.75 * h1 * cur + 0.25 * h3 * cur * cur * cur;
} else {
der(i) = -tau;
}
}
grad = n1 * Z.t() * der;
}
// [[Rcpp::export]]
void updateTrian(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h,
const double n1, const double h1, const double h2) {
for (int i = 0; i < n; i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
} else if (cur < 0) {
der(i) = 0.5 - tau - h1 * cur - 0.5 * h2 * cur * cur;
} else if (cur < h) {
der(i) = 0.5 - tau - h1 * cur + 0.5 * h2 * cur * cur;
} else {
der(i) = -tau;
}
}
grad = n1 * Z.t() * der;
}
// Low-dimensional conquer: estimation
// [[Rcpp::export]]
Rcpp::List smqrGauss(const arma::mat& X, arma::vec Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateGauss(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrGaussNsd(const arma::mat& Z, const arma::vec& Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = Z.n_rows;
const int p = Z.n_cols - 1;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateGauss(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
arma::vec smqrGaussIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau = 0.5, double h = 0.0,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updateGauss(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// [[Rcpp::export]]
arma::vec smqrGaussIniWeight(const arma::mat& X, arma::vec Y, const arma::vec& weight, const arma::vec& betaHat, const int p, const double tau = 0.5,
double h = 0.0, const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updateGaussWeight(Z, weight, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateGaussWeight(Z, weight, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateGaussWeight(Z, weight, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// [[Rcpp::export]]
Rcpp::List smqrLogistic(const arma::mat& X, arma::vec Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateLogistic(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrLogisticNsd(const arma::mat& Z, const arma::vec& Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = Z.n_rows;
const int p = Z.n_cols - 1;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateLogistic(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
arma::vec smqrLogisticIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau = 0.5, double h = 0.0,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updateLogistic(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// [[Rcpp::export]]
Rcpp::List smqrUnif(const arma::mat& X, arma::vec Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrUnifNsd(const arma::mat& Z, const arma::vec& Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = Z.n_rows;
const int p = Z.n_cols - 1;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
arma::vec smqrUnifIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau = 0.5, double h = 0.0,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradNew, n, tau, h, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// [[Rcpp::export]]
Rcpp::List smqrPara(const arma::mat& X, arma::vec Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrParaNsd(const arma::mat& Z, const arma::vec& Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = Z.n_rows;
const int p = Z.n_cols - 1;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
gradDiff = gradNew - gradOld;
ite++;
}
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
arma::vec smqrParaIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau = 0.5, double h = 0.0,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updatePara(Z, res, der, gradNew, n, tau, h, n1, h1, h3);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// [[Rcpp::export]]
Rcpp::List smqrTrian(const arma::mat& X, arma::vec Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrTrianNsd(const arma::mat& Z, const arma::vec& Y, const double tau = 0.5, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = Z.n_rows;
const int p = Z.n_cols - 1;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
gradDiff = gradNew - gradOld;
ite++;
}
return Rcpp::List::create(Rcpp::Named("coeff") = beta, Rcpp::Named("ite") = ite, Rcpp::Named("residual") = res, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
arma::vec smqrTrianIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau = 0.5, double h = 0.0,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::vec beta = betaHat;
arma::vec res = Y - Z * beta;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradNew, n, tau, h, n1, h1, h2);
gradDiff = gradNew - gradOld;
ite++;
}
beta.rows(1, p) %= sx1;
beta(0) += my - arma::as_scalar(mx * beta.rows(1, p));
return beta;
}
// Global conquer process with a quantile grid
// [[Rcpp::export]]
Rcpp::List smqrGaussProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
const int m = tauSeq.size();
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::mat betaProc(p + 1, m);
for (int i = 0; i < m; i++) {
double tau = tauSeq(i);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateGauss(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateGauss(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
betaProc.col(i) = beta;
}
betaProc.rows(1, p).each_col() %= sx1;
betaProc.row(0) += my - mx * betaProc.rows(1, p);
return Rcpp::List::create(Rcpp::Named("coeff") = betaProc, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrLogisticProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
const int m = tauSeq.size();
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::mat betaProc(p + 1, m);
for (int i = 0; i < m; i++) {
double tau = tauSeq(i);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateLogistic(Z, res, der, gradOld, tau, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateLogistic(Z, res, der, gradNew, tau, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
betaProc.col(i) = beta;
}
betaProc.rows(1, p).each_col() %= sx1;
betaProc.row(0) += my - mx * betaProc.rows(1, p);
return Rcpp::List::create(Rcpp::Named("coeff") = betaProc, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrUnifProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
const int m = tauSeq.size();
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::mat betaProc(p + 1, m);
for (int i = 0; i < m; i++) {
double tau = tauSeq(i);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateUnif(Z, res, der, gradOld, n, tau, h, n1, h1);
gradDiff = gradNew - gradOld;
ite++;
}
betaProc.col(i) = beta;
}
betaProc.rows(1, p).each_col() %= sx1;
betaProc.row(0) += my - mx * betaProc.rows(1, p);
return Rcpp::List::create(Rcpp::Named("coeff") = betaProc, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrParaProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
const int m = tauSeq.size();
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::mat betaProc(p + 1, m);
for (int i = 0; i < m; i++) {
double tau = tauSeq(i);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updatePara(Z, res, der, gradOld, n, tau, h, n1, h1, h3);
gradDiff = gradNew - gradOld;
ite++;
}
betaProc.col(i) = beta;
}
betaProc.rows(1, p).each_col() %= sx1;
betaProc.row(0) += my - mx * betaProc.rows(1, p);
return Rcpp::List::create(Rcpp::Named("coeff") = betaProc, Rcpp::Named("bandwidth") = h);
}
// [[Rcpp::export]]
Rcpp::List smqrTrianProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h = 0.0, const double constTau = 1.345,
const double tol = 0.0001, const int iteMax = 5000) {
const int n = X.n_rows;
const int p = X.n_cols;
const int m = tauSeq.size();
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
const double n1 = 1.0 / n;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec der(n);
arma::vec gradOld(p + 1), gradNew(p + 1);
arma::mat betaProc(p + 1, m);
for (int i = 0; i < m; i++) {
double tau = tauSeq(i);
arma::vec beta = huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax);
arma::vec quant = {tau};
beta(0) = arma::as_scalar(arma::quantile(Y - Z.cols(1, p) * beta.rows(1, p), quant));
arma::vec res = Y - Z * beta;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
beta -= gradOld;
arma::vec betaDiff = -gradOld;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
arma::vec gradDiff = gradNew - gradOld;
int ite = 1;
while (arma::norm(gradNew, "inf") > tol && ite <= iteMax) {
double alpha = 1.0;
double cross = arma::as_scalar(betaDiff.t() * gradDiff);
if (cross > 0) {
double a1 = cross / arma::as_scalar(gradDiff.t() * gradDiff);
double a2 = arma::as_scalar(betaDiff.t() * betaDiff) / cross;
alpha = std::min(std::min(a1, a2), 100.0);
}
gradOld = gradNew;
betaDiff = -alpha * gradNew;
beta += betaDiff;
res -= Z * betaDiff;
updateTrian(Z, res, der, gradOld, n, tau, h, n1, h1, h2);
gradDiff = gradNew - gradOld;
ite++;
}
betaProc.col(i) = beta;
}
betaProc.rows(1, p).each_col() %= sx1;
betaProc.row(0) += my - mx * betaProc.rows(1, p);
return Rcpp::List::create(Rcpp::Named("coeff") = betaProc, Rcpp::Named("bandwidth") = h);
}
// Conquer with bootstrap inference
// [[Rcpp::export]]
arma::mat smqrGaussInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h = 0.0, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
for (int b = 0; b < B; b++) {
arma::uvec idx = arma::find(arma::randi(n, arma::distr_param(0, 1)) == 1);
arma::mat mbX = X.rows(idx);
arma::mat mbY = Y.rows(idx);
rst.col(b) = smqrGaussIni(mbX, mbY, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// [[Rcpp::export]]
arma::mat smqrGaussInfWeight(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
double h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
for (int b = 0; b < B; b++) {
arma::vec weight = 2 * arma::randu(n);
rst.col(b) = smqrGaussIniWeight(X, Y, weight, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// [[Rcpp::export]]
arma::mat smqrLogisticInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h = 0.0, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
for (int b = 0; b < B; b++) {
arma::uvec idx = arma::find(arma::randi(n, arma::distr_param(0, 1)) == 1);
arma::mat mbX = X.rows(idx);
arma::mat mbY = Y.rows(idx);
rst.col(b) = smqrLogisticIni(mbX, mbY, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// [[Rcpp::export]]
arma::mat smqrUnifInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h = 0.0, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
for (int b = 0; b < B; b++) {
arma::uvec idx = arma::find(arma::randi(n, arma::distr_param(0, 1)) == 1);
arma::mat mbX = X.rows(idx);
arma::mat mbY = Y.rows(idx);
rst.col(b) = smqrUnifIni(mbX, mbY, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// [[Rcpp::export]]
arma::mat smqrParaInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h = 0.0, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
for (int b = 0; b < B; b++) {
arma::uvec idx = arma::find(arma::randi(n, arma::distr_param(0, 1)) == 1);
arma::mat mbX = X.rows(idx);
arma::mat mbY = Y.rows(idx);
rst.col(b) = smqrParaIni(mbX, mbY, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// [[Rcpp::export]]
arma::mat smqrTrianInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h = 0.0, const double tau = 0.5,
const int B = 1000, const double tol = 0.0001, const int iteMax = 5000) {
arma::mat rst(p + 1, B);
if (h <= 0.05) {
h = std::max(std::pow((std::log(n) + p) / n, 0.4), 0.05);
}
for (int b = 0; b < B; b++) {
arma::uvec idx = arma::find(arma::randi(n, arma::distr_param(0, 1)) == 1);
arma::mat mbX = X.rows(idx);
arma::mat mbY = Y.rows(idx);
rst.col(b) = smqrTrianIni(mbX, mbY, betaHat, p, tau, h, tol, iteMax);
}
return rst;
}
// The following code is high-dimensional conquer via an iterative local majorize-minimize algorithm
// [[Rcpp::export]]
arma::vec softThresh(const arma::vec& x, const arma::vec& lambda, const int p) {
return arma::sign(x) % arma::max(arma::abs(x) - lambda, arma::zeros(p + 1));
}
// [[Rcpp::export]]
arma::vec cmptLambdaLasso(const double lambda, const int p) {
arma::vec rst = lambda * arma::ones(p + 1);
rst(0) = 0;
return rst;
}
// [[Rcpp::export]]
arma::vec cmptLambdaSCAD(const arma::vec& beta, const double lambda, const int p, const double para = 3.7) {
arma::vec rst = arma::zeros(p + 1);
for (int i = 1; i <= p; i++) {
double abBeta = std::abs(beta(i));
if (abBeta <= lambda) {
rst(i) = lambda;
} else if (abBeta <= para * lambda) {
rst(i) = (para * lambda - abBeta) / (para - 1);
}
}
return rst;
}
// [[Rcpp::export]]
arma::vec cmptLambdaMCP(const arma::vec& beta, const double lambda, const int p, const double para = 3.0) {
arma::vec rst = arma::zeros(p + 1);
for (int i = 1; i <= p; i++) {
double abBeta = std::abs(beta(i));
if (abBeta <= para * lambda) {
rst(i) = lambda - abBeta / para;
}
}
return rst;
}
// Expectile regression (asymmetric l_2 loss) as an initial value for high-dim regression
// [[Rcpp::export]]
double lossL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double n1, const double tau) {
arma::vec res = Y - Z * beta;
double rst = 0.0;
for (int i = 0; i < Y.size(); i++) {
rst += (res(i) > 0) ? (tau * res(i) * res(i)) : ((1 - tau) * res(i) * res(i));
}
return 0.5 * n1 * rst;
}
// [[Rcpp::export]]
double updateL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double n1, const double tau) {
arma::vec res = Y - Z * beta;
double rst = 0.0;
grad = arma::zeros(grad.size());
for (int i = 0; i < Y.size(); i++) {
double temp = res(i) > 0 ? tau : (1 - tau);
grad -= temp * res(i) * Z.row(i).t();
rst += temp * res(i) * res(i);
}
grad *= n1;
return 0.5 * n1 * rst;
}
// Smoothed quantile loss with different kernels
// [[Rcpp::export]]
double lossGaussHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h2) {
arma::vec res = Y - Z * beta;
arma::vec temp = 0.3989423 * h * arma::exp(-0.5 * h2 * arma::square(res)) + tau * res - res % arma::normcdf(-h1 * res);
return arma::mean(temp);
}
// [[Rcpp::export]]
double updateGaussHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h,
const double h1, const double h2) {
arma::vec res = Y - Z * beta;
arma::vec der = arma::normcdf(-h1 * res) - tau;
grad = n1 * Z.t() * der;
arma::vec temp = 0.3989423 * h * arma::exp(-0.5 * h2 * arma::square(res)) + tau * res - res % arma::normcdf(-h1 * res);
return arma::mean(temp);
}
// [[Rcpp::export]]
double lossLogisticHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1) {
arma::vec res = Y - Z * beta;
arma::vec temp = tau * res + h * arma::log(1.0 + arma::exp(-h1 * res));
return arma::mean(temp);
}
// [[Rcpp::export]]
double updateLogisticHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h,
const double h1) {
arma::vec res = Y - Z * beta;
arma::vec der = 1.0 / (1.0 + arma::exp(res * h1)) - tau;
grad = n1 * Z.t() * der;
arma::vec temp = tau * res + h * arma::log(1.0 + arma::exp(-h1 * res));
return arma::mean(temp);
}
// [[Rcpp::export]]
double lossUnifHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
for (int i = 0; i < res.size(); i++) {
double cur = std::abs(res(i));
temp(i) += cur <= h ? (0.25 * h1 * cur * cur + 0.25 * h) : 0.5 * cur;
}
return arma::mean(temp);
}
// [[Rcpp::export]]
double updateUnifHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h,
const double h1) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
arma::vec der(res.size());
for (int i = 0; i < res.size(); i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
temp(i) -= 0.5 * cur;
} else if (cur < h) {
der(i) = 0.5 - tau - 0.5 * h1 * cur;
temp(i) += 0.25 * h1 * cur * cur + 0.25 * h;
} else {
der(i) = -tau;
temp(i) += 0.5 * cur;
}
}
grad = n1 * Z.t() * der;
return arma::mean(temp);
}
// [[Rcpp::export]]
double lossParaHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h3) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
for (int i = 0; i < res.size(); i++) {
double cur = std::abs(res(i));
temp(i) += cur <= h ? (0.375 * h1 * cur * cur - 0.0625 * h3 * cur * cur * cur * cur + 0.1875 * h) : 0.5 * cur;
}
return arma::mean(temp);
}
// [[Rcpp::export]]
double updateParaHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h,
const double h1, const double h3) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
arma::vec der(res.size());
for (int i = 0; i < res.size(); i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
temp(i) -= 0.5 * cur;
} else if (cur < h) {
der(i) = 0.5 - tau - 0.75 * h1 * cur + 0.25 * h3 * cur * cur * cur;
temp(i) += 0.375 * h1 * cur * cur - 0.0625 * h3 * cur * cur * cur * cur + 0.1875 * h;
} else {
der(i) = -tau;
temp(i) += 0.5 * cur;
}
}
grad = n1 * Z.t() * der;
return arma::mean(temp);
}
// [[Rcpp::export]]
double lossTrianHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h2) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
for (int i = 0; i < res.size(); i++) {
double cur = std::abs(res(i));
temp(i) += cur <= h ? (0.5 * h1 * cur * cur - 0.1666667 * h2 * cur * cur * cur + 0.1666667 * h) : 0.5 * cur;
}
return arma::mean(temp);
}
// [[Rcpp::export]]
double updateTrianHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h,
const double h1, const double h2) {
arma::vec res = Y - Z * beta;
arma::vec temp = (tau - 0.5) * res;
arma::vec der(res.size());
for (int i = 0; i < res.size(); i++) {
double cur = res(i);
if (cur <= -h) {
der(i) = 1 - tau;
temp(i) -= 0.5 * cur;
} else if (cur < 0) {
der(i) = 0.5 - tau - h1 * cur - 0.5 * h2 * cur * cur;
temp(i) += 0.5 * h1 * cur * cur + 0.1666667 * h2 * cur * cur * cur + 0.1666667 * h;
} else if (cur < h) {
der(i) = 0.5 - tau - h1 * cur + 0.5 * h2 * cur * cur;
temp(i) += 0.5 * h1 * cur * cur - 0.1666667 * h2 * cur * cur * cur + 0.1666667 * h;
} else {
der(i) = -tau;
temp(i) += 0.5 * cur;
}
}
grad = n1 * Z.t() * der;
return arma::mean(temp);
}
// LAMM core code for different loss functions, update beta, return phi
// [[Rcpp::export]]
double lammL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double tau, const double phi, const double gamma,
const int p, const double n1) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateL2(Z, Y, beta, grad, n1, tau);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossL2(Z, Y, betaNew, n1, tau);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// [[Rcpp::export]]
arma::vec lasso(const arma::mat& Z, const arma::vec& Y, const double lambda, const double tau, const int p, const double n1, const double phi0 = 0.1,
const double gamma = 1.2, const double epsilon = 0.01, const int iteMax = 500) {
arma::vec beta = arma::zeros(p + 1);
arma::vec betaNew = arma::zeros(p + 1);
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammL2(Z, Y, Lambda, betaNew, tau, phi, gamma, p, n1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
double lammSmqrGauss(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau,
const double gamma, const int p, const double h, const double n1, const double h1, const double h2) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateGaussHd(Z, Y, beta, grad, tau, n1, h, h1, h2);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossGaussHd(Z, Y, betaNew, tau, h, h1, h2);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// [[Rcpp::export]]
double lammSmqrLogistic(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau,
const double gamma, const int p, const double h, const double n1, const double h1) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateLogisticHd(Z, Y, beta, grad, tau, n1, h, h1);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossLogisticHd(Z, Y, betaNew, tau, h, h1);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// [[Rcpp::export]]
double lammSmqrUnif(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau,
const double gamma, const int p, const double h, const double n1, const double h1) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateUnifHd(Z, Y, beta, grad, tau, n1, h, h1);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossUnifHd(Z, Y, betaNew, tau, h, h1);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// [[Rcpp::export]]
double lammSmqrPara(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau,
const double gamma, const int p, const double h, const double n1, const double h1, const double h3) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateParaHd(Z, Y, beta, grad, tau, n1, h, h1, h3);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossParaHd(Z, Y, betaNew, tau, h, h1, h3);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// [[Rcpp::export]]
double lammSmqrTrian(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau,
const double gamma, const int p, const double h, const double n1, const double h1, const double h2) {
double phiNew = phi;
arma::vec betaNew(p + 1);
arma::vec grad(p + 1);
double loss = updateTrianHd(Z, Y, beta, grad, tau, n1, h, h1, h2);
while (true) {
arma::vec first = beta - grad / phiNew;
arma::vec second = Lambda / phiNew;
betaNew = softThresh(first, second, p);
double fVal = lossTrianHd(Z, Y, betaNew, tau, h, h1, h2);
arma::vec diff = betaNew - beta;
double psiVal = loss + arma::as_scalar(grad.t() * diff) + 0.5 * phiNew * arma::as_scalar(diff.t() * diff);
if (fVal <= psiVal) {
break;
}
phiNew *= gamma;
}
beta = betaNew;
return phiNew;
}
// High-dim conquer with a standardized design matrix and a given lambda
// [[Rcpp::export]]
arma::vec smqrLassoGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrGauss(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrLassoLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrLogistic(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrLassoUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrUnif(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrLassoPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h3, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrPara(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h3);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrLassoTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
arma::vec Lambda = cmptLambdaLasso(lambda, p);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrTrian(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrScadGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaSCAD(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrGauss(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaSCAD(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrGauss(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrScadLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaSCAD(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrLogistic(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaSCAD(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrLogistic(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrScadUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaSCAD(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrUnif(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaSCAD(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrUnif(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrScadPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h3, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaSCAD(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrPara(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h3);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaSCAD(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrPara(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h3);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrScadTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaSCAD(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrTrian(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaSCAD(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrTrian(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrMcpGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaMCP(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrGauss(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaMCP(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrGauss(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrMcpLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaMCP(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrLogistic(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaMCP(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrLogistic(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrMcpUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaMCP(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrUnif(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaMCP(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrUnif(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrMcpPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h3, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaMCP(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrPara(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h3);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaMCP(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrPara(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h3);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// [[Rcpp::export]]
arma::vec smqrMcpTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1,
const double h, const double h1, const double h2, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001,
const int iteMax = 500, const int iteTight = 3, const double para = 3) {
arma::vec beta = lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax);
arma::vec betaNew = beta;
// Contraction
arma::vec Lambda = cmptLambdaMCP(beta, lambda, p, para);
double phi = phi0;
int ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrTrian(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
int iteT = 1;
// Tightening
arma::vec beta0(p + 1);
while (iteT <= iteTight) {
iteT++;
beta = betaNew;
beta0 = betaNew;
Lambda = cmptLambdaMCP(beta, lambda, p, para);
phi = phi0;
ite = 0;
while (ite <= iteMax) {
ite++;
phi = lammSmqrTrian(Z, Y, Lambda, betaNew, phi, tau, gamma, p, h, n1, h1, h2);
phi = std::max(phi0, phi / gamma);
if (arma::norm(betaNew - beta, "inf") <= epsilon) {
break;
}
beta = betaNew;
}
if (arma::norm(betaNew - beta0, "inf") <= epsilon) {
break;
}
}
return betaNew;
}
// high-dim conquer with a specified lambda
// [[Rcpp::export]]
arma::vec conquerHdGauss(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type = 1, const double phi0 = 0.01,
const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec betaHat(p + 1);
if (type == 1) {
betaHat = smqrLassoGauss(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax);
} else if (type == 2) {
betaHat = smqrScadGauss(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
} else {
betaHat = smqrMcpGauss(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
}
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return betaHat;
}
// [[Rcpp::export]]
arma::vec conquerHdLogistic(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type = 1, const double phi0 = 0.01,
const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec betaHat(p + 1);
if (type == 1) {
betaHat = smqrLassoLogistic(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax);
} else if (type == 2) {
betaHat = smqrScadLogistic(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
} else {
betaHat = smqrMcpLogistic(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
}
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return betaHat;
}
// [[Rcpp::export]]
arma::vec conquerHdUnif(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type = 1, const double phi0 = 0.01,
const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols;
const double h1 = 1.0 / h;
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec betaHat(p + 1);
if (type == 1) {
betaHat = smqrLassoUnif(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax);
} else if (type == 2) {
betaHat = smqrScadUnif(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
} else {
betaHat = smqrMcpUnif(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
}
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return betaHat;
}
// [[Rcpp::export]]
arma::vec conquerHdPara(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type = 1, const double phi0 = 0.01,
const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols;
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec betaHat(p + 1);
if (type == 1) {
betaHat = smqrLassoPara(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax);
} else if (type == 2) {
betaHat = smqrScadPara(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
} else {
betaHat = smqrMcpPara(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
}
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return betaHat;
}
// [[Rcpp::export]]
arma::vec conquerHdTrian(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type = 1, const double phi0 = 0.01,
const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500, const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols;
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
arma::vec betaHat(p + 1);
if (type == 1) {
betaHat = smqrLassoTrian(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax);
} else if (type == 2) {
betaHat = smqrScadTrian(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
} else {
betaHat = smqrMcpTrian(Z, Y, lambda, sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
}
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return betaHat;
}
// cross-validation, no warm-start, the range of lambda is guided by the simulation-based mathod of Belloni & Chernozhukov (2011), AOS
// [[Rcpp::export]]
double lossQr(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau) {
arma::vec res = Y - Z * beta;
double rst = 0.0;
for (int i = 0; i < res.size(); i++) {
rst += res(i) >= 0 ? tau * res(i) : (tau - 1) * res(i);
}
return rst;
}
// [[Rcpp::export]]
Rcpp::List cvSmqrLassoGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrLassoGauss(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrLassoGauss(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrScadGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrScadGauss(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrScadGauss(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrMcpGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.5, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrMcpGauss(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrMcpGauss(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrLassoLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrLassoLogistic(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrLassoLogistic(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrScadLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrScadLogistic(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrScadLogistic(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrMcpLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.5, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrMcpLogistic(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrMcpLogistic(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrLassoUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrLassoUnif(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrLassoUnif(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrScadUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrScadUnif(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrScadUnif(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrMcpUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.5, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h;
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrMcpUnif(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrMcpUnif(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrLassoPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrLassoPara(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h3, phi0, gamma, epsilon, iteMax);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrLassoPara(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrScadPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrScadPara(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrScadPara(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrMcpPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.5, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h3 = 1.0 / (h * h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrMcpPara(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrMcpPara(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrLassoTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrLassoTrian(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrLassoTrian(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrScadTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.2, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3.7) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrScadTrian(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrScadTrian(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
// [[Rcpp::export]]
Rcpp::List cvSmqrMcpTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds,
const double h, const double phi0 = 0.01, const double gamma = 1.5, const double epsilon = 0.001, const int iteMax = 500,
const int iteTight = 3, const double para = 3) {
const int n = X.n_rows, p = X.n_cols, nlambda = lambdaSeq.size();
const double h1 = 1.0 / h, h2 = 1.0 / (h * h);
arma::vec betaHat(p + 1);
arma::vec mse = arma::zeros(nlambda);
arma::rowvec mx = arma::mean(X, 0);
arma::vec sx1 = 1.0 / arma::stddev(X, 0, 0).t();
arma::mat Z = arma::join_rows(arma::ones(n), standardize(X, mx, sx1, p));
double my = arma::mean(Y);
Y -= my;
for (int j = 1; j <= kfolds; j++) {
arma::uvec idx = arma::find(folds == j);
arma::uvec idxComp = arma::find(folds != j);
double n1Train = 1.0 / idxComp.size();
arma::mat trainZ = Z.rows(idxComp), testZ = Z.rows(idx);
arma::vec trainY = Y.rows(idxComp), testY = Y.rows(idx);
for (int i = 0; i < nlambda; i++) {
betaHat = smqrMcpTrian(trainZ, trainY, lambdaSeq(i), sx1, tau, p, n1Train, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
mse(i) += arma::accu(lossQr(testZ, testY, betaHat, tau));
}
}
arma::uword cvIdx = arma::index_min(mse);
betaHat = smqrMcpTrian(Z, Y, lambdaSeq(cvIdx), sx1, tau, p, 1.0 / n, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para);
betaHat.rows(1, p) %= sx1;
betaHat(0) += my - arma::as_scalar(mx * betaHat.rows(1, p));
return Rcpp::List::create(Rcpp::Named("coeff") = betaHat, Rcpp::Named("lambda") = lambdaSeq(cvIdx));
}
conquer/src/Makevars 0000644 0001762 0000144 00000000204 13625307667 014224 0 ustar ligges users
CXX_STD = CXX11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
conquer/src/Makevars.win 0000644 0001762 0000144 00000000204 13625307676 015020 0 ustar ligges users
CXX_STD = CXX11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
conquer/src/RcppExports.cpp 0000644 0001762 0000144 00000405227 14202027323 015517 0 ustar ligges users // Generated by using Rcpp::compileAttributes() -> do not edit by hand
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
#include
#include
using namespace Rcpp;
#ifdef RCPP_USE_GLOBAL_ROSTREAM
Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get();
Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
#endif
// sgn
int sgn(const double x);
RcppExport SEXP _conquer_sgn(SEXP xSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const double >::type x(xSEXP);
rcpp_result_gen = Rcpp::wrap(sgn(x));
return rcpp_result_gen;
END_RCPP
}
// mad
double mad(const arma::vec& x);
RcppExport SEXP _conquer_mad(SEXP xSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::vec& >::type x(xSEXP);
rcpp_result_gen = Rcpp::wrap(mad(x));
return rcpp_result_gen;
END_RCPP
}
// updateHuber
void updateHuber(const arma::mat& Z, const arma::vec& res, const double tau, arma::vec& der, arma::vec& grad, const int n, const double rob, const double n1);
RcppExport SEXP _conquer_updateHuber(SEXP ZSEXP, SEXP resSEXP, SEXP tauSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP nSEXP, SEXP robSEXP, SEXP n1SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const double >::type rob(robSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
updateHuber(Z, res, tau, der, grad, n, rob, n1);
return R_NilValue;
END_RCPP
}
// huberReg
arma::vec huberReg(const arma::mat& Z, const arma::vec& Y, const double tau, arma::vec& der, arma::vec& gradOld, arma::vec& gradNew, const int n, const int p, const double n1, const double tol, const double constTau, const int iteMax);
RcppExport SEXP _conquer_huberReg(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP derSEXP, SEXP gradOldSEXP, SEXP gradNewSEXP, SEXP nSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP tolSEXP, SEXP constTauSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type gradOld(gradOldSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type gradNew(gradNewSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(huberReg(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax));
return rcpp_result_gen;
END_RCPP
}
// standardize
arma::mat standardize(arma::mat X, const arma::rowvec& mx, const arma::vec& sx1, const int p);
RcppExport SEXP _conquer_standardize(SEXP XSEXP, SEXP mxSEXP, SEXP sx1SEXP, SEXP pSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< arma::mat >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::rowvec& >::type mx(mxSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
rcpp_result_gen = Rcpp::wrap(standardize(X, mx, sx1, p));
return rcpp_result_gen;
END_RCPP
}
// updateGauss
void updateGauss(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau, const double n1, const double h1);
RcppExport SEXP _conquer_updateGauss(SEXP ZSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
updateGauss(Z, res, der, grad, tau, n1, h1);
return R_NilValue;
END_RCPP
}
// updateGaussWeight
void updateGaussWeight(const arma::mat& Z, const arma::vec& weight, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau, const double n1, const double h1);
RcppExport SEXP _conquer_updateGaussWeight(SEXP ZSEXP, SEXP weightSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type weight(weightSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
updateGaussWeight(Z, weight, res, der, grad, tau, n1, h1);
return R_NilValue;
END_RCPP
}
// updateLogistic
void updateLogistic(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const double tau, const double n1, const double h1);
RcppExport SEXP _conquer_updateLogistic(SEXP ZSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
updateLogistic(Z, res, der, grad, tau, n1, h1);
return R_NilValue;
END_RCPP
}
// updateUnif
void updateUnif(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h, const double n1, const double h1);
RcppExport SEXP _conquer_updateUnif(SEXP ZSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP nSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
updateUnif(Z, res, der, grad, n, tau, h, n1, h1);
return R_NilValue;
END_RCPP
}
// updatePara
void updatePara(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h, const double n1, const double h1, const double h3);
RcppExport SEXP _conquer_updatePara(SEXP ZSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP nSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP, SEXP h3SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
updatePara(Z, res, der, grad, n, tau, h, n1, h1, h3);
return R_NilValue;
END_RCPP
}
// updateTrian
void updateTrian(const arma::mat& Z, const arma::vec& res, arma::vec& der, arma::vec& grad, const int n, const double tau, const double h, const double n1, const double h1, const double h2);
RcppExport SEXP _conquer_updateTrian(SEXP ZSEXP, SEXP resSEXP, SEXP derSEXP, SEXP gradSEXP, SEXP nSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type res(resSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type der(derSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
updateTrian(Z, res, der, grad, n, tau, h, n1, h1, h2);
return R_NilValue;
END_RCPP
}
// smqrGauss
Rcpp::List smqrGauss(const arma::mat& X, arma::vec Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGauss(SEXP XSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGauss(X, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussNsd
Rcpp::List smqrGaussNsd(const arma::mat& Z, const arma::vec& Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussNsd(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussNsd(Z, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussIni
arma::vec smqrGaussIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussIni(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussIni(X, Y, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussIniWeight
arma::vec smqrGaussIniWeight(const arma::mat& X, arma::vec Y, const arma::vec& weight, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussIniWeight(SEXP XSEXP, SEXP YSEXP, SEXP weightSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type weight(weightSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussIniWeight(X, Y, weight, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLogistic
Rcpp::List smqrLogistic(const arma::mat& X, arma::vec Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrLogistic(SEXP XSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLogistic(X, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLogisticNsd
Rcpp::List smqrLogisticNsd(const arma::mat& Z, const arma::vec& Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrLogisticNsd(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLogisticNsd(Z, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLogisticIni
arma::vec smqrLogisticIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrLogisticIni(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLogisticIni(X, Y, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrUnif
Rcpp::List smqrUnif(const arma::mat& X, arma::vec Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrUnif(SEXP XSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrUnif(X, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrUnifNsd
Rcpp::List smqrUnifNsd(const arma::mat& Z, const arma::vec& Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrUnifNsd(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrUnifNsd(Z, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrUnifIni
arma::vec smqrUnifIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrUnifIni(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrUnifIni(X, Y, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrPara
Rcpp::List smqrPara(const arma::mat& X, arma::vec Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrPara(SEXP XSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrPara(X, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrParaNsd
Rcpp::List smqrParaNsd(const arma::mat& Z, const arma::vec& Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrParaNsd(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrParaNsd(Z, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrParaIni
arma::vec smqrParaIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrParaIni(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrParaIni(X, Y, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrTrian
Rcpp::List smqrTrian(const arma::mat& X, arma::vec Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrTrian(SEXP XSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrTrian(X, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrTrianNsd
Rcpp::List smqrTrianNsd(const arma::mat& Z, const arma::vec& Y, const double tau, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrTrianNsd(SEXP ZSEXP, SEXP YSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrTrianNsd(Z, Y, tau, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrTrianIni
arma::vec smqrTrianIni(const arma::mat& X, arma::vec Y, const arma::vec& betaHat, const int p, const double tau, double h, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrTrianIni(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrTrianIni(X, Y, betaHat, p, tau, h, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussProc
Rcpp::List smqrGaussProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussProc(SEXP XSEXP, SEXP YSEXP, SEXP tauSeqSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec >::type tauSeq(tauSeqSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussProc(X, Y, tauSeq, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLogisticProc
Rcpp::List smqrLogisticProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrLogisticProc(SEXP XSEXP, SEXP YSEXP, SEXP tauSeqSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec >::type tauSeq(tauSeqSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLogisticProc(X, Y, tauSeq, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrUnifProc
Rcpp::List smqrUnifProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrUnifProc(SEXP XSEXP, SEXP YSEXP, SEXP tauSeqSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec >::type tauSeq(tauSeqSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrUnifProc(X, Y, tauSeq, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrParaProc
Rcpp::List smqrParaProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrParaProc(SEXP XSEXP, SEXP YSEXP, SEXP tauSeqSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec >::type tauSeq(tauSeqSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrParaProc(X, Y, tauSeq, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrTrianProc
Rcpp::List smqrTrianProc(const arma::mat& X, arma::vec Y, const arma::vec tauSeq, double h, const double constTau, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrTrianProc(SEXP XSEXP, SEXP YSEXP, SEXP tauSeqSEXP, SEXP hSEXP, SEXP constTauSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec >::type tauSeq(tauSeqSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type constTau(constTauSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrTrianProc(X, Y, tauSeq, h, constTau, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussInf
arma::mat smqrGaussInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussInf(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP hSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussInf(X, Y, betaHat, n, p, h, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrGaussInfWeight
arma::mat smqrGaussInfWeight(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrGaussInfWeight(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrGaussInfWeight(X, Y, betaHat, n, p, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLogisticInf
arma::mat smqrLogisticInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrLogisticInf(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP hSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLogisticInf(X, Y, betaHat, n, p, h, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrUnifInf
arma::mat smqrUnifInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrUnifInf(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP hSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrUnifInf(X, Y, betaHat, n, p, h, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrParaInf
arma::mat smqrParaInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrParaInf(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP hSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrParaInf(X, Y, betaHat, n, p, h, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrTrianInf
arma::mat smqrTrianInf(const arma::mat& X, const arma::vec& Y, const arma::vec& betaHat, const int n, const int p, double h, const double tau, const int B, const double tol, const int iteMax);
RcppExport SEXP _conquer_smqrTrianInf(SEXP XSEXP, SEXP YSEXP, SEXP betaHatSEXP, SEXP nSEXP, SEXP pSEXP, SEXP hSEXP, SEXP tauSEXP, SEXP BSEXP, SEXP tolSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type betaHat(betaHatSEXP);
Rcpp::traits::input_parameter< const int >::type n(nSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type B(BSEXP);
Rcpp::traits::input_parameter< const double >::type tol(tolSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrTrianInf(X, Y, betaHat, n, p, h, tau, B, tol, iteMax));
return rcpp_result_gen;
END_RCPP
}
// softThresh
arma::vec softThresh(const arma::vec& x, const arma::vec& lambda, const int p);
RcppExport SEXP _conquer_softThresh(SEXP xSEXP, SEXP lambdaSEXP, SEXP pSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::vec& >::type x(xSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
rcpp_result_gen = Rcpp::wrap(softThresh(x, lambda, p));
return rcpp_result_gen;
END_RCPP
}
// cmptLambdaLasso
arma::vec cmptLambdaLasso(const double lambda, const int p);
RcppExport SEXP _conquer_cmptLambdaLasso(SEXP lambdaSEXP, SEXP pSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
rcpp_result_gen = Rcpp::wrap(cmptLambdaLasso(lambda, p));
return rcpp_result_gen;
END_RCPP
}
// cmptLambdaSCAD
arma::vec cmptLambdaSCAD(const arma::vec& beta, const double lambda, const int p, const double para);
RcppExport SEXP _conquer_cmptLambdaSCAD(SEXP betaSEXP, SEXP lambdaSEXP, SEXP pSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cmptLambdaSCAD(beta, lambda, p, para));
return rcpp_result_gen;
END_RCPP
}
// cmptLambdaMCP
arma::vec cmptLambdaMCP(const arma::vec& beta, const double lambda, const int p, const double para);
RcppExport SEXP _conquer_cmptLambdaMCP(SEXP betaSEXP, SEXP lambdaSEXP, SEXP pSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cmptLambdaMCP(beta, lambda, p, para));
return rcpp_result_gen;
END_RCPP
}
// lossL2
double lossL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double n1, const double tau);
RcppExport SEXP _conquer_lossL2(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP n1SEXP, SEXP tauSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
rcpp_result_gen = Rcpp::wrap(lossL2(Z, Y, beta, n1, tau));
return rcpp_result_gen;
END_RCPP
}
// updateL2
double updateL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double n1, const double tau);
RcppExport SEXP _conquer_updateL2(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP n1SEXP, SEXP tauSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
rcpp_result_gen = Rcpp::wrap(updateL2(Z, Y, beta, grad, n1, tau));
return rcpp_result_gen;
END_RCPP
}
// lossGaussHd
double lossGaussHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h2);
RcppExport SEXP _conquer_lossGaussHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(lossGaussHd(Z, Y, beta, tau, h, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// updateGaussHd
double updateGaussHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h, const double h1, const double h2);
RcppExport SEXP _conquer_updateGaussHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(updateGaussHd(Z, Y, beta, grad, tau, n1, h, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// lossLogisticHd
double lossLogisticHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1);
RcppExport SEXP _conquer_lossLogisticHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(lossLogisticHd(Z, Y, beta, tau, h, h1));
return rcpp_result_gen;
END_RCPP
}
// updateLogisticHd
double updateLogisticHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h, const double h1);
RcppExport SEXP _conquer_updateLogisticHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(updateLogisticHd(Z, Y, beta, grad, tau, n1, h, h1));
return rcpp_result_gen;
END_RCPP
}
// lossUnifHd
double lossUnifHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1);
RcppExport SEXP _conquer_lossUnifHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(lossUnifHd(Z, Y, beta, tau, h, h1));
return rcpp_result_gen;
END_RCPP
}
// updateUnifHd
double updateUnifHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h, const double h1);
RcppExport SEXP _conquer_updateUnifHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(updateUnifHd(Z, Y, beta, grad, tau, n1, h, h1));
return rcpp_result_gen;
END_RCPP
}
// lossParaHd
double lossParaHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h3);
RcppExport SEXP _conquer_lossParaHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h3SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
rcpp_result_gen = Rcpp::wrap(lossParaHd(Z, Y, beta, tau, h, h1, h3));
return rcpp_result_gen;
END_RCPP
}
// updateParaHd
double updateParaHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h, const double h1, const double h3);
RcppExport SEXP _conquer_updateParaHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h3SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
rcpp_result_gen = Rcpp::wrap(updateParaHd(Z, Y, beta, grad, tau, n1, h, h1, h3));
return rcpp_result_gen;
END_RCPP
}
// lossTrianHd
double lossTrianHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau, const double h, const double h1, const double h2);
RcppExport SEXP _conquer_lossTrianHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(lossTrianHd(Z, Y, beta, tau, h, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// updateTrianHd
double updateTrianHd(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, arma::vec& grad, const double tau, const double n1, const double h, const double h1, const double h2);
RcppExport SEXP _conquer_updateTrianHd(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP gradSEXP, SEXP tauSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type grad(gradSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(updateTrianHd(Z, Y, beta, grad, tau, n1, h, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// lammL2
double lammL2(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double tau, const double phi, const double gamma, const int p, const double n1);
RcppExport SEXP _conquer_lammL2(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP tauSEXP, SEXP phiSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP n1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
rcpp_result_gen = Rcpp::wrap(lammL2(Z, Y, Lambda, beta, tau, phi, gamma, p, n1));
return rcpp_result_gen;
END_RCPP
}
// lasso
arma::vec lasso(const arma::mat& Z, const arma::vec& Y, const double lambda, const double tau, const int p, const double n1, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_lasso(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(lasso(Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// lammSmqrGauss
double lammSmqrGauss(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau, const double gamma, const int p, const double h, const double n1, const double h1, const double h2);
RcppExport SEXP _conquer_lammSmqrGauss(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP phiSEXP, SEXP tauSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(lammSmqrGauss(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// lammSmqrLogistic
double lammSmqrLogistic(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau, const double gamma, const int p, const double h, const double n1, const double h1);
RcppExport SEXP _conquer_lammSmqrLogistic(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP phiSEXP, SEXP tauSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(lammSmqrLogistic(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1));
return rcpp_result_gen;
END_RCPP
}
// lammSmqrUnif
double lammSmqrUnif(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau, const double gamma, const int p, const double h, const double n1, const double h1);
RcppExport SEXP _conquer_lammSmqrUnif(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP phiSEXP, SEXP tauSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
rcpp_result_gen = Rcpp::wrap(lammSmqrUnif(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1));
return rcpp_result_gen;
END_RCPP
}
// lammSmqrPara
double lammSmqrPara(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau, const double gamma, const int p, const double h, const double n1, const double h1, const double h3);
RcppExport SEXP _conquer_lammSmqrPara(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP phiSEXP, SEXP tauSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP, SEXP h3SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
rcpp_result_gen = Rcpp::wrap(lammSmqrPara(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h3));
return rcpp_result_gen;
END_RCPP
}
// lammSmqrTrian
double lammSmqrTrian(const arma::mat& Z, const arma::vec& Y, const arma::vec& Lambda, arma::vec& beta, const double phi, const double tau, const double gamma, const int p, const double h, const double n1, const double h1, const double h2);
RcppExport SEXP _conquer_lammSmqrTrian(SEXP ZSEXP, SEXP YSEXP, SEXP LambdaSEXP, SEXP betaSEXP, SEXP phiSEXP, SEXP tauSEXP, SEXP gammaSEXP, SEXP pSEXP, SEXP hSEXP, SEXP n1SEXP, SEXP h1SEXP, SEXP h2SEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Lambda(LambdaSEXP);
Rcpp::traits::input_parameter< arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type phi(phiSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
rcpp_result_gen = Rcpp::wrap(lammSmqrTrian(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2));
return rcpp_result_gen;
END_RCPP
}
// smqrLassoGauss
arma::vec smqrLassoGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_smqrLassoGauss(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLassoGauss(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLassoLogistic
arma::vec smqrLassoLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_smqrLassoLogistic(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLassoLogistic(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLassoUnif
arma::vec smqrLassoUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_smqrLassoUnif(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLassoUnif(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLassoPara
arma::vec smqrLassoPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h3, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_smqrLassoPara(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h3SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLassoPara(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrLassoTrian
arma::vec smqrLassoTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_smqrLassoTrian(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(smqrLassoTrian(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// smqrScadGauss
arma::vec smqrScadGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrScadGauss(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrScadGauss(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrScadLogistic
arma::vec smqrScadLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrScadLogistic(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrScadLogistic(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrScadUnif
arma::vec smqrScadUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrScadUnif(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrScadUnif(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrScadPara
arma::vec smqrScadPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h3, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrScadPara(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h3SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrScadPara(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrScadTrian
arma::vec smqrScadTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrScadTrian(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrScadTrian(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrMcpGauss
arma::vec smqrMcpGauss(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrMcpGauss(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrMcpGauss(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrMcpLogistic
arma::vec smqrMcpLogistic(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrMcpLogistic(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrMcpLogistic(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrMcpUnif
arma::vec smqrMcpUnif(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrMcpUnif(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrMcpUnif(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrMcpPara
arma::vec smqrMcpPara(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h3, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrMcpPara(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h3SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h3(h3SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrMcpPara(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// smqrMcpTrian
arma::vec smqrMcpTrian(const arma::mat& Z, const arma::vec& Y, const double lambda, const arma::vec& sx1, const double tau, const int p, const double n1, const double h, const double h1, const double h2, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_smqrMcpTrian(SEXP ZSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP sx1SEXP, SEXP tauSEXP, SEXP pSEXP, SEXP n1SEXP, SEXP hSEXP, SEXP h1SEXP, SEXP h2SEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type sx1(sx1SEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type p(pSEXP);
Rcpp::traits::input_parameter< const double >::type n1(n1SEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type h1(h1SEXP);
Rcpp::traits::input_parameter< const double >::type h2(h2SEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(smqrMcpTrian(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// conquerHdGauss
arma::vec conquerHdGauss(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_conquerHdGauss(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP typeSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const int >::type type(typeSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(conquerHdGauss(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// conquerHdLogistic
arma::vec conquerHdLogistic(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_conquerHdLogistic(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP typeSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const int >::type type(typeSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(conquerHdLogistic(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// conquerHdUnif
arma::vec conquerHdUnif(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_conquerHdUnif(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP typeSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const int >::type type(typeSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(conquerHdUnif(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// conquerHdPara
arma::vec conquerHdPara(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_conquerHdPara(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP typeSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const int >::type type(typeSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(conquerHdPara(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// conquerHdTrian
arma::vec conquerHdTrian(const arma::mat& X, arma::vec Y, const double lambda, const double tau, const double h, const int type, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_conquerHdTrian(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP tauSEXP, SEXP hSEXP, SEXP typeSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const double >::type lambda(lambdaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const int >::type type(typeSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(conquerHdTrian(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// lossQr
double lossQr(const arma::mat& Z, const arma::vec& Y, const arma::vec& beta, const double tau);
RcppExport SEXP _conquer_lossQr(SEXP ZSEXP, SEXP YSEXP, SEXP betaSEXP, SEXP tauSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type Z(ZSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type beta(betaSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
rcpp_result_gen = Rcpp::wrap(lossQr(Z, Y, beta, tau));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrLassoGauss
Rcpp::List cvSmqrLassoGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_cvSmqrLassoGauss(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrLassoGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrScadGauss
Rcpp::List cvSmqrScadGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrScadGauss(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrScadGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrMcpGauss
Rcpp::List cvSmqrMcpGauss(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrMcpGauss(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrMcpGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrLassoLogistic
Rcpp::List cvSmqrLassoLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_cvSmqrLassoLogistic(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrLassoLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrScadLogistic
Rcpp::List cvSmqrScadLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrScadLogistic(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrScadLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrMcpLogistic
Rcpp::List cvSmqrMcpLogistic(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrMcpLogistic(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrMcpLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrLassoUnif
Rcpp::List cvSmqrLassoUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_cvSmqrLassoUnif(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrLassoUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrScadUnif
Rcpp::List cvSmqrScadUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrScadUnif(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrScadUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrMcpUnif
Rcpp::List cvSmqrMcpUnif(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrMcpUnif(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrMcpUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrLassoPara
Rcpp::List cvSmqrLassoPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_cvSmqrLassoPara(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrLassoPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrScadPara
Rcpp::List cvSmqrScadPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrScadPara(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrScadPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrMcpPara
Rcpp::List cvSmqrMcpPara(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrMcpPara(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrMcpPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrLassoTrian
Rcpp::List cvSmqrLassoTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax);
RcppExport SEXP _conquer_cvSmqrLassoTrian(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrLassoTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrScadTrian
Rcpp::List cvSmqrScadTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrScadTrian(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrScadTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
// cvSmqrMcpTrian
Rcpp::List cvSmqrMcpTrian(const arma::mat& X, arma::vec Y, const arma::vec& lambdaSeq, const arma::vec& folds, const double tau, const int kfolds, const double h, const double phi0, const double gamma, const double epsilon, const int iteMax, const int iteTight, const double para);
RcppExport SEXP _conquer_cvSmqrMcpTrian(SEXP XSEXP, SEXP YSEXP, SEXP lambdaSeqSEXP, SEXP foldsSEXP, SEXP tauSEXP, SEXP kfoldsSEXP, SEXP hSEXP, SEXP phi0SEXP, SEXP gammaSEXP, SEXP epsilonSEXP, SEXP iteMaxSEXP, SEXP iteTightSEXP, SEXP paraSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP);
Rcpp::traits::input_parameter< arma::vec >::type Y(YSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type lambdaSeq(lambdaSeqSEXP);
Rcpp::traits::input_parameter< const arma::vec& >::type folds(foldsSEXP);
Rcpp::traits::input_parameter< const double >::type tau(tauSEXP);
Rcpp::traits::input_parameter< const int >::type kfolds(kfoldsSEXP);
Rcpp::traits::input_parameter< const double >::type h(hSEXP);
Rcpp::traits::input_parameter< const double >::type phi0(phi0SEXP);
Rcpp::traits::input_parameter< const double >::type gamma(gammaSEXP);
Rcpp::traits::input_parameter< const double >::type epsilon(epsilonSEXP);
Rcpp::traits::input_parameter< const int >::type iteMax(iteMaxSEXP);
Rcpp::traits::input_parameter< const int >::type iteTight(iteTightSEXP);
Rcpp::traits::input_parameter< const double >::type para(paraSEXP);
rcpp_result_gen = Rcpp::wrap(cvSmqrMcpTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para));
return rcpp_result_gen;
END_RCPP
}
static const R_CallMethodDef CallEntries[] = {
{"_conquer_sgn", (DL_FUNC) &_conquer_sgn, 1},
{"_conquer_mad", (DL_FUNC) &_conquer_mad, 1},
{"_conquer_updateHuber", (DL_FUNC) &_conquer_updateHuber, 8},
{"_conquer_huberReg", (DL_FUNC) &_conquer_huberReg, 12},
{"_conquer_standardize", (DL_FUNC) &_conquer_standardize, 4},
{"_conquer_updateGauss", (DL_FUNC) &_conquer_updateGauss, 7},
{"_conquer_updateGaussWeight", (DL_FUNC) &_conquer_updateGaussWeight, 8},
{"_conquer_updateLogistic", (DL_FUNC) &_conquer_updateLogistic, 7},
{"_conquer_updateUnif", (DL_FUNC) &_conquer_updateUnif, 9},
{"_conquer_updatePara", (DL_FUNC) &_conquer_updatePara, 10},
{"_conquer_updateTrian", (DL_FUNC) &_conquer_updateTrian, 10},
{"_conquer_smqrGauss", (DL_FUNC) &_conquer_smqrGauss, 7},
{"_conquer_smqrGaussNsd", (DL_FUNC) &_conquer_smqrGaussNsd, 7},
{"_conquer_smqrGaussIni", (DL_FUNC) &_conquer_smqrGaussIni, 8},
{"_conquer_smqrGaussIniWeight", (DL_FUNC) &_conquer_smqrGaussIniWeight, 9},
{"_conquer_smqrLogistic", (DL_FUNC) &_conquer_smqrLogistic, 7},
{"_conquer_smqrLogisticNsd", (DL_FUNC) &_conquer_smqrLogisticNsd, 7},
{"_conquer_smqrLogisticIni", (DL_FUNC) &_conquer_smqrLogisticIni, 8},
{"_conquer_smqrUnif", (DL_FUNC) &_conquer_smqrUnif, 7},
{"_conquer_smqrUnifNsd", (DL_FUNC) &_conquer_smqrUnifNsd, 7},
{"_conquer_smqrUnifIni", (DL_FUNC) &_conquer_smqrUnifIni, 8},
{"_conquer_smqrPara", (DL_FUNC) &_conquer_smqrPara, 7},
{"_conquer_smqrParaNsd", (DL_FUNC) &_conquer_smqrParaNsd, 7},
{"_conquer_smqrParaIni", (DL_FUNC) &_conquer_smqrParaIni, 8},
{"_conquer_smqrTrian", (DL_FUNC) &_conquer_smqrTrian, 7},
{"_conquer_smqrTrianNsd", (DL_FUNC) &_conquer_smqrTrianNsd, 7},
{"_conquer_smqrTrianIni", (DL_FUNC) &_conquer_smqrTrianIni, 8},
{"_conquer_smqrGaussProc", (DL_FUNC) &_conquer_smqrGaussProc, 7},
{"_conquer_smqrLogisticProc", (DL_FUNC) &_conquer_smqrLogisticProc, 7},
{"_conquer_smqrUnifProc", (DL_FUNC) &_conquer_smqrUnifProc, 7},
{"_conquer_smqrParaProc", (DL_FUNC) &_conquer_smqrParaProc, 7},
{"_conquer_smqrTrianProc", (DL_FUNC) &_conquer_smqrTrianProc, 7},
{"_conquer_smqrGaussInf", (DL_FUNC) &_conquer_smqrGaussInf, 10},
{"_conquer_smqrGaussInfWeight", (DL_FUNC) &_conquer_smqrGaussInfWeight, 9},
{"_conquer_smqrLogisticInf", (DL_FUNC) &_conquer_smqrLogisticInf, 10},
{"_conquer_smqrUnifInf", (DL_FUNC) &_conquer_smqrUnifInf, 10},
{"_conquer_smqrParaInf", (DL_FUNC) &_conquer_smqrParaInf, 10},
{"_conquer_smqrTrianInf", (DL_FUNC) &_conquer_smqrTrianInf, 10},
{"_conquer_softThresh", (DL_FUNC) &_conquer_softThresh, 3},
{"_conquer_cmptLambdaLasso", (DL_FUNC) &_conquer_cmptLambdaLasso, 2},
{"_conquer_cmptLambdaSCAD", (DL_FUNC) &_conquer_cmptLambdaSCAD, 4},
{"_conquer_cmptLambdaMCP", (DL_FUNC) &_conquer_cmptLambdaMCP, 4},
{"_conquer_lossL2", (DL_FUNC) &_conquer_lossL2, 5},
{"_conquer_updateL2", (DL_FUNC) &_conquer_updateL2, 6},
{"_conquer_lossGaussHd", (DL_FUNC) &_conquer_lossGaussHd, 7},
{"_conquer_updateGaussHd", (DL_FUNC) &_conquer_updateGaussHd, 9},
{"_conquer_lossLogisticHd", (DL_FUNC) &_conquer_lossLogisticHd, 6},
{"_conquer_updateLogisticHd", (DL_FUNC) &_conquer_updateLogisticHd, 8},
{"_conquer_lossUnifHd", (DL_FUNC) &_conquer_lossUnifHd, 6},
{"_conquer_updateUnifHd", (DL_FUNC) &_conquer_updateUnifHd, 8},
{"_conquer_lossParaHd", (DL_FUNC) &_conquer_lossParaHd, 7},
{"_conquer_updateParaHd", (DL_FUNC) &_conquer_updateParaHd, 9},
{"_conquer_lossTrianHd", (DL_FUNC) &_conquer_lossTrianHd, 7},
{"_conquer_updateTrianHd", (DL_FUNC) &_conquer_updateTrianHd, 9},
{"_conquer_lammL2", (DL_FUNC) &_conquer_lammL2, 9},
{"_conquer_lasso", (DL_FUNC) &_conquer_lasso, 10},
{"_conquer_lammSmqrGauss", (DL_FUNC) &_conquer_lammSmqrGauss, 12},
{"_conquer_lammSmqrLogistic", (DL_FUNC) &_conquer_lammSmqrLogistic, 11},
{"_conquer_lammSmqrUnif", (DL_FUNC) &_conquer_lammSmqrUnif, 11},
{"_conquer_lammSmqrPara", (DL_FUNC) &_conquer_lammSmqrPara, 12},
{"_conquer_lammSmqrTrian", (DL_FUNC) &_conquer_lammSmqrTrian, 12},
{"_conquer_smqrLassoGauss", (DL_FUNC) &_conquer_smqrLassoGauss, 14},
{"_conquer_smqrLassoLogistic", (DL_FUNC) &_conquer_smqrLassoLogistic, 13},
{"_conquer_smqrLassoUnif", (DL_FUNC) &_conquer_smqrLassoUnif, 13},
{"_conquer_smqrLassoPara", (DL_FUNC) &_conquer_smqrLassoPara, 14},
{"_conquer_smqrLassoTrian", (DL_FUNC) &_conquer_smqrLassoTrian, 14},
{"_conquer_smqrScadGauss", (DL_FUNC) &_conquer_smqrScadGauss, 16},
{"_conquer_smqrScadLogistic", (DL_FUNC) &_conquer_smqrScadLogistic, 15},
{"_conquer_smqrScadUnif", (DL_FUNC) &_conquer_smqrScadUnif, 15},
{"_conquer_smqrScadPara", (DL_FUNC) &_conquer_smqrScadPara, 16},
{"_conquer_smqrScadTrian", (DL_FUNC) &_conquer_smqrScadTrian, 16},
{"_conquer_smqrMcpGauss", (DL_FUNC) &_conquer_smqrMcpGauss, 16},
{"_conquer_smqrMcpLogistic", (DL_FUNC) &_conquer_smqrMcpLogistic, 15},
{"_conquer_smqrMcpUnif", (DL_FUNC) &_conquer_smqrMcpUnif, 15},
{"_conquer_smqrMcpPara", (DL_FUNC) &_conquer_smqrMcpPara, 16},
{"_conquer_smqrMcpTrian", (DL_FUNC) &_conquer_smqrMcpTrian, 16},
{"_conquer_conquerHdGauss", (DL_FUNC) &_conquer_conquerHdGauss, 12},
{"_conquer_conquerHdLogistic", (DL_FUNC) &_conquer_conquerHdLogistic, 12},
{"_conquer_conquerHdUnif", (DL_FUNC) &_conquer_conquerHdUnif, 12},
{"_conquer_conquerHdPara", (DL_FUNC) &_conquer_conquerHdPara, 12},
{"_conquer_conquerHdTrian", (DL_FUNC) &_conquer_conquerHdTrian, 12},
{"_conquer_lossQr", (DL_FUNC) &_conquer_lossQr, 4},
{"_conquer_cvSmqrLassoGauss", (DL_FUNC) &_conquer_cvSmqrLassoGauss, 11},
{"_conquer_cvSmqrScadGauss", (DL_FUNC) &_conquer_cvSmqrScadGauss, 13},
{"_conquer_cvSmqrMcpGauss", (DL_FUNC) &_conquer_cvSmqrMcpGauss, 13},
{"_conquer_cvSmqrLassoLogistic", (DL_FUNC) &_conquer_cvSmqrLassoLogistic, 11},
{"_conquer_cvSmqrScadLogistic", (DL_FUNC) &_conquer_cvSmqrScadLogistic, 13},
{"_conquer_cvSmqrMcpLogistic", (DL_FUNC) &_conquer_cvSmqrMcpLogistic, 13},
{"_conquer_cvSmqrLassoUnif", (DL_FUNC) &_conquer_cvSmqrLassoUnif, 11},
{"_conquer_cvSmqrScadUnif", (DL_FUNC) &_conquer_cvSmqrScadUnif, 13},
{"_conquer_cvSmqrMcpUnif", (DL_FUNC) &_conquer_cvSmqrMcpUnif, 13},
{"_conquer_cvSmqrLassoPara", (DL_FUNC) &_conquer_cvSmqrLassoPara, 11},
{"_conquer_cvSmqrScadPara", (DL_FUNC) &_conquer_cvSmqrScadPara, 13},
{"_conquer_cvSmqrMcpPara", (DL_FUNC) &_conquer_cvSmqrMcpPara, 13},
{"_conquer_cvSmqrLassoTrian", (DL_FUNC) &_conquer_cvSmqrLassoTrian, 11},
{"_conquer_cvSmqrScadTrian", (DL_FUNC) &_conquer_cvSmqrScadTrian, 13},
{"_conquer_cvSmqrMcpTrian", (DL_FUNC) &_conquer_cvSmqrMcpTrian, 13},
{NULL, NULL, 0}
};
RcppExport void R_init_conquer(DllInfo *dll) {
R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
R_useDynamicSymbols(dll, FALSE);
}
conquer/R/ 0000755 0001762 0000144 00000000000 14202030402 012112 5 ustar ligges users conquer/R/generate_ns.R 0000644 0001762 0000144 00000000300 14202027225 014531 0 ustar ligges users #' @useDynLib conquer
#' @importFrom Rcpp evalCpp
#' @importFrom matrixStats rowSds rowQuantiles rowMaxs colSds
#' @importFrom stats qnorm quantile runif
#' @importFrom Matrix rankMatrix
NULL
conquer/R/RcppExports.R 0000644 0001762 0000144 00000050734 14202030376 014551 0 ustar ligges users # Generated by using Rcpp::compileAttributes() -> do not edit by hand
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
sgn <- function(x) {
.Call('_conquer_sgn', PACKAGE = 'conquer', x)
}
mad <- function(x) {
.Call('_conquer_mad', PACKAGE = 'conquer', x)
}
updateHuber <- function(Z, res, tau, der, grad, n, rob, n1) {
invisible(.Call('_conquer_updateHuber', PACKAGE = 'conquer', Z, res, tau, der, grad, n, rob, n1))
}
huberReg <- function(Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol = 0.0001, constTau = 1.345, iteMax = 5000L) {
.Call('_conquer_huberReg', PACKAGE = 'conquer', Z, Y, tau, der, gradOld, gradNew, n, p, n1, tol, constTau, iteMax)
}
standardize <- function(X, mx, sx1, p) {
.Call('_conquer_standardize', PACKAGE = 'conquer', X, mx, sx1, p)
}
updateGauss <- function(Z, res, der, grad, tau, n1, h1) {
invisible(.Call('_conquer_updateGauss', PACKAGE = 'conquer', Z, res, der, grad, tau, n1, h1))
}
updateGaussWeight <- function(Z, weight, res, der, grad, tau, n1, h1) {
invisible(.Call('_conquer_updateGaussWeight', PACKAGE = 'conquer', Z, weight, res, der, grad, tau, n1, h1))
}
updateLogistic <- function(Z, res, der, grad, tau, n1, h1) {
invisible(.Call('_conquer_updateLogistic', PACKAGE = 'conquer', Z, res, der, grad, tau, n1, h1))
}
updateUnif <- function(Z, res, der, grad, n, tau, h, n1, h1) {
invisible(.Call('_conquer_updateUnif', PACKAGE = 'conquer', Z, res, der, grad, n, tau, h, n1, h1))
}
updatePara <- function(Z, res, der, grad, n, tau, h, n1, h1, h3) {
invisible(.Call('_conquer_updatePara', PACKAGE = 'conquer', Z, res, der, grad, n, tau, h, n1, h1, h3))
}
updateTrian <- function(Z, res, der, grad, n, tau, h, n1, h1, h2) {
invisible(.Call('_conquer_updateTrian', PACKAGE = 'conquer', Z, res, der, grad, n, tau, h, n1, h1, h2))
}
smqrGauss <- function(X, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGauss', PACKAGE = 'conquer', X, Y, tau, h, constTau, tol, iteMax)
}
smqrGaussNsd <- function(Z, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussNsd', PACKAGE = 'conquer', Z, Y, tau, h, constTau, tol, iteMax)
}
smqrGaussIni <- function(X, Y, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussIni', PACKAGE = 'conquer', X, Y, betaHat, p, tau, h, tol, iteMax)
}
smqrGaussIniWeight <- function(X, Y, weight, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussIniWeight', PACKAGE = 'conquer', X, Y, weight, betaHat, p, tau, h, tol, iteMax)
}
smqrLogistic <- function(X, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrLogistic', PACKAGE = 'conquer', X, Y, tau, h, constTau, tol, iteMax)
}
smqrLogisticNsd <- function(Z, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrLogisticNsd', PACKAGE = 'conquer', Z, Y, tau, h, constTau, tol, iteMax)
}
smqrLogisticIni <- function(X, Y, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrLogisticIni', PACKAGE = 'conquer', X, Y, betaHat, p, tau, h, tol, iteMax)
}
smqrUnif <- function(X, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrUnif', PACKAGE = 'conquer', X, Y, tau, h, constTau, tol, iteMax)
}
smqrUnifNsd <- function(Z, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrUnifNsd', PACKAGE = 'conquer', Z, Y, tau, h, constTau, tol, iteMax)
}
smqrUnifIni <- function(X, Y, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrUnifIni', PACKAGE = 'conquer', X, Y, betaHat, p, tau, h, tol, iteMax)
}
smqrPara <- function(X, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrPara', PACKAGE = 'conquer', X, Y, tau, h, constTau, tol, iteMax)
}
smqrParaNsd <- function(Z, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrParaNsd', PACKAGE = 'conquer', Z, Y, tau, h, constTau, tol, iteMax)
}
smqrParaIni <- function(X, Y, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrParaIni', PACKAGE = 'conquer', X, Y, betaHat, p, tau, h, tol, iteMax)
}
smqrTrian <- function(X, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrTrian', PACKAGE = 'conquer', X, Y, tau, h, constTau, tol, iteMax)
}
smqrTrianNsd <- function(Z, Y, tau = 0.5, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrTrianNsd', PACKAGE = 'conquer', Z, Y, tau, h, constTau, tol, iteMax)
}
smqrTrianIni <- function(X, Y, betaHat, p, tau = 0.5, h = 0.0, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrTrianIni', PACKAGE = 'conquer', X, Y, betaHat, p, tau, h, tol, iteMax)
}
smqrGaussProc <- function(X, Y, tauSeq, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussProc', PACKAGE = 'conquer', X, Y, tauSeq, h, constTau, tol, iteMax)
}
smqrLogisticProc <- function(X, Y, tauSeq, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrLogisticProc', PACKAGE = 'conquer', X, Y, tauSeq, h, constTau, tol, iteMax)
}
smqrUnifProc <- function(X, Y, tauSeq, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrUnifProc', PACKAGE = 'conquer', X, Y, tauSeq, h, constTau, tol, iteMax)
}
smqrParaProc <- function(X, Y, tauSeq, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrParaProc', PACKAGE = 'conquer', X, Y, tauSeq, h, constTau, tol, iteMax)
}
smqrTrianProc <- function(X, Y, tauSeq, h = 0.0, constTau = 1.345, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrTrianProc', PACKAGE = 'conquer', X, Y, tauSeq, h, constTau, tol, iteMax)
}
smqrGaussInf <- function(X, Y, betaHat, n, p, h = 0.0, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussInf', PACKAGE = 'conquer', X, Y, betaHat, n, p, h, tau, B, tol, iteMax)
}
smqrGaussInfWeight <- function(X, Y, betaHat, n, p, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrGaussInfWeight', PACKAGE = 'conquer', X, Y, betaHat, n, p, tau, B, tol, iteMax)
}
smqrLogisticInf <- function(X, Y, betaHat, n, p, h = 0.0, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrLogisticInf', PACKAGE = 'conquer', X, Y, betaHat, n, p, h, tau, B, tol, iteMax)
}
smqrUnifInf <- function(X, Y, betaHat, n, p, h = 0.0, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrUnifInf', PACKAGE = 'conquer', X, Y, betaHat, n, p, h, tau, B, tol, iteMax)
}
smqrParaInf <- function(X, Y, betaHat, n, p, h = 0.0, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrParaInf', PACKAGE = 'conquer', X, Y, betaHat, n, p, h, tau, B, tol, iteMax)
}
smqrTrianInf <- function(X, Y, betaHat, n, p, h = 0.0, tau = 0.5, B = 1000L, tol = 0.0001, iteMax = 5000L) {
.Call('_conquer_smqrTrianInf', PACKAGE = 'conquer', X, Y, betaHat, n, p, h, tau, B, tol, iteMax)
}
softThresh <- function(x, lambda, p) {
.Call('_conquer_softThresh', PACKAGE = 'conquer', x, lambda, p)
}
cmptLambdaLasso <- function(lambda, p) {
.Call('_conquer_cmptLambdaLasso', PACKAGE = 'conquer', lambda, p)
}
cmptLambdaSCAD <- function(beta, lambda, p, para = 3.7) {
.Call('_conquer_cmptLambdaSCAD', PACKAGE = 'conquer', beta, lambda, p, para)
}
cmptLambdaMCP <- function(beta, lambda, p, para = 3.0) {
.Call('_conquer_cmptLambdaMCP', PACKAGE = 'conquer', beta, lambda, p, para)
}
lossL2 <- function(Z, Y, beta, n1, tau) {
.Call('_conquer_lossL2', PACKAGE = 'conquer', Z, Y, beta, n1, tau)
}
updateL2 <- function(Z, Y, beta, grad, n1, tau) {
.Call('_conquer_updateL2', PACKAGE = 'conquer', Z, Y, beta, grad, n1, tau)
}
lossGaussHd <- function(Z, Y, beta, tau, h, h1, h2) {
.Call('_conquer_lossGaussHd', PACKAGE = 'conquer', Z, Y, beta, tau, h, h1, h2)
}
updateGaussHd <- function(Z, Y, beta, grad, tau, n1, h, h1, h2) {
.Call('_conquer_updateGaussHd', PACKAGE = 'conquer', Z, Y, beta, grad, tau, n1, h, h1, h2)
}
lossLogisticHd <- function(Z, Y, beta, tau, h, h1) {
.Call('_conquer_lossLogisticHd', PACKAGE = 'conquer', Z, Y, beta, tau, h, h1)
}
updateLogisticHd <- function(Z, Y, beta, grad, tau, n1, h, h1) {
.Call('_conquer_updateLogisticHd', PACKAGE = 'conquer', Z, Y, beta, grad, tau, n1, h, h1)
}
lossUnifHd <- function(Z, Y, beta, tau, h, h1) {
.Call('_conquer_lossUnifHd', PACKAGE = 'conquer', Z, Y, beta, tau, h, h1)
}
updateUnifHd <- function(Z, Y, beta, grad, tau, n1, h, h1) {
.Call('_conquer_updateUnifHd', PACKAGE = 'conquer', Z, Y, beta, grad, tau, n1, h, h1)
}
lossParaHd <- function(Z, Y, beta, tau, h, h1, h3) {
.Call('_conquer_lossParaHd', PACKAGE = 'conquer', Z, Y, beta, tau, h, h1, h3)
}
updateParaHd <- function(Z, Y, beta, grad, tau, n1, h, h1, h3) {
.Call('_conquer_updateParaHd', PACKAGE = 'conquer', Z, Y, beta, grad, tau, n1, h, h1, h3)
}
lossTrianHd <- function(Z, Y, beta, tau, h, h1, h2) {
.Call('_conquer_lossTrianHd', PACKAGE = 'conquer', Z, Y, beta, tau, h, h1, h2)
}
updateTrianHd <- function(Z, Y, beta, grad, tau, n1, h, h1, h2) {
.Call('_conquer_updateTrianHd', PACKAGE = 'conquer', Z, Y, beta, grad, tau, n1, h, h1, h2)
}
lammL2 <- function(Z, Y, Lambda, beta, tau, phi, gamma, p, n1) {
.Call('_conquer_lammL2', PACKAGE = 'conquer', Z, Y, Lambda, beta, tau, phi, gamma, p, n1)
}
lasso <- function(Z, Y, lambda, tau, p, n1, phi0 = 0.1, gamma = 1.2, epsilon = 0.01, iteMax = 500L) {
.Call('_conquer_lasso', PACKAGE = 'conquer', Z, Y, lambda, tau, p, n1, phi0, gamma, epsilon, iteMax)
}
lammSmqrGauss <- function(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2) {
.Call('_conquer_lammSmqrGauss', PACKAGE = 'conquer', Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2)
}
lammSmqrLogistic <- function(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1) {
.Call('_conquer_lammSmqrLogistic', PACKAGE = 'conquer', Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1)
}
lammSmqrUnif <- function(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1) {
.Call('_conquer_lammSmqrUnif', PACKAGE = 'conquer', Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1)
}
lammSmqrPara <- function(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h3) {
.Call('_conquer_lammSmqrPara', PACKAGE = 'conquer', Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h3)
}
lammSmqrTrian <- function(Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2) {
.Call('_conquer_lammSmqrTrian', PACKAGE = 'conquer', Z, Y, Lambda, beta, phi, tau, gamma, p, h, n1, h1, h2)
}
smqrLassoGauss <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_smqrLassoGauss', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax)
}
smqrLassoLogistic <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_smqrLassoLogistic', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax)
}
smqrLassoUnif <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_smqrLassoUnif', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax)
}
smqrLassoPara <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_smqrLassoPara', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax)
}
smqrLassoTrian <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_smqrLassoTrian', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax)
}
smqrScadGauss <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_smqrScadGauss', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrScadLogistic <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_smqrScadLogistic', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrScadUnif <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_smqrScadUnif', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrScadPara <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_smqrScadPara', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrScadTrian <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_smqrScadTrian', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrMcpGauss <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_smqrMcpGauss', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrMcpLogistic <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_smqrMcpLogistic', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrMcpUnif <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_smqrMcpUnif', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrMcpPara <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_smqrMcpPara', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h3, phi0, gamma, epsilon, iteMax, iteTight, para)
}
smqrMcpTrian <- function(Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_smqrMcpTrian', PACKAGE = 'conquer', Z, Y, lambda, sx1, tau, p, n1, h, h1, h2, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquerHdGauss <- function(X, Y, lambda, tau, h, type = 1L, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_conquerHdGauss', PACKAGE = 'conquer', X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquerHdLogistic <- function(X, Y, lambda, tau, h, type = 1L, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_conquerHdLogistic', PACKAGE = 'conquer', X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquerHdUnif <- function(X, Y, lambda, tau, h, type = 1L, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_conquerHdUnif', PACKAGE = 'conquer', X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquerHdPara <- function(X, Y, lambda, tau, h, type = 1L, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_conquerHdPara', PACKAGE = 'conquer', X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquerHdTrian <- function(X, Y, lambda, tau, h, type = 1L, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_conquerHdTrian', PACKAGE = 'conquer', X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
lossQr <- function(Z, Y, beta, tau) {
.Call('_conquer_lossQr', PACKAGE = 'conquer', Z, Y, beta, tau)
}
cvSmqrLassoGauss <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_cvSmqrLassoGauss', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
}
cvSmqrScadGauss <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_cvSmqrScadGauss', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrMcpGauss <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.5, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_cvSmqrMcpGauss', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrLassoLogistic <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_cvSmqrLassoLogistic', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
}
cvSmqrScadLogistic <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_cvSmqrScadLogistic', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrMcpLogistic <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.5, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_cvSmqrMcpLogistic', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrLassoUnif <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_cvSmqrLassoUnif', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
}
cvSmqrScadUnif <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_cvSmqrScadUnif', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrMcpUnif <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.5, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_cvSmqrMcpUnif', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrLassoPara <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_cvSmqrLassoPara', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
}
cvSmqrScadPara <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_cvSmqrScadPara', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrMcpPara <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.5, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_cvSmqrMcpPara', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrLassoTrian <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L) {
.Call('_conquer_cvSmqrLassoTrian', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
}
cvSmqrScadTrian <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.2, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3.7) {
.Call('_conquer_cvSmqrScadTrian', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
cvSmqrMcpTrian <- function(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0 = 0.01, gamma = 1.5, epsilon = 0.001, iteMax = 500L, iteTight = 3L, para = 3) {
.Call('_conquer_cvSmqrMcpTrian', PACKAGE = 'conquer', X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
conquer/R/smqr.R 0000644 0001762 0000144 00000063374 14202025324 013243 0 ustar ligges users getPivCI = function(est, estBoot, alpha) {
q1 = rowQuantiles(estBoot, probs = alpha / 2)
q2 = rowQuantiles(estBoot, probs = 1 - alpha / 2)
perCI = cbind(q1, q2)
pivCI = cbind(2 * est - q2, 2 * est - q1)
colnames(perCI) = colnames(pivCI) = c("lower", "upper")
return (list(perCI = perCI, pivCI = pivCI))
}
getNormCI = function(est, sd, z) {
lower = est - z * sd
upper = est + z * sd
return (cbind(lower, upper))
}
#' @title Convolution-Type Smoothed Quantile Regression
#' @description Estimation and inference for conditional linear quantile regression models using a convolution smoothed approach. Efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed.
#' @param X A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates. Number of observations \eqn{n} must be greater than number of covariates \eqn{p}.
#' @param Y An \eqn{n}-dimensional response vector.
#' @param tau (\strong{optional}) The desired quantile level. Default is 0.5. Value must be between 0 and 1.
#' @param kernel (\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".
#' @param h (\strong{optional}) Bandwidth/smoothing parameter. Default is \eqn{\max\{((log(n) + p) / n)^{0.4}, 0.05\}}. The default will be used if the input value is less than 0.05.
#' @param checkSing (\strong{optional}) A logical flag. Default is FALSE. If \code{checkSing = TRUE}, then it will check if the design matrix is singular before running conquer.
#' @param tol (\strong{optional}) Tolerance level of the gradient descent algorithm. The iteration will stop when the maximum magnitude of all the elements of the gradient is less than \code{tol}. Default is 1e-04.
#' @param iteMax (\strong{optional}) Maximum number of iterations. Default is 5000.
#' @param ci (\strong{optional}) A logical flag. Default is FALSE. If \code{ci = TRUE}, then three types of confidence intervals (percentile, pivotal and normal) will be constructed via multiplier bootstrap.
#' @param alpha (\strong{optional}) Miscoverage level for each confidence interval. Default is 0.05.
#' @param B (\strong{optional}) The size of bootstrap samples. Default is 1000.
#' @return An object containing the following items will be returned:
#' \describe{
#' \item{\code{coeff}}{A \eqn{(p + 1)}-vector of estimated quantile regression coefficients, including the intercept.}
#' \item{\code{ite}}{Number of iterations until convergence.}
#' \item{\code{residual}}{An \eqn{n}-vector of fitted residuals.}
#' \item{\code{bandwidth}}{Bandwidth value.}
#' \item{\code{tau}}{Quantile level.}
#' \item{\code{kernel}}{Kernel function.}
#' \item{\code{n}}{Sample size.}
#' \item{\code{p}}{Number of covariates.}
#' \item{\code{perCI}}{The percentile confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
#' \item{\code{pivCI}}{The pivotal confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
#' \item{\code{normCI}}{The normal-based confidence intervals for regression coefficients. Not available if \code{ci = FALSE}.}
#' }
#' @references Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
#' @references Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist., in press.
#' @references He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
#' @references Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
#' @author Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
#' @seealso See \code{\link{conquer.process}} for smoothed quantile regression process.
#' @examples
#' n = 500; p = 10
#' beta = rep(1, p)
#' X = matrix(rnorm(n * p), n, p)
#' Y = X %*% beta + rt(n, 2)
#'
#' ## Smoothed quantile regression with Gaussian kernel
#' fit.Gauss = conquer(X, Y, tau = 0.5, kernel = "Gaussian")
#' beta.hat.Gauss = fit.Gauss$coeff
#'
#' ## Smoothe quantile regression with uniform kernel
#' fit.unif = conquer(X, Y, tau = 0.5, kernel = "uniform")
#' beta.hat.unif = fit.unif$coeff
#'
#' ## Construct three types of confidence intervals via multiplier bootstrap
#' fit = conquer(X, Y, tau = 0.5, kernel = "Gaussian", ci = TRUE)
#' ci.per = fit$perCI
#' ci.piv = fit$pivCI
#' ci.norm = fit$normCI
#' @export
conquer = function(X, Y, tau = 0.5, kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"), h = 0.0, checkSing = FALSE, tol = 0.0001,
iteMax = 5000, ci = FALSE, alpha = 0.05, B = 1000) {
if (nrow(X) != length(Y)) {
stop("Error: the length of Y must be the same as the number of rows of X.")
}
if (ncol(X) >= nrow(X)) {
stop("Error: the number of columns of X cannot exceed the number of rows of X.")
}
if(tau <= 0 || tau >= 1) {
stop("Error: the quantile level tau must be in (0, 1).")
}
if (alpha <= 0 || alpha >= 1) {
stop("Error: the nominal level alpha must be in (0, 1).")
}
if (min(colSds(X)) == 0) {
stop("Error: at least one column of X is constant.")
}
if (checkSing && rankMatrix(X)[1] < ncol(X)) {
stop("Error: the design matrix X is singular.")
}
kernel = match.arg(kernel)
if (!ci) {
rst = NULL
if (kernel == "Gaussian") {
rst = smqrGauss(X, Y, tau, h, tol = tol, iteMax = iteMax)
} else if (kernel == "logistic") {
rst = smqrLogistic(X, Y, tau, h, tol = tol, iteMax = iteMax)
} else if (kernel == "uniform") {
rst = smqrUnif(X, Y, tau, h, tol = tol, iteMax = iteMax)
} else if (kernel == "parabolic") {
rst = smqrPara(X, Y, tau, h, tol = tol, iteMax = iteMax)
} else {
rst = smqrTrian(X, Y, tau, h, tol = tol, iteMax = iteMax)
}
return (list(coeff = as.numeric(rst$coeff), ite = rst$ite, residual = as.numeric(rst$residual), bandwidth = rst$bandwidth, tau = tau,
kernel = kernel, n = nrow(X), p = ncol(X)))
} else {
rst = coeff = multiBeta = NULL
if (kernel == "Gaussian") {
rst = smqrGauss(X, Y, tau, h, tol = tol, iteMax = iteMax)
coeff = as.numeric(rst$coeff)
multiBeta = smqrGaussInf(X, Y, coeff, nrow(X), ncol(X), h, tau, B, tol, iteMax)
} else if (kernel == "logistic") {
rst = smqrLogistic(X, Y, tau, h, tol = tol, iteMax = iteMax)
coeff = as.numeric(rst$coeff)
multiBeta = smqrLogisticInf(X, Y, coeff, nrow(X), ncol(X), h, tau, B, tol, iteMax)
} else if (kernel == "uniform") {
rst = smqrUnif(X, Y, tau, h, tol = tol, iteMax = iteMax)
coeff = as.numeric(rst$coeff)
multiBeta = smqrUnifInf(X, Y, coeff, nrow(X), ncol(X), h, tau, B, tol, iteMax)
} else if (kernel == "parabolic") {
rst = smqrPara(X, Y, tau, h, tol = tol, iteMax = iteMax)
coeff = as.numeric(rst$coeff)
multiBeta = smqrParaInf(X, Y, coeff, nrow(X), ncol(X), h, tau, B, tol, iteMax)
} else {
rst = smqrTrian(X, Y, tau, h, tol = tol, iteMax = iteMax)
coeff = as.numeric(rst$coeff)
multiBeta = smqrTrianInf(X, Y, coeff, nrow(X), ncol(X), h, tau, B, tol, iteMax)
}
ciList = getPivCI(coeff, multiBeta, alpha)
z = qnorm(1 - alpha / 2)
normCI = as.matrix(getNormCI(coeff, rowSds(multiBeta), z))
return (list(coeff = coeff, ite = rst$ite, residual = as.numeric(rst$residual), bandwidth = rst$bandwidth, tau = tau, kernel = kernel,
n = nrow(X), p = ncol(X), perCI = as.matrix(ciList$perCI), pivCI = as.matrix(ciList$pivCI), normCI = normCI))
}
}
#' @title Convolution-Type Smoothed Quantile Regression Process
#' @description Fit a smoothed quantile regression process over a quantile range. The algorithm is essentially the same as \code{\link{conquer}}.
#' @param X A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates. Number of observations \eqn{n} must be greater than number of covariates \eqn{p}.
#' @param Y An \eqn{n}-dimensional response vector.
#' @param tauSeq (\strong{optional}) A sequence of quantile values (between 0 and 1). Default is \eqn{\{0.1, 0.15, 0.2, ..., 0.85, 0.9\}}.
#' @param kernel (\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".
#' @param h (\strong{optional}) The bandwidth/smoothing parameter. Default is \eqn{\max\{((log(n) + p) / n)^{0.4}, 0.05\}}. The default will be used if the input value is less than 0.05.
#' @param checkSing (\strong{optional}) A logical flag. Default is FALSE. If \code{checkSing = TRUE}, then it will check if the design matrix is singular before running conquer.
#' @param tol (\strong{optional}) Tolerance level of the gradient descent algorithm. The iteration will stop when the maximum magnitude of all the elements of the gradient is less than \code{tol}. Default is 1e-04.
#' @param iteMax (\strong{optional}) Maximum number of iterations. Default is 5000.
#' @return An object containing the following items will be returned:
#' \describe{
#' \item{\code{coeff}}{A \eqn{(p + 1)} by \eqn{m} matrix of estimated quantile regression process coefficients, including the intercept. m is the length of \code{tauSeq}.}
#' \item{\code{bandwidth}}{Bandwidth value.}
#' \item{\code{tauSeq}}{The sequence of quantile levels.}
#' \item{\code{kernel}}{The choice of kernel function.}
#' \item{\code{n}}{Sample size.}
#' \item{\code{p}}{Number the covariates.}
#' }
#' @references Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
#' @references Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist., in press.
#' @references He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
#' @references Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
#' @author Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
#' @seealso See \code{\link{conquer}} for single-index smoothed quantile regression.
#' @examples
#' n = 500; p = 10
#' beta = rep(1, p)
#' X = matrix(rnorm(n * p), n, p)
#' Y = X %*% beta + rt(n, 2)
#'
#' ## Smoothed quantile regression process with Gaussian kernel
#' fit.Gauss = conquer.process(X, Y, tauSeq = seq(0.2, 0.8, by = 0.05), kernel = "Gaussian")
#' beta.hat.Gauss = fit.Gauss$coeff
#'
#' ## Smoothe quantile regression with uniform kernel
#' fit.unif = conquer.process(X, Y, tauSeq = seq(0.2, 0.8, by = 0.05), kernel = "uniform")
#' beta.hat.unif = fit.unif$coeff
#' @export
conquer.process = function(X, Y, tauSeq = seq(0.1, 0.9, by = 0.05), kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"), h = 0.0,
checkSing = FALSE, tol = 0.0001, iteMax = 5000) {
if (nrow(X) != length(Y)) {
stop("Error: the length of Y must be the same as the number of rows of X.")
}
if (ncol(X) >= nrow(X)) {
stop("Error: the number of columns of X cannot exceed the number of rows of X.")
}
if(min(tauSeq) <= 0 || max(tauSeq) >= 1) {
stop("Error: every quantile level must be in (0, 1).")
}
if (min(colSds(X)) == 0) {
stop("Error: at least one column of X is constant.")
}
if (checkSing && rankMatrix(X)[1] < ncol(X)) {
stop("Error: the design matrix X is singular.")
}
kernel = match.arg(kernel)
rst = NULL
if (kernel == "Gaussian") {
rst = smqrGaussProc(X, Y, tauSeq, h, tol = tol, iteMax = iteMax)
} else if (kernel == "logistic") {
rst = smqrLogisticProc(X, Y, tauSeq, h, tol = tol, iteMax = iteMax)
} else if (kernel == "uniform") {
rst = smqrUnifProc(X, Y, tauSeq, h, tol = tol, iteMax = iteMax)
} else if (kernel == "parabolic") {
rst = smqrParaProc(X, Y, tauSeq, h, tol = tol, iteMax = iteMax)
} else {
rst = smqrTrianProc(X, Y, tauSeq, h, tol = tol, iteMax = iteMax)
}
return (list(coeff = rst$coeff, bandwidth = rst$bandwidth, tauSeq = tauSeq, kernel = kernel, n = nrow(X), p = ncol(X)))
}
#' @title Penalized Convolution-Type Smoothed Quantile Regression
#' @description Fit sparse quantile regression models in high dimensions via regularized conquer methods with "lasso", "scad" and "mcp" penalties. For "scad" and "mcp", the iteratively reweighted \eqn{\ell_1}-penalized algorithm is complemented with a local adpative majorize-minimize algorithm.
#' @param X A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates.
#' @param Y An \eqn{n}-dimensional response vector.
#' @param lambda (\strong{optional}) Regularization parameter. Default is 0.2.
#' @param tau (\strong{optional}) Quantile level (between 0 and 1). Default is 0.5.
#' @param kernel (\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".
#' @param h (\strong{optional}) Bandwidth/smoothing parameter. Default is \eqn{\max\{0.5 * (log(p) / n)^{0.25}, 0.05\}}.
#' @param penalty (\strong{optional}) A character string specifying the penalty. Default is "lasso". The other two options are "scad" and "mcp".
#' @param para (\strong{optional}) A constant parameter for "scad" and "mcp". Do not need to specify if the penalty is lasso. The default values are 3.7 for "scad" and 3 for "mcp".
#' @param epsilon (\strong{optional}) A tolerance level for the stopping rule. The iteration will stop when the maximum magnitude of the change of coefficient updates is less than \code{epsilon}. Default is 0.001.
#' @param iteMax (\strong{optional}) Maximum number of iterations. Default is 500.
#' @param phi0 (\strong{optional}) The initial quadratic coefficient parameter in the local adaptive majorize-minimize algorithm. Default is 0.01.
#' @param gamma (\strong{optional}) The adaptive search parameter (greater than 1) in the local adaptive majorize-minimize algorithm. Default is 1.2.
#' @param iteTight (\strong{optional}) Maximum number of tightening iterations in the iteratively reweighted \eqn{\ell_1}-penalized algorithm. Do not need to specify if the penalty is lasso. Default is 3.
#' @return An object containing the following items will be returned:
#' \describe{
#' \item{\code{coeff}}{A \eqn{(p + 1)} vector of estimated coefficients, including the intercept.}
#' \item{\code{bandwidth}}{Bandwidth value.}
#' \item{\code{tau}}{Quantile level.}
#' \item{\code{kernel}}{Kernel function.}
#' \item{\code{penalty}}{Penalty type.}
#' \item{\code{lambda}}{Regularization parameter.}
#' \item{\code{n}}{Sample size.}
#' \item{\code{p}}{Number of the covariates.}
#' }
#' @references Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
#' @references Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
#' @references Tan, K. M., Wang, L. and Zhou, W.-X. (2021). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, to appear.
#' @author Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
#' @seealso See \code{\link{conquer.cv.reg}} for regularized quantile regression with cross-validation.
#' @examples
#' n = 200; p = 500; s = 10
#' beta = c(rep(1.5, s), rep(0, p - s))
#' X = matrix(rnorm(n * p), n, p)
#' Y = X %*% beta + rt(n, 2)
#'
#' ## Regularized conquer with lasso penalty at tau = 0.8
#' fit.lasso = conquer.reg(X, Y, lambda = 0.05, tau = 0.8, kernel = "Gaussian", penalty = "lasso")
#' beta.lasso = fit.lasso$coeff
#'
#' #' ## Regularized conquer with scad penalty at tau = 0.8
#' fit.scad = conquer.reg(X, Y, lambda = 0.13, tau = 0.8, kernel = "Gaussian", penalty = "scad")
#' beta.scad = fit.scad$coeff
#' @export
conquer.reg = function(X, Y, lambda = 0.2, tau = 0.5, kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"), h = 0.0,
penalty = c("lasso", "scad", "mcp"), para = NULL, epsilon = 0.001, iteMax = 500, phi0 = 0.01, gamma = 1.2, iteTight = 3) {
if (nrow(X) != length(Y)) {
stop("Error: the length of Y must be the same as the number of rows of X.")
}
if(tau <= 0 || tau >= 1) {
stop("Error: the quantile level tau must be in (0, 1).")
}
if (lambda <= 0) {
stop("Error: lambda must be positive.")
}
if (min(colSds(X)) == 0) {
stop("Error: at least one column of X is constant.")
}
kernel = match.arg(kernel)
penalty = match.arg(penalty)
n = nrow(X)
p = ncol(X)
if (h <= 0.05) {
h = max(0.5 * (log(p) / n)^(0.25), 0.05);
}
type = 1
if (penalty == "lasso") {
para = 1.0
} else if (penalty == "scad") {
type = 2
if (is.null(para) || para <= 0) {
para = 3.7
}
} else if (penalty == "mcp") {
type = 3
if (is.null(para) || para <= 0) {
para = 3.0
}
}
rst = NULL
if (kernel == "Gaussian") {
rst = conquerHdGauss(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
} else if (kernel == "logistic") {
rst = conquerHdLogistic(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
} else if (kernel == "uniform") {
rst = conquerHdUnif(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
} else if (kernel == "parabolic") {
rst = conquerHdPara(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = conquerHdTrian(X, Y, lambda, tau, h, type, phi0, gamma, epsilon, iteMax, iteTight, para)
}
return (list(coeff = as.numeric(rst), bandwidth = h, tau = tau, kernel = kernel, penalty = penalty, lambda = lambda, n = n, p = p))
}
#' @title Cross-Validated Penalized Convolution-Type Smoothed Quantile Regression
#' @description Fit sparse quantile regression models via regularized conquer methods with "lasso", "scad" and "mcp" penalties. The regularization parameter \eqn{\lambda} is selected by cross-validation.
#' @param X A \eqn{n} by \eqn{p} design matrix. Each row is a vector of observation with \eqn{p} covariates.
#' @param Y An \eqn{n}-dimensional response vector.
#' @param lambdaSeq (\strong{optional}) A sequence of candidate regularization parameters. If unspecified, the sequence will be generated by a simulated pivotal quantity approach proposed by Belloni and Chernozhukov (2011).
#' @param tau (\strong{optional}) Quantile level (between 0 and 1). Default is 0.5.
#' @param kernel (\strong{optional}) A character string specifying the choice of kernel function. Default is "Gaussian". Choices are "Gaussian", "logistic", "uniform", "parabolic" and "triangular".
#' @param h (\strong{optional}) The bandwidth parameter for kernel smoothing. Default is \eqn{\max\{0.5 * (log(p) / n)^{0.25}, 0.05\}}.
#' @param penalty (\strong{optional}) A character string specifying the penalty. Default is "lasso". Choices are "lasso", "scad" or "mcp".
#' @param kfolds (\strong{optional}) Number of folds for cross-validation. Default is 5.
#' @param numLambda (\strong{optional}) Number of \eqn{\lambda} values for cross-validation if \code{lambdaSeq} is unspeficied. Default is 50.
#' @param para (\strong{optional}) A constant parameter for "scad" and "mcp". Do not need to specify if the penalty is lasso. The default values are 3.7 for "scad" and 3 for "mcp".
#' @param epsilon (\strong{optional}) A tolerance level for the stopping rule. The iteration will stop when the maximum magnitude of the change of coefficient updates is less than \code{epsilon}. Default is 0.001.
#' @param iteMax (\strong{optional}) Maximum number of iterations. Default is 500.
#' @param phi0 (\strong{optional}) The initial quadratic coefficient parameter in the local adaptive majorize-minimize algorithm. Default is 0.01.
#' @param gamma (\strong{optional}) The adaptive search parameter (greater than 1) in the local adaptive majorize-minimize algorithm. Default is 1.2.
#' @param iteTight (\strong{optional}) Maximum number of tightening iterations in the iteratively reweighted \eqn{\ell_1}-penalized algorithm. Do not need to specify if the penalty is lasso. Default is 3.
#' @return An object containing the following items will be returned:
#' \describe{
#' \item{\code{coeff}}{A \eqn{(p + 1)} vector of estimated coefficients, including the intercept.}
#' \item{\code{lambda}}{Regularization parameter selected by cross-validation.}
#' \item{\code{bandwidth}}{Bandwidth value.}
#' \item{\code{tau}}{Quantile level.}
#' \item{\code{kernel}}{Kernel function.}
#' \item{\code{penalty}}{Penalty type.}
#' \item{\code{n}}{Sample size.}
#' \item{\code{p}}{Number of covariates.}
#' }
#' @references Belloni, A. and Chernozhukov, V. (2011). \eqn{\ell_1} penalized quantile regression in high-dimensional sparse models. Ann. Statist. 39 82-130.
#' @references Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
#' @references Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
#' @references Tan, K. M., Wang, L. and Zhou, W.-X. (2021). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, to appear.
#' @author Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
#' @seealso See \code{\link{conquer.reg}} for regularized quantile regression with a prescribed \eqn{lambda}.
#' @examples
#' n = 100; p = 100; s = 3
#' beta = c(rep(1.5, s), rep(0, p - s))
#' X = matrix(rnorm(n * p), n, p)
#' Y = X %*% beta + rt(n, 2)
#'
#' ## Cross-validated regularized conquer with lasso penalty at tau = 0.8
#' fit.lasso = conquer.cv.reg(X, Y, tau = 0.8, kernel = "Gaussian", penalty = "lasso")
#' beta.lasso = fit.lasso$coeff
#'
#' #' ## Cross-validated regularized conquer with scad penalty at tau = 0.8
#' fit.scad = conquer.cv.reg(X, Y,tau = 0.8, kernel = "Gaussian", penalty = "scad")
#' beta.scad = fit.scad$coeff
#' @export
conquer.cv.reg = function(X, Y, lambdaSeq = NULL, tau = 0.5, kernel = c("Gaussian", "logistic", "uniform", "parabolic", "triangular"), h = 0.0,
penalty = c("lasso", "scad", "mcp"), kfolds = 5, numLambda = 50, para = NULL, epsilon = 0.001, iteMax = 500, phi0 = 0.01,
gamma = 1.2, iteTight = 3) {
if (nrow(X) != length(Y)) {
stop("Error: the length of Y must be the same as the number of rows of X.")
}
if(tau <= 0 || tau >= 1) {
stop("Error: the quantile level tau must be in (0, 1).")
}
if (!is.null(lambdaSeq) && min(lambdaSeq) <= 0) {
stop("Error: all lambda's must be positive.")
}
if (min(colSds(X)) == 0) {
stop("Error: at least one column of X is constant.")
}
kernel = match.arg(kernel)
penalty = match.arg(penalty)
n = nrow(X)
p = ncol(X)
if (h <= 0.05) {
h = max(0.5 * (log(p) / n)^(0.25), 0.05);
}
if (is.null(lambdaSeq)) {
nsim = 200
U = matrix(runif(nsim * n), nsim, n)
pivot = tau - (U <= tau)
lambda0 = quantile(rowMaxs(abs(pivot %*% scale(X))), 0.9) / n
lambdaSeq = seq(0.5, 1.5, length.out = numLambda) * lambda0
}
if (penalty == "scad" && is.null(para)) {
para = 3.7
} else if (penalty == "mcp" && is.null(para)) {
para = 3.0
}
folds = sample(rep(1:kfolds, ceiling(n / kfolds)), n)
rst = NULL
if (kernel == "Gaussian") {
if (penalty == "lasso") {
rst = cvSmqrLassoGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
} else if (penalty == "scad") {
rst = cvSmqrScadGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = cvSmqrMcpGauss(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
} else if (kernel == "logistic") {
if (penalty == "lasso") {
rst = cvSmqrLassoLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
} else if (penalty == "scad") {
rst = cvSmqrScadLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = cvSmqrMcpLogistic(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
} else if (kernel == "uniform") {
if (penalty == "lasso") {
rst = cvSmqrLassoUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
} else if (penalty == "scad") {
rst = cvSmqrScadUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = cvSmqrMcpUnif(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
} else if (kernel == "parabolic") {
if (penalty == "lasso") {
rst = cvSmqrLassoPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
} else if (penalty == "scad") {
rst = cvSmqrScadPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = cvSmqrMcpPara(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
} else {
if (penalty == "lasso") {
rst = cvSmqrLassoTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax)
} else if (penalty == "scad") {
rst = cvSmqrScadTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
} else {
rst = cvSmqrMcpTrian(X, Y, lambdaSeq, folds, tau, kfolds, h, phi0, gamma, epsilon, iteMax, iteTight, para)
}
}
return (list(coeff = as.numeric(rst$coeff), lambda = rst$lambda, bandwidth = h, tau = tau, kernel = kernel, penalty = penalty, n = n, p = p))
}
conquer/R/conquer-package.R 0000644 0001762 0000144 00000004101 14137701440 015314 0 ustar ligges users #' @docType package
#' @name conquer-package
#' @title Conquer: Convolution-Type Smoothed Quantile Regression
#' @description Estimation and inference for conditional linear quantile regression models using a convolution smoothed approach. In the low-dimensional setting, efficient gradient-based methods are employed for fitting both a single model and a regression process over a quantile range. Normal-based and (multiplier) bootstrap confidence intervals for all slope coefficients are constructed. In high dimensions, the conquer methods complemented with \eqn{\ell_1}-penalization and iteratively reweighted \eqn{\ell_1}-penalization are used to fit sparse models.
#' @author Xuming He , Xiaoou Pan , Kean Ming Tan , and Wen-Xin Zhou
#' @references Barzilai, J. and Borwein, J. M. (1988). Two-point step size gradient methods. IMA J. Numer. Anal. 8 141–148.
#' @references Belloni, A. and Chernozhukov, V. (2011). \eqn{\ell_1} penalized quantile regression in high-dimensional sparse models. Ann. Statist. 39 82-130.
#' @references Fan, J., Liu, H., Sun, Q. and Zhang, T. (2018). I-LAMM for sparse learning: Simultaneous control of algorithmic complexity and statistical error. Ann. Statist. 46 814-841.
#' @references Fernandes, M., Guerre, E. and Horta, E. (2019). Smoothing quantile regressions. J. Bus. Econ. Statist. 39 338-357.
#' @references He, X., Pan, X., Tan, K. M., and Zhou, W.-X. (2021+). Smoothed quantile regression for large-scale inference. J. Econometrics, in press.
#' @references Horowitz, J. L. (1998). Bootstrap methods for median regression models. Econometrica 66 1327–1351.
#' @references Koenker, R. (2005). Quantile Regression. Cambridge University Press, Cambridge.
#' @references Koenker, R. Package "quantreg".
#' @references Koenker, R. and Bassett, G. (1978). Regression quantiles. Econometrica 46 33-50.
#' @references Tan, K. M., Wang, L. and Zhou, W.-X. (2021+). High-dimensional quantile regression: convolution smoothing and concave regularization. J. Roy. Statist. Soc. Ser. B, in press.
NULL
conquer/MD5 0000644 0001762 0000144 00000001442 14202037136 012235 0 ustar ligges users 5504fa185dc1b8937865b01c3dc3aa61 *DESCRIPTION
f6d5b95830f42abc838d4207651488b7 *NAMESPACE
f7a3257cb1cb1e77263c30c0c22aa1e8 *R/RcppExports.R
f3aa1ede025a6afd14ba3ce4063129ea *R/conquer-package.R
117fcb0051657c459624d6d8bc6d5101 *R/generate_ns.R
b8a56fc7bb37683e315862a4942c9a1e *R/smqr.R
ef95b33b34fee391d537c96113d19a31 *README.md
da515ec65fc32cdac261781e12791b05 *man/conquer-package.Rd
55de6fdc6e14e8f81976c4679acd8dac *man/conquer.Rd
d4483a41de90dab1cbb4dca171cbb8fa *man/conquer.cv.reg.Rd
3a25708c8c0eab7a6d0803b39aa2fe3b *man/conquer.process.Rd
8adcfcd3c70fc360005862c49a384987 *man/conquer.reg.Rd
fc3414d488ae3c3bfd9fdf30ad310935 *src/Makevars
fc3414d488ae3c3bfd9fdf30ad310935 *src/Makevars.win
3ef5823114f64b346aa65de6d6f16938 *src/RcppExports.cpp
d7c7f84bf806518f076644a17dbe4158 *src/smqr.cpp