qesuite 1.0.67 → 1.0.68

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 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: {
@@ -11435,11 +11540,14 @@ function AttirbuteAgreementConfidenceIntervals(object, confidenceLevel) {
11435
11540
  let v1_low = 2 * object.MatchedCount;
11436
11541
  let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1);
11437
11542
  let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
11438
- let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : Distributions.F.inv(lowP, v1_low, v2_low);
11543
+ const F_inv = (p, df1, df2) => {
11544
+ return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1));
11545
+ };
11546
+ let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
11439
11547
  let v1_high = 2 * (object.MatchedCount + 1);
11440
11548
  let v2_high = 2 * (object.InspectedCount - object.MatchedCount);
11441
11549
  let highP = object.MatchedCount == 0 ? 1 - alpha : 1 - alpha / 2;
11442
- let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : Distributions.F.inv(highP, v1_high, v2_high);
11550
+ let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
11443
11551
  object.Percent = object.MatchedCount / object.InspectedCount;
11444
11552
  object.CI_Low = v1_low * Fv1v2_a_2 / (v2_low + v1_low * Fv1v2_a_2);
11445
11553
  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: {
@@ -11309,11 +11414,14 @@ function AttirbuteAgreementConfidenceIntervals(object, confidenceLevel) {
11309
11414
  let v1_low = 2 * object.MatchedCount;
11310
11415
  let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1);
11311
11416
  let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
11312
- let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : Distributions.F.inv(lowP, v1_low, v2_low);
11417
+ const F_inv = (p, df1, df2) => {
11418
+ return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1));
11419
+ };
11420
+ let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
11313
11421
  let v1_high = 2 * (object.MatchedCount + 1);
11314
11422
  let v2_high = 2 * (object.InspectedCount - object.MatchedCount);
11315
11423
  let highP = object.MatchedCount == 0 ? 1 - alpha : 1 - alpha / 2;
11316
- let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : Distributions.F.inv(highP, v1_high, v2_high);
11424
+ let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
11317
11425
  object.Percent = object.MatchedCount / object.InspectedCount;
11318
11426
  object.CI_Low = v1_low * Fv1v2_a_2 / (v2_low + v1_low * Fv1v2_a_2);
11319
11427
  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
  },
@@ -12252,11 +12350,14 @@ function AttirbuteAgreementConfidenceIntervals(object: any, confidenceLevel?: nu
12252
12350
  let v1_low = 2 * object.MatchedCount
12253
12351
  let v2_low = 2 * (object.InspectedCount - object.MatchedCount + 1)
12254
12352
  let lowP = object.MatchedCount == object.InspectedCount ? alpha : alpha / 2;
12255
- let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : Distributions.F.inv(lowP, v1_low, v2_low);
12353
+ const F_inv = (p, df1, df2) => {
12354
+ return df2 / (df1 * (1 / Beta.invInc(p, df1 / 2, df2 / 2) - 1))
12355
+ }
12356
+ let Fv1v2_a_2 = object.MatchedCount == 0 ? 0 : F_inv(lowP, v1_low, v2_low);
12256
12357
  let v1_high = 2 * (object.MatchedCount + 1)
12257
12358
  let v2_high = 2 * (object.InspectedCount - object.MatchedCount)
12258
12359
  let highP = object.MatchedCount == 0 ? 1 - alpha : 1-alpha/2
12259
- let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : Distributions.F.inv(highP, v1_high, v2_high);
12360
+ let Fv1v2_1_a_2 = object.MatchedCount == object.InspectedCount ? 1 : F_inv(highP, v1_high, v2_high);
12260
12361
  object.Percent = object.MatchedCount / object.InspectedCount;
12261
12362
  object.CI_Low = (v1_low * Fv1v2_a_2)/(v2_low + (v1_low * Fv1v2_a_2));
12262
12363
  object.CI_High = (v1_high * Fv1v2_1_a_2)/(v2_high + (v1_high * Fv1v2_1_a_2));
@@ -13960,5 +14061,4 @@ const Matrix = {
13960
14061
  return newMatrix
13961
14062
  },
13962
14063
  }
13963
- // End Matrix Functions
13964
- /** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */// Validation
14064
+ // End Matrix Functions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qesuite",
3
- "version": "1.0.67",
3
+ "version": "1.0.68",
4
4
  "description": "Performs advanced statistical analysis of data. Specifically designed for engineering statistical analysis",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -0,0 +1 @@
1
+ Updated Confidence Interval Calculation in Attribute Agreement Analysis