]> git.sesse.net Git - pkanalytics/commitdiff
Add offense CIs.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 20 May 2023 20:57:12 +0000 (22:57 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 20 May 2023 20:57:12 +0000 (22:57 +0200)
ultimate.js

index bb116a2f29aa3f79e479e1a68a225b7b02979d67..8da3c244da5a2c0009d90911ad338e3231d8cfff 100644 (file)
@@ -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);