Arcturex/brca-navigator
0
1# 02_risk_score.R2# Builds the combined Cox risk score model, computes percentile rankings,3# and 3-year survival probabilities for every patient.4# Run this AFTER data_prep.R (needs data/patient_data.csv)5#6# Usage: source("dashboard_app/scripts/02_risk_score.R")7 8library(survival)9library(dplyr)10 11data_dir <- "C:/Users/hp/Dev/playground/PO3/dashboard_app/data"12 13patient_data <- read.csv(file.path(data_dir, "patient_data.csv"), row.names = 1)14 15# ---- Build combined Cox model using top factors + clinical variables ----16cox_combined <- coxph(17 Surv(os_time, os_event) ~ Factor5 + Factor14 + Factor8 + age + stage,18 data = patient_data19)20 21# ---- Compute risk score (linear predictor) ----22patient_data$risk_score <- predict(cox_combined, type = "lp")23 24# ---- Compute percentile ranking ----25patient_data$risk_percentile <- percent_rank(patient_data$risk_score) * 10026 27# ---- Compute 3-year survival probability ----28sf <- survfit(cox_combined, newdata = patient_data)29sf_sum <- summary(sf, times = 1095)30patient_data$surv_3yr <- if (is.matrix(sf_sum$surv)) sf_sum$surv[1, ] else sf_sum$surv31 32# ---- Save ----33write.csv(patient_data, file.path(data_dir, "patient_data.csv"))34saveRDS(cox_combined, file.path(data_dir, "cox_combined.rds"))35 36cat("Risk scores computed and saved.\n")37cat(" Patients:", nrow(patient_data), "\n")38cat(" Risk score range:", round(range(patient_data$risk_score, na.rm = TRUE), 3), "\n")39cat(" 3-year survival range:", round(range(patient_data$surv_3yr, na.rm = TRUE), 3), "\n")40 