首页 > 解决方案 > 数字数组的简单方差和标准差

问题描述

我一直在阅读有关 PHP 标准偏差和方差的所有内容,在这里和那里在线找到了许多示例,但仍然没有一个给我与 Excel 相同的结果。

说我有:

  $array1 = array(5,46,37,21,8,55,1);

我只想要数组中这些数字的方差和标准差......

任何简单直接的线索?

标签: phpstandard-deviationvariance

解决方案


https://www.mathsisfun.com/data/standard-deviation.html

class SomeClass
{
    public $variance = 0.0;
    public $deviation = 0.0;

    public function run(array $array = [])
    {
        if (empty($array)) {
            echo "Passed array can't be empty and must contain only numbers.";
            die();
        }

        $this->variance = $this->getVariance($array);
        $this->deviation = $this->getStdDeviation($this->variance);
    }

    /**
    * Calculate variance.
     * Note: If no huge number of items we will not use "Sample" variance (but n items instead: n-1 items)
     *
     * @param array $arrayOfNumbers
     * @return float
     */
    private function getVariance(array $arrayOfNumbers)
    {
        $variance = 0.0;
        $totalElementsInArray = count($arrayOfNumbers);
        // Calc Mean.
        $averageValue = array_sum($arrayOfNumbers) / $totalElementsInArray;

        foreach ($arrayOfNumbers as $item) {
            $variance += pow(abs($item - $averageValue), 2);
        }

        return $variance;
    }

    /**
    * Simple deviation.
    * 
    * @param float $variance
    * @return float
    */
    private function getStdDeviation($variance)
    {
        return (float)sqrt($variance);
    }
}

$stat = new SomeClass;
$stat->run([5,46,37,21,8,55,1]);

echo "\n\nRESULTS:\n";
echo "\nVariance: " . $stat->variance;
echo "\nDeviation: " . $stat->deviation;

推荐阅读