turnbull: Compute and display log-likelihood

This commit is contained in:
RunasSudo 2023-10-28 00:49:44 +11:00
parent 6fd0980277
commit 0e39402d3d
Signed by: RunasSudo
GPG Key ID: 7234E476BF21C61A
1 changed files with 17 additions and 0 deletions

View File

@ -81,6 +81,7 @@ pub fn main(args: TurnbullArgs) {
OutputFormat::Text => { OutputFormat::Text => {
println!(); println!();
println!(); println!();
println!("LL = {:.5}", result.ll_model);
let mut summary = Table::new(); let mut summary = Table::new();
let format = format::FormatBuilder::new() let format = format::FormatBuilder::new()
@ -216,6 +217,9 @@ pub fn fit_turnbull(data_times: MatrixXx2<f64>, progress_bar: ProgressBar, max_i
survival_prob.push(acc); survival_prob.push(acc);
} }
// Compute log-likelihood
let ll = compute_log_likelihood(&data, &s);
// -------------------------------------------------- // --------------------------------------------------
// Compute standard errors for survival probabilities // Compute standard errors for survival probabilities
@ -263,6 +267,7 @@ pub fn fit_turnbull(data_times: MatrixXx2<f64>, progress_bar: ProgressBar, max_i
failure_prob: s, failure_prob: s,
survival_prob: survival_prob, survival_prob: survival_prob,
survival_prob_se: survival_prob_se.data.as_vec().clone(), survival_prob_se: survival_prob_se.data.as_vec().clone(),
ll_model: ll,
}; };
} }
@ -361,6 +366,17 @@ fn compute_pi(data: &TurnbullData, s: &Vec<f64>, sum_fail_prob: Vec<f64>) -> Vec
return pi; return pi;
} }
fn compute_log_likelihood(data: &TurnbullData, s: &Vec<f64>) -> f64 {
let mut ll = 0.0;
for (idx_left, idx_right) in data.data_time_interval_indexes.iter() {
let likelihood_ob: f64 = s[*idx_left..(*idx_right + 1)].iter().sum();
ll += likelihood_ob.ln();
}
return ll;
}
fn compute_hessian(data: &TurnbullData, s: &Vec<f64>) -> DMatrix<f64> { fn compute_hessian(data: &TurnbullData, s: &Vec<f64>) -> DMatrix<f64> {
let mut hessian: DMatrix<f64> = DMatrix::zeros(data.num_intervals() - 1, data.num_intervals() - 1); let mut hessian: DMatrix<f64> = DMatrix::zeros(data.num_intervals() - 1, data.num_intervals() - 1);
@ -415,4 +431,5 @@ pub struct TurnbullResult {
pub failure_prob: Vec<f64>, pub failure_prob: Vec<f64>,
pub survival_prob: Vec<f64>, pub survival_prob: Vec<f64>,
pub survival_prob_se: Vec<f64>, pub survival_prob_se: Vec<f64>,
pub ll_model: f64,
} }