qesuite 1.0.67 → 1.0.69
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/index.d.mts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +117 -5
- package/dist/index.mjs +117 -5
- package/index.ts +108 -7
- package/package.json +1 -1
- package/versions/1_0_68.md +1 -0
- package/versions/1_0_69.md +1 -0
package/dist/index.d.mts
CHANGED
|
@@ -1142,6 +1142,9 @@ declare const ANOVA: {
|
|
|
1142
1142
|
chart: HTMLCanvasElement;
|
|
1143
1143
|
};
|
|
1144
1144
|
};
|
|
1145
|
+
Balanced: {
|
|
1146
|
+
Table(responses: any, factors: any, interactions?: any): {};
|
|
1147
|
+
};
|
|
1145
1148
|
GeneralLinearModel(responses: any, factors: any, covariates: any): void;
|
|
1146
1149
|
OneWay: {
|
|
1147
1150
|
Table(data: any): any;
|
package/dist/index.d.ts
CHANGED
|
@@ -1142,6 +1142,9 @@ declare const ANOVA: {
|
|
|
1142
1142
|
chart: HTMLCanvasElement;
|
|
1143
1143
|
};
|
|
1144
1144
|
};
|
|
1145
|
+
Balanced: {
|
|
1146
|
+
Table(responses: any, factors: any, interactions?: any): {};
|
|
1147
|
+
};
|
|
1145
1148
|
GeneralLinearModel(responses: any, factors: any, covariates: any): void;
|
|
1146
1149
|
OneWay: {
|
|
1147
1150
|
Table(data: any): any;
|
package/dist/index.js
CHANGED
|
@@ -1316,6 +1316,7 @@ var Capability = {
|
|
|
1316
1316
|
if (confidenceInterval == void 0) {
|
|
1317
1317
|
sides = void 0;
|
|
1318
1318
|
}
|
|
1319
|
+
console.log(confidenceInterval, sides);
|
|
1319
1320
|
let results = Capability.Analysis(data, spec, target, subgroupSize, confidenceInterval, sides, method, w, UnbiasingConstant2);
|
|
1320
1321
|
let mean = Mean(data);
|
|
1321
1322
|
let std = StDev.S(data);
|
|
@@ -5410,6 +5411,110 @@ var ANOVA = {
|
|
|
5410
5411
|
};
|
|
5411
5412
|
}
|
|
5412
5413
|
},
|
|
5414
|
+
Balanced: {
|
|
5415
|
+
Table(responses, factors, interactions = []) {
|
|
5416
|
+
let grandMean = Mean(responses);
|
|
5417
|
+
let factorsWInteractions = {};
|
|
5418
|
+
Object.keys(factors).forEach((f) => {
|
|
5419
|
+
factorsWInteractions[f] = factors[f];
|
|
5420
|
+
});
|
|
5421
|
+
interactions.forEach((element) => {
|
|
5422
|
+
factorsWInteractions[element] = responses.map((r, i) => {
|
|
5423
|
+
return element.split("*").map((k) => {
|
|
5424
|
+
return factors[k][i];
|
|
5425
|
+
}).join("*");
|
|
5426
|
+
});
|
|
5427
|
+
});
|
|
5428
|
+
let factorInfo = {};
|
|
5429
|
+
let totalLevelCount = 1;
|
|
5430
|
+
Object.keys(factors).forEach((k, i) => {
|
|
5431
|
+
let levels = Unique(factors[k]);
|
|
5432
|
+
totalLevelCount *= levels.length;
|
|
5433
|
+
factorInfo[k] = {
|
|
5434
|
+
Factor: k,
|
|
5435
|
+
Levels: levels.length,
|
|
5436
|
+
Values: levels.join(", ")
|
|
5437
|
+
};
|
|
5438
|
+
});
|
|
5439
|
+
let SSFactors = 0;
|
|
5440
|
+
let DFFactors = 0;
|
|
5441
|
+
let anovaTable = {};
|
|
5442
|
+
Object.keys(factorsWInteractions).forEach((k, i) => {
|
|
5443
|
+
let df = Product(k.split("*").map((f) => {
|
|
5444
|
+
return factorInfo[f].Levels - 1;
|
|
5445
|
+
}));
|
|
5446
|
+
DFFactors += df;
|
|
5447
|
+
let ss = 0;
|
|
5448
|
+
Unique(factorsWInteractions[k]).forEach((group) => {
|
|
5449
|
+
let groupMean = Mean(responses.filter((r, ri) => {
|
|
5450
|
+
return factorsWInteractions[k][ri] == group;
|
|
5451
|
+
}));
|
|
5452
|
+
if (k.includes("*")) {
|
|
5453
|
+
let factorLevelMeans = k.split("*").map((f, fi) => {
|
|
5454
|
+
return responses.filter((r, ri) => {
|
|
5455
|
+
return factors[f][ri] == group.split("*")[fi];
|
|
5456
|
+
});
|
|
5457
|
+
});
|
|
5458
|
+
let factorCombos = [];
|
|
5459
|
+
k.split("*").forEach((f, fi) => {
|
|
5460
|
+
k.split("*").forEach((f2, fi2) => {
|
|
5461
|
+
if (fi2 > fi) {
|
|
5462
|
+
let responseValues = responses.filter((r, ri) => {
|
|
5463
|
+
return factors[k.split("*")[fi]][ri] == f && factors[k.split("*")[fi2]][ri] == f2;
|
|
5464
|
+
});
|
|
5465
|
+
factorCombos.push(responseValues);
|
|
5466
|
+
}
|
|
5467
|
+
});
|
|
5468
|
+
});
|
|
5469
|
+
ss += Math.pow(groupMean - Sum(factorLevelMeans.map((arr) => {
|
|
5470
|
+
return Mean(arr);
|
|
5471
|
+
})) + grandMean, 2);
|
|
5472
|
+
} else {
|
|
5473
|
+
ss += Math.pow(groupMean - grandMean, 2);
|
|
5474
|
+
}
|
|
5475
|
+
});
|
|
5476
|
+
let n = responses.length / totalLevelCount;
|
|
5477
|
+
ss *= n * Product(Object.keys(factorInfo).filter((f) => {
|
|
5478
|
+
return k.includes(f) == false;
|
|
5479
|
+
}).map((fk) => {
|
|
5480
|
+
return factorInfo[fk].Levels;
|
|
5481
|
+
}));
|
|
5482
|
+
SSFactors += ss;
|
|
5483
|
+
anovaTable[k] = {
|
|
5484
|
+
Source: k,
|
|
5485
|
+
DF: df,
|
|
5486
|
+
SS: ss,
|
|
5487
|
+
MS: ss / df,
|
|
5488
|
+
F: NaN,
|
|
5489
|
+
p: NaN
|
|
5490
|
+
};
|
|
5491
|
+
});
|
|
5492
|
+
let SST = SumSq(responses.map((r) => {
|
|
5493
|
+
return r - grandMean;
|
|
5494
|
+
}));
|
|
5495
|
+
let DFE = responses.length - DFFactors - 1;
|
|
5496
|
+
let SSE = SST - SSFactors;
|
|
5497
|
+
let MSE = SSE / DFE;
|
|
5498
|
+
Object.keys(anovaTable).forEach((key) => {
|
|
5499
|
+
let fValue = anovaTable[key].MS / MSE;
|
|
5500
|
+
let pValue = Distributions.F.RightTail(fValue, anovaTable[key].DF, DFE);
|
|
5501
|
+
anovaTable[key].F = fValue;
|
|
5502
|
+
anovaTable[key].p = pValue;
|
|
5503
|
+
});
|
|
5504
|
+
anovaTable["Error"] = {
|
|
5505
|
+
Source: "Error",
|
|
5506
|
+
DF: DFE,
|
|
5507
|
+
SS: SSE,
|
|
5508
|
+
MS: MSE
|
|
5509
|
+
};
|
|
5510
|
+
anovaTable["Total"] = {
|
|
5511
|
+
Source: "Total",
|
|
5512
|
+
DF: responses.length - 1,
|
|
5513
|
+
SS: SST
|
|
5514
|
+
};
|
|
5515
|
+
return anovaTable;
|
|
5516
|
+
}
|
|
5517
|
+
},
|
|
5413
5518
|
GeneralLinearModel(responses, factors, covariates) {
|
|
5414
5519
|
},
|
|
5415
5520
|
OneWay: {
|
|
@@ -7985,11 +8090,15 @@ var NonparametricTesting = {
|
|
|
7985
8090
|
let H = 12 * Sum(avgRanks.map((Rj, j) => {
|
|
7986
8091
|
return data[j].length * Math.pow(Rj - avgOverallRank, 2);
|
|
7987
8092
|
})) / (N * (N + 1));
|
|
8093
|
+
H = 12 / (N * (N + 1)) * Sum(ranks.map((r) => {
|
|
8094
|
+
return Math.pow(Sum(r), 2) / r.length;
|
|
8095
|
+
})) - 3 * (N + 1);
|
|
7988
8096
|
let H_not = 0 + H;
|
|
7989
8097
|
if (adjustH) {
|
|
7990
|
-
|
|
7991
|
-
return Math.pow(
|
|
7992
|
-
}))
|
|
8098
|
+
let T = 1 - 1 / (Math.pow(N, 3) - N) * Sum(tieSets.map((t) => {
|
|
8099
|
+
return Math.pow(t.length, 3) - t.length;
|
|
8100
|
+
}));
|
|
8101
|
+
H = H / T;
|
|
7993
8102
|
}
|
|
7994
8103
|
return {
|
|
7995
8104
|
DescriptiveStatistics: data.map((group, i) => {
|
|
@@ -11435,11 +11544,14 @@ function AttirbuteAgreementConfidenceIntervals(object, confidenceLevel) {
|
|
|
11435
11544
|
let v1_low = 2 * object.MatchedCount;
|
|
11436
11545
|
let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1);
|
|
11437
11546
|
let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
|
|
11438
|
-
|
|
11547
|
+
const F_inv = (p, df1, df2) => {
|
|
11548
|
+
return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1));
|
|
11549
|
+
};
|
|
11550
|
+
let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
|
|
11439
11551
|
let v1_high = 2 * (object.MatchedCount + 1);
|
|
11440
11552
|
let v2_high = 2 * (object.InspectedCount - object.MatchedCount);
|
|
11441
11553
|
let highP = object.MatchedCount == 0 ? 1 - alpha : 1 - alpha / 2;
|
|
11442
|
-
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 :
|
|
11554
|
+
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
|
|
11443
11555
|
object.Percent = object.MatchedCount / object.InspectedCount;
|
|
11444
11556
|
object.CI_Low = v1_low * Fv1v2_a_2 / (v2_low + v1_low * Fv1v2_a_2);
|
|
11445
11557
|
object.CI_High = v1_high * Fv1v2_1_a_2 / (v2_high + v1_high * Fv1v2_1_a_2);
|
package/dist/index.mjs
CHANGED
|
@@ -1190,6 +1190,7 @@ var Capability = {
|
|
|
1190
1190
|
if (confidenceInterval == void 0) {
|
|
1191
1191
|
sides = void 0;
|
|
1192
1192
|
}
|
|
1193
|
+
console.log(confidenceInterval, sides);
|
|
1193
1194
|
let results = Capability.Analysis(data, spec, target, subgroupSize, confidenceInterval, sides, method, w, UnbiasingConstant2);
|
|
1194
1195
|
let mean = Mean(data);
|
|
1195
1196
|
let std = StDev.S(data);
|
|
@@ -5284,6 +5285,110 @@ var ANOVA = {
|
|
|
5284
5285
|
};
|
|
5285
5286
|
}
|
|
5286
5287
|
},
|
|
5288
|
+
Balanced: {
|
|
5289
|
+
Table(responses, factors, interactions = []) {
|
|
5290
|
+
let grandMean = Mean(responses);
|
|
5291
|
+
let factorsWInteractions = {};
|
|
5292
|
+
Object.keys(factors).forEach((f) => {
|
|
5293
|
+
factorsWInteractions[f] = factors[f];
|
|
5294
|
+
});
|
|
5295
|
+
interactions.forEach((element) => {
|
|
5296
|
+
factorsWInteractions[element] = responses.map((r, i) => {
|
|
5297
|
+
return element.split("*").map((k) => {
|
|
5298
|
+
return factors[k][i];
|
|
5299
|
+
}).join("*");
|
|
5300
|
+
});
|
|
5301
|
+
});
|
|
5302
|
+
let factorInfo = {};
|
|
5303
|
+
let totalLevelCount = 1;
|
|
5304
|
+
Object.keys(factors).forEach((k, i) => {
|
|
5305
|
+
let levels = Unique(factors[k]);
|
|
5306
|
+
totalLevelCount *= levels.length;
|
|
5307
|
+
factorInfo[k] = {
|
|
5308
|
+
Factor: k,
|
|
5309
|
+
Levels: levels.length,
|
|
5310
|
+
Values: levels.join(", ")
|
|
5311
|
+
};
|
|
5312
|
+
});
|
|
5313
|
+
let SSFactors = 0;
|
|
5314
|
+
let DFFactors = 0;
|
|
5315
|
+
let anovaTable = {};
|
|
5316
|
+
Object.keys(factorsWInteractions).forEach((k, i) => {
|
|
5317
|
+
let df = Product(k.split("*").map((f) => {
|
|
5318
|
+
return factorInfo[f].Levels - 1;
|
|
5319
|
+
}));
|
|
5320
|
+
DFFactors += df;
|
|
5321
|
+
let ss = 0;
|
|
5322
|
+
Unique(factorsWInteractions[k]).forEach((group) => {
|
|
5323
|
+
let groupMean = Mean(responses.filter((r, ri) => {
|
|
5324
|
+
return factorsWInteractions[k][ri] == group;
|
|
5325
|
+
}));
|
|
5326
|
+
if (k.includes("*")) {
|
|
5327
|
+
let factorLevelMeans = k.split("*").map((f, fi) => {
|
|
5328
|
+
return responses.filter((r, ri) => {
|
|
5329
|
+
return factors[f][ri] == group.split("*")[fi];
|
|
5330
|
+
});
|
|
5331
|
+
});
|
|
5332
|
+
let factorCombos = [];
|
|
5333
|
+
k.split("*").forEach((f, fi) => {
|
|
5334
|
+
k.split("*").forEach((f2, fi2) => {
|
|
5335
|
+
if (fi2 > fi) {
|
|
5336
|
+
let responseValues = responses.filter((r, ri) => {
|
|
5337
|
+
return factors[k.split("*")[fi]][ri] == f && factors[k.split("*")[fi2]][ri] == f2;
|
|
5338
|
+
});
|
|
5339
|
+
factorCombos.push(responseValues);
|
|
5340
|
+
}
|
|
5341
|
+
});
|
|
5342
|
+
});
|
|
5343
|
+
ss += Math.pow(groupMean - Sum(factorLevelMeans.map((arr) => {
|
|
5344
|
+
return Mean(arr);
|
|
5345
|
+
})) + grandMean, 2);
|
|
5346
|
+
} else {
|
|
5347
|
+
ss += Math.pow(groupMean - grandMean, 2);
|
|
5348
|
+
}
|
|
5349
|
+
});
|
|
5350
|
+
let n = responses.length / totalLevelCount;
|
|
5351
|
+
ss *= n * Product(Object.keys(factorInfo).filter((f) => {
|
|
5352
|
+
return k.includes(f) == false;
|
|
5353
|
+
}).map((fk) => {
|
|
5354
|
+
return factorInfo[fk].Levels;
|
|
5355
|
+
}));
|
|
5356
|
+
SSFactors += ss;
|
|
5357
|
+
anovaTable[k] = {
|
|
5358
|
+
Source: k,
|
|
5359
|
+
DF: df,
|
|
5360
|
+
SS: ss,
|
|
5361
|
+
MS: ss / df,
|
|
5362
|
+
F: NaN,
|
|
5363
|
+
p: NaN
|
|
5364
|
+
};
|
|
5365
|
+
});
|
|
5366
|
+
let SST = SumSq(responses.map((r) => {
|
|
5367
|
+
return r - grandMean;
|
|
5368
|
+
}));
|
|
5369
|
+
let DFE = responses.length - DFFactors - 1;
|
|
5370
|
+
let SSE = SST - SSFactors;
|
|
5371
|
+
let MSE = SSE / DFE;
|
|
5372
|
+
Object.keys(anovaTable).forEach((key) => {
|
|
5373
|
+
let fValue = anovaTable[key].MS / MSE;
|
|
5374
|
+
let pValue = Distributions.F.RightTail(fValue, anovaTable[key].DF, DFE);
|
|
5375
|
+
anovaTable[key].F = fValue;
|
|
5376
|
+
anovaTable[key].p = pValue;
|
|
5377
|
+
});
|
|
5378
|
+
anovaTable["Error"] = {
|
|
5379
|
+
Source: "Error",
|
|
5380
|
+
DF: DFE,
|
|
5381
|
+
SS: SSE,
|
|
5382
|
+
MS: MSE
|
|
5383
|
+
};
|
|
5384
|
+
anovaTable["Total"] = {
|
|
5385
|
+
Source: "Total",
|
|
5386
|
+
DF: responses.length - 1,
|
|
5387
|
+
SS: SST
|
|
5388
|
+
};
|
|
5389
|
+
return anovaTable;
|
|
5390
|
+
}
|
|
5391
|
+
},
|
|
5287
5392
|
GeneralLinearModel(responses, factors, covariates) {
|
|
5288
5393
|
},
|
|
5289
5394
|
OneWay: {
|
|
@@ -7859,11 +7964,15 @@ var NonparametricTesting = {
|
|
|
7859
7964
|
let H = 12 * Sum(avgRanks.map((Rj, j) => {
|
|
7860
7965
|
return data[j].length * Math.pow(Rj - avgOverallRank, 2);
|
|
7861
7966
|
})) / (N * (N + 1));
|
|
7967
|
+
H = 12 / (N * (N + 1)) * Sum(ranks.map((r) => {
|
|
7968
|
+
return Math.pow(Sum(r), 2) / r.length;
|
|
7969
|
+
})) - 3 * (N + 1);
|
|
7862
7970
|
let H_not = 0 + H;
|
|
7863
7971
|
if (adjustH) {
|
|
7864
|
-
|
|
7865
|
-
return Math.pow(
|
|
7866
|
-
}))
|
|
7972
|
+
let T = 1 - 1 / (Math.pow(N, 3) - N) * Sum(tieSets.map((t) => {
|
|
7973
|
+
return Math.pow(t.length, 3) - t.length;
|
|
7974
|
+
}));
|
|
7975
|
+
H = H / T;
|
|
7867
7976
|
}
|
|
7868
7977
|
return {
|
|
7869
7978
|
DescriptiveStatistics: data.map((group, i) => {
|
|
@@ -11309,11 +11418,14 @@ function AttirbuteAgreementConfidenceIntervals(object, confidenceLevel) {
|
|
|
11309
11418
|
let v1_low = 2 * object.MatchedCount;
|
|
11310
11419
|
let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1);
|
|
11311
11420
|
let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
|
|
11312
|
-
|
|
11421
|
+
const F_inv = (p, df1, df2) => {
|
|
11422
|
+
return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1));
|
|
11423
|
+
};
|
|
11424
|
+
let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
|
|
11313
11425
|
let v1_high = 2 * (object.MatchedCount + 1);
|
|
11314
11426
|
let v2_high = 2 * (object.InspectedCount - object.MatchedCount);
|
|
11315
11427
|
let highP = object.MatchedCount == 0 ? 1 - alpha : 1 - alpha / 2;
|
|
11316
|
-
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 :
|
|
11428
|
+
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
|
|
11317
11429
|
object.Percent = object.MatchedCount / object.InspectedCount;
|
|
11318
11430
|
object.CI_Low = v1_low * Fv1v2_a_2 / (v2_low + v1_low * Fv1v2_a_2);
|
|
11319
11431
|
object.CI_High = v1_high * Fv1v2_1_a_2 / (v2_high + v1_high * Fv1v2_1_a_2);
|
package/index.ts
CHANGED
|
@@ -1332,6 +1332,7 @@ SixPack(data: number[], spec: Specification, title?: string){
|
|
|
1332
1332
|
},
|
|
1333
1333
|
Report(data: number[], spec: Specification, target?: number, subgroupSize?: number, confidenceInterval?: number, sides: any = -1, method?: string, w?: number, UnbiasingConstant?: boolean){
|
|
1334
1334
|
if(confidenceInterval == undefined){sides = undefined}
|
|
1335
|
+
console.log(confidenceInterval, sides)
|
|
1335
1336
|
let results: any = Capability.Analysis(data, spec, target, subgroupSize, confidenceInterval, sides, method, w, UnbiasingConstant);
|
|
1336
1337
|
let mean = Mean(data);
|
|
1337
1338
|
let std = StDev.S(data);
|
|
@@ -5683,6 +5684,103 @@ export const ANOVA = {
|
|
|
5683
5684
|
}
|
|
5684
5685
|
}
|
|
5685
5686
|
},
|
|
5687
|
+
Balanced:{
|
|
5688
|
+
Table(responses, factors, interactions: any = []){
|
|
5689
|
+
let grandMean = Mean(responses)
|
|
5690
|
+
|
|
5691
|
+
let factorsWInteractions = {};
|
|
5692
|
+
|
|
5693
|
+
Object.keys(factors).forEach(f => {
|
|
5694
|
+
factorsWInteractions[f] = factors[f]
|
|
5695
|
+
})
|
|
5696
|
+
|
|
5697
|
+
interactions.forEach(element => {
|
|
5698
|
+
factorsWInteractions[element] = responses.map((r,i) => {return element.split("*").map(k =>{return factors[k][i]}).join("*")})
|
|
5699
|
+
});
|
|
5700
|
+
|
|
5701
|
+
let factorInfo = {}
|
|
5702
|
+
let totalLevelCount = 1;
|
|
5703
|
+
Object.keys(factors).forEach((k,i) => {
|
|
5704
|
+
let levels = Unique(factors[k])
|
|
5705
|
+
totalLevelCount *= levels.length;
|
|
5706
|
+
factorInfo[k] = {
|
|
5707
|
+
Factor: k,
|
|
5708
|
+
Levels: levels.length,
|
|
5709
|
+
Values: levels.join(", ")
|
|
5710
|
+
}
|
|
5711
|
+
})
|
|
5712
|
+
|
|
5713
|
+
let SSFactors = 0;
|
|
5714
|
+
let DFFactors = 0;
|
|
5715
|
+
let anovaTable = {}
|
|
5716
|
+
Object.keys(factorsWInteractions).forEach((k,i) => {
|
|
5717
|
+
let df = Product(k.split("*").map(f => {return factorInfo[f].Levels - 1}))
|
|
5718
|
+
DFFactors += df;
|
|
5719
|
+
|
|
5720
|
+
let ss = 0;
|
|
5721
|
+
Unique(factorsWInteractions[k]).forEach(group => {
|
|
5722
|
+
let groupMean = Mean(responses.filter((r,ri) => {return factorsWInteractions[k][ri] == group}))
|
|
5723
|
+
if(k.includes("*")){
|
|
5724
|
+
// is an interaction
|
|
5725
|
+
let factorLevelMeans = k.split("*").map((f,fi) => {return responses.filter((r,ri) => {return factors[f][ri] == group.split("*")[fi]})})
|
|
5726
|
+
|
|
5727
|
+
let factorCombos: any = [];
|
|
5728
|
+
k.split("*").forEach((f,fi) => {
|
|
5729
|
+
k.split("*").forEach((f2, fi2) => {
|
|
5730
|
+
if(fi2 > fi){
|
|
5731
|
+
let responseValues = responses.filter((r, ri) => {return factors[k.split("*")[fi]][ri] == f && factors[k.split("*")[fi2]][ri] == f2})
|
|
5732
|
+
factorCombos.push(responseValues)
|
|
5733
|
+
}
|
|
5734
|
+
})
|
|
5735
|
+
})
|
|
5736
|
+
|
|
5737
|
+
ss += Math.pow(groupMean - Sum(factorLevelMeans.map(arr => {return Mean(arr)})) + grandMean, 2)
|
|
5738
|
+
}else{
|
|
5739
|
+
ss += Math.pow(groupMean - grandMean, 2)
|
|
5740
|
+
}
|
|
5741
|
+
})
|
|
5742
|
+
let n = responses.length / totalLevelCount;
|
|
5743
|
+
ss *= n * Product(Object.keys(factorInfo).filter(f => {return k.includes(f) == false}).map(fk => {return factorInfo[fk].Levels}))
|
|
5744
|
+
SSFactors += ss;
|
|
5745
|
+
anovaTable[k] = {
|
|
5746
|
+
Source: k,
|
|
5747
|
+
DF: df,
|
|
5748
|
+
SS: ss,
|
|
5749
|
+
MS: ss/df,
|
|
5750
|
+
F: NaN,
|
|
5751
|
+
p: NaN
|
|
5752
|
+
}
|
|
5753
|
+
})
|
|
5754
|
+
let SST = SumSq(responses.map(r => {return r - grandMean}))
|
|
5755
|
+
|
|
5756
|
+
let DFE = responses.length - DFFactors - 1;
|
|
5757
|
+
let SSE = SST - SSFactors;
|
|
5758
|
+
let MSE = SSE / DFE;
|
|
5759
|
+
|
|
5760
|
+
Object.keys(anovaTable).forEach(key => {
|
|
5761
|
+
let fValue = anovaTable[key].MS / MSE
|
|
5762
|
+
let pValue = Distributions.F.RightTail(fValue, anovaTable[key].DF, DFE)
|
|
5763
|
+
anovaTable[key].F = fValue
|
|
5764
|
+
anovaTable[key].p = pValue
|
|
5765
|
+
})
|
|
5766
|
+
|
|
5767
|
+
anovaTable["Error"] = {
|
|
5768
|
+
Source: "Error",
|
|
5769
|
+
DF: DFE,
|
|
5770
|
+
SS: SSE,
|
|
5771
|
+
MS: MSE
|
|
5772
|
+
}
|
|
5773
|
+
|
|
5774
|
+
anovaTable["Total"] = {
|
|
5775
|
+
Source: "Total",
|
|
5776
|
+
DF: responses.length - 1,
|
|
5777
|
+
SS: SST
|
|
5778
|
+
}
|
|
5779
|
+
|
|
5780
|
+
return anovaTable
|
|
5781
|
+
|
|
5782
|
+
}
|
|
5783
|
+
},
|
|
5686
5784
|
GeneralLinearModel(responses: any, factors: any, covariates: any){
|
|
5687
5785
|
|
|
5688
5786
|
},
|
|
@@ -8395,12 +8493,13 @@ export const NonparametricTesting = {
|
|
|
8395
8493
|
|
|
8396
8494
|
let tieSets = CompileTies(combinedData)
|
|
8397
8495
|
let adjustH = tieSets.length > 0
|
|
8398
|
-
let H = 12 * Sum(avgRanks.map((Rj, j) => {return data[j].length * Math.pow(Rj - avgOverallRank, 2)}))/(N *(N + 1));
|
|
8496
|
+
let H = 12 * Sum(avgRanks.map((Rj, j) => {return data[j].length * Math.pow(Rj - avgOverallRank, 2)}))/(N *(N + 1));
|
|
8497
|
+
H = (12 / (N * (N + 1))) * (Sum(ranks.map(r => {return Math.pow(Sum(r),2)/r.length}))) - 3 *(N + 1);
|
|
8399
8498
|
let H_not = 0 + H;
|
|
8400
8499
|
|
|
8401
8500
|
if(adjustH){
|
|
8402
|
-
|
|
8403
|
-
H =
|
|
8501
|
+
let T = 1 - 1 / (Math.pow(N, 3) - N) * Sum(tieSets.map(t => {return Math.pow(t.length, 3) - t.length}))
|
|
8502
|
+
H = H / T
|
|
8404
8503
|
}
|
|
8405
8504
|
|
|
8406
8505
|
return {
|
|
@@ -12252,11 +12351,14 @@ function AttirbuteAgreementConfidenceIntervals(object: any, confidenceLevel?: nu
|
|
|
12252
12351
|
let v1_low = 2 * object.MatchedCount
|
|
12253
12352
|
let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1)
|
|
12254
12353
|
let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
|
|
12255
|
-
|
|
12354
|
+
const F_inv = (p, df1, df2) => {
|
|
12355
|
+
return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1))
|
|
12356
|
+
}
|
|
12357
|
+
let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
|
|
12256
12358
|
let v1_high = 2 * (object.MatchedCount + 1)
|
|
12257
12359
|
let v2_high = 2 * (object.InspectedCount - object.MatchedCount)
|
|
12258
12360
|
let highP = object.MatchedCount == 0 ? 1 - alpha : 1-alpha/2
|
|
12259
|
-
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 :
|
|
12361
|
+
let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
|
|
12260
12362
|
object.Percent = object.MatchedCount / object.InspectedCount;
|
|
12261
12363
|
object.CI_Low = (v1_low * Fv1v2_a_2)/(v2_low + (v1_low * Fv1v2_a_2));
|
|
12262
12364
|
object.CI_High = (v1_high * Fv1v2_1_a_2)/(v2_high + (v1_high * Fv1v2_1_a_2));
|
|
@@ -13960,5 +14062,4 @@ const Matrix = {
|
|
|
13960
14062
|
return newMatrix
|
|
13961
14063
|
},
|
|
13962
14064
|
}
|
|
13963
|
-
// End Matrix Functions
|
|
13964
|
-
/** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */// Validation
|
|
14065
|
+
// End Matrix Functions
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Updated Confidence Interval Calculation in Attribute Agreement Analysis
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Updated KruskalWallis Adjusted for Ties formula
|