## ----impact-setup, include = FALSE--------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")

## ----sign-convention----------------------------------------------------------
library(rnaSentry)
library(SummarizedExperiment)
library(survival)

# Synthetic cohort for the sign-convention demo (real GEO via GEOquery
# shown in case-study-brca; synthetic used here for offline builds).
# NOTE: seed deliberately differs from any GEO accession so future
# `git log -S "set.seed(20685)"` audits stay unambiguous.
set.seed(42)
n_genes <- 3000
n_samples <- 327
genes <- paste0("GENE", seq_len(n_genes))
samples <- paste0("Sample", seq_len(n_samples))
mat <- matrix(rnorm(n_genes * n_samples, mean = 6, sd = 1.5),
              nrow = n_genes, ncol = n_samples,
              dimnames = list(genes, samples))
risk0 <- colMeans(mat[1:5, , drop = FALSE])
event_time <- rexp(n_samples, rate = 0.08 * exp(0.6 * scale(risk0)[, 1]))
censor_time <- rexp(n_samples, rate = 0.04)
time <- pmin(event_time, censor_time)
event <- as.integer(event_time < censor_time)
coldata <- S4Vectors::DataFrame(time = time, event = event,
                                row.names = samples)
se <- SummarizedExperiment(assays = list(logcounts = mat), colData = coldata)
score <- colMeans(assays(se)$logcounts[1:5, , drop = FALSE])
c_default <- as.numeric(concordance(Surv(se$time, se$event) ~
                                    score)$concordance[1])
c_reverse <- as.numeric(concordance(Surv(se$time, se$event) ~ score,
                                    reverse = TRUE)$concordance[1])
c(c_default = c_default, c_reverse = c_reverse, sum = c_default + c_reverse)

## ----pipeline-demo, warning = TRUE--------------------------------------------
run <- run_rnaSentry(se, time_col = "time", event_col = "event",
                     top_n = 5, repeats = 2, folds = 3, seed = 42,
                     render_report = FALSE)
run$stages$build_signature$flags

## ----unlock-impact------------------------------------------------------------
run$stages$build_signature <-
    lock_signature(run$stages$build_signature, lock = FALSE)

## ----luad-null-demo-----------------------------------------------------------
set.seed(7)
n_genes <- 120
n_samples <- 80
cnt <- matrix(rpois(n_genes * n_samples, lambda = 500),
              nrow = n_genes, ncol = n_samples,
              dimnames = list(paste0("gene", seq_len(n_genes)),
                              paste0("S", seq_len(n_samples))))
sig_expr <- colMeans(cnt[1:5, , drop = FALSE])
risk <- scale(sig_expr)[, 1] * 0.4
event_time <- rexp(n_samples, rate = 0.03 * exp(0.8 * risk))
censor_time <- rexp(n_samples, rate = 0.02)
cd <- S4Vectors::DataFrame(time = pmin(event_time, censor_time),
                           event = as.integer(event_time < censor_time),
                           row.names = colnames(cnt))
se_null <- SummarizedExperiment(assays = list(counts = cnt), colData = cd)
discovery <- se_null[, seq_len(60)]
external <- se_null[, 61:80]

sig_null <- build_signature(discovery, "time", "event", top_n = 5,
                            repeats = 2, folds = 3, seed = 7)
cat("Screening-internal CV C:", mean(sig_null$cv_results$c_index), "\n")

km_null <- km_curve(sig_null, discovery)
val_null <- validate_external(sig_null, external,
                              cutpoint = km_null$cutpoint)
cat("External C:", val_null$concordance, "\n")
cat("External log-rank p:", val_null$log_rank_p, "\n")

## ----session-info-------------------------------------------------------------
sessionInfo()

