This is a helper function to form the design matrix for an LNM regression starting from a fitted model's formula object. It is an analog of model.matrix for the multiresponse setting.
Value
A matrix containing the design matrix that can be multiplied with the fitted Beta parameter to get fitted compositions.
Examples
example_data <- lnm_data(N = 10, K = 5)
xy <- dplyr::bind_cols(example_data[c("X", "y")])
fit <- lnm(
starts_with("y") ~ starts_with("x"), xy,
iter = 5, output_samples = 5
)
#> Chain 1: ------------------------------------------------------------
#> Chain 1: EXPERIMENTAL ALGORITHM:
#> Chain 1: This procedure has not been thoroughly tested and may be unstable
#> Chain 1: or buggy. The interface is subject to change.
#> Chain 1: ------------------------------------------------------------
#> Chain 1:
#> Chain 1:
#> Chain 1:
#> Chain 1: Gradient evaluation took 0.000225 seconds
#> Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 2.25 seconds.
#> Chain 1: Adjust your expectations accordingly!
#> Chain 1:
#> Chain 1:
#> Chain 1: Begin eta adaptation.
#> Chain 1: Iteration: 1 / 250 [ 0%] (Adaptation)
#> Chain 1: Iteration: 50 / 250 [ 20%] (Adaptation)
#> Chain 1: Iteration: 100 / 250 [ 40%] (Adaptation)
#> Chain 1: Iteration: 150 / 250 [ 60%] (Adaptation)
#> Chain 1: Iteration: 200 / 250 [ 80%] (Adaptation)
#> Chain 1: Success! Found best value [eta = 1] earlier than expected.
#> Chain 1:
#> Chain 1: Begin stochastic gradient ascent.
#> Chain 1: iter ELBO delta_ELBO_mean delta_ELBO_med notes
#> Chain 1: Informational Message: The maximum number of iterations is reached! The algorithm may not have converged.
#> Chain 1: This variational approximation is not guaranteed to be meaningful.
#> Chain 1:
#> Chain 1: Drawing a sample of size 5 from the approximate posterior...
#> Chain 1: COMPLETED.
#> Warning: Pareto k diagnostic value is Inf. Resampling is disabled. Decreasing tol_rel_obj may help if variational algorithm has terminated prematurely. Otherwise consider using sampling instead.
prepare_newdata(fit, example_data[["X"]])
#> x1 x2 x3 x4 x5
#> [1,] 0.8691588 0.63997809 0.08499672 0.37166316 0.64528986
#> [2,] 0.8318093 0.13841396 0.37321757 0.90653242 0.87672139
#> [3,] 0.7304703 0.14634828 0.75709682 0.39090372 0.42113152
#> [4,] 0.8641693 0.54498288 0.54703671 0.29194296 0.26292367
#> [5,] 0.3283597 0.33287180 0.79881086 0.34307562 0.33022216
#> [6,] 0.5213470 0.35615271 0.69941585 0.98285016 0.80585176
#> [7,] 0.2177818 0.76332229 0.46499809 0.54127667 0.44622483
#> [8,] 0.4716660 0.03485284 0.34652771 0.59440444 0.04632583
#> [9,] 0.2992181 0.35937606 0.48448467 0.08369045 0.97358461
#> [10,] 0.3954228 0.23330852 0.23017752 0.30293790 0.05083695