qesuite 1.0.32 → 1.0.34
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 +13 -9
- package/dist/index.d.ts +13 -9
- package/dist/index.js +286 -8
- package/dist/index.mjs +286 -7
- package/index.ts +341 -7
- package/package.json +1 -1
- package/versions/1_0_33.md +1 -0
- package/versions/1_0_34md +11 -0
package/dist/index.d.mts
CHANGED
|
@@ -611,6 +611,18 @@ declare const Distributions: {
|
|
|
611
611
|
KS: number;
|
|
612
612
|
p: any;
|
|
613
613
|
};
|
|
614
|
+
ShapiroWilk: {
|
|
615
|
+
Test(data: number[], expanded?: boolean): {
|
|
616
|
+
W: number;
|
|
617
|
+
p: number;
|
|
618
|
+
};
|
|
619
|
+
constants: number[][];
|
|
620
|
+
p(W: number, N: number): number;
|
|
621
|
+
pChart: {
|
|
622
|
+
wValues: number[][];
|
|
623
|
+
pValues: number[];
|
|
624
|
+
};
|
|
625
|
+
};
|
|
614
626
|
};
|
|
615
627
|
T: {
|
|
616
628
|
/**
|
|
@@ -895,14 +907,6 @@ declare function SerializeData(data: number[]): DataSet;
|
|
|
895
907
|
*/
|
|
896
908
|
declare function CreateScatterPlot(data: DataSet[], title?: string, chartSettings?: ChartSettings): HTMLCanvasElement;
|
|
897
909
|
/**
|
|
898
|
-
* Checks if data is out of control and marks out-of-control points
|
|
899
|
-
* @param data An array of data sets to check
|
|
900
|
-
* @param UCL Upper Control Limit
|
|
901
|
-
* @param LCL Lower Control Limit
|
|
902
|
-
* @param display Display settings for out-of-control points. DEFAULT: RED SQUARE
|
|
903
|
-
*/
|
|
904
|
-
declare function MarkOutOfControl(data: DataSet, UCL: number, LCL: number, display?: CanvasDrawSettings): void;
|
|
905
|
-
/**
|
|
906
910
|
* Create a histogram
|
|
907
911
|
* @param data An array of data sets to plot
|
|
908
912
|
* @param title Title to display on chart
|
|
@@ -1134,4 +1138,4 @@ declare function GRRByPartChart(data: GRRData): HTMLCanvasElement;
|
|
|
1134
1138
|
declare function GRRPartxOperatorChart(data: GRRData): HTMLCanvasElement;
|
|
1135
1139
|
declare function CompileGRRObject(operators: any, parts: any, measurements: any): GRRData;
|
|
1136
1140
|
|
|
1137
|
-
export { AnovaTableTwoWay, AverageMovingRange, AxisSettings, Beta, CanvasDrawSettings, Capability, Chart, ChartSettings, CompileGRRObject, CreateBoxandWhiskerGraph, CreateCapabilityHistogram, CreateCapabilityPlot, CreateCategoricalBarGraph, CreateContinuousBarGraph, CreateScatterPlot, CreateSplitGraph, CreateStackedChart, CreateSummaryChart, CustomGridline, DataCollection, DataSet, Distributions, ERF, EngFont, FixedPointIteration, G1, G1Graphs, GRR, GRRByPartChart, GRRData, GRRGraphs, GRROperator, GRRPartxOperatorChart, GRRReplication, GageEvaluation, Gamma, GetFunctionValues, GetHistogramDataset, GoodnessOfFit, IndividualDistributionIdentification, IndividualDistributionPlots, IndividualValuePlot, LastObservationsChart, Line, Margin,
|
|
1141
|
+
export { AnovaTableTwoWay, AverageMovingRange, AxisSettings, Beta, CanvasDrawSettings, Capability, Chart, ChartSettings, CompileGRRObject, CreateBoxandWhiskerGraph, CreateCapabilityHistogram, CreateCapabilityPlot, CreateCategoricalBarGraph, CreateContinuousBarGraph, CreateScatterPlot, CreateSplitGraph, CreateStackedChart, CreateSummaryChart, CustomGridline, DataCollection, DataSet, Distributions, ERF, EngFont, FixedPointIteration, G1, G1Graphs, GRR, GRRByPartChart, GRRData, GRRGraphs, GRROperator, GRRPartxOperatorChart, GRRReplication, GageEvaluation, Gamma, GetFunctionValues, GetHistogramDataset, GoodnessOfFit, IndividualDistributionIdentification, IndividualDistributionPlots, IndividualValuePlot, LastObservationsChart, Line, Margin, MaximumLikelihoodParameters, Mean, Median, MovingRange, MovingRangeChart, NewtonRaphson, ObjectToArray, ParameterizedCDF, Point, QQPlot, QQPlotChart, Rang, RoundTO, SerializeData, Specification, StDev, Sum, UnbiasingConstant, VarianceComponents };
|
package/dist/index.d.ts
CHANGED
|
@@ -611,6 +611,18 @@ declare const Distributions: {
|
|
|
611
611
|
KS: number;
|
|
612
612
|
p: any;
|
|
613
613
|
};
|
|
614
|
+
ShapiroWilk: {
|
|
615
|
+
Test(data: number[], expanded?: boolean): {
|
|
616
|
+
W: number;
|
|
617
|
+
p: number;
|
|
618
|
+
};
|
|
619
|
+
constants: number[][];
|
|
620
|
+
p(W: number, N: number): number;
|
|
621
|
+
pChart: {
|
|
622
|
+
wValues: number[][];
|
|
623
|
+
pValues: number[];
|
|
624
|
+
};
|
|
625
|
+
};
|
|
614
626
|
};
|
|
615
627
|
T: {
|
|
616
628
|
/**
|
|
@@ -895,14 +907,6 @@ declare function SerializeData(data: number[]): DataSet;
|
|
|
895
907
|
*/
|
|
896
908
|
declare function CreateScatterPlot(data: DataSet[], title?: string, chartSettings?: ChartSettings): HTMLCanvasElement;
|
|
897
909
|
/**
|
|
898
|
-
* Checks if data is out of control and marks out-of-control points
|
|
899
|
-
* @param data An array of data sets to check
|
|
900
|
-
* @param UCL Upper Control Limit
|
|
901
|
-
* @param LCL Lower Control Limit
|
|
902
|
-
* @param display Display settings for out-of-control points. DEFAULT: RED SQUARE
|
|
903
|
-
*/
|
|
904
|
-
declare function MarkOutOfControl(data: DataSet, UCL: number, LCL: number, display?: CanvasDrawSettings): void;
|
|
905
|
-
/**
|
|
906
910
|
* Create a histogram
|
|
907
911
|
* @param data An array of data sets to plot
|
|
908
912
|
* @param title Title to display on chart
|
|
@@ -1134,4 +1138,4 @@ declare function GRRByPartChart(data: GRRData): HTMLCanvasElement;
|
|
|
1134
1138
|
declare function GRRPartxOperatorChart(data: GRRData): HTMLCanvasElement;
|
|
1135
1139
|
declare function CompileGRRObject(operators: any, parts: any, measurements: any): GRRData;
|
|
1136
1140
|
|
|
1137
|
-
export { AnovaTableTwoWay, AverageMovingRange, AxisSettings, Beta, CanvasDrawSettings, Capability, Chart, ChartSettings, CompileGRRObject, CreateBoxandWhiskerGraph, CreateCapabilityHistogram, CreateCapabilityPlot, CreateCategoricalBarGraph, CreateContinuousBarGraph, CreateScatterPlot, CreateSplitGraph, CreateStackedChart, CreateSummaryChart, CustomGridline, DataCollection, DataSet, Distributions, ERF, EngFont, FixedPointIteration, G1, G1Graphs, GRR, GRRByPartChart, GRRData, GRRGraphs, GRROperator, GRRPartxOperatorChart, GRRReplication, GageEvaluation, Gamma, GetFunctionValues, GetHistogramDataset, GoodnessOfFit, IndividualDistributionIdentification, IndividualDistributionPlots, IndividualValuePlot, LastObservationsChart, Line, Margin,
|
|
1141
|
+
export { AnovaTableTwoWay, AverageMovingRange, AxisSettings, Beta, CanvasDrawSettings, Capability, Chart, ChartSettings, CompileGRRObject, CreateBoxandWhiskerGraph, CreateCapabilityHistogram, CreateCapabilityPlot, CreateCategoricalBarGraph, CreateContinuousBarGraph, CreateScatterPlot, CreateSplitGraph, CreateStackedChart, CreateSummaryChart, CustomGridline, DataCollection, DataSet, Distributions, ERF, EngFont, FixedPointIteration, G1, G1Graphs, GRR, GRRByPartChart, GRRData, GRRGraphs, GRROperator, GRRPartxOperatorChart, GRRReplication, GageEvaluation, Gamma, GetFunctionValues, GetHistogramDataset, GoodnessOfFit, IndividualDistributionIdentification, IndividualDistributionPlots, IndividualValuePlot, LastObservationsChart, Line, Margin, MaximumLikelihoodParameters, Mean, Median, MovingRange, MovingRangeChart, NewtonRaphson, ObjectToArray, ParameterizedCDF, Point, QQPlot, QQPlotChart, Rang, RoundTO, SerializeData, Specification, StDev, Sum, UnbiasingConstant, VarianceComponents };
|
package/dist/index.js
CHANGED
|
@@ -64,7 +64,6 @@ __export(QESuite_exports, {
|
|
|
64
64
|
LastObservationsChart: () => LastObservationsChart,
|
|
65
65
|
Line: () => Line,
|
|
66
66
|
Margin: () => Margin,
|
|
67
|
-
MarkOutOfControl: () => MarkOutOfControl,
|
|
68
67
|
MaximumLikelihoodParameters: () => MaximumLikelihoodParameters,
|
|
69
68
|
Mean: () => Mean,
|
|
70
69
|
Median: () => Median,
|
|
@@ -644,7 +643,7 @@ function IndividualValuePlot(data, title, historicalMean) {
|
|
|
644
643
|
chartSettings.axis.x.autoSize = false;
|
|
645
644
|
let dataset = SerializeData(data);
|
|
646
645
|
dataset.line.type = "straight";
|
|
647
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
646
|
+
MarkOutOfControl(dataset, UCL, LCL, centerline, std);
|
|
648
647
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
649
648
|
}
|
|
650
649
|
function MovingRangeChart(data, title, w = 2) {
|
|
@@ -673,7 +672,7 @@ function MovingRangeChart(data, title, w = 2) {
|
|
|
673
672
|
chartSettings.axis.x.autoSize = false;
|
|
674
673
|
let dataset = SerializeData(movingRange);
|
|
675
674
|
dataset.line.type = "straight";
|
|
676
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
675
|
+
MarkOutOfControl(dataset, UCL, LCL, void 0, void 0, void 0, [1]);
|
|
677
676
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
678
677
|
}
|
|
679
678
|
function LastObservationsChart(data, N, title) {
|
|
@@ -1585,7 +1584,7 @@ var Distributions = {
|
|
|
1585
1584
|
let dMinusArray = [];
|
|
1586
1585
|
let dPlusArray = [];
|
|
1587
1586
|
for (let i = 1; i <= N; i++) {
|
|
1588
|
-
let Z_i = this.cdf(
|
|
1587
|
+
let Z_i = this.cdf(sortedData[i - 1], mean, std);
|
|
1589
1588
|
dPlusArray.push(i / N - Z_i);
|
|
1590
1589
|
dMinusArray.push(Z_i - (i - 1) / N);
|
|
1591
1590
|
}
|
|
@@ -1595,6 +1594,148 @@ var Distributions = {
|
|
|
1595
1594
|
KS,
|
|
1596
1595
|
p
|
|
1597
1596
|
};
|
|
1597
|
+
},
|
|
1598
|
+
ShapiroWilk: {
|
|
1599
|
+
Test(data, expanded) {
|
|
1600
|
+
let N = data.length;
|
|
1601
|
+
let mean = Mean(data);
|
|
1602
|
+
let sorted = [...data].sort();
|
|
1603
|
+
let invSort = [...data].sort((a, b2) => b2 - a);
|
|
1604
|
+
let SS = 0;
|
|
1605
|
+
sorted.forEach((s) => {
|
|
1606
|
+
SS += Math.pow(s - mean, 2);
|
|
1607
|
+
});
|
|
1608
|
+
if (N < 12) {
|
|
1609
|
+
expanded = false;
|
|
1610
|
+
}
|
|
1611
|
+
if (expanded || N > 50) {
|
|
1612
|
+
let u = 1 / Math.sqrt(N);
|
|
1613
|
+
let m_i = [];
|
|
1614
|
+
let M = 0;
|
|
1615
|
+
for (let i = 0; i < N; i++) {
|
|
1616
|
+
let m = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
|
|
1617
|
+
m_i[i] = m;
|
|
1618
|
+
M += Math.pow(m, 2);
|
|
1619
|
+
}
|
|
1620
|
+
let a_i = [];
|
|
1621
|
+
a_i[N - 1] = -2.706056 * Math.pow(u, 5) + 4.434685 * Math.pow(u, 4) - 2.07119 * Math.pow(u, 3) - 0.147981 * Math.pow(u, 2) + 0.221157 * u + m_i[N - 1] / Math.sqrt(M);
|
|
1622
|
+
a_i[N - 2] = -3.582633 * Math.pow(u, 5) + 5.682633 * Math.pow(u, 4) - 1.752461 * Math.pow(u, 3) - 0.293762 * Math.pow(u, 2) + 0.042981 * u + m_i[N - 2] / Math.sqrt(M);
|
|
1623
|
+
a_i[0] = -1 * a_i[N - 1];
|
|
1624
|
+
a_i[1] = -1 * a_i[N - 2];
|
|
1625
|
+
let eps = (M - 2 * Math.pow(m_i[N - 1], 2) - 2 * Math.pow(m_i[N - 2], 2)) / (1 - 2 * Math.pow(a_i[N - 1], 2) - 2 * Math.pow(a_i[N - 2], 2));
|
|
1626
|
+
for (let i = 2; i < N - 2; i++) {
|
|
1627
|
+
a_i[i] = m_i[i] / Math.sqrt(eps);
|
|
1628
|
+
}
|
|
1629
|
+
let W2 = Math.pow(Correlate(a_i, sorted), 2);
|
|
1630
|
+
let p_mu = 38915e-7 * Math.pow(Math.log(N), 3) - 0.083751 * Math.pow(Math.log(N), 2) - 0.31082 * Math.log(N) - 1.5861;
|
|
1631
|
+
let p_sigma = Math.exp(30302e-7 * Math.pow(Math.log(N), 2) - 0.082676 * Math.log(N) - 0.4803);
|
|
1632
|
+
let z = (Math.log(1 - W2) - p_mu) / p_sigma;
|
|
1633
|
+
return {
|
|
1634
|
+
W: W2,
|
|
1635
|
+
p: 1 - Distributions.Normal.cdf(z, 0, 1)
|
|
1636
|
+
};
|
|
1637
|
+
}
|
|
1638
|
+
let b = 0;
|
|
1639
|
+
for (let i = 0; i < Math.floor(N / 2); i++) {
|
|
1640
|
+
let a = Distributions.Normal.ShapiroWilk.constants[i][N - 2];
|
|
1641
|
+
b += a * (invSort[i] - sorted[i]);
|
|
1642
|
+
}
|
|
1643
|
+
let W = Math.pow(b, 2) / SS;
|
|
1644
|
+
let p = Distributions.Normal.ShapiroWilk.p(W, N);
|
|
1645
|
+
return {
|
|
1646
|
+
W,
|
|
1647
|
+
p
|
|
1648
|
+
};
|
|
1649
|
+
},
|
|
1650
|
+
constants: [
|
|
1651
|
+
[0.7071, 0.7071, 0.6872, 0.6646, 0.6431, 0.6233, 0.6052, 0.5888, 0.5739, 0.5601, 0.5475, 0.5359, 0.5251, 0.515, 0.5056, 0.4968, 0.4886, 0.4808, 0.4734, 0.4643, 0.459, 0.4542, 0.4493, 0.445, 0.4407, 0.4366, 0.4328, 0.4291, 0.4254, 0.422, 0.4188, 0.4156, 0.4127, 0.4096, 0.4068, 0.404, 0.4015, 0.3989, 0.3964, 0.394, 0.3917, 0.3894, 0.3872, 0.385, 0.383, 0.3808, 0.3789, 0.377, 0.3751],
|
|
1652
|
+
[NaN, NaN, 0.1677, 0.2413, 0.2806, 0.3031, 0.3164, 0.3244, 0.3291, 0.3315, 0.3325, 0.3325, 0.3318, 0.3306, 0.329, 0.3273, 0.3253, 0.3232, 0.3211, 0.3185, 0.3156, 0.3126, 0.3098, 0.3069, 0.3043, 0.3018, 0.2992, 0.2968, 0.2944, 0.2921, 0.2898, 0.2876, 0.2854, 0.2834, 0.2813, 0.2794, 0.2774, 0.2755, 0.2737, 0.2719, 0.2701, 0.2684, 0.2667, 0.2651, 0.2635, 0.262, 0.2604, 0.2589, 0.2574],
|
|
1653
|
+
[NaN, NaN, NaN, NaN, 0.0875, 0.1401, 0.1743, 0.1976, 0.2141, 0.226, 0.2347, 0.2412, 0.246, 0.2495, 0.2521, 0.254, 0.2553, 0.2561, 0.2565, 0.2578, 0.2571, 0.2563, 0.2554, 0.2543, 0.2533, 0.2522, 0.251, 0.2499, 0.2487, 0.2475, 0.2463, 0.2451, 0.2439, 0.2427, 0.2415, 0.2403, 0.2391, 0.238, 0.2368, 0.2357, 0.2345, 0.2334, 0.2323, 0.2313, 0.2302, 0.2291, 0.2281, 0.2271, 0.226],
|
|
1654
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, 0.0561, 0.0947, 0.1224, 0.1429, 0.1586, 0.1707, 0.1802, 0.1878, 0.1939, 0.1988, 0.2027, 0.2059, 0.2085, 0.2119, 0.2131, 0.2139, 0.2145, 0.2148, 0.2151, 0.2152, 0.2151, 0.215, 0.2148, 0.2145, 0.2141, 0.2137, 0.2132, 0.2127, 0.2121, 0.2116, 0.211, 0.2104, 0.2098, 0.2091, 0.2085, 0.2078, 0.2072, 0.2065, 0.2058, 0.2052, 0.2045, 0.2038, 0.2032],
|
|
1655
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0399, 0.0695, 0.0922, 0.1099, 0.124, 0.1353, 0.1447, 0.1524, 0.1587, 0.1641, 0.1686, 0.1736, 0.1764, 0.1787, 0.1807, 0.1822, 0.1836, 0.1848, 0.1857, 0.1864, 0.187, 0.1874, 0.1878, 0.188, 0.1882, 0.1883, 0.1883, 0.1883, 0.1881, 0.188, 0.1878, 0.1876, 0.1874, 0.1871, 0.1868, 0.1865, 0.1862, 0.1859, 0.1855, 0.1851, 0.1847],
|
|
1656
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0303, 0.0539, 0.0727, 0.088, 0.1005, 0.1109, 0.1197, 0.1271, 0.1334, 0.1399, 0.1443, 0.148, 0.1512, 0.1539, 0.1563, 0.1584, 0.1601, 0.1616, 0.163, 0.1641, 0.1651, 0.166, 0.1667, 0.1673, 0.1678, 0.1683, 0.1686, 0.1689, 0.1691, 0.1693, 0.1694, 0.1695, 0.1695, 0.1695, 0.1695, 0.1695, 0.1693, 0.1692, 0.1691],
|
|
1657
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.024, 0.0433, 0.0593, 0.0725, 0.0837, 0.0932, 0.1013, 0.1092, 0.115, 0.1201, 0.1245, 0.1283, 0.1316, 0.1346, 0.1372, 0.1395, 0.1415, 0.1433, 0.1449, 0.1463, 0.1475, 0.1487, 0.1496, 0.1505, 0.1513, 0.152, 0.1526, 0.1531, 0.1535, 0.1539, 0.1542, 0.1545, 0.1548, 0.155, 0.1551, 0.1553, 0.1554],
|
|
1658
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0196, 0.0359, 0.0496, 0.0612, 0.0711, 0.0804, 0.0878, 0.0941, 0.0997, 0.1046, 0.1089, 0.1128, 0.1162, 0.1192, 0.1219, 0.1243, 0.1265, 0.1284, 0.1301, 0.1317, 0.1331, 0.1344, 0.1356, 0.1366, 0.1376, 0.1384, 0.1392, 0.1398, 0.1405, 0.141, 0.1415, 0.142, 0.1423, 0.1427, 0.143],
|
|
1659
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0163, 0.0303, 0.0422, 0.053, 0.0618, 0.0696, 0.0764, 0.0823, 0.0876, 0.0923, 0.0965, 0.1002, 0.1036, 0.1066, 0.1093, 0.1118, 0.114, 0.116, 0.1179, 0.1196, 0.1211, 0.1225, 0.1237, 0.1249, 0.1259, 0.1269, 0.1278, 0.1286, 0.1293, 0.13, 0.1306, 0.1312, 0.1317],
|
|
1660
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.014, 0.0263, 0.0368, 0.0459, 0.0539, 0.061, 0.0672, 0.0728, 0.0778, 0.0822, 0.0862, 0.0899, 0.0931, 0.0961, 0.0988, 0.1013, 0.1036, 0.1056, 0.1075, 0.1092, 0.1108, 0.1123, 0.1136, 0.1149, 0.116, 0.117, 0.118, 0.1189, 0.1197, 0.1205, 0.1212],
|
|
1661
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0122, 0.0228, 0.0321, 0.0403, 0.0476, 0.054, 0.0598, 0.065, 0.0697, 0.0739, 0.0777, 0.0812, 0.0844, 0.0873, 0.09, 0.0924, 0.0947, 0.0967, 0.0986, 0.1004, 0.102, 0.1035, 0.1049, 0.1062, 0.1073, 0.1085, 0.1095, 0.1105, 0.1113],
|
|
1662
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 0.0107, 0.02, 0.0284, 0.0358, 0.0424, 0.0483, 0.0537, 0.0585, 0.0629, 0.0669, 0.0706, 0.0739, 0.077, 0.0798, 0.0824, 0.0848, 0.087, 0.0891, 0.0909, 0.0927, 0.0943, 0.0959, 0.0972, 0.0986, 0.0998, 0.101, 0.102],
|
|
1663
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 94e-4, 0.0178, 0.0253, 0.032, 0.0381, 0.0435, 0.0485, 0.053, 0.0572, 0.061, 0.0645, 0.0677, 0.0706, 0.0733, 0.0759, 0.0782, 0.0804, 0.0824, 0.0842, 0.086, 0.0876, 0.0892, 0.0906, 0.0919, 0.0932],
|
|
1664
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 84e-4, 0.0159, 0.0227, 0.0289, 0.0344, 0.0395, 0.0441, 0.0484, 0.0523, 0.0559, 0.0592, 0.0622, 0.0651, 0.0677, 0.0701, 0.0724, 0.0745, 0.0765, 0.0783, 0.0801, 0.0817, 0.0832, 0.0846],
|
|
1665
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 76e-4, 0.0144, 0.0206, 0.0262, 0.0314, 0.0361, 0.0404, 0.0444, 0.0481, 0.0515, 0.0546, 0.0575, 0.0602, 0.0628, 0.0651, 0.0673, 0.0694, 0.0713, 0.0731, 0.0748, 0.0764],
|
|
1666
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 68e-4, 0.0131, 0.0187, 0.0239, 0.0287, 0.0331, 0.0372, 0.0409, 0.0444, 0.0476, 0.0506, 0.0534, 0.056, 0.0584, 0.0607, 0.0628, 0.0648, 0.0667, 0.0685],
|
|
1667
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 62e-4, 0.0119, 0.0172, 0.022, 0.0264, 0.0305, 0.0343, 0.0379, 0.0411, 0.0442, 0.0471, 0.0497, 0.0522, 0.0546, 0.0568, 0.0588, 0.0608],
|
|
1668
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 57e-4, 0.011, 0.0158, 0.0203, 0.0244, 0.0283, 0.0318, 0.0352, 0.0383, 0.0412, 0.0439, 0.0465, 0.0489, 0.0511, 0.0532],
|
|
1669
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 53e-4, 0.0101, 0.0146, 0.0188, 0.0227, 0.0263, 0.0296, 0.0328, 0.0357, 0.0385, 0.0411, 0.0436, 0.0459],
|
|
1670
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 49e-4, 94e-4, 0.0136, 0.0175, 0.0211, 0.0245, 0.0277, 0.0307, 0.0335, 0.0361, 0.0386],
|
|
1671
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 45e-4, 87e-4, 0.0126, 0.0163, 0.0197, 0.0229, 0.0259, 0.0288, 0.0314],
|
|
1672
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 42e-4, 81e-4, 0.0118, 0.0153, 0.0185, 0.0215, 0.0244],
|
|
1673
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 39e-4, 76e-4, 0.0111, 0.0143, 0.0174],
|
|
1674
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 37e-4, 71e-4, 0.0104],
|
|
1675
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 35e-4]
|
|
1676
|
+
],
|
|
1677
|
+
p(W, N) {
|
|
1678
|
+
let wArray = Distributions.Normal.ShapiroWilk.pChart.wValues[N - 3];
|
|
1679
|
+
let inflection = wArray.findIndex((w) => W <= w);
|
|
1680
|
+
let w1 = wArray[inflection - 1];
|
|
1681
|
+
let w2 = wArray[inflection];
|
|
1682
|
+
let p1 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection - 1];
|
|
1683
|
+
let p2 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection];
|
|
1684
|
+
return p1 + (p2 - p1) / (w2 - w1) * (W - w1);
|
|
1685
|
+
},
|
|
1686
|
+
pChart: {
|
|
1687
|
+
wValues: [
|
|
1688
|
+
[0.753, 0.756, 0.767, 0.789, 0.959, 0.998, 0.999, 1, 1],
|
|
1689
|
+
[0.687, 0.707, 0.748, 0.792, 0.935, 0.987, 0.992, 0.996, 0.997],
|
|
1690
|
+
[0.686, 0.715, 0.762, 0.806, 0.927, 0.979, 0.986, 0.991, 0.993],
|
|
1691
|
+
[0.713, 0.743, 0.788, 0.826, 0.927, 0.974, 0.981, 0.986, 0.989],
|
|
1692
|
+
[0.73, 0.76, 0.803, 0.838, 0.928, 0.972, 0.979, 0.985, 0.988],
|
|
1693
|
+
[0.749, 0.778, 0.818, 0.851, 0.932, 0.972, 0.978, 0.984, 0.987],
|
|
1694
|
+
[0.764, 0.791, 0.829, 0.859, 0.935, 0.972, 0.978, 0.984, 0.986],
|
|
1695
|
+
[0.781, 0.806, 0.842, 0.869, 0.938, 0.972, 0.978, 0.983, 0.986],
|
|
1696
|
+
[0.792, 0.817, 0.85, 0.876, 0.94, 0.973, 0.979, 0.984, 0.986],
|
|
1697
|
+
[0.805, 0.828, 0.859, 0.883, 0.943, 0.973, 0.979, 0.984, 0.986],
|
|
1698
|
+
[0.814, 0.837, 0.866, 0.889, 0.945, 0.974, 0.979, 0.984, 0.986],
|
|
1699
|
+
[0.825, 0.846, 0.874, 0.895, 0.947, 0.975, 0.98, 0.984, 0.986],
|
|
1700
|
+
[0.835, 0.855, 0.881, 0.901, 0.95, 0.975, 0.98, 0.984, 0.987],
|
|
1701
|
+
[0.844, 0.863, 0.887, 0.906, 0.952, 0.976, 0.981, 0.985, 0.987],
|
|
1702
|
+
[0.851, 0.869, 0.892, 0.91, 0.954, 0.977, 0.981, 0.985, 0.987],
|
|
1703
|
+
[0.858, 0.874, 0.897, 0.914, 0.956, 0.978, 0.982, 0.986, 0.988],
|
|
1704
|
+
[0.863, 0.879, 0.901, 0.917, 0.957, 0.978, 0.982, 0.986, 0.988],
|
|
1705
|
+
[0.868, 0.884, 0.905, 0.92, 0.959, 0.979, 0.983, 0.986, 0.988],
|
|
1706
|
+
[0.873, 0.888, 0.908, 0.923, 0.96, 0.98, 0.983, 0.987, 0.989],
|
|
1707
|
+
[0.878, 0.892, 0.911, 0.926, 0.961, 0.98, 0.984, 0.987, 0.989],
|
|
1708
|
+
[0.881, 0.895, 0.914, 0.928, 0.962, 0.981, 0.984, 0.987, 0.989],
|
|
1709
|
+
[0.884, 0.898, 0.916, 0.93, 0.963, 0.981, 0.984, 0.987, 0.989],
|
|
1710
|
+
[0.888, 0.901, 0.918, 0.931, 0.964, 0.981, 0.985, 0.988, 0.989],
|
|
1711
|
+
[0.891, 0.904, 0.92, 0.933, 0.965, 0.982, 0.985, 0.988, 0.989],
|
|
1712
|
+
[0.894, 0.906, 0.923, 0.935, 0.965, 0.982, 0.985, 0.988, 0.99],
|
|
1713
|
+
[0.896, 0.908, 0.924, 0.936, 0.966, 0.982, 0.985, 0.988, 0.99],
|
|
1714
|
+
[0.898, 0.91, 0.926, 0.937, 0.966, 0.982, 0.985, 0.988, 0.99],
|
|
1715
|
+
[0.9, 0.912, 0.927, 0.939, 0.967, 0.983, 0.985, 0.988, 0.99],
|
|
1716
|
+
[0.902, 0.914, 0.929, 0.94, 0.967, 0.983, 0.986, 0.988, 0.99],
|
|
1717
|
+
[0.904, 0.915, 0.93, 0.941, 0.968, 0.983, 0.986, 0.988, 0.99],
|
|
1718
|
+
[0.906, 0.917, 0.931, 0.942, 0.968, 0.983, 0.986, 0.989, 0.99],
|
|
1719
|
+
[0.908, 0.919, 0.933, 0.943, 0.969, 0.983, 0.986, 0.989, 0.99],
|
|
1720
|
+
[0.91, 0.92, 0.934, 0.944, 0.969, 0.984, 0.986, 0.989, 0.99],
|
|
1721
|
+
[0.912, 0.922, 0.935, 0.945, 0.97, 0.984, 0.986, 0.989, 0.99],
|
|
1722
|
+
[0.914, 0.924, 0.936, 0.946, 0.97, 0.984, 0.987, 0.989, 0.99],
|
|
1723
|
+
[0.916, 0.925, 0.938, 0.947, 0.971, 0.984, 0.987, 0.989, 0.99],
|
|
1724
|
+
[0.917, 0.927, 0.939, 0.948, 0.971, 0.984, 0.987, 0.989, 0.991],
|
|
1725
|
+
[0.919, 0.928, 0.94, 0.949, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1726
|
+
[0.92, 0.929, 0.941, 0.95, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1727
|
+
[0.922, 0.93, 0.942, 0.951, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1728
|
+
[0.923, 0.932, 0.943, 0.951, 0.973, 0.985, 0.987, 0.99, 0.991],
|
|
1729
|
+
[0.924, 0.933, 0.944, 0.952, 0.973, 0.985, 0.987, 0.99, 0.991],
|
|
1730
|
+
[0.926, 0.934, 0.945, 0.953, 0.973, 0.985, 0.988, 0.99, 0.991],
|
|
1731
|
+
[0.927, 0.935, 0.945, 0.953, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1732
|
+
[0.928, 0.936, 0.946, 0.954, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1733
|
+
[0.929, 0.937, 0.947, 0.954, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1734
|
+
[0.929, 0.939, 0.947, 0.955, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1735
|
+
[0.93, 0.938, 0.947, 0.955, 0.974, 0.985, 0.988, 0.99, 0.991]
|
|
1736
|
+
],
|
|
1737
|
+
pValues: [0.01, 0.02, 0.05, 0.1, 0.5, 0.9, 0.95, 0.98, 0.99]
|
|
1738
|
+
}
|
|
1598
1739
|
}
|
|
1599
1740
|
},
|
|
1600
1741
|
T: {
|
|
@@ -2178,6 +2319,43 @@ var StDev = {
|
|
|
2178
2319
|
return averageMR / d2w;
|
|
2179
2320
|
}
|
|
2180
2321
|
};
|
|
2322
|
+
var Covariance = {
|
|
2323
|
+
/**
|
|
2324
|
+
* Calculates the population covariance of the arrays supplied.
|
|
2325
|
+
* @customfunction
|
|
2326
|
+
* @param xData The first array of numbers.
|
|
2327
|
+
* @param yData The second array of numbers.
|
|
2328
|
+
*/
|
|
2329
|
+
P(xData, yData) {
|
|
2330
|
+
let xBar = Mean(xData);
|
|
2331
|
+
let yBar = Mean(yData);
|
|
2332
|
+
let sum = 0;
|
|
2333
|
+
for (let i = 0; i < xData.length; i++) {
|
|
2334
|
+
sum += (xData[i] - xBar) * (yData[i] - yBar);
|
|
2335
|
+
}
|
|
2336
|
+
return sum / xData.length;
|
|
2337
|
+
},
|
|
2338
|
+
/**
|
|
2339
|
+
* Calculates the sample covariance of the arrays supplied.
|
|
2340
|
+
* @customfunction
|
|
2341
|
+
* @param xData The first array of numbers.
|
|
2342
|
+
* @param yData The second array of numbers.
|
|
2343
|
+
*/
|
|
2344
|
+
S(xData, yData) {
|
|
2345
|
+
let xBar = Mean(xData);
|
|
2346
|
+
let yBar = Mean(yData);
|
|
2347
|
+
let sum = 0;
|
|
2348
|
+
for (let i = 0; i < xData.length; i++) {
|
|
2349
|
+
sum += (xData[i] - xBar) * (yData[i] - yBar);
|
|
2350
|
+
}
|
|
2351
|
+
return sum / (xData.length - 1);
|
|
2352
|
+
}
|
|
2353
|
+
};
|
|
2354
|
+
function Correlate(xData, yData) {
|
|
2355
|
+
let cov = Covariance.S(xData, yData);
|
|
2356
|
+
let den = StDev.S(xData) * StDev.S(yData);
|
|
2357
|
+
return cov / den;
|
|
2358
|
+
}
|
|
2181
2359
|
function Sum(data) {
|
|
2182
2360
|
let sum = 0;
|
|
2183
2361
|
data.forEach((d) => {
|
|
@@ -2917,11 +3095,112 @@ function CreateScatterPlot(data, title, chartSettings) {
|
|
|
2917
3095
|
AddPlotBorder(ctx, chartSettings);
|
|
2918
3096
|
return canvas;
|
|
2919
3097
|
}
|
|
2920
|
-
function MarkOutOfControl(data, UCL, LCL, display = new CanvasDrawSettings("red", "
|
|
2921
|
-
|
|
2922
|
-
|
|
3098
|
+
function MarkOutOfControl(data, UCL, LCL, CL, std, display = new CanvasDrawSettings("red", "black", 1, 1), controlTests = [1, 2, 3, 4, 5, 6, 7, 8]) {
|
|
3099
|
+
if (CL === void 0) {
|
|
3100
|
+
CL = Mean([LCL, UCL]);
|
|
3101
|
+
}
|
|
3102
|
+
if (std === void 0) {
|
|
3103
|
+
std = (CL - LCL) / 3;
|
|
3104
|
+
}
|
|
3105
|
+
let Test2 = 0;
|
|
3106
|
+
let Test3 = 0;
|
|
3107
|
+
let Test4 = 0;
|
|
3108
|
+
let Test5 = [0, 0, 0];
|
|
3109
|
+
let Test6 = [0, 0, 0, 0, 0, 0];
|
|
3110
|
+
let Test7 = 0;
|
|
3111
|
+
let Test8 = 0;
|
|
3112
|
+
data.values.forEach((v, i) => {
|
|
3113
|
+
if (controlTests.includes(1) && (v.y > UCL || v.y < LCL)) {
|
|
2923
3114
|
v.display = display;
|
|
2924
3115
|
}
|
|
3116
|
+
if (controlTests.includes(2) && (v.y > CL && Test2 >= 0 || v.y < CL && Test2 <= 0)) {
|
|
3117
|
+
Test2 += v.y < CL ? -1 : 1;
|
|
3118
|
+
if (Test2 >= 8 || Test2 <= -8) {
|
|
3119
|
+
v.display = display;
|
|
3120
|
+
}
|
|
3121
|
+
} else {
|
|
3122
|
+
Test2 = 0;
|
|
3123
|
+
}
|
|
3124
|
+
if (i !== 0) {
|
|
3125
|
+
if (controlTests.includes(3) && (v.y > data.values[i - 1].y && Test3 >= 0 || v.y < data.values[i - 1].y && Test3 <= 0)) {
|
|
3126
|
+
Test3 += v.y < data.values[i - 1].y ? -1 : 1;
|
|
3127
|
+
if (Test3 >= 5 || Test3 <= -6) {
|
|
3128
|
+
v.display = display;
|
|
3129
|
+
}
|
|
3130
|
+
} else {
|
|
3131
|
+
Test3 = 0;
|
|
3132
|
+
}
|
|
3133
|
+
if (controlTests.includes(4) && v.y < data.values[i - 1].y) {
|
|
3134
|
+
if (Test4 >= 0) {
|
|
3135
|
+
Test4 = -1 * (Test4 + 1);
|
|
3136
|
+
} else {
|
|
3137
|
+
Test4 = 0;
|
|
3138
|
+
}
|
|
3139
|
+
if (Math.abs(Test4) >= 13) {
|
|
3140
|
+
v.display = display;
|
|
3141
|
+
}
|
|
3142
|
+
}
|
|
3143
|
+
if (controlTests.includes(4) && v.y > data.values[i - 1].y) {
|
|
3144
|
+
if (Test4 <= 0) {
|
|
3145
|
+
Test4 = -1 * (Test4 - 1);
|
|
3146
|
+
} else {
|
|
3147
|
+
Test4 = 0;
|
|
3148
|
+
}
|
|
3149
|
+
if (Math.abs(Test4) >= 13) {
|
|
3150
|
+
v.display = display;
|
|
3151
|
+
}
|
|
3152
|
+
}
|
|
3153
|
+
}
|
|
3154
|
+
Test5[0] = Test5[1];
|
|
3155
|
+
Test5[1] = Test5[2];
|
|
3156
|
+
if (controlTests.includes(5) && v.y > 2 * std + CL) {
|
|
3157
|
+
Test5[2] = 1;
|
|
3158
|
+
if (Test5[0] === 1 || Test5[1] === 1) {
|
|
3159
|
+
v.display = display;
|
|
3160
|
+
}
|
|
3161
|
+
}
|
|
3162
|
+
if (controlTests.includes(5) && v.y < CL - 2 * std) {
|
|
3163
|
+
Test5[2] = -1;
|
|
3164
|
+
if (Test5[0] === -1 || Test5[1] === -1) {
|
|
3165
|
+
v.display = display;
|
|
3166
|
+
}
|
|
3167
|
+
}
|
|
3168
|
+
Test6[0] = Test6[1];
|
|
3169
|
+
Test6[1] = Test6[2];
|
|
3170
|
+
Test6[2] = Test6[3];
|
|
3171
|
+
Test6[3] = Test6[4];
|
|
3172
|
+
Test6[4] = Test6[5];
|
|
3173
|
+
if (controlTests.includes(6) && v.y > std + CL) {
|
|
3174
|
+
Test6[5] = 1;
|
|
3175
|
+
let plus = Test6.filter((t) => t === 1);
|
|
3176
|
+
if (plus.length >= 4) {
|
|
3177
|
+
v.display = display;
|
|
3178
|
+
}
|
|
3179
|
+
} else if (controlTests.includes(6) && v.y < CL - std) {
|
|
3180
|
+
Test6[5] = -1;
|
|
3181
|
+
let plus = Test6.filter((t) => t === -1);
|
|
3182
|
+
if (plus.length >= 4) {
|
|
3183
|
+
v.display = display;
|
|
3184
|
+
}
|
|
3185
|
+
} else {
|
|
3186
|
+
Test6[5] = 0;
|
|
3187
|
+
}
|
|
3188
|
+
if (controlTests.includes(7) && v.y >= CL - std && v.y <= CL + std) {
|
|
3189
|
+
Test7 += 1;
|
|
3190
|
+
if (Test7 >= 15) {
|
|
3191
|
+
v.display = display;
|
|
3192
|
+
}
|
|
3193
|
+
} else {
|
|
3194
|
+
Test7 = 0;
|
|
3195
|
+
}
|
|
3196
|
+
if (controlTests.includes(8) && (v.y < CL - std || v.y > CL + std)) {
|
|
3197
|
+
Test8 += 1;
|
|
3198
|
+
if (Test8 >= 8) {
|
|
3199
|
+
v.display = display;
|
|
3200
|
+
}
|
|
3201
|
+
} else {
|
|
3202
|
+
Test8 = 0;
|
|
3203
|
+
}
|
|
2925
3204
|
});
|
|
2926
3205
|
}
|
|
2927
3206
|
function GetHistogramDataset(data, title, bucketRange, chartSettings) {
|
|
@@ -4032,7 +4311,6 @@ function SplitObjectArrayByProp(array, prop) {
|
|
|
4032
4311
|
LastObservationsChart,
|
|
4033
4312
|
Line,
|
|
4034
4313
|
Margin,
|
|
4035
|
-
MarkOutOfControl,
|
|
4036
4314
|
MaximumLikelihoodParameters,
|
|
4037
4315
|
Mean,
|
|
4038
4316
|
Median,
|
package/dist/index.mjs
CHANGED
|
@@ -557,7 +557,7 @@ function IndividualValuePlot(data, title, historicalMean) {
|
|
|
557
557
|
chartSettings.axis.x.autoSize = false;
|
|
558
558
|
let dataset = SerializeData(data);
|
|
559
559
|
dataset.line.type = "straight";
|
|
560
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
560
|
+
MarkOutOfControl(dataset, UCL, LCL, centerline, std);
|
|
561
561
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
562
562
|
}
|
|
563
563
|
function MovingRangeChart(data, title, w = 2) {
|
|
@@ -586,7 +586,7 @@ function MovingRangeChart(data, title, w = 2) {
|
|
|
586
586
|
chartSettings.axis.x.autoSize = false;
|
|
587
587
|
let dataset = SerializeData(movingRange);
|
|
588
588
|
dataset.line.type = "straight";
|
|
589
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
589
|
+
MarkOutOfControl(dataset, UCL, LCL, void 0, void 0, void 0, [1]);
|
|
590
590
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
591
591
|
}
|
|
592
592
|
function LastObservationsChart(data, N, title) {
|
|
@@ -1498,7 +1498,7 @@ var Distributions = {
|
|
|
1498
1498
|
let dMinusArray = [];
|
|
1499
1499
|
let dPlusArray = [];
|
|
1500
1500
|
for (let i = 1; i <= N; i++) {
|
|
1501
|
-
let Z_i = this.cdf(
|
|
1501
|
+
let Z_i = this.cdf(sortedData[i - 1], mean, std);
|
|
1502
1502
|
dPlusArray.push(i / N - Z_i);
|
|
1503
1503
|
dMinusArray.push(Z_i - (i - 1) / N);
|
|
1504
1504
|
}
|
|
@@ -1508,6 +1508,148 @@ var Distributions = {
|
|
|
1508
1508
|
KS,
|
|
1509
1509
|
p
|
|
1510
1510
|
};
|
|
1511
|
+
},
|
|
1512
|
+
ShapiroWilk: {
|
|
1513
|
+
Test(data, expanded) {
|
|
1514
|
+
let N = data.length;
|
|
1515
|
+
let mean = Mean(data);
|
|
1516
|
+
let sorted = [...data].sort();
|
|
1517
|
+
let invSort = [...data].sort((a, b2) => b2 - a);
|
|
1518
|
+
let SS = 0;
|
|
1519
|
+
sorted.forEach((s) => {
|
|
1520
|
+
SS += Math.pow(s - mean, 2);
|
|
1521
|
+
});
|
|
1522
|
+
if (N < 12) {
|
|
1523
|
+
expanded = false;
|
|
1524
|
+
}
|
|
1525
|
+
if (expanded || N > 50) {
|
|
1526
|
+
let u = 1 / Math.sqrt(N);
|
|
1527
|
+
let m_i = [];
|
|
1528
|
+
let M = 0;
|
|
1529
|
+
for (let i = 0; i < N; i++) {
|
|
1530
|
+
let m = Distributions.Normal.inv((i + 1 - 0.375) / (N + 0.25));
|
|
1531
|
+
m_i[i] = m;
|
|
1532
|
+
M += Math.pow(m, 2);
|
|
1533
|
+
}
|
|
1534
|
+
let a_i = [];
|
|
1535
|
+
a_i[N - 1] = -2.706056 * Math.pow(u, 5) + 4.434685 * Math.pow(u, 4) - 2.07119 * Math.pow(u, 3) - 0.147981 * Math.pow(u, 2) + 0.221157 * u + m_i[N - 1] / Math.sqrt(M);
|
|
1536
|
+
a_i[N - 2] = -3.582633 * Math.pow(u, 5) + 5.682633 * Math.pow(u, 4) - 1.752461 * Math.pow(u, 3) - 0.293762 * Math.pow(u, 2) + 0.042981 * u + m_i[N - 2] / Math.sqrt(M);
|
|
1537
|
+
a_i[0] = -1 * a_i[N - 1];
|
|
1538
|
+
a_i[1] = -1 * a_i[N - 2];
|
|
1539
|
+
let eps = (M - 2 * Math.pow(m_i[N - 1], 2) - 2 * Math.pow(m_i[N - 2], 2)) / (1 - 2 * Math.pow(a_i[N - 1], 2) - 2 * Math.pow(a_i[N - 2], 2));
|
|
1540
|
+
for (let i = 2; i < N - 2; i++) {
|
|
1541
|
+
a_i[i] = m_i[i] / Math.sqrt(eps);
|
|
1542
|
+
}
|
|
1543
|
+
let W2 = Math.pow(Correlate(a_i, sorted), 2);
|
|
1544
|
+
let p_mu = 38915e-7 * Math.pow(Math.log(N), 3) - 0.083751 * Math.pow(Math.log(N), 2) - 0.31082 * Math.log(N) - 1.5861;
|
|
1545
|
+
let p_sigma = Math.exp(30302e-7 * Math.pow(Math.log(N), 2) - 0.082676 * Math.log(N) - 0.4803);
|
|
1546
|
+
let z = (Math.log(1 - W2) - p_mu) / p_sigma;
|
|
1547
|
+
return {
|
|
1548
|
+
W: W2,
|
|
1549
|
+
p: 1 - Distributions.Normal.cdf(z, 0, 1)
|
|
1550
|
+
};
|
|
1551
|
+
}
|
|
1552
|
+
let b = 0;
|
|
1553
|
+
for (let i = 0; i < Math.floor(N / 2); i++) {
|
|
1554
|
+
let a = Distributions.Normal.ShapiroWilk.constants[i][N - 2];
|
|
1555
|
+
b += a * (invSort[i] - sorted[i]);
|
|
1556
|
+
}
|
|
1557
|
+
let W = Math.pow(b, 2) / SS;
|
|
1558
|
+
let p = Distributions.Normal.ShapiroWilk.p(W, N);
|
|
1559
|
+
return {
|
|
1560
|
+
W,
|
|
1561
|
+
p
|
|
1562
|
+
};
|
|
1563
|
+
},
|
|
1564
|
+
constants: [
|
|
1565
|
+
[0.7071, 0.7071, 0.6872, 0.6646, 0.6431, 0.6233, 0.6052, 0.5888, 0.5739, 0.5601, 0.5475, 0.5359, 0.5251, 0.515, 0.5056, 0.4968, 0.4886, 0.4808, 0.4734, 0.4643, 0.459, 0.4542, 0.4493, 0.445, 0.4407, 0.4366, 0.4328, 0.4291, 0.4254, 0.422, 0.4188, 0.4156, 0.4127, 0.4096, 0.4068, 0.404, 0.4015, 0.3989, 0.3964, 0.394, 0.3917, 0.3894, 0.3872, 0.385, 0.383, 0.3808, 0.3789, 0.377, 0.3751],
|
|
1566
|
+
[NaN, NaN, 0.1677, 0.2413, 0.2806, 0.3031, 0.3164, 0.3244, 0.3291, 0.3315, 0.3325, 0.3325, 0.3318, 0.3306, 0.329, 0.3273, 0.3253, 0.3232, 0.3211, 0.3185, 0.3156, 0.3126, 0.3098, 0.3069, 0.3043, 0.3018, 0.2992, 0.2968, 0.2944, 0.2921, 0.2898, 0.2876, 0.2854, 0.2834, 0.2813, 0.2794, 0.2774, 0.2755, 0.2737, 0.2719, 0.2701, 0.2684, 0.2667, 0.2651, 0.2635, 0.262, 0.2604, 0.2589, 0.2574],
|
|
1567
|
+
[NaN, NaN, NaN, NaN, 0.0875, 0.1401, 0.1743, 0.1976, 0.2141, 0.226, 0.2347, 0.2412, 0.246, 0.2495, 0.2521, 0.254, 0.2553, 0.2561, 0.2565, 0.2578, 0.2571, 0.2563, 0.2554, 0.2543, 0.2533, 0.2522, 0.251, 0.2499, 0.2487, 0.2475, 0.2463, 0.2451, 0.2439, 0.2427, 0.2415, 0.2403, 0.2391, 0.238, 0.2368, 0.2357, 0.2345, 0.2334, 0.2323, 0.2313, 0.2302, 0.2291, 0.2281, 0.2271, 0.226],
|
|
1568
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, 0.0561, 0.0947, 0.1224, 0.1429, 0.1586, 0.1707, 0.1802, 0.1878, 0.1939, 0.1988, 0.2027, 0.2059, 0.2085, 0.2119, 0.2131, 0.2139, 0.2145, 0.2148, 0.2151, 0.2152, 0.2151, 0.215, 0.2148, 0.2145, 0.2141, 0.2137, 0.2132, 0.2127, 0.2121, 0.2116, 0.211, 0.2104, 0.2098, 0.2091, 0.2085, 0.2078, 0.2072, 0.2065, 0.2058, 0.2052, 0.2045, 0.2038, 0.2032],
|
|
1569
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0399, 0.0695, 0.0922, 0.1099, 0.124, 0.1353, 0.1447, 0.1524, 0.1587, 0.1641, 0.1686, 0.1736, 0.1764, 0.1787, 0.1807, 0.1822, 0.1836, 0.1848, 0.1857, 0.1864, 0.187, 0.1874, 0.1878, 0.188, 0.1882, 0.1883, 0.1883, 0.1883, 0.1881, 0.188, 0.1878, 0.1876, 0.1874, 0.1871, 0.1868, 0.1865, 0.1862, 0.1859, 0.1855, 0.1851, 0.1847],
|
|
1570
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0303, 0.0539, 0.0727, 0.088, 0.1005, 0.1109, 0.1197, 0.1271, 0.1334, 0.1399, 0.1443, 0.148, 0.1512, 0.1539, 0.1563, 0.1584, 0.1601, 0.1616, 0.163, 0.1641, 0.1651, 0.166, 0.1667, 0.1673, 0.1678, 0.1683, 0.1686, 0.1689, 0.1691, 0.1693, 0.1694, 0.1695, 0.1695, 0.1695, 0.1695, 0.1695, 0.1693, 0.1692, 0.1691],
|
|
1571
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.024, 0.0433, 0.0593, 0.0725, 0.0837, 0.0932, 0.1013, 0.1092, 0.115, 0.1201, 0.1245, 0.1283, 0.1316, 0.1346, 0.1372, 0.1395, 0.1415, 0.1433, 0.1449, 0.1463, 0.1475, 0.1487, 0.1496, 0.1505, 0.1513, 0.152, 0.1526, 0.1531, 0.1535, 0.1539, 0.1542, 0.1545, 0.1548, 0.155, 0.1551, 0.1553, 0.1554],
|
|
1572
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0196, 0.0359, 0.0496, 0.0612, 0.0711, 0.0804, 0.0878, 0.0941, 0.0997, 0.1046, 0.1089, 0.1128, 0.1162, 0.1192, 0.1219, 0.1243, 0.1265, 0.1284, 0.1301, 0.1317, 0.1331, 0.1344, 0.1356, 0.1366, 0.1376, 0.1384, 0.1392, 0.1398, 0.1405, 0.141, 0.1415, 0.142, 0.1423, 0.1427, 0.143],
|
|
1573
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0163, 0.0303, 0.0422, 0.053, 0.0618, 0.0696, 0.0764, 0.0823, 0.0876, 0.0923, 0.0965, 0.1002, 0.1036, 0.1066, 0.1093, 0.1118, 0.114, 0.116, 0.1179, 0.1196, 0.1211, 0.1225, 0.1237, 0.1249, 0.1259, 0.1269, 0.1278, 0.1286, 0.1293, 0.13, 0.1306, 0.1312, 0.1317],
|
|
1574
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.014, 0.0263, 0.0368, 0.0459, 0.0539, 0.061, 0.0672, 0.0728, 0.0778, 0.0822, 0.0862, 0.0899, 0.0931, 0.0961, 0.0988, 0.1013, 0.1036, 0.1056, 0.1075, 0.1092, 0.1108, 0.1123, 0.1136, 0.1149, 0.116, 0.117, 0.118, 0.1189, 0.1197, 0.1205, 0.1212],
|
|
1575
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.0122, 0.0228, 0.0321, 0.0403, 0.0476, 0.054, 0.0598, 0.065, 0.0697, 0.0739, 0.0777, 0.0812, 0.0844, 0.0873, 0.09, 0.0924, 0.0947, 0.0967, 0.0986, 0.1004, 0.102, 0.1035, 0.1049, 0.1062, 0.1073, 0.1085, 0.1095, 0.1105, 0.1113],
|
|
1576
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 0.0107, 0.02, 0.0284, 0.0358, 0.0424, 0.0483, 0.0537, 0.0585, 0.0629, 0.0669, 0.0706, 0.0739, 0.077, 0.0798, 0.0824, 0.0848, 0.087, 0.0891, 0.0909, 0.0927, 0.0943, 0.0959, 0.0972, 0.0986, 0.0998, 0.101, 0.102],
|
|
1577
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 94e-4, 0.0178, 0.0253, 0.032, 0.0381, 0.0435, 0.0485, 0.053, 0.0572, 0.061, 0.0645, 0.0677, 0.0706, 0.0733, 0.0759, 0.0782, 0.0804, 0.0824, 0.0842, 0.086, 0.0876, 0.0892, 0.0906, 0.0919, 0.0932],
|
|
1578
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 84e-4, 0.0159, 0.0227, 0.0289, 0.0344, 0.0395, 0.0441, 0.0484, 0.0523, 0.0559, 0.0592, 0.0622, 0.0651, 0.0677, 0.0701, 0.0724, 0.0745, 0.0765, 0.0783, 0.0801, 0.0817, 0.0832, 0.0846],
|
|
1579
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 76e-4, 0.0144, 0.0206, 0.0262, 0.0314, 0.0361, 0.0404, 0.0444, 0.0481, 0.0515, 0.0546, 0.0575, 0.0602, 0.0628, 0.0651, 0.0673, 0.0694, 0.0713, 0.0731, 0.0748, 0.0764],
|
|
1580
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 68e-4, 0.0131, 0.0187, 0.0239, 0.0287, 0.0331, 0.0372, 0.0409, 0.0444, 0.0476, 0.0506, 0.0534, 0.056, 0.0584, 0.0607, 0.0628, 0.0648, 0.0667, 0.0685],
|
|
1581
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 62e-4, 0.0119, 0.0172, 0.022, 0.0264, 0.0305, 0.0343, 0.0379, 0.0411, 0.0442, 0.0471, 0.0497, 0.0522, 0.0546, 0.0568, 0.0588, 0.0608],
|
|
1582
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 57e-4, 0.011, 0.0158, 0.0203, 0.0244, 0.0283, 0.0318, 0.0352, 0.0383, 0.0412, 0.0439, 0.0465, 0.0489, 0.0511, 0.0532],
|
|
1583
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 53e-4, 0.0101, 0.0146, 0.0188, 0.0227, 0.0263, 0.0296, 0.0328, 0.0357, 0.0385, 0.0411, 0.0436, 0.0459],
|
|
1584
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 49e-4, 94e-4, 0.0136, 0.0175, 0.0211, 0.0245, 0.0277, 0.0307, 0.0335, 0.0361, 0.0386],
|
|
1585
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 45e-4, 87e-4, 0.0126, 0.0163, 0.0197, 0.0229, 0.0259, 0.0288, 0.0314],
|
|
1586
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 42e-4, 81e-4, 0.0118, 0.0153, 0.0185, 0.0215, 0.0244],
|
|
1587
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 39e-4, 76e-4, 0.0111, 0.0143, 0.0174],
|
|
1588
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 37e-4, 71e-4, 0.0104],
|
|
1589
|
+
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0, 35e-4]
|
|
1590
|
+
],
|
|
1591
|
+
p(W, N) {
|
|
1592
|
+
let wArray = Distributions.Normal.ShapiroWilk.pChart.wValues[N - 3];
|
|
1593
|
+
let inflection = wArray.findIndex((w) => W <= w);
|
|
1594
|
+
let w1 = wArray[inflection - 1];
|
|
1595
|
+
let w2 = wArray[inflection];
|
|
1596
|
+
let p1 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection - 1];
|
|
1597
|
+
let p2 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection];
|
|
1598
|
+
return p1 + (p2 - p1) / (w2 - w1) * (W - w1);
|
|
1599
|
+
},
|
|
1600
|
+
pChart: {
|
|
1601
|
+
wValues: [
|
|
1602
|
+
[0.753, 0.756, 0.767, 0.789, 0.959, 0.998, 0.999, 1, 1],
|
|
1603
|
+
[0.687, 0.707, 0.748, 0.792, 0.935, 0.987, 0.992, 0.996, 0.997],
|
|
1604
|
+
[0.686, 0.715, 0.762, 0.806, 0.927, 0.979, 0.986, 0.991, 0.993],
|
|
1605
|
+
[0.713, 0.743, 0.788, 0.826, 0.927, 0.974, 0.981, 0.986, 0.989],
|
|
1606
|
+
[0.73, 0.76, 0.803, 0.838, 0.928, 0.972, 0.979, 0.985, 0.988],
|
|
1607
|
+
[0.749, 0.778, 0.818, 0.851, 0.932, 0.972, 0.978, 0.984, 0.987],
|
|
1608
|
+
[0.764, 0.791, 0.829, 0.859, 0.935, 0.972, 0.978, 0.984, 0.986],
|
|
1609
|
+
[0.781, 0.806, 0.842, 0.869, 0.938, 0.972, 0.978, 0.983, 0.986],
|
|
1610
|
+
[0.792, 0.817, 0.85, 0.876, 0.94, 0.973, 0.979, 0.984, 0.986],
|
|
1611
|
+
[0.805, 0.828, 0.859, 0.883, 0.943, 0.973, 0.979, 0.984, 0.986],
|
|
1612
|
+
[0.814, 0.837, 0.866, 0.889, 0.945, 0.974, 0.979, 0.984, 0.986],
|
|
1613
|
+
[0.825, 0.846, 0.874, 0.895, 0.947, 0.975, 0.98, 0.984, 0.986],
|
|
1614
|
+
[0.835, 0.855, 0.881, 0.901, 0.95, 0.975, 0.98, 0.984, 0.987],
|
|
1615
|
+
[0.844, 0.863, 0.887, 0.906, 0.952, 0.976, 0.981, 0.985, 0.987],
|
|
1616
|
+
[0.851, 0.869, 0.892, 0.91, 0.954, 0.977, 0.981, 0.985, 0.987],
|
|
1617
|
+
[0.858, 0.874, 0.897, 0.914, 0.956, 0.978, 0.982, 0.986, 0.988],
|
|
1618
|
+
[0.863, 0.879, 0.901, 0.917, 0.957, 0.978, 0.982, 0.986, 0.988],
|
|
1619
|
+
[0.868, 0.884, 0.905, 0.92, 0.959, 0.979, 0.983, 0.986, 0.988],
|
|
1620
|
+
[0.873, 0.888, 0.908, 0.923, 0.96, 0.98, 0.983, 0.987, 0.989],
|
|
1621
|
+
[0.878, 0.892, 0.911, 0.926, 0.961, 0.98, 0.984, 0.987, 0.989],
|
|
1622
|
+
[0.881, 0.895, 0.914, 0.928, 0.962, 0.981, 0.984, 0.987, 0.989],
|
|
1623
|
+
[0.884, 0.898, 0.916, 0.93, 0.963, 0.981, 0.984, 0.987, 0.989],
|
|
1624
|
+
[0.888, 0.901, 0.918, 0.931, 0.964, 0.981, 0.985, 0.988, 0.989],
|
|
1625
|
+
[0.891, 0.904, 0.92, 0.933, 0.965, 0.982, 0.985, 0.988, 0.989],
|
|
1626
|
+
[0.894, 0.906, 0.923, 0.935, 0.965, 0.982, 0.985, 0.988, 0.99],
|
|
1627
|
+
[0.896, 0.908, 0.924, 0.936, 0.966, 0.982, 0.985, 0.988, 0.99],
|
|
1628
|
+
[0.898, 0.91, 0.926, 0.937, 0.966, 0.982, 0.985, 0.988, 0.99],
|
|
1629
|
+
[0.9, 0.912, 0.927, 0.939, 0.967, 0.983, 0.985, 0.988, 0.99],
|
|
1630
|
+
[0.902, 0.914, 0.929, 0.94, 0.967, 0.983, 0.986, 0.988, 0.99],
|
|
1631
|
+
[0.904, 0.915, 0.93, 0.941, 0.968, 0.983, 0.986, 0.988, 0.99],
|
|
1632
|
+
[0.906, 0.917, 0.931, 0.942, 0.968, 0.983, 0.986, 0.989, 0.99],
|
|
1633
|
+
[0.908, 0.919, 0.933, 0.943, 0.969, 0.983, 0.986, 0.989, 0.99],
|
|
1634
|
+
[0.91, 0.92, 0.934, 0.944, 0.969, 0.984, 0.986, 0.989, 0.99],
|
|
1635
|
+
[0.912, 0.922, 0.935, 0.945, 0.97, 0.984, 0.986, 0.989, 0.99],
|
|
1636
|
+
[0.914, 0.924, 0.936, 0.946, 0.97, 0.984, 0.987, 0.989, 0.99],
|
|
1637
|
+
[0.916, 0.925, 0.938, 0.947, 0.971, 0.984, 0.987, 0.989, 0.99],
|
|
1638
|
+
[0.917, 0.927, 0.939, 0.948, 0.971, 0.984, 0.987, 0.989, 0.991],
|
|
1639
|
+
[0.919, 0.928, 0.94, 0.949, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1640
|
+
[0.92, 0.929, 0.941, 0.95, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1641
|
+
[0.922, 0.93, 0.942, 0.951, 0.972, 0.985, 0.987, 0.989, 0.991],
|
|
1642
|
+
[0.923, 0.932, 0.943, 0.951, 0.973, 0.985, 0.987, 0.99, 0.991],
|
|
1643
|
+
[0.924, 0.933, 0.944, 0.952, 0.973, 0.985, 0.987, 0.99, 0.991],
|
|
1644
|
+
[0.926, 0.934, 0.945, 0.953, 0.973, 0.985, 0.988, 0.99, 0.991],
|
|
1645
|
+
[0.927, 0.935, 0.945, 0.953, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1646
|
+
[0.928, 0.936, 0.946, 0.954, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1647
|
+
[0.929, 0.937, 0.947, 0.954, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1648
|
+
[0.929, 0.939, 0.947, 0.955, 0.974, 0.985, 0.988, 0.99, 0.991],
|
|
1649
|
+
[0.93, 0.938, 0.947, 0.955, 0.974, 0.985, 0.988, 0.99, 0.991]
|
|
1650
|
+
],
|
|
1651
|
+
pValues: [0.01, 0.02, 0.05, 0.1, 0.5, 0.9, 0.95, 0.98, 0.99]
|
|
1652
|
+
}
|
|
1511
1653
|
}
|
|
1512
1654
|
},
|
|
1513
1655
|
T: {
|
|
@@ -2091,6 +2233,43 @@ var StDev = {
|
|
|
2091
2233
|
return averageMR / d2w;
|
|
2092
2234
|
}
|
|
2093
2235
|
};
|
|
2236
|
+
var Covariance = {
|
|
2237
|
+
/**
|
|
2238
|
+
* Calculates the population covariance of the arrays supplied.
|
|
2239
|
+
* @customfunction
|
|
2240
|
+
* @param xData The first array of numbers.
|
|
2241
|
+
* @param yData The second array of numbers.
|
|
2242
|
+
*/
|
|
2243
|
+
P(xData, yData) {
|
|
2244
|
+
let xBar = Mean(xData);
|
|
2245
|
+
let yBar = Mean(yData);
|
|
2246
|
+
let sum = 0;
|
|
2247
|
+
for (let i = 0; i < xData.length; i++) {
|
|
2248
|
+
sum += (xData[i] - xBar) * (yData[i] - yBar);
|
|
2249
|
+
}
|
|
2250
|
+
return sum / xData.length;
|
|
2251
|
+
},
|
|
2252
|
+
/**
|
|
2253
|
+
* Calculates the sample covariance of the arrays supplied.
|
|
2254
|
+
* @customfunction
|
|
2255
|
+
* @param xData The first array of numbers.
|
|
2256
|
+
* @param yData The second array of numbers.
|
|
2257
|
+
*/
|
|
2258
|
+
S(xData, yData) {
|
|
2259
|
+
let xBar = Mean(xData);
|
|
2260
|
+
let yBar = Mean(yData);
|
|
2261
|
+
let sum = 0;
|
|
2262
|
+
for (let i = 0; i < xData.length; i++) {
|
|
2263
|
+
sum += (xData[i] - xBar) * (yData[i] - yBar);
|
|
2264
|
+
}
|
|
2265
|
+
return sum / (xData.length - 1);
|
|
2266
|
+
}
|
|
2267
|
+
};
|
|
2268
|
+
function Correlate(xData, yData) {
|
|
2269
|
+
let cov = Covariance.S(xData, yData);
|
|
2270
|
+
let den = StDev.S(xData) * StDev.S(yData);
|
|
2271
|
+
return cov / den;
|
|
2272
|
+
}
|
|
2094
2273
|
function Sum(data) {
|
|
2095
2274
|
let sum = 0;
|
|
2096
2275
|
data.forEach((d) => {
|
|
@@ -2830,11 +3009,112 @@ function CreateScatterPlot(data, title, chartSettings) {
|
|
|
2830
3009
|
AddPlotBorder(ctx, chartSettings);
|
|
2831
3010
|
return canvas;
|
|
2832
3011
|
}
|
|
2833
|
-
function MarkOutOfControl(data, UCL, LCL, display = new CanvasDrawSettings("red", "
|
|
2834
|
-
|
|
2835
|
-
|
|
3012
|
+
function MarkOutOfControl(data, UCL, LCL, CL, std, display = new CanvasDrawSettings("red", "black", 1, 1), controlTests = [1, 2, 3, 4, 5, 6, 7, 8]) {
|
|
3013
|
+
if (CL === void 0) {
|
|
3014
|
+
CL = Mean([LCL, UCL]);
|
|
3015
|
+
}
|
|
3016
|
+
if (std === void 0) {
|
|
3017
|
+
std = (CL - LCL) / 3;
|
|
3018
|
+
}
|
|
3019
|
+
let Test2 = 0;
|
|
3020
|
+
let Test3 = 0;
|
|
3021
|
+
let Test4 = 0;
|
|
3022
|
+
let Test5 = [0, 0, 0];
|
|
3023
|
+
let Test6 = [0, 0, 0, 0, 0, 0];
|
|
3024
|
+
let Test7 = 0;
|
|
3025
|
+
let Test8 = 0;
|
|
3026
|
+
data.values.forEach((v, i) => {
|
|
3027
|
+
if (controlTests.includes(1) && (v.y > UCL || v.y < LCL)) {
|
|
2836
3028
|
v.display = display;
|
|
2837
3029
|
}
|
|
3030
|
+
if (controlTests.includes(2) && (v.y > CL && Test2 >= 0 || v.y < CL && Test2 <= 0)) {
|
|
3031
|
+
Test2 += v.y < CL ? -1 : 1;
|
|
3032
|
+
if (Test2 >= 8 || Test2 <= -8) {
|
|
3033
|
+
v.display = display;
|
|
3034
|
+
}
|
|
3035
|
+
} else {
|
|
3036
|
+
Test2 = 0;
|
|
3037
|
+
}
|
|
3038
|
+
if (i !== 0) {
|
|
3039
|
+
if (controlTests.includes(3) && (v.y > data.values[i - 1].y && Test3 >= 0 || v.y < data.values[i - 1].y && Test3 <= 0)) {
|
|
3040
|
+
Test3 += v.y < data.values[i - 1].y ? -1 : 1;
|
|
3041
|
+
if (Test3 >= 5 || Test3 <= -6) {
|
|
3042
|
+
v.display = display;
|
|
3043
|
+
}
|
|
3044
|
+
} else {
|
|
3045
|
+
Test3 = 0;
|
|
3046
|
+
}
|
|
3047
|
+
if (controlTests.includes(4) && v.y < data.values[i - 1].y) {
|
|
3048
|
+
if (Test4 >= 0) {
|
|
3049
|
+
Test4 = -1 * (Test4 + 1);
|
|
3050
|
+
} else {
|
|
3051
|
+
Test4 = 0;
|
|
3052
|
+
}
|
|
3053
|
+
if (Math.abs(Test4) >= 13) {
|
|
3054
|
+
v.display = display;
|
|
3055
|
+
}
|
|
3056
|
+
}
|
|
3057
|
+
if (controlTests.includes(4) && v.y > data.values[i - 1].y) {
|
|
3058
|
+
if (Test4 <= 0) {
|
|
3059
|
+
Test4 = -1 * (Test4 - 1);
|
|
3060
|
+
} else {
|
|
3061
|
+
Test4 = 0;
|
|
3062
|
+
}
|
|
3063
|
+
if (Math.abs(Test4) >= 13) {
|
|
3064
|
+
v.display = display;
|
|
3065
|
+
}
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3068
|
+
Test5[0] = Test5[1];
|
|
3069
|
+
Test5[1] = Test5[2];
|
|
3070
|
+
if (controlTests.includes(5) && v.y > 2 * std + CL) {
|
|
3071
|
+
Test5[2] = 1;
|
|
3072
|
+
if (Test5[0] === 1 || Test5[1] === 1) {
|
|
3073
|
+
v.display = display;
|
|
3074
|
+
}
|
|
3075
|
+
}
|
|
3076
|
+
if (controlTests.includes(5) && v.y < CL - 2 * std) {
|
|
3077
|
+
Test5[2] = -1;
|
|
3078
|
+
if (Test5[0] === -1 || Test5[1] === -1) {
|
|
3079
|
+
v.display = display;
|
|
3080
|
+
}
|
|
3081
|
+
}
|
|
3082
|
+
Test6[0] = Test6[1];
|
|
3083
|
+
Test6[1] = Test6[2];
|
|
3084
|
+
Test6[2] = Test6[3];
|
|
3085
|
+
Test6[3] = Test6[4];
|
|
3086
|
+
Test6[4] = Test6[5];
|
|
3087
|
+
if (controlTests.includes(6) && v.y > std + CL) {
|
|
3088
|
+
Test6[5] = 1;
|
|
3089
|
+
let plus = Test6.filter((t) => t === 1);
|
|
3090
|
+
if (plus.length >= 4) {
|
|
3091
|
+
v.display = display;
|
|
3092
|
+
}
|
|
3093
|
+
} else if (controlTests.includes(6) && v.y < CL - std) {
|
|
3094
|
+
Test6[5] = -1;
|
|
3095
|
+
let plus = Test6.filter((t) => t === -1);
|
|
3096
|
+
if (plus.length >= 4) {
|
|
3097
|
+
v.display = display;
|
|
3098
|
+
}
|
|
3099
|
+
} else {
|
|
3100
|
+
Test6[5] = 0;
|
|
3101
|
+
}
|
|
3102
|
+
if (controlTests.includes(7) && v.y >= CL - std && v.y <= CL + std) {
|
|
3103
|
+
Test7 += 1;
|
|
3104
|
+
if (Test7 >= 15) {
|
|
3105
|
+
v.display = display;
|
|
3106
|
+
}
|
|
3107
|
+
} else {
|
|
3108
|
+
Test7 = 0;
|
|
3109
|
+
}
|
|
3110
|
+
if (controlTests.includes(8) && (v.y < CL - std || v.y > CL + std)) {
|
|
3111
|
+
Test8 += 1;
|
|
3112
|
+
if (Test8 >= 8) {
|
|
3113
|
+
v.display = display;
|
|
3114
|
+
}
|
|
3115
|
+
} else {
|
|
3116
|
+
Test8 = 0;
|
|
3117
|
+
}
|
|
2838
3118
|
});
|
|
2839
3119
|
}
|
|
2840
3120
|
function GetHistogramDataset(data, title, bucketRange, chartSettings) {
|
|
@@ -3944,7 +4224,6 @@ export {
|
|
|
3944
4224
|
LastObservationsChart,
|
|
3945
4225
|
Line,
|
|
3946
4226
|
Margin,
|
|
3947
|
-
MarkOutOfControl,
|
|
3948
4227
|
MaximumLikelihoodParameters,
|
|
3949
4228
|
Mean,
|
|
3950
4229
|
Median,
|
package/index.ts
CHANGED
|
@@ -644,7 +644,7 @@ export function IndividualValuePlot(data: number[], title?: string, historicalMe
|
|
|
644
644
|
// Construct dataset with data
|
|
645
645
|
let dataset = SerializeData(data);
|
|
646
646
|
dataset.line.type = 'straight'
|
|
647
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
647
|
+
MarkOutOfControl(dataset, UCL, LCL, centerline, std);
|
|
648
648
|
|
|
649
649
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
650
650
|
}
|
|
@@ -683,7 +683,7 @@ export function MovingRangeChart(data: number[], title?: string, w: number = 2){
|
|
|
683
683
|
// Construct dataset with data
|
|
684
684
|
let dataset = SerializeData(movingRange);
|
|
685
685
|
dataset.line.type = 'straight'
|
|
686
|
-
MarkOutOfControl(dataset, UCL, LCL);
|
|
686
|
+
MarkOutOfControl(dataset, UCL, LCL,undefined,undefined,undefined,[1]);
|
|
687
687
|
|
|
688
688
|
return CreateScatterPlot([dataset], title, chartSettings);
|
|
689
689
|
}
|
|
@@ -1668,7 +1668,7 @@ export const Distributions = {
|
|
|
1668
1668
|
let dMinusArray: number[] = [];
|
|
1669
1669
|
let dPlusArray: number[] = [];
|
|
1670
1670
|
for(let i = 1; i <= N; i++){
|
|
1671
|
-
let Z_i = this.cdf(
|
|
1671
|
+
let Z_i = this.cdf(sortedData[i-1], mean, std)
|
|
1672
1672
|
dPlusArray.push((i/N)-Z_i);
|
|
1673
1673
|
dMinusArray.push(Z_i-(i-1)/N);
|
|
1674
1674
|
|
|
@@ -1679,6 +1679,156 @@ export const Distributions = {
|
|
|
1679
1679
|
KS: KS,
|
|
1680
1680
|
p: p
|
|
1681
1681
|
};
|
|
1682
|
+
},
|
|
1683
|
+
ShapiroWilk:{
|
|
1684
|
+
Test(data: number[], expanded?: boolean){
|
|
1685
|
+
let N = data.length;
|
|
1686
|
+
let mean = Mean(data);
|
|
1687
|
+
|
|
1688
|
+
let sorted = [...data].sort();
|
|
1689
|
+
let invSort = [...data].sort((a, b) => b - a);
|
|
1690
|
+
|
|
1691
|
+
let SS = 0;
|
|
1692
|
+
sorted.forEach(s => {
|
|
1693
|
+
SS += Math.pow(s - mean, 2);
|
|
1694
|
+
})
|
|
1695
|
+
|
|
1696
|
+
if(N < 12){
|
|
1697
|
+
expanded = false;
|
|
1698
|
+
}
|
|
1699
|
+
// ShapiroWilk Royston Expanded Approximation
|
|
1700
|
+
if(expanded || N > 50){
|
|
1701
|
+
let u = 1/Math.sqrt(N);
|
|
1702
|
+
let m_i: number[] = [];
|
|
1703
|
+
let M = 0;
|
|
1704
|
+
for(let i = 0; i < N; i++){
|
|
1705
|
+
let m = Distributions.Normal.inv((i+1-0.375)/(N+.25));
|
|
1706
|
+
m_i[i] = m;
|
|
1707
|
+
M += Math.pow(m,2);
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
let a_i: number[] = [];
|
|
1711
|
+
a_i[N - 1] = -2.706056*Math.pow(u,5)+4.434685*Math.pow(u,4)-2.07119*Math.pow(u,3)-0.147981*Math.pow(u,2)+0.221157*u+m_i[N - 1]/Math.sqrt(M);
|
|
1712
|
+
a_i[N - 2] = -3.582633*Math.pow(u,5)+5.682633*Math.pow(u,4)-1.752461*Math.pow(u,3)-0.293762*Math.pow(u,2)+0.042981*u+m_i[N - 2]/Math.sqrt(M);
|
|
1713
|
+
a_i[0] = -1 * a_i[N-1];
|
|
1714
|
+
a_i[1] = -1 * a_i[N-2];
|
|
1715
|
+
let eps = (M-2*Math.pow(m_i[N-1],2)-2*Math.pow(m_i[N-2],2))/(1-2*Math.pow(a_i[N-1],2)-2*Math.pow(a_i[N-2],2))
|
|
1716
|
+
|
|
1717
|
+
for(let i = 2; i < N-2; i++){
|
|
1718
|
+
a_i[i] = m_i[i]/Math.sqrt(eps);
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
let W = Math.pow(Correlate(a_i, sorted), 2);
|
|
1722
|
+
|
|
1723
|
+
let p_mu = 0.0038915*Math.pow(Math.log(N),3)-0.083751*Math.pow(Math.log(N),2)-0.31082*Math.log(N)-1.5861;
|
|
1724
|
+
let p_sigma = Math.exp(0.0030302*Math.pow(Math.log(N),2)-0.082676*Math.log(N)-0.4803);
|
|
1725
|
+
let z = (Math.log(1 - W) - p_mu)/p_sigma;
|
|
1726
|
+
|
|
1727
|
+
return {
|
|
1728
|
+
W: W,
|
|
1729
|
+
p: 1 - Distributions.Normal.cdf(z, 0, 1)
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
// ShapiroWilk
|
|
1733
|
+
let b = 0;
|
|
1734
|
+
for(let i = 0; i < Math.floor(N/2); i++){
|
|
1735
|
+
let a = Distributions.Normal.ShapiroWilk.constants[i][N-2];
|
|
1736
|
+
b += a*(invSort[i]-sorted[i]);
|
|
1737
|
+
}
|
|
1738
|
+
let W = Math.pow(b, 2)/SS;
|
|
1739
|
+
let p = Distributions.Normal.ShapiroWilk.p(W, N);
|
|
1740
|
+
return {
|
|
1741
|
+
W: W,
|
|
1742
|
+
p: p
|
|
1743
|
+
}
|
|
1744
|
+
},
|
|
1745
|
+
constants:[
|
|
1746
|
+
[0.7071,0.7071,0.6872,0.6646,0.6431,0.6233,0.6052,0.5888,0.5739,0.5601,0.5475,0.5359,0.5251,0.515,0.5056,0.4968,0.4886,0.4808,0.4734,0.4643,0.459,0.4542,0.4493,0.445,0.4407,0.4366,0.4328,0.4291,0.4254,0.422,0.4188,0.4156,0.4127,0.4096,0.4068,0.404,0.4015,0.3989,0.3964,0.394,0.3917,0.3894,0.3872,0.385,0.383,0.3808,0.3789,0.377,0.3751],
|
|
1747
|
+
[NaN,NaN,0.1677,0.2413,0.2806,0.3031,0.3164,0.3244,0.3291,0.3315,0.3325,0.3325,0.3318,0.3306,0.329,0.3273,0.3253,0.3232,0.3211,0.3185,0.3156,0.3126,0.3098,0.3069,0.3043,0.3018,0.2992,0.2968,0.2944,0.2921,0.2898,0.2876,0.2854,0.2834,0.2813,0.2794,0.2774,0.2755,0.2737,0.2719,0.2701,0.2684,0.2667,0.2651,0.2635,0.262,0.2604,0.2589,0.2574],
|
|
1748
|
+
[NaN,NaN,NaN,NaN,0.0875,0.1401,0.1743,0.1976,0.2141,0.226,0.2347,0.2412,0.246,0.2495,0.2521,0.254,0.2553,0.2561,0.2565,0.2578,0.2571,0.2563,0.2554,0.2543,0.2533,0.2522,0.251,0.2499,0.2487,0.2475,0.2463,0.2451,0.2439,0.2427,0.2415,0.2403,0.2391,0.238,0.2368,0.2357,0.2345,0.2334,0.2323,0.2313,0.2302,0.2291,0.2281,0.2271,0.226],
|
|
1749
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,0.0561,0.0947,0.1224,0.1429,0.1586,0.1707,0.1802,0.1878,0.1939,0.1988,0.2027,0.2059,0.2085,0.2119,0.2131,0.2139,0.2145,0.2148,0.2151,0.2152,0.2151,0.215,0.2148,0.2145,0.2141,0.2137,0.2132,0.2127,0.2121,0.2116,0.211,0.2104,0.2098,0.2091,0.2085,0.2078,0.2072,0.2065,0.2058,0.2052,0.2045,0.2038,0.2032],
|
|
1750
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.0399,0.0695,0.0922,0.1099,0.124,0.1353,0.1447,0.1524,0.1587,0.1641,0.1686,0.1736,0.1764,0.1787,0.1807,0.1822,0.1836,0.1848,0.1857,0.1864,0.187,0.1874,0.1878,0.188,0.1882,0.1883,0.1883,0.1883,0.1881,0.188,0.1878,0.1876,0.1874,0.1871,0.1868,0.1865,0.1862,0.1859,0.1855,0.1851,0.1847],
|
|
1751
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.0303,0.0539,0.0727,0.088,0.1005,0.1109,0.1197,0.1271,0.1334,0.1399,0.1443,0.148,0.1512,0.1539,0.1563,0.1584,0.1601,0.1616,0.163,0.1641,0.1651,0.166,0.1667,0.1673,0.1678,0.1683,0.1686,0.1689,0.1691,0.1693,0.1694,0.1695,0.1695,0.1695,0.1695,0.1695,0.1693,0.1692,0.1691],
|
|
1752
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.024,0.0433,0.0593,0.0725,0.0837,0.0932,0.1013,0.1092,0.115,0.1201,0.1245,0.1283,0.1316,0.1346,0.1372,0.1395,0.1415,0.1433,0.1449,0.1463,0.1475,0.1487,0.1496,0.1505,0.1513,0.152,0.1526,0.1531,0.1535,0.1539,0.1542,0.1545,0.1548,0.155,0.1551,0.1553,0.1554],
|
|
1753
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.0196,0.0359,0.0496,0.0612,0.0711,0.0804,0.0878,0.0941,0.0997,0.1046,0.1089,0.1128,0.1162,0.1192,0.1219,0.1243,0.1265,0.1284,0.1301,0.1317,0.1331,0.1344,0.1356,0.1366,0.1376,0.1384,0.1392,0.1398,0.1405,0.141,0.1415,0.142,0.1423,0.1427,0.143],
|
|
1754
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.0163,0.0303,0.0422,0.053,0.0618,0.0696,0.0764,0.0823,0.0876,0.0923,0.0965,0.1002,0.1036,0.1066,0.1093,0.1118,0.114,0.116,0.1179,0.1196,0.1211,0.1225,0.1237,0.1249,0.1259,0.1269,0.1278,0.1286,0.1293,0.13,0.1306,0.1312,0.1317],
|
|
1755
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.014,0.0263,0.0368,0.0459,0.0539,0.061,0.0672,0.0728,0.0778,0.0822,0.0862,0.0899,0.0931,0.0961,0.0988,0.1013,0.1036,0.1056,0.1075,0.1092,0.1108,0.1123,0.1136,0.1149,0.116,0.117,0.118,0.1189,0.1197,0.1205,0.1212],
|
|
1756
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0.0122,0.0228,0.0321,0.0403,0.0476,0.054,0.0598,0.065,0.0697,0.0739,0.0777,0.0812,0.0844,0.0873,0.09,0.0924,0.0947,0.0967,0.0986,0.1004,0.102,0.1035,0.1049,0.1062,0.1073,0.1085,0.1095,0.1105,0.1113],
|
|
1757
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0107,0.02,0.0284,0.0358,0.0424,0.0483,0.0537,0.0585,0.0629,0.0669,0.0706,0.0739,0.077,0.0798,0.0824,0.0848,0.087,0.0891,0.0909,0.0927,0.0943,0.0959,0.0972,0.0986,0.0998,0.101,0.102],
|
|
1758
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0094,0.0178,0.0253,0.032,0.0381,0.0435,0.0485,0.053,0.0572,0.061,0.0645,0.0677,0.0706,0.0733,0.0759,0.0782,0.0804,0.0824,0.0842,0.086,0.0876,0.0892,0.0906,0.0919,0.0932],
|
|
1759
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0084,0.0159,0.0227,0.0289,0.0344,0.0395,0.0441,0.0484,0.0523,0.0559,0.0592,0.0622,0.0651,0.0677,0.0701,0.0724,0.0745,0.0765,0.0783,0.0801,0.0817,0.0832,0.0846],
|
|
1760
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0076,0.0144,0.0206,0.0262,0.0314,0.0361,0.0404,0.0444,0.0481,0.0515,0.0546,0.0575,0.0602,0.0628,0.0651,0.0673,0.0694,0.0713,0.0731,0.0748,0.0764],
|
|
1761
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0068,0.0131,0.0187,0.0239,0.0287,0.0331,0.0372,0.0409,0.0444,0.0476,0.0506,0.0534,0.056,0.0584,0.0607,0.0628,0.0648,0.0667,0.0685],
|
|
1762
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0062,0.0119,0.0172,0.022,0.0264,0.0305,0.0343,0.0379,0.0411,0.0442,0.0471,0.0497,0.0522,0.0546,0.0568,0.0588,0.0608],
|
|
1763
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0057,0.011,0.0158,0.0203,0.0244,0.0283,0.0318,0.0352,0.0383,0.0412,0.0439,0.0465,0.0489,0.0511,0.0532],
|
|
1764
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0053,0.0101,0.0146,0.0188,0.0227,0.0263,0.0296,0.0328,0.0357,0.0385,0.0411,0.0436,0.0459],
|
|
1765
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0049,0.0094,0.0136,0.0175,0.0211,0.0245,0.0277,0.0307,0.0335,0.0361,0.0386],
|
|
1766
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0045,0.0087,0.0126,0.0163,0.0197,0.0229,0.0259,0.0288,0.0314],
|
|
1767
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0042,0.0081,0.0118,0.0153,0.0185,0.0215,0.0244],
|
|
1768
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0039,0.0076,0.0111,0.0143,0.0174],
|
|
1769
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0037,0.0071,0.0104],
|
|
1770
|
+
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,0,0.0035]
|
|
1771
|
+
],
|
|
1772
|
+
p(W: number, N: number){
|
|
1773
|
+
let wArray = Distributions.Normal.ShapiroWilk.pChart.wValues[N - 3];
|
|
1774
|
+
let inflection = wArray.findIndex(w => W <= w);
|
|
1775
|
+
let w1 = wArray[inflection-1]
|
|
1776
|
+
let w2 = wArray[inflection];
|
|
1777
|
+
let p1 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection - 1]
|
|
1778
|
+
let p2 = Distributions.Normal.ShapiroWilk.pChart.pValues[inflection]
|
|
1779
|
+
return p1 + ((p2-p1)/(w2-w1))*(W-w1);
|
|
1780
|
+
},
|
|
1781
|
+
pChart:{
|
|
1782
|
+
wValues: [[0.753,0.756,0.767,0.789,0.959,0.998,0.999,1,1,],
|
|
1783
|
+
[0.687,0.707,0.748,0.792,0.935,0.987,0.992,0.996,0.997,],
|
|
1784
|
+
[0.686,0.715,0.762,0.806,0.927,0.979,0.986,0.991,0.993,],
|
|
1785
|
+
[0.713,0.743,0.788,0.826,0.927,0.974,0.981,0.986,0.989,],
|
|
1786
|
+
[0.73,0.76,0.803,0.838,0.928,0.972,0.979,0.985,0.988,],
|
|
1787
|
+
[0.749,0.778,0.818,0.851,0.932,0.972,0.978,0.984,0.987,],
|
|
1788
|
+
[0.764,0.791,0.829,0.859,0.935,0.972,0.978,0.984,0.986,],
|
|
1789
|
+
[0.781,0.806,0.842,0.869,0.938,0.972,0.978,0.983,0.986,],
|
|
1790
|
+
[0.792,0.817,0.85,0.876,0.94,0.973,0.979,0.984,0.986,],
|
|
1791
|
+
[0.805,0.828,0.859,0.883,0.943,0.973,0.979,0.984,0.986,],
|
|
1792
|
+
[0.814,0.837,0.866,0.889,0.945,0.974,0.979,0.984,0.986,],
|
|
1793
|
+
[0.825,0.846,0.874,0.895,0.947,0.975,0.98,0.984,0.986,],
|
|
1794
|
+
[0.835,0.855,0.881,0.901,0.95,0.975,0.98,0.984,0.987,],
|
|
1795
|
+
[0.844,0.863,0.887,0.906,0.952,0.976,0.981,0.985,0.987,],
|
|
1796
|
+
[0.851,0.869,0.892,0.91,0.954,0.977,0.981,0.985,0.987,],
|
|
1797
|
+
[0.858,0.874,0.897,0.914,0.956,0.978,0.982,0.986,0.988,],
|
|
1798
|
+
[0.863,0.879,0.901,0.917,0.957,0.978,0.982,0.986,0.988,],
|
|
1799
|
+
[0.868,0.884,0.905,0.92,0.959,0.979,0.983,0.986,0.988,],
|
|
1800
|
+
[0.873,0.888,0.908,0.923,0.96,0.98,0.983,0.987,0.989,],
|
|
1801
|
+
[0.878,0.892,0.911,0.926,0.961,0.98,0.984,0.987,0.989,],
|
|
1802
|
+
[0.881,0.895,0.914,0.928,0.962,0.981,0.984,0.987,0.989,],
|
|
1803
|
+
[0.884,0.898,0.916,0.93,0.963,0.981,0.984,0.987,0.989,],
|
|
1804
|
+
[0.888,0.901,0.918,0.931,0.964,0.981,0.985,0.988,0.989,],
|
|
1805
|
+
[0.891,0.904,0.92,0.933,0.965,0.982,0.985,0.988,0.989,],
|
|
1806
|
+
[0.894,0.906,0.923,0.935,0.965,0.982,0.985,0.988,0.99,],
|
|
1807
|
+
[0.896,0.908,0.924,0.936,0.966,0.982,0.985,0.988,0.99,],
|
|
1808
|
+
[0.898,0.91,0.926,0.937,0.966,0.982,0.985,0.988,0.99,],
|
|
1809
|
+
[0.9,0.912,0.927,0.939,0.967,0.983,0.985,0.988,0.99,],
|
|
1810
|
+
[0.902,0.914,0.929,0.94,0.967,0.983,0.986,0.988,0.99,],
|
|
1811
|
+
[0.904,0.915,0.93,0.941,0.968,0.983,0.986,0.988,0.99,],
|
|
1812
|
+
[0.906,0.917,0.931,0.942,0.968,0.983,0.986,0.989,0.99,],
|
|
1813
|
+
[0.908,0.919,0.933,0.943,0.969,0.983,0.986,0.989,0.99,],
|
|
1814
|
+
[0.91,0.92,0.934,0.944,0.969,0.984,0.986,0.989,0.99,],
|
|
1815
|
+
[0.912,0.922,0.935,0.945,0.97,0.984,0.986,0.989,0.99,],
|
|
1816
|
+
[0.914,0.924,0.936,0.946,0.97,0.984,0.987,0.989,0.99,],
|
|
1817
|
+
[0.916,0.925,0.938,0.947,0.971,0.984,0.987,0.989,0.99,],
|
|
1818
|
+
[0.917,0.927,0.939,0.948,0.971,0.984,0.987,0.989,0.991,],
|
|
1819
|
+
[0.919,0.928,0.94,0.949,0.972,0.985,0.987,0.989,0.991,],
|
|
1820
|
+
[0.92,0.929,0.941,0.95,0.972,0.985,0.987,0.989,0.991,],
|
|
1821
|
+
[0.922,0.93,0.942,0.951,0.972,0.985,0.987,0.989,0.991,],
|
|
1822
|
+
[0.923,0.932,0.943,0.951,0.973,0.985,0.987,0.99,0.991,],
|
|
1823
|
+
[0.924,0.933,0.944,0.952,0.973,0.985,0.987,0.99,0.991,],
|
|
1824
|
+
[0.926,0.934,0.945,0.953,0.973,0.985,0.988,0.99,0.991,],
|
|
1825
|
+
[0.927,0.935,0.945,0.953,0.974,0.985,0.988,0.99,0.991,],
|
|
1826
|
+
[0.928,0.936,0.946,0.954,0.974,0.985,0.988,0.99,0.991,],
|
|
1827
|
+
[0.929,0.937,0.947,0.954,0.974,0.985,0.988,0.99,0.991,],
|
|
1828
|
+
[0.929,0.939,0.947,0.955,0.974,0.985,0.988,0.99,0.991,],
|
|
1829
|
+
[0.93,0.938,0.947,0.955,0.974,0.985,0.988,0.99,0.991,]],
|
|
1830
|
+
pValues: [0.01,0.02,0.05,0.1,0.5,0.9,0.95,0.98,0.99,]
|
|
1831
|
+
}
|
|
1682
1832
|
}
|
|
1683
1833
|
},
|
|
1684
1834
|
T: {
|
|
@@ -2403,6 +2553,55 @@ export const StDev = {
|
|
|
2403
2553
|
}
|
|
2404
2554
|
}
|
|
2405
2555
|
|
|
2556
|
+
var Covariance = {
|
|
2557
|
+
/**
|
|
2558
|
+
* Calculates the population covariance of the arrays supplied.
|
|
2559
|
+
* @customfunction
|
|
2560
|
+
* @param xData The first array of numbers.
|
|
2561
|
+
* @param yData The second array of numbers.
|
|
2562
|
+
*/
|
|
2563
|
+
P(xData: number[], yData: number[]){
|
|
2564
|
+
let xBar = Mean(xData);
|
|
2565
|
+
let yBar = Mean(yData);
|
|
2566
|
+
let sum = 0;
|
|
2567
|
+
|
|
2568
|
+
for(let i = 0; i < xData.length; i++){
|
|
2569
|
+
sum += (xData[i]-xBar)*(yData[i]-yBar);
|
|
2570
|
+
}
|
|
2571
|
+
|
|
2572
|
+
return sum/xData.length;
|
|
2573
|
+
},
|
|
2574
|
+
/**
|
|
2575
|
+
* Calculates the sample covariance of the arrays supplied.
|
|
2576
|
+
* @customfunction
|
|
2577
|
+
* @param xData The first array of numbers.
|
|
2578
|
+
* @param yData The second array of numbers.
|
|
2579
|
+
*/
|
|
2580
|
+
S(xData: number[], yData: number[]){
|
|
2581
|
+
let xBar = Mean(xData);
|
|
2582
|
+
let yBar = Mean(yData);
|
|
2583
|
+
let sum = 0;
|
|
2584
|
+
|
|
2585
|
+
for(let i = 0; i < xData.length; i++){
|
|
2586
|
+
sum += (xData[i]-xBar)*(yData[i]-yBar);
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
return sum/(xData.length-1);
|
|
2590
|
+
},
|
|
2591
|
+
}
|
|
2592
|
+
/**
|
|
2593
|
+
* Calculates the correlation coefficient of the arrays supplied.
|
|
2594
|
+
* @customfunction
|
|
2595
|
+
* @param xData The first array of numbers.
|
|
2596
|
+
* @param yData The second array of numbers.
|
|
2597
|
+
*/
|
|
2598
|
+
function Correlate(xData: number[], yData: number[]){
|
|
2599
|
+
let cov = Covariance.S(xData, yData);
|
|
2600
|
+
let den = StDev.S(xData)*StDev.S(yData);
|
|
2601
|
+
|
|
2602
|
+
return cov/den;
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2406
2605
|
/**
|
|
2407
2606
|
* Calculates the sum of the numbers supplied.
|
|
2408
2607
|
* @customfunction
|
|
@@ -3278,14 +3477,122 @@ export function CreateScatterPlot(data: DataSet[], title?: string, chartSettings
|
|
|
3278
3477
|
* @param data An array of data sets to check
|
|
3279
3478
|
* @param UCL Upper Control Limit
|
|
3280
3479
|
* @param LCL Lower Control Limit
|
|
3480
|
+
* @param CL Center Line Value
|
|
3481
|
+
* @param std Standard Deviation of Data
|
|
3281
3482
|
* @param display Display settings for out-of-control points. DEFAULT: RED SQUARE
|
|
3282
3483
|
*/
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3484
|
+
function MarkOutOfControl(data: DataSet, UCL: number, LCL: number, CL?: any, std?: any, display = new CanvasDrawSettings("red", "black", 1, 1), controlTests: number[] = [1,2,3,4,5,6,7,8]) {
|
|
3485
|
+
if(CL === undefined){CL = Mean([LCL, UCL])}
|
|
3486
|
+
if(std === undefined){std = (CL - LCL)/3}
|
|
3487
|
+
let Test2 = 0;
|
|
3488
|
+
let Test3 = 0;
|
|
3489
|
+
let Test4 = 0;
|
|
3490
|
+
let Test5 = [0,0,0];
|
|
3491
|
+
let Test6 = [0, 0, 0, 0, 0, 0];
|
|
3492
|
+
let Test7 = 0;
|
|
3493
|
+
let Test8 = 0;
|
|
3494
|
+
data.values.forEach((v, i) => {
|
|
3495
|
+
// Test1: One point more than 3σ from center line
|
|
3496
|
+
if (controlTests.includes(1) && (v.y > UCL || v.y < LCL)) {
|
|
3497
|
+
v.display = display;
|
|
3498
|
+
}
|
|
3499
|
+
// Test2: Nine points in a row on same side of center line
|
|
3500
|
+
if(controlTests.includes(2) && ((v.y > CL && Test2 >= 0) || (v.y < CL && Test2 <= 0))){
|
|
3501
|
+
Test2 += v.y < CL ? -1 : 1;
|
|
3502
|
+
if(Test2 >= 8 || Test2 <= -8){
|
|
3503
|
+
v.display = display;
|
|
3504
|
+
}
|
|
3505
|
+
}else{
|
|
3506
|
+
Test2 = 0;
|
|
3507
|
+
}
|
|
3508
|
+
|
|
3509
|
+
if(i !== 0){
|
|
3510
|
+
// Test3: Six points in a row increasing or decreasing
|
|
3511
|
+
if(controlTests.includes(3) && ((v.y > data.values[i-1].y && Test3 >= 0) || (v.y < data.values[i-1].y && Test3 <= 0))){
|
|
3512
|
+
Test3 += v.y < data.values[i-1].y ? -1 : 1;
|
|
3513
|
+
if(Test3 >= 5 || Test3 <= -6){
|
|
3286
3514
|
v.display = display;
|
|
3515
|
+
}
|
|
3516
|
+
}else{
|
|
3517
|
+
Test3 = 0;
|
|
3287
3518
|
}
|
|
3288
|
-
|
|
3519
|
+
|
|
3520
|
+
//Test4: Fourteen points in a row, alternating up and down
|
|
3521
|
+
if(controlTests.includes(4) && v.y < data.values[i-1].y){
|
|
3522
|
+
if(Test4 >= 0){
|
|
3523
|
+
Test4 = -1*(Test4 + 1);
|
|
3524
|
+
}else{Test4 = 0}
|
|
3525
|
+
if(Math.abs(Test4) >= 13){
|
|
3526
|
+
v.display = display;
|
|
3527
|
+
}
|
|
3528
|
+
}
|
|
3529
|
+
if(controlTests.includes(4) && v.y > data.values[i-1].y){
|
|
3530
|
+
if(Test4 <= 0){
|
|
3531
|
+
Test4 = -1*(Test4 - 1);
|
|
3532
|
+
}else{Test4 = 0}
|
|
3533
|
+
if(Math.abs(Test4) >= 13){
|
|
3534
|
+
v.display = display;
|
|
3535
|
+
}
|
|
3536
|
+
}
|
|
3537
|
+
}
|
|
3538
|
+
|
|
3539
|
+
// Test5: Two out of three points more than 2σ from the center line (same side)
|
|
3540
|
+
Test5[0] = Test5[1];
|
|
3541
|
+
Test5[1] = Test5[2];
|
|
3542
|
+
if (controlTests.includes(5) && v.y > 2*std+CL) {
|
|
3543
|
+
Test5[2] = 1;
|
|
3544
|
+
if(Test5[0] === 1 || Test5[1] === 1){
|
|
3545
|
+
v.display = display;
|
|
3546
|
+
}
|
|
3547
|
+
}
|
|
3548
|
+
if (controlTests.includes(5) && v.y < CL-2*std) {
|
|
3549
|
+
Test5[2] = -1;
|
|
3550
|
+
if(Test5[0] === -1 || Test5[1] === -1){
|
|
3551
|
+
v.display = display;
|
|
3552
|
+
}
|
|
3553
|
+
}
|
|
3554
|
+
|
|
3555
|
+
// Test6: Four out of five points more than 1σ from center line (same side)
|
|
3556
|
+
Test6[0] = Test6[1];
|
|
3557
|
+
Test6[1] = Test6[2];
|
|
3558
|
+
Test6[2] = Test6[3];
|
|
3559
|
+
Test6[3] = Test6[4];
|
|
3560
|
+
Test6[4] = Test6[5];
|
|
3561
|
+
if (controlTests.includes(6) && v.y > std+CL) {
|
|
3562
|
+
Test6[5] = 1;
|
|
3563
|
+
let plus = Test6.filter(t => t === 1);
|
|
3564
|
+
if(plus.length >= 4){
|
|
3565
|
+
v.display = display
|
|
3566
|
+
}
|
|
3567
|
+
}else if (controlTests.includes(6) && v.y < CL-std) {
|
|
3568
|
+
Test6[5] = -1;
|
|
3569
|
+
let plus = Test6.filter(t => t === -1);
|
|
3570
|
+
if(plus.length >= 4){
|
|
3571
|
+
v.display = display
|
|
3572
|
+
}
|
|
3573
|
+
}else{Test6[5] = 0}
|
|
3574
|
+
|
|
3575
|
+
// Test7: Fifteen points in a row within 1σ of center line (either side)
|
|
3576
|
+
if(controlTests.includes(7) && v.y >= CL - std && v.y <= CL + std){
|
|
3577
|
+
Test7 += 1;
|
|
3578
|
+
if(Test7 >= 15){
|
|
3579
|
+
v.display = display;
|
|
3580
|
+
}
|
|
3581
|
+
}else{
|
|
3582
|
+
Test7 = 0
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
// Test7: Fifteen points in a row within 1σ of center line (either side)
|
|
3586
|
+
if(controlTests.includes(8) && (v.y < CL - std || v.y > CL + std)){
|
|
3587
|
+
Test8 += 1;
|
|
3588
|
+
if(Test8 >= 8){
|
|
3589
|
+
v.display = display;
|
|
3590
|
+
}
|
|
3591
|
+
}else{
|
|
3592
|
+
Test8 = 0
|
|
3593
|
+
}
|
|
3594
|
+
|
|
3595
|
+
});
|
|
3289
3596
|
}
|
|
3290
3597
|
|
|
3291
3598
|
/**
|
|
@@ -3837,6 +4144,33 @@ function QQDistributionModificationX(p: number, distribution: string, data: numb
|
|
|
3837
4144
|
}
|
|
3838
4145
|
return p;
|
|
3839
4146
|
}
|
|
4147
|
+
|
|
4148
|
+
function CreateControlChart(data: number[], chartTitle?: string, UCL?: number, LCL?: number){
|
|
4149
|
+
let centerline = Mean(data);
|
|
4150
|
+
let std = StDev.S(data);
|
|
4151
|
+
|
|
4152
|
+
if(UCL === undefined){
|
|
4153
|
+
UCL = centerline + 3 * std;
|
|
4154
|
+
}
|
|
4155
|
+
if(LCL === undefined){
|
|
4156
|
+
LCL = centerline - 3 * std;
|
|
4157
|
+
}
|
|
4158
|
+
let dataSet = new DataSet(data.map((d,i) => {return new Point(i,d)}));
|
|
4159
|
+
dataSet.line.type = "straight";
|
|
4160
|
+
let customGridlines = [
|
|
4161
|
+
new CustomGridline(centerline, `x\u0304 = ${Math.round(centerline * 1e3) / 1e3}`, new CanvasDrawSettings("", "green"), void 0, true),
|
|
4162
|
+
new CustomGridline(LCL, `LCL = ${Math.round(LCL * 1e3) / 1e3}`, new CanvasDrawSettings("", "maroon"), void 0, true),
|
|
4163
|
+
new CustomGridline(UCL, `UCL = ${Math.round(UCL * 1e3) / 1e3}`, new CanvasDrawSettings("", "maroon"), void 0, true),
|
|
4164
|
+
];
|
|
4165
|
+
let chartSettings = new ChartSettings();
|
|
4166
|
+
chartSettings.axis.y.customGridlines = customGridlines;
|
|
4167
|
+
|
|
4168
|
+
MarkOutOfControl(dataSet, UCL, LCL, centerline, std);
|
|
4169
|
+
|
|
4170
|
+
let graph = CreateScatterPlot([dataSet], chartTitle, chartSettings);
|
|
4171
|
+
return graph
|
|
4172
|
+
}
|
|
4173
|
+
|
|
3840
4174
|
// End Graphs
|
|
3841
4175
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
3842
4176
|
/** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Fixed bug in Normal.KolmogorovSmirnov() where data was not being sorted.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
- Added new functionality
|
|
2
|
+
- - Covariance.P()
|
|
3
|
+
- - Covariance.S()
|
|
4
|
+
- - Correlate()
|
|
5
|
+
- - ShapiroWilk
|
|
6
|
+
- - - Test(): performs both the standard and expanded with built-in logic to handle sample size constraints
|
|
7
|
+
- - - constants: an array containing all ShapiroWilk constants based on sample size and constant locus
|
|
8
|
+
- - - p(): returns associated p-value from ShapiroWilk tables based on given W and N
|
|
9
|
+
- - - pChart: an object containing arrays used to calculate associated p-value based on W and N
|
|
10
|
+
- - CreateControlChart()
|
|
11
|
+
- - MarkOutOfControl(): included new tests
|