# tablepress/3.4/libraries/vendor/PhpSpreadsheet/Calculation/Statistical/Deviations.php

TablePress – Tables in WordPress made easy, version 3.4. 141 lines.

- Page: https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/Calculation/Statistical/Deviations.php
- Raw: https://pluginprobe.com/plugins/tablepress/3.4/raw/libraries/vendor/PhpSpreadsheet/Calculation/Statistical/Deviations.php
- Modified: 2026-09-30T03:50:46+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/Calculation/Statistical/Deviations.php#L10-L20`.

```php
<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\Calculation\Statistical;

use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Functions;
use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;

class Deviations
{
	/**
				 * DEVSQ.
				 *
				 * Returns the sum of squares of deviations of data points from their sample mean.
				 *
				 * Excel Function:
				 *        DEVSQ(value1[,value2[, ...]])
				 *
				 * @param mixed ...$args Data values
				 * @return string|float
				 */
				public static function sumSquares(...$args)
	{
		$aArgs = Functions::flattenArrayIndexed($args);

		$aMean = Averages::average($aArgs);
		if (!is_numeric($aMean)) {
			return ExcelError::NAN();
		}

		// Return value
		$returnValue = 0.0;
		$aCount = -1;
		foreach ($aArgs as $k => $arg) {
			// Is it a numeric value?
			if (
				(is_bool($arg))
				&& ((!Functions::isCellValue($k))
					|| (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_OPENOFFICE))
			) {
				$arg = (int) $arg;
			}
			if ((is_numeric($arg)) && (!is_string($arg))) {
				$returnValue += ($arg - $aMean) ** 2;
				++$aCount;
			}
		}

		return $aCount === 0 ? ExcelError::VALUE() : $returnValue;
	}

	/**
				 * KURT.
				 *
				 * Returns the kurtosis of a data set. Kurtosis characterizes the relative peakedness
				 * or flatness of a distribution compared with the normal distribution. Positive
				 * kurtosis indicates a relatively peaked distribution. Negative kurtosis indicates a
				 * relatively flat distribution.
				 *
				 * @param mixed[] ...$args Data Series
				 * @return string|int|float
				 */
				public static function kurtosis(...$args)
	{
		$aArgs = Functions::flattenArrayIndexed($args);
		$mean = Averages::average($aArgs);
		if (!is_numeric($mean)) {
			return ExcelError::DIV0();
		}
		$stdDev = (float) StandardDeviations::STDEV($aArgs);

		if ($stdDev > 0) {
			$count = $summer = 0;

			foreach ($aArgs as $k => $arg) {
				if ((is_bool($arg)) && (!Functions::isMatrixValue($k))) {
				} else {
					// Is it a numeric value?
					if ((is_numeric($arg)) && (!is_string($arg))) {
						$summer += (($arg - $mean) / $stdDev) ** 4;
						++$count;
					}
				}
			}

			if ($count > 3) {
				return $summer * ($count * ($count + 1)
						/ (($count - 1) * ($count - 2) * ($count - 3))) - (3 * ($count - 1) ** 2
						/ (($count - 2) * ($count - 3)));
			}
		}

		return ExcelError::DIV0();
	}

	/**
	 * SKEW.
	 *
	 * Returns the skewness of a distribution. Skewness characterizes the degree of asymmetry
	 * of a distribution around its mean. Positive skewness indicates a distribution with an
	 * asymmetric tail extending toward more positive values. Negative skewness indicates a
	 * distribution with an asymmetric tail extending toward more negative values.
	 *
	 * @param mixed[] ...$args Data Series
	 *
	 * @return float|int|string The result, or a string containing an error
	 */
	public static function skew(...$args)
	{
		$aArgs = Functions::flattenArrayIndexed($args);
		$mean = Averages::average($aArgs);
		if (!is_numeric($mean)) {
			return ExcelError::DIV0();
		}
		$stdDev = StandardDeviations::STDEV($aArgs);
		if ($stdDev === 0.0 || is_string($stdDev)) {
			return ExcelError::DIV0();
		}

		$count = $summer = 0;
		// Loop through arguments
		foreach ($aArgs as $k => $arg) {
			if ((is_bool($arg)) && (!Functions::isMatrixValue($k))) {
			} elseif (!is_numeric($arg)) {
				return ExcelError::VALUE();
			} else {
				// Is it a numeric value?
				if (!is_string($arg)) {
					$summer += (($arg - $mean) / $stdDev) ** 3;
					++$count;
				}
			}
		}

		if ($count > 2) {
			return $summer * ($count / (($count - 1) * ($count - 2)));
		}

		return ExcelError::DIV0();
	}
}

```
