View source: R/matrix_multiplication.R
| b_mat_mult | R Documentation |
Multiplies a given vector by B, the extended discrete derivative matrix of a given order, with respect to given design points.
b_mat_mult(v, k, xd, tf_weighting = FALSE, transpose = FALSE, inverse = FALSE)
v |
Vector to be multiplied by B, the extended discrete derivative matrix. |
k |
Order for the extended discrete derivative matrix. Must be >= 0. |
xd |
Design points. Must be sorted in increasing order, and have length
at least |
tf_weighting |
Should "trend filtering weighting" be used? This is a
weighting of the discrete derivatives that is implicit in trend filtering;
see details for more information. The default is |
transpose |
Multiply by the transpose of B? The default is |
inverse |
Multiply by the inverse of B? The default is |
The extended discrete derivative matrix of order k, with
respect to design points x_1 < \ldots < x_n, is denoted
B^k_n. It is square, having dimension n \times n. Acting on a
vector v of function evaluations at the design points, denoted v
= f(x_{1:n}), it gives the discrete derivatives of f at the points
x_{1:n}:
B^k_n v = (\Delta^k_n f) (x_{1:n}).
The matrix B^k_n can be constructed recursively as the product of a
diagonally-weighted first difference matrix and B^{k-1}_n; see the
help file for b_mat(), or Section 6.2 of Tibshirani (2020). Therefore,
multiplication by B^k_n or by its transpose can be performed in
O(nk) operations based on iterated weighted differences. See Appendix
D of Tibshirani (2020) for details.
The option tf_weighting = TRUE performs multiplication by Z^k_n B^k_n
where Z^k_n is an n \times n diagonal matrix whose top left
k \times k block equals the identity matrix and bottom right
(n-k) \times (n-k) block equals W^k_n, the latter being a
diagonal weight matrix that is implicit in trend filtering, as explained in
the help file for d_mat_mult().
Lastly, the matrix B^k_n has a special inverse relationship to the
falling factorial basis matrix H^{k-1}_n of degree k-1 with
knots in x_{k:(n-1)}; it satisfies:
Z^k_n B^k_n H^{k-1}_n = I_n,
where Z^k_n is the n \times n diagonal matrix as described
above, and I_n is the n \times n identity matrix. This,
combined with the fact that the falling factorial basis matrix has an
efficient recursive representation in terms of weighted cumulative sums,
means that multiplying by (B^k_n)^{-1} or its transpose can be
performed in O(nk) operations. See Section 6.3 and Appendix D of
Tibshirani (2020) for details.
Product of the extended discrete derivative matrix B and the input
vector v.
Tibshirani (2020), "Divided differences, falling factorials, and discrete splines: Another look at trend filtering and related problems", Section 6.2.
discrete_deriv() for discrete differentiation at arbitrary query
points, d_mat_mult() for multiplying by the discrete derivative matrix,
and b_mat() for constructing the extended discrete derivative matrix.
v = sort(runif(10))
as.vector(b_mat(2, 1:10) %*% v)
b_mat_mult(v, 2, 1:10)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.