Skip to main content

Cubic smoothing splines for discontinuous signals (CSSD)

Project description

CSSD - Cubic smoothing splines for discontinuous signals

This is a reference implementation in Matlab for the algorithms described in the paper

M. Storath, A. Weinmann, "Smoothing splines for discontinuous signals", Journal of Computational and Graphical Statistics, 2023, [Preprint]

Overview of main functionalities

  1. cssd.m computes a cubic smoothing spline with discontinuities (CSSD) for data (x,y). It is a solution of the following model of a smoothing spline $f$ with a-priori unknown discontinuities $J$

$$\min_{f, J} p \sum_{i=1}^N \left(\frac{y_i - f(x_i)}{\delta_i}\right)^2 + (1-p) \int_{[x_1, x_N] \setminus J} (f''(t))^2 dt + \gamma |J|.$$

where

  • $y_i = g(x_i) + \epsilon_i$ are samples of piecewise smooth function $g$ at data sites $x_1, \ldots, x_N$, and an estimate $\delta_i$ of the standard deviation of the errors $\epsilon_i$
  • the minimum is taken over all possible sets of discontinuities between two data sites $J \subset [x_1, x_N]\setminus {x_1, \ldots, x_N}$ and all functions $f$ that are twice continuously differentiable away from the discontinuities.
  • The model parameter $p \in (0, 1)$ controls the relative weight of the smoothness term (second term) and the data fidelity term.
  • The last term is a penalty for the number of discontinuities $|J|$ weighted by a parameter $\gamma > 0.$
  1. cssd_cv.m automatically determines values for the model parameters $p$ and $\gamma$ based on K-fold cross validation.

Quickstart

Python (Rust core)

pip install cssd
import numpy as np
from cssd import cssd, cssd_cv

x = np.linspace(0, 1, 100)
y = np.sin(4 * np.pi * x) - np.sign(x - 0.3) - np.sign(0.72 - x)

out = cssd(x, y, p=0.999, gamma=8.0)
out.discont      # detected jump locations
out.pp(x)        # evaluate the piecewise spline

cv = cssd_cv(x, y, cv_type="random", cv_arg=5)
cv.p, cv.gamma, cv.fit.discont

The Python package wraps a Rust extension built with PyO3 and maturin; see crates/cssd-core for the algorithm crate and crates/cssd-py for the bindings.

MATLAB (reference implementation, unchanged)

  1. Execute "install_cssd.m" which adds the folder and all subfolders to the Matlab path.
  2. Execute any m-file from the demos folder

Examples

Synthetic data

Synthetic signal
A synthetic signal is sampled at $N = 100$ random data sites $x_i$ and corrupted by zero mean Gaussian noise with standard deviation $0.1.$ The results of the discussed model are shown for $p=0.999$ and different parameters of $\gamma,$ where $\gamma=\infty$ corresponds to classical smoothing splines. The thick lines represent the results of the shown sample realization. The shaded areas depict the $2.5 \%$ to $97.5 \%$ (pointwise) quantiles of $1000$ realizations. The histograms under the plots show the frequency of the detected discontinuity locations over all realizations.

Stock data

Stock
The dots represent the logarithm of the closing prices of the Meta stock from May 18, 2012, to May 19, 2022. The curve represents the CSSD with parameters determined by K-fold CV ($p = 0.4702$, $\gamma = 0.0069$). The dashed vertical lines indicate the discontinuities of the CSSD, and the ticks correspond to the date before the discontinuity.

Geyser data

Geyser
Fitting a CSSD to the Old Faithful data (circles): If the parameter is selected based on K-fold CV we obtain a result without discontinuities which coincides with a classical smoothing spline (solid curve). Keeping the selected $p$-parameter and lowering the $\gamma$ parameter sufficiently gives a two-phase regression curve (dashed curves) with a breakpoint near $x = 3$ (dashed vertical line), and the two curve segments are nearly linear. Both of the above parameter sets yield better CV-scores than a linear model (dotted line).

Reference

M. Storath, A. Weinmann, "Smoothing splines for discontinuous signals", Journal of Computational and Graphical Statistics, 2023

See also

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cssd-1.0.1.tar.gz (45.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cssd-1.0.1-cp39-abi3-win_amd64.whl (250.4 kB view details)

Uploaded CPython 3.9+Windows x86-64

cssd-1.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

cssd-1.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (324.2 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

cssd-1.0.1-cp39-abi3-macosx_11_0_arm64.whl (297.9 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

cssd-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl (318.1 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file cssd-1.0.1.tar.gz.

File metadata

  • Download URL: cssd-1.0.1.tar.gz
  • Upload date:
  • Size: 45.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cssd-1.0.1.tar.gz
Algorithm Hash digest
SHA256 421c5175b1f8bf8e6b8eedffcfb5b2f4e8ce4fe688bee756778b8f39ca04da4b
MD5 ef995d131910f9c9b433bf875cfd4600
BLAKE2b-256 03ee1ec7a49862fbba03d14a8f1b91685b9e6b7c3589497353331e0c03683e28

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1.tar.gz:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cssd-1.0.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: cssd-1.0.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 250.4 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cssd-1.0.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cbf54ea260b08fc1ec4d8ddbfc9edeb6ed25a59863fc6956572680cf4648d888
MD5 75e79c7da6c4abb310a0c8b3c807792c
BLAKE2b-256 de57c835456a9a839bfb9ebfcb00f67240b2dd12a3e384851cbbb21ef6c87a9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1-cp39-abi3-win_amd64.whl:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cssd-1.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cssd-1.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3e1c894d4b8210d4bd17520f6ae9981b81e97b8bc2795811b4e6d4a2242fd570
MD5 7bffb6897a41b20f3a4b3a020f1e99aa
BLAKE2b-256 953c96bb61f7f24168aa243d0df7c34aaf2f301b3f3e16e93b0cb1b97b10f8de

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cssd-1.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cssd-1.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4736c37c2b9764565dd101e5a2baab8055a6c6c37e5e5eff089c08828fcc33ad
MD5 ad238a38052b07d44d1dd033159fd2a1
BLAKE2b-256 dbc35381023cdfda8ca957ddf97aa0e3c8ba71751f332a6d780fbcb92e371a5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cssd-1.0.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: cssd-1.0.1-cp39-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 297.9 kB
  • Tags: CPython 3.9+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cssd-1.0.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56183e5f34f3def5d8fade4d223ded16f6b9de06f9c8260c2ad10b8c4869fb55
MD5 d04ad852c01c9257a5c51b682c55b650
BLAKE2b-256 f9d3e57dd7b49f2944cdb410c4b6cc471dd9a1367c12785ef30f7a3debb049fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cssd-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: cssd-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 318.1 kB
  • Tags: CPython 3.9+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cssd-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6c8572de37df3bf8713340c324ef9bfc6c46b5d881653c26b85e1c39149c5f0f
MD5 d8e281c22d24660fef59de404cbf8974
BLAKE2b-256 831ad0b09ce904781283048694f3b06bcba0e152f8aeeb179ce0885e89ce2154

See more details on using hashes here.

Provenance

The following attestation bundles were made for cssd-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on mstorath/CSSD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page