cox_hazards/
lib.rs

1//! # cox hazards regression
2//! 
3//! cox proportional hazards w/ elastic net regularization - survival analysis made easy
4//! 
5//! ## what you get
6//! 
7//! - standard cox regression 
8//! - elastic net (ridge + lasso) for regularization
9//! - multiple solvers that actually work
10//! - all the survival metrics you need
11//! - parallel processing when you want it
12//! 
13//! ## quick start
14//! 
15//! ```rust
16//! use cox_hazards::{CoxModel, SurvivalData};
17//! use ndarray::Array2;
18//! 
19//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
20//! // setup some survival data
21//! let times = vec![1.0, 2.5, 3.2, 4.1];
22//! let events = vec![true, false, true, true]; // true = died, false = censored
23//! let covariates = Array2::from_shape_vec((4, 2), vec![
24//!     1.0, 0.5,  // patient features
25//!     2.0, 1.0, 
26//!     1.5, 0.0,
27//!     3.0, 1.5,
28//! ])?;
29//! let data = SurvivalData::new(times, events, covariates)?;
30//! 
31//! // fit w/ some regularization 
32//! let mut model = CoxModel::new()
33//!     .with_l1_penalty(0.1)    // lasso
34//!     .with_l2_penalty(0.1);   // ridge
35//! 
36//! model.fit(&data)?;
37//! 
38//! // get risk scores
39//! let risk_scores = model.predict(data.covariates())?;
40//! # Ok(())
41//! # }
42//! ```
43
44pub mod data;
45pub mod model;
46pub mod optimization;
47pub mod metrics;
48pub mod error;
49
50pub use data::SurvivalData;
51pub use model::CoxModel;
52pub use error::{CoxError, Result};
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57    use ndarray::Array2;
58
59    #[test]
60    fn test_basic_functionality() {
61        let n_samples = 100;
62        let n_features = 5;
63        
64        let times = vec![1.0; n_samples];
65        let events = vec![true; n_samples];
66        let covariates = Array2::zeros((n_samples, n_features));
67        
68        let data = SurvivalData::new(times, events, covariates).unwrap();
69        assert_eq!(data.n_samples(), n_samples);
70        assert_eq!(data.n_features(), n_features);
71    }
72}