{
 "about": {
  "method": "column-outliers",
  "origin": "Original synthetic values, not experimental data",
  "ruling": "CSO memo of 13 October 2026 (docs/board/memos/2026-10-13-cso-outlier-candidates.md); roadmap A-2 family 7",
  "settings": {
   "grubbs": "G from outliers::grubbs.test(x, type = 10, two.sided = TRUE); p = min(1, 2n P(T > t_G)) on n - 2 df; candidate when p < 0.05 (fixed); n >= 6",
   "critical": "((n - 1)/sqrt(n)) sqrt(t^2/(n - 2 + t^2)), t = qt(1 - 0.05/(2n), n - 2)",
   "groups": "rstudent(lm(value ~ group)); df = N - k - 1; Bonferroni min(1, N p); every n_g >= 3; N - k >= 6",
   "cells": "a number is a value; None blank; {text} text; {excluded} kept, never read; only values enter n"
  },
  "withheldCodes": [
   "GRUBBS_N",
   "NO_SPREAD",
   "GROUP_COUNT",
   "GROUP_N",
   "RESIDUAL_DF"
  ],
  "tolerances": {
   "G, t, critical G, mean, SD": "1e-9 relative",
   "p (Grubbs bound, adjusted residual p)": "1e-8 relative",
   "n, counts, rows, candidate flags and withheld codes": "exact"
  },
  "recordedOn": "2026-10-13",
  "script": "pipeline/assay-analyser/oracles/column_outliers.py",
  "scriptSha256": "b0705df95333f3d8ad1efe715fff397521bb85a45db1010d317aa8504ec961a5",
  "helper": {
   "script": "pipeline/assay-analyser/oracles/stage_a_oracle.py",
   "sha256": "492d85ca2fa6750db80b1c64214fd4a0b13cd4c588267244f6262c504c73e3e8"
  },
  "environment": {
   "image": "ghcr.io/biotechmat/drybench/oracle-env:11b8a5e4456df7eb@sha256:7e69891ca1d9f24838660e0a9887bdb654ce7771d2f2ac7e7275e9b1eb3b6a09",
   "r": "R version 4.4.3 (2025-02-28)",
   "packages": {
    "jsonlite": "2.0.0",
    "outliers": "0.15",
    "car": "3.1-5"
   },
   "python": "3.11.15",
   "numpy": "2.0.2",
   "scipy": "1.13.1",
   "recordedOn": "2026-10-13",
   "cpu": "AMD EPYC 9V45 96-Core Processor",
   "cpuClass": "x86-64-v3",
   "simd": [
    "SSSE3",
    "SSE41",
    "POPCNT",
    "SSE42",
    "AVX",
    "F16C",
    "FMA3",
    "AVX2"
   ],
   "openblasCore": "Haswell",
   "threads": 1
  },
  "crossCheck": {
   "tool": "SciPy stats.t and NumPy; car::outlierTest as the gate for Grubbs' p",
   "ran": true,
   "cases": 84,
   "agreeing": 80,
   "result": [
    {
     "what": "n-6-planted/A p vs grubbs.test",
     "r": 0.000228581736286532,
     "other": 0.000228581736285705,
     "agrees": true
    },
    {
     "what": "n-6-planted/A p vs car::outlierTest",
     "r": 0.000228581736286532,
     "other": 0.000228581736286532,
     "agrees": true
    },
    {
     "what": "n-6-planted/A max |rstudent| = t_G",
     "r": 19.8374021112274,
     "other": 19.8374021112274,
     "agrees": true
    },
    {
     "what": "n-6-planted/A bound (SciPy)",
     "r": 0.000228581736286532,
     "other": 0.00022858173628653066,
     "agrees": true
    },
    {
     "what": "n-6-planted/A SD (NumPy)",
     "r": 1.71512876095839,
     "other": 1.715128760958391,
     "agrees": true
    },
    {
     "what": "n-6-clean/A p vs grubbs.test",
     "r": 0.873966095225308,
     "other": 0.873966095225308,
     "agrees": true
    },
    {
     "what": "n-6-clean/A p vs car::outlierTest",
     "r": 0.873966095225308,
     "other": 0.87396609522532,
     "agrees": true
    },
    {
     "what": "n-6-clean/A max |rstudent| = t_G",
     "r": 1.80340019192973,
     "other": 1.80340019192975,
     "agrees": true
    },
    {
     "what": "n-6-clean/A bound (SciPy)",
     "r": 0.873966095225308,
     "other": 0.8739660952253049,
     "agrees": true
    },
    {
     "what": "n-6-clean/A SD (NumPy)",
     "r": 0.231660671385254,
     "other": 0.23166067138525404,
     "agrees": true
    },
    {
     "what": "five-equal-one-different/A p vs grubbs.test",
     "r": 0,
     "other": 0.0,
     "agrees": true
    },
    {
     "what": "five-equal-one-different/A p vs car::outlierTest",
     "r": 0,
     "other": 3.52,
     "agrees": false
    },
    {
     "what": "five-equal-one-different/A SD (NumPy)",
     "r": 2.44948974278318,
     "other": 2.449489742783178,
     "agrees": true
    },
    {
     "what": "symmetric-tie/A p vs grubbs.test",
     "r": 0.240157962300355,
     "other": 0.240157962300355,
     "agrees": true
    },
    {
     "what": "symmetric-tie/A p vs car::outlierTest",
     "r": 0.240157962300355,
     "other": 0.240157962300355,
     "agrees": true
    },
    {
     "what": "symmetric-tie/A max |rstudent| = t_G",
     "r": 2.82842712474619,
     "other": 2.82842712474619,
     "agrees": true
    },
    {
     "what": "symmetric-tie/A bound (SciPy)",
     "r": 0.240157962300355,
     "other": 0.24015796230035513,
     "agrees": true
    },
    {
     "what": "symmetric-tie/A SD (NumPy)",
     "r": 2.67261241912424,
     "other": 2.6726124191242437,
     "agrees": true
    },
    {
     "what": "masking-two-extremes/A p vs grubbs.test",
     "r": 0.588543128735652,
     "other": 0.588543128735651,
     "agrees": true
    },
    {
     "what": "masking-two-extremes/A p vs car::outlierTest",
     "r": 0.588543128735652,
     "other": 0.588543128735652,
     "agrees": true
    },
    {
     "what": "masking-two-extremes/A max |rstudent| = t_G",
     "r": 2.1649972140799,
     "other": 2.1649972140799,
     "agrees": true
    },
    {
     "what": "masking-two-extremes/A bound (SciPy)",
     "r": 0.588543128735652,
     "other": 0.58854312873565,
     "agrees": true
    },
    {
     "what": "masking-two-extremes/A SD (NumPy)",
     "r": 2.38713067450084,
     "other": 2.387130674500844,
     "agrees": true
    },
    {
     "what": "negative-values/A p vs grubbs.test",
     "r": 6.28369831279799e-06,
     "other": 6.28369831323639e-06,
     "agrees": true
    },
    {
     "what": "negative-values/A p vs car::outlierTest",
     "r": 6.28369831279799e-06,
     "other": 6.28369831279811e-06,
     "agrees": true
    },
    {
     "what": "negative-values/A max |rstudent| = t_G",
     "r": 29.1032644217101,
     "other": 29.1032644217102,
     "agrees": true
    },
    {
     "what": "negative-values/A bound (SciPy)",
     "r": 6.28369831279799e-06,
     "other": 6.283698312797952e-06,
     "agrees": true
    },
    {
     "what": "negative-values/A SD (NumPy)",
     "r": 1.70269394392142,
     "other": 1.7026939439214162,
     "agrees": true
    },
    {
     "what": "n-100/A p vs grubbs.test",
     "r": 1.3285774398621e-05,
     "other": 1.32857743917469e-05,
     "agrees": true
    },
    {
     "what": "n-100/A p vs car::outlierTest",
     "r": 1.3285774398621e-05,
     "other": 1.32857743986211e-05,
     "agrees": true
    },
    {
     "what": "n-100/A max |rstudent| = t_G",
     "r": 5.68864174165118,
     "other": 5.68864174165118,
     "agrees": true
    },
    {
     "what": "n-100/A bound (SciPy)",
     "r": 1.3285774398621e-05,
     "other": 1.328577439862101e-05,
     "agrees": true
    },
    {
     "what": "n-100/A SD (NumPy)",
     "r": 5.61289874664031,
     "other": 5.61289874664031,
     "agrees": true
    },
    {
     "what": "large-offset/A p vs grubbs.test",
     "r": 0.00763772660375485,
     "other": 0.00763772660375484,
     "agrees": true
    },
    {
     "what": "large-offset/A p vs car::outlierTest",
     "r": 0.00763772660375485,
     "other": 0.007637773270784,
     "agrees": false
    },
    {
     "what": "large-offset/A max |rstudent| = t_G",
     "r": 8.08290676426544,
     "other": 8.08291973621535,
     "agrees": false
    },
    {
     "what": "large-offset/A bound (SciPy)",
     "r": 0.00763772660375485,
     "other": 0.007637726603754839,
     "agrees": true
    },
    {
     "what": "large-offset/A SD (NumPy)",
     "r": 0.29439201537981,
     "other": 0.29439201537980986,
     "agrees": true
    },
    {
     "what": "small-g-fold/A p vs car::outlierTest",
     "r": 1,
     "other": 1.07179676972449,
     "agrees": false
    },
    {
     "what": "small-g-fold/A max |rstudent| = t_G",
     "r": 1.73205080756888,
     "other": 1.73205080756888,
     "agrees": true
    },
    {
     "what": "small-g-fold/A bound (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "small-g-fold/A SD (NumPy)",
     "r": 2.44948974278318,
     "other": 2.449489742783178,
     "agrees": true
    },
    {
     "what": "grid-cell-states/A p vs grubbs.test",
     "r": 0.000228581736286532,
     "other": 0.000228581736285705,
     "agrees": true
    },
    {
     "what": "grid-cell-states/A p vs car::outlierTest",
     "r": 0.000228581736286532,
     "other": 0.000228581736286532,
     "agrees": true
    },
    {
     "what": "grid-cell-states/A max |rstudent| = t_G",
     "r": 19.8374021112274,
     "other": 19.8374021112274,
     "agrees": true
    },
    {
     "what": "grid-cell-states/A bound (SciPy)",
     "r": 0.000228581736286532,
     "other": 0.00022858173628653066,
     "agrees": true
    },
    {
     "what": "grid-cell-states/A SD (NumPy)",
     "r": 1.71512876095839,
     "other": 1.715128760958391,
     "agrees": true
    },
    {
     "what": "after-exclusion/A p vs grubbs.test",
     "r": 0.00182434644474352,
     "other": 0.00182434644474383,
     "agrees": true
    },
    {
     "what": "after-exclusion/A p vs car::outlierTest",
     "r": 0.00182434644474352,
     "other": 0.00182434644474345,
     "agrees": true
    },
    {
     "what": "after-exclusion/A max |rstudent| = t_G",
     "r": 9.15512569714982,
     "other": 9.15512569714974,
     "agrees": true
    },
    {
     "what": "after-exclusion/A bound (SciPy)",
     "r": 0.00182434644474352,
     "other": 0.0018243464447435169,
     "agrees": true
    },
    {
     "what": "after-exclusion/A SD (NumPy)",
     "r": 0.71978832867395,
     "other": 0.7197883286739499,
     "agrees": true
    },
    {
     "what": "before-exclusion/A p vs grubbs.test",
     "r": 0.0186736344317123,
     "other": 0.0186736344317122,
     "agrees": true
    },
    {
     "what": "before-exclusion/A p vs car::outlierTest",
     "r": 0.0186736344317123,
     "other": 0.0186736344317123,
     "agrees": true
    },
    {
     "what": "before-exclusion/A max |rstudent| = t_G",
     "r": 5.04975246918104,
     "other": 5.04975246918104,
     "agrees": true
    },
    {
     "what": "before-exclusion/A bound (SciPy)",
     "r": 0.0186736344317123,
     "other": 0.018673634431712223,
     "agrees": true
    },
    {
     "what": "before-exclusion/A SD (NumPy)",
     "r": 1.52690162467284,
     "other": 1.526901624672844,
     "agrees": true
    },
    {
     "what": "mean-model-identity/A p vs grubbs.test",
     "r": 0.00346423074643933,
     "other": 0.00346423074643987,
     "agrees": true
    },
    {
     "what": "mean-model-identity/A p vs car::outlierTest",
     "r": 0.00346423074643933,
     "other": 0.00346423074643929,
     "agrees": true
    },
    {
     "what": "mean-model-identity/A max |rstudent| = t_G",
     "r": 6.35085296108589,
     "other": 6.35085296108587,
     "agrees": true
    },
    {
     "what": "mean-model-identity/A bound (SciPy)",
     "r": 0.00346423074643933,
     "other": 0.0034642307464393344,
     "agrees": true
    },
    {
     "what": "mean-model-identity/A SD (NumPy)",
     "r": 0.595818764390649,
     "other": 0.5958187643906494,
     "agrees": true
    },
    {
     "what": "several-columns/Control p vs grubbs.test",
     "r": 0.714630501177313,
     "other": 0.714630501177312,
     "agrees": true
    },
    {
     "what": "several-columns/Control p vs car::outlierTest",
     "r": 0.714630501177313,
     "other": 0.714630501177337,
     "agrees": true
    },
    {
     "what": "several-columns/Control max |rstudent| = t_G",
     "r": 1.97777058779927,
     "other": 1.9777705877993,
     "agrees": true
    },
    {
     "what": "several-columns/Control bound (SciPy)",
     "r": 0.714630501177313,
     "other": 0.7146305011773109,
     "agrees": true
    },
    {
     "what": "several-columns/Control SD (NumPy)",
     "r": 0.952190457139049,
     "other": 0.952190457139049,
     "agrees": true
    },
    {
     "what": "several-columns/Low p vs grubbs.test",
     "r": 0.0016221563269942,
     "other": 0.00162215632699425,
     "agrees": true
    },
    {
     "what": "several-columns/Low p vs car::outlierTest",
     "r": 0.0016221563269942,
     "other": 0.00162215632699408,
     "agrees": true
    },
    {
     "what": "several-columns/Low max |rstudent| = t_G",
     "r": 12.0683221755526,
     "other": 12.0683221755524,
     "agrees": true
    },
    {
     "what": "several-columns/Low bound (SciPy)",
     "r": 0.0016221563269942,
     "other": 0.0016221563269942058,
     "agrees": true
    },
    {
     "what": "several-columns/Low SD (NumPy)",
     "r": 5.47892933579789,
     "other": 5.478929335797887,
     "agrees": true
    },
    {
     "what": "groups-planted C row 4 adjusted (SciPy)",
     "r": 0.000101858178331543,
     "other": 0.0001018581783315427,
     "agrees": true
    },
    {
     "what": "groups-planted C row 3 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted C row 1 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted C row 2 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted A row 2 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted B row 2 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted B row 3 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted A row 3 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted A row 1 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted A row 4 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted B row 1 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    },
    {
     "what": "groups-planted B row 4 adjusted (SciPy)",
     "r": 1,
     "other": 1.0,
     "agrees": true
    }
   ],
   "divergences": [
    {
     "case": "small-g-fold/A",
     "package": 0.928203230275511,
     "engine": 1,
     "reason": "outliers two-sided fold; engine reports the bound"
    }
   ],
   "r": {
    "version": "R version 4.4.3 (2025-02-28)",
    "outliers": "0.15",
    "car": "3.1-5",
    "script": "pipeline/assay-analyser/oracles/r/column_outliers.R",
    "scriptSha256": "15eb0f224aff237e602430f01c19d26886677894110378675bfa49aae6bc91df",
    "jobs": 16
   }
  }
 },
 "oracle": {
  "engine": "R (column_outliers.R: outliers, car, stats)",
  "method": "every number from R; the withholding policy from the memo, applied here"
 },
 "cases": [
  {
   "name": "n-5-withheld",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      9.8,
      10.3,
      9.9,
      14.0
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 5,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "withheld": "GRUBBS_N"
     }
    ]
   }
  },
  {
   "name": "n-6-planted",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      9.8,
      10.3,
      9.9,
      10.0,
      14.2
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 10.7166666666667,
      "sd": 1.71512876095839,
      "G": 2.03094567161645,
      "t": 19.8374021112274,
      "df": 4,
      "p": 0.000228581736286532,
      "critical": 1.88714511778393,
      "rows": [
       6
      ],
      "value": 14.2,
      "candidate": true,
      "r": {
       "packageP": 0.000228581736285705,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "n-6-clean",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      9.8,
      10.3,
      9.9,
      10.0,
      10.4
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 10.0833333333333,
      "sd": 0.231660671385254,
      "G": 1.36694184978877,
      "t": 1.80340019192975,
      "df": 4,
      "p": 0.873966095225308,
      "critical": 1.88714511778393,
      "rows": [
       6
      ],
      "value": 10.4,
      "candidate": false,
      "r": {
       "packageP": 0.873966095225308,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "all-equal",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      5,
      5,
      5,
      5,
      5,
      5,
      5
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 7,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "withheld": "NO_SPREAD"
     }
    ]
   }
  },
  {
   "name": "five-equal-one-different",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      3,
      3,
      3,
      3,
      3,
      9
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 4,
      "sd": 2.44948974278318,
      "G": 2.04124145231932,
      "t": "Infinity",
      "df": 4,
      "p": 0,
      "critical": 1.88714511778393,
      "rows": [
       6
      ],
      "value": 9.0,
      "candidate": true,
      "r": {
       "packageP": 0,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "symmetric-tie",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      0,
      5,
      5,
      5,
      5,
      5,
      5,
      10
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 8,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 8,
      "mean": 5,
      "sd": 2.67261241912424,
      "G": 1.87082869338697,
      "t": 2.82842712474619,
      "df": 6,
      "p": 0.240157962300355,
      "critical": 2.12664508719546,
      "rows": [
       1,
       8
      ],
      "value": 0.0,
      "candidate": false,
      "r": {
       "packageP": 0.240157962300355,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "masking-two-extremes",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.0,
      10.2,
      9.9,
      10.1,
      9.8,
      10.0,
      15.1,
      15.2
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 8,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 8,
      "mean": 11.2875,
      "sd": 2.38713067450084,
      "G": 1.6389969940871,
      "t": 2.1649972140799,
      "df": 6,
      "p": 0.588543128735652,
      "critical": 2.12664508719546,
      "rows": [
       8
      ],
      "value": 15.2,
      "candidate": false,
      "r": {
       "packageP": 0.588543128735651,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "negative-values",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      -2.1,
      -1.9,
      -2.0,
      -2.2,
      -1.8,
      -6.5,
      -2.05
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 7,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 7,
      "mean": -2.65,
      "sd": 1.70269394392142,
      "G": 2.26112274243085,
      "t": 29.1032644217102,
      "df": 5,
      "p": 6.28369831279799e-06,
      "critical": 2.0199685076796,
      "rows": [
       6
      ],
      "value": -6.5,
      "candidate": true,
      "r": {
       "packageP": 6.28369831323639e-06,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "n-100",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      52.8244,
      53.8069,
      48.3465,
      54.1046,
      49.2236,
      50.7414,
      51.4199,
      44.4113,
      55.641,
      54.1143,
      46.8242,
      46.8588,
      54.5735,
      43.3658,
      49.7044,
      54.2894,
      56.2143,
      47.6702,
      41.7899,
      52.6234,
      49.0728,
      54.2254,
      52.7177,
      44.0721,
      51.1447,
      48.9699,
      49.9416,
      43.6264,
      47.1866,
      49.9062,
      43.2906,
      51.4549,
      45.713,
      53.2827,
      48.0819,
      55.4141,
      54.4501,
      78.5,
      48.5674,
      59.4987,
      54.7122,
      51.7388,
      48.0789,
      55.7181,
      50.1448,
      50.614,
      54.8192,
      54.4551,
      61.2911,
      50.8514,
      49.3785,
      50.075,
      58.4091,
      42.9505,
      38.8898,
      50.9645,
      53.5521,
      47.05,
      54.35,
      50.9781,
      51.5388,
      52.2528,
      48.7396,
      42.6215,
      47.334,
      59.1669,
      54.4597,
      48.0036,
      44.6424,
      53.129,
      55.2387,
      55.9426,
      47.6858,
      51.4173,
      49.2506,
      51.3157,
      55.9631,
      46.4219,
      42.7563,
      49.4059,
      42.0703,
      42.1911,
      44.8151,
      60.3249,
      50.0752,
      53.7584,
      43.0727,
      59.1931,
      63.1632,
      49.9901,
      47.1539,
      50.5945,
      46.9033,
      51.6081,
      43.094,
      59.5784,
      51.3223,
      44.6353,
      53.8034,
      50.0965
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 100,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 100,
      "mean": 50.814158,
      "sd": 5.61289874664031,
      "G": 4.9325390051926,
      "t": 5.68864174165118,
      "df": 98,
      "p": 1.3285774398621e-05,
      "critical": 3.38408290115492,
      "rows": [
       38
      ],
      "value": 78.5,
      "candidate": true,
      "r": {
       "packageP": 1.32857743917469e-05,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "large-offset",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      1000000000.1,
      1000000000.2,
      1000000000.3,
      1000000000.25,
      1000000000.15,
      1000000000.9
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 1000000000.31667,
      "sd": 0.29439201537981,
      "G": 1.98148503558147,
      "t": 8.08291973621535,
      "df": 4,
      "p": 0.00763772660375485,
      "critical": 1.88714511778393,
      "rows": [
       6
      ],
      "value": 1000000000.9,
      "candidate": true,
      "r": {
       "packageP": 0.00763772660375484,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "small-g-fold",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 8,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 8,
      "mean": 4.5,
      "sd": 2.44948974278318,
      "G": 1.42886901662352,
      "t": 1.73205080756888,
      "df": 6,
      "p": 1,
      "critical": 2.12664508719546,
      "rows": [
       1,
       8
      ],
      "value": 1.0,
      "candidate": false,
      "r": {
       "packageP": 0.928203230275511,
       "folded": true
      }
     }
    ]
   }
  },
  {
   "name": "grid-cell-states",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      null,
      9.8,
      {
       "text": "n.d."
      },
      10.3,
      9.9,
      {
       "excluded": 30.0
      },
      10.0,
      14.2
     ]
    },
    {
     "name": "B",
     "cells": [
      1.0,
      1.2,
      null,
      0.9,
      1.1
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 1,
      "text": 1,
      "excluded": 1
     },
     {
      "n": 4,
      "blank": 1,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 10.7166666666667,
      "sd": 1.71512876095839,
      "G": 2.03094567161645,
      "t": 19.8374021112274,
      "df": 4,
      "p": 0.000228581736286532,
      "critical": 1.88714511778393,
      "rows": [
       9
      ],
      "value": 14.2,
      "candidate": true,
      "r": {
       "packageP": 0.000228581736285705,
       "folded": false
      }
     },
     {
      "withheld": "GRUBBS_N"
     }
    ]
   }
  },
  {
   "name": "after-exclusion",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      9.8,
      10.3,
      9.9,
      10.0,
      {
       "excluded": 14.2
      },
      10.2,
      11.9
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 7,
      "blank": 0,
      "text": 0,
      "excluded": 1
     }
    ],
    "grubbs": [
     {
      "n": 7,
      "mean": 10.3142857142857,
      "sd": 0.71978832867395,
      "G": 2.20302861625391,
      "t": 9.15512569714974,
      "df": 5,
      "p": 0.00182434644474352,
      "critical": 2.0199685076796,
      "rows": [
       8
      ],
      "value": 11.9,
      "candidate": true,
      "r": {
       "packageP": 0.00182434644474383,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "before-exclusion",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      10.1,
      9.8,
      10.3,
      9.9,
      10.0,
      14.2,
      10.2,
      11.9
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 8,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 8,
      "mean": 10.8,
      "sd": 1.52690162467284,
      "G": 2.22673153598123,
      "t": 5.04975246918104,
      "df": 6,
      "p": 0.0186736344317123,
      "critical": 2.12664508719546,
      "rows": [
       6
      ],
      "value": 14.2,
      "candidate": true,
      "r": {
       "packageP": 0.0186736344317122,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "mean-model-identity",
   "frame": "columns",
   "columns": [
    {
     "name": "A",
     "cells": [
      4.2,
      4.5,
      3.9,
      4.1,
      4.4,
      5.9,
      4.0,
      4.3,
      4.6
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 9,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 9,
      "mean": 4.43333333333333,
      "sd": 0.595818764390649,
      "G": 2.46159865100362,
      "t": 6.35085296108587,
      "df": 7,
      "p": 0.00346423074643933,
      "critical": 2.21500422332553,
      "rows": [
       6
      ],
      "value": 5.9,
      "candidate": true,
      "r": {
       "packageP": 0.00346423074643987,
       "folded": false
      }
     }
    ]
   }
  },
  {
   "name": "several-columns",
   "frame": "columns",
   "columns": [
    {
     "name": "Control",
     "cells": [
      100.0,
      98.5,
      101.2,
      99.8,
      100.4,
      99.1
     ]
    },
    {
     "name": "Low",
     "cells": [
      82.1,
      80.4,
      83.0,
      81.7,
      95.2,
      82.6
     ]
    },
    {
     "name": "High",
     "cells": [
      41.2,
      43.5
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 6,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 2,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "grubbs": [
     {
      "n": 6,
      "mean": 99.8333333333333,
      "sd": 0.952190457139049,
      "G": 1.43528708612871,
      "t": 1.9777705877993,
      "df": 4,
      "p": 0.714630501177313,
      "critical": 1.88714511778393,
      "rows": [
       3
      ],
      "value": 101.2,
      "candidate": false,
      "r": {
       "packageP": 0.714630501177312,
       "folded": false
      }
     },
     {
      "n": 6,
      "mean": 84.1666666666667,
      "sd": 5.47892933579789,
      "G": 2.01377543989196,
      "t": 12.0683221755524,
      "df": 4,
      "p": 0.0016221563269942,
      "critical": 1.88714511778393,
      "rows": [
       5
      ],
      "value": 95.2,
      "candidate": true,
      "r": {
       "packageP": 0.00162215632699425,
       "folded": false
      }
     },
     {
      "withheld": "GRUBBS_N"
     }
    ]
   }
  },
  {
   "name": "groups-planted",
   "frame": "groups",
   "columns": [
    {
     "name": "A",
     "cells": [
      10,
      11,
      9,
      10
     ]
    },
    {
     "name": "B",
     "cells": [
      20,
      21,
      19,
      20
     ]
    },
    {
     "name": "C",
     "cells": [
      30,
      31,
      29,
      40
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "groups": {
     "total": 12,
     "groups": 3,
     "df": 8,
     "rows": [
      {
       "group": "C",
       "row": 4,
       "value": 40.0,
       "t": 9.99999999999999,
       "adjusted": 0.000101858178331543,
       "candidate": true
      },
      {
       "group": "C",
       "row": 3,
       "value": 29.0,
       "t": -1.42148463118707,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "C",
       "row": 1,
       "value": 30.0,
       "t": -0.957826285221151,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "C",
       "row": 2,
       "value": 31.0,
       "t": -0.554700196225229,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "A",
       "row": 2,
       "value": 11.0,
       "t": 0.36591148299708,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "B",
       "row": 2,
       "value": 21.0,
       "t": 0.365911482997079,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "B",
       "row": 3,
       "value": 19.0,
       "t": -0.365911482997079,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "A",
       "row": 3,
       "value": 9.0,
       "t": -0.365911482997078,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "A",
       "row": 1,
       "value": 10.0,
       "t": 0,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "A",
       "row": 4,
       "value": 10.0,
       "t": 0,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "B",
       "row": 1,
       "value": 20.0,
       "t": 0,
       "adjusted": 1,
       "candidate": false
      },
      {
       "group": "B",
       "row": 4,
       "value": 20.0,
       "t": 0,
       "adjusted": 1,
       "candidate": false
      }
     ]
    }
   }
  },
  {
   "name": "groups-residual-df-5",
   "frame": "groups",
   "columns": [
    {
     "name": "A",
     "cells": [
      1.0,
      2.0,
      3.0,
      4.0
     ]
    },
    {
     "name": "B",
     "cells": [
      2.0,
      3.5,
      4.0
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 3,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "groups": {
     "withheld": "RESIDUAL_DF"
    }
   }
  },
  {
   "name": "groups-n-2",
   "frame": "groups",
   "columns": [
    {
     "name": "A",
     "cells": [
      1.0,
      2.0,
      3.0,
      4.0
     ]
    },
    {
     "name": "B",
     "cells": [
      2.0,
      3.5
     ]
    },
    {
     "name": "C",
     "cells": [
      5.0,
      6.0,
      7.0
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 2,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 3,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "groups": {
     "withheld": "GROUP_N",
     "group": "B"
    }
   }
  },
  {
   "name": "groups-one",
   "frame": "groups",
   "columns": [
    {
     "name": "A",
     "cells": [
      1.0,
      2.0,
      3.0,
      4.0,
      5.0,
      6.0,
      7.0
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 7,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "groups": {
     "withheld": "GROUP_COUNT"
    }
   }
  },
  {
   "name": "groups-no-spread",
   "frame": "groups",
   "columns": [
    {
     "name": "A",
     "cells": [
      1.0,
      1.0,
      1.0
     ]
    },
    {
     "name": "B",
     "cells": [
      2.0,
      2.0,
      2.0,
      2.0
     ]
    },
    {
     "name": "C",
     "cells": [
      3.0,
      3.0,
      3.0
     ]
    }
   ],
   "expected": {
    "counts": [
     {
      "n": 3,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 4,
      "blank": 0,
      "text": 0,
      "excluded": 0
     },
     {
      "n": 3,
      "blank": 0,
      "text": 0,
      "excluded": 0
     }
    ],
    "groups": {
     "withheld": "NO_SPREAD"
    }
   }
  }
 ]
}
