qesuite 1.0.34 → 1.0.35

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
@@ -593,24 +593,30 @@ declare const Distributions: {
593
593
  * @param scale [OPTIONAL] (σ): The scale parameter of the specified distribution. The scale parameter of the normal distribution is equivalent to the Standard Deviation.
594
594
  */
595
595
  pdf(x: number, location?: number, scale?: number): number;
596
- RyanJoiner: {
597
- Test(data: number[]): {
598
- RJ: number;
599
- critical: number;
600
- };
601
- Critical(data: number[]): number;
602
- };
596
+ Chebyshev(data: number[], spec: Specification): number;
603
597
  JarqueBera(data: number[]): {
604
598
  JB: number;
605
599
  p: number;
606
600
  };
607
- Chebyshev(data: number[], spec: Specification): number;
608
- Skewness(data: any): number;
609
601
  Kurtosis(data: any): number;
610
602
  KolmogorovSmirnov(data: any): {
611
603
  KS: number;
612
604
  p: any;
613
605
  };
606
+ Lilliefors: {
607
+ Test(data: number[]): {
608
+ KS: number;
609
+ p: number;
610
+ };
611
+ p(KS: number, N: number): number;
612
+ };
613
+ RyanJoiner: {
614
+ Test(data: number[]): {
615
+ RJ: number;
616
+ critical: number;
617
+ };
618
+ Critical(data: number[]): number;
619
+ };
614
620
  ShapiroWilk: {
615
621
  Test(data: number[], expanded?: boolean): {
616
622
  W: number;
@@ -623,6 +629,7 @@ declare const Distributions: {
623
629
  pValues: number[];
624
630
  };
625
631
  };
632
+ Skewness(data: any): number;
626
633
  };
627
634
  T: {
628
635
  /**
package/dist/index.d.ts CHANGED
@@ -593,24 +593,30 @@ declare const Distributions: {
593
593
  * @param scale [OPTIONAL] (σ): The scale parameter of the specified distribution. The scale parameter of the normal distribution is equivalent to the Standard Deviation.
594
594
  */
595
595
  pdf(x: number, location?: number, scale?: number): number;
596
- RyanJoiner: {
597
- Test(data: number[]): {
598
- RJ: number;
599
- critical: number;
600
- };
601
- Critical(data: number[]): number;
602
- };
596
+ Chebyshev(data: number[], spec: Specification): number;
603
597
  JarqueBera(data: number[]): {
604
598
  JB: number;
605
599
  p: number;
606
600
  };
607
- Chebyshev(data: number[], spec: Specification): number;
608
- Skewness(data: any): number;
609
601
  Kurtosis(data: any): number;
610
602
  KolmogorovSmirnov(data: any): {
611
603
  KS: number;
612
604
  p: any;
613
605
  };
606
+ Lilliefors: {
607
+ Test(data: number[]): {
608
+ KS: number;
609
+ p: number;
610
+ };
611
+ p(KS: number, N: number): number;
612
+ };
613
+ RyanJoiner: {
614
+ Test(data: number[]): {
615
+ RJ: number;
616
+ critical: number;
617
+ };
618
+ Critical(data: number[]): number;
619
+ };
614
620
  ShapiroWilk: {
615
621
  Test(data: number[], expanded?: boolean): {
616
622
  W: number;
@@ -623,6 +629,7 @@ declare const Distributions: {
623
629
  pValues: number[];
624
630
  };
625
631
  };
632
+ Skewness(data: any): number;
626
633
  };
627
634
  T: {
628
635
  /**
package/dist/index.js CHANGED
@@ -1501,43 +1501,6 @@ var Distributions = {
1501
1501
  pdf(x, location = 0, scale = 1) {
1502
1502
  return 1 / (scale * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((x - location) / scale, 2));
1503
1503
  },
1504
- RyanJoiner: {
1505
- Test(data) {
1506
- let N = data.length;
1507
- let Z = [];
1508
- let Y = [...data].sort(function(a, b) {
1509
- return a - b;
1510
- });
1511
- let numSum = 0;
1512
- let denSum = 0;
1513
- let mean = Mean(data);
1514
- let variance = Math.pow(StDev.S(data), 2);
1515
- for (let i = 0; i < N; i++) {
1516
- Z[i] = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
1517
- numSum += Z[i] * (Y[i] - mean);
1518
- denSum += Math.pow(Z[i], 2);
1519
- }
1520
- let RJ = numSum / Math.sqrt(variance * (N - 1) * denSum);
1521
- return {
1522
- RJ,
1523
- critical: Distributions.Normal.RyanJoiner.Critical(data)
1524
- };
1525
- },
1526
- Critical(data) {
1527
- let N = data.length;
1528
- return 1.0063 - 0.6118 / N + 1.3505 / Math.pow(N, 2) - 0.1288 / Math.pow(N, 0.5);
1529
- }
1530
- },
1531
- JarqueBera(data) {
1532
- let N = data.length;
1533
- let S = Distributions.Normal.Skewness(data);
1534
- let K = Distributions.Normal.Kurtosis(data);
1535
- let JB = N / 6 * (Math.pow(S, 2) + 0.25 * Math.pow(K, 2));
1536
- return {
1537
- JB,
1538
- p: Distributions.ChiSq.RightTail(JB, 2)
1539
- };
1540
- },
1541
1504
  Chebyshev(data, spec) {
1542
1505
  let mean = Mean(data);
1543
1506
  let standard_deviation = StDev.S(data);
@@ -1551,18 +1514,15 @@ var Distributions = {
1551
1514
  }
1552
1515
  return min / (10 * standard_deviation);
1553
1516
  },
1554
- Skewness(data) {
1517
+ JarqueBera(data) {
1555
1518
  let N = data.length;
1556
- let mean = Mean(data);
1557
- let numsum = 0;
1558
- let densum = 0;
1559
- for (let i = 0; i < N; i++) {
1560
- let inner = data[i] - mean;
1561
- numsum += Math.pow(inner, 3);
1562
- }
1563
- let num = numsum * N;
1564
- let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data), 3);
1565
- return num / den;
1519
+ let S = Distributions.Normal.Skewness(data);
1520
+ let K = Distributions.Normal.Kurtosis(data);
1521
+ let JB = N / 6 * (Math.pow(S, 2) + 0.25 * Math.pow(K, 2));
1522
+ return {
1523
+ JB,
1524
+ p: Distributions.ChiSq.RightTail(JB, 2)
1525
+ };
1566
1526
  },
1567
1527
  Kurtosis(data) {
1568
1528
  let N = data.length;
@@ -1595,6 +1555,121 @@ var Distributions = {
1595
1555
  p
1596
1556
  };
1597
1557
  },
1558
+ Lilliefors: {
1559
+ Test(data) {
1560
+ let KS = Distributions.Normal.KolmogorovSmirnov(data).KS;
1561
+ let p = Distributions.Normal.Lilliefors.p(KS, data.length);
1562
+ return {
1563
+ KS,
1564
+ p
1565
+ };
1566
+ },
1567
+ p(KS, N) {
1568
+ let pSelections = [];
1569
+ let pChart = [
1570
+ [0.3027, 0.3216, 0.3456, 0.3754, 0.4129],
1571
+ [0.2893, 0.3027, 0.3188, 0.3427, 0.3959],
1572
+ [0.2694, 0.2816, 0.2982, 0.3245, 0.3728],
1573
+ [0.2521, 0.2641, 0.2802, 0.3041, 0.3504],
1574
+ [0.2387, 0.2502, 0.2649, 0.2875, 0.3331],
1575
+ [0.2273, 0.2382, 0.2522, 0.2744, 0.3162],
1576
+ [0.2171, 0.2273, 0.241, 0.2616, 0.3037],
1577
+ [0.208, 0.2179, 0.2306, 0.2506, 0.2905],
1578
+ [0.2004, 0.2101, 0.2228, 0.2426, 0.2812],
1579
+ [0.1932, 0.2025, 0.2147, 0.2337, 0.2714],
1580
+ [0.1869, 0.1959, 0.2077, 0.2257, 0.2627],
1581
+ [0.1811, 0.1899, 0.2016, 0.2196, 0.2545],
1582
+ [0.1758, 0.1843, 0.1956, 0.2128, 0.2477],
1583
+ [0.1711, 0.1794, 0.1902, 0.2071, 0.2408],
1584
+ [0.1666, 0.1747, 0.1852, 0.2018, 0.2345],
1585
+ [0.1624, 0.17, 0.1803, 0.1965, 0.2285],
1586
+ [0.1589, 0.1666, 0.1764, 0.192, 0.2226],
1587
+ [0.1553, 0.1629, 0.1726, 0.1881, 0.219],
1588
+ [0.1517, 0.1592, 0.169, 0.184, 0.2141],
1589
+ [0.1484, 0.1555, 0.165, 0.1798, 0.209],
1590
+ [0.1458, 0.1527, 0.1619, 0.1766, 0.2053],
1591
+ [0.1429, 0.1498, 0.1589, 0.1726, 0.201],
1592
+ [0.1406, 0.1472, 0.1562, 0.1699, 0.1985],
1593
+ [0.1381, 0.1448, 0.1533, 0.1665, 0.1941],
1594
+ [0.1358, 0.1423, 0.1509, 0.1641, 0.1911],
1595
+ [0.1334, 0.1398, 0.1483, 0.1614, 0.1886],
1596
+ [0.1315, 0.1378, 0.146, 0.159, 0.1848],
1597
+ [0.1291, 0.1353, 0.1432, 0.1559, 0.182],
1598
+ [0.1274, 0.1336, 0.1415, 0.1542, 0.1798],
1599
+ [0.1254, 0.1314, 0.1392, 0.1518, 0.177],
1600
+ [0.1236, 0.1295, 0.1373, 0.1497, 0.1747],
1601
+ [0.122, 0.1278, 0.1356, 0.1478, 0.172],
1602
+ [0.1203, 0.126, 0.1336, 0.1454, 0.1695],
1603
+ [0.1188, 0.1245, 0.132, 0.1436, 0.1677],
1604
+ [0.1174, 0.123, 0.1303, 0.1421, 0.1653],
1605
+ [0.1159, 0.1214, 0.1288, 0.1402, 0.1634],
1606
+ [0.1147, 0.1204, 0.1275, 0.1386, 0.1616],
1607
+ [0.1131, 0.1186, 0.1258, 0.1373, 0.1599],
1608
+ [0.1119, 0.1172, 0.1244, 0.1353, 0.1573],
1609
+ [0.1106, 0.1159, 0.1228, 0.1339, 0.1556],
1610
+ [0.1095, 0.1148, 0.1216, 0.1322, 0.1542],
1611
+ [0.1083, 0.1134, 0.1204, 0.1309, 0.1525],
1612
+ [0.1071, 0.1123, 0.1189, 0.1293, 0.1512],
1613
+ [0.1062, 0.1113, 0.118, 0.1282, 0.1499],
1614
+ [0.1047, 0.1098, 0.1165, 0.1269, 0.1476],
1615
+ [0.104, 0.1089, 0.1153, 0.1256, 0.1463],
1616
+ [0.103, 0.1079, 0.1142, 0.1246, 0.1457]
1617
+ ];
1618
+ if (N > 50) {
1619
+ pSelections = [0.741 / N, 0.775 / N, 0.819 / N, 0.895 / N, 1.035 / N];
1620
+ } else
1621
+ [
1622
+ pSelections = pChart[N - 1]
1623
+ ];
1624
+ let pValues = [0.2, 0.15, 0.1, 0.05, 0.01];
1625
+ let selectedValue = 0;
1626
+ pSelections.forEach((crit) => {
1627
+ if (KS >= crit) {
1628
+ selectedValue += 1;
1629
+ }
1630
+ });
1631
+ if (selectedValue === 0) {
1632
+ return 1;
1633
+ }
1634
+ ;
1635
+ if (selectedValue === 5) {
1636
+ return 0;
1637
+ }
1638
+ ;
1639
+ let p1 = pValues[selectedValue - 1];
1640
+ let p2 = pValues[selectedValue];
1641
+ let KS1 = pSelections[selectedValue - 1];
1642
+ let KS2 = pSelections[selectedValue];
1643
+ return p1 + (p2 - p1) / (KS2 - KS1) * (KS - KS1);
1644
+ }
1645
+ },
1646
+ RyanJoiner: {
1647
+ Test(data) {
1648
+ let N = data.length;
1649
+ let Z = [];
1650
+ let Y = [...data].sort(function(a, b) {
1651
+ return a - b;
1652
+ });
1653
+ let numSum = 0;
1654
+ let denSum = 0;
1655
+ let mean = Mean(data);
1656
+ let variance = Math.pow(StDev.S(data), 2);
1657
+ for (let i = 0; i < N; i++) {
1658
+ Z[i] = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
1659
+ numSum += Z[i] * (Y[i] - mean);
1660
+ denSum += Math.pow(Z[i], 2);
1661
+ }
1662
+ let RJ = numSum / Math.sqrt(variance * (N - 1) * denSum);
1663
+ return {
1664
+ RJ,
1665
+ critical: Distributions.Normal.RyanJoiner.Critical(data)
1666
+ };
1667
+ },
1668
+ Critical(data) {
1669
+ let N = data.length;
1670
+ return 1.0063 - 0.6118 / N + 1.3505 / Math.pow(N, 2) - 0.1288 / Math.pow(N, 0.5);
1671
+ }
1672
+ },
1598
1673
  ShapiroWilk: {
1599
1674
  Test(data, expanded) {
1600
1675
  let N = data.length;
@@ -1605,9 +1680,6 @@ var Distributions = {
1605
1680
  sorted.forEach((s) => {
1606
1681
  SS += Math.pow(s - mean, 2);
1607
1682
  });
1608
- if (N < 12) {
1609
- expanded = false;
1610
- }
1611
1683
  if (expanded || N > 50) {
1612
1684
  let u = 1 / Math.sqrt(N);
1613
1685
  let m_i = [];
@@ -1736,6 +1808,19 @@ var Distributions = {
1736
1808
  ],
1737
1809
  pValues: [0.01, 0.02, 0.05, 0.1, 0.5, 0.9, 0.95, 0.98, 0.99]
1738
1810
  }
1811
+ },
1812
+ Skewness(data) {
1813
+ let N = data.length;
1814
+ let mean = Mean(data);
1815
+ let numsum = 0;
1816
+ let densum = 0;
1817
+ for (let i = 0; i < N; i++) {
1818
+ let inner = data[i] - mean;
1819
+ numsum += Math.pow(inner, 3);
1820
+ }
1821
+ let num = numsum * N;
1822
+ let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data), 3);
1823
+ return num / den;
1739
1824
  }
1740
1825
  },
1741
1826
  T: {
package/dist/index.mjs CHANGED
@@ -1415,43 +1415,6 @@ var Distributions = {
1415
1415
  pdf(x, location = 0, scale = 1) {
1416
1416
  return 1 / (scale * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((x - location) / scale, 2));
1417
1417
  },
1418
- RyanJoiner: {
1419
- Test(data) {
1420
- let N = data.length;
1421
- let Z = [];
1422
- let Y = [...data].sort(function(a, b) {
1423
- return a - b;
1424
- });
1425
- let numSum = 0;
1426
- let denSum = 0;
1427
- let mean = Mean(data);
1428
- let variance = Math.pow(StDev.S(data), 2);
1429
- for (let i = 0; i < N; i++) {
1430
- Z[i] = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
1431
- numSum += Z[i] * (Y[i] - mean);
1432
- denSum += Math.pow(Z[i], 2);
1433
- }
1434
- let RJ = numSum / Math.sqrt(variance * (N - 1) * denSum);
1435
- return {
1436
- RJ,
1437
- critical: Distributions.Normal.RyanJoiner.Critical(data)
1438
- };
1439
- },
1440
- Critical(data) {
1441
- let N = data.length;
1442
- return 1.0063 - 0.6118 / N + 1.3505 / Math.pow(N, 2) - 0.1288 / Math.pow(N, 0.5);
1443
- }
1444
- },
1445
- JarqueBera(data) {
1446
- let N = data.length;
1447
- let S = Distributions.Normal.Skewness(data);
1448
- let K = Distributions.Normal.Kurtosis(data);
1449
- let JB = N / 6 * (Math.pow(S, 2) + 0.25 * Math.pow(K, 2));
1450
- return {
1451
- JB,
1452
- p: Distributions.ChiSq.RightTail(JB, 2)
1453
- };
1454
- },
1455
1418
  Chebyshev(data, spec) {
1456
1419
  let mean = Mean(data);
1457
1420
  let standard_deviation = StDev.S(data);
@@ -1465,18 +1428,15 @@ var Distributions = {
1465
1428
  }
1466
1429
  return min / (10 * standard_deviation);
1467
1430
  },
1468
- Skewness(data) {
1431
+ JarqueBera(data) {
1469
1432
  let N = data.length;
1470
- let mean = Mean(data);
1471
- let numsum = 0;
1472
- let densum = 0;
1473
- for (let i = 0; i < N; i++) {
1474
- let inner = data[i] - mean;
1475
- numsum += Math.pow(inner, 3);
1476
- }
1477
- let num = numsum * N;
1478
- let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data), 3);
1479
- return num / den;
1433
+ let S = Distributions.Normal.Skewness(data);
1434
+ let K = Distributions.Normal.Kurtosis(data);
1435
+ let JB = N / 6 * (Math.pow(S, 2) + 0.25 * Math.pow(K, 2));
1436
+ return {
1437
+ JB,
1438
+ p: Distributions.ChiSq.RightTail(JB, 2)
1439
+ };
1480
1440
  },
1481
1441
  Kurtosis(data) {
1482
1442
  let N = data.length;
@@ -1509,6 +1469,121 @@ var Distributions = {
1509
1469
  p
1510
1470
  };
1511
1471
  },
1472
+ Lilliefors: {
1473
+ Test(data) {
1474
+ let KS = Distributions.Normal.KolmogorovSmirnov(data).KS;
1475
+ let p = Distributions.Normal.Lilliefors.p(KS, data.length);
1476
+ return {
1477
+ KS,
1478
+ p
1479
+ };
1480
+ },
1481
+ p(KS, N) {
1482
+ let pSelections = [];
1483
+ let pChart = [
1484
+ [0.3027, 0.3216, 0.3456, 0.3754, 0.4129],
1485
+ [0.2893, 0.3027, 0.3188, 0.3427, 0.3959],
1486
+ [0.2694, 0.2816, 0.2982, 0.3245, 0.3728],
1487
+ [0.2521, 0.2641, 0.2802, 0.3041, 0.3504],
1488
+ [0.2387, 0.2502, 0.2649, 0.2875, 0.3331],
1489
+ [0.2273, 0.2382, 0.2522, 0.2744, 0.3162],
1490
+ [0.2171, 0.2273, 0.241, 0.2616, 0.3037],
1491
+ [0.208, 0.2179, 0.2306, 0.2506, 0.2905],
1492
+ [0.2004, 0.2101, 0.2228, 0.2426, 0.2812],
1493
+ [0.1932, 0.2025, 0.2147, 0.2337, 0.2714],
1494
+ [0.1869, 0.1959, 0.2077, 0.2257, 0.2627],
1495
+ [0.1811, 0.1899, 0.2016, 0.2196, 0.2545],
1496
+ [0.1758, 0.1843, 0.1956, 0.2128, 0.2477],
1497
+ [0.1711, 0.1794, 0.1902, 0.2071, 0.2408],
1498
+ [0.1666, 0.1747, 0.1852, 0.2018, 0.2345],
1499
+ [0.1624, 0.17, 0.1803, 0.1965, 0.2285],
1500
+ [0.1589, 0.1666, 0.1764, 0.192, 0.2226],
1501
+ [0.1553, 0.1629, 0.1726, 0.1881, 0.219],
1502
+ [0.1517, 0.1592, 0.169, 0.184, 0.2141],
1503
+ [0.1484, 0.1555, 0.165, 0.1798, 0.209],
1504
+ [0.1458, 0.1527, 0.1619, 0.1766, 0.2053],
1505
+ [0.1429, 0.1498, 0.1589, 0.1726, 0.201],
1506
+ [0.1406, 0.1472, 0.1562, 0.1699, 0.1985],
1507
+ [0.1381, 0.1448, 0.1533, 0.1665, 0.1941],
1508
+ [0.1358, 0.1423, 0.1509, 0.1641, 0.1911],
1509
+ [0.1334, 0.1398, 0.1483, 0.1614, 0.1886],
1510
+ [0.1315, 0.1378, 0.146, 0.159, 0.1848],
1511
+ [0.1291, 0.1353, 0.1432, 0.1559, 0.182],
1512
+ [0.1274, 0.1336, 0.1415, 0.1542, 0.1798],
1513
+ [0.1254, 0.1314, 0.1392, 0.1518, 0.177],
1514
+ [0.1236, 0.1295, 0.1373, 0.1497, 0.1747],
1515
+ [0.122, 0.1278, 0.1356, 0.1478, 0.172],
1516
+ [0.1203, 0.126, 0.1336, 0.1454, 0.1695],
1517
+ [0.1188, 0.1245, 0.132, 0.1436, 0.1677],
1518
+ [0.1174, 0.123, 0.1303, 0.1421, 0.1653],
1519
+ [0.1159, 0.1214, 0.1288, 0.1402, 0.1634],
1520
+ [0.1147, 0.1204, 0.1275, 0.1386, 0.1616],
1521
+ [0.1131, 0.1186, 0.1258, 0.1373, 0.1599],
1522
+ [0.1119, 0.1172, 0.1244, 0.1353, 0.1573],
1523
+ [0.1106, 0.1159, 0.1228, 0.1339, 0.1556],
1524
+ [0.1095, 0.1148, 0.1216, 0.1322, 0.1542],
1525
+ [0.1083, 0.1134, 0.1204, 0.1309, 0.1525],
1526
+ [0.1071, 0.1123, 0.1189, 0.1293, 0.1512],
1527
+ [0.1062, 0.1113, 0.118, 0.1282, 0.1499],
1528
+ [0.1047, 0.1098, 0.1165, 0.1269, 0.1476],
1529
+ [0.104, 0.1089, 0.1153, 0.1256, 0.1463],
1530
+ [0.103, 0.1079, 0.1142, 0.1246, 0.1457]
1531
+ ];
1532
+ if (N > 50) {
1533
+ pSelections = [0.741 / N, 0.775 / N, 0.819 / N, 0.895 / N, 1.035 / N];
1534
+ } else
1535
+ [
1536
+ pSelections = pChart[N - 1]
1537
+ ];
1538
+ let pValues = [0.2, 0.15, 0.1, 0.05, 0.01];
1539
+ let selectedValue = 0;
1540
+ pSelections.forEach((crit) => {
1541
+ if (KS >= crit) {
1542
+ selectedValue += 1;
1543
+ }
1544
+ });
1545
+ if (selectedValue === 0) {
1546
+ return 1;
1547
+ }
1548
+ ;
1549
+ if (selectedValue === 5) {
1550
+ return 0;
1551
+ }
1552
+ ;
1553
+ let p1 = pValues[selectedValue - 1];
1554
+ let p2 = pValues[selectedValue];
1555
+ let KS1 = pSelections[selectedValue - 1];
1556
+ let KS2 = pSelections[selectedValue];
1557
+ return p1 + (p2 - p1) / (KS2 - KS1) * (KS - KS1);
1558
+ }
1559
+ },
1560
+ RyanJoiner: {
1561
+ Test(data) {
1562
+ let N = data.length;
1563
+ let Z = [];
1564
+ let Y = [...data].sort(function(a, b) {
1565
+ return a - b;
1566
+ });
1567
+ let numSum = 0;
1568
+ let denSum = 0;
1569
+ let mean = Mean(data);
1570
+ let variance = Math.pow(StDev.S(data), 2);
1571
+ for (let i = 0; i < N; i++) {
1572
+ Z[i] = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
1573
+ numSum += Z[i] * (Y[i] - mean);
1574
+ denSum += Math.pow(Z[i], 2);
1575
+ }
1576
+ let RJ = numSum / Math.sqrt(variance * (N - 1) * denSum);
1577
+ return {
1578
+ RJ,
1579
+ critical: Distributions.Normal.RyanJoiner.Critical(data)
1580
+ };
1581
+ },
1582
+ Critical(data) {
1583
+ let N = data.length;
1584
+ return 1.0063 - 0.6118 / N + 1.3505 / Math.pow(N, 2) - 0.1288 / Math.pow(N, 0.5);
1585
+ }
1586
+ },
1512
1587
  ShapiroWilk: {
1513
1588
  Test(data, expanded) {
1514
1589
  let N = data.length;
@@ -1519,9 +1594,6 @@ var Distributions = {
1519
1594
  sorted.forEach((s) => {
1520
1595
  SS += Math.pow(s - mean, 2);
1521
1596
  });
1522
- if (N < 12) {
1523
- expanded = false;
1524
- }
1525
1597
  if (expanded || N > 50) {
1526
1598
  let u = 1 / Math.sqrt(N);
1527
1599
  let m_i = [];
@@ -1650,6 +1722,19 @@ var Distributions = {
1650
1722
  ],
1651
1723
  pValues: [0.01, 0.02, 0.05, 0.1, 0.5, 0.9, 0.95, 0.98, 0.99]
1652
1724
  }
1725
+ },
1726
+ Skewness(data) {
1727
+ let N = data.length;
1728
+ let mean = Mean(data);
1729
+ let numsum = 0;
1730
+ let densum = 0;
1731
+ for (let i = 0; i < N; i++) {
1732
+ let inner = data[i] - mean;
1733
+ numsum += Math.pow(inner, 3);
1734
+ }
1735
+ let num = numsum * N;
1736
+ let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data), 3);
1737
+ return num / den;
1653
1738
  }
1654
1739
  },
1655
1740
  T: {
package/index.ts CHANGED
@@ -1581,45 +1581,6 @@ export const Distributions = {
1581
1581
  pdf(x: number, location: number = 0, scale: number = 1) {
1582
1582
  return (1 / (scale * Math.sqrt(2 * Math.PI))) * Math.exp(-.5 * Math.pow((x - location) / scale, 2))
1583
1583
  },
1584
- RyanJoiner: {
1585
- Test(data: number[]){
1586
- let N = data.length;
1587
-
1588
- let Z: number[] = [];
1589
- let Y = [...data].sort(function (a, b){return a-b});
1590
- let numSum = 0;
1591
- let denSum = 0;
1592
- let mean = Mean(data);
1593
- let variance = Math.pow(StDev.S(data), 2);
1594
-
1595
- for(let i = 0; i < N; i++){
1596
- Z[i] = Distributions.Normal.inv((i + 1 - 0.375)/ (N + 0.25))
1597
- numSum += Z[i]*(Y[i]-mean);
1598
- denSum += Math.pow(Z[i], 2);
1599
- }
1600
-
1601
- let RJ = numSum/Math.sqrt(variance*(N-1)*denSum);
1602
- return {
1603
- RJ: RJ,
1604
- critical: Distributions.Normal.RyanJoiner.Critical(data)
1605
- }
1606
- },
1607
- Critical(data: number[]){
1608
- let N = data.length;
1609
- return 1.0063-(0.6118/N)+(1.3505/Math.pow(N, 2))-(.1288/Math.pow(N, .5))
1610
- }
1611
- },
1612
- JarqueBera(data: number[]){
1613
- let N = data.length;
1614
- let S = Distributions.Normal.Skewness(data);
1615
- let K = Distributions.Normal.Kurtosis(data);
1616
-
1617
- let JB = (N/6)*(Math.pow(S, 2) + .25 * Math.pow(K, 2));
1618
- return {
1619
- JB: JB,
1620
- p: Distributions.ChiSq.RightTail(JB, 2)
1621
- }
1622
- },
1623
1584
  Chebyshev(data: number[], spec: Specification){
1624
1585
  let mean = Mean(data);
1625
1586
  let standard_deviation =StDev.S(data);
@@ -1633,19 +1594,16 @@ export const Distributions = {
1633
1594
  }
1634
1595
  return min/(10*standard_deviation);
1635
1596
  },
1636
- Skewness(data){
1637
- // SRC: https://www.omnicalculator.com/statistics/skewness#what-are-skewness-and-kurtosis
1597
+ JarqueBera(data: number[]){
1638
1598
  let N = data.length;
1639
- let mean = Mean(data);
1640
- let numsum = 0;
1641
- let densum = 0;
1642
- for(let i = 0; i < N; i++){
1643
- let inner = data[i] - mean;
1644
- numsum += Math.pow(inner, 3);
1599
+ let S = Distributions.Normal.Skewness(data);
1600
+ let K = Distributions.Normal.Kurtosis(data);
1601
+
1602
+ let JB = (N/6)*(Math.pow(S, 2) + .25 * Math.pow(K, 2));
1603
+ return {
1604
+ JB: JB,
1605
+ p: Distributions.ChiSq.RightTail(JB, 2)
1645
1606
  }
1646
- let num = numsum * N;
1647
- let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data),3)
1648
- return num/den;
1649
1607
  },
1650
1608
  Kurtosis(data){
1651
1609
  // SRC: https://www.omnicalculator.com/statistics/skewness#what-are-skewness-and-kurtosis
@@ -1680,6 +1638,115 @@ export const Distributions = {
1680
1638
  p: p
1681
1639
  };
1682
1640
  },
1641
+ Lilliefors:{
1642
+ Test(data: number[]){
1643
+ let KS = Distributions.Normal.KolmogorovSmirnov(data).KS;
1644
+ let p = Distributions.Normal.Lilliefors.p(KS, data.length);
1645
+ return {
1646
+ KS: KS,
1647
+ p: p
1648
+ }
1649
+ },
1650
+ p(KS: number, N: number){
1651
+ let pSelections: number[] = [];
1652
+ let pChart = [
1653
+ [0.3027,0.3216,0.3456,0.3754,0.4129],
1654
+ [0.2893,0.3027,0.3188,0.3427,0.3959],
1655
+ [0.2694,0.2816,0.2982,0.3245,0.3728],
1656
+ [0.2521,0.2641,0.2802,0.3041,0.3504],
1657
+ [0.2387,0.2502,0.2649,0.2875,0.3331],
1658
+ [0.2273,0.2382,0.2522,0.2744,0.3162],
1659
+ [0.2171,0.2273,0.241,0.2616,0.3037],
1660
+ [0.208,0.2179,0.2306,0.2506,0.2905],
1661
+ [0.2004,0.2101,0.2228,0.2426,0.2812],
1662
+ [0.1932,0.2025,0.2147,0.2337,0.2714],
1663
+ [0.1869,0.1959,0.2077,0.2257,0.2627],
1664
+ [0.1811,0.1899,0.2016,0.2196,0.2545],
1665
+ [0.1758,0.1843,0.1956,0.2128,0.2477],
1666
+ [0.1711,0.1794,0.1902,0.2071,0.2408],
1667
+ [0.1666,0.1747,0.1852,0.2018,0.2345],
1668
+ [0.1624,0.17,0.1803,0.1965,0.2285],
1669
+ [0.1589,0.1666,0.1764,0.192,0.2226],
1670
+ [0.1553,0.1629,0.1726,0.1881,0.219],
1671
+ [0.1517,0.1592,0.169,0.184,0.2141],
1672
+ [0.1484,0.1555,0.165,0.1798,0.209],
1673
+ [0.1458,0.1527,0.1619,0.1766,0.2053],
1674
+ [0.1429,0.1498,0.1589,0.1726,0.201],
1675
+ [0.1406,0.1472,0.1562,0.1699,0.1985],
1676
+ [0.1381,0.1448,0.1533,0.1665,0.1941],
1677
+ [0.1358,0.1423,0.1509,0.1641,0.1911],
1678
+ [0.1334,0.1398,0.1483,0.1614,0.1886],
1679
+ [0.1315,0.1378,0.146,0.159,0.1848],
1680
+ [0.1291,0.1353,0.1432,0.1559,0.182],
1681
+ [0.1274,0.1336,0.1415,0.1542,0.1798],
1682
+ [0.1254,0.1314,0.1392,0.1518,0.177],
1683
+ [0.1236,0.1295,0.1373,0.1497,0.1747],
1684
+ [0.122,0.1278,0.1356,0.1478,0.172],
1685
+ [0.1203,0.126,0.1336,0.1454,0.1695],
1686
+ [0.1188,0.1245,0.132,0.1436,0.1677],
1687
+ [0.1174,0.123,0.1303,0.1421,0.1653],
1688
+ [0.1159,0.1214,0.1288,0.1402,0.1634],
1689
+ [0.1147,0.1204,0.1275,0.1386,0.1616],
1690
+ [0.1131,0.1186,0.1258,0.1373,0.1599],
1691
+ [0.1119,0.1172,0.1244,0.1353,0.1573],
1692
+ [0.1106,0.1159,0.1228,0.1339,0.1556],
1693
+ [0.1095,0.1148,0.1216,0.1322,0.1542],
1694
+ [0.1083,0.1134,0.1204,0.1309,0.1525],
1695
+ [0.1071,0.1123,0.1189,0.1293,0.1512],
1696
+ [0.1062,0.1113,0.118,0.1282,0.1499],
1697
+ [0.1047,0.1098,0.1165,0.1269,0.1476],
1698
+ [0.104,0.1089,0.1153,0.1256,0.1463],
1699
+ [0.103,0.1079,0.1142,0.1246,0.1457],
1700
+ ]
1701
+ if(N > 50){
1702
+ pSelections = [.741/N, .775/N, .819/N, .895/N, 1.035/N]
1703
+ }else[
1704
+ pSelections = pChart[N-1]
1705
+ ]
1706
+ let pValues = [.20,.15,.10,.05,.01];
1707
+ let selectedValue = 0;
1708
+ pSelections.forEach(crit => {
1709
+ if(KS >= crit){
1710
+ selectedValue += 1
1711
+ }
1712
+ })
1713
+ if(selectedValue === 0){return 1};
1714
+ if(selectedValue === 5){return 0};
1715
+ let p1 = pValues[selectedValue-1];
1716
+ let p2 = pValues[selectedValue];
1717
+ let KS1 = pSelections[selectedValue-1];
1718
+ let KS2 = pSelections[selectedValue];
1719
+ return p1 + (p2-p1)/(KS2-KS1)*(KS-KS1);
1720
+ }
1721
+ },
1722
+ RyanJoiner: {
1723
+ Test(data: number[]){
1724
+ let N = data.length;
1725
+
1726
+ let Z: number[] = [];
1727
+ let Y = [...data].sort(function (a, b){return a-b});
1728
+ let numSum = 0;
1729
+ let denSum = 0;
1730
+ let mean = Mean(data);
1731
+ let variance = Math.pow(StDev.S(data), 2);
1732
+
1733
+ for(let i = 0; i < N; i++){
1734
+ Z[i] = Distributions.Normal.inv((i + 1 - 0.375)/ (N + 0.25))
1735
+ numSum += Z[i]*(Y[i]-mean);
1736
+ denSum += Math.pow(Z[i], 2);
1737
+ }
1738
+
1739
+ let RJ = numSum/Math.sqrt(variance*(N-1)*denSum);
1740
+ return {
1741
+ RJ: RJ,
1742
+ critical: Distributions.Normal.RyanJoiner.Critical(data)
1743
+ }
1744
+ },
1745
+ Critical(data: number[]){
1746
+ let N = data.length;
1747
+ return 1.0063-(0.6118/N)+(1.3505/Math.pow(N, 2))-(.1288/Math.pow(N, .5))
1748
+ }
1749
+ },
1683
1750
  ShapiroWilk:{
1684
1751
  Test(data: number[], expanded?: boolean){
1685
1752
  let N = data.length;
@@ -1692,10 +1759,6 @@ export const Distributions = {
1692
1759
  sorted.forEach(s => {
1693
1760
  SS += Math.pow(s - mean, 2);
1694
1761
  })
1695
-
1696
- if(N < 12){
1697
- expanded = false;
1698
- }
1699
1762
  // ShapiroWilk Royston Expanded Approximation
1700
1763
  if(expanded || N > 50){
1701
1764
  let u = 1/Math.sqrt(N);
@@ -1829,7 +1892,21 @@ export const Distributions = {
1829
1892
  [0.93,0.938,0.947,0.955,0.974,0.985,0.988,0.99,0.991,]],
1830
1893
  pValues: [0.01,0.02,0.05,0.1,0.5,0.9,0.95,0.98,0.99,]
1831
1894
  }
1832
- }
1895
+ },
1896
+ Skewness(data){
1897
+ // SRC: https://www.omnicalculator.com/statistics/skewness#what-are-skewness-and-kurtosis
1898
+ let N = data.length;
1899
+ let mean = Mean(data);
1900
+ let numsum = 0;
1901
+ let densum = 0;
1902
+ for(let i = 0; i < N; i++){
1903
+ let inner = data[i] - mean;
1904
+ numsum += Math.pow(inner, 3);
1905
+ }
1906
+ let num = numsum * N;
1907
+ let den = (N - 2) * (N - 1) * Math.pow(StDev.S(data),3)
1908
+ return num/den;
1909
+ },
1833
1910
  },
1834
1911
  T: {
1835
1912
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qesuite",
3
- "version": "1.0.34",
3
+ "version": "1.0.35",
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
+ - Added Lilliefors test for normality