mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-23 14:58:40 +00:00
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:
parent
a08c63a021
commit
5185b52c91
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user