R/trendfilter.R
dot-trendfilter.RdFit a trend filtering model.
.trendfilter( x, y, weights = NULL, lambda, edf = NULL, k = 2L, obj_tol = 1e-10, max_iter = length(y), ... )
| x | Vector of observed values for the input variable. |
|---|---|
| y | Vector of observed values for the output variable. |
| weights | Weights for the output measurements. Output weights are defined as the
inverse variance of the additive noise that contaminates the output signal.
When the noise is expected to have a constant variance \(\sigma^2\)
over all outputs, a scalar may be passed to |
| lambda | One or more hyperparameter values to fit a trend filtering estimate for. |
| edf | (Not yet available) Alternative hyperparametrization for the trend filtering model(s). Vector of the desired number of effective degrees of freedom in each model. |
| k | Degree of the polynomials that make up the piecewise-polynomial trend
filtering estimate. Defaults to |
| obj_tol | Stopping criterion for the trend filtering convex optimization. If the
relative change in the trend filtering objective function between two
successive iterations is less than |
| max_iter | Maximum number of iterations that we will tolerate for the trend filtering
convex optimization algorithm. Defaults to |
| ... | Additional named arguments. Currently unused. |
| scale | A logical indicating whether to scale the inputs and outputs. |
An object of class 'trendfilter'. Generic functions such as
predict(), fitted(), and residuals() may be called on any object
of class (or subclass) 'trendfilter'. A 'trendfilter' object is a list
with the following elements:
xVector of observed values for the input variable.
yVector of observed values for the output variable (if originally
present, observations with is.na(y) or weights == 0 are dropped).
weightsVector of weights for the observed outputs.
kDegree of the trend filtering estimate.
lambdaVector of candidate hyperparameter values (always returned in descending order).
edfNumber of effective degrees of freedom in the trend filtering
estimator, for every hyperparameter value in lambda.
fitted_valuesThe fitted values of the trend filtering estimate(s).
If length(lambda) == 1, fitted values for the single fit are returned as a
numeric vector. Otherwise, fitted values are returned in a matrix with
length(lambda) columns, with fitted_values[,i] corresponding to the trend
filtering estimate with hyperparameter lambda[i].
admm_paramsA list of the parameter values used by the ADMM algorithm used to solve the trend filtering convex optimization.
obj_funcThe relative change in the objective function over the
ADMM algorithm's final iteration, for every hyperparameter value in
lambda.
n_iterTotal number of iterations taken by the ADMM algorithm, for
every hyperparameter value in lambda. If an element of n_iter is exactly
equal to admm_params$max_iter, then the ADMM algorithm stopped before
reaching the objective tolerance admm_params$obj_tol. In these situations,
you may need to increase the maximum number of tolerable iterations in order
to ensure that the ADMM solution has converged to satisfactory precision.
This can be done by passing an extra argument max_iter to the
.trendfilter function call and increasing it from its default value
max_iter = length(y).
statusFor internal use. Output from the C solver.
callThe function call.
scale_xyFor internal use.
Politsch et al. (2020a). Trend filtering – I. A modern statistical tool for time-domain astronomy and astronomical spectroscopy. MNRAS, 492(3), p. 4005-4018. [Publisher] [arXiv].
Politsch et al. (2020b). Trend Filtering – II. Denoising astronomical signals with varying degrees of smoothness. MNRAS, 492(3), p. 4019-4032. [Publisher] [arXiv].
#> # A tibble: 6 × 3 #> phase flux std_err #> <dbl> <dbl> <dbl> #> 1 -0.499 0.938 0.0102 #> 2 -0.498 0.930 0.0102 #> 3 -0.496 0.944 0.0102 #> 4 -0.494 0.963 0.0102 #> 5 -0.494 0.934 0.0102 #> 6 -0.494 0.949 0.0102x <- eclipsing_binary$phase y <- eclipsing_binary$flux weights <- 1 / eclipsing_binary$std_err^2 fit <- .trendfilter( x, y, weights, lambda = exp(10), obj_tol = 1e-6, max_iter = 1e4 )