conquer/0000755000176200001440000000000014202037136011724 5ustar liggesusersconquer/NAMESPACE0000644000176200001440000000063114202030400013126 0ustar liggesusers# 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.md0000644000176200001440000001667514137314661013232 0ustar liggesusers# 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/0000755000176200001440000000000014202030402012464 5ustar liggesusersconquer/man/conquer.reg.Rd0000644000176200001440000001011114137702711015215 0ustar liggesusers% 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.Rd0000644000176200001440000000653514137702450016135 0ustar liggesusers% 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.Rd0000644000176200001440000000406014137702450016040 0ustar liggesusers% 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.Rd0000644000176200001440000001114014137702450015627 0ustar liggesusers% 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.Rd0000644000176200001440000001062614137702450014454 0ustar liggesusers% 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/DESCRIPTION0000644000176200001440000000271714202037136013441 0ustar liggesusersPackage: 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/0000755000176200001440000000000014202030402012500 5ustar liggesusersconquer/src/smqr.cpp0000644000176200001440000033236714135571164014230 0ustar liggesusers# 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/Makevars0000644000176200001440000000020413625307667014224 0ustar liggesusers CXX_STD = CXX11 PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) conquer/src/Makevars.win0000644000176200001440000000020413625307676015020 0ustar liggesusers CXX_STD = CXX11 PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) conquer/src/RcppExports.cpp0000644000176200001440000040522714202027323015517 0ustar liggesusers// 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/0000755000176200001440000000000014202030402012112 5ustar liggesusersconquer/R/generate_ns.R0000644000176200001440000000030014202027225014531 0ustar liggesusers#' @useDynLib conquer #' @importFrom Rcpp evalCpp #' @importFrom matrixStats rowSds rowQuantiles rowMaxs colSds #' @importFrom stats qnorm quantile runif #' @importFrom Matrix rankMatrix NULL conquer/R/RcppExports.R0000644000176200001440000005073414202030376014551 0ustar liggesusers# 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.R0000644000176200001440000006337414202025324013243 0ustar liggesusersgetPivCI = 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.R0000644000176200001440000000410114137701440015314 0ustar liggesusers#' @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/MD50000644000176200001440000000144214202037136012235 0ustar liggesusers5504fa185dc1b8937865b01c3dc3aa61 *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