From 6a6f0ced7ff39516eac71744c7b5381b776b6f0d Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 20 May 2023 22:57:12 +0200 Subject: [PATCH] Add offense CIs. --- ultimate.js | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/ultimate.js b/ultimate.js index bb116a2..8da3c24 100644 --- a/ultimate.js +++ b/ultimate.js @@ -61,7 +61,14 @@ function add_3cell_ci(tr, ci) { add_3cell(tr, 'N/A'); return; // FIXME: some SVG padding needed } - let element = add_3cell(tr, ci.val.toFixed(2)); + + let text; + if (ci.format === 'percentage') { + text = (100 * ci.val).toFixed(0) + '%'; + } else { + text = ci.val.toFixed(2); + } + let element = add_3cell(tr, text); let to_x = (val) => { return width * (val - ci.min) / (ci.max - ci.min); }; // Container. @@ -576,8 +583,15 @@ function make_table_offense(players) { let drops = 0; for (const [q,p] of Object.entries(players)) { if (q === 'globals') continue; - let throw_ok = 100 * (1 - p.throwaways / p.num_throws); - let catch_ok = 100 * (p.catches / (p.catches + p.drops)); + let throw_ok = make_binomial_ci(p.num_throws - p.throwaways, p.num_throws, z); + let catch_ok = make_binomial_ci(p.catches, p.catches + p.drops, z); + + throw_ok.format = 'percentage'; + catch_ok.format = 'percentage'; + + // Desire at least 90% percentage. Fairly arbitrary. + throw_ok.desired = 0.9; + catch_ok.desired = 0.9; let row = document.createElement('tr'); add_3cell(row, p.name, 'name'); // TODO: number? @@ -586,18 +600,10 @@ function make_table_offense(players) { add_3cell(row, p.hockey_assists); add_3cell(row, p.num_throws); add_3cell(row, p.throwaways); - if (p.num_throws > 0) { - add_3cell(row, throw_ok.toFixed(0) + '%'); - } else { - add_3cell(row, 'N/A'); - } + add_3cell_ci(row, throw_ok); add_3cell(row, p.catches); add_3cell(row, p.drops); - if (p.catches + p.drops > 0) { - add_3cell(row, catch_ok.toFixed(0) + '%'); - } else { - add_3cell(row, 'N/A'); - } + add_3cell_ci(row, catch_ok); add_3cell(row, '+' + p.offensive_soft_plus); add_3cell(row, '-' + p.offensive_soft_minus); rows.push(row); @@ -609,8 +615,12 @@ function make_table_offense(players) { } // Globals. - let throw_ok = 100 * (1 - throwaways / num_throws); - let catch_ok = 100 * (catches / (catches + drops)); + let throw_ok = make_binomial_ci(num_throws - throwaways, num_throws, z); + let catch_ok = make_binomial_ci(catches, catches + drops, z); + throw_ok.format = 'percentage'; + catch_ok.format = 'percentage'; + throw_ok.desired = 0.9; + catch_ok.desired = 0.9; let row = document.createElement('tr'); add_3cell(row, ''); @@ -619,10 +629,10 @@ function make_table_offense(players) { add_3cell(row, ''); add_3cell(row, num_throws); add_3cell(row, throwaways); - add_3cell(row, throw_ok.toFixed(0) + '%'); + add_3cell_ci(row, throw_ok); add_3cell(row, catches); add_3cell(row, drops); - add_3cell(row, catch_ok.toFixed(0) + '%'); + add_3cell_ci(row, catch_ok); add_3cell(row, ''); add_3cell(row, ''); rows.push(row); -- 2.39.2