---
title: "Introduction"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{introduction}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r setup}
library(BsplineQuantReg)
```
The R-package "Quantile regression with B-splines under shape constraints" is intended to perform quantile regression with polynomial splines. It follows the method described in Abbes(2025) , and initiated by He and Shi (1998) for quadratic splines, on the original idea of Koenker and Basset for linear regression.
## Simple example
``` {r simple example, fig.width=10, fig.height=7, out.width="100%"}
n_points <- 50
xtab = ((0:(n_points)) / (n_points))
# simple pscillating data
#ytab<- -3 * xtab +sin(3*2*xtab*3.14)+ 0.2 * rnorm(n_points+1)
#ytab= <- 2* xtab + 0.5 * sin(6 * pi * xtab) + 0.1 * rnorm(n_points+1)
ytab <- xtab * (1 - xtab) + 0.1 * rnorm(n_points + 1)
kn <- 8
n = 7
monot1 = c(rep(1, n), rep(0, (12 - n)))
monot2 = rep(1,12)
knot <- ((0:(kn + 5)) / (kn + 5))
res <- quantile_spline(
xtab = xtab,
ytab = ytab,
knot,
tau = 0.5,
monot = 0,
degree = 3,
verbose = FALSE
)
res_part_croissant <- quantile_spline(
xtab = xtab,
ytab = ytab,
knot = knot,
tau = 0.5,
degree = 3,
monot = monot1,
convcons = 0,
verbose = FALSE
)
res_croissant <- quantile_spline(
xtab = xtab,
ytab = ytab,
knot = knot,
tau = 0.5,
degree = 3,
monot = 1,
convcons = 0,
verbose = FALSE
)
par(mfrow = c(1, 3))
x_eval=(0:200)/200
y_sans = spline_eval(res, x_eval)
y_part_croiss = spline_eval(res_part_croissant, x_eval)
y_croiss = spline_eval(res_croissant, x_eval)
plot(
xtab,
ytab,
pch = 16,
cex = 0.5,
col = "black",
main = c("Without constraint")
)
lines(x_eval, y_sans, lwd = 2)
plot(
xtab,
ytab,
pch = 16,
cex = 0.5,
col = "black",
main = c("Mixed mootone :\n global increasing constraints
"
)
)
lines(x_eval, y_croiss, lwd = 2)
plot(
xtab,
ytab,
pch = 16,
cex = 0.5,
col = "black",
main = c("Mixed mootone :\n increasing constraints
\n on the first inter-knots"
)
)
lines(x_eval, y_part_croiss, lwd = 2)
```
## Core content
The initial version with cubic splines is now augmented with splines of degree 0 to 4 for constrained regression, and any degree for regression without monotone constraints.
- **Demo** `degrees_comparison` — simultaneous comparison of constraints across degrees 1, 2, 3, and 4.
Constraints for degree 3 (monotone), degree 4 (monotone and convex) and degree 5 (convex) use the **Karlin–Studden SOCP** characterization.
- **Vignettes** `theoretical_background`, `shape_constraints`
- **Demos**
- `monotonicity_basic` — monotonicity constraints
- `convexity` — convexity and concavity constraints
- `temperature` — temperature anomaly analysis: uniform increasing vs mixed constraints (decreasing 1956–1973 only)
- `temperature2` — temperature anomaly analysis with alternative constraint configurations
- `logistic` — quantile regression test on a logistic function
- `comprehensive` — comprehensive test of various constraints on an oscillating function
**Third-derivative constraints** are supported for degrees 3 and 4.
- **Demo** `demo_der3` — demonstration of third-order derivative constraints.
## B-spline library
All B-spline and polynomial functions have been rewritten for consistency. The package provides an original B-spline library for:
- conversion between PP-form and B-spline representation,
- evaluation and differentiation,
- callable and non-callable objects,
- printing human-readable pp forms,
- viewing the basis,
all based on **De Boor's** theory.
- **Vignettes** `polynomial_library`, `bspline_basis_manipulation`
**Differentiation of B-splines** can be performed either on the spline (polynomial differentiation) or on the basis.
- **Demo** `derivative2` — coherence of the derivative functions.
The library also extends to **multiple knots** to handle singularities, robustly, including for constrained regression.
- **Demos**
- `shock` — regression with discontinuity and derivability singularity
- `shock_basis` — same as `shock`, with singular B-spline basis display
## Graphical user interface
### An interactive Shiny GUI is available:
- CRAN:
- GitHub:
```r
# From CRAN:
# install.packages("BsplineQuantRegGui")
# Or from GitHub:
# install.packages("remotes")
# remotes::install_github("/BsplineQuantRegGUI")
# Launch:
# BsplineQuantRegGui::run_app()
```
The GUI lets you:
- create a custom data set or upload a two-column dataset,
- choose the spline degree, knots, quantile level, and shape constraints (monotone, convex, …),
- visualise information about the spline, the basis, and the coefficients,
- download the fitted curve and coefficients, including executable R code.
### Python port
An equivalent Python package is available at .