| Title: | Geometric Smoothing and Conditional Expectation Methods |
| Version: | 0.1.0 |
| Description: | Provides geometric methods for nonparametric regression and density estimation on data represented as coordinate matrices or weighted graphs. Methods include local polynomial smoothing, model-averaged local polynomial smoothing, local polynomial lifting trend filtering, synchronized local polynomial lifting trend filtering, graph low-pass filtering, and Hessian-energy regression. Methodological references include Gajer and Ravel (2025) "Adaptive Geometric Regression for High-Dimensional Structured Data" <doi:10.48550/arXiv.2511.03817>, Fan and Gijbels (1996, ISBN:9780412983214), Wang et al. (2016) "Trend Filtering on Graphs" https://www.jmlr.org/papers/v17/15-147.html, and Kim et al. (2009) "Semi-Supervised Regression Using Hessian Energy" https://papers.nips.cc/paper/3741-semi-supervised-regression-using-hessian-energy-with-an-application-to-semi-supervised-dimensionality-reduction. |
| Copyright: | file inst/COPYRIGHTS |
| License: | GPL (≥ 3) |
| URL: | https://github.com/pgajer/geosmooth |
| BugReports: | https://github.com/pgajer/geosmooth/issues |
| Encoding: | UTF-8 |
| Language: | en-US |
| SystemRequirements: | GNU make |
| LinkingTo: | Rcpp |
| Depends: | R (≥ 3.5.0) |
| Imports: | dgraphs (≥ 0.1.0), digest, jsonlite, MASS, Matrix, methods, Rcpp, stats, utils |
| Suggests: | genlasso, grip, knitr, rmarkdown, testthat (≥ 3.0.0), waldo |
| VignetteBuilder: | knitr |
| Config/testthat/edition: | 3 |
| Config/roxygen2/version: | 8.0.0 |
| NeedsCompilation: | yes |
| Packaged: | 2026-08-31 21:42:50 UTC; pgajer |
| Author: | Pawel Gajer [aut, cre], Gael Guennebaud [ctb] (Eigen), Benoit Jacob [ctb] (Eigen), Authors of Eigen [cph] (Authorship and copyright in the included Eigen library), Yixuan Qiu [ctb, cph] (Spectra), Contributors to Spectra [cph] (Copyright in the included Spectra library), Sunil Arya [ctb, cph] (ANN), David M. Mount [ctb, cph] (ANN), University of Maryland [cph] (ANN) |
| Maintainer: | Pawel Gajer <pgajer@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-09-12 14:10:10 UTC |
geosmooth package
Description
Geometric smoothing and conditional expectation methods for coordinate data, point clouds, and weighted graphs. The package provides local polynomial, model-averaged, trend-filtering, graph low-pass, occupation-density, and Hessian-energy methods.
Author(s)
Maintainer: Pawel Gajer pgajer@gmail.com
Authors:
Pawel Gajer pgajer@gmail.com
Other contributors:
Gael Guennebaud (Eigen) [contributor]
Benoit Jacob (Eigen) [contributor]
Authors of Eigen (Authorship and copyright in the included Eigen library) [copyright holder]
Yixuan Qiu (Spectra) [contributor, copyright holder]
Contributors to Spectra (Copyright in the included Spectra library) [copyright holder]
Sunil Arya (ANN) [contributor, copyright holder]
David M. Mount (ANN) [contributor, copyright holder]
University of Maryland (ANN) [copyright holder]
See Also
Useful links:
Apply a Metric Graph Low-Pass Filter Path
Description
Applies every requested low-pass parameter to one response or a matrix of responses using a reusable spectral basis.
Usage
apply.metric.graph.lowpass.path(
basis,
y,
eta.grid,
filter.type = c("heat_kernel", "tikhonov", "cubic_spline", "gaussian", "exponential",
"butterworth"),
block.size = NULL,
truncation.tol = 1e-04,
unresolved.action = c("warn", "error", "allow"),
exact.zero = TRUE
)
Arguments
basis |
A |
y |
Numeric response vector or matrix with one row per graph vertex. |
eta.grid |
Numeric filter-parameter grid. |
filter.type |
Spectral low-pass filter family. |
block.size |
Optional number of response columns processed together. |
truncation.tol |
Positive tolerance smaller than one used to classify truncated-basis candidates as spectrally resolved. |
unresolved.action |
Action when a truncated-basis candidate exceeds
|
exact.zero |
Logical. For heat filtering, return the input exactly at
|
Value
A list of class "metric.graph.lowpass.path". For one response,
fitted.values is an N by J matrix. For multiple
responses it is an N by J by S array.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
basis <- metric.graph.lowpass.basis(adj, lengths, n.eigenpairs = 4L,
eigen.solver = "dense")
apply.metric.graph.lowpass.path(basis, 1:4, eta.grid = c(0, 0.1, 1))
Summarize a synthetic dataset as one metadata row
Description
Summarize a synthetic dataset as one metadata row
Usage
## S3 method for class 'synthetic_dataset'
as.data.frame(x, row.names = NULL, optional = FALSE, ...)
Arguments
x |
A |
row.names |
Optional row names. |
optional |
Ignored. |
... |
Ignored. |
Value
A one-row data frame.
Bootstrap Uncertainty For A Fixed-Selection MALPS Fit
Description
Reuses the supports, local charts, prediction supports, averaging weights,
selected degree, and local-solver controls from an existing
fit.malps object, then repeatedly calls
refit.malps with bootstrap-style case weights. This is a
fixed-selection uncertainty diagnostic: it measures refit variability
conditional on the fitted MALPS support profile and does not rerun
cross-validation or rebuild supports in each replicate.
Usage
bootstrap.malps(
object,
B = 200L,
weight.type = c("bayesian", "multinomial"),
y = NULL,
probs = NULL,
conf.level = 0.95,
seed = NULL,
max.failures = max(10L, B),
keep.weights = FALSE,
verbose = FALSE,
...
)
Arguments
object |
A |
B |
Number of successful bootstrap replicates requested. |
weight.type |
Bootstrap weight generator, one of |
y |
Optional response vector. Defaults to |
probs |
Optional nonnegative sampling probabilities for
|
conf.level |
Pointwise interval level used in the returned summary. |
seed |
Optional integer seed for reproducible bootstrap weights. |
max.failures |
Maximum failed refit attempts allowed before stopping. |
keep.weights |
Logical; store the generated bootstrap weights in the returned object. |
verbose |
Logical; emit progress messages every ten successful replicates. |
... |
Reserved for future extensions. |
Details
Two weight generators are available. "bayesian" draws positive
exponential weights and rescales them to have mean one. This is the default
because it preserves positive local support weights and therefore avoids many
local-support degeneracies. "multinomial" draws ordinary
nonparametric bootstrap counts with total count nrow(object$X); this
can fail when a replicate assigns zero weight to all observations in a local
support, and such failures are recorded.
Value
A list of class "malps_bootstrap" containing:
-
replicate.fitted.values: ann \times Bmatrix of successful replicate fitted values; -
replicate.weights: an optionaln \times Bmatrix of bootstrap weights whenkeep.weights = TRUE; -
failures: a data frame with columnsattempt,failure, andmessage; -
summary: pointwise fitted values, bootstrap summaries, and empirical lower/upper intervals; bootstrap metadata such as
B.completed,n.failures,conf.level, andweight.type.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit <- fit.malps(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 8L)
bootstrap.malps(fit, B = 5L, seed = 1L)
Compare two synthetic datasets scientifically
Description
Compare two synthetic datasets scientifically
Usage
compare.synthetic.dataset(x, y, tolerance = c(1e-12, 1e-10))
Arguments
x, y |
Synthetic datasets. |
tolerance |
Absolute-plus-relative comparison tolerance. |
Value
A list with equality and mismatch details.
Examples
spec <- synthetic.registry.spec("G1")
x <- materialize.synthetic(spec, n = 20L, seed = 1L)
y <- materialize.synthetic(spec, n = 20L, seed = 1L)
compare.synthetic.dataset(x, y)
Exact latent-segment lengths under a synthetic geometry
Description
For quadforms this integrates the induced metric along each straight latent segment. Flat quadforms reduce exactly to Euclidean distance.
Usage
edge.lengths.synthetic.geometry(geometry, from, to, tolerance = 1e-10)
Arguments
geometry |
A |
from, to |
Matching endpoint matrices with one segment per row. |
tolerance |
Positive integration tolerance. |
Value
A numeric vector of segment lengths.
Examples
geometry <- synthetic.quadform(1L, 1L)
edge.lengths.synthetic.geometry(geometry, matrix(0), matrix(2))
Embed latent coordinates through a synthetic geometry
Description
This deterministic operator performs no random draws. A realized
frame.matrix is required for random-frame geometries.
Usage
embed.synthetic.geometry(geometry, latent, frame.matrix = NULL)
Arguments
geometry |
A synthetic geometry component. |
latent |
Latent coordinates in rows. |
frame.matrix |
Optional realized orthonormal frame. |
Value
A numeric matrix of observed coordinates.
Examples
geometry <- synthetic.circle()
embed.synthetic.geometry(geometry, matrix(c(0, pi / 2), ncol = 1))
Fit a Chart-Kernel Smoother
Description
Fits a local chart-kernel field by evaluating a Nadaraya–Watson style
smoother at each evaluation point. The function is a general fitted-field
model, not an occupation-density wrapper: density workflows should call
normalize.density on the returned fit.
Usage
fit.chart.kernel(
X,
y,
X.eval = NULL,
support.size = min(15L, nrow(X)),
kernel = c("gaussian", "tricube", "epanechnikov", "triangular"),
bandwidth.multiplier = 1,
support.grid = NULL,
kernel.grid = NULL,
bandwidth.multiplier.grid = NULL,
foldid = NULL,
cv.folds = 5L,
cv.seed = 1L,
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
chart.dim.grid = NULL,
selection.strategy = c("grid", "sparse_kd", "plateau_kd"),
chart.dim.max = NULL,
geometry.margin = 0L,
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
quadrature.weights = NULL,
denominator.floor = sqrt(.Machine$double.eps),
return.details = TRUE
)
Arguments
X |
Numeric matrix with one row per source/support point. |
y |
Numeric response or mass vector of length |
X.eval |
Optional numeric matrix of evaluation points. Defaults to
|
support.size |
Number of source points in each local support. |
kernel |
Kernel name. Supported values are |
bandwidth.multiplier |
Positive multiplier applied to the local support radius. |
support.grid |
Optional integer candidate neighborhood sizes. If
supplied, or if |
kernel.grid |
Optional kernel candidates for cross-validation. |
bandwidth.multiplier.grid |
Optional bandwidth-multiplier candidates for cross-validation. |
foldid |
Optional positive integer vector assigning source rows to cross-validation folds. |
cv.folds |
Number of folds used when |
cv.seed |
Random seed used to generate folds when |
coordinate.method |
Local coordinate method. |
chart.dim |
Local PCA dimension when |
chart.dim.grid |
Optional candidate chart dimensions for experimental
row-wise cross-validation. Numeric grids can be evaluated with
|
selection.strategy |
Candidate-selection strategy. |
chart.dim.max |
Optional explicit maximum chart dimension for the sparse coupled candidate family. |
geometry.margin |
Nonnegative integer subtracted from the local-PCA
rank cap |
auto.chart.support.metric |
Support system used by |
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to use when both coordinate and operator summaries are requested. |
quadrature.weights |
Optional positive reference-measure weights
|
denominator.floor |
Positive floor used when the local denominator is numerically zero. |
return.details |
Logical; if |
Details
For an evaluation point x_u, the method chooses a local support
U_u, builds either centered ambient coordinates or a local PCA chart, and
computes
\widehat f(x_u)
=
\frac{\sum_{i\in U_u} y_i K_h(z_{ui})}
{\sum_{i\in U_u} q_i K_h(z_{ui})}.
Here z_{ui} is the local chart coordinate of x_i-x_u,
q_i is an optional quadrature weight, and K_h is the selected
kernel.
Value
A list with class "chart_kernel" containing
fitted.values, source/evaluation supports, selected controls, and
denominator diagnostics.
Examples
X <- matrix(seq(0, 1, length.out = 21), ncol = 1)
y <- exp(-20 * (X[, 1] - 0.5)^2)
fit.chart.kernel(X, y, support.size = 7L, kernel = "gaussian")
Fit a Density Estimator
Description
Dispatches to a dedicated density estimator. Subject-occupation density estimation is one application: construct a sparse mass vector over a fixed support set and call this generic density layer.
Usage
fit.density(
X,
weights = NULL,
method = c("empirical", "graph_random_walk"),
graph = NULL,
graph.control = list(),
density.control = list(),
return.details = TRUE,
...
)
Arguments
X |
Numeric matrix with one row per support point. |
weights |
Optional nonnegative mass/count vector of length
|
method |
Density method identifier. |
graph |
Optional precomputed graph object. |
graph.control |
List of graph-method controls. |
density.control |
List controlling clipping, normalization, and
accounting checks. Recognized entries are |
return.details |
Logical; if |
... |
Additional method-specific arguments. |
Value
A list of class "density_fit" with fields
method.id, status, rho, empirical.rho,
fitted.raw, theta, accounting,
smoothness, timing, diagnostics, and
warnings.
Examples
X <- matrix(seq(0, 1, length.out = 6), ncol = 1)
fit.density(X, weights = c(1, 0, 2, 0, 0, 1), method = "empirical")
Fit Graph Trend Filtering
Description
Fits graph trend filtering on a supplied undirected graph. Supported
phase-2 orders are 0L, 1L, and 2L:
\widehat\beta_\lambda =
\arg\min_{\beta\in\mathbb R^n}
\left\{
\frac{1}{2}\|y-\beta\|_2^2
+ \lambda\|\Delta_w^{(k+1)}\beta\|_1
\right\}.
Usage
fit.graph.trend.filtering(
adj.list,
weight.list = NULL,
y,
order = 0L,
lambda.grid = NULL,
lambda.selection = c("cv", "fixed"),
weight.rule = c("conductance", "sqrt.conductance", "unit"),
operator.family = c("graph.laplacian.recursive", "path.divided.difference"),
path.family = c("branch.continuation", "all.simple"),
path.weighting = c("unit", "anchor.mean"),
n.lambda = 40L,
nfolds = 5L,
foldid = NULL,
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
verbose = FALSE
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. The graph must be undirected: every edge must appear in both endpoint adjacency lists. |
weight.list |
Optional list of positive edge weights parallel to
|
y |
Numeric response vector of length |
order |
Integer trend-filtering order. Supported values are
|
lambda.grid |
Optional non-negative lambda grid. For
|
lambda.selection |
|
weight.rule |
Character scalar. |
operator.family |
Character scalar selecting the penalty operator family.
The default |
path.family |
Character scalar used for
|
path.weighting |
Character scalar used for
|
n.lambda |
Number of default lambda candidates when
|
nfolds |
Number of CV folds. |
foldid |
Optional integer fold assignments of length |
maxsteps |
Maximum number of path steps passed to genlasso. |
minlam |
Minimum lambda passed to genlasso. |
approx |
Logical; passed to genlasso. |
rtol, btol, eps |
Numerical controls passed to genlasso. |
verbose |
Logical. If |
Details
Graph trend filtering is intended as an \ell_1-adaptive comparator to
the \ell_2 graph smoothers now housed in geosmooth and the
legacy rdgraph comparator. The low-pass smoother penalizes
broad quadratic graph roughness through a term like
\eta f^\top L f,
which shrinks high-frequency variation everywhere. Graph trend filtering
instead penalizes absolute graph differences. For order = 0L, this is
\lambda \sum_e \omega_e |\beta_j-\beta_i|,
so many edge differences can become exactly zero while selected edges carry
jumps. In this sense order = 0L is locally adaptive: fitted values can
be piecewise constant over graph regions. Higher orders use
\Delta_w^{(1)} = D_w,\qquad
\Delta_w^{(2)} = L_w,\qquad
\Delta_w^{(3)} = D_w L_w,
with L_w = D_w^\top D_w.
The supplied weight.list, when used, is interpreted as a graph
trend-filtering edge weight or conductance for
operator.family = "graph.laplacian.recursive". For
operator.family = "path.divided.difference", weight.list is
interpreted as metric edge length and is used to form local path coordinates.
Use weight.rule = "sqrt.conductance" when the recursive graph
square-root convention is desired, and weight.rule = "unit" for an
unweighted recursive graph fused-lasso penalty.
The solver backend is currently genlasso. Cross-validation refits the
generalized-lasso problem on vertex-held-out training sets using a selection
matrix X; this is useful for small and moderate diagnostic problems but
is not yet a scalable production graph-trend-filtering solver.
Value
A list of class "graph.trend.filtering.fit" containing fitted
values, residuals, selected lambda, the operator, path metadata, and CV
diagnostics when requested.
References
Wang, Y.-X., Sharpnack, J., Smola, A., and Tibshirani, R. J. (2016). Trend filtering on graphs. Journal of Machine Learning Research, 17(105), 1–41. https://www.jmlr.org/papers/v17/15-147.html
Examples
if (requireNamespace("genlasso", quietly = TRUE)) {
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
fit.graph.trend.filtering(
adj, y = c(0, 0.2, 1.8, 2), lambda.grid = 0.3,
lambda.selection = "fixed", weight.rule = "unit"
)
}
Fit a Local-Likelihood Density or Bernoulli Smoother
Description
Fits a local likelihood model at each evaluation point and reads off one raw
fitted value at that evaluation anchor. Density and Bernoulli workflows
should convert the returned fitted field with normalize.density
when the target is a subject-occupation density.
Usage
fit.local.likelihood(
X,
y,
X.eval = NULL,
likelihood.family = c("density", "bernoulli"),
support.size = min(15L, nrow(X)),
degree = 1L,
kernel = c("gaussian", "tricube", "epanechnikov", "triangular"),
bandwidth.multiplier = 1,
support.grid = NULL,
degree.grid = NULL,
kernel.grid = NULL,
bandwidth.multiplier.grid = NULL,
lambda.ridge.grid = NULL,
foldid = NULL,
cv.folds = 5L,
cv.seed = 1L,
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
chart.dim.grid = NULL,
selection.strategy = c("grid", "sparse_kd", "plateau_kd"),
chart.dim.max = NULL,
design.margin = 2L,
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
quadrature.weights = NULL,
lambda.ridge = 1e-08,
min.local.mass = sqrt(.Machine$double.eps),
min.nonzero.mass = 1L,
fallback = c("degree0", "zero", "chart_kernel", "na"),
optimizer = c("newton", "optim"),
max.iter = 50L,
tol = 1e-08,
return.details = TRUE
)
Arguments
X |
Numeric matrix with one row per source/support point. |
y |
Numeric response vector. For |
X.eval |
Optional numeric matrix of evaluation points. Defaults to
|
likelihood.family |
Local likelihood family. |
support.size |
Number of source points in each local support. |
degree |
Local chart feature degree. Supported values are 0, 1, and 2. The density branch omits an intercept because the intercept is not identifiable in the normalized local density likelihood. The Bernoulli branch includes an intercept in its internal logistic feature map. |
kernel |
Kernel name. Supported values are |
bandwidth.multiplier |
Positive multiplier applied to the local support radius. |
support.grid |
Optional integer candidate neighborhood sizes for
cross-validation. CV selection is currently implemented for
|
degree.grid |
Optional local polynomial degree candidates for Bernoulli cross-validation. |
kernel.grid |
Optional kernel candidates for Bernoulli cross-validation. |
bandwidth.multiplier.grid |
Optional bandwidth-multiplier candidates for Bernoulli cross-validation. |
lambda.ridge.grid |
Optional ridge-penalty candidates for Bernoulli cross-validation. |
foldid |
Optional positive integer vector assigning source rows to cross-validation folds. |
cv.folds |
Number of folds used when |
cv.seed |
Random seed used to generate folds when |
coordinate.method |
Local coordinate method. |
chart.dim |
Local PCA dimension when |
chart.dim.grid |
Optional candidate chart dimensions for experimental
cross-validation. Numeric grids can be evaluated with
|
selection.strategy |
Candidate-selection strategy. |
chart.dim.max |
Optional explicit maximum chart dimension for the sparse coupled candidate family. |
design.margin |
Nonnegative integer feasibility margin used to screen local polynomial design size before candidate evaluation. |
auto.chart.support.metric |
Support system used by |
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to use when both coordinate and operator summaries are requested. |
quadrature.weights |
Optional positive reference-measure weights. Defaults to unit weights. |
lambda.ridge |
Nonnegative ridge penalty on identifiable coefficients. |
min.local.mass |
Minimum local kernel-weighted mass needed before attempting a higher-degree density fit. For Bernoulli fits this is used only as diagnostic telemetry. |
min.nonzero.mass |
Minimum number of locally weighted positive-mass source points needed before attempting a higher-degree local fit. |
fallback |
Fallback policy for underidentified or failed higher-degree
local fits. Zero local mass always uses |
optimizer |
Optimizer for nonzero-degree density fits. |
max.iter |
Maximum optimizer iterations. |
tol |
Convergence tolerance for gradient norm and step norm. |
return.details |
Logical; if |
Details
The likelihood.family = "density" branch uses a local exponential
tilt of the chart reference measure. The "bernoulli" branch uses a
weighted local logistic likelihood and returns fitted probabilities at the
evaluation anchors.
Value
A list with class "local_likelihood" containing
fitted.values, selected controls, and local solver diagnostics.
Examples
X <- matrix(seq(0, 1, length.out = 21), ncol = 1)
y <- exp(-20 * (X[, 1] - 0.5)^2)
y <- y / sum(y)
fit.local.likelihood(X, y, likelihood.family = "density",
support.size = 7L, degree = 0L)
Fit A Local Polynomial Lifting Trend Filter
Description
Fits the Phase-2 LPL-TF estimator with a fixed operator:
\hat f = \arg\min_f \frac12\|y-f\|_2^2 +
\lambda\|A_{\mathrm{LPL}}f\|_1.
Usage
fit.lpl.tf(
X = NULL,
y,
operator = NULL,
adj.list = NULL,
weight.list = NULL,
graph = NULL,
degree = 2L,
lambda.grid = NULL,
lambda = NULL,
lambda.selection = c("cv", "fixed"),
operator.grid = NULL,
foldid = NULL,
cv.folds = 5L,
cv.loss = c("mse", "rmse", "mae"),
cv.seed = NULL,
cv.repeats = 1L,
solver = c("genlasso"),
selection = c("min", "one.se"),
n.lambda = 80L,
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
verbose = FALSE,
...
)
Arguments
X |
Optional coordinate matrix used to build |
y |
Numeric response vector. |
operator |
Optional |
adj.list, weight.list, graph |
Optional graph inputs passed to
|
degree |
Polynomial degree passed to |
lambda.grid |
Optional nonnegative lambda grid. |
lambda |
Optional fixed lambda shortcut. If supplied, it is used as the
single fixed lambda and |
lambda.selection |
|
operator.grid |
Optional Phase-3 operator candidate grid. Supply a data
frame with one row per candidate or a list of named lists. Candidate fields
may include operator-construction arguments such as |
foldid |
Optional deterministic fold assignments for CV. |
cv.folds |
Number of generated folds when |
cv.loss |
Cross-validation loss, |
cv.seed |
Reserved for reproducible generated folds. Phase 2 generated
folds are deterministic even when this is |
cv.repeats |
Phase 2 supports only one CV repeat. |
solver |
Phase 2 supports only |
selection |
Lambda selection rule, |
n.lambda |
Number of generated lambdas when a genlasso path is used and
|
maxsteps, minlam, approx, rtol, btol, eps |
Genlasso controls. |
verbose |
Logical. |
... |
Additional arguments passed to |
Value
A list of class "lpl_tf".
Examples
if (requireNamespace("genlasso", quietly = TRUE)) {
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
fit.lpl.tf(X, sin(2 * pi * X[, 1]), degree = 1L,
support.type = "knn", support.size = 7L,
lambda = 0.1, lambda.selection = "fixed")
}
Fit a Local Polynomial Smoother
Description
Fits a local polynomial smoother (LPS) and selects its support size, polynomial degree, and kernel by cross-validation. By default, the smoother works in the observed ambient coordinates: each prediction point uses its nearest training points in Euclidean distance, centers the support at the prediction point, fits a weighted local polynomial, and uses the fitted intercept as the prediction.
Usage
fit.lps(
X,
y,
foldid = NULL,
support.grid = c(10L, 15L, 20L),
degree.grid = 0:2,
kernel.grid = c("gaussian", "tricube"),
cv.folds = 5L,
cv.seed = 1L,
X.eval = NULL,
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
chart.dim.grid = NULL,
local.chart.method = c("pca", "second.order.svd"),
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
backend = c("auto", "R", "cpp", "cpp.local.pca"),
design.basis = c("orthogonal.polynomial.drop", "monomial", "weighted.qr",
"weighted.qr.drop"),
design.drop.tol = 1e-08,
ridge.multiplier.grid = c(0, 1e-10, 1e-08),
ridge.condition.max = 1e+12,
unstable.action = c("na", "mean"),
outcome.family = c("gaussian", "bernoulli", "binomial"),
bandwidth.multiplier.grid = 1,
keep.cv.predictions = FALSE,
ridge.shrinkage.target = c("zero", "local.mean"),
selection.strategy = c("grid", "sparse_kd", "plateau_kd"),
chart.activation = c("none", "subject.od"),
chart.activation.response = NULL,
chart.activation.control = list(),
chart.dim.max = NULL,
design.margin = 2L
)
Arguments
X |
Numeric design/coordinate matrix with one observation per row. |
y |
Numeric response vector with length |
foldid |
Optional positive integer vector assigning rows to CV folds. |
support.grid |
Integer candidate neighborhood sizes. |
degree.grid |
Integer polynomial degrees. Currently degrees 0, 1, and 2 are supported. |
kernel.grid |
Candidate kernels. Supported kernels are
|
cv.folds |
Number of folds used when |
cv.seed |
Random seed used to generate folds when |
X.eval |
Optional matrix of prediction locations. Defaults to |
coordinate.method |
Local coordinate system. |
chart.dim |
Chart dimension for |
chart.dim.grid |
Optional candidate chart dimensions for experimental
coupled support-size by chart-dimension selection. When supplied,
|
local.chart.method |
Local chart constructor used when
|
auto.chart.support.metric |
Support system used when
|
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to select when both diagnostics are requested. |
backend |
Computation backend. |
design.basis |
Local polynomial design backend. |
design.drop.tol |
Relative QR tolerance used by
|
ridge.multiplier.grid |
Nonnegative scale-relative ridge multipliers
tried by the R local-solve backend. The smallest multiplier whose
penalized local normal equations pass |
ridge.condition.max |
Maximum allowed condition number for the
penalized local normal equations. Use |
unstable.action |
Action when no local solve passes the rank and
condition guards. |
outcome.family |
Response family. |
bandwidth.multiplier.grid |
Nonnegative bandwidth multipliers added to
the CV candidate grid. For a candidate with multiplier |
keep.cv.predictions |
Logical; if |
ridge.shrinkage.target |
Shrinkage target of the local ridge
penalty in the least-squares solve (E2.13). The default |
selection.strategy |
Candidate-selection strategy. |
chart.activation |
Optional sparse-response chart activation rule.
|
chart.activation.response |
Optional nonnegative response used only by
|
chart.activation.control |
List controlling sparse chart activation.
Supported fields are |
chart.dim.max |
Optional explicit maximum chart dimension for the experimental coupled selector. |
design.margin |
Nonnegative prefit margin used to mark coupled
|
Details
The optional coordinate.method = "local.pca" mode keeps the same
support and kernel weighting rule, but builds the local polynomial in a local
PCA chart centered at each prediction point. With chart.dim = "auto",
the chart dimension is estimated as one global scalar from observed
X only, using the same shared local-PCA dimension helper used by
LPL-TF and S-LPL-TF. The experimental
chart.dim = "local.auto" mode estimates an input-only local chart
dimension separately for each prediction anchor.
Value
A list of class "lps" with response-scale
fitted.values, unmodified local least-squares
fitted.values.raw, selected parameters, a candidate CV table, the
requested local.chart.method, and the effective chart method used
for reporting. In outcome.family = "bernoulli" or
"binomial" mode, fitted.values are response-scale
probabilities in [0,1],
fitted.values.raw are the un-clipped conditional-expectation
estimates for "bernoulli" and the fitted probabilities for
"binomial", cv.table$cv.brier.observed is the observed CV
Brier score of the response-scale (clipped) predictions with
Inf for candidates having any non-finite prediction, and
probability.diagnostics records raw/clipped probability ranges,
out-of-range fractions, and Brier/log-loss diagnostics. The Brier and
log-loss diagnostics are defined only when the fitted predictions have the
same length as the training response, which is the default
X.eval = X path. In "binomial" mode,
logistic.diagnostics records local logistic solve attempts,
convergence statuses, fallback-path counts, event-rate fallback counts,
and NA failure counts separately for CV and final fitting.
References
Fan, J. and Gijbels, I. (1996). Local Polynomial Modelling and Its Applications. Chapman and Hall/CRC. ISBN 9780412983214.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
y <- sin(2 * pi * X[, 1])
fit <- fit.lps(
X, y, support.grid = 8L, degree.grid = 1L,
kernel.grid = "tricube", cv.folds = 2L, backend = "R"
)
head(fit$fitted.values)
Fit Model-Averaged Local Polynomial Smoothing
Description
Fits the current model-averaged local polynomial smoother (MALPS) on a supplied coordinate matrix. MALPS fits local polynomial regressions around observed anchor points and averages all positive-weight local predictions at each training point. The current implementation supports supplied coordinates, observed or supplied coordinate anchors, fixed support parameters, deterministic cross-validation and exact dense GCV over support parameters, local PCA chart coordinates, ordinary and weighted new-response refits, coordinate-space new-point prediction, linear-smoother diagnostics, and fixed-selection bootstrap uncertainty summaries. Graph-geodesic supports are available for training and refit; graph-geodesic new-point prediction is deferred.
Usage
fit.malps(
X,
y,
graph = NULL,
adj.list = NULL,
weight.list = NULL,
graph.stage = "final",
anchor.index = NULL,
anchor.coordinates = NULL,
degree = 2L,
degree.grid = NULL,
support.type = c("adaptive.radius", "knn", "fixed.radius"),
support.size = NULL,
support.grid = NULL,
radius = NULL,
radius.grid = NULL,
min.support = NULL,
min.support.grid = NULL,
support.buffer = 3L,
kernel = c("epanechnikov", "triangular", "gaussian", "tricube"),
kernel.grid = NULL,
model.weight.rule = c("none", "condition", "support", "boundary", "quality"),
duplicate.action = c("keep", "error"),
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
support.metric = c("auto", "coordinates", "graph.geodesic"),
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
support.selection = c("fixed", "cv", "gcv"),
foldid = NULL,
cv.folds = 5L,
cv.loss = c("rmse", "mae", "mse"),
cv.repeats = 1L,
cv.seed = NULL,
cv.one.se = FALSE,
gcv.exact.max.n = 1000L,
local.solver = c("auto", "normal.equations", "qr", "svd"),
normal.equations.max.condition = 1e+08,
robust.iterations = 0L,
robust.tuning.constant = 6,
verbose = FALSE,
...
)
Arguments
X |
Numeric coordinate matrix with one row per observation. |
y |
Numeric response vector with length |
graph |
Optional supported dgraphs graph object, for example from
|
adj.list |
Optional 1-based undirected adjacency list. Must be supplied
together with |
weight.list |
Optional positive edge-length list parallel to
|
graph.stage |
Graph lifecycle stage used when |
anchor.index |
Optional integer vector of observed rows used as local
model anchors. Defaults to all rows when |
anchor.coordinates |
Optional numeric coordinate matrix of off-sample
local model anchors with the same number of columns as |
degree |
Local polynomial degree, one of |
degree.grid |
Optional degree grid used when
|
support.type |
Support construction rule. |
support.size |
Number of nearest observations for
|
support.grid |
Optional kNN support-size grid used when
|
radius |
Radius for |
radius.grid |
Optional radius grid used when
|
min.support |
Minimum positive-weight support size. If |
min.support.grid |
Optional minimum-support grid used when
|
support.buffer |
Nonnegative integer added to the local design size when
deriving the default |
kernel |
Kernel used for local fitting and model averaging. |
kernel.grid |
Optional kernel grid used when
|
model.weight.rule |
Optional per-anchor model-quality multiplier applied
to the ordinary kernel averaging weights. |
duplicate.action |
How duplicate coordinate rows should be handled.
|
coordinate.method |
Coordinate system used for each local polynomial
design. |
chart.dim |
Local chart dimension for |
support.metric |
Distance system used for support construction.
|
auto.chart.support.metric |
Support system used when
|
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to
use for the fitted MALPS model when both diagnostics are available. The
default |
support.selection |
|
foldid |
Optional integer fold assignments. If supplied,
|
cv.folds |
Number of folds generated when |
cv.loss |
Cross-validation loss. |
cv.repeats |
Number of independent fold assignments generated when
|
cv.seed |
Optional seed for generated folds. |
cv.one.se |
Logical; use a one-standard-error rule for support selection. |
gcv.exact.max.n |
Maximum number of observations allowed for exact dense
GCV support selection. Larger datasets should use |
local.solver |
Local weighted least-squares solver.
|
normal.equations.max.condition |
Maximum local design condition number
for normal equations under |
robust.iterations |
Number of Cleveland-style robust residual
reweighting iterations applied inside each local polynomial fit. The
default |
robust.tuning.constant |
Positive bisquare tuning constant. The
default |
verbose |
Logical; reserved for future progress messages. |
... |
Reserved for future extensions. Supplying unused arguments is an error. |
Details
Current development benchmarks suggest using the plain MALPS defaults for
production-style fits unless a specific diagnostic motivates a non-default
option: support.selection = "cv", robust.iterations = 0L,
model.weight.rule = "none", and observed anchors
(anchor.coordinates = NULL). Exact GCV selection
(support.selection = "gcv") is a useful faster option for
fixed-weight, non-robust MALPS fits, especially exploratory continuous
smoothing runs, but it is not yet the universal default. Binary responses
are treated as numeric conditional-expectation targets; fitted values are not
clipped inside the smoother. Grid anchors, empirical-Bayes shrinkage, robust
local residual reweighting, and conservative/smoothed GCV selection remain
experimental controls rather than default recommendations.
Graph construction is supplied by dgraphs or by explicit
adj.list/weight.list payloads. Coordinate MALPS paths and
graph-geodesic payload validation are package-local; shortest-path distances
are computed through dgraphs.
Value
A list of class "malps" with fitted values, local model
coefficients, supports, averaging weights, diagnostics, and selection
metadata.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit <- fit.malps(X, sin(2 * pi * X[, 1]), degree = 1L,
support.type = "knn", support.size = 8L)
head(fit$fitted.values)
Fit Metric-Conductance Graph Low-Pass Regression
Description
Fits graph-spectral low-pass regression on a supplied graph by transforming metric edge lengths into conductances and smoothing the response in the eigenbasis of the weighted graph Laplacian.
Usage
fit.metric.graph.lowpass(
adj.list,
weight.list,
y,
conductance.rule = c("inverse.length.power", "exp.length", "exp.length.squared",
"self.tuned.gaussian"),
conductance.epsilon = 1e-08,
conductance.alpha = 1,
conductance.sigma = NULL,
conductance.sigma.rule = c("edge.quantile", "median", "local.k"),
conductance.sigma.quantile = 0.75,
conductance.local.k = 5L,
laplacian.type = c("unnormalized", "symmetric.normalized"),
n.eigenpairs = 50L,
filter.type = c("heat_kernel", "tikhonov", "cubic_spline", "gaussian", "exponential",
"butterworth"),
eta.grid = NULL,
n.candidates = 40L,
eigen.solver = c("auto", "sparse", "dense"),
dense.eigen.threshold = 200L,
dense.fallback.threshold = 5000L,
dense.fallback = c("auto", "never", "always"),
verbose = FALSE,
eta.search = c("fixed", "guarded.gcv"),
eta.expansion.factor = 3,
eta.max.expansions = 3L,
eta.identity.departure = 0.01,
eta.truncation.tol = 1e-04
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. |
weight.list |
List of positive metric edge lengths parallel to
|
y |
Numeric response vector of length |
conductance.rule |
Character scalar. One of
|
conductance.epsilon |
Positive numeric regularizer used by inverse-power conductances and as a local-scale floor. |
conductance.alpha |
Positive numeric exponent for
|
conductance.sigma |
Optional positive global scale for exponential rules.
If |
conductance.sigma.rule |
Rule for selecting a global scale when needed. |
conductance.sigma.quantile |
Quantile used when
|
conductance.local.k |
Positive integer local incident-edge order
statistic for |
laplacian.type |
Laplacian operator. |
n.eigenpairs |
Positive integer number of eigenpairs to compute. |
filter.type |
Spectral low-pass filter family. |
eta.grid |
Optional numeric eta grid. Values must be positive except
for |
n.candidates |
Number of eta candidates when |
eigen.solver |
|
dense.eigen.threshold |
Exact dense threshold for auto mode. Default
|
dense.fallback.threshold |
Maximum graph size for emergency dense fallback when sparse decomposition fails and fallback is allowed. |
dense.fallback |
|
verbose |
Logical. Reserved for future diagnostic messages. |
eta.search |
Heat-time search controller. |
eta.expansion.factor |
Geometric divisor used by guarded GCV lower-time expansion. |
eta.max.expansions |
Maximum number of guarded GCV lower-time extensions. |
eta.identity.departure |
Smallest allowed departure from the identity at the largest retained graph-Laplacian eigenvalue. |
eta.truncation.tol |
Omitted-mode attenuation tolerance used to certify guarded proposals for a truncated basis. |
Value
A list of class "metric.graph.lowpass.fit".
References
Gajer, P. and Ravel, J. (2025). Adaptive geometric regression for high-dimensional structured data. arXiv:2511.03817. doi:10.48550/arXiv.2511.03817
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
fit.metric.graph.lowpass(
adj, lengths, y = c(0, 0.2, 1.8, 2), n.eigenpairs = 4L,
eta.grid = c(0.1, 1), eigen.solver = "dense"
)
Fit Prediction-Synchronized Local Polynomial Smoothing
Description
Experimental R reference implementation of prediction-synchronized local polynomial smoothing (PS-LPS). For fixed local polynomial parameters, PS-LPS fits one local polynomial chart per anchor and adds a quadratic penalty that synchronizes chart predictions on overlap points.
Usage
fit.ps.lps(
X,
y,
foldid = NULL,
support.size = NULL,
degree = 2L,
kernel = "gaussian",
chart.dim = NULL,
support.grid = NULL,
degree.grid = NULL,
kernel.grid = NULL,
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
chart.dim.grid = NULL,
selection.strategy = c("grid", "sparse_kd", "plateau_kd"),
chart.dim.max = NULL,
design.margin = 2L,
lambda.sync.grid = c(0, 0.001, 0.01, 0.1, 1, 10),
lambda.sync.search = c("grid", "guarded"),
lambda.sync.selection = c("cv", "fixed"),
local.candidate.search = c("screened", "full", "subgrid"),
local.candidate.search.control = list(),
lambda.sync.search.control = list(),
lambda.diagnostics = c("all", "selected"),
lambda.ridge = 1e-08,
design.basis = c("monomial", "weighted.qr", "weighted.qr.drop",
"orthogonal.polynomial.drop"),
design.drop.tol = sqrt(.Machine$double.eps),
ridge.multiplier.grid = NULL,
ridge.condition.max = Inf,
sync.neighbor.size = NULL,
overlap.weight = c("normalized.product", "product"),
chart.activation = c("none", "subject.od"),
chart.activation.response = NULL,
chart.activation.control = list(),
ps.lps.geometry.cache = NULL,
ps.lps.local.pca.supports = NULL,
cv.folds = 5L,
cv.seed = 1L
)
Arguments
X |
Numeric covariate matrix. |
y |
Numeric response vector. |
foldid |
Optional integer cross-validation fold assignment. |
support.size |
Optional single neighborhood size for the fixed local
setup path. Use |
degree |
Single local polynomial degree for the fixed local setup path.
Use |
kernel |
Single kernel name for the fixed local setup path. Use
|
chart.dim |
Chart dimension for the local PCA charts. A scalar fixes
one dimension for all anchors; an integer vector supplies one local chart
dimension per anchor. The special value |
support.grid |
Candidate neighborhood sizes. When supplied, PS-LPS
selects over support size, degree, kernel, and synchronization strength by
materialized-fold CV. If both |
degree.grid |
Candidate local polynomial degrees for grid selection.
Defaults to the scalar |
kernel.grid |
Candidate kernels for grid selection. Defaults to the
scalar |
auto.chart.support.metric |
Support system used when
|
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to select when both diagnostics are requested. |
chart.dim.grid |
Optional candidate chart dimensions for experimental
local-candidate selection. Numeric grids can be evaluated with
|
selection.strategy |
Candidate-selection strategy. |
chart.dim.max |
Optional explicit maximum chart dimension for the sparse coupled candidate family. |
design.margin |
Nonnegative integer feasibility margin used to screen local polynomial design size before candidate evaluation. |
lambda.sync.grid |
Candidate synchronization strengths. |
lambda.sync.search |
Lambda-search policy. |
lambda.sync.selection |
Lambda-selection mode. |
local.candidate.search |
Local-candidate search policy when
|
local.candidate.search.control |
Optional list controlling screened
local-candidate search. Supported fields are |
lambda.sync.search.control |
Optional list controlling guarded search.
Supported fields are |
lambda.diagnostics |
Lambda-diagnostic evaluation policy.
|
lambda.ridge |
Nonnegative scale-relative ridge used in the chart
coefficient solve. Use |
design.basis |
Local polynomial design backend. See
|
design.drop.tol |
Relative QR tolerance used by
|
ridge.multiplier.grid |
Optional nonnegative ridge multipliers for
adaptive scale-relative ridge selection. When supplied, the solver uses the
smallest multiplier whose penalized normal equations pass
|
ridge.condition.max |
Maximum allowed condition number for adaptive
ridge selection. Use |
sync.neighbor.size |
Number of nearby anchor pairs considered for synchronization from each anchor support. |
overlap.weight |
Overlap weighting rule. |
chart.activation |
Optional sparse-response chart activation rule.
|
chart.activation.response |
Optional nonnegative vector used only for
|
chart.activation.control |
List controlling sparse chart activation;
see |
ps.lps.geometry.cache |
Optional precomputed geometry cache used by
occupation-density cross-validation. This is an implementation detail;
ordinary callers should leave it as |
ps.lps.local.pca.supports |
Optional precomputed local-PCA supports used
when activation-specific frames must be rebuilt. This is an implementation
detail; ordinary callers should leave it as |
cv.folds |
Number of folds when |
cv.seed |
Fold seed when |
Value
A list with fitted values, selected lambda, CV table, diagnostics, and fitted chart coefficients.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit.ps.lps(
X, sin(2 * pi * X[, 1]), support.size = 7L, degree = 1L,
chart.dim = 1L, lambda.sync.grid = 0,
lambda.sync.selection = "fixed", cv.folds = 2L
)
Fit A Parallel-Transport Trend Filter From A PTTF Operator
Description
Fits the first experimental PTTF regression models from a transported
difference operator produced by pttf.operator. Phase 3 focuses
on one response vector and explicit operator-row policies, especially the
1-D boundary policy used to separate interior transported rows from endpoint
rows.
Usage
fit.pttf.trend.filtering(
geometry = NULL,
operator = NULL,
X = NULL,
y,
derivative.order = 3L,
penalty = c("l1", "l2"),
lambda.grid = NULL,
lambda.selection = c("cv", "fixed"),
n.lambda = 80L,
nfolds = 5L,
foldid = NULL,
cv.loss = c("mse", "mae"),
selection = c("min", "one.se"),
lambda.extension = c("none", "auto"),
solver = c("genlasso", "admm", "auto"),
operator.row.policy = c("all", "drop.line.boundary", "diagnostic.only"),
line.order = NULL,
boundary.trim = NULL,
row.mass.rule = c("none", "node.mass"),
row.normalize = c("none", "l2"),
weights = NULL,
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
admm.rho = 1,
admm.maxiter = 2000L,
admm.abstol = 1e-04,
admm.reltol = 0.001,
verbose = FALSE,
...
)
Arguments
geometry |
Optional |
operator |
Optional |
X |
Optional data matrix used to build |
y |
Numeric response vector. |
derivative.order |
Integer derivative order passed to
|
penalty |
|
lambda.grid |
Optional lambda grid. Required for
|
lambda.selection |
|
n.lambda |
Number of lambdas in a generated grid. |
nfolds |
Number of folds used only when |
foldid |
Optional integer fold assignments. Validation lanes should pass
a materialized |
cv.loss |
Cross-validation loss, |
selection |
Lambda selection rule, |
lambda.extension |
Currently recorded as metadata. Phase 3 implements no new extension heuristic. |
solver |
L1 solver backend. |
operator.row.policy |
Which operator rows to use for fitting. |
line.order |
Vertex order for 1-D boundary-row policies. |
boundary.trim |
Number of endpoint ranks to drop for
|
row.mass.rule, row.normalize |
Passed to |
weights |
Optional nonnegative observation weights. |
maxsteps, minlam, approx, rtol, btol, eps |
Genlasso controls for L1 fits. |
admm.rho, admm.maxiter, admm.abstol, admm.reltol |
ADMM controls used when
the L1 backend is |
verbose |
Logical. |
... |
Additional arguments passed to |
Value
A list of class "pttf.trend.filtering.fit".
Examples
n <- 10L
X <- matrix(seq(0, 1, length.out = n), ncol = 1)
adj <- lapply(seq_len(n), function(i) intersect(c(i - 1L, i + 1L), 1:n))
lengths <- Map(function(i, j) abs(X[j, 1] - X[i, 1]), seq_len(n), adj)
geometry <- pttf.geometry(
X, adj, lengths, graph = "supplied", tangent.dim = 1L
)
operator <- pttf.operator(geometry, derivative.order = 2L)
fit.pttf.trend.filtering(
operator = operator, y = sin(2 * pi * X[, 1]), penalty = "l2",
lambda.grid = 0.1, lambda.selection = "fixed"
)
Fit A Fixed-Operator Synchronized LPL-TF Model
Description
Fits the fixed-operator S-LPL-TF estimator
\hat f = \arg\min_f \frac12\|y-f\|_2^2 +
\lambda_1\|A_{\mathrm{LPL}}f\|_1 +
\frac{\lambda_2}{2}\|C_{\mathrm{sync}}f\|_2^2.
Usage
fit.slpl.tf(
X = NULL,
y,
operator = NULL,
lambda1 = NULL,
lambda2 = 0,
lambda1.grid = NULL,
lambda2.grid = NULL,
lambda.selection = c("fixed", "cv"),
operator.grid = NULL,
foldid = NULL,
cv.folds = 5L,
cv.loss = c("mse", "rmse", "mae"),
cv.seed = NULL,
cv.repeats = 1L,
solver = c("genlasso"),
selection = c("min", "one.se"),
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
verbose = FALSE,
...
)
Arguments
X |
Optional coordinate matrix used to build
|
y |
Numeric response vector. |
operator |
Optional |
lambda1 |
Fixed LPL-TF |
lambda2 |
Fixed quadratic synchronization penalty, or a shortcut for
|
lambda1.grid |
Optional nonnegative |
lambda2.grid |
Optional nonnegative |
lambda.selection |
|
operator.grid |
Optional Phase-S3 operator candidate grid. Supply a data frame with one row per candidate or a list of named lists. |
foldid |
Optional deterministic fold assignments for CV. |
cv.folds |
Number of generated folds when |
cv.loss |
Cross-validation loss, |
cv.seed |
Optional seed for reproducible generated folds. |
cv.repeats |
Phase S3 supports only one CV repeat. |
solver |
Current implementation supports only |
selection |
Selection rule, |
maxsteps, minlam, approx, rtol, btol, eps |
Genlasso controls. |
verbose |
Logical. |
... |
Additional arguments passed to |
Value
A list of class "slpl_tf".
Examples
if (requireNamespace("genlasso", quietly = TRUE)) {
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
fit.slpl.tf(X, sin(2 * pi * X[, 1]), degree = 1L,
support.type = "knn", support.size = 7L,
lambda1 = 0.1, lambda2 = 0, lambda.selection = "fixed")
}
Fit SSRHE-Style Hessian L1 Regression
Description
Fits an \ell_1-adaptive SSRHE Hessian comparator using the row
operator A from ssrhe.hessian.operator:
\widehat f_\lambda =
\arg\min_f
\left\{
\frac{1}{2}\sum_i w_i(y_i-f_i)^2
+ \lambda \|Af\|_1
\right\}.
Usage
fit.ssrhe.hessian.l1.regression(
X,
y,
k = NULL,
tangent.dim,
lambda.grid = NULL,
lambda.selection = c("cv", "fixed"),
weights = NULL,
n.lambda = 40L,
nfolds = 5L,
fold.id = NULL,
loss = c("mse", "mae"),
selection = c("min", "one.se"),
nn.index = NULL,
neighborhood.type = c("knn", "adaptive.radius", "supplied"),
support.index = NULL,
adaptive.k.scale = NULL,
radius.rule = c("geomean", "max", "min"),
radius.factor = 1.25,
min.support = NULL,
max.support = NULL,
support.buffer = 2L,
support.topup = c("nearest", "none"),
tangent.dim.rule = c("fixed", "eigen.cumulative"),
eigen.tolerance = 0.95,
derivative.order = 2L,
pinv.tol = sqrt(.Machine$double.eps),
local.solver = c("auto", "normal.equations", "svd", "qr"),
normal.equations.max.condition = 10000,
solver = c("genlasso", "admm", "auto"),
row.scaling = c("none", "l2"),
admm.rho = 1,
admm.maxiter = 2000L,
admm.abstol = 1e-04,
admm.reltol = 0.001,
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
support.selection = c("rule", "cv"),
support.grid = NULL,
support.cv.max.candidates = 8L,
return.local.diagnostics = FALSE,
return.timing = FALSE,
verbose = FALSE
)
Arguments
X |
Numeric matrix with one observation per row. Distances for the default neighborhood search are Euclidean distances in these coordinates. |
y |
Numeric response vector of length |
k |
Integer number of nearest neighbors per point, including the point
itself, used when |
tangent.dim |
Integer tangent dimension used for the local PCA chart.
Required when |
lambda.grid |
Optional nonnegative lambda grid. For
|
lambda.selection |
|
weights |
Optional nonnegative observation weights. Missing responses automatically receive zero weight. |
n.lambda |
Number of default lambda candidates when
|
nfolds |
Number of validation folds over observed positive-weight
labels. Ignored when |
fold.id |
Optional integer fold assignments of length |
loss |
Validation loss, currently |
selection |
Selection rule. |
nn.index |
Optional integer matrix of neighbor indices, with
|
neighborhood.type |
Local support rule. |
support.index |
Optional list of integer vectors, one per row of
|
adaptive.k.scale |
Integer local-scale k used by
|
radius.rule, radius.factor |
Adaptive-radius graph parameters passed to
|
min.support |
Optional minimum local support size for adaptive-radius
supports. Defaults to the local quadratic design size plus
|
max.support |
Optional maximum local support size. Oversized adaptive
supports are trimmed to the closest |
support.buffer |
Nonnegative integer added to the local quadratic design
size when choosing the default |
support.topup |
How undersized adaptive-radius supports are enlarged.
|
tangent.dim.rule |
Either |
eigen.tolerance |
Cumulative local PCA variance threshold used when
|
derivative.order |
Integer derivative order of the local SSRHE-style
operator. |
pinv.tol |
Nonnegative tolerance multiplier for local pseudoinverses. |
local.solver |
Local least-squares backend used to map local function
values to derivative coefficients. |
normal.equations.max.condition |
Positive condition-number guard used
by |
solver |
Solver backend. |
row.scaling |
Optional row scaling for the penalty matrix before
solving. |
admm.rho, admm.maxiter, admm.abstol, admm.reltol |
ADMM controls used when
|
maxsteps, minlam, approx, rtol, btol, eps, verbose |
Controls passed to genlasso. |
support.selection |
Support-profile selection rule.
|
support.grid |
Optional data frame of support profiles with columns
|
support.cv.max.candidates |
Maximum number of support profiles to try
when |
return.local.diagnostics |
Logical. If |
return.timing |
Logical. If |
Details
This function exposes the SSRHE local polynomial derivative estimator as an
\ell_1 penalty, rather than as the original SSRHE \ell_2
Hessian-energy penalty used by
fit.ssrhe.hessian.regression. With
derivative.order = 2L, A contains local quadratic/Hessian rows.
With derivative.order = 3L, A contains local cubic
third-derivative tensor rows with the same symmetric component scaling used
by ssrhe.hessian.operator. The existing \ell_2 fit
solves a linear system involving B=A^\top A. This function instead
keeps the rows of A and penalizes their absolute values. It is
therefore closer in spirit to graph trend filtering, while retaining SSRHE's
local-PCA derivative construction.
The default solver backend is genlasso. For larger or numerically
fragile third-order operators, solver = "admm" fits the requested
lambda values directly without computing a generalized-lasso path, and
solver = "auto" falls back to ADMM when the path backend fails or
returns non-finite fitted values. Cross-validation removes held-out labels
from the data-fit term by setting their weights to zero, then scores
predictions on those held-out labels.
With support.selection = "cv", each adaptive-radius support candidate
builds a fresh SSRHE operator and runs the usual lambda CV with shared fold
assignments. The selected fit is the candidate with the smallest selected CV
error. This is useful when the default support-size rule is too rigid, but it
can be much slower than tuning lambda for one fixed operator.
Value
A list of class "ssrhe.hessian.l1.fit" containing fitted
values, residuals, selected lambda, the SSRHE operator, generalized-lasso
path metadata, lambda-grid fitted values, and CV diagnostics when
requested.
References
Kim, K. I., Steinke, F., and Hein, M. (2009). Semi-supervised regression using Hessian energy with an application to semi-supervised dimensionality reduction. Advances in Neural Information Processing Systems 22. https://papers.nips.cc/paper_files/paper/2009/hash/f4552671f8909587cf485ea990207f3b-Abstract.html
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit.ssrhe.hessian.l1.regression(
X, sin(2 * pi * X[, 1]), k = 6L, tangent.dim = 1L,
lambda.grid = 0.05, lambda.selection = "fixed", solver = "admm"
)
Fit SSRHE-Style Hessian-Energy Regression
Description
Fits the \ell_2 Hessian-energy regularized estimator associated with
ssrhe.hessian.operator. This is a direct SSRHE-style
comparator for Hessian smoothing on point clouds; it is not a replacement
for graph trend-filtering regression and is distinct from
\ell_1-adaptive graph trend filtering.
Usage
fit.ssrhe.hessian.regression(
X,
y,
k = NULL,
tangent.dim,
lambda1,
lambda2 = 0,
weights = NULL,
nn.index = NULL,
neighborhood.type = c("knn", "adaptive.radius", "supplied"),
support.index = NULL,
adaptive.k.scale = NULL,
radius.rule = c("geomean", "max", "min"),
radius.factor = 1.25,
min.support = NULL,
max.support = NULL,
support.buffer = 2L,
support.topup = c("nearest", "none"),
tangent.dim.rule = c("fixed", "eigen.cumulative"),
eigen.tolerance = 0.95,
derivative.order = 2L,
stabilizer = lambda2 > 0,
pinv.tol = sqrt(.Machine$double.eps),
local.solver = c("auto", "normal.equations", "svd", "qr"),
normal.equations.max.condition = 10000,
ridge = 0,
return.A = TRUE,
return.local.diagnostics = FALSE,
return.timing = FALSE,
verbose = FALSE
)
Arguments
X |
Numeric matrix with one observation per row. Distances for the default neighborhood search are Euclidean distances in these coordinates. |
y |
Numeric response vector of length |
k |
Integer number of nearest neighbors per point, including the point
itself, used when |
tangent.dim |
Integer tangent dimension used for the local PCA chart.
Required when |
lambda1 |
Nonnegative Hessian-energy penalty multiplier for
|
lambda2 |
Nonnegative supplemental-stabilizer multiplier for
|
weights |
Optional nonnegative observation weights. May be |
nn.index |
Optional integer matrix of neighbor indices, with
|
neighborhood.type |
Local support rule. |
support.index |
Optional list of integer vectors, one per row of
|
adaptive.k.scale |
Integer local-scale k used by
|
radius.rule, radius.factor |
Adaptive-radius graph parameters passed to
|
min.support |
Optional minimum local support size for adaptive-radius
supports. Defaults to the local quadratic design size plus
|
max.support |
Optional maximum local support size. Oversized adaptive
supports are trimmed to the closest |
support.buffer |
Nonnegative integer added to the local quadratic design
size when choosing the default |
support.topup |
How undersized adaptive-radius supports are enlarged.
|
tangent.dim.rule |
Either |
eigen.tolerance |
Cumulative local PCA variance threshold used when
|
derivative.order |
Integer derivative order of the local SSRHE-style
operator. |
stabilizer |
Logical. If |
pinv.tol |
Nonnegative tolerance multiplier for local pseudoinverses. |
local.solver |
Local least-squares backend used to map local function
values to derivative coefficients. |
normal.equations.max.condition |
Positive condition-number guard used
by |
ridge |
Nonnegative diagonal ridge added to the linear system for numerical stabilization. |
return.A |
Logical. If |
return.local.diagnostics |
Logical. If |
return.timing |
Logical. If |
verbose |
Logical. If |
Details
For each response column, this function solves
(W + \lambda_1 B + \lambda_2 B_S + \epsilon I)\hat f = Wy,
where W is the diagonal matrix of observation weights and
\epsilon is ridge. Fully observed data with
lambda1 = lambda2 = ridge = 0 therefore reproduce the observed
response exactly. Missing responses are excluded from the data-fit term by
setting their weights to zero. The Matlab SSRHE semi-supervised convention is
represented by a 0/1 labeled-indicator weights vector, or
equivalently by setting unlabeled responses to NA: labeled vertices
contribute unit diagonal data-fit terms and unlabeled vertices contribute no
data-fit term.
The lower-level operator is matched to the Kim–Steinke–Hein SSRHE Matlab
construction: self-including kNN neighborhoods, local PCA charts, a
fixed-intercept local quadratic fit, doubled diagonal Hessian components,
and optional supplemental stabilizer. The package exposes both A and
B=A^\top A; the fitted \ell_2 estimator uses B.
Value
A list of class "ssrhe.hessian.fit" containing fitted values,
residuals, input response, weights, lambda parameters, objective/energy
diagnostics, the reused operator, solver metadata, and the call.
References
Kim, K. I., Steinke, F., and Hein, M. (2009). Semi-supervised regression using Hessian energy with an application to semi-supervised dimensionality reduction. Advances in Neural Information Processing Systems 22. https://papers.nips.cc/paper_files/paper/2009/hash/f4552671f8909587cf485ea990207f3b-Abstract.html
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit.ssrhe.hessian.regression(
X, sin(2 * pi * X[, 1]), k = 6L, tangent.dim = 1L, lambda1 = 0.1
)
Select SSRHE Hessian Regression Penalties by Label Cross-Validation
Description
Fits fit.ssrhe.hessian.regression over a grid of fixed
lambda1/lambda2 values using cross-validation on observed
labels. This is intended for semi-supervised SSRHE use: validation folds are
formed only from entries that are observed and have positive data-fit weight.
Usage
fit.ssrhe.hessian.regression.cv(
X,
y,
k = NULL,
tangent.dim,
lambda1.grid,
lambda2.grid = 0,
weights = NULL,
nfolds = 5L,
fold.id = NULL,
loss = c("mse", "mae"),
selection = c("min", "one.se"),
nn.index = NULL,
neighborhood.type = c("knn", "adaptive.radius", "supplied"),
support.index = NULL,
adaptive.k.scale = NULL,
radius.rule = c("geomean", "max", "min"),
radius.factor = 1.25,
min.support = NULL,
max.support = NULL,
support.buffer = 2L,
support.topup = c("nearest", "none"),
tangent.dim.rule = c("fixed", "eigen.cumulative"),
eigen.tolerance = 0.95,
derivative.order = 2L,
stabilizer = any(lambda2.grid > 0),
pinv.tol = sqrt(.Machine$double.eps),
local.solver = c("auto", "normal.equations", "svd", "qr"),
normal.equations.max.condition = 10000,
ridge = 0,
return.A = TRUE,
return.local.diagnostics = FALSE,
return.timing = FALSE,
support.selection = c("rule", "cv"),
support.grid = NULL,
support.cv.max.candidates = 8L,
verbose = FALSE
)
Arguments
X |
Numeric matrix with one observation per row. Distances for the default neighborhood search are Euclidean distances in these coordinates. |
y |
Numeric response vector of length |
k |
Integer number of nearest neighbors per point, including the point
itself, used when |
tangent.dim |
Integer tangent dimension used for the local PCA chart.
Required when |
lambda1.grid |
Nonnegative numeric vector of Hessian-energy penalty candidates. |
lambda2.grid |
Nonnegative numeric vector of supplemental-stabilizer
penalty candidates. Use |
weights |
Optional nonnegative observation weights. May be |
nfolds |
Number of validation folds over observed positive-weight
labels. Ignored when |
fold.id |
Optional integer vector of length |
loss |
Validation loss, currently |
selection |
Selection rule. |
nn.index |
Optional integer matrix of neighbor indices, with
|
neighborhood.type |
Local support rule. |
support.index |
Optional list of integer vectors, one per row of
|
adaptive.k.scale |
Integer local-scale k used by
|
radius.rule, radius.factor |
Adaptive-radius graph parameters passed to
|
min.support |
Optional minimum local support size for adaptive-radius
supports. Defaults to the local quadratic design size plus
|
max.support |
Optional maximum local support size. Oversized adaptive
supports are trimmed to the closest |
support.buffer |
Nonnegative integer added to the local quadratic design
size when choosing the default |
support.topup |
How undersized adaptive-radius supports are enlarged.
|
tangent.dim.rule |
Either |
eigen.tolerance |
Cumulative local PCA variance threshold used when
|
derivative.order |
Integer derivative order of the local SSRHE-style
operator. |
stabilizer |
Logical. If |
pinv.tol |
Nonnegative tolerance multiplier for local pseudoinverses. |
local.solver |
Local least-squares backend used to map local function
values to derivative coefficients. |
normal.equations.max.condition |
Positive condition-number guard used
by |
ridge |
Nonnegative diagonal ridge added to the linear system for numerical stabilization. |
return.A |
Logical. If |
return.local.diagnostics |
Logical. If |
return.timing |
Logical. If |
support.selection |
Support-profile selection rule.
|
support.grid |
Optional data frame of support profiles with columns
|
support.cv.max.candidates |
Maximum number of support profiles to try
when |
verbose |
Logical. If |
Details
For each validation fold, the held-out labels are removed from the data-fit term by setting their weights to zero. The fitted values are then scored only on those held-out labels. The final returned fit is refit with the selected penalties using all observed positive-weight labels.
With support.selection = "cv", this function performs an outer
support-profile selection loop. For each candidate adaptive-radius support
profile, it constructs a fresh SSRHE operator, runs the usual
lambda1.grid/lambda2.grid cross-validation with the same fold
assignments, and selects the support profile with the smallest selected CV
error. This can substantially increase runtime because local operator
construction and lambda CV are nested.
The current implementation supports a single response vector. Matrix-response penalty selection should be performed column-by-column.
Value
A list of class "ssrhe.hessian.cv.fit" and
"ssrhe.hessian.fit" containing the final fit plus
cv.table, fold.id, and selection diagnostics.
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit.ssrhe.hessian.regression.cv(
X, sin(2 * pi * X[, 1]), k = 6L, tangent.dim = 1L,
lambda1.grid = c(0.01, 0.1), nfolds = 2L
)
Select SSRHE Hessian Regression Penalties by GCV
Description
Fits fit.ssrhe.hessian.regression over a grid of
lambda1/lambda2 values and selects penalties by generalized
cross-validation (GCV). This is a faster, deterministic alternative to
label-fold CV for fully observed SSRHE \ell_2 smoothing problems.
The smoother trace can be computed exactly, or estimated by a Hutchinson
randomized trace estimator for larger grids.
Usage
fit.ssrhe.hessian.regression.gcv(
X,
y,
k = NULL,
tangent.dim,
lambda1.grid,
lambda2.grid = 0,
weights = NULL,
nn.index = NULL,
neighborhood.type = c("knn", "adaptive.radius", "supplied"),
support.index = NULL,
adaptive.k.scale = NULL,
radius.rule = c("geomean", "max", "min"),
radius.factor = 1.25,
min.support = NULL,
max.support = NULL,
support.buffer = 2L,
support.topup = c("nearest", "none"),
tangent.dim.rule = c("fixed", "eigen.cumulative"),
eigen.tolerance = 0.95,
derivative.order = 2L,
stabilizer = any(lambda2.grid > 0),
pinv.tol = sqrt(.Machine$double.eps),
local.solver = c("auto", "normal.equations", "svd", "qr"),
normal.equations.max.condition = 10000,
ridge = 0,
return.A = TRUE,
return.local.diagnostics = FALSE,
return.timing = FALSE,
support.selection = c("rule", "gcv"),
support.grid = NULL,
support.gcv.max.candidates = 8L,
gcv.trace.method = c("exact", "hutchinson"),
gcv.trace.n.probes = 50L,
gcv.trace.seed = NULL,
verbose = FALSE
)
Arguments
X |
Numeric matrix with one observation per row. Distances for the default neighborhood search are Euclidean distances in these coordinates. |
y |
Numeric response vector of length |
k |
Integer number of nearest neighbors per point, including the point
itself, used when |
tangent.dim |
Integer tangent dimension used for the local PCA chart.
Required when |
lambda1.grid |
Nonnegative numeric vector of Hessian-energy penalty candidates. |
lambda2.grid |
Nonnegative numeric vector of supplemental-stabilizer
penalty candidates. Use |
weights |
Optional nonnegative observation weights. May be |
nn.index |
Optional integer matrix of neighbor indices, with
|
neighborhood.type |
Local support rule. |
support.index |
Optional list of integer vectors, one per row of
|
adaptive.k.scale |
Integer local-scale k used by
|
radius.rule, radius.factor |
Adaptive-radius graph parameters passed to
|
min.support |
Optional minimum local support size for adaptive-radius
supports. Defaults to the local quadratic design size plus
|
max.support |
Optional maximum local support size. Oversized adaptive
supports are trimmed to the closest |
support.buffer |
Nonnegative integer added to the local quadratic design
size when choosing the default |
support.topup |
How undersized adaptive-radius supports are enlarged.
|
tangent.dim.rule |
Either |
eigen.tolerance |
Cumulative local PCA variance threshold used when
|
derivative.order |
Integer derivative order of the local SSRHE-style
operator. |
stabilizer |
Logical. If |
pinv.tol |
Nonnegative tolerance multiplier for local pseudoinverses. |
local.solver |
Local least-squares backend used to map local function
values to derivative coefficients. |
normal.equations.max.condition |
Positive condition-number guard used
by |
ridge |
Nonnegative diagonal ridge added to the linear system for numerical stabilization. |
return.A |
Logical. If |
return.local.diagnostics |
Logical. If |
return.timing |
Logical. If |
support.selection |
Support-profile selection rule.
|
support.grid |
Optional data frame of support profiles with columns
|
support.gcv.max.candidates |
Maximum number of support profiles to try
when |
gcv.trace.method |
Method used to compute the smoother trace in the GCV
score. |
gcv.trace.n.probes |
Number of Hutchinson probe vectors to use when
|
gcv.trace.seed |
Optional integer seed for reproducible Hutchinson trace estimates. |
verbose |
Logical. If |
Details
For a fixed SSRHE operator, the \ell_2 fit is a linear smoother
\hat f_\lambda = S_\lambda y,\qquad
S_\lambda =
(W + \lambda_1 B + \lambda_2 B_S + \epsilon I)^{-1} W,
where W is the diagonal observation-weight matrix and
\epsilon is ridge. By default this function computes the exact
smoother trace \mathrm{tr}(S_\lambda) and scores each grid point by
\mathrm{GCV}(\lambda)
=
\frac{n^{-1}\sum_i w_i(y_i-\hat f_i)^2}
{(1-\mathrm{tr}(S_\lambda)/n)^2}.
With gcv.trace.method = "hutchinson", the trace is estimated by
\mathrm{tr}(S_\lambda)
=
\mathbb E\{z^\top S_\lambda z\},
using independent Rademacher vectors z. Each probe requires one solve
with right-hand side Wz. The estimate is stochastic but can be made
reproducible with gcv.trace.seed; the returned GCV table reports the
trace standard error.
The current implementation requires a single fully observed response vector
and strictly positive observation weights. Semi-supervised or missing-label
SSRHE tuning should continue to use
fit.ssrhe.hessian.regression.cv.
With support.selection = "gcv", this function performs an outer
adaptive-radius support-profile loop. Each support candidate constructs a
fresh SSRHE operator, runs the same exact GCV grid search, and the candidate
with the smallest selected GCV is refit and returned.
Value
A list of class "ssrhe.hessian.gcv.fit" and
"ssrhe.hessian.fit" containing the final fit plus
gcv.table, selection, and optional
support.gcv.table diagnostics.
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit.ssrhe.hessian.regression.gcv(
X, sin(2 * pi * X[, 1]), k = 6L, tangent.dim = 1L,
lambda1.grid = c(0.01, 0.1)
)
Fit Subject-Occupation Density
Description
Convenience wrapper that converts subject visit indices into a density
input. Density-native methods dispatch to fit.density.
LPS/PS-LPS methods fit ordinary smoother objects first and then call
normalize.density; they are subject-occupation workflows, not
standalone density-native methods.
Usage
fit.subject.od(
X,
subject.index,
method = c("empirical", "graph_random_walk", "lps_count", "ps_lps_count",
"lps_logistic_binary", "chart_kernel", "local_likelihood_density",
"local_likelihood_bernoulli"),
graph = NULL,
graph.control = list(),
od.control = list(),
return.details = TRUE,
od.cv = c("none", "visit"),
visit.foldid = NULL,
visit.cv.folds = 5L,
visit.cv.seed = 1L,
visit.cv.epsilon = 1e-15,
...
)
Arguments
X |
Numeric matrix with one row per support point. |
subject.index |
Integer row indices of subject visits in |
method |
Density method identifier. |
graph |
Optional precomputed graph object. |
graph.control |
List of graph-method controls. |
od.control |
OD-facing alias for |
return.details |
Logical; if |
od.cv |
OD-level selection mode. |
visit.foldid |
Optional positive integer vector assigning subject visits
to OD-level cross-validation folds. Its length must equal
|
visit.cv.folds |
Number of visit folds when |
visit.cv.seed |
Random seed for generated visit folds. |
visit.cv.epsilon |
Positive floor used in held-out
|
... |
Additional method-specific arguments. |
Details
The "lps_logistic_binary" method name is historical. In the current
OD workflow it calls fit.lps(..., outcome.family = "bernoulli"), which
fits a clipped probability field with the LPS least-squares core and then
converts that field to a density with normalize.density. It is
not the outcome.family = "binomial" local-logistic IRLS path.
When od.cv = "visit", graph random-walk candidates may pass
OD-level grids inside graph.control: walk.step.grid,
affinity.method.grid, affinity.scale.grid,
affinity.epsilon.grid, and normalize.grid. Missing
affinity.scale values mean the usual data-derived affinity scale.
When od.cv = "visit", chart-based and LPS-family methods may pass
chart.dim.grid through .... For "chart_kernel",
"local_likelihood_density", "local_likelihood_bernoulli",
"lps_count", "lps_logistic_binary", and
"ps_lps_count", this grid compares fixed integer chart dimensions
with optional "auto" and "local.auto" chart-dimension policies
under the same held-out-visit negative-log-occupation score. For LPS-family
OD visit CV, each outer candidate is passed to the source smoother as a
scalar local model configuration; this avoids nested row-level
multi-candidate selection inside each held-out-visit fold.
Value
A list of class "density_fit". Its rho component is
the estimated probability mass over the rows of X, and
empirical.rho is the normalized visit-count mass. The
subject component summarizes the number of visits, the number of
distinct visited support points, the largest visit multiplicity, and the
fraction of repeatedly visited support points. Other components describe
the fitted method, normalization accounting, smoothing diagnostics, and
warnings as documented in fit.density. With
od.cv = "visit" and return.details = TRUE, the result also
contains the visit-level cross-validation table, fold assignments, and
held-out predicted masses.
Examples
X <- matrix(seq(0, 1, length.out = 6), ncol = 1)
fit.subject.od(X, subject.index = c(1L, 3L, 3L, 6L),
method = "empirical")
Get Boundary Vertices of a Region in a Graph
Description
Identifies the boundary vertices of a specified region in a graph, defined as vertices in the region that have at least one neighbor outside the region.
Usage
get.region.boundary(adj.list, region)
Arguments
adj.list |
A list of integer vectors, where each vector contains the indices of vertices adjacent to the corresponding vertex. Indices must be 1-based. |
region |
An integer vector of vertex indices (1-based) defining the region for which to find boundary vertices. |
Details
This function determines which vertices in a specified region are positioned at the boundary - meaning they have at least one neighbor that is not part of the region. These boundary vertices are often treated differently in graph-based algorithms, such as harmonic smoothing, where their values are typically fixed as constraints.
The boundary definition used matches the one implemented in the C++ harmonic smoothing functions, focusing on vertices that have connections to the outside of the region.
Value
An integer vector containing the indices of the boundary vertices,
which is a subset of the input region vector. Returns an empty
integer vector if no boundary vertices exist.
See Also
perform.harmonic.smoothing, harmonic.smoother
Examples
# Create a simple grid graph adjacency list (5x5 grid)
create_grid_adj_list <- function(n_rows, n_cols) {
n <- n_rows * n_cols
adj_list <- vector("list", n)
for (i in 1:n_rows) {
for (j in 1:n_cols) {
v <- (i-1) * n_cols + j
neighbors <- numeric(0)
# Add neighbors (up, down, left, right)
if (i > 1) neighbors <- c(neighbors, (i-2) * n_cols + j) # up
if (i < n_rows) neighbors <- c(neighbors, i * n_cols + j) # down
if (j > 1) neighbors <- c(neighbors, (i-1) * n_cols + (j-1)) # left
if (j < n_cols) neighbors <- c(neighbors, (i-1) * n_cols + (j+1)) # right
adj_list[[v]] <- neighbors
}
}
return(adj_list)
}
# Create a 5x5 grid graph
grid_adj_list <- create_grid_adj_list(5, 5)
# Define a region (central 3x3 subgrid)
central_region <- c(7:9, 12:14, 17:19)
# Find boundary vertices of the central region
boundary <- get.region.boundary(grid_adj_list, central_region)
print(boundary)
# Expected output: c(7, 8, 9, 12, 14, 17, 18, 19)
# (all except the center vertex 13)
Construct a Graph Trend-Filtering Operator
Description
Builds the weighted graph difference operators used by graph trend
filtering. The default operator.family = "graph.laplacian.recursive"
uses the phase-2 recursive graph operators
k=0:\quad \Delta_w^{(1)} = D_w,
k=1:\quad \Delta_w^{(2)} = L_w = D_w^\top D_w,
and
k=2:\quad \Delta_w^{(3)} = D_w L_w.
The experimental operator.family = "path.divided.difference" builds
canonical path rows and computes position-aware finite differences along
graph paths using weight.list as metric edge lengths.
Usage
graph.trend.filtering.operator(
adj.list,
weight.list = NULL,
order = 0L,
weight.rule = c("conductance", "sqrt.conductance", "unit"),
operator.family = c("graph.laplacian.recursive", "path.divided.difference"),
path.family = c("branch.continuation", "all.simple"),
path.weighting = c("unit", "anchor.mean"),
return.sparse = TRUE
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. The graph must be undirected: every edge must appear in both endpoint adjacency lists. |
weight.list |
Optional list of positive edge weights parallel to
|
order |
Integer trend-filtering order. Supported values are
|
weight.rule |
Character scalar. |
operator.family |
Character scalar selecting the penalty operator family.
The default |
path.family |
Character scalar used for
|
path.weighting |
Character scalar used for
|
return.sparse |
Logical. If |
Value
A list of class "graph.trend.filtering.operator" containing
the canonical graph, edge table, trend-filtering weights, incidence,
weighted Laplacian, selected penalty operator, and nullity estimate.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
graph.trend.filtering.operator(adj, order = 1L, weight.rule = "unit")
Perform Harmonic Smoothing with Topology Tracking
Description
Applies harmonic smoothing to function values defined on vertices of a graph while tracking how the topological structure (local extrema and their basins) evolves during the smoothing process. This helps identify the optimal level of smoothing that reduces noise while preserving significant features.
Usage
harmonic.smoother(
adj.list,
weight.list,
values,
region.vertices,
max.iterations = 100,
tolerance = 1e-06,
record.frequency = 1,
stability.window = 3,
stability.threshold = 0.05
)
Arguments
adj.list |
A list of integer vectors, where each vector contains indices of vertices adjacent to the corresponding vertex. Indices must be 1-based. |
weight.list |
A list of numeric vectors containing weights of edges
corresponding to adjacencies in |
values |
A numeric vector of function values defined at each vertex. |
region.vertices |
An integer vector of vertex indices (1-based) defining the region to be smoothed. Boundary vertices will have fixed values. |
max.iterations |
Integer scalar, the maximum number of relaxation iterations to perform. Default is 100. |
tolerance |
Numeric scalar, the convergence threshold for value changes. Default is 1e-6. |
record.frequency |
Integer scalar, how often to record states (every N iterations). Default is 1 (record every iteration). |
stability.window |
Integer scalar, number of consecutive iterations to check for topological stability. Default is 3. |
stability.threshold |
Numeric scalar in |
Details
This function extends standard harmonic smoothing by monitoring the evolution of local extrema during the iterative process. It identifies a "sweet spot" where the topological structure stabilizes, indicating that noise has been removed without over-flattening important features.
The algorithm:
Iteratively performs harmonic smoothing on interior vertices
Periodically identifies local extrema and their basins
Monitors the stability of the topological structure
Identifies when the topological structure stabilizes
The function returns comprehensive information about the smoothing process, including all intermediate states and the detected stability point.
Value
A list of class "harmonic_smoother" containing:
harmonic_predictions |
Numeric vector of smoothed function values |
i_harmonic_predictions |
Matrix of function values at each recorded iteration (columns are iterations) |
i_basins |
List of matrices representing extrema at each iteration |
stable_iteration |
Integer indicating the iteration at which topology stabilized |
topology_differences |
Numeric vector of differences between consecutive recorded iterations |
basin_cx_differences |
Alias of |
converged |
Logical indicator of whether the relaxation converged |
num_region, num_boundary, num_interior |
Vertex counts for the requested region and its boundary/interior split |
See Also
perform.harmonic.smoothing for basic smoothing,
plot.harmonic_smoother for visualization methods,
summary.harmonic_smoother for summary statistics
Examples
adj.list <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
weight.list <- list(1, c(1, 1), c(1, 1), 1)
values <- c(0, 2, -1, 1)
result <- harmonic.smoother(
adj.list, weight.list, values, region.vertices = seq_along(values),
max.iterations = 20, record.frequency = 2
)
smoothed.values <- result$harmonic_predictions
smoothed.values
Construct a Local Polynomial Lifting Trend-Filtering Operator
Description
Builds the Local Polynomial Lifting Trend Filtering (LPL-TF) analysis
operator from local polynomial prediction residuals. For each observed
target point i, the operator predicts
f_i from nearby values f_j using a local polynomial model and
stores the residual row
r_i(f) = f_i - \sum_{j \in S_i} h_{ij} f_j.
Usage
lpl.tf.operator(
X,
adj.list = NULL,
weight.list = NULL,
graph = NULL,
graph.stage = "final",
anchor.index = NULL,
anchor.coordinates = NULL,
degree = 2L,
support.type = c("adaptive.radius", "knn", "fixed.radius"),
support.size = NULL,
radius = NULL,
min.support = NULL,
support.buffer = 3L,
kernel = c("epanechnikov", "triangular", "gaussian", "tricube"),
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
support.metric = c("auto", "coordinates", "graph.geodesic"),
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
exclude.self = TRUE,
row.normalize = c("l2", "none", "l1"),
local.solver = c("auto", "normal.equations", "qr", "svd"),
normal.equations.max.condition = 1e+08,
duplicate.action = c("keep", "error"),
drop.rank.deficient = TRUE,
verbose = FALSE,
...
)
Arguments
X |
Numeric coordinate matrix with one row per observation. |
adj.list, weight.list |
Optional supplied undirected graph adjacency and positive edge-length lists using 1-based vertex indices. |
graph |
Optional graph object returned by
|
graph.stage |
Graph stage to extract from |
anchor.index |
Optional integer vector of observed anchor/target indices. The current implementation supports observed anchors only. |
anchor.coordinates |
Reserved for later off-observation anchors; this
implementation requires |
degree |
Polynomial degree. The current implementation supports
|
support.type |
Coordinate support rule. |
support.size |
Positive integer for |
radius |
Positive coordinate radius for
|
min.support |
Minimum number of positive-weight predictors after self
exclusion. If |
support.buffer |
Nonnegative integer added to the local polynomial design size when choosing default supports. |
kernel |
Kernel used to weight local predictors by distance. |
coordinate.method |
Coordinate chart used for the local polynomial
design. |
chart.dim |
Chart dimension. For |
support.metric |
Support-distance rule. |
auto.chart.support.metric |
Support system used when
|
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to
use for the fitted operator when |
exclude.self |
Logical. LPL-TF residual rows require |
row.normalize |
Complete-row normalization rule applied after setting
target coefficient |
local.solver |
Local linear algebra rule. |
normal.equations.max.condition |
Maximum condition number for
|
duplicate.action |
Duplicate coordinate policy. |
drop.rank.deficient |
Logical. The current implementation requires
|
verbose |
Logical. Reserved for diagnostic messages. |
... |
Reserved. |
Details
The operator uses observed anchors, excludes the target point from every
predictor support, and drops requested-degree rank-deficient rows with
explicit metadata. There is no silent degree downgrade. Graph support
distances affect support selection and kernel bandwidths only; local
polynomial coordinates are controlled separately by coordinate.method.
Graph construction is supplied by dgraphs or by explicit
adj.list/weight.list payloads. Coordinate support paths and
graph-geodesic payload validation are package-local; shortest-path distances
are computed through dgraphs.
If a_i is the complete assembled residual row, then
row.normalize = "l2" uses a_i / \|a_i\|_2, and
row.normalize = "l1" uses a_i / \|a_i\|_1. Normalization is
applied to the whole row, not only to predictor coefficients.
Value
A list of class "lpl_tf_operator" containing the sparse
operator matrix A, row metadata, supports, local design summaries,
diagnostics, settings, and the matched call.
Examples
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
lpl.tf.operator(X, degree = 1L, support.type = "knn",
support.size = 7L, kernel = "gaussian")
Report LPS Backend and Chart-Dimension Diagnostics
Description
Builds a compact one-row diagnostic table for a fitted local polynomial smoother. The table records the requested backend, the backend actually used, the requested chart-dimension rule, the resolved chart dimension, selected tuning parameters, and whether the fit follows the current deployable local-PCA auto-dimension contract.
Usage
lps.backend.diagnostics(object)
Arguments
object |
A fitted |
Details
The current backend policy is conservative: backend = "auto" uses the
C++ backend for ambient-coordinate LPS, but uses the R reference backend for
coordinate.method = "local.pca". The native local-PCA backend
"cpp.local.pca" remains an explicit opt-in backend. This helper
makes that policy visible in reports and downstream experiment manifests
without changing the default.
For real-data local-PCA runs, the deployable chart-dimension contract is
the ordinary local.chart.method = "pca" path with
chart.dim = "auto" or "local.auto" and observed-covariate
auto-dimension diagnostics.
In P7-style experiments this is paired with
auto.chart.support.metric = "both" and
auto.chart.selection.metric = "operator". The experimental
"second.order.svd" chart path is reported explicitly but is not
certified by this deployable local-PCA contract. For LPS itself, which uses
coordinate supports, the operator-support diagnostic is currently equivalent
to the coordinate-support diagnostic; the fields are still recorded so the
same manifest schema can be shared with LPL-TF and S-LPL-TF experiments.
Value
A one-row data.frame with backend, chart-dimension, selection,
candidate-count, and policy fields.
Examples
X <- matrix(seq(0, 1, length.out = 16), ncol = 1)
fit <- fit.lps(X, X[, 1]^2, support.grid = 6L, degree.grid = 1L,
kernel.grid = "gaussian", cv.folds = 2L, backend = "R")
lps.backend.diagnostics(fit)
Build a Cluster-Respecting Fold Assignment
Description
Assigns whole clusters to cross-validation folds so that no cluster is
split across folds: every observation of a cluster receives the same fold
id, and therefore no training set ever shares a cluster with the fold held
out against it. Folds are built by a deterministic size-balanced greedy
rule: clusters are taken largest first (ties by first appearance in
cluster.id) and each is placed into the currently smallest fold
(ties by lowest fold index). With v equal to the number of
clusters this reduces to leave-cluster-out.
Usage
lps.grouped.foldid(cluster.id, v = 5L, shuffle.seed = NULL)
Arguments
cluster.id |
Vector of cluster labels (factor, character, or integer-like), one per observation, no missing values. |
v |
Number of folds; an integer between 2 and the number of distinct clusters. |
shuffle.seed |
Optional integer seed for a randomized cluster order;
|
Details
The assignment is fully deterministic when shuffle.seed is
NULL. Supplying shuffle.seed applies one seeded permutation
to the cluster order before the greedy pass (the seed is consumed
immediately via set.seed), giving a reproducible randomized
variant; callers following the LPS evidence conventions should record the
seed they pass.
Value
An integer fold-id vector of length length(cluster.id) with
values in 1:v; every fold is nonempty and every cluster maps to
exactly one fold.
See Also
lps.nested.cv() for nested cross-validation that can consume
grouped folds at both the outer and inner level.
Examples
cluster <- rep(letters[1:6], each = 2)
lps.grouped.foldid(cluster, v = 3L)
Nested Cross-Validation for LPS with Explicit, Recorded Folds
Description
Runs outer-fold nested cross-validation around fit.lps(): for each outer
fold, candidate selection is one ordinary fit.lps call on the
inner-training rows only, with an explicit inner fold id and
X.eval set to the held-out outer-test rows, so the held-out fold
never participates in inner selection. The pooled outer-test error is the
nested generalization estimate. The same call also computes the
selected-min arm — an ordinary fit.lps on all rows using the
same outer.foldid — so optimism comparisons are paired on
one fold assignment by construction.
Usage
lps.nested.cv(
X,
y,
outer.foldid,
fit.args = list(),
inner.folds = 5L,
cluster.id = NULL,
inner.foldid.method = c("round.robin", "grouped"),
inner.shuffle.seed = NULL
)
Arguments
X |
Numeric matrix of observations (rows) used for training. |
y |
Numeric response vector with |
outer.foldid |
Positive integer vector of length |
fit.args |
Named list of additional arguments passed to every
|
inner.folds |
Number of inner selection folds (integer >= 2). |
cluster.id |
Optional cluster labels (length |
inner.foldid.method |
Inner fold construction: |
inner.shuffle.seed |
Optional integer; per-fold offset seed for the randomized variants described above. Recorded in the return value. |
Details
The existing fit.lps behavior is untouched: this utility consumes
the public API with explicit foldid only. It currently supports
outcome.family = "gaussian" (the default) and scores with RMSE.
Inner folds are built per outer fold and fully recorded in the return
value: "round.robin" assigns rep_len(1:inner.folds, n) over
the inner-training rows in row order (deterministic; if
inner.shuffle.seed is supplied, fold k — by position — uses
set.seed(inner.shuffle.seed + k) and permutes the balanced
assignment, giving a reproducible randomized variant);
"grouped" builds cluster-respecting inner folds with
lps.grouped.foldid() on the inner-training rows of cluster.id
(passing the same per-fold offset seed when inner.shuffle.seed is
supplied).
Value
A list of class "lps_nested_cv":
nested.rmsepooled RMSE of the outer-test predictions over all rows with finite predictions.
n.missing.predictionscount of non-finite outer-test predictions (e.g.
unstable.action = "na"fallbacks).foldsone row per outer fold: fold label, test size, selected
support.size/degree/kernel/bandwidth.multiplier, the inner selected-min CV score, and the fold's outer-test RMSE.predictionslength-
nrow(X)vector of outer-test predictions (each row predicted by the fold that held it out).selected.minthe paired selected-min arm on the same
outer.foldid:selected(thefit.lpsselected row),cv.score(its observed CV RMSE),foldid, andfit(the full-datafit.lpsobject, usable for deployment on an external test set).outer.foldid,test.index,train.index,inner.foldid,inner.foldid.used,inner.cv.tablecomplete fold/index telemetry: the realized inner fold ids as constructed and as recorded by each inner
fit.lps($foldid), per-fold index sets, and each fold's full inner CV candidate table.outer.cluster.wholeTRUE/FALSEwhether every cluster lies wholly inside one outer fold (NAwhencluster.idis absent).inner.folds,inner.foldid.method,inner.shuffle.seed,fit.args,callthe recorded configuration.
See Also
lps.grouped.foldid() for the grouped fold constructor.
Examples
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
y <- sin(2 * pi * X[, 1])
nested <- lps.nested.cv(
X, y, outer.foldid = rep(1:3, length.out = 18), inner.folds = 2L,
fit.args = list(support.grid = 6L, degree.grid = 1L,
kernel.grid = "gaussian", backend = "R")
)
nested$rmse
Pointwise Variance and Confidence Band for a Fixed-Configuration LPS Fit
Description
Computes, from the analytically extracted linear-smoother matrix S of a
fixed-configuration LPS fit (see lps.smoother.matrix()), the pointwise
variance Var(fitted_i) = sigma^2 * sum_j S_ij^2, the effective degrees of
freedom df = tr(S), the plug-in noise estimate
sigma.hat^2 = RSS / (n - tr(S)), and the pointwise confidence band
fitted_i +/- z * sigma * ||S_i.||_2 with
z = qnorm(1 - (1 - level) / 2).
Usage
lps.pointwise.band(object, sigma = NULL, level = 0.95, check.tol = 1e-10)
Arguments
object |
A fitted |
sigma |
Known noise standard deviation (positive scalar), or |
level |
Confidence level of the band, a single number strictly
between 0 and 1. Default |
check.tol |
Passed to |
Details
With sigma supplied (known noise standard deviation), the band uses it
directly (sigma.source = "known"); with sigma = NULL the plug-in
sigma.hat is used (sigma.source = "plug.in"). sigma.hat is reported
in both modes. The variance is purely the linear-smoother sampling
variance: the band makes no bias correction, so where bias dominates
(boundary, high curvature) undercoverage is expected and must be reported,
not masked.
Requires X.eval identical to X (the square training-fit smoother, on
which tr(S) and RSS are defined), in addition to all restrictions of
lps.smoother.matrix(). If any evaluation point's local fit returned NA,
its variance/band entries are NA, and df, rss, and sigma.hat are
NA as well; supplying a known sigma still yields bands at the
unaffected points.
Value
A list of class "lps.pointwise.band" with named fields:
fitted (the fit's raw fitted values), se, variance, lower,
upper, level, z, sigma (the supplied known sigma, or NA in
plug-in mode), sigma.hat, sigma.source ("known" or "plug.in"),
df (tr(S)), rss, n.train, smoother.row.norm (||S_i.||_2),
and configuration (the pinned fit configuration).
See Also
Examples
set.seed(1)
n <- 30
X <- matrix(runif(2 * n, -1, 1), ncol = 2)
y <- sin(pi * X[, 1]) + 0.1 * rnorm(n)
fit <- fit.lps(X, y, foldid = rep(1:2, length.out = n),
support.grid = 12L, degree.grid = 1L,
kernel.grid = "tricube", backend = "R",
design.basis = "orthogonal.polynomial.drop",
ridge.multiplier.grid = 0, ridge.condition.max = Inf,
unstable.action = "na")
band.known <- lps.pointwise.band(fit, sigma = 0.1)
band.plugin <- lps.pointwise.band(fit)
band.known$df
band.plugin$sigma.hat
Extract the Linear-Smoother Matrix of a Fixed-Configuration LPS Fit
Description
For a fixed configuration (singleton support.grid, degree.grid, and
kernel.grid, with an explicit numeric chart dimension) the LPS fitted
vector is linear in the response: fitted = S %*% y with S depending on
X, the kernel weights, and the configuration, but not on y. This
function reconstructs S analytically, one evaluation row at a time, by
rebuilding each local fit's support, kernel weights, local chart, and
design through the same internal routines fit.lps() used, and reading off
the influence row of the local weighted least-squares solve.
Usage
lps.smoother.matrix(object, check.tol = 1e-10)
Arguments
object |
A fitted |
check.tol |
Positive scalar: maximum allowed absolute discrepancy of
the self-guard identity |
Details
The extraction refuses configurations where the linearity premise fails or
is unsupported: it requires outcome.family = "gaussian", the R backend,
design.basis = "orthogonal.polynomial.drop", singleton grids (no
data-driven selection: the CV-selected pipeline is not a linear
smoother), and coordinate.method = "coordinates" or "local.pca" with an
explicit numeric chart.dim (never "auto" or "local.auto").
Self-guard: before returning, the function verifies
max(abs(S %*% y - fitted.values.raw)) <= check.tol against the fit it was
given (and that the NA patterns agree), so any divergence between the
reconstruction and the estimator is a hard error, never a silent drift.
Local fits that fell back are represented honestly: a weighted-mean
fallback (unstable.action = "mean") contributes its exact linear row
w / sum(w); an unstable.action = "na" non-fit contributes an all-NA
row.
Value
A numeric matrix S with nrow(object$X.eval) rows and
nrow(object$X) columns: row i holds the weights through which the
training responses enter the prediction at evaluation point i.
See Also
lps.pointwise.band() for pointwise variances and confidence
bands derived from S.
Examples
set.seed(1)
n <- 30
X <- matrix(runif(2 * n, -1, 1), ncol = 2)
y <- sin(pi * X[, 1]) + 0.1 * rnorm(n)
fit <- fit.lps(X, y, foldid = rep(1:2, length.out = n),
support.grid = 12L, degree.grid = 1L,
kernel.grid = "tricube", backend = "R",
design.basis = "orthogonal.polynomial.drop",
ridge.multiplier.grid = 0, ridge.condition.max = Inf,
unstable.action = "na")
S <- lps.smoother.matrix(fit)
max(abs(S %*% y - fit$fitted.values)) # ~1e-15: the linear identity
sum(diag(S)) # effective degrees of freedom
Compute MALPS Linear-Smoother Diagnostics
Description
Computes effective degrees of freedom, generalized cross-validation (GCV),
and analytic leave-one-out residual diagnostics from a MALPS smoother matrix.
These diagnostics are exact for fixed-support, fixed-weight linear MALPS
fits. For cross-validated fits they are conditional on the selected support
profile. Robust fits are rejected by default for the same reason described
in malps.smoother.matrix.
Usage
malps.gcv(
object,
y = NULL,
smoother.matrix = NULL,
include.loocv = TRUE,
max.n = 1000L,
allow.robust = FALSE,
...
)
Arguments
object |
A |
y |
Optional response vector. Defaults to |
smoother.matrix |
Optional precomputed matrix from
|
include.loocv |
Logical; include analytic leave-one-out residuals and mean squared error. |
max.n |
Maximum dense smoother size passed to
|
allow.robust |
Logical; passed to |
... |
Reserved for future extensions. |
Details
The GCV score is computed as
\mathrm{GCV} =
\frac{n^{-1}\|y - S y\|_2^2}
{(1 - \operatorname{tr}(S)/n)^2}.
The analytic leave-one-out residuals are computed as
e_i^{\mathrm{loo}} =
\frac{y_i - \hat y_i}{1 - S_{ii}}.
Value
A list with residual, fitted-value, EDF, GCV, and optional LOOCV diagnostics.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit <- fit.malps(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 8L)
malps.gcv(fit)$gcv
Construct The Conditional MALPS Smoother Matrix
Description
Constructs the exact training-point smoother matrix for a fitted
fit.malps object, conditional on the stored supports, local
charts, fitting weights, and averaging weights. For a non-robust MALPS fit
or weighted refit with fixed supports, the returned matrix S satisfies
\hat y = S y. If the original fit used cross-validation, this matrix
is conditional on the selected support profile; it does not account for the
response-dependence of the model-selection step.
Usage
malps.smoother.matrix(object, max.n = 1000L, allow.robust = FALSE, ...)
Arguments
object |
A |
max.n |
Maximum number of training observations for which a dense
smoother matrix may be constructed. Use |
allow.robust |
Logical; allow fixed-final-weight linearization for fits
with |
... |
Reserved for future extensions. |
Details
Robust residual reweighting makes the effective fitting weights depend on
the response. By default this function therefore rejects robust MALPS fits.
Setting allow.robust = TRUE constructs the fixed-final-weight
linearization, which reproduces the stored fit but should not be interpreted
as the exact response-to-fit map.
Value
A dense numeric n \times n matrix with attributes describing
whether the matrix is conditional on support selection and whether it used
a robust fixed-weight linearization.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit <- fit.malps(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 8L)
S <- malps.smoother.matrix(fit)
max(abs(S %*% fit$y - fit$fitted.values))
Materialize a synthetic-data specification
Description
Materialize a synthetic-data specification
Usage
materialize.synthetic(
spec,
n = NULL,
seed,
rng.policy = c("named.stream.v1", "legacy"),
validate = TRUE
)
Arguments
spec |
A |
n |
Sample size, or |
seed |
Scalar whole-number seed. |
rng.policy |
Versioned RNG policy. |
validate |
Whether to validate the returned dataset. |
Value
A synthetic_dataset.
Examples
spec <- synthetic.registry.spec("G1")
materialize.synthetic(spec, n = 20L, seed = 1L)
Materialize a frozen synthetic instance
Description
Materialize a frozen synthetic instance
Usage
materialize.synthetic.instance(instance.id, validate = TRUE)
Arguments
instance.id |
Frozen instance ID. |
validate |
Whether to validate and checksum the result. |
Value
A synthetic_dataset whose dataset.id is instance.id.
Examples
materialize.synthetic.instance("geosmooth.g1.default.v1")
Construct a Graph Heat-Time Grid
Description
Creates a positive heat-time grid from a
"metric.graph.lowpass.basis" object.
Usage
metric.graph.heat.eta.grid(
basis,
rule = c("spectral_guarded", "w1_inverse_spectrum"),
n.initial = 40L,
include.zero = FALSE,
truncation.tol = 1e-04,
equilibrium.tol = 1e-04
)
Arguments
basis |
A |
rule |
Grid rule. |
n.initial |
Number of positive grid values. |
include.zero |
Logical. Include the exact no-smoothing endpoint. |
truncation.tol |
Positive tolerance smaller than one for the conservative omitted-mode attenuation bound. |
equilibrium.tol |
Positive tolerance smaller than one for the slowest positive retained mode at the upper endpoint. |
Value
A numeric vector with grid-construction metadata stored as attributes.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
basis <- metric.graph.lowpass.basis(adj, lengths, n.eigenpairs = 4L,
eigen.solver = "dense")
metric.graph.heat.eta.grid(basis, n.initial = 6L)
Propose a Guarded Lower Graph Heat Time
Description
Proposes one lower positive heat time after an external search controller has classified the current lower endpoint. The helper enforces a geometric expansion step, an identity-departure floor, a maximum number of expansion rounds, and the truncated-basis resolution certificate. It does not decide whether an endpoint is competitive; fold-level or cohort-level search logic remains the caller's responsibility.
Usage
metric.graph.heat.extend.lower(
basis,
eta.grid,
endpoint.status = c("active", "inactive", "unresolved"),
expansion.factor = 3,
max.expansions = 3L,
expansions.completed = 0L,
identity.departure = 0.01,
truncation.tol = 1e-04,
unresolved.action = c("error", "mark")
)
Arguments
basis |
A |
eta.grid |
Current finite positive heat-time grid. The exact identity
time |
endpoint.status |
External lower-endpoint classification:
|
expansion.factor |
Finite numeric factor greater than one. An active
proposal is |
max.expansions |
Nonnegative integer maximum number of lower-extension rounds. |
expansions.completed |
Nonnegative integer number of extension rounds already admitted under the same search contract. |
identity.departure |
Positive number smaller than one. The proposed
time cannot be smaller than
|
truncation.tol |
Positive tolerance smaller than one for the conservative omitted-mode attenuation bound. |
unresolved.action |
Action when an active proposal is not certified by
a truncated basis: |
Value
A list of class "metric.graph.heat.lower.extension" with the
augmented or unchanged grid and proposal telemetry. A proposal is added
only when admitted is TRUE.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
basis <- metric.graph.lowpass.basis(adj, lengths, n.eigenpairs = 4L,
eigen.solver = "dense")
eta <- metric.graph.heat.eta.grid(basis, n.initial = 6L)
metric.graph.heat.extend.lower(basis, eta, endpoint.status = "active")
Construct a Reusable Metric Graph Low-Pass Spectral Basis
Description
Builds a metric-conductance graph Laplacian and computes the low-frequency eigensystem used by graph low-pass filters. The resulting object is response-independent and can be reused for many responses and filter parameters.
Usage
metric.graph.lowpass.basis(
adj.list,
weight.list,
conductance.rule = c("inverse.length.power", "exp.length", "exp.length.squared",
"self.tuned.gaussian"),
conductance.epsilon = 1e-08,
conductance.alpha = 1,
conductance.sigma = NULL,
conductance.sigma.rule = c("edge.quantile", "median", "local.k"),
conductance.sigma.quantile = 0.75,
conductance.local.k = 5L,
laplacian.type = c("unnormalized", "symmetric.normalized"),
n.eigenpairs = 50L,
eigen.solver = c("auto", "sparse", "dense"),
dense.eigen.threshold = 200L,
dense.fallback.threshold = 5000L,
dense.fallback = c("auto", "never", "always"),
verbose = FALSE
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. |
weight.list |
List of positive metric edge lengths parallel to
|
conductance.rule |
Character scalar. One of
|
conductance.epsilon |
Positive numeric regularizer used by inverse-power conductances and as a local-scale floor. |
conductance.alpha |
Positive numeric exponent for
|
conductance.sigma |
Optional positive global scale for exponential rules.
If |
conductance.sigma.rule |
Rule for selecting a global scale when needed. |
conductance.sigma.quantile |
Quantile used when
|
conductance.local.k |
Positive integer local incident-edge order
statistic for |
laplacian.type |
Laplacian operator. |
n.eigenpairs |
Positive integer number of eigenpairs to compute. |
eigen.solver |
|
dense.eigen.threshold |
Exact dense threshold for auto mode. |
dense.fallback.threshold |
Maximum graph size for emergency dense fallback when sparse decomposition fails and fallback is allowed. |
dense.fallback |
|
verbose |
Logical. Reserved for future diagnostic messages. |
Details
The basis is complete only when it contains one eigenvector per graph vertex. A truncated basis represents only the retained low-frequency subspace. The largest retained eigenvalue supplies a conservative proxy for bounding the contribution of omitted modes because all omitted eigenvalues are at least as large.
Value
A list of class "metric.graph.lowpass.basis" containing the
graph operator, eigenvalues, eigenvectors, solver metadata, and spectral
completeness diagnostics.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
metric.graph.lowpass.basis(adj, lengths, n.eigenpairs = 4L,
eigen.solver = "dense")
Construct a Metric-Conductance Graph Low-Pass Operator
Description
Builds a weighted graph Laplacian by transforming metric edge lengths into conductances. This operator is a direct metric-conductance comparator to the legacy rdgraph regression smoother, not a replacement for the Riemannian-complex/overlap-density smoother.
Usage
metric.graph.lowpass.operator(
adj.list,
weight.list,
conductance.rule = c("inverse.length.power", "exp.length", "exp.length.squared",
"self.tuned.gaussian"),
conductance.epsilon = 1e-08,
conductance.alpha = 1,
conductance.sigma = NULL,
conductance.sigma.rule = c("edge.quantile", "median", "local.k"),
conductance.sigma.quantile = 0.75,
conductance.local.k = 5L,
laplacian.type = c("unnormalized", "symmetric.normalized"),
return.sparse = TRUE,
verbose = FALSE
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. |
weight.list |
List of positive metric edge lengths parallel to
|
conductance.rule |
Character scalar. One of
|
conductance.epsilon |
Positive numeric regularizer used by inverse-power conductances and as a local-scale floor. |
conductance.alpha |
Positive numeric exponent for
|
conductance.sigma |
Optional positive global scale for exponential rules.
If |
conductance.sigma.rule |
Rule for selecting a global scale when needed. |
conductance.sigma.quantile |
Quantile used when
|
conductance.local.k |
Positive integer local incident-edge order
statistic for |
laplacian.type |
Laplacian operator. |
return.sparse |
Logical. If |
verbose |
Logical. Reserved for future diagnostic messages. |
Details
The legacy rdgraph regression precomputed-graph path uses
supplied weight.list values as edge lengths for neighborhood ordering.
The spectral conductance in that smoother is overlap-density based:
c_e^\rho = 1 / \max(\rho_1(e), 10^{-10}),
where \rho_1(e) is computed by the Riemannian-complex density machinery.
This function instead constructs conductances directly from metric lengths:
c_{ij} = \phi(\ell_{ij}).
Supported phase-1 transforms are
c_{ij}=(\ell_{ij}+\epsilon)^{-\alpha},
c_{ij}=\exp(-\ell_{ij}/\sigma),
c_{ij}=\exp(-\ell_{ij}^{2}/\sigma^{2}),
and
c_{ij}=\exp(-\ell_{ij}^{2}/(\sigma_i\sigma_j)).
For laplacian.type = "symmetric.normalized", smoothing is performed
in the Euclidean eigenbasis of L_{\mathrm{sym}}. The null vector is
proportional to \sqrt{d}, not the constant vector, so this mode does
not preserve constant responses in the same way as the unnormalized
Laplacian.
Value
A list of class "metric.graph.lowpass.operator" containing
the edge table, conductances, degree vector, Laplacian triplets, summaries,
and optionally a sparse Laplacian matrix.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
metric.graph.lowpass.operator(adj, lengths)
Normalize Fitted Values Into a Density
Description
Converts a numeric field or fitted smoother/regression object into a
probability mass vector over the evaluation support. This is the explicit
adapter between ordinary smoothers such as fit.lps,
fit.ps.lps, and fit.metric.graph.lowpass and
density or occupation-density workflows.
Usage
normalize.density(x, ...)
## S3 method for class 'numeric'
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = "normalized_numeric",
keep.source.fit = FALSE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
## Default S3 method:
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = NULL,
keep.source.fit = TRUE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
## S3 method for class 'lps'
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = NULL,
keep.source.fit = TRUE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
## S3 method for class 'ps_lps'
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = NULL,
keep.source.fit = TRUE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
## S3 method for class 'metric.graph.lowpass.fit'
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = NULL,
keep.source.fit = TRUE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
## S3 method for class 'metric.graph.lowpass.refit'
normalize.density(
x,
X = NULL,
density.control = list(),
method.id = NULL,
keep.source.fit = TRUE,
adj.list = NULL,
empirical.rho = NULL,
return.details = TRUE,
...
)
Arguments
x |
Numeric vector or fitted object with a |
... |
Additional arguments passed to methods. |
X |
Optional support/evaluation matrix. If omitted, methods use the
fitted object's stored |
density.control |
List controlling clipping, normalization, and
accounting checks. See |
method.id |
Character method identifier recorded in the returned object. |
keep.source.fit |
Logical; if |
adj.list |
Optional adjacency list used to compute graph-local smoothness diagnostics for the normalized density. |
empirical.rho |
Optional empirical probability mass vector used for accounting diagnostics. |
return.details |
Logical; if |
Value
A list of class "density_fit".
Examples
normalize.density(c(0.5, -0.1, 0.6, 0), X = matrix(1:4, ncol = 1))
Perform Harmonic Smoothing on Graph Function Values
Description
Applies harmonic smoothing to function values defined on vertices of a graph, preserving values at the boundary of a specified region while smoothly interpolating interior values. This function implements a discrete Laplace equation solution using weighted averaging.
Usage
perform.harmonic.smoothing(
adj.list,
weight.list,
values,
region.vertices,
max.iterations = 100,
tolerance = 1e-06
)
Arguments
adj.list |
A list of integer vectors, where each vector contains indices of vertices adjacent to the corresponding vertex. Indices must be 1-based. |
weight.list |
A list of numeric vectors containing weights of edges
corresponding to adjacencies in |
values |
A numeric vector of function values defined at each vertex. |
region.vertices |
An integer vector of vertex indices (1-based) defining the region to be smoothed. Boundary vertices will have fixed values. |
max.iterations |
Integer scalar, the maximum number of relaxation iterations to perform. Default is 100. |
tolerance |
Numeric scalar, the convergence threshold for value changes. Default is 1e-6. |
Details
Harmonic smoothing preserves the overall shape of a function defined on a graph while removing local fluctuations. It works by iteratively updating interior vertex values as weighted averages of their neighbors until convergence, while keeping boundary values fixed.
The algorithm:
Identifies boundary vertices (vertices with neighbors outside the region or degree 1 vertices)
Iteratively updates interior vertex values using edge-weighted averaging
Continues until convergence or maximum iterations reached
Edge weights are incorporated by using their inverse as weighting factors, respecting the geometric structure of the graph.
Value
A list containing:
-
harmonic_predictions: the numeric vector of smoothed values; -
converged: whether both the maximum update and discrete harmonic residual fell belowtolerance; -
num_region,num_boundary, andnum_interior: vertex counts for the requested region and its boundary/interior split; -
num_iterations: the number of relaxation iterations run; -
max_changeandmax_residual: per-iteration convergence diagnostics.
See Also
harmonic.smoother for smoothing with topology tracking,
get.region.boundary for boundary vertex identification
Examples
adj.list <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
weight.list <- list(1, c(1, 1), c(1, 1), 1)
values <- c(0, 2, -1, 1)
result <- perform.harmonic.smoothing(
adj.list, weight.list, values, region.vertices = 1:3
)
result$harmonic_predictions
Plot Method for Harmonic Smoother Results
Description
Creates various plots to visualize the results of harmonic smoothing with topology tracking.
Usage
## S3 method for class 'harmonic_smoother'
plot(x, y = NULL, ..., type = c("topology", "extrema", "values"))
Arguments
x |
An object of class |
y |
Ignored (included for S3 method consistency). |
... |
Additional graphical parameters passed to |
type |
Character string specifying the type of plot. Options are:
|
Value
Invisibly returns the input object.
See Also
Examples
adj.list <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
weight.list <- list(1, c(1, 1), c(1, 1), 1)
values <- c(0, 2, -1, 1)
result <- harmonic.smoother(
adj.list, weight.list, values, region.vertices = seq_along(values),
max.iterations = 20, record.frequency = 2
)
plot(result, type = "values")
Plot a canonical synthetic dataset
Description
One-dimensional datasets show response and truth against the first latent coordinate. Higher-dimensional datasets show the first two predictor coordinates, colored by response or region.
Usage
## S3 method for class 'synthetic_dataset'
plot(x, color = c("response", "truth", "region"), ...)
Arguments
x |
A |
color |
Color mapping: response, truth, or region. |
... |
Additional arguments passed to |
Value
x, invisibly.
Predict From A Local Polynomial Lifting Trend Filter
Description
Predict From A Local Polynomial Lifting Trend Filter
Usage
## S3 method for class 'lpl_tf'
predict(
object,
newdata = NULL,
type = c("response"),
allow.incomplete = FALSE,
...
)
Arguments
object |
A |
newdata |
Must be |
type |
Prediction type. Phase 2 supports only |
allow.incomplete |
Reserved. |
... |
Reserved. |
Value
Fitted values at the training points.
Predict from an LPS Fit
Description
Predict from an LPS Fit
Usage
## S3 method for class 'lps'
predict(object, newdata = NULL, type = c("response", "raw"), ...)
Arguments
object |
A fitted |
newdata |
Optional prediction matrix. Defaults to the fitted object's
stored |
type |
Prediction scale. |
... |
Unused. |
Value
A numeric vector of predictions.
Predict From A MALPS Fit
Description
Predict From A MALPS Fit
Usage
## S3 method for class 'malps'
predict(
object,
newdata = NULL,
type = c("response"),
allow.incomplete = FALSE,
...
)
Arguments
object |
A |
newdata |
Optional numeric coordinate matrix with the same number of
columns as |
type |
Prediction type. Currently only |
allow.incomplete |
Logical; if |
... |
Reserved for future extensions. |
Value
Numeric vector of fitted values.
Predict From A Fixed-Operator Synchronized LPL-TF Model
Description
Predict From A Fixed-Operator Synchronized LPL-TF Model
Usage
## S3 method for class 'slpl_tf'
predict(object, newdata = NULL, type = c("response"), ...)
Arguments
object |
A |
newdata |
Must be |
type |
Prediction type. Phase S2 supports only |
... |
Reserved. |
Value
Fitted values at the training points.
Print Method for Harmonic Smoother Results
Description
Prints a concise summary of harmonic smoother results.
Usage
## S3 method for class 'harmonic_smoother'
print(x, ...)
Arguments
x |
An object of class |
... |
Further arguments passed to or from other methods. |
Value
Invisibly returns the input object.
See Also
harmonic.smoother, summary.harmonic_smoother
Print Method for Summary of Harmonic Smoother Results
Description
Prints the summary of harmonic smoother results in a formatted manner.
Usage
## S3 method for class 'summary.harmonic_smoother'
print(x, ...)
Arguments
x |
An object of class |
... |
Further arguments passed to or from other methods. |
Value
Invisibly returns the input object.
See Also
Print a canonical synthetic dataset
Description
Print a canonical synthetic dataset
Usage
## S3 method for class 'synthetic_dataset'
print(x, ...)
Arguments
x |
A |
... |
Ignored. |
Value
x, invisibly.
Construct PTTF Local Geometry
Description
Builds the geometry layer for the experimental parallel-transport trend filtering (PTTF) route. The returned object contains graph supports, local PCA tangent frames, edge directions, orthogonal edge transports, sampling density metadata, and diagnostics. It does not assemble transported difference operators and it does not fit a response.
Usage
pttf.geometry(
X,
adj.list = NULL,
weight.list = NULL,
graph = c("rknn", "supplied"),
tangent.dim,
local.support = c("graph.disk", "neighbors"),
min.support = NULL,
max.hops = 3L,
support.k = NULL,
graph.k.scale = 1L,
graph.radius.factor = 1,
graph.radius.rule = "geomean",
transport.rule = c("procrustes"),
synchronize.orientation = TRUE,
density.method = c("support.radius"),
alpha = 1,
diagnostics = TRUE
)
Arguments
X |
Numeric data matrix with one row per vertex. |
adj.list |
Optional supplied graph adjacency list using 1-based vertex indices. |
weight.list |
Optional positive edge-length list parallel to
|
graph |
Graph source. |
tangent.dim |
Fixed global tangent dimension for phase-1 geometry. |
local.support |
Local support construction rule. |
min.support |
Minimum support size. Defaults to
|
max.hops |
Maximum hop radius used when topping up local supports. |
support.k |
Optional cap on local support size after top-up. The center vertex is always retained and remaining vertices are selected by graph metric distance, with vertex-index tie breaking. |
graph.k.scale, graph.radius.factor, graph.radius.rule |
Adaptive-radius
graph controls passed to |
transport.rule |
Edge transport rule. Phase 1 implements
|
synchronize.orientation |
Logical. If |
density.method |
Sampling-density metadata rule. Phase 1 implements
|
alpha |
Numeric exponent used only to report proposed future density-normalization weights. |
diagnostics |
Logical. If |
Details
The stored transport convention is column-vector based. For an oriented edge
i \leftarrow j, Oij maps tangent coordinates from frame
j into frame i:
v_j \mapsto O_{ij} v_j.
For shared-support Procrustes, row-coordinate matrices Z_i and
Z_j are formed on the same vertex set. The row problem
\min_Q \|Z_j Q - Z_i\|_F^2 gives Q = U V^\top when
Z_j^\top Z_i = U\Sigma V^\top. The stored column map is
O_{ij}=Q^\top=VU^\top; the reported residual is
\|Z_j O_{ij}^\top - Z_i\|_F / \max(\|Z_i\|_F,\epsilon).
Value
A list of class "pttf_geometry".
Examples
n <- 10L
X <- matrix(seq(0, 1, length.out = n), ncol = 1)
adj <- lapply(seq_len(n), function(i) intersect(c(i - 1L, i + 1L), 1:n))
lengths <- Map(function(i, j) abs(X[j, 1] - X[i, 1]), seq_len(n), adj)
pttf.geometry(X, adj, lengths, graph = "supplied", tangent.dim = 1L)
Construct PTTF Transported-Difference Operators
Description
Assembles experimental parallel-transport trend-filtering (PTTF)
transported-difference operators from a pttf.geometry object.
This is an operator-construction function only: it does not fit a response,
tune a penalty parameter, or run an \ell_1/\ell_2 smoother.
Usage
pttf.operator(
geometry,
derivative.order = 3L,
edge.status.policy = c("ok.only", "frame.fallback"),
regression.weight.rule = c("inverse.length.squared", "inverse.length", "unit"),
edge.length.epsilon = 1e-08,
tensor.scaling = c("hs", "raw"),
row.mass.rule = c("node.mass", "none"),
row.normalize = c("none", "l2"),
min.operator.rank.tol = 1e-10,
max.operator.condition = 1e+08,
return.intermediate = TRUE,
return.A = TRUE,
return.B = TRUE,
diagnostics = TRUE
)
Arguments
geometry |
A |
derivative.order |
Integer derivative order, one of |
edge.status.policy |
Edge transport policy. |
regression.weight.rule |
Local regression edge-weight rule. |
edge.length.epsilon |
Positive numeric edge-length floor. |
tensor.scaling |
Symmetric tensor coordinate scaling. |
row.mass.rule |
Final row-mass multiplier. |
row.normalize |
Optional final row normalization. |
min.operator.rank.tol |
Relative singular-value tolerance for local derivative regression rank. |
max.operator.condition |
Maximum allowed weighted local-design condition number. |
return.intermediate |
Logical. If |
return.A |
Logical. If |
return.B |
Logical. If |
diagnostics |
Logical. If |
Details
Phase 2 keeps a full logical vertex/component layout internally. For order
r, the logical field has one block of
q_r=\binom{m+r-1}{r} components at each vertex. The returned
A is compact: it includes rows only for accepted final-order
vertex/component blocks, and row.table$full.row records the original
full logical row.
For derivative level r, the local regression uses blocks
\Phi_r(u_{ij})\in\mathbb R^{q_{r-1}\times q_r},
lifted weights
W_i^{(r)}=\operatorname{diag}(w_{ij})\otimes I_{q_{r-1}},
and transported predecessor differences
K_{r-1}(O_{ij})z_j-z_i. Unavailable predecessor blocks are never filled
with zero; affected neighbors are dropped and recorded.
Value
A list of class "pttf_operator" containing sparse operators,
row/vertex provenance, tensor-basis metadata, and diagnostics.
Examples
n <- 10L
X <- matrix(seq(0, 1, length.out = n), ncol = 1)
adj <- lapply(seq_len(n), function(i) intersect(c(i - 1L, i + 1L), 1:n))
lengths <- Map(function(i, j) abs(X[j, 1] - X[i, 1]), seq_len(n), adj)
geometry <- pttf.geometry(
X, adj, lengths, graph = "supplied", tangent.dim = 1L
)
pttf.operator(geometry, derivative.order = 2L)
Filter Rows Of A PTTF Operator
Description
Creates a new "pttf_operator" object with a subset of compact
operator rows. The sparse triplet payload is rebuilt from the filtered
matrix so triplet row indices always refer to the filtered fit rows, while
original compact and full logical row identities remain in row.table.
Usage
pttf.operator.filter.rows(
operator,
rows,
reason = NULL,
preserve.original = TRUE
)
Arguments
operator |
A |
rows |
Integer, logical, or character row selector. Character selectors
are matched against |
reason |
Optional character reason stored in |
preserve.original |
Logical. If |
Value
A filtered "pttf_operator" object.
Examples
n <- 10L
X <- matrix(seq(0, 1, length.out = n), ncol = 1)
adj <- lapply(seq_len(n), function(i) intersect(c(i - 1L, i + 1L), 1:n))
lengths <- Map(function(i, j) abs(X[j, 1] - X[i, 1]), seq_len(n), adj)
geometry <- pttf.geometry(
X, adj, lengths, graph = "supplied", tangent.dim = 1L
)
operator <- pttf.operator(geometry, derivative.order = 2L)
pttf.operator.filter.rows(operator, seq_len(max(1L, nrow(operator$A) - 2L)))
Evaluate gradients of all quadforms
Description
Evaluate gradients of all quadforms
Usage
quadform.gradient(geometry, latent)
Arguments
geometry |
A |
latent |
Finite latent coordinates in rows. |
Value
For one form, an n by d matrix. For multiple forms, an
n by r by d array. With no forms, an n by zero by d array.
Examples
geometry <- synthetic.quadform(1L, 2L, forms = list(matrix(1)))
quadform.gradient(geometry, matrix(c(-1, 0, 1), ncol = 1))
Evaluate the induced metric of a quadform geometry
Description
Evaluate the induced metric of a quadform geometry
Usage
quadform.metric(geometry, latent)
Arguments
geometry |
A |
latent |
Finite latent coordinates in rows. |
Value
For one row, a d by d matrix; otherwise an
n by d by d array.
Examples
geometry <- synthetic.quadform(1L, 2L, forms = list(matrix(1)))
quadform.metric(geometry, matrix(c(0, 1), ncol = 1))
Refit A Local Polynomial Lifting Trend Filter
Description
Reuses the fixed operator and selected lambda from an existing LPL-TF fit.
Usage
refit.lpl.tf(
object,
y,
lambda = NULL,
reuse.lambda = TRUE,
verbose = FALSE,
...
)
Arguments
object |
A |
y |
New numeric response vector. |
lambda |
Optional fixed lambda. |
reuse.lambda |
Logical. If |
verbose |
Logical. |
... |
Reserved. |
Value
A refitted "lpl_tf" object.
Examples
if (requireNamespace("genlasso", quietly = TRUE)) {
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
fit <- fit.lpl.tf(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 7L,
lambda = 0.1, lambda.selection = "fixed")
refit.lpl.tf(fit, y = X[, 1]^3)
}
Refit A MALPS Smoother With A New Response
Description
Reuses the anchors, selected support profile, local supports, prediction
supports, coordinate method, kernel, degree, and local-solver controls from a
previous fit.malps result, then recomputes local polynomial
coefficients for a new response vector. Observation weights, when supplied,
multiply the stored geometric fitting weights for local coefficient
estimation. Supports and model-averaging weights remain fixed. A weighted
refit requires every stored local support to retain at least one positive
effective fitting weight; sparse bootstrap-style weights can therefore fail
even when the global weight vector is not all zero. If the original fit used
robust local residual reweighting, robust weights are recomputed for the new
response because they are response-dependent.
Usage
refit.malps(
object,
y = NULL,
weights = NULL,
reuse.selection = TRUE,
refit.local.coefficients = TRUE,
verbose = FALSE,
...
)
Arguments
object |
A |
y |
Optional new numeric response vector with length
|
weights |
Optional nonnegative numeric observation weights with length
|
reuse.selection |
Currently requires |
refit.local.coefficients |
Currently requires |
verbose |
Logical; reserved for future progress messages. |
... |
Reserved for future extensions. |
Value
A "malps" object with the same support profile and new fitted
values.
Examples
X <- matrix(seq(0, 1, length.out = 20), ncol = 1)
fit <- fit.malps(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 8L)
refit.malps(fit, y = X[, 1]^3)
Refit Metric-Conductance Graph Low-Pass Regression
Description
Reuses a fitted metric graph low-pass eigensystem to smooth new responses.
Usage
refit.metric.graph.lowpass(
fitted.model,
y.new,
per.column.gcv = FALSE,
eta.grid = NULL,
n.candidates = 40L,
n.cores = 1L,
block.size = NULL,
verbose = FALSE
)
Arguments
fitted.model |
A |
y.new |
Numeric vector or matrix with one row per graph vertex. |
per.column.gcv |
Logical. If |
eta.grid |
Optional positive numeric eta grid for per-column GCV. |
n.candidates |
Number of eta candidates when |
n.cores |
Number of cores for per-column GCV. Phase 1 uses sequential processing if optional parallel packages are unavailable. |
block.size |
Optional block size for fixed-eta multi-column refits. |
verbose |
Logical progress flag. |
Value
A list of class "metric.graph.lowpass.refit".
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
lengths <- list(1, c(1, 1), c(1, 1), 1)
fit <- fit.metric.graph.lowpass(
adj, lengths, y = 1:4, n.eigenpairs = 4L,
eta.grid = c(0.1, 1), eigen.solver = "dense"
)
refit.metric.graph.lowpass(fit, y.new = 4:1)
Refit A Fixed-Operator Synchronized LPL-TF Model
Description
Refit A Fixed-Operator Synchronized LPL-TF Model
Usage
refit.slpl.tf(
object,
y,
lambda1 = NULL,
lambda2 = NULL,
reuse.lambda = TRUE,
verbose = FALSE,
...
)
Arguments
object |
A |
y |
New numeric response vector. |
lambda1, lambda2 |
Optional fixed penalties. Defaults reuse
|
reuse.lambda |
Logical. If |
verbose |
Logical. |
... |
Reserved. |
Value
A refitted "slpl_tf" object.
Examples
if (requireNamespace("genlasso", quietly = TRUE)) {
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
fit <- fit.slpl.tf(X, X[, 1]^2, degree = 1L,
support.type = "knn", support.size = 7L,
lambda1 = 0.1, lambda2 = 0,
lambda.selection = "fixed")
refit.slpl.tf(fit, y = X[, 1]^3)
}
Refit SSRHE-Style Hessian L1 Regression
Description
Reuses the A operator from
fit.ssrhe.hessian.l1.regression to fit a new response or a new
lambda grid without rebuilding local neighborhoods or local PCA Hessian
rows.
Usage
refit.ssrhe.hessian.l1.regression(
fitted.model,
y.new = NULL,
lambda.grid = fitted.model$lambda,
lambda.selection = c("fixed", "cv"),
weights = NULL,
n.lambda = 40L,
nfolds = 5L,
fold.id = NULL,
loss = c("mse", "mae"),
selection = c("min", "one.se"),
solver = c("genlasso", "admm", "auto"),
row.scaling = c("none", "l2"),
admm.rho = 1,
admm.maxiter = 2000L,
admm.abstol = 1e-04,
admm.reltol = 0.001,
maxsteps = 2000L,
minlam = 0,
approx = FALSE,
rtol = 1e-07,
btol = 1e-07,
eps = 1e-04,
verbose = FALSE
)
Arguments
fitted.model |
A |
y.new |
Optional new numeric response vector. If |
lambda.grid |
Optional nonnegative lambda grid. For
|
lambda.selection |
|
weights |
Optional nonnegative observation weights. Missing responses automatically receive zero weight. |
n.lambda |
Number of default lambda candidates when
|
nfolds |
Number of validation folds over observed positive-weight
labels. Ignored when |
fold.id |
Optional integer fold assignments of length |
loss |
Validation loss, currently |
selection |
Selection rule. |
solver |
Solver backend. |
row.scaling |
Optional row scaling for the penalty matrix before
solving. |
admm.rho, admm.maxiter, admm.abstol, admm.reltol |
ADMM controls used when
|
maxsteps, minlam, approx, rtol, btol, eps, verbose |
Controls passed to genlasso. |
Value
A list of class "ssrhe.hessian.l1.refit".
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit <- fit.ssrhe.hessian.l1.regression(
X, X[, 1]^2, k = 6L, tangent.dim = 1L,
lambda.grid = 0.05, lambda.selection = "fixed", solver = "admm"
)
refit.ssrhe.hessian.l1.regression(
fit, y.new = X[, 1]^3, solver = "admm"
)
Refit SSRHE-Style Hessian-Energy Regression
Description
Reuses the operator from fit.ssrhe.hessian.regression to fit
new responses or new fixed penalty weights without rebuilding local PCA
neighborhoods or Hessian-energy matrices.
Usage
refit.ssrhe.hessian.regression(
fitted.model,
y.new = NULL,
lambda1 = fitted.model$lambda$lambda1,
lambda2 = fitted.model$lambda$lambda2,
weights = NULL,
ridge = fitted.model$lambda$ridge,
verbose = FALSE
)
Arguments
fitted.model |
A |
y.new |
New numeric response vector or matrix with one row per vertex.
If |
lambda1 |
Nonnegative Hessian-energy penalty multiplier for
|
lambda2 |
Nonnegative supplemental-stabilizer multiplier for
|
weights |
Optional nonnegative observation weights. May be |
ridge |
Nonnegative diagonal ridge added to the linear system for numerical stabilization. |
verbose |
Logical. If |
Value
A list of class "ssrhe.hessian.refit".
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
fit <- fit.ssrhe.hessian.regression(
X, X[, 1]^2, k = 6L, tangent.dim = 1L, lambda1 = 0.1
)
refit.ssrhe.hessian.regression(fit, y.new = X[, 1]^3)
Construct A Synchronized LPL-TF Fixed Operator
Description
Builds the fixed S-LPL-TF operator pair. The LPL component
A_{\mathrm{LPL}} is the accepted self-excluded LPL-TF residual
operator from lpl.tf.operator. The synchronization component
C_{\mathrm{sync}} compares inclusive local polynomial prediction maps
over overlapping supports.
Usage
slpl.tf.operator(
X,
adj.list = NULL,
weight.list = NULL,
graph = NULL,
graph.stage = "final",
anchor.index = NULL,
anchor.coordinates = NULL,
degree = 2L,
support.type = c("adaptive.radius", "knn", "fixed.radius"),
support.size = NULL,
radius = NULL,
min.support = NULL,
support.buffer = 3L,
kernel = c("epanechnikov", "triangular", "gaussian", "tricube"),
coordinate.method = c("coordinates", "local.pca"),
chart.dim = NULL,
support.metric = c("auto", "coordinates", "graph.geodesic"),
auto.chart.support.metric = c("coordinates", "operator", "both"),
auto.chart.selection.metric = c("coordinates", "operator"),
row.normalize = c("l2", "none", "l1"),
local.solver = c("auto", "normal.equations", "qr", "svd"),
normal.equations.max.condition = 1e+08,
duplicate.action = c("keep", "error"),
drop.rank.deficient = TRUE,
sync.row.normalize = c("l2"),
sync.min.norm = 1e-12,
verbose = FALSE,
...
)
Arguments
X |
Numeric coordinate matrix with one row per observation. |
adj.list, weight.list |
Optional supplied undirected graph adjacency and positive edge-length lists using 1-based vertex indices. |
graph |
Optional graph object returned by
|
graph.stage |
Graph stage to extract from |
anchor.index |
Optional integer vector of observed anchor/target indices. The current implementation supports observed anchors only. |
anchor.coordinates |
Reserved for later off-observation anchors; this
implementation requires |
degree |
Polynomial degree. The current implementation supports
|
support.type |
Coordinate support rule. |
support.size |
Positive integer for |
radius |
Positive coordinate radius for
|
min.support |
Minimum number of positive-weight predictors after self
exclusion. If |
support.buffer |
Nonnegative integer added to the local polynomial design size when choosing default supports. |
kernel |
Kernel used to weight local predictors by distance. |
coordinate.method |
Coordinate chart used for the local polynomial
design. |
chart.dim |
Chart dimension. For |
support.metric |
Support-distance rule. |
auto.chart.support.metric |
Support system used when
|
auto.chart.selection.metric |
Which auto chart-dimension diagnostic to
use for the fitted operator when |
row.normalize |
Complete-row normalization rule applied after setting
target coefficient |
local.solver |
Local linear algebra rule. |
normal.equations.max.condition |
Maximum condition number for
|
duplicate.action |
Duplicate coordinate policy. |
drop.rank.deficient |
Logical. The current implementation requires
|
sync.row.normalize |
Synchronization-row normalization. Phase S2 uses
|
sync.min.norm |
Minimum raw synchronization-row norm. Rows below this threshold are dropped with metadata. |
verbose |
Logical. Reserved for diagnostic messages. |
... |
Reserved. |
Value
A list of class "slpl_tf_operator" containing
A_LPL, C_sync, row metadata, diagnostics, settings, and the
embedded "lpl_tf_operator".
Examples
X <- matrix(seq(0, 1, length.out = 18), ncol = 1)
slpl.tf.operator(X, degree = 1L, support.type = "knn",
support.size = 7L, kernel = "gaussian")
Construct an SSRHE-Style Local Hessian Energy Operator
Description
Constructs the discrete local Hessian operator used by the semi-supervised
regularization framework of Kim, Steinke, and Hein (2009). The constructor
is intended as a package-facing, auditable R/C++ port of the reference
behavior: it returns the sparse row operator A, the quadratic energy
matrix B=A^\top A, and optionally the supplemental stabilizer
B_S.
Usage
ssrhe.hessian.operator(
X,
k = NULL,
tangent.dim,
nn.index = NULL,
neighborhood.type = c("knn", "adaptive.radius", "supplied"),
support.index = NULL,
adaptive.k.scale = NULL,
radius.rule = c("geomean", "max", "min"),
radius.factor = 1.25,
min.support = NULL,
max.support = NULL,
support.buffer = 2L,
support.topup = c("nearest", "none"),
tangent.dim.rule = c("fixed", "eigen.cumulative"),
eigen.tolerance = 0.95,
derivative.order = 2L,
stabilizer = FALSE,
pinv.tol = sqrt(.Machine$double.eps),
local.solver = c("auto", "normal.equations", "svd", "qr"),
normal.equations.max.condition = 10000,
return.A = TRUE,
return.B = TRUE,
return.BS = stabilizer,
return.sparse = TRUE,
return.local.diagnostics = TRUE,
return.timing = FALSE,
verbose = FALSE
)
Arguments
X |
Numeric matrix with one observation per row. Distances for the default neighborhood search are Euclidean distances in these coordinates. |
k |
Integer number of nearest neighbors per point, including the point
itself, used when |
tangent.dim |
Integer tangent dimension used for the local PCA chart.
Required when |
nn.index |
Optional integer matrix of neighbor indices, with
|
neighborhood.type |
Local support rule. |
support.index |
Optional list of integer vectors, one per row of
|
adaptive.k.scale |
Integer local-scale k used by
|
radius.rule, radius.factor |
Adaptive-radius graph parameters passed to
|
min.support |
Optional minimum local support size for adaptive-radius
supports. Defaults to the local quadratic design size plus
|
max.support |
Optional maximum local support size. Oversized adaptive
supports are trimmed to the closest |
support.buffer |
Nonnegative integer added to the local quadratic design
size when choosing the default |
support.topup |
How undersized adaptive-radius supports are enlarged.
|
tangent.dim.rule |
Either |
eigen.tolerance |
Cumulative local PCA variance threshold used when
|
derivative.order |
Integer derivative order of the local SSRHE-style
operator. |
stabilizer |
Logical. If |
pinv.tol |
Nonnegative tolerance multiplier for local pseudoinverses. |
local.solver |
Local least-squares backend used to map local function
values to derivative coefficients. |
normal.equations.max.condition |
Positive condition-number guard used
by |
return.A |
Logical. If |
return.B |
Logical. If |
return.BS |
Logical. If |
return.sparse |
Logical. If |
return.local.diagnostics |
Logical. If |
return.timing |
Logical. If |
verbose |
Logical. If |
Details
For each point x_i, the operator constructs a local PCA chart from a
self-including local support, projects the support into
\mathbb R^m, and centers the local coordinates at x_i. A local
quadratic model is then fitted with the intercept fixed at f_i:
f(x_j) - f(x_i)
\approx
\sum_{a \le b} h_{ab} z_{ja} z_{jb}
+
\sum_a g_a z_{ja}.
The local linear map from function values to the quadratic coefficients is the Matlab-compatible
\mathrm{RegMat} = X^+ - X^+ \mathrm{IndMat},
where X is the reduced quadratic-plus-linear design and
\mathrm{IndMat} copies the center value into all local rows. Diagonal
Hessian components are scaled by \sqrt{2} and off-diagonal components
by 1, so that the row energy matches the reference Hessian energy.
With derivative.order = 3L, the reduced local design uses cubic
monomials first, followed by quadratic and linear monomials. The returned
rows estimate unique symmetric third-derivative components
\partial_{abc} f with scale
s_{abc}=m_{abc}\sqrt{\mu_{abc}},
where m_{abc} is the factorial monomial-to-derivative multiplier
(6 for aaa, 2 for aab, and 1 for three
distinct indices) and \mu_{abc} is the ordered-tensor multiplicity
(1, 3, or 6). Thus \|Af\|_2^2 approximates the
squared Frobenius norm of the full symmetric third-derivative tensor.
The returned A is the stacked sparse matrix of these local derivative
coefficient rows. The \ell_2 SSRHE penalty is
f^\top B f = \|Af\|_2^2,\quad B=A^\top A.
Exposing A is useful for auditability and for future
\ell_1-style variants based on \|Af\|_1.
Adaptive-radius graph construction uses dgraphs; fixed-k and supplied neighborhoods are package-local geosmooth paths.
Value
A list of class "ssrhe.hessian.operator" containing:
-
A: sparse local Hessian row operator, if requested; -
B: sparse quadratic energy matrixA^\top A, if requested; -
BS: optional supplemental stabilizer matrix; -
A.triplet,BS.triplet: raw sparse triplets; -
nn.index: neighbor index matrix for rectangular kNN neighborhoods, if used; -
support.index: list of actual local supports used by the backend; -
neighborhoods: support-construction diagnostics; -
row.table: one row per Hessian component row ofA; -
diagnostics: local design rank, condition, and PCA summaries; -
local.diagnostics: if requested, one row per center vertex with support size, design rank/condition, PCA variance, chart-distortion, boundary-asymmetry, and curvature-bias proxy diagnostics; -
timing: if requested, a phase-level elapsed-time table; -
native.timing: if requested, a C++ backend subphase timing table for native operator construction; -
parity: notes documenting reference-behavior conventions.
References
Kim, K. I., Steinke, F., and Hein, M. (2009). Semi-supervised regression using Hessian energy with an application to semi-supervised dimensionality reduction. Advances in Neural Information Processing Systems 22. https://papers.nips.cc/paper_files/paper/2009/hash/f4552671f8909587cf485ea990207f3b-Abstract.html
Examples
X <- matrix(seq(0, 1, length.out = 12), ncol = 1)
ssrhe.hessian.operator(X, k = 6L, tangent.dim = 1L)
Build Candidate Support Profiles for SSRHE Adaptive-Radius Tuning
Description
Constructs a compact grid of adaptive-radius support profiles for use with
support.selection = "cv" in SSRHE fitting functions. Each row gives an
adaptive.k.scale value and a requested min.support. The grid is
intentionally small by default because support selection nests operator
construction inside response cross-validation.
Usage
ssrhe.support.grid(
n,
tangent.dim,
derivative.order = 2L,
support.buffer = 2L,
max.candidates = 8L
)
Arguments
n |
Number of observations. |
tangent.dim |
Tangent dimension used by the SSRHE local polynomial design. |
derivative.order |
SSRHE derivative order, currently |
support.buffer |
Nonnegative integer added to the local design size when constructing the smallest candidate support. |
max.candidates |
Maximum number of candidate support profiles to return. |
Value
A data frame with columns adaptive.k.scale,
min.support, and max.support. max.support is
NA by default, meaning no truncation.
Examples
ssrhe.support.grid(n = 50L, tangent.dim = 2L, max.candidates = 4L)
Summary Method for Harmonic Smoother Results
Description
Provides detailed summary statistics for harmonic smoother results, including the evolution of extrema counts and basin structure differences.
Usage
## S3 method for class 'harmonic_smoother'
summary(object, ...)
Arguments
object |
An object of class |
... |
Further arguments passed to or from other methods. |
Value
An object of class "summary.harmonic_smoother" containing:
stable_iteration |
The iteration at which topology stabilized |
iterations_recorded |
Total number of recorded iterations |
initial_extrema |
Number of extrema at the first iteration |
initial_maxima |
Number of maxima at the first iteration |
initial_minima |
Number of minima at the first iteration |
final_extrema |
Number of extrema at the final iteration |
final_maxima |
Number of maxima at the final iteration |
final_minima |
Number of minima at the final iteration |
extrema_reduction |
Reduction in number of extrema |
topology_diff_summary |
Summary statistics of topology differences |
See Also
harmonic.smoother, print.summary.harmonic_smoother
Specify a circle geometry
Description
Specify a circle geometry
Usage
synthetic.circle(
radius = 1,
angle.range = c(0, 2 * pi),
ambient.dim = 2L,
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
radius |
Circle radius. |
angle.range |
Admissible angular interval. |
ambient.dim |
Ambient dimension. |
frame, frame.algorithm, frame.matrix, offset |
Frame parameters. |
Value
A synthetic geometry component.
Examples
synthetic.circle(radius = 2, angle.range = c(0, pi))
Compute the canonical content checksum of a synthetic dataset
Description
Compute the canonical content checksum of a synthetic dataset
Usage
synthetic.dataset.checksum(x)
Arguments
x |
A |
Value
A lowercase SHA-256 string.
Examples
x <- materialize.synthetic(synthetic.registry.spec("G1"), n = 20L, seed = 1L)
synthetic.dataset.checksum(x)
Specify a helix geometry
Description
Specify a helix geometry
Usage
synthetic.helix(
pitch = 0.2,
t.range = c(0, 2 * pi),
ambient.dim = 3L,
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
pitch |
Helix pitch. |
t.range |
Admissible parameter interval. |
ambient.dim |
Ambient dimension. |
frame, frame.algorithm, frame.matrix, offset |
Frame parameters. |
Value
A synthetic geometry component.
Examples
synthetic.helix(pitch = 0.25, t.range = c(0, pi))
Specify a point-line junction
Description
Specify a point-line junction
Usage
synthetic.point.line.junction(
point.location,
line.origin,
line.direction,
line.range
)
Arguments
point.location |
Point location. |
line.origin, line.direction, line.range |
Segment parameters. |
Value
A two-stratum synthetic_stratified_geometry.
Examples
synthetic.point.line.junction(c(0, 0), c(0, 0), c(1, 0), c(0, 1))
Specify a quadform geometry
Description
Specify a quadform geometry
Usage
synthetic.quadform(
intrinsic.dim,
ambient.dim,
forms = list(),
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
intrinsic.dim |
Intrinsic dimension. |
ambient.dim |
Ambient dimension. |
forms |
List of finite symmetric quadratic-form matrices. |
frame |
Frame policy. |
frame.algorithm |
Versioned random-frame algorithm or |
frame.matrix |
Supplied orthonormal frame or |
offset |
Ambient offset or |
Value
A synthetic geometry component.
Examples
synthetic.quadform(1L, 2L, forms = list(matrix(0.5)))
List maintained synthetic recipe IDs
Description
List maintained synthetic recipe IDs
Usage
synthetic.registry.ids()
Value
Character recipe IDs.
Examples
head(synthetic.registry.ids())
Resolve the legacy seed for an SSRHE registry recipe
Description
Resolve the legacy seed for an SSRHE registry recipe
Usage
synthetic.registry.seed(
recipe.id,
replicate = 1L,
n = NULL,
base.seed = 273001L
)
Arguments
recipe.id |
A one-dimensional, flat, or quadform SSRHE recipe ID. |
replicate |
Positive replicate number. |
n |
Sample size. Required for flat and quadform recipes. |
base.seed |
One-dimensional suite base seed. |
Value
A validated integer seed.
Examples
synthetic.registry.seed("S16.V1", replicate = 2L)
Resolve a maintained synthetic recipe
Description
Default recipes are reconstructed from normalized component foreign keys. Parameter overrides are accepted only for the legacy G-family compatibility surface and remain content-bound, non-frozen specifications.
Usage
synthetic.registry.spec(recipe.id, parameters = list())
Arguments
recipe.id |
One of |
parameters |
Optional named parameter overrides. |
Value
A validated synthetic_spec.
Examples
synthetic.registry.spec("G1")
Bernoulli response specification
Description
Bernoulli response specification
Usage
synthetic.response.bernoulli(minimum.positive = 0L, maximum.attempts = 1L)
Arguments
minimum.positive |
Minimum accepted positive responses. |
maximum.attempts |
Maximum complete redraw attempts. |
Value
A synthetic response component.
Examples
synthetic.response.bernoulli(minimum.positive = 1L, maximum.attempts = 5L)
Clustered Gaussian response specification
Description
Clustered Gaussian response specification
Usage
synthetic.response.clustered.gaussian(residual.sd, intraclass.correlation)
Arguments
residual.sd |
Residual standard deviation. |
intraclass.correlation |
Intraclass correlation in |
Value
A synthetic response component.
Examples
synthetic.response.clustered.gaussian(0.2, 0.3)
Gaussian response specification
Description
Gaussian response specification
Usage
synthetic.response.gaussian(sd)
Arguments
sd |
Response standard deviation. |
Value
A synthetic response component.
Examples
synthetic.response.gaussian(sd = 0.2)
Heteroskedastic Gaussian response specification
Description
Heteroskedastic Gaussian response specification
Usage
synthetic.response.heteroskedastic.gaussian(base.sd, truth.multiplier)
Arguments
base.sd |
Base standard deviation. |
truth.multiplier |
Multiplier applied to truth. |
Value
A synthetic response component.
Examples
synthetic.response.heteroskedastic.gaussian(0.1, 0.2)
Laplace response with Gaussian contamination
Description
Laplace response with Gaussian contamination
Usage
synthetic.response.laplace.outlier(
laplace.scale,
outlier.fraction,
outlier.sd,
minimum.outliers = 0L,
count.rounding = "round",
laplace.algorithm = "uniform.inverse.v1"
)
Arguments
laplace.scale |
Laplace scale. |
outlier.fraction |
Fraction contaminated. |
outlier.sd |
Contamination standard deviation. |
minimum.outliers |
Minimum contamination count. |
count.rounding |
Count policy. |
laplace.algorithm |
Versioned Laplace algorithm. |
Value
A synthetic response component.
Examples
synthetic.response.laplace.outlier(0.1, 0.05, 1)
Clustered sampling specification
Description
Clustered sampling specification
Usage
synthetic.sampling.clustered(
cluster.count,
observations.per.cluster,
center.lower = -1,
center.upper = 1,
within.sd,
algorithm = "centers.then.gaussian.offsets.v1"
)
Arguments
cluster.count |
Number of clusters. |
observations.per.cluster |
Rows per cluster. |
center.lower, center.upper |
Center box bounds. |
within.sd |
Within-cluster standard deviation. |
algorithm |
Versioned draw algorithm. |
Value
A fixed-size synthetic sampling component.
Examples
synthetic.sampling.clustered(3L, 5L, within.sd = 0.1)
Dirichlet sampling with structural zeros
Description
Dirichlet sampling with structural zeros
Usage
synthetic.sampling.dirichlet.zeros(
concentration,
zero.fraction,
zero.parts,
zero.row.policy = c("first", "random"),
count.rounding = "round",
algorithm = "normalized.gamma.v1"
)
Arguments
concentration |
Scalar or part-wise Dirichlet concentration. |
zero.fraction |
Fraction of rows receiving structural zeros. |
zero.parts |
Part indices set to zero. |
zero.row.policy |
Row-selection policy. |
count.rounding |
Count rule. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.dirichlet.zeros(
concentration = rep(1, 3), zero.fraction = 0.2, zero.parts = 1L
)
Gapped-uniform sampling specification
Description
Gapped-uniform sampling specification
Usage
synthetic.sampling.gapped.uniform(
intervals,
allocation = c("multinomial", "fixed.proportion", "fixed.count"),
probabilities = NULL,
counts = NULL,
rounding = c("largest.remainder", "floor.first.remainder.last"),
order = c("draw", "ascending"),
algorithm = "sequential.interval.runif.v1"
)
Arguments
intervals |
Two-column matrix of disjoint intervals. |
allocation |
Allocation policy. |
probabilities |
Optional allocation probabilities. |
counts |
Optional fixed counts. |
rounding |
Fixed-proportion rounding rule. |
order |
Ordering policy. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
intervals <- rbind(c(-1, -0.25), c(0.25, 1))
synthetic.sampling.gapped.uniform(intervals, probabilities = c(0.5, 0.5))
Deterministic interval-grid sampling specification
Description
Deterministic interval-grid sampling specification
Usage
synthetic.sampling.grid.interval(
lower,
upper,
endpoints = c("exclude.lower", "exclude.upper", "include.both")
)
Arguments
lower, upper |
Interval bounds. |
endpoints |
Endpoint convention. |
Value
A deterministic synthetic sampling component.
Examples
synthetic.sampling.grid.interval(0, 2 * pi, endpoints = "exclude.lower")
Legacy G4 stratified sampling specification
Description
Legacy G4 stratified sampling specification
Usage
synthetic.sampling.stratified(
fraction.a = 0.5,
algorithm = c("stratum.sequential.v1", "legacy.g4.stratum.sequential.v1")
)
Arguments
fraction.a |
Fraction allocated to stratum A. |
algorithm |
Versioned traversal algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.stratified(fraction.a = 0.6)
Truncated-normal sampling specification
Description
Truncated-normal sampling specification
Usage
synthetic.sampling.truncated.normal(
mean,
sd,
lower,
upper,
order = c("draw", "ascending"),
algorithm = "inverse.cdf.v1"
)
Arguments
mean, sd |
Normal parameters. |
lower, upper |
Truncation bounds. |
order |
Ordering policy. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.truncated.normal(0, 1, -2, 2)
Uniform-box sampling specification
Description
Uniform-box sampling specification
Usage
synthetic.sampling.uniform.box(
lower,
upper,
order = c("draw", "ascending.first.coordinate"),
algorithm = "column.major.runif.v1"
)
Arguments
lower, upper |
Scalar or coordinate-wise bounds. |
order |
Row ordering policy. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.uniform.box(lower = c(-1, 0), upper = c(1, 2))
Uniform-disk sampling specification
Description
Uniform-disk sampling specification
Usage
synthetic.sampling.uniform.disk(radius = 1, algorithm = "radial.sqrt.v1")
Arguments
radius |
Disk radius. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.uniform.disk(radius = 2)
Uniform-interval sampling specification
Description
Uniform-interval sampling specification
Usage
synthetic.sampling.uniform.interval(
lower,
upper,
order = c("draw", "ascending"),
algorithm = "runif.v1"
)
Arguments
lower, upper |
Interval bounds. |
order |
Ordering policy. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.uniform.interval(0, 1, order = "ascending")
Uniform-rectangle sampling specification
Description
Uniform-rectangle sampling specification
Usage
synthetic.sampling.uniform.rectangle(
lower,
upper,
algorithm = "coordinate.sequential.runif.v1"
)
Arguments
lower, upper |
Length-two coordinate bounds. |
algorithm |
Versioned draw algorithm. |
Value
A synthetic sampling component.
Examples
synthetic.sampling.uniform.rectangle(c(-1, -2), c(1, 2))
Specify a simplex geometry
Description
Specify a simplex geometry
Usage
synthetic.simplex(parts)
Arguments
parts |
Number of compositional parts. |
Value
A synthetic geometry component.
Examples
synthetic.simplex(parts = 3L)
Assemble a synthetic-data specification
Description
Combines draw-free geometry, sampling, truth, and response components into one canonically hashable specification.
Usage
synthetic.spec(
geometry,
sampling,
truth,
response,
recipe.id = NULL,
registry.tag = NULL,
compatibility = NULL,
metadata = list()
)
Arguments
geometry |
A synthetic geometry component. |
sampling |
A synthetic sampling component. |
truth |
A synthetic truth component. |
response |
A synthetic response component. |
recipe.id |
Optional readable recipe label. |
registry.tag |
Optional stable experimental-plan tag. |
compatibility |
Optional serializable legacy compatibility metadata. |
metadata |
Optional serializable scientific metadata. |
Value
A synthetic_spec.
Examples
spec <- synthetic.spec(
synthetic.circle(), synthetic.sampling.uniform.interval(0, 2 * pi),
synthetic.truth.named("helix.sin.v1"), synthetic.response.gaussian(0.1)
)
spec$specification.sha256
Specify a sphere-cap geometry
Description
Specify a sphere-cap geometry
Usage
synthetic.sphere.cap(
radius = 2,
footprint.radius = 1,
ambient.dim = 3L,
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
radius |
Sphere radius. |
footprint.radius |
Radius of the planar cap footprint. |
ambient.dim |
Ambient dimension. |
frame, frame.algorithm, frame.matrix, offset |
Frame parameters. |
Value
A synthetic geometry component.
Examples
synthetic.sphere.cap(radius = 2, footprint.radius = 1)
Assemble a stratified geometry
Description
Assemble a stratified geometry
Usage
synthetic.stratified(strata, junctions = NULL)
Arguments
strata |
Nonempty list of compatible |
junctions |
Optional data frame describing stratum boundary junctions. |
Value
A draw-free synthetic geometry component.
Examples
point <- synthetic.stratum.point("point", c(0, 0))
line <- synthetic.stratum.segment("line", c(0, 1), c(0, 0), c(1, 0))
synthetic.stratified(list(point, line))
Specify a point stratum
Description
Specify a point stratum
Usage
synthetic.stratum.point(id, location)
Arguments
id |
Stable stratum identifier. |
location |
Finite ambient location. |
Value
A draw-free synthetic_stratum.
Examples
synthetic.stratum.point("origin", c(0, 0))
Specify a rectangle stratum
Description
Specify a rectangle stratum
Usage
synthetic.stratum.rectangle(id, coordinate.ranges, origin, basis)
Arguments
id |
Stable stratum identifier. |
coordinate.ranges |
Two-row matrix of finite increasing ranges. |
origin |
Finite ambient origin. |
basis |
Orthonormal ambient-by-two basis. |
Value
A draw-free synthetic_stratum.
Examples
synthetic.stratum.rectangle(
"square", rbind(c(-1, 1), c(-1, 1)), c(0, 0), diag(2)
)
Specify a line-segment stratum
Description
Specify a line-segment stratum
Usage
synthetic.stratum.segment(id, coordinate.range, origin, direction)
Arguments
id |
Stable stratum identifier. |
coordinate.range |
Finite increasing intrinsic range. |
origin |
Finite ambient origin. |
direction |
Unit ambient direction. |
Value
A draw-free synthetic_stratum.
Examples
synthetic.stratum.segment("line", c(-1, 1), c(0, 0), c(1, 0))
Specify a torus-patch geometry
Description
Specify a torus-patch geometry
Usage
synthetic.torus.patch(
major.radius = 1,
minor.radius = 0.35,
u.range = c(-pi/2, pi/2),
v.range = c(-pi/2, pi/2),
ambient.dim = 3L,
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
major.radius, minor.radius |
Torus radii. |
u.range, v.range |
Admissible angular intervals. |
ambient.dim |
Ambient dimension. |
frame, frame.algorithm, frame.matrix, offset |
Frame parameters. |
Value
A synthetic geometry component.
Examples
synthetic.torus.patch(major.radius = 2, minor.radius = 0.5)
Specify a trefoil-knot geometry
Description
This preserves the legacy gflow parameterization:
x = scale * sin(t) + 2 * sin(2*t),
y = scale * cos(t) - 2 * cos(2*t), and
z = -scale * sin(3*t).
Usage
synthetic.trefoil(
scale = 1,
t.range = c(0, 2 * pi),
ambient.dim = 3L,
frame = c("canonical", "random.orthonormal", "supplied"),
frame.algorithm = NULL,
frame.matrix = NULL,
offset = NULL
)
Arguments
scale |
Scale applied to the first harmonic and third coordinate. |
t.range |
Admissible parameter interval. |
ambient.dim |
Ambient dimension. |
frame, frame.algorithm, frame.matrix, offset |
Frame parameters. |
Value
A synthetic geometry component.
Examples
synthetic.trefoil(scale = 0.5, t.range = c(0, pi))
Specify a Gaussian-mixture truth
Description
Specify a Gaussian-mixture truth
Usage
synthetic.truth.gaussian.mixture(
centers,
scales,
weights,
normalize = c("none", "sample.max"),
evaluation.coordinates = "latent"
)
Arguments
centers |
Component centers, one per row. |
scales |
Positive isotropic standard deviations or covariance matrices. |
weights |
Nonnegative mixture weights. |
normalize |
Normalization scope. |
evaluation.coordinates |
Coordinates on which to evaluate. |
Value
A synthetic truth component.
Examples
synthetic.truth.gaussian.mixture(
centers = rbind(-1, 1), scales = c(0.5, 0.5), weights = c(1, 1)
)
Specify a sinusoidal finite-design logit truth
Description
Specify a sinusoidal finite-design logit truth
Usage
synthetic.truth.logit(
amplitude = 1.5,
target.prevalence = 0.5,
clip = c(0.05, 0.95)
)
Arguments
amplitude |
Sinusoidal log-odds amplitude. |
target.prevalence |
Target mean pre-clipping probability. |
clip |
Probability bounds. |
Value
A synthetic truth component.
Examples
synthetic.truth.logit(amplitude = 1, target.prevalence = 0.4)
Specify a versioned named truth evaluator
Description
Specify a versioned named truth evaluator
Usage
synthetic.truth.named(id, parameters = list())
Arguments
id |
Evaluator ID. |
parameters |
Serializable evaluator parameters. |
Value
A synthetic truth component.
Examples
synthetic.truth.named("intrinsic.linear.first.v1")
Specify a finite-design occupation-mixture truth
Description
The analytic Gaussian-mixture density is transformed to Bernoulli
occupation probabilities by
probability.maximum * density^gamma / max(density^gamma).
Usage
synthetic.truth.occupation.mixture(
centers,
covariances,
weights,
gamma = 1,
probability.maximum = 0.65,
normalization = "design.maximum"
)
Arguments
centers |
Component centers, one per row. |
covariances |
Positive-definite covariance matrices. |
weights |
Nonnegative mixture weights. |
gamma |
Positive density-shape exponent. |
probability.maximum |
Maximum realized occupation probability. |
normalization |
Currently |
Value
A finite-design synthetic truth component.
Examples
synthetic.truth.occupation.mixture(
centers = rbind(c(-1, 0), c(1, 0)),
covariances = list(diag(2), diag(2)), weights = c(1, 1)
)
Specify a polynomial truth
Description
Specify a polynomial truth
Usage
synthetic.truth.polynomial(coefficients, evaluation.coordinates = "latent")
Arguments
coefficients |
Named polynomial coefficients. |
evaluation.coordinates |
Coordinates on which to evaluate. |
Value
A synthetic truth component.
Examples
synthetic.truth.polynomial(c(b0 = 1, b1 = 2, b11 = -0.5))
Construct a Transported Graph Hessian Operator
Description
Builds an experimental transported-Hessian graph operator without fitting a response. This is the phase-0 through phase-2 diagnostic layer for the transported graph Hessian trend-filtering project: it constructs directed edge differences, matches directions across a base dart, assembles a second- or third-difference diagnostic operator, and returns diagnostics that make the transport rule auditable.
Usage
transported.graph.hessian.operator(
adj.list,
weight.list = NULL,
transport.order = 2L,
transport.rule = c("exact.coordinate", "local.embedding.soft", "edge.angle.hard",
"edge.angle.soft", "regression.gradient"),
coordinates = NULL,
direction.labels = NULL,
polynomial.probes = NULL,
local.embedding.method = c("auto", "coordinates", "grip.edge.kk", "mds.edge.kk",
"cmdscale"),
local.embedding.dim = 2L,
local.disk.hops = 1L,
local.max.vertices = 50L,
return.sparse = TRUE,
tol = 1e-08,
soft.angle.scale = NULL,
soft.length.scale = NULL,
soft.bandwidth = 0.25,
max.match.angle = NULL,
max.length.relative.error = NULL,
min.match.margin = NULL,
max.effective.matches = NULL,
match.threshold.rule = c("none", "fixed", "local.quantile", "local.robust.z"),
match.score.quantile = 0.25,
match.margin.quantile = 0.5,
min.best.score.z = 1,
min.margin.z = 0,
max.effective.match.fraction = NULL,
edge.angle.scale = NULL,
edge.length.scale = NULL,
edge.angle.bandwidth = 0.35,
edge.angle.max.angle.difference = NULL,
edge.angle.max.length.relative.error = NULL,
gradient.coordinate.method = c("coordinates", "local.embedding"),
gradient.embedding.method = c("grip.edge.kk", "mds.edge.kk", "cmdscale"),
gradient.embedding.dim = NULL,
gradient.disk.hops = local.disk.hops,
gradient.max.vertices = local.max.vertices,
gradient.disk.rule = c("hops", "metric.diameter.fraction", "metric.local.scale"),
gradient.disk.radius.fraction = 0.1,
gradient.disk.local.scale.method = c("knn.distance", "median.incident.length",
"quantile.incident.length"),
gradient.disk.local.scale.k = 8L,
gradient.disk.local.scale.quantile = 0.75,
gradient.disk.local.scale.multiplier = 2,
gradient.disk.min.vertices = 0L,
gradient.chart.selection = c("fixed", "adaptive"),
gradient.embedding.candidates = c("cmdscale", "mds.edge.kk"),
gradient.disk.rule.candidates = c("hops", "metric.diameter.fraction",
"metric.local.scale"),
gradient.disk.hops.candidates = 1:5,
gradient.disk.radius.fraction.candidates = c(0.05, 0.075, 0.1, 0.15, 0.2),
gradient.disk.local.scale.multiplier.candidates = c(1, 1.5, 2, 3, 4),
gradient.ridge = 1e-08,
gradient.quadratic.disk.hops = 2L,
gradient.quadratic.max.vertices = gradient.max.vertices
)
Arguments
adj.list |
List of integer neighbor vectors using 1-based vertex indices. The graph must be undirected. |
weight.list |
Optional list of positive edge lengths parallel to
|
transport.order |
Integer scalar, either |
transport.rule |
Character scalar. |
coordinates |
Optional numeric matrix with one row per vertex. For
|
direction.labels |
Optional list parallel to |
polynomial.probes |
Optional numeric vector or matrix with one row per
vertex. If supplied, residual diagnostics
|
local.embedding.method |
Character scalar controlling the coordinates
used by |
local.embedding.dim |
Positive integer embedding dimension for local graph-disk embeddings. |
local.disk.hops |
Non-negative integer hop radius around each base dart used by graph-derived local embedding methods. |
local.max.vertices |
Positive integer cap on local disk size. If a disk is larger, the nearest vertices by hop distance are retained. |
return.sparse |
Logical. If |
tol |
Positive numeric tolerance for coordinate-axis direction inference. |
soft.angle.scale, soft.length.scale |
Optional positive numeric scales
for the soft transport angular and length score components. If |
soft.bandwidth |
Positive numeric softmax bandwidth |
max.match.angle |
Optional non-negative numeric angle threshold in radians. For soft transport, candidate Hessian rows whose best match has angle larger than this threshold are dropped. |
max.length.relative.error |
Optional non-negative numeric threshold for
the best match's relative edge-length error,
|
min.match.margin |
Optional non-negative numeric threshold for the difference between the second-best and best soft-match scores. Candidate rows with smaller margins are dropped. |
max.effective.matches |
Optional positive numeric threshold for
|
match.threshold.rule |
Character scalar. |
match.score.quantile, match.margin.quantile |
Quantile thresholds used
by |
min.best.score.z, min.margin.z |
Non-negative robust-z thresholds used
by |
max.effective.match.fraction |
Optional positive numeric threshold for
|
edge.angle.scale, edge.length.scale |
Optional positive numeric scales
for edge-angle matching. If |
edge.angle.bandwidth |
Positive numeric softmax bandwidth used only by
|
edge.angle.max.angle.difference |
Optional non-negative threshold, in radians, for accepting an edge-angle match. |
edge.angle.max.length.relative.error |
Optional non-negative threshold for accepting an edge-angle match based on relative edge-length error. |
gradient.coordinate.method |
Character scalar used only by
|
gradient.embedding.method |
Character scalar used by
|
gradient.embedding.dim |
Optional positive integer dimension for
graph-derived regression-gradient local charts. If |
gradient.disk.hops |
Non-negative integer hop radius for graph-derived regression-gradient local charts. |
gradient.max.vertices |
Positive integer cap on graph-derived regression-gradient local chart size. |
gradient.disk.rule |
Character scalar controlling graph-derived
regression-gradient disk construction. |
gradient.disk.radius.fraction |
Positive numeric scalar used by
|
gradient.disk.local.scale.method |
Character scalar controlling the
per-vertex metric scale used by |
gradient.disk.local.scale.k |
Positive integer neighborhood index used
by |
gradient.disk.local.scale.quantile |
Numeric probability in
|
gradient.disk.local.scale.multiplier |
Positive numeric scalar
multiplier for |
gradient.disk.min.vertices |
Non-negative integer lower target for
metric disk coverage. Metric disks whose radius selects too few vertices
are expanded to include at least this many nearest vertices, subject to
|
gradient.chart.selection |
Character scalar used only by graph-derived
regression-gradient transport. |
gradient.embedding.candidates |
Character vector of graph-derived local
embedding backends considered by |
gradient.disk.rule.candidates |
Character vector of disk construction
rules considered by |
gradient.disk.hops.candidates |
Non-negative integer vector of hop
radii considered by |
gradient.disk.radius.fraction.candidates |
Positive numeric vector of
graph-diameter fractions considered by |
gradient.disk.local.scale.multiplier.candidates |
Positive numeric
vector of local-scale multipliers considered by
|
gradient.ridge |
Non-negative ridge parameter used by
|
gradient.quadratic.disk.hops |
Non-negative integer hop radius for the
supplied-coordinate local quadratic regressions used by
|
gradient.quadratic.max.vertices |
Positive integer cap on local
quadratic-regression disk size for |
Details
For a dart u\to v, the first difference is
\delta_{u\to v}f = \frac{f(v)-f(u)}{\ell_{uv}}.
For a base dart u\to u' and a matched outgoing direction
u\to v \leftrightarrow u'\to v', the transported Hessian row is
\delta_{u'\to v'}f - \delta_{u\to v}.
The reference rule, transport.rule = "exact.coordinate", matches
directions with identical coordinate labels. Labels may be supplied directly
through direction.labels, or inferred from axis-aligned
coordinates. The first general metric rule,
transport.rule = "local.embedding.soft", uses supplied coordinates to
softly match directions by angle and edge length. The edge-angle rules,
"edge.angle.hard" and "edge.angle.soft", match directions by
comparing their angle relative to the transported base edge.
transport.rule = "regression.gradient" estimates local
least-squares gradients and compares gradient components across graph darts.
Those gradients can be computed either from supplied coordinates or from a
graph-derived local embedding built in a shared disk around each base dart.
Value
A list of class "transported.graph.hessian.operator" with the
canonical graph, directed-edge table, first-difference matrix, transported
Hessian matrix, row metadata, dropped candidate rows, and diagnostics. For
graph-derived regression-gradient transport with supplied
coordinates, the embedding diagnostics also include synthetic
chart-quality checks against those ambient coordinates.
Examples
adj <- list(2L, c(1L, 3L), c(2L, 4L), 3L)
weights <- list(1, c(1, 1), c(1, 1), 1)
x <- 0:3
transported.graph.hessian.operator(
adj, weights, coordinates = matrix(x, ncol = 1),
polynomial.probes = cbind(1, x, x^2)
)
Validate a canonical synthetic dataset
Description
Validate a canonical synthetic dataset
Usage
validate.synthetic.dataset(x)
Arguments
x |
A |
Value
x, invisibly.
Examples
x <- materialize.synthetic(synthetic.registry.spec("G1"), n = 20L, seed = 1L)
validate.synthetic.dataset(x)