Cumulative Moving Average in PHP
Dec 14th, 2009My brother needed to figure out how to do a “moving average” in some code he was writing a while ago. I’d never done this before and couldn’t find any really simple code examples so ended up on Wikipedia where I found it’s actually called a cumulative moving average.
Super simple code example follows:
<?php
$numbers = array(1,2,3,4);
// A simple function to calculate averages
function average($array)
{
return (array_sum($array) / count($array));
}
/*
* Simple function to calculate moving average with the following parameters
* $datapoint - the most recently acquired new datapoint
* $average - the current average
* $count - the total number of items we're dealing with
*/
function cumulativeAverage($datapoint, $average, $count)
{
return $average + (($datapoint - $average) / $count);
}
// First let's print the average calculated normally so we can compare to the final result
print "Normal average:\t\t".average($numbers)."\n";
// $lastav stores the most recently calculated average
$lastav = 0;
// Loop through all the numbers in the array and calculate the cumulative average each time
for ($i = 0; $i<sizeof($numbers);$i++)
{
$lastav = cumulativeAverage($numbers[$i], $lastav, $i+1);
}
print "Cumulative Average:\t".$lastav."\n";
>>
--
1 Comment
1. VRBones replies at 16th December 2009 um 8:35 pm :
Funnily enough I’ve had to use a cumulative moving average too. Here’s the method I used to calculate the average tournament bias over 1000’s of tournaments:
AverageBiasedFinish = ((AverageBiasedFinish*(TourneyCount-1))+BiasedFinish)/TourneyCountYour method of finding the difference is neater, however I was also playing around with exponential moving averages like:
AverageBiasedFinish = ((AverageBiasedFinish*9+BiasedFinish)/10Leave a comment
Trackback URL for this entry | Commentfeed