mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-13 15:18:41 +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])
|
* Example: ([4, 5, 9, 1, 3])
|
||||||
*
|
*
|
||||||
* @param array $values Values
|
* @param array $values Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
|
|
@ -61,9 +62,9 @@ class MeasureOfDispersion
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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) {
|
if ($mean === 0) {
|
||||||
throw new ZeroDevisionException();
|
throw new ZeroDevisionException();
|
||||||
|
|
@ -78,14 +79,15 @@ class MeasureOfDispersion
|
||||||
* Example: ([4, 5, 9, 1, 3])
|
* Example: ([4, 5, 9, 1, 3])
|
||||||
*
|
*
|
||||||
* @param array $values Values
|
* @param array $values Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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;
|
$sum = 0.0;
|
||||||
|
|
||||||
foreach ($values as $value) {
|
foreach ($values as $value) {
|
||||||
|
|
@ -101,6 +103,7 @@ class MeasureOfDispersion
|
||||||
* Example: ([4, 5, 9, 1, 3])
|
* Example: ([4, 5, 9, 1, 3])
|
||||||
*
|
*
|
||||||
* @param array $values Values
|
* @param array $values Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
|
|
@ -108,7 +111,7 @@ class MeasureOfDispersion
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public static function sampleVariance(array $values) : float
|
public static function sampleVariance(array $values, float $mean = null) : float
|
||||||
{
|
{
|
||||||
$count = count($values);
|
$count = count($values);
|
||||||
|
|
||||||
|
|
@ -116,7 +119,7 @@ class MeasureOfDispersion
|
||||||
throw new ZeroDevisionException();
|
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 $values Values
|
||||||
* @param array $probabilities Probabilities
|
* @param array $probabilities Probabilities
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
|
|
@ -133,7 +137,7 @@ class MeasureOfDispersion
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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);
|
$count = count($values);
|
||||||
$hasProbability = !empty($probabilities);
|
$hasProbability = !empty($probabilities);
|
||||||
|
|
@ -142,7 +146,7 @@ class MeasureOfDispersion
|
||||||
throw new ZeroDevisionException();
|
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;
|
$sum = 0;
|
||||||
|
|
||||||
foreach ($values as $key => $value) {
|
foreach ($values as $key => $value) {
|
||||||
|
|
@ -157,8 +161,10 @@ class MeasureOfDispersion
|
||||||
*
|
*
|
||||||
* Example: ([4, 5, 9, 1, 3], [4, 5, 9, 1, 3])
|
* Example: ([4, 5, 9, 1, 3], [4, 5, 9, 1, 3])
|
||||||
*
|
*
|
||||||
* @param array $x Values
|
* @param array $x Values
|
||||||
* @param array $y Values
|
* @param array $y Values
|
||||||
|
* @param array $meanX Mean
|
||||||
|
* @param array $meanY Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
|
|
@ -166,7 +172,7 @@ class MeasureOfDispersion
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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);
|
$count = count($x);
|
||||||
|
|
||||||
|
|
@ -178,8 +184,8 @@ class MeasureOfDispersion
|
||||||
throw new InvalidDimensionException($count . 'x' . count($y));
|
throw new InvalidDimensionException($count . 'x' . count($y));
|
||||||
}
|
}
|
||||||
|
|
||||||
$xMean = Average::arithmeticMean($x);
|
$xMean = isset($meanX) ? $meanX : Average::arithmeticMean($x);
|
||||||
$yMean = Average::arithmeticMean($y);
|
$yMean = isset($meanY) ? $meanY : Average::arithmeticMean($y);
|
||||||
|
|
||||||
$sum = 0.0;
|
$sum = 0.0;
|
||||||
|
|
||||||
|
|
@ -207,15 +213,16 @@ class MeasureOfDispersion
|
||||||
/**
|
/**
|
||||||
* Get mean deviation.
|
* Get mean deviation.
|
||||||
*
|
*
|
||||||
* @param array $x Values
|
* @param array $x Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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;
|
$sum = 0.0;
|
||||||
|
|
||||||
foreach ($x as $xi) {
|
foreach ($x as $xi) {
|
||||||
|
|
@ -228,15 +235,16 @@ class MeasureOfDispersion
|
||||||
/**
|
/**
|
||||||
* Get mean absolute deviation.
|
* Get mean absolute deviation.
|
||||||
*
|
*
|
||||||
* @param array $x Values
|
* @param array $x Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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;
|
$sum = 0.0;
|
||||||
|
|
||||||
foreach ($x as $xi) {
|
foreach ($x as $xi) {
|
||||||
|
|
@ -249,15 +257,16 @@ class MeasureOfDispersion
|
||||||
/**
|
/**
|
||||||
* Get squared mean deviation.
|
* Get squared mean deviation.
|
||||||
*
|
*
|
||||||
* @param array $x Values
|
* @param array $x Values
|
||||||
|
* @param float $mean Mean
|
||||||
*
|
*
|
||||||
* @return float
|
* @return float
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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;
|
$sum = 0.0;
|
||||||
|
|
||||||
foreach ($x as $xi) {
|
foreach ($x as $xi) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user