@gridsheet/functions 3.0.1 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/functions/src/math/sumif.d.ts.map +1 -1
- package/dist/functions/src/math/sumifs.d.ts.map +1 -1
- package/dist/functions/src/statistics/averageif.d.ts.map +1 -1
- package/dist/functions/src/statistics/averageifs.d.ts.map +1 -1
- package/dist/math/index.js +186 -186
- package/dist/math/index.js.map +1 -1
- package/dist/statistics/index.js +179 -179
- package/dist/statistics/index.js.map +1 -1
- package/package.json +8 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/statistics/averageif.ts","../../src/statistics/averageifs.ts","../../src/statistics/median.ts","../../src/statistics/stdev_s.ts","../../src/statistics/stdev_p.ts","../../src/statistics/var_s.ts","../../src/statistics/var_p.ts","../../src/statistics/percentile_inc.ts","../../src/statistics/quartile_inc.ts","../../src/statistics/rank_eq.ts","../../src/statistics/correl.ts","../../src/statistics/covariance_s.ts","../../src/statistics/covariance_p.ts","../../src/statistics/mode_sngl.ts","../../src/statistics/rsq.ts","../../src/statistics/t_test.ts","../../src/statistics/index.ts"],"sourcesContent":["import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition } from '@gridsheet/core';\nimport { Sheet, eachMatrix, stripMatrix, check, conditionArg, ensureString } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the average of a series of cells that meet a condition.`;\n\nexport class AverageifFunction extends BaseFunction {\n example = 'AVERAGEIF(A1:A10,\">20\")';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'range', description: 'A condition range.', takesMatrix: true, acceptedTypes: ['matrix'] },\n conditionArg,\n {\n name: 'average_range',\n description: 'A range to be averaged.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n optional: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected main(range: Sheet, condition: any, avgRange?: Sheet) {\n const conditionStr = ensureString(condition);\n const condArr: any[] = [];\n const avgArr: any[] = [];\n\n eachMatrix(\n range,\n (v) => {\n condArr.push(v);\n },\n this.at,\n );\n if (avgRange) {\n eachMatrix(\n avgRange,\n (v) => {\n avgArr.push(v);\n },\n this.at,\n );\n }\n\n let total = 0;\n let count = 0;\n condArr.forEach((c, i) => {\n const s = stripMatrix((avgRange ? avgArr[i] : c) ?? 0, this.at);\n if (typeof s === 'number' && check(c, conditionStr)) {\n total += s;\n count++;\n }\n });\n\n if (count === 0) {\n throw new FormulaError('#DIV/0!', 'No cells match the condition.');\n }\n return total / count;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, conditionArg } from '@gridsheet/core';\nimport { Sheet, eachMatrix, stripMatrix, createBooleanMask, ensureString } from '@gridsheet/core';\nimport type { FunctionCategory, PointType } from '@gridsheet/core';\n\nconst description = `Returns the average of a range depending on multiple criteria.`;\n\nexport class AverageifsFunction extends BaseFunction {\n example = 'AVERAGEIFS(A1:A10, B1:B10, \">20\")';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'average_range', description: 'The range to be averaged.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'range1', description: 'First condition range.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { ...conditionArg, name: 'condition1' },\n {\n name: 'range2',\n description: 'Additional condition range.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n optional: true,\n variadic: true,\n },\n { ...conditionArg, name: 'condition2', optional: true, variadic: true },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const validatedArgs = super.validate(args);\n if ((validatedArgs.length - 1) % 2 !== 0) {\n throw new FormulaError('#N/A', 'AVERAGEIFS requires average_range and at least one range/condition pair.');\n }\n if (!(validatedArgs[0] instanceof Sheet)) {\n throw new FormulaError('#VALUE!', 'First argument of AVERAGEIFS must be a range.');\n }\n const expectedRows = validatedArgs[0].numRows;\n const expectedCols = validatedArgs[0].numCols;\n\n const tables: Sheet[] = [];\n const conditions: string[] = [];\n for (let i = 1; i < validatedArgs.length; i += 2) {\n if (!(validatedArgs[i] instanceof Sheet)) {\n throw new FormulaError('#VALUE!', `Argument ${i + 1} of AVERAGEIFS must be a range.`);\n }\n if (validatedArgs[i].numRows !== expectedRows || validatedArgs[i].numCols !== expectedCols) {\n throw new FormulaError('#VALUE!', 'Array arguments to AVERAGEIFS are of different size.');\n }\n tables.push(validatedArgs[i] as Sheet);\n conditions.push(ensureString(validatedArgs[i + 1]));\n }\n const avgRange = validatedArgs[0];\n const mask = createBooleanMask(tables, conditions, this.at);\n return [avgRange, mask];\n }\n\n protected main(avgRange: Sheet, mask: boolean[][]) {\n let total = 0;\n let count = 0;\n eachMatrix(\n avgRange,\n (v: any, pt: PointType) => {\n if (pt && mask[pt.y][pt.x]) {\n const num = stripMatrix(v ?? 0, this.at);\n if (typeof num === 'number') {\n total += num;\n count++;\n }\n }\n },\n this.at,\n );\n\n if (count === 0) {\n return new FormulaError('#DIV/0!', 'No matching cells found for AVERAGEIFS.');\n }\n return total / count;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the median value in a numeric dataset.`;\n\nexport class MedianFunction extends BaseFunction {\n example = 'MEDIAN(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges to compute the median of.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'MEDIAN requires at least one numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n nums.sort((a, b) => a - b);\n const mid = Math.floor(nums.length / 2);\n return nums.length % 2 === 0 ? (nums[mid - 1] + nums[mid]) / 2 : nums[mid];\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the standard deviation based on a sample.`;\n\nexport class StdevSFunction extends BaseFunction {\n example = 'STDEV.S(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the sample.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 2) {\n throw new FormulaError('#DIV/0!', 'STDEV.S requires at least 2 numeric values.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n const variance = nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / (nums.length - 1);\n return Math.sqrt(variance);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the standard deviation based on the entire population.`;\n\nexport class StdevPFunction extends BaseFunction {\n example = 'STDEV.P(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the entire population.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 1) {\n throw new FormulaError('#DIV/0!', 'STDEV.P requires at least 1 numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n const variance = nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / nums.length;\n return Math.sqrt(variance);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the variance based on a sample.`;\n\nexport class VarSFunction extends BaseFunction {\n example = 'VAR.S(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the sample.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 2) {\n throw new FormulaError('#DIV/0!', 'VAR.S requires at least 2 numeric values.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n return nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / (nums.length - 1);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the variance based on the entire population.`;\n\nexport class VarPFunction extends BaseFunction {\n example = 'VAR.P(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the entire population.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 1) {\n throw new FormulaError('#DIV/0!', 'VAR.P requires at least 1 numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n return nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / nums.length;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the k-th percentile of values in a range, where k is in the range 0 to 1, inclusive.`;\n\nexport class PercentileIncFunction extends BaseFunction {\n example = 'PERCENTILE.INC(A1:A100, 0.9)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n { name: 'percentile', description: 'The percentile value between 0 and 1, inclusive.', acceptedTypes: ['number'] },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const k = ensureNumber(args[1]);\n if (k < 0 || k > 1) {\n throw new FormulaError('#NUM!', 'Percentile must be between 0 and 1.');\n }\n const nums: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'PERCENTILE.INC requires at least one numeric value.');\n }\n return [nums, k];\n }\n\n protected main(nums: number[], k: number) {\n nums.sort((a, b) => a - b);\n const pos = k * (nums.length - 1);\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n return nums[lo] + (nums[hi] - nums[lo]) * (pos - lo);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the quartile of a dataset, based on percentile values from 0 to 1, inclusive.`;\n\nexport class QuartileIncFunction extends BaseFunction {\n example = 'QUARTILE.INC(A1:A100, 1)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'quartile_number',\n description: 'Which quartile to return: 0 (min), 1 (Q1), 2 (median), 3 (Q3), 4 (max).',\n acceptedTypes: ['number'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const q = Math.floor(ensureNumber(args[1]));\n if (q < 0 || q > 4) {\n throw new FormulaError('#NUM!', 'Quartile number must be between 0 and 4.');\n }\n const nums: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'QUARTILE.INC requires at least one numeric value.');\n }\n return [nums, q];\n }\n\n protected main(nums: number[], q: number) {\n nums.sort((a, b) => a - b);\n const k = q / 4;\n const pos = k * (nums.length - 1);\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n return nums[lo] + (nums[hi] - nums[lo]) * (pos - lo);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the rank of a number in a list of numbers. If more than one value has the same rank, the top rank of that set of values is returned.`;\n\nexport class RankEqFunction extends BaseFunction {\n example = 'RANK.EQ(A1, A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'value', description: 'The value whose rank will be determined.', acceptedTypes: ['number'] },\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'is_ascending',\n description: 'Whether to rank in ascending order. Default is FALSE (descending).',\n acceptedTypes: ['boolean'],\n optional: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const v = ensureNumber(args[0]);\n const nums: number[] = [];\n eachMatrix(\n args[1],\n (n: any) => {\n if (n == null || n === '' || typeof n === 'boolean') {\n return;\n }\n if (typeof n === 'number' || (typeof n === 'string' && !isNaN(Number(n)))) {\n nums.push(ensureNumber(n));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'RANK.EQ requires at least one numeric value in data.');\n }\n if (!nums.includes(v)) {\n throw new FormulaError('#N/A', 'Value not found in data range.');\n }\n const isAscending = args[2] ?? false;\n return [v, nums, isAscending];\n }\n\n protected main(v: number, nums: number[], isAscending: boolean) {\n nums.sort((a, b) => (isAscending ? a - b : b - a));\n return nums.indexOf(v) + 1;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the correlation coefficient of two datasets.`;\n\nexport class CorrelFunction extends BaseFunction {\n example = 'CORREL(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the dependent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the independent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 2) {\n throw new FormulaError('#N/A', 'CORREL requires two ranges of equal length with at least 2 values.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n\n let num = 0,\n denY = 0,\n denX = 0;\n for (let i = 0; i < n; i++) {\n const dy = ys[i] - meanY;\n const dx = xs[i] - meanX;\n num += dy * dx;\n denY += dy * dy;\n denX += dx * dx;\n }\n const den = Math.sqrt(denY * denX);\n if (den === 0) {\n throw new FormulaError('#DIV/0!', 'Standard deviation of one dataset is zero.');\n }\n return num / den;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the sample covariance, the average of the products of deviations for each data point pair in two datasets.`;\n\nexport class CovarianceSFunction extends BaseFunction {\n example = 'COVARIANCE.S(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the first dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the second dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 2) {\n throw new FormulaError('#N/A', 'COVARIANCE.S requires two ranges of equal length with at least 2 values.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n return ys.reduce((acc, y, i) => acc + (y - meanY) * (xs[i] - meanX), 0) / (n - 1);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the population covariance, the average of the products of deviations for each data point pair in two datasets.`;\n\nexport class CovariancePFunction extends BaseFunction {\n example = 'COVARIANCE.P(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the first dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the second dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 1) {\n throw new FormulaError('#N/A', 'COVARIANCE.P requires two ranges of equal length with at least 1 value.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n return ys.reduce((acc, y, i) => acc + (y - meanY) * (xs[i] - meanX), 0) / n;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the most commonly occurring value in a dataset. If there are multiple modes, the smallest is returned.`;\n\nexport class ModeSnglFunction extends BaseFunction {\n example = 'MODE.SNGL(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges to compute the mode of.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length === 0) {\n throw new FormulaError('#N/A', 'MODE.SNGL requires at least one numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const freq = new Map<number, number>();\n for (const n of nums) {\n freq.set(n, (freq.get(n) ?? 0) + 1);\n }\n const maxFreq = Math.max(...freq.values());\n if (maxFreq < 2) {\n throw new FormulaError('#N/A', 'No value appears more than once.');\n }\n const modes = [...freq.entries()].filter(([, c]) => c === maxFreq).map(([n]) => n);\n return Math.min(...modes);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the square of the Pearson product-moment correlation coefficient (R²).`;\n\nexport class RsqFunction extends BaseFunction {\n example = 'RSQ(A1:A10, B1:B10)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the dependent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the independent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (typeof v === 'number' || (typeof v === 'string' && !isNaN(Number(v)))) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length) {\n throw new FormulaError('#N/A', 'RSQ requires two ranges of equal length.');\n }\n if (ys.length < 2) {\n throw new FormulaError('#N/A', 'RSQ requires at least 2 data points.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n\n let num = 0,\n denY = 0,\n denX = 0;\n for (let i = 0; i < n; i++) {\n const dy = ys[i] - meanY;\n const dx = xs[i] - meanX;\n num += dy * dx;\n denY += dy * dy;\n denX += dx * dx;\n }\n const den = Math.sqrt(denY * denX);\n if (den === 0) {\n throw new FormulaError('#DIV/0!', 'Standard deviation of one dataset is zero.');\n }\n const r = num / den;\n return r * r;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the probability associated with a Student's t-test.\ntails: 1 (one-tailed) or 2 (two-tailed).\ntype: 1 (paired), 2 (two-sample equal variance), 3 (two-sample unequal variance).`;\n\n/** Regularized incomplete beta function via continued fraction (Lentz's method). */\nfunction incompleteBeta(x: number, a: number, b: number): number {\n if (x <= 0) {\n return 0;\n }\n if (x >= 1) {\n return 1;\n }\n // Use symmetry relation when x > (a+1)/(a+b+2)\n if (x > (a + 1) / (a + b + 2)) {\n return 1 - incompleteBeta(1 - x, b, a);\n }\n const lbeta = lgamma(a) + lgamma(b) - lgamma(a + b);\n const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lbeta) / a;\n // Continued fraction via modified Lentz\n const MAXIT = 200;\n const EPS = 3e-7;\n let f = 1,\n C = 1,\n D = 1 - ((a + b) * x) / (a + 1);\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n D = 1 / D;\n f = D;\n for (let m = 1; m <= MAXIT; m++) {\n // Even step\n let d = (m * (b - m) * x) / ((a + 2 * m - 1) * (a + 2 * m));\n D = 1 + d * D;\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n C = 1 + d / C;\n if (Math.abs(C) < 1e-30) {\n C = 1e-30;\n }\n D = 1 / D;\n f *= D * C;\n // Odd step\n d = (-(a + m) * (a + b + m) * x) / ((a + 2 * m) * (a + 2 * m + 1));\n D = 1 + d * D;\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n C = 1 + d / C;\n if (Math.abs(C) < 1e-30) {\n C = 1e-30;\n }\n D = 1 / D;\n const delta = D * C;\n f *= delta;\n if (Math.abs(delta - 1) < EPS) {\n break;\n }\n }\n return front * f;\n}\n\nfunction lgamma(z: number): number {\n // Lanczos approximation\n const g = 7;\n const c = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059,\n 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7,\n ];\n if (z < 0.5) {\n return Math.log(Math.PI / Math.sin(Math.PI * z)) - lgamma(1 - z);\n }\n z--;\n let x = c[0];\n for (let i = 1; i < g + 2; i++) {\n x += c[i] / (z + i);\n }\n const t = z + g + 0.5;\n return 0.5 * Math.log(2 * Math.PI) + (z + 0.5) * Math.log(t) - t + Math.log(x);\n}\n\n/** Two-tailed p-value for t-distribution with df degrees of freedom. */\nfunction tDist2T(t: number, df: number): number {\n const x = df / (df + t * t);\n return incompleteBeta(x, df / 2, 0.5);\n}\n\nexport class TTestFunction extends BaseFunction {\n example = 'T.TEST(A1:A100, B1:B100, 2, 2)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'range1', description: 'The first sample of data.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'range2', description: 'The second sample of data.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'tails', description: 'The number of distribution tails: 1 or 2.', acceptedTypes: ['number'] },\n {\n name: 'type',\n description: 'The type of t-test: 1 (paired), 2 (equal variance), 3 (unequal variance).',\n acceptedTypes: ['number'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const t = Math.floor(ensureNumber(args[2]));\n const tp = Math.floor(ensureNumber(args[3]));\n if (t !== 1 && t !== 2) {\n throw new FormulaError('#NUM!', 'tails must be 1 or 2.');\n }\n if (tp < 1 || tp > 3) {\n throw new FormulaError('#NUM!', 'type must be 1, 2, or 3.');\n }\n\n const a: number[] = [];\n const b: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n a.push(ensureNumber(v));\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n b.push(ensureNumber(v));\n },\n this.at,\n );\n\n if (tp === 1) {\n if (a.length !== b.length || a.length < 2) {\n throw new FormulaError('#N/A', 'Paired T.TEST requires equal-length ranges with at least 2 values.');\n }\n } else {\n if (a.length < 2 || b.length < 2) {\n throw new FormulaError('#DIV/0!', `T.TEST type ${tp} requires at least 2 values per range.`);\n }\n }\n return [a, b, t, tp];\n }\n\n protected main(a: number[], b: number[], t: number, tp: number) {\n let tStat: number;\n let df: number;\n\n if (tp === 1) {\n // Paired\n const diffs = a.map((v, i) => v - b[i]);\n const n = diffs.length;\n const meanD = diffs.reduce((s, v) => s + v, 0) / n;\n const varD = diffs.reduce((s, v) => s + (v - meanD) ** 2, 0) / (n - 1);\n tStat = meanD / Math.sqrt(varD / n);\n df = n - 1;\n } else if (tp === 2) {\n // Two-sample equal variance (pooled)\n const meanA = a.reduce((s, v) => s + v, 0) / a.length;\n const meanB = b.reduce((s, v) => s + v, 0) / b.length;\n const varA = a.reduce((s, v) => s + (v - meanA) ** 2, 0) / (a.length - 1);\n const varB = b.reduce((s, v) => s + (v - meanB) ** 2, 0) / (b.length - 1);\n const pooled = ((a.length - 1) * varA + (b.length - 1) * varB) / (a.length + b.length - 2);\n tStat = (meanA - meanB) / Math.sqrt(pooled * (1 / a.length + 1 / b.length));\n df = a.length + b.length - 2;\n } else {\n // Two-sample unequal variance (Welch)\n const meanA = a.reduce((s, v) => s + v, 0) / a.length;\n const meanB = b.reduce((s, v) => s + v, 0) / b.length;\n const varA = a.reduce((s, v) => s + (v - meanA) ** 2, 0) / (a.length - 1);\n const varB = b.reduce((s, v) => s + (v - meanB) ** 2, 0) / (b.length - 1);\n const sA = varA / a.length;\n const sB = varB / b.length;\n tStat = (meanA - meanB) / Math.sqrt(sA + sB);\n df = (sA + sB) ** 2 / (sA ** 2 / (a.length - 1) + sB ** 2 / (b.length - 1));\n }\n\n const p2 = tDist2T(Math.abs(tStat), df);\n return t === 1 ? p2 / 2 : p2;\n }\n}\n","import type { FunctionMapping } from '@gridsheet/core';\nimport { AverageifFunction } from './averageif';\nimport { AverageifsFunction } from './averageifs';\nimport { MedianFunction } from './median';\nimport { StdevSFunction } from './stdev_s';\nimport { StdevPFunction } from './stdev_p';\nimport { VarSFunction } from './var_s';\nimport { VarPFunction } from './var_p';\nimport { PercentileIncFunction } from './percentile_inc';\nimport { QuartileIncFunction } from './quartile_inc';\nimport { RankEqFunction } from './rank_eq';\nimport { CorrelFunction } from './correl';\nimport { CovarianceSFunction } from './covariance_s';\nimport { CovariancePFunction } from './covariance_p';\nimport { ModeSnglFunction } from './mode_sngl';\nimport { RsqFunction } from './rsq';\nimport { TTestFunction } from './t_test';\n\nexport const statisticsFunctions: FunctionMapping = {\n averageif: AverageifFunction,\n averageifs: AverageifsFunction,\n median: MedianFunction,\n 'stdev.s': StdevSFunction,\n 'stdev.p': StdevPFunction,\n 'var.s': VarSFunction,\n 'var.p': VarPFunction,\n 'percentile.inc': PercentileIncFunction,\n 'quartile.inc': QuartileIncFunction,\n 'rank.eq': RankEqFunction,\n correl: CorrelFunction,\n 'covariance.s': CovarianceSFunction,\n 'covariance.p': CovariancePFunction,\n 'mode.sngl': ModeSnglFunction,\n rsq: RsqFunction,\n 't.test': TTestFunction,\n};\n\nexport default statisticsFunctions;\n"],"names":["description","AverageifFunction","BaseFunction","conditionArg","range","condition","avgRange","conditionStr","ensureString","condArr","avgArr","eachMatrix","v","total","count","c","i","s","stripMatrix","check","FormulaError","AverageifsFunction","args","validatedArgs","Sheet","expectedRows","expectedCols","tables","conditions","mask","createBooleanMask","pt","num","MedianFunction","nums","val","ensureNumber","a","b","mid","StdevSFunction","mean","variance","acc","StdevPFunction","VarSFunction","VarPFunction","PercentileIncFunction","k","pos","lo","hi","QuartileIncFunction","q","RankEqFunction","n","isAscending","CorrelFunction","ys","xs","meanY","meanX","denY","denX","dy","dx","den","CovarianceSFunction","y","CovariancePFunction","ModeSnglFunction","freq","maxFreq","modes","RsqFunction","r","incompleteBeta","x","lbeta","lgamma","front","MAXIT","EPS","f","C","D","m","d","delta","z","t","tDist2T","df","TTestFunction","tp","tStat","diffs","meanD","varD","meanA","meanB","varA","varB","pooled","sA","sB","p2","statisticsFunctions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/statistics/averageif.ts","../../src/statistics/averageifs.ts","../../src/statistics/median.ts","../../src/statistics/stdev_s.ts","../../src/statistics/stdev_p.ts","../../src/statistics/var_s.ts","../../src/statistics/var_p.ts","../../src/statistics/percentile_inc.ts","../../src/statistics/quartile_inc.ts","../../src/statistics/rank_eq.ts","../../src/statistics/correl.ts","../../src/statistics/covariance_s.ts","../../src/statistics/covariance_p.ts","../../src/statistics/mode_sngl.ts","../../src/statistics/rsq.ts","../../src/statistics/t_test.ts","../../src/statistics/index.ts"],"sourcesContent":["import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition } from '@gridsheet/core';\nimport {\n Sheet,\n eachMatrix,\n stripMatrix,\n check,\n conditionArg,\n ensureString,\n ensureNumber,\n isNumeric,\n} from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the average of a series of cells that meet a condition.`;\n\nexport class AverageifFunction extends BaseFunction {\n example = 'AVERAGEIF(A1:A10,\">20\")';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'range', description: 'A condition range.', takesMatrix: true, acceptedTypes: ['matrix'] },\n conditionArg,\n {\n name: 'average_range',\n description: 'A range to be averaged.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n optional: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected main(range: Sheet, condition: any, avgRange?: Sheet) {\n const conditionStr = ensureString(condition);\n const condArr: any[] = [];\n const avgArr: any[] = [];\n\n eachMatrix(\n range,\n (v) => {\n condArr.push(v);\n },\n this.at,\n );\n if (avgRange) {\n eachMatrix(\n avgRange,\n (v) => {\n avgArr.push(v);\n },\n this.at,\n );\n }\n\n let total = 0;\n let count = 0;\n condArr.forEach((c, i) => {\n const s = stripMatrix((avgRange ? avgArr[i] : c) ?? 0, this.at);\n if (isNumeric(s) && check(c, conditionStr)) {\n total += ensureNumber(s);\n count++;\n }\n });\n\n if (count === 0) {\n throw new FormulaError('#DIV/0!', 'No cells match the condition.');\n }\n return total / count;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, conditionArg } from '@gridsheet/core';\nimport {\n Sheet,\n eachMatrix,\n stripMatrix,\n createBooleanMask,\n ensureString,\n ensureNumber,\n isNumeric,\n} from '@gridsheet/core';\nimport type { FunctionCategory, PointType } from '@gridsheet/core';\n\nconst description = `Returns the average of a range depending on multiple criteria.`;\n\nexport class AverageifsFunction extends BaseFunction {\n example = 'AVERAGEIFS(A1:A10, B1:B10, \">20\")';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'average_range', description: 'The range to be averaged.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'range1', description: 'First condition range.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { ...conditionArg, name: 'condition1' },\n {\n name: 'range2',\n description: 'Additional condition range.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n optional: true,\n variadic: true,\n },\n { ...conditionArg, name: 'condition2', optional: true, variadic: true },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const validatedArgs = super.validate(args);\n if ((validatedArgs.length - 1) % 2 !== 0) {\n throw new FormulaError('#N/A', 'AVERAGEIFS requires average_range and at least one range/condition pair.');\n }\n if (!(validatedArgs[0] instanceof Sheet)) {\n throw new FormulaError('#VALUE!', 'First argument of AVERAGEIFS must be a range.');\n }\n const expectedRows = validatedArgs[0].numRows;\n const expectedCols = validatedArgs[0].numCols;\n\n const tables: Sheet[] = [];\n const conditions: string[] = [];\n for (let i = 1; i < validatedArgs.length; i += 2) {\n if (!(validatedArgs[i] instanceof Sheet)) {\n throw new FormulaError('#VALUE!', `Argument ${i + 1} of AVERAGEIFS must be a range.`);\n }\n if (validatedArgs[i].numRows !== expectedRows || validatedArgs[i].numCols !== expectedCols) {\n throw new FormulaError('#VALUE!', 'Array arguments to AVERAGEIFS are of different size.');\n }\n tables.push(validatedArgs[i] as Sheet);\n conditions.push(ensureString(validatedArgs[i + 1]));\n }\n const avgRange = validatedArgs[0];\n const mask = createBooleanMask(tables, conditions, this.at);\n return [avgRange, mask];\n }\n\n protected main(avgRange: Sheet, mask: boolean[][]) {\n let total = 0;\n let count = 0;\n eachMatrix(\n avgRange,\n (v: any, pt: PointType) => {\n if (pt && mask[pt.y][pt.x]) {\n const num = stripMatrix(v ?? 0, this.at);\n if (isNumeric(num)) {\n total += ensureNumber(num);\n count++;\n }\n }\n },\n this.at,\n );\n\n if (count === 0) {\n return new FormulaError('#DIV/0!', 'No matching cells found for AVERAGEIFS.');\n }\n return total / count;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the median value in a numeric dataset.`;\n\nexport class MedianFunction extends BaseFunction {\n example = 'MEDIAN(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges to compute the median of.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'MEDIAN requires at least one numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n nums.sort((a, b) => a - b);\n const mid = Math.floor(nums.length / 2);\n return nums.length % 2 === 0 ? (nums[mid - 1] + nums[mid]) / 2 : nums[mid];\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the standard deviation based on a sample.`;\n\nexport class StdevSFunction extends BaseFunction {\n example = 'STDEV.S(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the sample.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 2) {\n throw new FormulaError('#DIV/0!', 'STDEV.S requires at least 2 numeric values.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n const variance = nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / (nums.length - 1);\n return Math.sqrt(variance);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the standard deviation based on the entire population.`;\n\nexport class StdevPFunction extends BaseFunction {\n example = 'STDEV.P(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the entire population.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 1) {\n throw new FormulaError('#DIV/0!', 'STDEV.P requires at least 1 numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n const variance = nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / nums.length;\n return Math.sqrt(variance);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the variance based on a sample.`;\n\nexport class VarSFunction extends BaseFunction {\n example = 'VAR.S(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the sample.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 2) {\n throw new FormulaError('#DIV/0!', 'VAR.S requires at least 2 numeric values.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n return nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / (nums.length - 1);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the variance based on the entire population.`;\n\nexport class VarPFunction extends BaseFunction {\n example = 'VAR.P(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges representing the entire population.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length < 1) {\n throw new FormulaError('#DIV/0!', 'VAR.P requires at least 1 numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const mean = nums.reduce((a, b) => a + b, 0) / nums.length;\n return nums.reduce((acc, v) => acc + (v - mean) ** 2, 0) / nums.length;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the k-th percentile of values in a range, where k is in the range 0 to 1, inclusive.`;\n\nexport class PercentileIncFunction extends BaseFunction {\n example = 'PERCENTILE.INC(A1:A100, 0.9)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n { name: 'percentile', description: 'The percentile value between 0 and 1, inclusive.', acceptedTypes: ['number'] },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const k = ensureNumber(args[1]);\n if (k < 0 || k > 1) {\n throw new FormulaError('#NUM!', 'Percentile must be between 0 and 1.');\n }\n const nums: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'PERCENTILE.INC requires at least one numeric value.');\n }\n return [nums, k];\n }\n\n protected main(nums: number[], k: number) {\n nums.sort((a, b) => a - b);\n const pos = k * (nums.length - 1);\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n return nums[lo] + (nums[hi] - nums[lo]) * (pos - lo);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the quartile of a dataset, based on percentile values from 0 to 1, inclusive.`;\n\nexport class QuartileIncFunction extends BaseFunction {\n example = 'QUARTILE.INC(A1:A100, 1)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'quartile_number',\n description: 'Which quartile to return: 0 (min), 1 (Q1), 2 (median), 3 (Q3), 4 (max).',\n acceptedTypes: ['number'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const q = Math.floor(ensureNumber(args[1]));\n if (q < 0 || q > 4) {\n throw new FormulaError('#NUM!', 'Quartile number must be between 0 and 4.');\n }\n const nums: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'QUARTILE.INC requires at least one numeric value.');\n }\n return [nums, q];\n }\n\n protected main(nums: number[], q: number) {\n nums.sort((a, b) => a - b);\n const k = q / 4;\n const pos = k * (nums.length - 1);\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n return nums[lo] + (nums[hi] - nums[lo]) * (pos - lo);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the rank of a number in a list of numbers. If more than one value has the same rank, the top rank of that set of values is returned.`;\n\nexport class RankEqFunction extends BaseFunction {\n example = 'RANK.EQ(A1, A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'value', description: 'The value whose rank will be determined.', acceptedTypes: ['number'] },\n {\n name: 'data',\n description: 'The array or range of data to consider.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'is_ascending',\n description: 'Whether to rank in ascending order. Default is FALSE (descending).',\n acceptedTypes: ['boolean'],\n optional: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const v = ensureNumber(args[0]);\n const nums: number[] = [];\n eachMatrix(\n args[1],\n (n: any) => {\n if (n == null || n === '' || typeof n === 'boolean') {\n return;\n }\n if (isNumeric(n)) {\n nums.push(ensureNumber(n));\n }\n },\n this.at,\n );\n if (nums.length === 0) {\n throw new FormulaError('#NUM!', 'RANK.EQ requires at least one numeric value in data.');\n }\n if (!nums.includes(v)) {\n throw new FormulaError('#N/A', 'Value not found in data range.');\n }\n const isAscending = args[2] ?? false;\n return [v, nums, isAscending];\n }\n\n protected main(v: number, nums: number[], isAscending: boolean) {\n nums.sort((a, b) => (isAscending ? a - b : b - a));\n return nums.indexOf(v) + 1;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the correlation coefficient of two datasets.`;\n\nexport class CorrelFunction extends BaseFunction {\n example = 'CORREL(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the dependent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the independent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 2) {\n throw new FormulaError('#N/A', 'CORREL requires two ranges of equal length with at least 2 values.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n\n let num = 0,\n denY = 0,\n denX = 0;\n for (let i = 0; i < n; i++) {\n const dy = ys[i] - meanY;\n const dx = xs[i] - meanX;\n num += dy * dx;\n denY += dy * dy;\n denX += dx * dx;\n }\n const den = Math.sqrt(denY * denX);\n if (den === 0) {\n throw new FormulaError('#DIV/0!', 'Standard deviation of one dataset is zero.');\n }\n return num / den;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the sample covariance, the average of the products of deviations for each data point pair in two datasets.`;\n\nexport class CovarianceSFunction extends BaseFunction {\n example = 'COVARIANCE.S(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the first dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the second dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 2) {\n throw new FormulaError('#N/A', 'COVARIANCE.S requires two ranges of equal length with at least 2 values.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n return ys.reduce((acc, y, i) => acc + (y - meanY) * (xs[i] - meanX), 0) / (n - 1);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the population covariance, the average of the products of deviations for each data point pair in two datasets.`;\n\nexport class CovariancePFunction extends BaseFunction {\n example = 'COVARIANCE.P(A1:A100, B1:B100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the first dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the second dataset.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length || ys.length < 1) {\n throw new FormulaError('#N/A', 'COVARIANCE.P requires two ranges of equal length with at least 1 value.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n return ys.reduce((acc, y, i) => acc + (y - meanY) * (xs[i] - meanX), 0) / n;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the most commonly occurring value in a dataset. If there are multiple modes, the smallest is returned.`;\n\nexport class ModeSnglFunction extends BaseFunction {\n example = 'MODE.SNGL(A1:A100)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'value',\n description: 'Numbers or ranges to compute the mode of.',\n takesMatrix: true,\n acceptedTypes: ['number', 'matrix'],\n variadic: true,\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const nums: number[] = [];\n for (const val of args) {\n eachMatrix(\n val,\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n nums.push(ensureNumber(v));\n }\n },\n this.at,\n );\n }\n if (nums.length === 0) {\n throw new FormulaError('#N/A', 'MODE.SNGL requires at least one numeric value.');\n }\n return [nums];\n }\n\n protected main(nums: number[]) {\n const freq = new Map<number, number>();\n for (const n of nums) {\n freq.set(n, (freq.get(n) ?? 0) + 1);\n }\n const maxFreq = Math.max(...freq.values());\n if (maxFreq < 2) {\n throw new FormulaError('#N/A', 'No value appears more than once.');\n }\n const modes = [...freq.entries()].filter(([, c]) => c === maxFreq).map(([n]) => n);\n return Math.min(...modes);\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber, isNumeric } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the square of the Pearson product-moment correlation coefficient (R²).`;\n\nexport class RsqFunction extends BaseFunction {\n example = 'RSQ(A1:A10, B1:B10)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n {\n name: 'data_y',\n description: 'The range representing the dependent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n {\n name: 'data_x',\n description: 'The range representing the independent data.',\n takesMatrix: true,\n acceptedTypes: ['matrix'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const ys: number[] = [];\n const xs: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n ys.push(ensureNumber(v));\n }\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n if (isNumeric(v)) {\n xs.push(ensureNumber(v));\n }\n },\n this.at,\n );\n if (ys.length !== xs.length) {\n throw new FormulaError('#N/A', 'RSQ requires two ranges of equal length.');\n }\n if (ys.length < 2) {\n throw new FormulaError('#N/A', 'RSQ requires at least 2 data points.');\n }\n return [ys, xs];\n }\n\n protected main(ys: number[], xs: number[]) {\n const n = ys.length;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n\n let num = 0,\n denY = 0,\n denX = 0;\n for (let i = 0; i < n; i++) {\n const dy = ys[i] - meanY;\n const dx = xs[i] - meanX;\n num += dy * dx;\n denY += dy * dy;\n denX += dx * dx;\n }\n const den = Math.sqrt(denY * denX);\n if (den === 0) {\n throw new FormulaError('#DIV/0!', 'Standard deviation of one dataset is zero.');\n }\n const r = num / den;\n return r * r;\n }\n}\n","import { FormulaError } from '@gridsheet/core';\nimport { BaseFunction, type FunctionArgumentDefinition, eachMatrix } from '@gridsheet/core';\nimport { ensureNumber } from '@gridsheet/core';\nimport type { FunctionCategory } from '@gridsheet/core';\n\nconst description = `Returns the probability associated with a Student's t-test.\ntails: 1 (one-tailed) or 2 (two-tailed).\ntype: 1 (paired), 2 (two-sample equal variance), 3 (two-sample unequal variance).`;\n\n/** Regularized incomplete beta function via continued fraction (Lentz's method). */\nfunction incompleteBeta(x: number, a: number, b: number): number {\n if (x <= 0) {\n return 0;\n }\n if (x >= 1) {\n return 1;\n }\n // Use symmetry relation when x > (a+1)/(a+b+2)\n if (x > (a + 1) / (a + b + 2)) {\n return 1 - incompleteBeta(1 - x, b, a);\n }\n const lbeta = lgamma(a) + lgamma(b) - lgamma(a + b);\n const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lbeta) / a;\n // Continued fraction via modified Lentz\n const MAXIT = 200;\n const EPS = 3e-7;\n let f = 1,\n C = 1,\n D = 1 - ((a + b) * x) / (a + 1);\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n D = 1 / D;\n f = D;\n for (let m = 1; m <= MAXIT; m++) {\n // Even step\n let d = (m * (b - m) * x) / ((a + 2 * m - 1) * (a + 2 * m));\n D = 1 + d * D;\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n C = 1 + d / C;\n if (Math.abs(C) < 1e-30) {\n C = 1e-30;\n }\n D = 1 / D;\n f *= D * C;\n // Odd step\n d = (-(a + m) * (a + b + m) * x) / ((a + 2 * m) * (a + 2 * m + 1));\n D = 1 + d * D;\n if (Math.abs(D) < 1e-30) {\n D = 1e-30;\n }\n C = 1 + d / C;\n if (Math.abs(C) < 1e-30) {\n C = 1e-30;\n }\n D = 1 / D;\n const delta = D * C;\n f *= delta;\n if (Math.abs(delta - 1) < EPS) {\n break;\n }\n }\n return front * f;\n}\n\nfunction lgamma(z: number): number {\n // Lanczos approximation\n const g = 7;\n const c = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059,\n 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7,\n ];\n if (z < 0.5) {\n return Math.log(Math.PI / Math.sin(Math.PI * z)) - lgamma(1 - z);\n }\n z--;\n let x = c[0];\n for (let i = 1; i < g + 2; i++) {\n x += c[i] / (z + i);\n }\n const t = z + g + 0.5;\n return 0.5 * Math.log(2 * Math.PI) + (z + 0.5) * Math.log(t) - t + Math.log(x);\n}\n\n/** Two-tailed p-value for t-distribution with df degrees of freedom. */\nfunction tDist2T(t: number, df: number): number {\n const x = df / (df + t * t);\n return incompleteBeta(x, df / 2, 0.5);\n}\n\nexport class TTestFunction extends BaseFunction {\n example = 'T.TEST(A1:A100, B1:B100, 2, 2)';\n description = description;\n defs: FunctionArgumentDefinition[] = [\n { name: 'range1', description: 'The first sample of data.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'range2', description: 'The second sample of data.', takesMatrix: true, acceptedTypes: ['matrix'] },\n { name: 'tails', description: 'The number of distribution tails: 1 or 2.', acceptedTypes: ['number'] },\n {\n name: 'type',\n description: 'The type of t-test: 1 (paired), 2 (equal variance), 3 (unequal variance).',\n acceptedTypes: ['number'],\n },\n ];\n category: FunctionCategory = 'statistics';\n\n protected validate(args: any[]): any[] {\n const t = Math.floor(ensureNumber(args[2]));\n const tp = Math.floor(ensureNumber(args[3]));\n if (t !== 1 && t !== 2) {\n throw new FormulaError('#NUM!', 'tails must be 1 or 2.');\n }\n if (tp < 1 || tp > 3) {\n throw new FormulaError('#NUM!', 'type must be 1, 2, or 3.');\n }\n\n const a: number[] = [];\n const b: number[] = [];\n eachMatrix(\n args[0],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n a.push(ensureNumber(v));\n },\n this.at,\n );\n eachMatrix(\n args[1],\n (v: any) => {\n if (v == null || v === '' || typeof v === 'boolean') {\n return;\n }\n b.push(ensureNumber(v));\n },\n this.at,\n );\n\n if (tp === 1) {\n if (a.length !== b.length || a.length < 2) {\n throw new FormulaError('#N/A', 'Paired T.TEST requires equal-length ranges with at least 2 values.');\n }\n } else {\n if (a.length < 2 || b.length < 2) {\n throw new FormulaError('#DIV/0!', `T.TEST type ${tp} requires at least 2 values per range.`);\n }\n }\n return [a, b, t, tp];\n }\n\n protected main(a: number[], b: number[], t: number, tp: number) {\n let tStat: number;\n let df: number;\n\n if (tp === 1) {\n // Paired\n const diffs = a.map((v, i) => v - b[i]);\n const n = diffs.length;\n const meanD = diffs.reduce((s, v) => s + v, 0) / n;\n const varD = diffs.reduce((s, v) => s + (v - meanD) ** 2, 0) / (n - 1);\n tStat = meanD / Math.sqrt(varD / n);\n df = n - 1;\n } else if (tp === 2) {\n // Two-sample equal variance (pooled)\n const meanA = a.reduce((s, v) => s + v, 0) / a.length;\n const meanB = b.reduce((s, v) => s + v, 0) / b.length;\n const varA = a.reduce((s, v) => s + (v - meanA) ** 2, 0) / (a.length - 1);\n const varB = b.reduce((s, v) => s + (v - meanB) ** 2, 0) / (b.length - 1);\n const pooled = ((a.length - 1) * varA + (b.length - 1) * varB) / (a.length + b.length - 2);\n tStat = (meanA - meanB) / Math.sqrt(pooled * (1 / a.length + 1 / b.length));\n df = a.length + b.length - 2;\n } else {\n // Two-sample unequal variance (Welch)\n const meanA = a.reduce((s, v) => s + v, 0) / a.length;\n const meanB = b.reduce((s, v) => s + v, 0) / b.length;\n const varA = a.reduce((s, v) => s + (v - meanA) ** 2, 0) / (a.length - 1);\n const varB = b.reduce((s, v) => s + (v - meanB) ** 2, 0) / (b.length - 1);\n const sA = varA / a.length;\n const sB = varB / b.length;\n tStat = (meanA - meanB) / Math.sqrt(sA + sB);\n df = (sA + sB) ** 2 / (sA ** 2 / (a.length - 1) + sB ** 2 / (b.length - 1));\n }\n\n const p2 = tDist2T(Math.abs(tStat), df);\n return t === 1 ? p2 / 2 : p2;\n }\n}\n","import type { FunctionMapping } from '@gridsheet/core';\nimport { AverageifFunction } from './averageif';\nimport { AverageifsFunction } from './averageifs';\nimport { MedianFunction } from './median';\nimport { StdevSFunction } from './stdev_s';\nimport { StdevPFunction } from './stdev_p';\nimport { VarSFunction } from './var_s';\nimport { VarPFunction } from './var_p';\nimport { PercentileIncFunction } from './percentile_inc';\nimport { QuartileIncFunction } from './quartile_inc';\nimport { RankEqFunction } from './rank_eq';\nimport { CorrelFunction } from './correl';\nimport { CovarianceSFunction } from './covariance_s';\nimport { CovariancePFunction } from './covariance_p';\nimport { ModeSnglFunction } from './mode_sngl';\nimport { RsqFunction } from './rsq';\nimport { TTestFunction } from './t_test';\n\nexport const statisticsFunctions: FunctionMapping = {\n averageif: AverageifFunction,\n averageifs: AverageifsFunction,\n median: MedianFunction,\n 'stdev.s': StdevSFunction,\n 'stdev.p': StdevPFunction,\n 'var.s': VarSFunction,\n 'var.p': VarPFunction,\n 'percentile.inc': PercentileIncFunction,\n 'quartile.inc': QuartileIncFunction,\n 'rank.eq': RankEqFunction,\n correl: CorrelFunction,\n 'covariance.s': CovarianceSFunction,\n 'covariance.p': CovariancePFunction,\n 'mode.sngl': ModeSnglFunction,\n rsq: RsqFunction,\n 't.test': TTestFunction,\n};\n\nexport default statisticsFunctions;\n"],"names":["description","AverageifFunction","BaseFunction","conditionArg","range","condition","avgRange","conditionStr","ensureString","condArr","avgArr","eachMatrix","v","total","count","c","i","s","stripMatrix","isNumeric","check","ensureNumber","FormulaError","AverageifsFunction","args","validatedArgs","Sheet","expectedRows","expectedCols","tables","conditions","mask","createBooleanMask","pt","num","MedianFunction","nums","val","b","mid","StdevSFunction","mean","a","variance","acc","StdevPFunction","VarSFunction","VarPFunction","PercentileIncFunction","k","pos","lo","hi","QuartileIncFunction","q","RankEqFunction","n","isAscending","CorrelFunction","ys","xs","meanY","meanX","denY","denX","dy","dx","den","CovarianceSFunction","y","CovariancePFunction","ModeSnglFunction","freq","maxFreq","modes","RsqFunction","r","incompleteBeta","x","lbeta","lgamma","front","MAXIT","EPS","f","C","D","m","d","delta","z","t","tDist2T","df","TTestFunction","tp","tStat","diffs","meanD","varD","meanA","meanB","varA","varB","pooled","sA","sB","p2","statisticsFunctions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gridsheet/functions",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Extended formula functions for @gridsheet/react-core",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -49,7 +49,11 @@
|
|
|
49
49
|
"keywords": [
|
|
50
50
|
"spreadsheet",
|
|
51
51
|
"formula",
|
|
52
|
-
"functions"
|
|
52
|
+
"functions",
|
|
53
|
+
"gridsheet",
|
|
54
|
+
"excel",
|
|
55
|
+
"math",
|
|
56
|
+
"statistics"
|
|
53
57
|
],
|
|
54
58
|
"author": "righ",
|
|
55
59
|
"license": "Apache-2.0",
|
|
@@ -68,10 +72,10 @@
|
|
|
68
72
|
"typescript": "^5.8.2",
|
|
69
73
|
"vite": "^6.2.2",
|
|
70
74
|
"vite-plugin-dts": "^4.5.3",
|
|
71
|
-
"@gridsheet/core": "3.0.
|
|
75
|
+
"@gridsheet/core": "3.0.3"
|
|
72
76
|
},
|
|
73
77
|
"peerDependencies": {
|
|
74
|
-
"@gridsheet/core": "3.0.
|
|
78
|
+
"@gridsheet/core": "3.0.3"
|
|
75
79
|
},
|
|
76
80
|
"publishConfig": {
|
|
77
81
|
"access": "public"
|