PluginProbe
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin / 6.5.1.7
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin v6.5.1.7
6.5.1.7 6.5.1.6 6.5.1.5 6.5.1.4 6.5.1.3 6.5.1.2 6.5.1.1 6.5.0.9 6.5.0.8 6.5.0.7 6.5.0.6 trunk 3.4.2.40 3.4.2.41 3.4.2.42 3.4.2.43 3.4.2.44 3.4.2.45 3.4.2.46 3.4.2.47 3.4.2.48 3.4.2.49 3.4.2.50 6.3.2 6.3.3.1 All 47 releases
wpdatatables / lib / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Calculation / Statistical / Deviations.php

Deviations.php in wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin 6.5.1.7, at lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Deviations.php

143 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PhpOffice\PhpSpreadsheet\Calculation\Statistical;
4
5 use PhpOffice\PhpSpreadsheet\Calculation\Functions;
6 use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
7
8 class Deviations
9 {
10 /**
11 * DEVSQ.
12 *
13 * Returns the sum of squares of deviations of data points from their sample mean.
14 *
15 * Excel Function:
16 * DEVSQ(value1[,value2[, ...]])
17 *
18 * @param mixed ...$args Data values
19 *
20 * @return float|string
21 */
22 public static function sumSquares(...$args)
23 {
24 $aArgs = Functions::flattenArrayIndexed($args);
25
26 $aMean = Averages::average($aArgs);
27 if (!is_numeric($aMean)) {
28 return ExcelError::NAN();
29 }
30
31 // Return value
32 $returnValue = 0.0;
33 $aCount = -1;
34 foreach ($aArgs as $k => $arg) {
35 // Is it a numeric value?
36 if (
37 (is_bool($arg)) &&
38 ((!Functions::isCellValue($k)) ||
39 (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_OPENOFFICE))
40 ) {
41 $arg = (int) $arg;
42 }
43 if ((is_numeric($arg)) && (!is_string($arg))) {
44 $returnValue += ($arg - $aMean) ** 2;
45 ++$aCount;
46 }
47 }
48
49 return $aCount === 0 ? ExcelError::VALUE() : $returnValue;
50 }
51
52 /**
53 * KURT.
54 *
55 * Returns the kurtosis of a data set. Kurtosis characterizes the relative peakedness
56 * or flatness of a distribution compared with the normal distribution. Positive
57 * kurtosis indicates a relatively peaked distribution. Negative kurtosis indicates a
58 * relatively flat distribution.
59 *
60 * @param array ...$args Data Series
61 *
62 * @return float|string
63 */
64 public static function kurtosis(...$args)
65 {
66 $aArgs = Functions::flattenArrayIndexed($args);
67 $mean = Averages::average($aArgs);
68 if (!is_numeric($mean)) {
69 return ExcelError::DIV0();
70 }
71 $stdDev = StandardDeviations::STDEV($aArgs);
72
73 if ($stdDev > 0) {
74 $count = $summer = 0;
75
76 foreach ($aArgs as $k => $arg) {
77 if ((is_bool($arg)) && (!Functions::isMatrixValue($k))) {
78 } else {
79 // Is it a numeric value?
80 if ((is_numeric($arg)) && (!is_string($arg))) {
81 $summer += (($arg - $mean) / $stdDev) ** 4;
82 ++$count;
83 }
84 }
85 }
86
87 if ($count > 3) {
88 return $summer * ($count * ($count + 1) /
89 (($count - 1) * ($count - 2) * ($count - 3))) - (3 * ($count - 1) ** 2 /
90 (($count - 2) * ($count - 3)));
91 }
92 }
93
94 return ExcelError::DIV0();
95 }
96
97 /**
98 * SKEW.
99 *
100 * Returns the skewness of a distribution. Skewness characterizes the degree of asymmetry
101 * of a distribution around its mean. Positive skewness indicates a distribution with an
102 * asymmetric tail extending toward more positive values. Negative skewness indicates a
103 * distribution with an asymmetric tail extending toward more negative values.
104 *
105 * @param array ...$args Data Series
106 *
107 * @return float|int|string The result, or a string containing an error
108 */
109 public static function skew(...$args)
110 {
111 $aArgs = Functions::flattenArrayIndexed($args);
112 $mean = Averages::average($aArgs);
113 if (!is_numeric($mean)) {
114 return ExcelError::DIV0();
115 }
116 $stdDev = StandardDeviations::STDEV($aArgs);
117 if ($stdDev === 0.0 || is_string($stdDev)) {
118 return ExcelError::DIV0();
119 }
120
121 $count = $summer = 0;
122 // Loop through arguments
123 foreach ($aArgs as $k => $arg) {
124 if ((is_bool($arg)) && (!Functions::isMatrixValue($k))) {
125 } elseif (!is_numeric($arg)) {
126 return ExcelError::VALUE();
127 } else {
128 // Is it a numeric value?
129 if ((is_numeric($arg)) && (!is_string($arg))) {
130 $summer += (($arg - $mean) / $stdDev) ** 3;
131 ++$count;
132 }
133 }
134 }
135
136 if ($count > 2) {
137 return $summer * ($count / (($count - 1) * ($count - 2)));
138 }
139
140 return ExcelError::DIV0();
141 }
142 }
143