| Type: | Package | 
| Title: | Function-on-Scalar Regression with Group-Bridge Penalty | 
| Version: | 0.9.2 | 
| License: | MIT + file LICENSE | 
| Description: | Implements a group-bridge penalized function-on-scalar regression model proposed by Wang et al. (2023) <doi:10.1111/biom.13684>, to simultaneously estimate functional coefficient and recover the local sparsity. | 
| URL: | https://github.com/dipterix/spfda, https://dipterix.org/spfda/ | 
| BugReports: | https://github.com/dipterix/spfda/issues | 
| Imports: | stats, splines, graphics, mathjaxr | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| RdMacros: | mathjaxr | 
| BuildManual: | TRUE | 
| Language: | en-US | 
| Suggests: | grpreg, refund | 
| NeedsCompilation: | no | 
| Packaged: | 2025-05-07 21:25:19 UTC; dipterix | 
| Author: | Zhengjia Wang | 
| Maintainer: | Zhengjia Wang <dipterix.wang@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-05-07 21:40:02 UTC | 
Ported function from 'refund' package
Description
A modified version of fosr.vs, but
with groups parameter to allow grouping time points rather than the
whole coefficient when the underlying functions are locally supported.
Usage
fosr_vs(
  formula,
  data,
  nbasis = 10,
  method = c("ls", "grLasso", "grMCP", "grSCAD"),
  epsilon = 1e-05,
  max.iter_num = 100,
  groups = NULL
)
Arguments
| formula,data,nbasis,method,epsilon,max.iter_num | see
 | 
| groups | integer vector with length of number of time-points
of how time-points should be grouped; default
is  | 
Sparse Function-on-scalar Regression with Group Bridge Penalty
Description
Function-on-scalar regression model, denote \(n\) as total number of observations, \(p\) the number of coefficients, \(K\) as the number of B-splines, \(T\) as total time points.
Usage
spfda(
  Y,
  X,
  lambda,
  time = seq(0, 1, length.out = ncol(Y)),
  nsp = "auto",
  ord = 4,
  alpha = 0.5,
  W = NULL,
  init = NULL,
  max_iter = 50,
  inner_iter = 50,
  CI = FALSE,
  ...
)
Arguments
| Y | Numeric \(n \times T\) matrix, response function. | 
| X | Numeric \(n \times p\) matrix, design matrix | 
| lambda | Regularization parameter \(\gamma\) | 
| time | Time domain, numerical length of \(T\) | 
| nsp | Integer or 'auto', number of B-splines \(K\); default is 'auto' | 
| ord | B-spline order, default is  | 
| alpha | Bridge parameter \(\alpha\), default is  | 
| W | A \(T \times T\) weight matrix or  | 
| init | Initial \(\gamma\); default is  | 
| max_iter | Number of outer iterations | 
| inner_iter | Number of \(ADMM\) iterations (inner steps) | 
| CI | Logical, whether to calculate theoretical confidence intervals | 
| ... | Ignored | 
Details
This function implements "Functional Group Bridge for Simultaneous
Regression and Support Estimation" (doi:10.1111/biom.13684).
The model estimates functional coefficients \(\beta(t)\) under model
\[y(t) = X\beta(t) + \epsilon(t)\] with B-spline basis expansion
\[\beta(t) = \gamma B(t) + R(t), \] where \( R(t) \) is B-spline
approximation error. The objective function
\[
\left\| (Y-X\gamma B)W \right\|_{2}^{2} + \sum_{j,m}
\left\| \gamma_{j}^{T}\mathbf{1}(B^{t} > 0) \right\|_{1}^{\alpha}.
\]
The input response variable is a matrix. If \(y_{i}(t)\) are observed
at different time points, please interpolate (e.g.
kernel) before feeding in.
Value
A spfda.model object (environment) with following elements:
- B
- B-spline basis functions used 
- error
- Root Mean Square Error ('RMSE') 
- CI
- Whether confidence intervals are calculated 
- gamma
- B-spline coefficient \(\gamma_{p \times K}\) 
- generate_splines
- Function to generate B-splines given time points 
- K
- Number of B-spline basis functions 
- knots
- B-spline knots used to fit the model 
- predict
- Function to predict responses \(\beta(t)\) given new - Xand/or time points
- raw
- A list of raw variables 
Examples
dat <- spfda_simulate()
x <- dat$X
y <- dat$Y
fit <- spfda(y, x, lambda = 5, CI = TRUE)
BIC(fit)
plot(fit, col = c("orange", "dodgerblue3", "darkgreen"),
     main = "Fitted with 95% CI", aty = c(0, 0.5, 1), atx = c(0,0.2,0.8,1))
matpoints(fit$time, t(dat$env$beta), type = 'l', col = 'black', lty = 2)
legend('topleft', c("Fitted", "Underlying"), lty = c(1,2))
print(fit)
coefficients(fit)
Generates toy example data
Description
Synthesized functional signals with heterogeneous error. The underlying three coefficients correspond to 'dense', 'global sparse', and 'local sparse' functions. See doi:10.1111/biom.13684 for detailed configurations.
Usage
spfda_simulate(n = 1000, n_timepoints = 100, err = 1, scale = c(1, 1, 1))
Arguments
| n | Total number of observations | 
| n_timepoints | Total number of time points | 
| err | Error magnitude | 
| scale | the scale of coefficients length of 1 or 3. | 
Value
A list of data generated: X is scalar predictor, Y is
functional response.
Calculates weight matrices
Description
Calculates weight matrices
Usage
spfda_weight(X, Y, bandwidth, part)
Arguments
| X | design matrix | 
| Y | response matrix | 
| bandwidth | numeric band-width | 
| part | list of time point boundaries | 
Value
the weight matrix