Adds an all-ones vector as a fixed set of loadings (if rowwise = TRUE
)
or fixed factor (if rowwise = FALSE
). Assuming (without loss of
generality) that the fixed factor/loadings is indexed as \(k = 1\),
a fixed set of loadings gives:
$$\mathbf{y}_{i \cdot} \approx \mathbf{f}_1 + \sum_{k = 2}^K \ell_{i k}
\mathbf{f}_k,$$
so that the (estimated) factor \(\mathbf{f}_1 \in \mathbf{R}^p\) is shared
by all row-wise observations \(\mathbf{y}_{i \cdot} \in \mathbf{R}^p\).
A fixed factor gives:
$$\mathbf{y}_{\cdot j} \approx \boldsymbol{\ell}_1 + \sum_{k = 2}^K f_{j k}
\boldsymbol{\ell}_k,$$
so that the (estimated) set of loadings \(\ell_1 \in \mathbf{R}^n\) is
shared by all column-wise observations \(y_{\cdot j} \in \mathbf{R}^n\).
flash_add_intercept(flash, rowwise = TRUE, ebnm_fn = ebnm_point_normal)
A flash
or flash_fit
object to which an "intercept"
is to be added.
Should the all-ones vector be added as a fixed set of loadings ("row-wise") or a fixed factor ("column-wise")? See above for details.
As with other factor/loadings pairs, a prior is put on the
estimated factor (if rowwise = TRUE
) or set of loadings (if
rowwise = FALSE
). Parameter ebnm_fn
specifies the function
used to estimate that prior; see flash
for details.
The flash
object from argument flash
, with an
"intercept" added.
The estimated factor (if rowwise = TRUE
) or set of loadings
(if rowwise = FALSE
) is initialized at the column-
or row-wise means of the data (or, if factor/loadings pairs have previously
been added, at the column- or row-wise means of the matrix of residuals)
and then backfit via function flash_backfit
.
# The following are equivalent:
init <- list(matrix(rowMeans(gtex), ncol = 1),
matrix(1, nrow = ncol(gtex)))
fl <- flash_init(gtex) |>
flash_factors_init(init) |>
flash_factors_fix(kset = 1, which_dim = "factors") |>
flash_backfit(kset = 1)
#> Backfitting 1 factors (tolerance: 6.56e-04)...
#> Difference between iterations is within 1.0e-01...
#> Difference between iterations is within 1.0e-02...
#> Wrapping up...
#> Done.
fl <- flash_init(gtex) |>
flash_add_intercept(rowwise = FALSE)
#> Backfitting 1 factors (tolerance: 6.56e-04)...
#> Difference between iterations is within 1.0e-01...
#> Difference between iterations is within 1.0e-02...
#> Wrapping up...
#> Done.