## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>") library(risdr) ## ----data--------------------------------------------------------------------- set.seed(2026) X <- matrix(rnorm(100 * 8), nrow = 100) colnames(X) <- paste0("Gene", seq_len(ncol(X))) event_time <- rexp(100, rate = exp(0.5 * X[, 1] - 0.3 * X[, 2])) censor_time <- rexp(100, rate = 0.5) time <- pmin(event_time, censor_time) delta <- as.integer(event_time <= censor_time) table(delta) ## ----fit---------------------------------------------------------------------- fit <- fit_risdr_sparse( X, time, delta = delta, response_type = "survival", sdr_method = "sir", cov_method = "oas", nslices = 4, d_max = 3, selector = "cicomp", lambda_grid = c(0, 0.05, 0.1), support_penalty = FALSE ) c(d = fit$d, lambda = fit$best_lambda) fit$selection_grid ## ----support------------------------------------------------------------------ B <- fit$directions support <- data.frame(variable = rownames(B), norm = sqrt(rowSums(B^2))) support <- support[support$norm > 1e-8, , drop = FALSE] support[order(support$norm, decreasing = TRUE), , drop = FALSE] ## ----dual--------------------------------------------------------------------- dual <- fit_risdr_dual( X, time, delta = delta, response_type = "survival", dual_rank = 5, d_max = 3, sdr_method = "sir", cov_method = "oas", lambda_grid = c(0, 0.05, 0.1), gene_select_top = 4, verbose = FALSE ) dual$selected_variables ## ----prediction--------------------------------------------------------------- predict(fit, X[1:2, , drop = FALSE], type = "scores") predict(fit, X[1:2, , drop = FALSE], type = "risk") predict(dual, X[1:2, , drop = FALSE], type = "scores") ## ----ph----------------------------------------------------------------------- survival::cox.zph(fit$downstream_fit, transform = "km", terms = TRUE, global = TRUE)