@silupanda/label-score 0.3.2

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.
Files changed (70) hide show
  1. package/README.md +694 -0
  2. package/dist/__tests__/cohen-kappa.test.d.ts +2 -0
  3. package/dist/__tests__/cohen-kappa.test.d.ts.map +1 -0
  4. package/dist/__tests__/cohen-kappa.test.js +110 -0
  5. package/dist/__tests__/cohen-kappa.test.js.map +1 -0
  6. package/dist/__tests__/fleiss-kappa.test.d.ts +2 -0
  7. package/dist/__tests__/fleiss-kappa.test.d.ts.map +1 -0
  8. package/dist/__tests__/fleiss-kappa.test.js +84 -0
  9. package/dist/__tests__/fleiss-kappa.test.js.map +1 -0
  10. package/dist/__tests__/gwet-ac1.test.d.ts +2 -0
  11. package/dist/__tests__/gwet-ac1.test.d.ts.map +1 -0
  12. package/dist/__tests__/gwet-ac1.test.js +74 -0
  13. package/dist/__tests__/gwet-ac1.test.js.map +1 -0
  14. package/dist/__tests__/interpret.test.d.ts +2 -0
  15. package/dist/__tests__/interpret.test.d.ts.map +1 -0
  16. package/dist/__tests__/interpret.test.js +66 -0
  17. package/dist/__tests__/interpret.test.js.map +1 -0
  18. package/dist/__tests__/krippendorff-alpha.test.d.ts +2 -0
  19. package/dist/__tests__/krippendorff-alpha.test.d.ts.map +1 -0
  20. package/dist/__tests__/krippendorff-alpha.test.js +98 -0
  21. package/dist/__tests__/krippendorff-alpha.test.js.map +1 -0
  22. package/dist/__tests__/scott-pi.test.d.ts +2 -0
  23. package/dist/__tests__/scott-pi.test.d.ts.map +1 -0
  24. package/dist/__tests__/scott-pi.test.js +60 -0
  25. package/dist/__tests__/scott-pi.test.js.map +1 -0
  26. package/dist/__tests__/types.test.d.ts +2 -0
  27. package/dist/__tests__/types.test.d.ts.map +1 -0
  28. package/dist/__tests__/types.test.js +92 -0
  29. package/dist/__tests__/types.test.js.map +1 -0
  30. package/dist/__tests__/validate.test.d.ts +2 -0
  31. package/dist/__tests__/validate.test.d.ts.map +1 -0
  32. package/dist/__tests__/validate.test.js +121 -0
  33. package/dist/__tests__/validate.test.js.map +1 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +24 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/interpret.d.ts +23 -0
  39. package/dist/interpret.d.ts.map +1 -0
  40. package/dist/interpret.js +48 -0
  41. package/dist/interpret.js.map +1 -0
  42. package/dist/metrics/cohen-kappa.d.ts +16 -0
  43. package/dist/metrics/cohen-kappa.d.ts.map +1 -0
  44. package/dist/metrics/cohen-kappa.js +130 -0
  45. package/dist/metrics/cohen-kappa.js.map +1 -0
  46. package/dist/metrics/fleiss-kappa.d.ts +17 -0
  47. package/dist/metrics/fleiss-kappa.d.ts.map +1 -0
  48. package/dist/metrics/fleiss-kappa.js +63 -0
  49. package/dist/metrics/fleiss-kappa.js.map +1 -0
  50. package/dist/metrics/gwet-ac1.d.ts +19 -0
  51. package/dist/metrics/gwet-ac1.d.ts.map +1 -0
  52. package/dist/metrics/gwet-ac1.js +82 -0
  53. package/dist/metrics/gwet-ac1.js.map +1 -0
  54. package/dist/metrics/krippendorff-alpha.d.ts +21 -0
  55. package/dist/metrics/krippendorff-alpha.d.ts.map +1 -0
  56. package/dist/metrics/krippendorff-alpha.js +162 -0
  57. package/dist/metrics/krippendorff-alpha.js.map +1 -0
  58. package/dist/metrics/scott-pi.d.ts +18 -0
  59. package/dist/metrics/scott-pi.d.ts.map +1 -0
  60. package/dist/metrics/scott-pi.js +73 -0
  61. package/dist/metrics/scott-pi.js.map +1 -0
  62. package/dist/types.d.ts +119 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +3 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/validate.d.ts +33 -0
  67. package/dist/validate.d.ts.map +1 -0
  68. package/dist/validate.js +83 -0
  69. package/dist/validate.js.map +1 -0
  70. package/package.json +33 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ (0, vitest_1.describe)('types: compile-time shape checks', () => {
5
+ (0, vitest_1.it)('KappaResult can be constructed with required fields', () => {
6
+ const result = {
7
+ metric: 'cohens-kappa',
8
+ value: 0.75,
9
+ observed: 0.85,
10
+ expected: 0.40,
11
+ interpretation: 'substantial',
12
+ };
13
+ (0, vitest_1.expect)(result.metric).toBe('cohens-kappa');
14
+ (0, vitest_1.expect)(result.value).toBe(0.75);
15
+ (0, vitest_1.expect)(result.observed).toBe(0.85);
16
+ (0, vitest_1.expect)(result.expected).toBe(0.40);
17
+ (0, vitest_1.expect)(result.interpretation).toBe('substantial');
18
+ (0, vitest_1.expect)(result.ci).toBeUndefined();
19
+ (0, vitest_1.expect)(result.categories).toBeUndefined();
20
+ });
21
+ (0, vitest_1.it)('FleissKappaResult has annotatorCount and itemCount', () => {
22
+ const result = {
23
+ metric: 'fleiss-kappa',
24
+ value: 0.60,
25
+ observed: 0.70,
26
+ expected: 0.25,
27
+ interpretation: 'substantial',
28
+ annotatorCount: 5,
29
+ itemCount: 100,
30
+ };
31
+ (0, vitest_1.expect)(result.annotatorCount).toBe(5);
32
+ (0, vitest_1.expect)(result.itemCount).toBe(100);
33
+ });
34
+ (0, vitest_1.it)('AlphaResult has missingCount', () => {
35
+ const result = {
36
+ metric: 'krippendorff-alpha',
37
+ value: 0.85,
38
+ interpretation: 'reliable',
39
+ level: 'nominal',
40
+ itemCount: 50,
41
+ annotatorCount: 3,
42
+ missingCount: 2,
43
+ };
44
+ (0, vitest_1.expect)(result.missingCount).toBe(2);
45
+ (0, vitest_1.expect)(result.itemCount).toBe(50);
46
+ (0, vitest_1.expect)(result.annotatorCount).toBe(3);
47
+ });
48
+ (0, vitest_1.it)('AgreementOptions all fields optional', () => {
49
+ const empty = {};
50
+ (0, vitest_1.expect)(empty).toBeDefined();
51
+ const full = {
52
+ metric: 'cohens-kappa',
53
+ level: 'ordinal',
54
+ missingData: 'exclude',
55
+ ci: true,
56
+ ciLevel: 0.95,
57
+ seed: 42,
58
+ };
59
+ (0, vitest_1.expect)(full.metric).toBe('cohens-kappa');
60
+ });
61
+ (0, vitest_1.it)('MetricName union covers all 6 metrics', () => {
62
+ const metrics = [
63
+ 'cohens-kappa',
64
+ 'fleiss-kappa',
65
+ 'krippendorff-alpha',
66
+ 'scotts-pi',
67
+ 'gwets-ac1',
68
+ 'percent-agreement',
69
+ ];
70
+ (0, vitest_1.expect)(metrics).toHaveLength(6);
71
+ });
72
+ (0, vitest_1.it)('MeasurementLevel covers all 4 values', () => {
73
+ const levels = ['nominal', 'ordinal', 'interval', 'ratio'];
74
+ (0, vitest_1.expect)(levels).toHaveLength(4);
75
+ });
76
+ (0, vitest_1.it)('Interpretation covers all 6 values', () => {
77
+ const values = [
78
+ 'poor',
79
+ 'slight',
80
+ 'fair',
81
+ 'moderate',
82
+ 'substantial',
83
+ 'almost-perfect',
84
+ ];
85
+ (0, vitest_1.expect)(values).toHaveLength(6);
86
+ });
87
+ (0, vitest_1.it)('AlphaInterpretation covers all 3 values', () => {
88
+ const values = ['unreliable', 'tentative', 'reliable'];
89
+ (0, vitest_1.expect)(values).toHaveLength(3);
90
+ });
91
+ });
92
+ //# sourceMappingURL=types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/__tests__/types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/validate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const validate_1 = require("../validate");
5
+ (0, vitest_1.describe)('assertEqualLength', () => {
6
+ (0, vitest_1.it)('passes when arrays have equal lengths', () => {
7
+ (0, vitest_1.expect)(() => (0, validate_1.assertEqualLength)([1, 2, 3], ['a', 'b', 'c'])).not.toThrow();
8
+ });
9
+ (0, vitest_1.it)('passes for two empty arrays', () => {
10
+ (0, vitest_1.expect)(() => (0, validate_1.assertEqualLength)([], [])).not.toThrow();
11
+ });
12
+ (0, vitest_1.it)('throws when arrays have different lengths', () => {
13
+ (0, vitest_1.expect)(() => (0, validate_1.assertEqualLength)([1, 2], [1])).toThrow('Arrays must have equal length: got 2 and 1');
14
+ });
15
+ (0, vitest_1.it)('includes optional label in error message', () => {
16
+ (0, vitest_1.expect)(() => (0, validate_1.assertEqualLength)([1, 2], [1], 'annotators')).toThrow('Arrays must have equal length: got 2 and 1 annotators');
17
+ });
18
+ });
19
+ (0, vitest_1.describe)('assertNonEmpty', () => {
20
+ (0, vitest_1.it)('passes for a non-empty array', () => {
21
+ (0, vitest_1.expect)(() => (0, validate_1.assertNonEmpty)([1, 2, 3])).not.toThrow();
22
+ });
23
+ (0, vitest_1.it)('throws for an empty array', () => {
24
+ (0, vitest_1.expect)(() => (0, validate_1.assertNonEmpty)([])).toThrow('Array must be non-empty');
25
+ });
26
+ (0, vitest_1.it)('includes optional label in error message', () => {
27
+ (0, vitest_1.expect)(() => (0, validate_1.assertNonEmpty)([], 'labels')).toThrow('Array must be non-empty labels');
28
+ });
29
+ });
30
+ (0, vitest_1.describe)('assertConsistentRowLengths', () => {
31
+ (0, vitest_1.it)('passes for a matrix with consistent row lengths', () => {
32
+ (0, vitest_1.expect)(() => (0, validate_1.assertConsistentRowLengths)([[1, 2], [3, 4], [5, 6]])).not.toThrow();
33
+ });
34
+ (0, vitest_1.it)('passes for an empty matrix', () => {
35
+ (0, vitest_1.expect)(() => (0, validate_1.assertConsistentRowLengths)([])).not.toThrow();
36
+ });
37
+ (0, vitest_1.it)('passes for a single-row matrix', () => {
38
+ (0, vitest_1.expect)(() => (0, validate_1.assertConsistentRowLengths)([[1, 2, 3]])).not.toThrow();
39
+ });
40
+ (0, vitest_1.it)('throws when rows have different lengths', () => {
41
+ (0, vitest_1.expect)(() => (0, validate_1.assertConsistentRowLengths)([[1, 2], [3, 4, 5]])).toThrow('Matrix has inconsistent row lengths');
42
+ });
43
+ });
44
+ (0, vitest_1.describe)('assertConstantRowSums', () => {
45
+ (0, vitest_1.it)('passes when all rows have equal sums', () => {
46
+ (0, vitest_1.expect)(() => (0, validate_1.assertConstantRowSums)([[1, 2, 3], [2, 2, 2], [0, 0, 6]])).not.toThrow();
47
+ });
48
+ (0, vitest_1.it)('passes for an empty matrix', () => {
49
+ (0, vitest_1.expect)(() => (0, validate_1.assertConstantRowSums)([])).not.toThrow();
50
+ });
51
+ (0, vitest_1.it)('passes for a single row', () => {
52
+ (0, vitest_1.expect)(() => (0, validate_1.assertConstantRowSums)([[3, 2, 1]])).not.toThrow();
53
+ });
54
+ (0, vitest_1.it)('throws when rows have different sums', () => {
55
+ (0, vitest_1.expect)(() => (0, validate_1.assertConstantRowSums)([[1, 2], [3, 4]])).toThrow('Category-count matrix rows must have equal sums');
56
+ });
57
+ (0, vitest_1.it)('passes with floating-point values within tolerance', () => {
58
+ (0, vitest_1.expect)(() => (0, validate_1.assertConstantRowSums)([[0.1, 0.2, 0.7], [0.4, 0.4, 0.2]])).not.toThrow();
59
+ });
60
+ });
61
+ (0, vitest_1.describe)('assertMinAnnotators', () => {
62
+ (0, vitest_1.it)('passes for exactly 2 annotators', () => {
63
+ (0, vitest_1.expect)(() => (0, validate_1.assertMinAnnotators)(2)).not.toThrow();
64
+ });
65
+ (0, vitest_1.it)('passes for more than 2 annotators', () => {
66
+ (0, vitest_1.expect)(() => (0, validate_1.assertMinAnnotators)(5)).not.toThrow();
67
+ });
68
+ (0, vitest_1.it)('throws for 1 annotator', () => {
69
+ (0, vitest_1.expect)(() => (0, validate_1.assertMinAnnotators)(1)).toThrow('At least 2 annotators required, got 1');
70
+ });
71
+ (0, vitest_1.it)('throws for 0 annotators', () => {
72
+ (0, vitest_1.expect)(() => (0, validate_1.assertMinAnnotators)(0)).toThrow('At least 2 annotators required, got 0');
73
+ });
74
+ });
75
+ (0, vitest_1.describe)('detectDuplicates', () => {
76
+ (0, vitest_1.it)('returns empty array when there are no duplicates', () => {
77
+ const triples = [
78
+ { item: 1, annotator: 'A' },
79
+ { item: 1, annotator: 'B' },
80
+ { item: 2, annotator: 'A' },
81
+ ];
82
+ (0, vitest_1.expect)((0, validate_1.detectDuplicates)(triples)).toEqual([]);
83
+ });
84
+ (0, vitest_1.it)('returns the duplicate pair when a pair appears more than once', () => {
85
+ const triples = [
86
+ { item: 1, annotator: 'A' },
87
+ { item: 1, annotator: 'A' },
88
+ { item: 2, annotator: 'B' },
89
+ ];
90
+ const result = (0, validate_1.detectDuplicates)(triples);
91
+ (0, vitest_1.expect)(result).toHaveLength(1);
92
+ (0, vitest_1.expect)(result[0]).toEqual({ item: 1, annotator: 'A' });
93
+ });
94
+ (0, vitest_1.it)('returns each duplicate pair only once even when it appears 3 times', () => {
95
+ const triples = [
96
+ { item: 'x', annotator: 1 },
97
+ { item: 'x', annotator: 1 },
98
+ { item: 'x', annotator: 1 },
99
+ ];
100
+ const result = (0, validate_1.detectDuplicates)(triples);
101
+ (0, vitest_1.expect)(result).toHaveLength(1);
102
+ (0, vitest_1.expect)(result[0]).toEqual({ item: 'x', annotator: 1 });
103
+ });
104
+ (0, vitest_1.it)('returns multiple duplicate pairs when several pairs are duplicated', () => {
105
+ const triples = [
106
+ { item: 1, annotator: 'A' },
107
+ { item: 1, annotator: 'A' },
108
+ { item: 2, annotator: 'B' },
109
+ { item: 2, annotator: 'B' },
110
+ { item: 3, annotator: 'C' },
111
+ ];
112
+ const result = (0, validate_1.detectDuplicates)(triples);
113
+ (0, vitest_1.expect)(result).toHaveLength(2);
114
+ (0, vitest_1.expect)(result).toContainEqual({ item: 1, annotator: 'A' });
115
+ (0, vitest_1.expect)(result).toContainEqual({ item: 2, annotator: 'B' });
116
+ });
117
+ (0, vitest_1.it)('returns empty array for an empty input', () => {
118
+ (0, vitest_1.expect)((0, validate_1.detectDuplicates)([])).toEqual([]);
119
+ });
120
+ });
121
+ //# sourceMappingURL=validate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/__tests__/validate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { Label, MeasurementLevel, MetricName, AnnotationTriple, Interpretation, AlphaInterpretation, ConfidenceInterval, KappaResult, FleissKappaResult, AlphaResult, PiResult, AC1Result, ConfusionMatrix, CohensKappaOptions, FleissKappaOptions, KrippendorffOptions, ScottsPiOptions, AC1Options, AgreementOptions, CIOptions, AgreementReport, } from './types';
2
+ export { interpretKappa, interpretAlpha } from './interpret';
3
+ export { assertEqualLength, assertNonEmpty, assertConsistentRowLengths, assertConstantRowSums, assertMinAnnotators, detectDuplicates, } from './validate';
4
+ export { cohenKappa } from './metrics/cohen-kappa';
5
+ export { fleissKappa } from './metrics/fleiss-kappa';
6
+ export { scottPi } from './metrics/scott-pi';
7
+ export { krippendorffAlpha } from './metrics/krippendorff-alpha';
8
+ export { gwetAC1 } from './metrics/gwet-ac1';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gwetAC1 = exports.krippendorffAlpha = exports.scottPi = exports.fleissKappa = exports.cohenKappa = exports.detectDuplicates = exports.assertMinAnnotators = exports.assertConstantRowSums = exports.assertConsistentRowLengths = exports.assertNonEmpty = exports.assertEqualLength = exports.interpretAlpha = exports.interpretKappa = void 0;
4
+ var interpret_1 = require("./interpret");
5
+ Object.defineProperty(exports, "interpretKappa", { enumerable: true, get: function () { return interpret_1.interpretKappa; } });
6
+ Object.defineProperty(exports, "interpretAlpha", { enumerable: true, get: function () { return interpret_1.interpretAlpha; } });
7
+ var validate_1 = require("./validate");
8
+ Object.defineProperty(exports, "assertEqualLength", { enumerable: true, get: function () { return validate_1.assertEqualLength; } });
9
+ Object.defineProperty(exports, "assertNonEmpty", { enumerable: true, get: function () { return validate_1.assertNonEmpty; } });
10
+ Object.defineProperty(exports, "assertConsistentRowLengths", { enumerable: true, get: function () { return validate_1.assertConsistentRowLengths; } });
11
+ Object.defineProperty(exports, "assertConstantRowSums", { enumerable: true, get: function () { return validate_1.assertConstantRowSums; } });
12
+ Object.defineProperty(exports, "assertMinAnnotators", { enumerable: true, get: function () { return validate_1.assertMinAnnotators; } });
13
+ Object.defineProperty(exports, "detectDuplicates", { enumerable: true, get: function () { return validate_1.detectDuplicates; } });
14
+ var cohen_kappa_1 = require("./metrics/cohen-kappa");
15
+ Object.defineProperty(exports, "cohenKappa", { enumerable: true, get: function () { return cohen_kappa_1.cohenKappa; } });
16
+ var fleiss_kappa_1 = require("./metrics/fleiss-kappa");
17
+ Object.defineProperty(exports, "fleissKappa", { enumerable: true, get: function () { return fleiss_kappa_1.fleissKappa; } });
18
+ var scott_pi_1 = require("./metrics/scott-pi");
19
+ Object.defineProperty(exports, "scottPi", { enumerable: true, get: function () { return scott_pi_1.scottPi; } });
20
+ var krippendorff_alpha_1 = require("./metrics/krippendorff-alpha");
21
+ Object.defineProperty(exports, "krippendorffAlpha", { enumerable: true, get: function () { return krippendorff_alpha_1.krippendorffAlpha; } });
22
+ var gwet_ac1_1 = require("./metrics/gwet-ac1");
23
+ Object.defineProperty(exports, "gwetAC1", { enumerable: true, get: function () { return gwet_ac1_1.gwetAC1; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAwBA,yCAA6D;AAApD,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AACvC,uCAOoB;AANlB,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,sHAAA,0BAA0B,OAAA;AAC1B,iHAAA,qBAAqB,OAAA;AACrB,+GAAA,mBAAmB,OAAA;AACnB,4GAAA,gBAAgB,OAAA;AAElB,qDAAmD;AAA1C,yGAAA,UAAU,OAAA;AACnB,uDAAqD;AAA5C,2GAAA,WAAW,OAAA;AACpB,+CAA6C;AAApC,mGAAA,OAAO,OAAA;AAChB,mEAAiE;AAAxD,uHAAA,iBAAiB,OAAA;AAC1B,+CAA6C;AAApC,mGAAA,OAAO,OAAA"}
@@ -0,0 +1,23 @@
1
+ import type { Interpretation, AlphaInterpretation } from './types';
2
+ /**
3
+ * Interprets a kappa-family metric value using the Landis & Koch (1977) scale.
4
+ *
5
+ * Ranges:
6
+ * value < 0 → 'poor'
7
+ * 0 ≤ value < 0.20 → 'slight'
8
+ * 0.20 ≤ value < 0.40 → 'fair'
9
+ * 0.40 ≤ value < 0.60 → 'moderate'
10
+ * 0.60 ≤ value < 0.80 → 'substantial'
11
+ * value ≥ 0.80 → 'almost-perfect'
12
+ */
13
+ export declare function interpretKappa(value: number): Interpretation;
14
+ /**
15
+ * Interprets a Krippendorff's Alpha value using Krippendorff's recommended thresholds.
16
+ *
17
+ * Ranges:
18
+ * value < 0.667 → 'unreliable'
19
+ * 0.667 ≤ value < 0.800 → 'tentative'
20
+ * value ≥ 0.800 → 'reliable'
21
+ */
22
+ export declare function interpretAlpha(value: number): AlphaInterpretation;
23
+ //# sourceMappingURL=interpret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.d.ts","sourceRoot":"","sources":["../src/interpret.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAQ5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAKjE"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interpretKappa = interpretKappa;
4
+ exports.interpretAlpha = interpretAlpha;
5
+ /**
6
+ * Interprets a kappa-family metric value using the Landis & Koch (1977) scale.
7
+ *
8
+ * Ranges:
9
+ * value < 0 → 'poor'
10
+ * 0 ≤ value < 0.20 → 'slight'
11
+ * 0.20 ≤ value < 0.40 → 'fair'
12
+ * 0.40 ≤ value < 0.60 → 'moderate'
13
+ * 0.60 ≤ value < 0.80 → 'substantial'
14
+ * value ≥ 0.80 → 'almost-perfect'
15
+ */
16
+ function interpretKappa(value) {
17
+ if (Number.isNaN(value))
18
+ return 'poor';
19
+ if (value < 0)
20
+ return 'poor';
21
+ if (value < 0.20)
22
+ return 'slight';
23
+ if (value < 0.40)
24
+ return 'fair';
25
+ if (value < 0.60)
26
+ return 'moderate';
27
+ if (value < 0.80)
28
+ return 'substantial';
29
+ return 'almost-perfect';
30
+ }
31
+ /**
32
+ * Interprets a Krippendorff's Alpha value using Krippendorff's recommended thresholds.
33
+ *
34
+ * Ranges:
35
+ * value < 0.667 → 'unreliable'
36
+ * 0.667 ≤ value < 0.800 → 'tentative'
37
+ * value ≥ 0.800 → 'reliable'
38
+ */
39
+ function interpretAlpha(value) {
40
+ if (Number.isNaN(value))
41
+ return 'unreliable';
42
+ if (value < 0.667)
43
+ return 'unreliable';
44
+ if (value < 0.800)
45
+ return 'tentative';
46
+ return 'reliable';
47
+ }
48
+ //# sourceMappingURL=interpret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.js","sourceRoot":"","sources":["../src/interpret.ts"],"names":[],"mappings":";;AAaA,wCAQC;AAUD,wCAKC;AAlCD;;;;;;;;;;GAUG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,aAAa,CAAC;IACvC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC7C,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,YAAY,CAAC;IACvC,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,WAAW,CAAC;IACtC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Label, KappaResult, CohensKappaOptions } from '../types';
2
+ /**
3
+ * Computes Cohen's Kappa (unweighted or weighted) for two raters.
4
+ *
5
+ * Unweighted: κ = (Po - Pe) / (1 - Pe)
6
+ * Po = observed agreement proportion
7
+ * Pe = expected agreement by chance (product of marginal proportions)
8
+ *
9
+ * Weighted (linear or quadratic): disagreements are penalised by weight w[i][j].
10
+ * linear: w[i][j] = |i - j| / (k - 1)
11
+ * quadratic: w[i][j] = (i - j)² / (k - 1)²
12
+ *
13
+ * Edge case: Pe = 1 (all items in one category) returns 1.0.
14
+ */
15
+ export declare function cohenKappa(rater1: Label[], rater2: Label[], options?: CohensKappaOptions): KappaResult;
16
+ //# sourceMappingURL=cohen-kappa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohen-kappa.d.ts","sourceRoot":"","sources":["../../src/metrics/cohen-kappa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAoCvE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAgGb"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cohenKappa = cohenKappa;
4
+ const validate_1 = require("../validate");
5
+ const interpret_1 = require("../interpret");
6
+ /**
7
+ * Builds a sorted list of unique categories from two label arrays.
8
+ */
9
+ function getCategories(rater1, rater2) {
10
+ const set = new Set();
11
+ for (const v of rater1)
12
+ set.add(v);
13
+ for (const v of rater2)
14
+ set.add(v);
15
+ return Array.from(set).sort((a, b) => String(a).localeCompare(String(b)));
16
+ }
17
+ /**
18
+ * Builds a contingency matrix where matrix[i][j] = count of items
19
+ * where rater1 gave categories[i] and rater2 gave categories[j].
20
+ */
21
+ function buildContingencyMatrix(rater1, rater2, categories) {
22
+ const idx = new Map(categories.map((c, i) => [c, i]));
23
+ const k = categories.length;
24
+ const matrix = Array.from({ length: k }, () => new Array(k).fill(0));
25
+ for (let n = 0; n < rater1.length; n++) {
26
+ const i = idx.get(rater1[n]);
27
+ const j = idx.get(rater2[n]);
28
+ if (i !== undefined && j !== undefined) {
29
+ matrix[i][j]++;
30
+ }
31
+ }
32
+ return matrix;
33
+ }
34
+ /**
35
+ * Computes Cohen's Kappa (unweighted or weighted) for two raters.
36
+ *
37
+ * Unweighted: κ = (Po - Pe) / (1 - Pe)
38
+ * Po = observed agreement proportion
39
+ * Pe = expected agreement by chance (product of marginal proportions)
40
+ *
41
+ * Weighted (linear or quadratic): disagreements are penalised by weight w[i][j].
42
+ * linear: w[i][j] = |i - j| / (k - 1)
43
+ * quadratic: w[i][j] = (i - j)² / (k - 1)²
44
+ *
45
+ * Edge case: Pe = 1 (all items in one category) returns 1.0.
46
+ */
47
+ function cohenKappa(rater1, rater2, options = {}) {
48
+ (0, validate_1.assertNonEmpty)(rater1, 'rater1');
49
+ (0, validate_1.assertEqualLength)(rater1, rater2, '(rater1 vs rater2)');
50
+ const categories = getCategories(rater1, rater2);
51
+ const k = categories.length;
52
+ const n = rater1.length;
53
+ const matrix = buildContingencyMatrix(rater1, rater2, categories);
54
+ // Row and column marginals
55
+ const rowMarginals = matrix.map(row => row.reduce((s, v) => s + v, 0));
56
+ const colMarginals = Array.from({ length: k }, (_, j) => matrix.reduce((s, row) => s + row[j], 0));
57
+ const weighted = options.weighted === true;
58
+ const weightScheme = options.weights ?? 'linear';
59
+ if (!weighted || k === 1) {
60
+ // Unweighted kappa
61
+ const Po = matrix.reduce((s, row, i) => s + row[i], 0) / n;
62
+ const Pe = rowMarginals.reduce((s, ri, i) => s + (ri / n) * (colMarginals[i] / n), 0);
63
+ if (Pe >= 1 - 1e-12) {
64
+ return {
65
+ metric: 'cohens-kappa',
66
+ value: 1.0,
67
+ observed: Po,
68
+ expected: Pe,
69
+ interpretation: (0, interpret_1.interpretKappa)(1.0),
70
+ categories,
71
+ };
72
+ }
73
+ const value = (Po - Pe) / (1 - Pe);
74
+ return {
75
+ metric: 'cohens-kappa',
76
+ value,
77
+ observed: Po,
78
+ expected: Pe,
79
+ interpretation: (0, interpret_1.interpretKappa)(value),
80
+ categories,
81
+ };
82
+ }
83
+ // Weighted kappa
84
+ // Build weight matrix: w[i][j] = disagreement weight (0 on diagonal)
85
+ const weights = Array.from({ length: k }, (_, i) => Array.from({ length: k }, (__, j) => {
86
+ if (i === j)
87
+ return 0;
88
+ if (weightScheme === 'quadratic') {
89
+ return ((i - j) ** 2) / ((k - 1) ** 2);
90
+ }
91
+ // linear
92
+ return Math.abs(i - j) / (k - 1);
93
+ }));
94
+ // Po_w = 1 - weighted observed disagreement
95
+ let observedDisagreement = 0;
96
+ for (let i = 0; i < k; i++) {
97
+ for (let j = 0; j < k; j++) {
98
+ observedDisagreement += weights[i][j] * (matrix[i][j] / n);
99
+ }
100
+ }
101
+ const Po = 1 - observedDisagreement;
102
+ // Pe_w = 1 - weighted expected disagreement
103
+ let expectedDisagreement = 0;
104
+ for (let i = 0; i < k; i++) {
105
+ for (let j = 0; j < k; j++) {
106
+ expectedDisagreement += weights[i][j] * (rowMarginals[i] / n) * (colMarginals[j] / n);
107
+ }
108
+ }
109
+ const Pe = 1 - expectedDisagreement;
110
+ if (Pe >= 1 - 1e-12) {
111
+ return {
112
+ metric: 'cohens-kappa',
113
+ value: 1.0,
114
+ observed: Po,
115
+ expected: Pe,
116
+ interpretation: (0, interpret_1.interpretKappa)(1.0),
117
+ categories,
118
+ };
119
+ }
120
+ const value = (Po - Pe) / (1 - Pe);
121
+ return {
122
+ metric: 'cohens-kappa',
123
+ value,
124
+ observed: Po,
125
+ expected: Pe,
126
+ interpretation: (0, interpret_1.interpretKappa)(value),
127
+ categories,
128
+ };
129
+ }
130
+ //# sourceMappingURL=cohen-kappa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohen-kappa.js","sourceRoot":"","sources":["../../src/metrics/cohen-kappa.ts"],"names":[],"mappings":";;AAiDA,gCAoGC;AApJD,0CAAgE;AAChE,4CAA8C;AAE9C;;GAEG;AACH,SAAS,aAAa,CAAC,MAAe,EAAE,MAAe;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAS,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAC7B,MAAe,EACf,MAAe,EACf,UAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAgB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,UAAU,CACxB,MAAe,EACf,MAAe,EACf,UAA8B,EAAE;IAEhC,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,IAAA,4BAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAElE,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;IAEjD,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,mBAAmB;QACnB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,GAAG,CAAC;gBACnC,UAAU;aACX,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,KAAK;YACL,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,KAAK,CAAC;YACrC,UAAU;SACX,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,qEAAqE;IACrE,MAAM,OAAO,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtB,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,SAAS;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,4CAA4C;IAC5C,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,oBAAoB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,GAAG,oBAAoB,CAAC;IAEpC,4CAA4C;IAC5C,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,oBAAoB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,GAAG,oBAAoB,CAAC;IAEpC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,GAAG,CAAC;YACnC,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,KAAK;QACL,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,KAAK,CAAC;QACrC,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { FleissKappaResult } from '../types';
2
+ /**
3
+ * Computes Fleiss' Kappa for multiple raters.
4
+ *
5
+ * Input: matrix[n_subjects][n_categories]
6
+ * matrix[i][j] = number of raters who assigned category j to subject i
7
+ * All rows must sum to the same value n (the number of raters per subject).
8
+ *
9
+ * Formula:
10
+ * P̄ = (1/n_subjects) * Σ_i P_i
11
+ * P_i = (1 / (n*(n-1))) * (Σ_j n_ij*(n_ij - 1))
12
+ * p_j = (1 / (n_subjects * n)) * Σ_i n_ij (marginal proportion for category j)
13
+ * P̄_e = Σ_j p_j²
14
+ * κ = (P̄ - P̄_e) / (1 - P̄_e)
15
+ */
16
+ export declare function fleissKappa(matrix: number[][]): FleissKappaResult;
17
+ //# sourceMappingURL=fleiss-kappa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleiss-kappa.d.ts","sourceRoot":"","sources":["../../src/metrics/fleiss-kappa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,iBAAiB,CAsDjE"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fleissKappa = fleissKappa;
4
+ const validate_1 = require("../validate");
5
+ const interpret_1 = require("../interpret");
6
+ /**
7
+ * Computes Fleiss' Kappa for multiple raters.
8
+ *
9
+ * Input: matrix[n_subjects][n_categories]
10
+ * matrix[i][j] = number of raters who assigned category j to subject i
11
+ * All rows must sum to the same value n (the number of raters per subject).
12
+ *
13
+ * Formula:
14
+ * P̄ = (1/n_subjects) * Σ_i P_i
15
+ * P_i = (1 / (n*(n-1))) * (Σ_j n_ij*(n_ij - 1))
16
+ * p_j = (1 / (n_subjects * n)) * Σ_i n_ij (marginal proportion for category j)
17
+ * P̄_e = Σ_j p_j²
18
+ * κ = (P̄ - P̄_e) / (1 - P̄_e)
19
+ */
20
+ function fleissKappa(matrix) {
21
+ (0, validate_1.assertNonEmpty)(matrix, 'matrix');
22
+ (0, validate_1.assertConsistentRowLengths)(matrix);
23
+ (0, validate_1.assertConstantRowSums)(matrix);
24
+ const N = matrix.length; // number of subjects
25
+ const k = matrix[0].length; // number of categories
26
+ if (k < 2) {
27
+ throw new Error('Fleiss Kappa requires at least 2 categories');
28
+ }
29
+ // n = number of raters per subject (row sum, constant across rows)
30
+ const n = matrix[0].reduce((s, v) => s + v, 0);
31
+ (0, validate_1.assertMinAnnotators)(n);
32
+ // p_j: marginal proportion for each category
33
+ const pj = Array.from({ length: k }, (_, j) => matrix.reduce((s, row) => s + row[j], 0) / (N * n));
34
+ // P_i: per-subject agreement
35
+ const Pi = matrix.map(row => {
36
+ const sumSquares = row.reduce((s, nij) => s + nij * (nij - 1), 0);
37
+ return sumSquares / (n * (n - 1));
38
+ });
39
+ const Pbar = Pi.reduce((s, p) => s + p, 0) / N;
40
+ const Pe = pj.reduce((s, p) => s + p * p, 0);
41
+ if (Pe >= 1 - 1e-12) {
42
+ return {
43
+ metric: 'fleiss-kappa',
44
+ value: 1.0,
45
+ observed: Pbar,
46
+ expected: Pe,
47
+ interpretation: (0, interpret_1.interpretKappa)(1.0),
48
+ annotatorCount: n,
49
+ itemCount: N,
50
+ };
51
+ }
52
+ const value = (Pbar - Pe) / (1 - Pe);
53
+ return {
54
+ metric: 'fleiss-kappa',
55
+ value,
56
+ observed: Pbar,
57
+ expected: Pe,
58
+ interpretation: (0, interpret_1.interpretKappa)(value),
59
+ annotatorCount: n,
60
+ itemCount: N,
61
+ };
62
+ }
63
+ //# sourceMappingURL=fleiss-kappa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleiss-kappa.js","sourceRoot":"","sources":["../../src/metrics/fleiss-kappa.ts"],"names":[],"mappings":";;AAkBA,kCAsDC;AAvED,0CAAqH;AACrH,4CAA8C;AAE9C;;;;;;;;;;;;;GAaG;AACH,SAAgB,WAAW,CAAC,MAAkB;IAC5C,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,IAAA,qCAA0B,EAAC,MAAM,CAAC,CAAC;IACnC,IAAA,gCAAqB,EAAC,MAAM,CAAC,CAAC;IAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAS,qBAAqB;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAM,uBAAuB;IAExD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/C,IAAA,8BAAmB,EAAC,CAAC,CAAC,CAAC;IAEvB,6CAA6C;IAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACnD,CAAC;IAEF,6BAA6B;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7C,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,GAAG,CAAC;YACnC,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAErC,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,KAAK;QACL,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,IAAA,0BAAc,EAAC,KAAK,CAAC;QACrC,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC"}