Example #1
0
 public function __construct(array $samples, array $stats = [])
 {
     if (count($samples) < 1) {
         throw new \LogicException('Cannot create a distribution with zero samples.');
     }
     $this->samples = $samples;
     $this->closures = ['min' => function () {
         return min($this->samples);
     }, 'max' => function () {
         return max($this->samples);
     }, 'sum' => function () {
         return array_sum($this->samples);
     }, 'stdev' => function () {
         return Statistics::stdev($this->samples);
     }, 'mean' => function () {
         return Statistics::mean($this->samples);
     }, 'mode' => function () {
         return Statistics::kdeMode($this->samples);
     }, 'variance' => function () {
         return Statistics::variance($this->samples);
     }, 'rstdev' => function () {
         $mean = $this->getMean();
         return $mean ? $this->getStdev() / $mean * 100 : 0;
     }];
     if ($diff = array_diff(array_keys($stats), array_keys($this->closures))) {
         throw new \RuntimeException(sprintf('Unknown pre-computed stat(s) encountered: "%s"', implode('", "', $diff)));
     }
     $this->stats = $stats;
 }
Example #2
0
 public function testStandardError()
 {
     $stats = new Statistics();
     $sets = $this->getSetData();
     foreach ($sets as $name => $data) {
         $stats->set($name, $data['set']);
         $this->assertEquals($data['variance'], $stats->variance($name), 'Set ' . $name . ' variance()');
     }
 }
 public function testVariance()
 {
     //
     // Sample (default)
     //
     //
     // Integers
     //
     $values = [2, 4, 4, 4, 5, 5, 7, 9];
     $sample = true;
     $result = Statistics::variance($values, $sample);
     $expected = 4.571429;
     $this->assertEquals($expected, $result, '', pow(10, -4));
     //
     // Floats
     //
     $values = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25];
     $sample = true;
     $result = Statistics::variance($values, $sample);
     $expected = 1.428571;
     $this->assertEquals($expected, $result, '', pow(10, -4));
     //
     // Population
     //
     //
     // Integers
     //
     $values = [2, 4, 4, 4, 5, 5, 7, 9];
     $sample = false;
     $result = Statistics::variance($values, $sample);
     $expected = 4;
     $this->assertIdentical($expected, $result);
     //
     // Floats
     //
     $values = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25];
     $sample = false;
     $result = Statistics::variance($values, $sample);
     $expected = 1.25;
     $this->assertIdentical($expected, $result, '', pow(10, -4));
 }