{"version":3,"sources":["jsdelivr-header.js","/npm/stat-functions@1.0.5/stat-functions.js"],"names":[],"mappings":"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","file":"/npm/stat-functions@1.0.5/stat-functions.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/stat-functions@1.0.5/stat-functions.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Private Functions\n// Validate Input\nconst validateDataSet = (dataSet) => {\n  // check that dataSet has values\n  const hasLength = dataSet.length > 0;\n  if (!hasLength) throw new TypeError('Data set must contain values.');\n\n  // check that all inputs are numbers\n  const nan = dataSet.filter(v => Number.isNaN(Number(v))).length > 0;\n  if (nan) throw new TypeError('Data set must contain only numbers.');\n\n  return hasLength && !nan;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Sum\n// /////////////////////////////////////////////////////////////////////\nconst sum = (dataSet) => {\n  validateDataSet(dataSet);\n  return dataSet.reduce((a, b) => a + b, 0);\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Mean\n// /////////////////////////////////////////////////////////////////////\nconst mean = (dataSet) => {\n  validateDataSet(dataSet);\n  return sum(dataSet) / dataSet.length;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Median\n// /////////////////////////////////////////////////////////////////////\nconst median = (dataSet) => {\n  validateDataSet(dataSet);\n\n  const setLen = dataSet.length;\n  const sortedDataSet = [...dataSet].sort((a, b) => a - b);\n\n  if (setLen % 2 === 0) return (sortedDataSet[(setLen / 2) - 1] + sortedDataSet[setLen / 2]) / 2;\n  return sortedDataSet[(setLen - 1) / 2];\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Mode\n// /////////////////////////////////////////////////////////////////////\nconst mode = (dataSet) => {\n  validateDataSet(dataSet);\n\n  const counts = [];\n  const modes = [];\n  let maxIndex = 0;\n\n  for (let i = 0; i < dataSet.length; i++) {\n    const number = dataSet[i];\n    counts[number] = (counts[number] || 0) + 1;\n    if (counts[number] > maxIndex) {\n      maxIndex = counts[number];\n    }\n  }\n\n  if (maxIndex === 1) return [];\n\n  counts.forEach((c, i) => {\n    if (c === maxIndex) modes.push(i);\n  });\n  return modes;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Range\n// /////////////////////////////////////////////////////////////////////\nconst range = (dataSet) => {\n  validateDataSet(dataSet);\n\n  const sortedDataSet = [...dataSet].sort((a, b) => a - b);\n\n  return [sortedDataSet[0], sortedDataSet[dataSet.length - 1]];\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Standard Deviation\n// /////////////////////////////////////////////////////////////////////\nconst stdDev = (dataSet) => {\n  validateDataSet(dataSet);\n\n  const avg = mean(dataSet);\n\n  const squareDiffs = dataSet.map((val) => {\n    const diff = val - avg;\n    const sqrDiff = diff * diff;\n    return sqrDiff;\n  });\n\n  const avgSquareDiff = mean(squareDiffs);\n  const output = Math.sqrt(avgSquareDiff);\n\n  return output;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Percentile\n// /////////////////////////////////////////////////////////////////////\nconst percentile = (dataSet, k) => {\n  // validate k parameter\n  if (typeof k === 'undefined') {\n    throw new TypeError('You must provide a k value for the percentile function.');\n  }\n  if (Number.isNaN(Number(k))) throw new TypeError('K value must be a number.');\n  if (k < 0 || k > 1) throw new TypeError('K value must be a decimal value greater than 0 and less than 1.');\n\n  validateDataSet(dataSet);\n\n  // sort dataSet ascending\n  const sortedDataSet = [...dataSet].sort((a, b) => a - b);\n\n  if (k === 0) return sortedDataSet[0];\n  if (k === 1) return sortedDataSet[sortedDataSet.length - 1];\n\n  // determine index and percentile value\n  const i = k * dataSet.length;\n  let perc;\n\n  if (i % 1 !== 0) perc = sortedDataSet[Math.ceil(i) - 1];\n  else perc = (sortedDataSet[i - 1] + sortedDataSet[i]) / 2;\n  return perc;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// nTile\n// /////////////////////////////////////////////////////////////////////\nconst nTile = (dataSet, q) => {\n  // validate q parameter\n  if (typeof q === 'undefined') {\n    throw new TypeError('You must provide a q value for the nTile function.');\n  }\n  if (Number.isNaN(Number(q))) throw new TypeError('Q value must be a number.');\n  if (q < 0) throw new TypeError('Q value must be greater than 0.');\n  if (!Number.isInteger(q)) throw new TypeError('Q value must be an integer.');\n\n  validateDataSet(dataSet);\n\n  // sort dataSet ascending\n  const sortedDataSet = [...dataSet].sort((a, b) => a - b);\n\n  if (q === 0) return [sortedDataSet[0]];\n  if (q === 1) return [sortedDataSet[sortedDataSet.length - 1]];\n\n  const nTileArray = [];\n  const percentileSpan = 1 / q;\n  for (let i = 1; i < q; i++) {\n    nTileArray.push(percentile(sortedDataSet, i * percentileSpan));\n  }\n\n  return nTileArray;\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Median Absolute Deviation\n// /////////////////////////////////////////////////////////////////////\nconst mad = (dataSet) => {\n  validateDataSet(dataSet);\n\n  // get median\n  const med = median(dataSet);\n\n  // get absolute deviations from the median\n  const absoluteDeviations = dataSet.map(val => Math.abs(val - med));\n\n  // get the median of the absolute deviations\n  return median(absoluteDeviations);\n};\n\n// /////////////////////////////////////////////////////////////////////\n// Winsorize\n// /////////////////////////////////////////////////////////////////////\nconst madWinsorize = (dataSet, madF) => {\n  // validate madF (MAD factor)\n  if (typeof madF === 'undefined') {\n    throw new TypeError('You must provide a MAD factor value for the madWinsorize function.');\n  }\n  if (Number.isNaN(Number(madF))) throw new TypeError('MAD factor value must be a number.');\n\n  validateDataSet(dataSet);\n\n  const med = median(dataSet);\n  const dSMad = mad(dataSet);\n\n  return dataSet.map((val) => {\n    if (Math.abs(val - med) > madF * dSMad) {\n      if (val > med) return med + (madF * dSMad);\n      if (val < med) return med - (madF * dSMad);\n    }\n    return val;\n  });\n};\n\nmodule.exports = {\n  mad,\n  madWinsorize,\n  mean,\n  median,\n  mode,\n  percentile,\n  nTile,\n  range,\n  stdDev,\n  sum,\n};\n"]}