The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

fastlpr: Fast Local Polynomial Regression for R

R package License: GPL-3

NUFFT-accelerated local polynomial regression and kernel density estimation for R. This is the R port of the fastLPR MATLAB/Python toolbox, achieving O(N + M log M) computational complexity through Non-Uniform Fast Fourier Transform (NUFFT) with Gaussian gridding.

Features

Installation

From Source (Development)

# Clone repository and navigate to fastLPR_R
setwd("path/to/fastLPR_R")

# Option 1: Source setup script (for development)
source("setup.R")

# Option 2: Install as package (recommended)
# From command line:
# R CMD INSTALL .

Dependencies

Required: - R >= 4.0.0 - Matrix (>= 1.0.0) - Rcpp (>= 1.0.0) - RcppArmadillo (>= 0.10.0)

Suggested: - testthat (>= 3.0.0) - for testing - R.matlab - for cross-validation against MATLAB references - akima, interp, fields - for additional interpolation methods

Quick Start

Kernel Density Estimation (KDE)

library(fastlpr)

# 1D KDE
set.seed(42)
x <- matrix(rnorm(500), ncol = 1)
hlist <- get_hlist(20, c(0.05, 0.5), "logspace")
opt <- list(order = 0)  # order=0 for KDE
kde <- cv_fastkde(x, hlist, opt)

# Selected bandwidth
print(kde$h)

# 2D KDE
x2d <- matrix(rnorm(2000), ncol = 2)
hlist2d <- get_hlist(c(10, 10), rbind(c(0.1, 1), c(0.1, 1)), "logspace")
kde2d <- cv_fastkde(x2d, hlist2d, list(order = 0))

Local Polynomial Regression

# 1D Local Linear Regression
x <- matrix(runif(500), ncol = 1)
y <- sin(2 * pi * x) + 0.1 * matrix(rnorm(500), ncol = 1)
hlist <- get_hlist(20, c(0.01, 0.5), "logspace")

opt <- list(
  order = 1,       # 0=Nadaraya-Watson, 1=local linear, 2=local quadratic
  calc_dof = TRUE  # Enable DOF estimation for GCV
)
regs <- cv_fastlpr(x, y, hlist, opt)

# Results
print(regs$gcv_yhat$h)  # Selected bandwidth
yhat <- regs$yhat       # Fitted values

Heteroscedastic Variance Estimation

# Mean estimation
opt_mean <- list(order = 1, calc_dof = TRUE)
res_mean <- cv_fastlpr(x, y, hlist, opt_mean)

# Variance estimation using squared residuals
residuals_sq <- (y - res_mean$yhat)^2
opt_var <- list(order = 1, calc_dof = TRUE, y_type_out = "variance")
res_var <- cv_fastlpr(x, residuals_sq, hlist, opt_var)

Package Structure

fastLPR_R/
├── R/                          # Source files (26 files)
│   ├── cv_fastlpr.R           # Main regression API
│   ├── cv_fastkde.R           # Main KDE API
│   ├── fastlpr_*.R            # Core algorithm components
│   ├── nufft.R                # NUFFT implementation
│   ├── lwp_estimator.R        # Local polynomial estimator
│   └── utils.R                # Utility functions
├── src/                        # C++ acceleration (Rcpp/RcppArmadillo)
├── inst/
│   ├── examples/              # JSS paper figure reproduction scripts
│   │   ├── example_fig2_fastkde.R
│   │   ├── example_fig3_boundary_comparison.R
│   │   ├── example_fig4_complex.R
│   │   ├── example_fig5_heteroscedasticity.R
│   │   ├── example_fig6_applications.R
│   │   └── reproduce_all_figures.R
│   └── benchmarks/            # Performance comparison scripts
│       ├── benchmark_tab4_kde_comparison.R
│       ├── benchmark_kde_large_scale.R
│       └── benchmark_lpr_npregfast.R
├── tests/
│   └── testthat/              # Test suite
│       ├── test-cross-validation.R  # 10-test MATLAB cross-validation
│       └── test-*.R                 # Component tests
├── man/                        # Documentation (roxygen2)
├── data/                       # Example datasets
├── dev/                        # Development files (excluded from build)
├── DESCRIPTION                 # Package metadata
├── NAMESPACE                   # Exported functions
└── LICENSE                     # GPL-3

Examples (JSS Paper Figures)

Reproduce all figures from the JSS paper:

# Run all figure scripts
source(system.file("examples", "reproduce_all_figures.R", package = "fastlpr"))

# Or run individual figures
source(system.file("examples", "example_fig2_fastkde.R", package = "fastlpr"))
Figure Description Script
Fig 2 KDE (1D/2D/3D) example_fig2_fastkde.R
Fig 3 Boundary comparison (NW/LL/LQ) example_fig3_boundary_comparison.R
Fig 4 Complex-valued regression example_fig4_complex.R
Fig 5 Heteroscedastic variance example_fig5_heteroscedasticity.R
Fig 6 Applications (qEEG/MRI) example_fig6_applications.R

Benchmarks

Performance comparison with existing R packages:

# Run benchmark scripts
source(system.file("benchmarks", "benchmark_tab4_kde_comparison.R", package = "fastlpr"))

KDE: fastlpr vs ks package (N=50,000) - fastlpr: 0.34s - ks: 19.98s - Speedup: 59x

LPR: fastlpr vs statsmodels (Python, N=5,000) - Naive O(N²): 31.7s - fastlpr O(N log N): 0.03s - Speedup: 1000x+

Testing

Run the test suite:

# Using testthat
setwd("fastLPR_R")
testthat::test_dir("tests/testthat")

# Or via devtools
devtools::test()

Cross-validation results (10 tests against MATLAB reference):

Test N dx order Type MATLAB R Time Ratio GCV MaxErr BW MaxErr Mean MaxErr Var MaxErr Status
1D KDE 1400 1 0 mean 0.341s 0.081s 0.24x 1.94e+01* 0.00e+00 - - PASS
2D KDE 2000 2 0 mean 0.125s 0.062s 0.49x 1.84e-01* 0.00e+00 - - PASS
3D KDE 2000 3 0 mean 0.145s 0.869s 6.00x 3.32e-03* 0.00e+00 - - PASS
1D Order 1 500 1 1 mean 1.546s 0.060s 0.04x 5.86e-04 0.00e+00 7.31e-03 - PASS
2D Order 1 1200 2 1 mean 0.406s 0.873s 2.15x 9.64e-04 1.33e-02 1.90e-02 - PASS
1D Order 2 500 1 2 mean 0.185s 0.116s 0.63x 1.46e-03 0.00e+00 7.77e-03 - PASS
2D Order 2 1200 2 2 mean 1.343s 5.109s 3.81x 1.45e-03 0.00e+00 8.30e-03 - PASS
Complex 10000 1 1 mean 0.334s 7.444s 22.29x 6.89e-05 0.00e+00 3.45e-04 - PASS
Hetero 1D 10000 1 1 mean+var 0.466s 1.652s 3.54x 2.33e-05 0.00e+00 2.11e-03 1.64e-03 PASS
Hetero 2D 1200 2 1 mean+var 1.167s 3.916s 3.35x 2.89e-02 0.00e+00 4.29e-02 3.02e-02 PASS

* For KDE tests (order=0), LCV MaxErr shown in GCV column; All metrics must pass

API Reference

Main Functions

Function Description
cv_fastlpr(x, y, hlist, opt) Cross-validated local polynomial regression
cv_fastkde(x, hlist, opt) Cross-validated kernel density estimation
get_hlist(n, range, type) Generate bandwidth grid
fastlpr_predict(regs, x_new) Predict at new points
fastlpr_interval(regs, alpha) Confidence intervals

Options

opt <- list(
  order = 1,                # Polynomial order: 0, 1, or 2
  kernel_type = "gaussian", # Kernel: "gaussian" or "epanechnikov"
  N = 100,                  # Grid size per dimension
  accuracy = 6,             # NUFFT accuracy (1-12)
  calc_dof = TRUE,          # Compute DOF for GCV
  dstd = 0                  # Std devs for 1-SE rule (0 = minimum GCV)
)

Citation

If you use fastlpr in your research, please cite:

@article{fastlpr2025,
  title = {fastLPR: Fast Local Polynomial Regression with NUFFT Acceleration},
  author = {Wang, Ying and Li, Min},
  journal = {Journal of Statistical Software},
  year = {2025},
  note = {R package version 1.0.0}
}

License

GPL-3

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.