Added optional mean value

Now it is possible to pass pre calculated means in case the arithmeticMean shouldn't be used
This commit is contained in:
Dennis Eichhorn 2018-02-23 11:12:07 +01:00 committed by GitHub
parent a08c63a021
commit 5185b52c91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -54,6 +54,7 @@ class MeasureOfDispersion
* Example: ([4, 5, 9, 1, 3])
*
* @param array $values Values
* @param float $mean Mean
*
* @return float
*
@ -61,9 +62,9 @@ class MeasureOfDispersion
*
* @since 1.0.0
*/
public static function empiricalVariationcoefficient(array $values) : float
public static function empiricalVariationcoefficient(array $values, float $mean = null) : float
{
$mean = Average::arithmeticMean($values);
$mean = isset($mean) ? $mean : Average::arithmeticMean($values);
if ($mean === 0) {
throw new ZeroDevisionException();
@ -78,14 +79,15 @@ class MeasureOfDispersion
* Example: ([4, 5, 9, 1, 3])
*
* @param array $values Values
* @param float $mean Mean
*
* @return float
*
* @since 1.0.0
*/
public static function standardDeviation(array $values) : float
public static function standardDeviation(array $values, float $mean = null) : float
{
$mean = Average::arithmeticMean($values);
$mean = isset($mean) ? $mean : Average::arithmeticMean($values);
$sum = 0.0;
foreach ($values as $value) {
@ -101,6 +103,7 @@ class MeasureOfDispersion
* Example: ([4, 5, 9, 1, 3])
*
* @param array $values Values
* @param float $mean Mean
*
* @return float
*
@ -108,7 +111,7 @@ class MeasureOfDispersion
*
* @since 1.0.0
*/
public static function sampleVariance(array $values) : float
public static function sampleVariance(array $values, float $mean = null) : float
{
$count = count($values);
@ -116,7 +119,7 @@ class MeasureOfDispersion
throw new ZeroDevisionException();
}
return self::empiricalVariance($values) * $count / ($count - 1);
return self::empiricalVariance($values, [], $mean) * $count / ($count - 1);
}
/**
@ -126,6 +129,7 @@ class MeasureOfDispersion
*
* @param array $values Values
* @param array $probabilities Probabilities
* @param float $mean Mean
*
* @return float
*
@ -133,7 +137,7 @@ class MeasureOfDispersion
*
* @since 1.0.0
*/
public static function empiricalVariance(array $values, array $probabilities = []) : float
public static function empiricalVariance(array $values, array $probabilities = [], float $mean = null) : float
{
$count = count($values);
$hasProbability = !empty($probabilities);
@ -142,7 +146,7 @@ class MeasureOfDispersion
throw new ZeroDevisionException();
}
$mean = $hasProbability ? Average::weightedAverage($values, $probabilities) : Average::arithmeticMean($values);
$mean = $hasProbability ? Average::weightedAverage($values, $probabilities) : (isset($mean) ? $mean : Average::arithmeticMean($values););
$sum = 0;
foreach ($values as $key => $value) {
@ -157,8 +161,10 @@ class MeasureOfDispersion
*
* Example: ([4, 5, 9, 1, 3], [4, 5, 9, 1, 3])
*
* @param array $x Values
* @param array $y Values
* @param array $x Values
* @param array $y Values
* @param array $meanX Mean
* @param array $meanY Mean
*
* @return float
*
@ -166,7 +172,7 @@ class MeasureOfDispersion
*
* @since 1.0.0
*/
public static function empiricalCovariance(array $x, array $y) : float
public static function empiricalCovariance(array $x, array $y, float $meanX = null, float $meanY = null) : float
{
$count = count($x);
@ -178,8 +184,8 @@ class MeasureOfDispersion
throw new InvalidDimensionException($count . 'x' . count($y));
}
$xMean = Average::arithmeticMean($x);
$yMean = Average::arithmeticMean($y);
$xMean = isset($meanX) ? $meanX : Average::arithmeticMean($x);
$yMean = isset($meanY) ? $meanY : Average::arithmeticMean($y);
$sum = 0.0;
@ -207,15 +213,16 @@ class MeasureOfDispersion
/**
* Get mean deviation.
*
* @param array $x Values
* @param array $x Values
* @param float $mean Mean
*
* @return float
*
* @since 1.0.0
*/
public static function meanDeviation(array $x) : float
public static function meanDeviation(array $x, float $mean = null) : float
{
$mean = Average::arithmeticMean($x);
$mean = isset($mean) ? $mean : Average::arithmeticMean($x);
$sum = 0.0;
foreach ($x as $xi) {
@ -228,15 +235,16 @@ class MeasureOfDispersion
/**
* Get mean absolute deviation.
*
* @param array $x Values
* @param array $x Values
* @param float $mean Mean
*
* @return float
*
* @since 1.0.0
*/
public static function meanAbsoluteDeviation(array $x) : float
public static function meanAbsoluteDeviation(array $x, float $mean = null) : float
{
$mean = Average::arithmeticMean($x);
$mean = isset($mean) ? $mean : Average::arithmeticMean($x);
$sum = 0.0;
foreach ($x as $xi) {
@ -249,15 +257,16 @@ class MeasureOfDispersion
/**
* Get squared mean deviation.
*
* @param array $x Values
* @param array $x Values
* @param float $mean Mean
*
* @return float
*
* @since 1.0.0
*/
public static function squaredMeanDeviation(array $x) : float
public static function squaredMeanDeviation(array $x, float $mean = null) : float
{
$mean = Average::arithmeticMean($x);
$mean = isset($mean) ? $mean : Average::arithmeticMean($x);
$sum = 0.0;
foreach ($x as $xi) {