Survival dimension reduction and row-support selection

A dense SAVE basis reduces the predictors to a small set of scores. A Cox model is fitted to those scores. The row-support path then evaluates subsets of the original predictors by truncating the fitted basis and refitting the Cox model.

library(ssurvdr)
dat <- simulate_ssurvdr(n = 100, p = 12, active = 1:3, seed = 2026)
fit <- fit_ssurvdr(dat$X, dat$time, dat$status, d = 2,
                  n_slices = 3, covariance = "mec", backend = "primal")
fit$criteria
#>       criterion    value
#> 1           AIC 427.8951
#> 2           BIC 433.1054
#> 3          CAIC 435.1054
#> 4    ICOMP_IFIM 423.9302
#> 5 ICOMP_MISSPEC 424.0991
path <- fit_ssurvdr_sparse_path(dat$X, dat$time, dat$status,
                               dense_fit = fit, support_grid = c(4, 8, 12))
path$path
#>   support_size support_fraction retained_energy_proportion
#> 1            4        0.3333333                  0.5408401
#> 2            8        0.6666667                  0.8532966
#> 3           12        1.0000000                  1.0000000
#>   projection_distance_from_dense orthogonality_error      AIC      BIC     CAIC
#> 1                      1.3552268        4.440892e-16 430.0743 435.2847 437.2847
#> 2                      0.7660375        2.220446e-16 429.2443 434.4546 436.4546
#> 3                      0.0000000        2.220446e-16 427.8951 433.1054 435.1054
#>   ICOMP_IFIM ICOMP_MISSPEC   c_index c_index_se runtime_seconds
#> 1   426.0928      426.1755 0.5498155 0.04581237      0.02411699
#> 2   425.2594      425.3125 0.5749748 0.04381670      0.02133012
#> 3   423.9302      424.0991 0.5816840 0.04248321      0.05374599
#>   is_dense_support status error_message
#> 1            FALSE     ok          <NA>
#> 2            FALSE     ok          <NA>
#> 3             TRUE     ok          <NA>

Full support remains in the path so that sparsity is not forced. The procedure uses the existing reduced Cox criteria; it adds no separate predictor-support penalty. Training criterion selection is not an independent prediction assessment.

Basis-adaptive weights

weights <- compute_c1f_weights(fit$basis_fit)
range(weights$weights)
#> [1] 0.5242278 2.2526199
weights$c1f
#> [1] NA

With no matrix supplied, weights depend on the estimated basis row norms and the scalar diagnostic is missing. With a matrix, the weights also use a loading-weighted eigenvalue-dispersion adjustment. The historical c1f output field contains the C1 arithmetic/geometric eigenvalue expression implemented by this package; it does not directly enter the weights.

Validation

For a test set, reuse the training centring/scaling and fitted basis. Never estimate those transformations on the test outcomes. The package’s simulation evaluation function reports training concordance; the separate research scripts implement the thesis validation workflows.