heor-agent-mcp 0.2.0 → 0.3.0
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/formatters/comparisonMarkdown.d.ts +3 -0
- package/dist/formatters/comparisonMarkdown.d.ts.map +1 -0
- package/dist/formatters/comparisonMarkdown.js +68 -0
- package/dist/formatters/comparisonMarkdown.js.map +1 -0
- package/dist/network/bucher.d.ts +29 -0
- package/dist/network/bucher.d.ts.map +1 -0
- package/dist/network/bucher.js +125 -0
- package/dist/network/bucher.js.map +1 -0
- package/dist/network/frequentistNma.d.ts +12 -0
- package/dist/network/frequentistNma.d.ts.map +1 -0
- package/dist/network/frequentistNma.js +230 -0
- package/dist/network/frequentistNma.js.map +1 -0
- package/dist/network/index.d.ts +4 -1
- package/dist/network/index.d.ts.map +1 -1
- package/dist/network/index.js +3 -0
- package/dist/network/index.js.map +1 -1
- package/dist/network/pathfinder.d.ts +14 -0
- package/dist/network/pathfinder.d.ts.map +1 -0
- package/dist/network/pathfinder.js +93 -0
- package/dist/network/pathfinder.js.map +1 -0
- package/dist/network/types.d.ts +45 -0
- package/dist/network/types.d.ts.map +1 -1
- package/dist/providers/direct/index.d.ts.map +1 -1
- package/dist/providers/direct/index.js +62 -27
- package/dist/providers/direct/index.js.map +1 -1
- package/dist/providers/types.d.ts +1 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/indirectComparison.d.ts +73 -0
- package/dist/tools/indirectComparison.d.ts.map +1 -0
- package/dist/tools/indirectComparison.js +191 -0
- package/dist/tools/indirectComparison.js.map +1 -0
- package/dist/tools/literatureSearch.d.ts +4 -0
- package/dist/tools/literatureSearch.d.ts.map +1 -1
- package/dist/tools/literatureSearch.js +43 -1
- package/dist/tools/literatureSearch.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisonMarkdown.d.ts","sourceRoot":"","sources":["../../src/formatters/comparisonMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAYpE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,wBAAwB,GAC/B,MAAM,CAgFR"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
function formatNum(n, decimals = 2) {
|
|
2
|
+
return n.toFixed(decimals);
|
|
3
|
+
}
|
|
4
|
+
function formatP(p) {
|
|
5
|
+
if (p < 0.001)
|
|
6
|
+
return "<0.001";
|
|
7
|
+
if (p < 0.01)
|
|
8
|
+
return formatNum(p, 3);
|
|
9
|
+
return formatNum(p, 3);
|
|
10
|
+
}
|
|
11
|
+
export function comparisonToMarkdown(result) {
|
|
12
|
+
const lines = [];
|
|
13
|
+
lines.push("## Indirect Treatment Comparisons");
|
|
14
|
+
lines.push("");
|
|
15
|
+
const methodLabel = result.method === "bucher"
|
|
16
|
+
? "Bucher Method"
|
|
17
|
+
: result.method === "frequentist_nma"
|
|
18
|
+
? "Frequentist Network Meta-Analysis"
|
|
19
|
+
: "Mixed Methods";
|
|
20
|
+
lines.push(`**Method:** ${methodLabel}`);
|
|
21
|
+
lines.push(`**Comparisons:** ${result.estimates.length}`);
|
|
22
|
+
lines.push("");
|
|
23
|
+
if (result.estimates.length === 0) {
|
|
24
|
+
lines.push("No indirect comparisons could be computed. Check that comparisons share a common comparator and measure the same outcome.");
|
|
25
|
+
return lines.join("\n");
|
|
26
|
+
}
|
|
27
|
+
// Group by outcome
|
|
28
|
+
const outcomes = new Map();
|
|
29
|
+
for (const e of result.estimates) {
|
|
30
|
+
if (!outcomes.has(e.outcome))
|
|
31
|
+
outcomes.set(e.outcome, []);
|
|
32
|
+
outcomes.get(e.outcome).push(e);
|
|
33
|
+
}
|
|
34
|
+
for (const [outcome, estimates] of outcomes) {
|
|
35
|
+
lines.push(`### ${outcome}`);
|
|
36
|
+
lines.push("");
|
|
37
|
+
const measure = estimates[0].measure;
|
|
38
|
+
const label = measure === "MD" ? "MD" : measure;
|
|
39
|
+
lines.push(`| Comparison | ${label} | 95% CI | p-value | Via | Method |`);
|
|
40
|
+
lines.push("|------------|---------|--------|---------|-----|--------|");
|
|
41
|
+
for (const e of estimates) {
|
|
42
|
+
const est = measure === "MD"
|
|
43
|
+
? formatNum(e.estimate)
|
|
44
|
+
: formatNum(e.estimate);
|
|
45
|
+
const ci = `[${formatNum(e.ci_lower)}, ${formatNum(e.ci_upper)}]`;
|
|
46
|
+
const p = formatP(e.p_value);
|
|
47
|
+
const via = e.commonComparator;
|
|
48
|
+
const method = e.method === "bucher" ? "Bucher" : "Freq. NMA";
|
|
49
|
+
lines.push(`| ${e.intervention} vs ${e.comparator} | ${est} | ${ci} | ${p} | ${via} | ${method} |`);
|
|
50
|
+
}
|
|
51
|
+
lines.push("");
|
|
52
|
+
}
|
|
53
|
+
// Warnings
|
|
54
|
+
if (result.warnings.length > 0) {
|
|
55
|
+
lines.push("### Warnings");
|
|
56
|
+
for (const w of result.warnings) {
|
|
57
|
+
lines.push(`- ⚠️ ${w}`);
|
|
58
|
+
}
|
|
59
|
+
lines.push("");
|
|
60
|
+
}
|
|
61
|
+
// Limitations
|
|
62
|
+
lines.push("### Limitations");
|
|
63
|
+
for (const l of result.limitations) {
|
|
64
|
+
lines.push(`- ${l}`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=comparisonMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisonMarkdown.js","sourceRoot":"","sources":["../../src/formatters/comparisonMarkdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EffectMeasure, PooledEstimate, DirectComparison, IndirectEstimate } from "./types.js";
|
|
2
|
+
/** Standard error from 95% CI */
|
|
3
|
+
export declare function seFromCI(lower: number, upper: number): number;
|
|
4
|
+
/** Normal CDF approximation (Abramowitz & Stegun 26.2.17) */
|
|
5
|
+
export declare function normalCDF(x: number): number;
|
|
6
|
+
/** Two-tailed p-value from z-score */
|
|
7
|
+
export declare function pValueFromZ(z: number): number;
|
|
8
|
+
/** Fixed-effect inverse-variance pooling */
|
|
9
|
+
export declare function poolFixedEffect(studies: Array<{
|
|
10
|
+
value: number;
|
|
11
|
+
se: number;
|
|
12
|
+
}>): PooledEstimate;
|
|
13
|
+
/** Bucher indirect comparison: A vs C = A vs B - C vs B */
|
|
14
|
+
export declare function bucherIndirect(ab: PooledEstimate, cb: PooledEstimate): {
|
|
15
|
+
value: number;
|
|
16
|
+
se: number;
|
|
17
|
+
z: number;
|
|
18
|
+
p_value: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Compute a single indirect comparison A vs C through common comparator B.
|
|
22
|
+
*
|
|
23
|
+
* directAB: studies comparing A (intervention) vs B (comparator)
|
|
24
|
+
* directCB: studies comparing C (intervention) vs B (comparator)
|
|
25
|
+
*
|
|
26
|
+
* Returns the indirect estimate of A vs C.
|
|
27
|
+
*/
|
|
28
|
+
export declare function computeIndirectComparison(intervention: string, comparator: string, bridge: string, directAB: DirectComparison[], directCB: DirectComparison[], outcome: string, measure: EffectMeasure): IndirectEstimate;
|
|
29
|
+
//# sourceMappingURL=bucher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bucher.d.ts","sourceRoot":"","sources":["../../src/network/bucher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,iCAAiC;AACjC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAc3C;AAED,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAiDD,4CAA4C;AAC5C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5C,cAAc,CAqBhB;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAC5B,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,cAAc,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAM3D;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GACrB,gBAAgB,CAoDlB"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** Standard error from 95% CI */
|
|
2
|
+
export function seFromCI(lower, upper) {
|
|
3
|
+
return (upper - lower) / 3.92;
|
|
4
|
+
}
|
|
5
|
+
/** Normal CDF approximation (Abramowitz & Stegun 26.2.17) */
|
|
6
|
+
export function normalCDF(x) {
|
|
7
|
+
const sign = x < 0 ? -1 : 1;
|
|
8
|
+
const z = Math.abs(x);
|
|
9
|
+
const t = 1.0 / (1.0 + 0.2316419 * z);
|
|
10
|
+
const d = 0.3989422804014327; // 1/sqrt(2*pi)
|
|
11
|
+
const p = d *
|
|
12
|
+
Math.exp((-z * z) / 2.0) *
|
|
13
|
+
(t *
|
|
14
|
+
(0.319381530 +
|
|
15
|
+
t *
|
|
16
|
+
(-0.356563782 +
|
|
17
|
+
t * (1.781477937 + t * (-1.821255978 + t * 1.330274429)))));
|
|
18
|
+
return sign === 1 ? 1.0 - p : p;
|
|
19
|
+
}
|
|
20
|
+
/** Two-tailed p-value from z-score */
|
|
21
|
+
export function pValueFromZ(z) {
|
|
22
|
+
return 2 * (1 - normalCDF(Math.abs(z)));
|
|
23
|
+
}
|
|
24
|
+
/** Whether the measure operates on a log scale */
|
|
25
|
+
function isLogScale(measure) {
|
|
26
|
+
return measure === "OR" || measure === "RR" || measure === "HR";
|
|
27
|
+
}
|
|
28
|
+
/** Convert to working scale (log for ratio measures) */
|
|
29
|
+
function toWorkingScale(estimate, se, measure) {
|
|
30
|
+
if (isLogScale(measure)) {
|
|
31
|
+
return { value: Math.log(estimate), se };
|
|
32
|
+
}
|
|
33
|
+
return { value: estimate, se };
|
|
34
|
+
}
|
|
35
|
+
/** Convert SE from CI on the original scale to working scale */
|
|
36
|
+
function seOnWorkingScale(estimate, ci_lower, ci_upper, measure) {
|
|
37
|
+
if (isLogScale(measure)) {
|
|
38
|
+
return (Math.log(ci_upper) - Math.log(ci_lower)) / 3.92;
|
|
39
|
+
}
|
|
40
|
+
return seFromCI(ci_lower, ci_upper);
|
|
41
|
+
}
|
|
42
|
+
/** Back-transform from working scale */
|
|
43
|
+
function fromWorkingScale(value, lower, upper, measure) {
|
|
44
|
+
if (isLogScale(measure)) {
|
|
45
|
+
return {
|
|
46
|
+
estimate: Math.exp(value),
|
|
47
|
+
ci_lower: Math.exp(lower),
|
|
48
|
+
ci_upper: Math.exp(upper),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { estimate: value, ci_lower: lower, ci_upper: upper };
|
|
52
|
+
}
|
|
53
|
+
/** Fixed-effect inverse-variance pooling */
|
|
54
|
+
export function poolFixedEffect(studies) {
|
|
55
|
+
if (studies.length === 0) {
|
|
56
|
+
throw new Error("No studies to pool");
|
|
57
|
+
}
|
|
58
|
+
if (studies.length === 1) {
|
|
59
|
+
return { value: studies[0].value, se: studies[0].se, n_studies: 1 };
|
|
60
|
+
}
|
|
61
|
+
let sumW = 0;
|
|
62
|
+
let sumWY = 0;
|
|
63
|
+
for (const s of studies) {
|
|
64
|
+
const w = 1 / (s.se * s.se);
|
|
65
|
+
sumW += w;
|
|
66
|
+
sumWY += w * s.value;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
value: sumWY / sumW,
|
|
70
|
+
se: Math.sqrt(1 / sumW),
|
|
71
|
+
n_studies: studies.length,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Bucher indirect comparison: A vs C = A vs B - C vs B */
|
|
75
|
+
export function bucherIndirect(ab, cb) {
|
|
76
|
+
const value = ab.value - cb.value;
|
|
77
|
+
const se = Math.sqrt(ab.se * ab.se + cb.se * cb.se);
|
|
78
|
+
const z = value / se;
|
|
79
|
+
const p_value = pValueFromZ(z);
|
|
80
|
+
return { value, se, z, p_value };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Compute a single indirect comparison A vs C through common comparator B.
|
|
84
|
+
*
|
|
85
|
+
* directAB: studies comparing A (intervention) vs B (comparator)
|
|
86
|
+
* directCB: studies comparing C (intervention) vs B (comparator)
|
|
87
|
+
*
|
|
88
|
+
* Returns the indirect estimate of A vs C.
|
|
89
|
+
*/
|
|
90
|
+
export function computeIndirectComparison(intervention, comparator, bridge, directAB, directCB, outcome, measure) {
|
|
91
|
+
// Convert to working scale and pool
|
|
92
|
+
const abStudies = directAB.map((d) => ({
|
|
93
|
+
value: toWorkingScale(d.estimate, seOnWorkingScale(d.estimate, d.ci_lower, d.ci_upper, measure), measure).value,
|
|
94
|
+
se: seOnWorkingScale(d.estimate, d.ci_lower, d.ci_upper, measure),
|
|
95
|
+
}));
|
|
96
|
+
const cbStudies = directCB.map((d) => ({
|
|
97
|
+
value: toWorkingScale(d.estimate, seOnWorkingScale(d.estimate, d.ci_lower, d.ci_upper, measure), measure).value,
|
|
98
|
+
se: seOnWorkingScale(d.estimate, d.ci_lower, d.ci_upper, measure),
|
|
99
|
+
}));
|
|
100
|
+
const pooledAB = poolFixedEffect(abStudies);
|
|
101
|
+
const pooledCB = poolFixedEffect(cbStudies);
|
|
102
|
+
// Bucher indirect
|
|
103
|
+
const indirect = bucherIndirect(pooledAB, pooledCB);
|
|
104
|
+
// Back-transform
|
|
105
|
+
const ciLowerWorking = indirect.value - 1.96 * indirect.se;
|
|
106
|
+
const ciUpperWorking = indirect.value + 1.96 * indirect.se;
|
|
107
|
+
const result = fromWorkingScale(indirect.value, ciLowerWorking, ciUpperWorking, measure);
|
|
108
|
+
return {
|
|
109
|
+
intervention,
|
|
110
|
+
comparator,
|
|
111
|
+
commonComparator: bridge,
|
|
112
|
+
outcome,
|
|
113
|
+
measure,
|
|
114
|
+
method: "bucher",
|
|
115
|
+
estimate: result.estimate,
|
|
116
|
+
se: indirect.se,
|
|
117
|
+
ci_lower: result.ci_lower,
|
|
118
|
+
ci_upper: result.ci_upper,
|
|
119
|
+
z: indirect.z,
|
|
120
|
+
p_value: indirect.p_value,
|
|
121
|
+
pooled_ab: pooledAB,
|
|
122
|
+
pooled_bc: pooledCB,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=bucher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bucher.js","sourceRoot":"","sources":["../../src/network/bucher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DirectComparison, EffectMeasure, IndirectEstimate } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Frequentist contrast-based NMA using weighted least squares.
|
|
4
|
+
*
|
|
5
|
+
* Given a set of direct comparisons (possibly multiple per edge),
|
|
6
|
+
* estimates all pairwise treatment effects relative to a reference.
|
|
7
|
+
*
|
|
8
|
+
* For small networks this is equivalent to the graph-theoretical
|
|
9
|
+
* approach (Rücker 2012).
|
|
10
|
+
*/
|
|
11
|
+
export declare function frequentistNMA(comparisons: DirectComparison[], outcome: string, measure: EffectMeasure): IndirectEstimate[];
|
|
12
|
+
//# sourceMappingURL=frequentistNma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frequentistNma.d.ts","sourceRoot":"","sources":["../../src/network/frequentistNma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AA0BpB;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GACrB,gBAAgB,EAAE,CA4LpB"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { seFromCI, pValueFromZ, poolFixedEffect } from "./bucher.js";
|
|
2
|
+
function isLogScale(measure) {
|
|
3
|
+
return measure === "OR" || measure === "RR" || measure === "HR";
|
|
4
|
+
}
|
|
5
|
+
function toWorkingScale(d) {
|
|
6
|
+
const log = isLogScale(d.measure);
|
|
7
|
+
const se = log
|
|
8
|
+
? (Math.log(d.ci_upper) - Math.log(d.ci_lower)) / 3.92
|
|
9
|
+
: seFromCI(d.ci_lower, d.ci_upper);
|
|
10
|
+
const value = log ? Math.log(d.estimate) : d.estimate;
|
|
11
|
+
return { value, se };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Frequentist contrast-based NMA using weighted least squares.
|
|
15
|
+
*
|
|
16
|
+
* Given a set of direct comparisons (possibly multiple per edge),
|
|
17
|
+
* estimates all pairwise treatment effects relative to a reference.
|
|
18
|
+
*
|
|
19
|
+
* For small networks this is equivalent to the graph-theoretical
|
|
20
|
+
* approach (Rücker 2012).
|
|
21
|
+
*/
|
|
22
|
+
export function frequentistNMA(comparisons, outcome, measure) {
|
|
23
|
+
// Filter to the specified outcome
|
|
24
|
+
const relevant = comparisons.filter((c) => c.outcome === outcome && c.measure === measure);
|
|
25
|
+
if (relevant.length === 0)
|
|
26
|
+
return [];
|
|
27
|
+
// Pool direct comparisons by edge (intervention-comparator pair)
|
|
28
|
+
const edgeKey = (a, b) => [a, b].sort().join("↔");
|
|
29
|
+
const edgeMap = new Map();
|
|
30
|
+
for (const d of relevant) {
|
|
31
|
+
const ws = toWorkingScale(d);
|
|
32
|
+
const key = edgeKey(d.intervention, d.comparator);
|
|
33
|
+
if (!edgeMap.has(key)) {
|
|
34
|
+
edgeMap.set(key, { a: d.intervention, b: d.comparator, studies: [] });
|
|
35
|
+
}
|
|
36
|
+
const edge = edgeMap.get(key);
|
|
37
|
+
// Ensure consistent direction: if stored as B-A but input is A-B
|
|
38
|
+
if (edge.a === d.comparator && edge.b === d.intervention) {
|
|
39
|
+
ws.value = -ws.value; // flip direction
|
|
40
|
+
}
|
|
41
|
+
edge.studies.push(ws);
|
|
42
|
+
}
|
|
43
|
+
// Pool each edge
|
|
44
|
+
const contrasts = [];
|
|
45
|
+
for (const edge of edgeMap.values()) {
|
|
46
|
+
const pooled = poolFixedEffect(edge.studies);
|
|
47
|
+
contrasts.push({
|
|
48
|
+
a: edge.a,
|
|
49
|
+
b: edge.b,
|
|
50
|
+
value: pooled.value,
|
|
51
|
+
se: pooled.se,
|
|
52
|
+
n_studies: pooled.n_studies,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Collect all treatment names
|
|
56
|
+
const treatments = new Set();
|
|
57
|
+
for (const c of contrasts) {
|
|
58
|
+
treatments.add(c.a);
|
|
59
|
+
treatments.add(c.b);
|
|
60
|
+
}
|
|
61
|
+
const treatmentList = Array.from(treatments).sort();
|
|
62
|
+
const n = treatmentList.length;
|
|
63
|
+
const idx = new Map(treatmentList.map((t, i) => [t, i]));
|
|
64
|
+
if (n < 2)
|
|
65
|
+
return [];
|
|
66
|
+
// Reference treatment = first alphabetically
|
|
67
|
+
const ref = treatmentList[0];
|
|
68
|
+
// Build design matrix and weight matrix
|
|
69
|
+
// Each contrast gives one equation: effect_a - effect_b = observed_value
|
|
70
|
+
// Parameters: treatment effects relative to reference (n-1 params)
|
|
71
|
+
const m = contrasts.length; // number of equations
|
|
72
|
+
const p = n - 1; // number of parameters
|
|
73
|
+
// X: m x p design matrix
|
|
74
|
+
// W: m x m diagonal weight matrix (1/se^2)
|
|
75
|
+
// y: m x 1 observation vector
|
|
76
|
+
const X = Array.from({ length: m }, () => Array(p).fill(0));
|
|
77
|
+
const W = new Array(m);
|
|
78
|
+
const y = new Array(m);
|
|
79
|
+
for (let i = 0; i < m; i++) {
|
|
80
|
+
const c = contrasts[i];
|
|
81
|
+
const ia = idx.get(c.a);
|
|
82
|
+
const ib = idx.get(c.b);
|
|
83
|
+
// effect_a - effect_b (relative to reference, which has effect = 0)
|
|
84
|
+
if (ia > 0)
|
|
85
|
+
X[i][ia - 1] = 1; // a is not reference
|
|
86
|
+
if (ib > 0)
|
|
87
|
+
X[i][ib - 1] = -1; // b is not reference
|
|
88
|
+
W[i] = 1 / (c.se * c.se);
|
|
89
|
+
y[i] = c.value;
|
|
90
|
+
}
|
|
91
|
+
// Solve: beta = (X'WX)^-1 X'Wy
|
|
92
|
+
// X'WX is p x p
|
|
93
|
+
const XtWX = Array.from({ length: p }, () => Array(p).fill(0));
|
|
94
|
+
const XtWy = Array(p).fill(0);
|
|
95
|
+
for (let i = 0; i < m; i++) {
|
|
96
|
+
for (let j = 0; j < p; j++) {
|
|
97
|
+
XtWy[j] += X[i][j] * W[i] * y[i];
|
|
98
|
+
for (let k = 0; k < p; k++) {
|
|
99
|
+
XtWX[j][k] += X[i][j] * W[i] * X[i][k];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Invert XtWX using Gaussian elimination
|
|
104
|
+
const invXtWX = invertMatrix(XtWX);
|
|
105
|
+
if (!invXtWX) {
|
|
106
|
+
// Singular — network is disconnected or underdetermined
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
// beta = invXtWX * XtWy
|
|
110
|
+
const beta = Array(p).fill(0);
|
|
111
|
+
for (let j = 0; j < p; j++) {
|
|
112
|
+
for (let k = 0; k < p; k++) {
|
|
113
|
+
beta[j] += invXtWX[j][k] * XtWy[k];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// SE of each beta: sqrt(diag(invXtWX))
|
|
117
|
+
const seBeta = Array(p).fill(0);
|
|
118
|
+
for (let j = 0; j < p; j++) {
|
|
119
|
+
seBeta[j] = Math.sqrt(invXtWX[j][j]);
|
|
120
|
+
}
|
|
121
|
+
// Generate all pairwise comparisons
|
|
122
|
+
const estimates = [];
|
|
123
|
+
for (let i = 0; i < n; i++) {
|
|
124
|
+
for (let j = i + 1; j < n; j++) {
|
|
125
|
+
const tA = treatmentList[i];
|
|
126
|
+
const tB = treatmentList[j];
|
|
127
|
+
// Effect A vs B = effect_A - effect_B (relative to ref)
|
|
128
|
+
let value;
|
|
129
|
+
let variance;
|
|
130
|
+
if (i === 0) {
|
|
131
|
+
// A is reference: effect = -beta_B
|
|
132
|
+
value = -beta[j - 1];
|
|
133
|
+
variance = invXtWX[j - 1][j - 1];
|
|
134
|
+
}
|
|
135
|
+
else if (j === 0) {
|
|
136
|
+
// B is reference: effect = beta_A
|
|
137
|
+
value = beta[i - 1];
|
|
138
|
+
variance = invXtWX[i - 1][i - 1];
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Neither is reference: effect = beta_A - beta_B
|
|
142
|
+
value = beta[i - 1] - beta[j - 1];
|
|
143
|
+
variance =
|
|
144
|
+
invXtWX[i - 1][i - 1] +
|
|
145
|
+
invXtWX[j - 1][j - 1] -
|
|
146
|
+
2 * invXtWX[i - 1][j - 1];
|
|
147
|
+
}
|
|
148
|
+
const se = Math.sqrt(Math.max(0, variance));
|
|
149
|
+
const z = se > 0 ? value / se : 0;
|
|
150
|
+
const p_value = pValueFromZ(z);
|
|
151
|
+
let estimate;
|
|
152
|
+
let ci_lower;
|
|
153
|
+
let ci_upper;
|
|
154
|
+
if (isLogScale(measure)) {
|
|
155
|
+
estimate = Math.exp(value);
|
|
156
|
+
ci_lower = Math.exp(value - 1.96 * se);
|
|
157
|
+
ci_upper = Math.exp(value + 1.96 * se);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
estimate = value;
|
|
161
|
+
ci_lower = value - 1.96 * se;
|
|
162
|
+
ci_upper = value + 1.96 * se;
|
|
163
|
+
}
|
|
164
|
+
// Check if this is a direct or indirect comparison
|
|
165
|
+
const directKey = edgeKey(tA, tB);
|
|
166
|
+
const isDirect = edgeMap.has(directKey);
|
|
167
|
+
estimates.push({
|
|
168
|
+
intervention: tA,
|
|
169
|
+
comparator: tB,
|
|
170
|
+
commonComparator: isDirect ? "(direct)" : ref,
|
|
171
|
+
outcome,
|
|
172
|
+
measure,
|
|
173
|
+
method: "frequentist_nma",
|
|
174
|
+
estimate,
|
|
175
|
+
se,
|
|
176
|
+
ci_lower,
|
|
177
|
+
ci_upper,
|
|
178
|
+
z,
|
|
179
|
+
p_value,
|
|
180
|
+
pooled_ab: { value: beta[Math.max(0, i - 1)] ?? 0, se: seBeta[Math.max(0, i - 1)] ?? 0, n_studies: 0 },
|
|
181
|
+
pooled_bc: { value: beta[Math.max(0, j - 1)] ?? 0, se: seBeta[Math.max(0, j - 1)] ?? 0, n_studies: 0 },
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return estimates;
|
|
186
|
+
}
|
|
187
|
+
/** Gaussian elimination matrix inversion for small matrices */
|
|
188
|
+
function invertMatrix(matrix) {
|
|
189
|
+
const n = matrix.length;
|
|
190
|
+
// Augmented matrix [A | I]
|
|
191
|
+
const aug = matrix.map((row, i) => {
|
|
192
|
+
const augRow = [...row];
|
|
193
|
+
for (let j = 0; j < n; j++) {
|
|
194
|
+
augRow.push(i === j ? 1 : 0);
|
|
195
|
+
}
|
|
196
|
+
return augRow;
|
|
197
|
+
});
|
|
198
|
+
for (let col = 0; col < n; col++) {
|
|
199
|
+
// Find pivot
|
|
200
|
+
let maxRow = col;
|
|
201
|
+
let maxVal = Math.abs(aug[col][col]);
|
|
202
|
+
for (let row = col + 1; row < n; row++) {
|
|
203
|
+
if (Math.abs(aug[row][col]) > maxVal) {
|
|
204
|
+
maxVal = Math.abs(aug[row][col]);
|
|
205
|
+
maxRow = row;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (maxVal < 1e-12)
|
|
209
|
+
return null; // Singular
|
|
210
|
+
// Swap rows
|
|
211
|
+
[aug[col], aug[maxRow]] = [aug[maxRow], aug[col]];
|
|
212
|
+
// Scale pivot row
|
|
213
|
+
const pivot = aug[col][col];
|
|
214
|
+
for (let j = 0; j < 2 * n; j++) {
|
|
215
|
+
aug[col][j] /= pivot;
|
|
216
|
+
}
|
|
217
|
+
// Eliminate column
|
|
218
|
+
for (let row = 0; row < n; row++) {
|
|
219
|
+
if (row === col)
|
|
220
|
+
continue;
|
|
221
|
+
const factor = aug[row][col];
|
|
222
|
+
for (let j = 0; j < 2 * n; j++) {
|
|
223
|
+
aug[row][j] -= factor * aug[col][j];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Extract inverse
|
|
228
|
+
return aug.map((row) => row.slice(n));
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=frequentistNma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frequentistNma.js","sourceRoot":"","sources":["../../src/network/frequentistNma.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAUrE,SAAS,UAAU,CAAC,OAAsB;IACxC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CACrB,CAAmB;IAEnB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,GAAG;QACZ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;QACtD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,WAA+B,EAC/B,OAAe,EACf,OAAsB;IAEtB,kCAAkC;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CACtD,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,iEAAiE;IACjE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmF,CAAC;IAE3G,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QAE/B,iEAAiE;QACjE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;YACzD,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB;QACzC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAErB,6CAA6C;IAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAE7B,wCAAwC;IACxC,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,sBAAsB;IAClD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;IAExC,yBAAyB;IACzB,2CAA2C;IAC3C,8BAA8B;IAC9B,MAAM,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QACzB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QAEzB,oEAAoE;QACpE,IAAI,EAAE,GAAG,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QACnD,IAAI,EAAE,GAAG,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;QAEpD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IAED,+BAA+B;IAC/B,gBAAgB;IAChB,MAAM,IAAI,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAa,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAExC,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,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,wDAAwD;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,wBAAwB;IACxB,MAAM,IAAI,GAAa,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,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,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,GAAa,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,oCAAoC;IACpC,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE5B,wDAAwD;YACxD,IAAI,KAAa,CAAC;YAClB,IAAI,QAAgB,CAAC;YAErB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,mCAAmC;gBACnC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,kCAAkC;gBAClC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpB,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClC,QAAQ;oBACN,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACrB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACrB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,QAAgB,CAAC;YACrB,IAAI,QAAgB,CAAC;YACrB,IAAI,QAAgB,CAAC;YAErB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,KAAK,CAAC;gBACjB,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC7B,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAC/B,CAAC;YAED,mDAAmD;YACnD,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAExC,SAAS,CAAC,IAAI,CAAC;gBACb,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;gBAC7C,OAAO;gBACP,OAAO;gBACP,MAAM,EAAE,iBAAiB;gBACzB,QAAQ;gBACR,EAAE;gBACF,QAAQ;gBACR,QAAQ;gBACR,CAAC;gBACD,OAAO;gBACP,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;gBACtG,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;aACvG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+DAA+D;AAC/D,SAAS,YAAY,CAAC,MAAkB;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,2BAA2B;IAC3B,MAAM,GAAG,GAAe,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,aAAa;QACb,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;gBACrC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,WAAW;QAE5C,YAAY;QACZ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAElD,kBAAkB;QAClB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QACvB,CAAC;QAED,mBAAmB;QACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,IAAI,GAAG,KAAK,GAAG;gBAAE,SAAS;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/network/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { extractComparatorPairs, normalizeDrugName } from "./extractor.js";
|
|
2
2
|
export { buildEvidenceNetwork } from "./builder.js";
|
|
3
|
-
export
|
|
3
|
+
export { computeIndirectComparison, poolFixedEffect } from "./bucher.js";
|
|
4
|
+
export { frequentistNMA } from "./frequentistNma.js";
|
|
5
|
+
export { findIndirectPaths } from "./pathfinder.js";
|
|
6
|
+
export type { EvidenceNode, EvidenceEdge, EvidenceNetwork, NMAFeasibility, NetworkGap, ComparatorPair, DirectComparison, IndirectEstimate, IndirectComparisonResult, IndirectPath, EffectMeasure, PooledEstimate, } from "./types.js";
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/network/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { extractComparatorPairs, normalizeDrugName } from "./extractor.js";
|
|
2
2
|
export { buildEvidenceNetwork } from "./builder.js";
|
|
3
|
+
export { computeIndirectComparison, poolFixedEffect } from "./bucher.js";
|
|
4
|
+
export { frequentistNMA } from "./frequentistNma.js";
|
|
5
|
+
export { findIndirectPaths } from "./pathfinder.js";
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DirectComparison, IndirectPath } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Find all indirect comparison paths through a single common comparator.
|
|
4
|
+
*
|
|
5
|
+
* Given comparisons A-B and B-C, returns the path A→B→C allowing
|
|
6
|
+
* indirect estimation of A vs C.
|
|
7
|
+
*
|
|
8
|
+
* If `target` is specified, only returns paths for that specific comparison.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findIndirectPaths(comparisons: DirectComparison[], target?: {
|
|
11
|
+
intervention: string;
|
|
12
|
+
comparator: string;
|
|
13
|
+
}): IndirectPath[];
|
|
14
|
+
//# sourceMappingURL=pathfinder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathfinder.d.ts","sourceRoot":"","sources":["../../src/network/pathfinder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,MAAM,CAAC,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,YAAY,EAAE,CAqGhB"}
|