@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,19 @@
1
+ import type { Label, AC1Result, AC1Options } from '../types';
2
+ /**
3
+ * Computes Gwet's AC1 for two raters.
4
+ *
5
+ * Gwet's AC1 is designed to be robust to the prevalence and bias effects
6
+ * that can inflate or deflate Cohen's Kappa when category distributions are skewed.
7
+ *
8
+ * Formula:
9
+ * Po = observed agreement proportion
10
+ * q = number of categories
11
+ * p_k = marginal proportion for category k (average of both raters' proportions)
12
+ * Pe_gwet = (1/(q-1)) * Σ_k p_k * (1 - p_k)
13
+ * AC1 = (Po - Pe_gwet) / (1 - Pe_gwet)
14
+ *
15
+ * When q = 1, all items are in the same category; Pe_gwet = 0, AC1 = Po.
16
+ * Edge case: Pe_gwet >= 1 returns 1.0.
17
+ */
18
+ export declare function gwetAC1(rater1: Label[], rater2: Label[], options?: AC1Options): AC1Result;
19
+ //# sourceMappingURL=gwet-ac1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwet-ac1.d.ts","sourceRoot":"","sources":["../../src/metrics/gwet-ac1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,UAAe,GACvB,SAAS,CA4DX"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gwetAC1 = gwetAC1;
4
+ const validate_1 = require("../validate");
5
+ const interpret_1 = require("../interpret");
6
+ /**
7
+ * Computes Gwet's AC1 for two raters.
8
+ *
9
+ * Gwet's AC1 is designed to be robust to the prevalence and bias effects
10
+ * that can inflate or deflate Cohen's Kappa when category distributions are skewed.
11
+ *
12
+ * Formula:
13
+ * Po = observed agreement proportion
14
+ * q = number of categories
15
+ * p_k = marginal proportion for category k (average of both raters' proportions)
16
+ * Pe_gwet = (1/(q-1)) * Σ_k p_k * (1 - p_k)
17
+ * AC1 = (Po - Pe_gwet) / (1 - Pe_gwet)
18
+ *
19
+ * When q = 1, all items are in the same category; Pe_gwet = 0, AC1 = Po.
20
+ * Edge case: Pe_gwet >= 1 returns 1.0.
21
+ */
22
+ function gwetAC1(rater1, rater2, options = {} // reserved for future CI support
23
+ ) {
24
+ void options;
25
+ (0, validate_1.assertNonEmpty)(rater1, 'rater1');
26
+ (0, validate_1.assertEqualLength)(rater1, rater2, '(rater1 vs rater2)');
27
+ const n = rater1.length;
28
+ // Build unique categories
29
+ const categorySet = new Set();
30
+ for (const v of rater1)
31
+ categorySet.add(v);
32
+ for (const v of rater2)
33
+ categorySet.add(v);
34
+ const categories = Array.from(categorySet);
35
+ const q = categories.length;
36
+ // Observed agreement
37
+ let agreements = 0;
38
+ for (let i = 0; i < n; i++) {
39
+ if (rater1[i] === rater2[i])
40
+ agreements++;
41
+ }
42
+ const Po = agreements / n;
43
+ // Marginal proportion for each category: average of rater1 and rater2 proportions
44
+ const counts1 = new Map();
45
+ const counts2 = new Map();
46
+ for (const v of rater1)
47
+ counts1.set(v, (counts1.get(v) ?? 0) + 1);
48
+ for (const v of rater2)
49
+ counts2.set(v, (counts2.get(v) ?? 0) + 1);
50
+ let Pe = 0;
51
+ if (q === 1) {
52
+ // Only one category; by definition Pe_gwet = 0
53
+ Pe = 0;
54
+ }
55
+ else {
56
+ for (const cat of categories) {
57
+ const p1k = (counts1.get(cat) ?? 0) / n;
58
+ const p2k = (counts2.get(cat) ?? 0) / n;
59
+ const pk = (p1k + p2k) / 2;
60
+ Pe += pk * (1 - pk);
61
+ }
62
+ Pe /= (q - 1);
63
+ }
64
+ if (Pe >= 1 - 1e-12) {
65
+ return {
66
+ metric: 'gwets-ac1',
67
+ value: 1.0,
68
+ observed: Po,
69
+ expected: Pe,
70
+ interpretation: (0, interpret_1.interpretKappa)(1.0),
71
+ };
72
+ }
73
+ const value = (Po - Pe) / (1 - Pe);
74
+ return {
75
+ metric: 'gwets-ac1',
76
+ value,
77
+ observed: Po,
78
+ expected: Pe,
79
+ interpretation: (0, interpret_1.interpretKappa)(value),
80
+ };
81
+ }
82
+ //# sourceMappingURL=gwet-ac1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwet-ac1.js","sourceRoot":"","sources":["../../src/metrics/gwet-ac1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { AlphaResult, KrippendorffOptions } from '../types';
2
+ type Cell = string | number | null | undefined;
3
+ /**
4
+ * Computes Krippendorff's Alpha for multiple raters with optional missing data.
5
+ *
6
+ * Input: matrix[n_raters][n_items]
7
+ * Each cell is a label (string | number) or null/undefined for missing data.
8
+ *
9
+ * Nominal metric formula:
10
+ * Do = observed disagreement = mean of d(v_u, v_u') over all coincident pairs
11
+ * De = expected disagreement = (n_u / (n_u - 1)) * Σ_{v≠v'} n_v * n_v' / n_u²
12
+ * where n_u = total non-missing annotations, n_v = count of value v
13
+ * α = 1 - (Do / De)
14
+ *
15
+ * For nominal metric: d(v, v') = 0 if v == v', else 1.
16
+ *
17
+ * Edge case: De = 0 (all annotations identical) returns 1.0.
18
+ */
19
+ export declare function krippendorffAlpha(matrix: Cell[][], options?: KrippendorffOptions): AlphaResult;
20
+ export {};
21
+ //# sourceMappingURL=krippendorff-alpha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"krippendorff-alpha.d.ts","sourceRoot":"","sources":["../../src/metrics/krippendorff-alpha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAIjE,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,IAAI,EAAE,EAAE,EAChB,OAAO,GAAE,mBAAwB,GAChC,WAAW,CAuIb"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.krippendorffAlpha = krippendorffAlpha;
4
+ const validate_1 = require("../validate");
5
+ const interpret_1 = require("../interpret");
6
+ /**
7
+ * Computes Krippendorff's Alpha for multiple raters with optional missing data.
8
+ *
9
+ * Input: matrix[n_raters][n_items]
10
+ * Each cell is a label (string | number) or null/undefined for missing data.
11
+ *
12
+ * Nominal metric formula:
13
+ * Do = observed disagreement = mean of d(v_u, v_u') over all coincident pairs
14
+ * De = expected disagreement = (n_u / (n_u - 1)) * Σ_{v≠v'} n_v * n_v' / n_u²
15
+ * where n_u = total non-missing annotations, n_v = count of value v
16
+ * α = 1 - (Do / De)
17
+ *
18
+ * For nominal metric: d(v, v') = 0 if v == v', else 1.
19
+ *
20
+ * Edge case: De = 0 (all annotations identical) returns 1.0.
21
+ */
22
+ function krippendorffAlpha(matrix, options = {}) {
23
+ if (matrix.length === 0) {
24
+ throw new Error('Array must be non-empty');
25
+ }
26
+ const level = options.level ?? 'nominal';
27
+ const missingData = options.missingData ?? 'exclude';
28
+ const nRaters = matrix.length;
29
+ (0, validate_1.assertMinAnnotators)(nRaters);
30
+ const nItems = Math.max(...matrix.map(row => row.length));
31
+ if (nItems === 0) {
32
+ throw new Error('Array must be non-empty');
33
+ }
34
+ // Validate: check for missing data
35
+ let missingCount = 0;
36
+ for (let r = 0; r < nRaters; r++) {
37
+ for (let c = 0; c < nItems; c++) {
38
+ const cell = matrix[r][c];
39
+ if (cell === null || cell === undefined) {
40
+ missingCount++;
41
+ if (missingData === 'error') {
42
+ throw new Error(`Missing data found at rater ${r}, item ${c}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ // Build coincidence matrix: for each item, look at all pairs of raters
48
+ // that both annotated it, and tally their label pairs.
49
+ const valueCounts = new Map();
50
+ let totalAnnotations = 0;
51
+ // coincidences: Map from "v1|v2" to count (with fractional weighting)
52
+ const coincidences = new Map();
53
+ for (let c = 0; c < nItems; c++) {
54
+ // Collect non-missing annotations for this item
55
+ const itemLabels = [];
56
+ for (let r = 0; r < nRaters; r++) {
57
+ const cell = matrix[r][c];
58
+ if (cell !== null && cell !== undefined) {
59
+ itemLabels.push(cell);
60
+ }
61
+ }
62
+ const mu = itemLabels.length;
63
+ if (mu < 2)
64
+ continue; // need at least 2 annotations for a coincident pair
65
+ // Each pair (u, v) contributes 1/(mu - 1) to the coincidence count
66
+ const weight = 1 / (mu - 1);
67
+ for (let i = 0; i < mu; i++) {
68
+ for (let j = 0; j < mu; j++) {
69
+ if (i === j)
70
+ continue;
71
+ const vi = itemLabels[i];
72
+ const vj = itemLabels[j];
73
+ const key = JSON.stringify([vi, vj]);
74
+ coincidences.set(key, (coincidences.get(key) ?? 0) + weight);
75
+ }
76
+ // Count annotation for value distribution
77
+ const v = itemLabels[i];
78
+ valueCounts.set(v, (valueCounts.get(v) ?? 0) + 1);
79
+ totalAnnotations++;
80
+ }
81
+ }
82
+ if (coincidences.size === 0) {
83
+ // No coincident pairs; return alpha = 1 (trivially)
84
+ return {
85
+ metric: 'krippendorff-alpha',
86
+ value: 1.0,
87
+ interpretation: (0, interpret_1.interpretAlpha)(1.0),
88
+ level,
89
+ itemCount: nItems,
90
+ annotatorCount: nRaters,
91
+ missingCount,
92
+ };
93
+ }
94
+ const nu = totalAnnotations; // total non-missing annotations across all coincident items
95
+ // Compute Do (observed disagreement)
96
+ let Do = 0;
97
+ let totalCoincidences = 0;
98
+ for (const [key, count] of coincidences) {
99
+ const [vi, vj] = JSON.parse(key);
100
+ const d = disagreement(vi, vj, level);
101
+ Do += d * count;
102
+ totalCoincidences += count;
103
+ }
104
+ if (totalCoincidences > 0) {
105
+ Do /= totalCoincidences;
106
+ }
107
+ // Compute De (expected disagreement)
108
+ // De = (1 / (nu*(nu-1))) * Σ_{v,v'} n_v * n_v' * d(v, v') where v != v'... actually:
109
+ // De = (1 / (nu*(nu-1))) * Σ_{v} Σ_{v'} n_v * n_v' * d(v, v')
110
+ // which includes v = v' (those contribute 0 for nominal)
111
+ const values = Array.from(valueCounts.keys());
112
+ let De = 0;
113
+ for (let i = 0; i < values.length; i++) {
114
+ for (let j = 0; j < values.length; j++) {
115
+ const nv = valueCounts.get(values[i]) ?? 0;
116
+ const nvp = valueCounts.get(values[j]) ?? 0;
117
+ const d = disagreement(values[i], values[j], level);
118
+ De += nv * nvp * d;
119
+ }
120
+ }
121
+ De /= nu * (nu - 1);
122
+ if (De < 1e-12) {
123
+ // All annotations identical — perfect agreement
124
+ return {
125
+ metric: 'krippendorff-alpha',
126
+ value: 1.0,
127
+ interpretation: (0, interpret_1.interpretAlpha)(1.0),
128
+ level,
129
+ itemCount: nItems,
130
+ annotatorCount: nRaters,
131
+ missingCount,
132
+ };
133
+ }
134
+ const value = 1 - Do / De;
135
+ return {
136
+ metric: 'krippendorff-alpha',
137
+ value,
138
+ interpretation: (0, interpret_1.interpretAlpha)(value),
139
+ level,
140
+ itemCount: nItems,
141
+ annotatorCount: nRaters,
142
+ missingCount,
143
+ };
144
+ }
145
+ /**
146
+ * Disagreement function d(v, v') by measurement level.
147
+ * For nominal: 0 if equal, 1 otherwise.
148
+ * For ordinal: (rank distance)² / (max rank distance)² — simplified to rank-distance based.
149
+ * For interval/ratio: (v - v')².
150
+ */
151
+ function disagreement(v, vp, level) {
152
+ if (level === 'nominal') {
153
+ return v === vp ? 0 : 1;
154
+ }
155
+ if (level === 'interval' || level === 'ratio') {
156
+ const diff = Number(v) - Number(vp);
157
+ return diff * diff;
158
+ }
159
+ // ordinal: treat as nominal for simplicity (rank-based would need sorted category list)
160
+ return v === vp ? 0 : 1;
161
+ }
162
+ //# sourceMappingURL=krippendorff-alpha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"krippendorff-alpha.js","sourceRoot":"","sources":["../../src/metrics/krippendorff-alpha.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Label, PiResult, ScottsPiOptions } from '../types';
2
+ /**
3
+ * Computes Scott's Pi for two raters.
4
+ *
5
+ * Scott's Pi differs from Cohen's Kappa in how expected agreement is computed.
6
+ * Instead of using each rater's own marginal proportions separately, it uses
7
+ * the joint (averaged) marginal proportions from both raters combined.
8
+ *
9
+ * Formula:
10
+ * Po = observed agreement proportion
11
+ * p_k = (count_rater1(k) + count_rater2(k)) / (2 * n) (joint marginal)
12
+ * Pe = Σ_k p_k²
13
+ * π = (Po - Pe) / (1 - Pe)
14
+ *
15
+ * Edge case: Pe = 1 returns 1.0.
16
+ */
17
+ export declare function scottPi(rater1: Label[], rater2: Label[], options?: ScottsPiOptions): PiResult;
18
+ //# sourceMappingURL=scott-pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scott-pi.d.ts","sourceRoot":"","sources":["../../src/metrics/scott-pi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAqDV"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scottPi = scottPi;
4
+ const validate_1 = require("../validate");
5
+ const interpret_1 = require("../interpret");
6
+ /**
7
+ * Computes Scott's Pi for two raters.
8
+ *
9
+ * Scott's Pi differs from Cohen's Kappa in how expected agreement is computed.
10
+ * Instead of using each rater's own marginal proportions separately, it uses
11
+ * the joint (averaged) marginal proportions from both raters combined.
12
+ *
13
+ * Formula:
14
+ * Po = observed agreement proportion
15
+ * p_k = (count_rater1(k) + count_rater2(k)) / (2 * n) (joint marginal)
16
+ * Pe = Σ_k p_k²
17
+ * π = (Po - Pe) / (1 - Pe)
18
+ *
19
+ * Edge case: Pe = 1 returns 1.0.
20
+ */
21
+ function scottPi(rater1, rater2, options = {} // reserved for future CI support
22
+ ) {
23
+ void options;
24
+ (0, validate_1.assertNonEmpty)(rater1, 'rater1');
25
+ (0, validate_1.assertEqualLength)(rater1, rater2, '(rater1 vs rater2)');
26
+ const n = rater1.length;
27
+ // Build unique categories
28
+ const categorySet = new Set();
29
+ for (const v of rater1)
30
+ categorySet.add(v);
31
+ for (const v of rater2)
32
+ categorySet.add(v);
33
+ const categories = Array.from(categorySet).sort((a, b) => String(a).localeCompare(String(b)));
34
+ // Observed agreement
35
+ let agreements = 0;
36
+ for (let i = 0; i < n; i++) {
37
+ if (rater1[i] === rater2[i])
38
+ agreements++;
39
+ }
40
+ const Po = agreements / n;
41
+ // Joint marginal proportions
42
+ const counts = new Map();
43
+ for (const v of rater1)
44
+ counts.set(v, (counts.get(v) ?? 0) + 1);
45
+ for (const v of rater2)
46
+ counts.set(v, (counts.get(v) ?? 0) + 1);
47
+ // Pe = Σ_k ((count1_k + count2_k) / (2n))²
48
+ let Pe = 0;
49
+ for (const count of counts.values()) {
50
+ const pk = count / (2 * n);
51
+ Pe += pk * pk;
52
+ }
53
+ if (Pe >= 1 - 1e-12) {
54
+ return {
55
+ metric: 'scotts-pi',
56
+ value: 1.0,
57
+ observed: Po,
58
+ expected: Pe,
59
+ interpretation: (0, interpret_1.interpretKappa)(1.0),
60
+ categories,
61
+ };
62
+ }
63
+ const value = (Po - Pe) / (1 - Pe);
64
+ return {
65
+ metric: 'scotts-pi',
66
+ value,
67
+ observed: Po,
68
+ expected: Pe,
69
+ interpretation: (0, interpret_1.interpretKappa)(value),
70
+ categories,
71
+ };
72
+ }
73
+ //# sourceMappingURL=scott-pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scott-pi.js","sourceRoot":"","sources":["../../src/metrics/scott-pi.ts"],"names":[],"mappings":";;AAmBA,0BAyDC;AA3ED,0CAAgE;AAChE,4CAA8C;AAE9C;;;;;;;;;;;;;;GAcG;AACH,SAAgB,OAAO,CACrB,MAAe,EACf,MAAe,EACf,UAA2B,EAAE,CAAE,iCAAiC;;IAEhE,KAAK,OAAO,CAAC;IACb,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,IAAA,4BAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAExD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,0BAA0B;IAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAS,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,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;IAE9F,qBAAqB;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;YAAE,UAAU,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IAE1B,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhE,2CAA2C;IAC3C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,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;IAEnC,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,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,119 @@
1
+ export type Label = string | number;
2
+ export type MeasurementLevel = 'nominal' | 'ordinal' | 'interval' | 'ratio';
3
+ export type MetricName = 'cohens-kappa' | 'fleiss-kappa' | 'krippendorff-alpha' | 'scotts-pi' | 'gwets-ac1' | 'percent-agreement';
4
+ export type AnnotationTriple = {
5
+ item: string | number;
6
+ annotator: string | number;
7
+ label: Label;
8
+ };
9
+ export type Interpretation = 'poor' | 'slight' | 'fair' | 'moderate' | 'substantial' | 'almost-perfect';
10
+ export type AlphaInterpretation = 'unreliable' | 'tentative' | 'reliable';
11
+ export interface ConfidenceInterval {
12
+ lower: number;
13
+ upper: number;
14
+ level: number;
15
+ }
16
+ export interface KappaResult {
17
+ metric: MetricName;
18
+ value: number;
19
+ observed: number;
20
+ expected: number;
21
+ interpretation: Interpretation;
22
+ ci?: ConfidenceInterval;
23
+ categories?: Label[];
24
+ }
25
+ export interface FleissKappaResult {
26
+ metric: 'fleiss-kappa';
27
+ value: number;
28
+ observed: number;
29
+ expected: number;
30
+ interpretation: Interpretation;
31
+ ci?: ConfidenceInterval;
32
+ annotatorCount: number;
33
+ itemCount: number;
34
+ }
35
+ export interface AlphaResult {
36
+ metric: 'krippendorff-alpha';
37
+ value: number;
38
+ interpretation: AlphaInterpretation;
39
+ level: MeasurementLevel;
40
+ ci?: ConfidenceInterval;
41
+ itemCount: number;
42
+ annotatorCount: number;
43
+ missingCount: number;
44
+ }
45
+ export interface PiResult {
46
+ metric: 'scotts-pi';
47
+ value: number;
48
+ observed: number;
49
+ expected: number;
50
+ interpretation: Interpretation;
51
+ ci?: ConfidenceInterval;
52
+ categories?: Label[];
53
+ }
54
+ export interface AC1Result {
55
+ metric: 'gwets-ac1';
56
+ value: number;
57
+ observed: number;
58
+ expected: number;
59
+ interpretation: Interpretation;
60
+ ci?: ConfidenceInterval;
61
+ }
62
+ export interface ConfusionMatrix {
63
+ labels: Label[];
64
+ matrix: number[][];
65
+ }
66
+ export interface CohensKappaOptions {
67
+ weighted?: boolean;
68
+ weights?: 'linear' | 'quadratic';
69
+ ci?: boolean;
70
+ ciLevel?: number;
71
+ ciBootstrapSamples?: number;
72
+ seed?: number;
73
+ }
74
+ export interface FleissKappaOptions {
75
+ ci?: boolean;
76
+ ciLevel?: number;
77
+ ciBootstrapSamples?: number;
78
+ seed?: number;
79
+ }
80
+ export interface KrippendorffOptions {
81
+ level?: MeasurementLevel;
82
+ ci?: boolean;
83
+ ciLevel?: number;
84
+ ciBootstrapSamples?: number;
85
+ seed?: number;
86
+ missingData?: 'exclude' | 'error';
87
+ }
88
+ export interface ScottsPiOptions {
89
+ ci?: boolean;
90
+ ciLevel?: number;
91
+ ciBootstrapSamples?: number;
92
+ seed?: number;
93
+ }
94
+ export interface AC1Options {
95
+ ci?: boolean;
96
+ ciLevel?: number;
97
+ ciBootstrapSamples?: number;
98
+ seed?: number;
99
+ }
100
+ export interface AgreementOptions {
101
+ metric?: MetricName;
102
+ level?: MeasurementLevel;
103
+ missingData?: 'exclude' | 'error';
104
+ ci?: boolean;
105
+ ciLevel?: number;
106
+ seed?: number;
107
+ }
108
+ export interface CIOptions {
109
+ level?: number;
110
+ bootstrapSamples?: number;
111
+ seed?: number;
112
+ }
113
+ export interface AgreementReport {
114
+ metric: MetricName;
115
+ value: number;
116
+ interpretation: Interpretation | AlphaInterpretation;
117
+ ci?: ConfidenceInterval;
118
+ }
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Throws if a and b do not have the same length.
3
+ */
4
+ export declare function assertEqualLength(a: unknown[], b: unknown[], label?: string): void;
5
+ /**
6
+ * Throws if arr is empty.
7
+ */
8
+ export declare function assertNonEmpty(arr: unknown[], label?: string): void;
9
+ /**
10
+ * Throws if the rows of a 2-D matrix do not all have the same length.
11
+ */
12
+ export declare function assertConsistentRowLengths(matrix: unknown[][]): void;
13
+ /**
14
+ * Throws if rows of a numeric matrix do not all sum to the same value
15
+ * (within floating-point tolerance).
16
+ */
17
+ export declare function assertConstantRowSums(matrix: number[][]): void;
18
+ /**
19
+ * Throws if count is less than 2.
20
+ */
21
+ export declare function assertMinAnnotators(count: number): void;
22
+ /**
23
+ * Returns the (item, annotator) pairs that appear more than once in the given
24
+ * array of triples. Each duplicate pair is returned only once.
25
+ */
26
+ export declare function detectDuplicates(triples: Array<{
27
+ item: unknown;
28
+ annotator: unknown;
29
+ }>): Array<{
30
+ item: unknown;
31
+ annotator: unknown;
32
+ }>;
33
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAKlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAKnE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAQpE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAW9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,GACpD,KAAK,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAc9C"}