Ruby Simple Statistics - Standard Deviation
>> data
=> [1, 2, 3, 4, 5, 6]
>> data.class
=> Array
An array of numbers in ruby, (an Array object), can return the size/length, minimum (min) value, maximum (max) value. Missing methods are average, sample_variance, standard_deviation. These can added using an Enumerable module mixins.
Enumerable module mixins - add standard deviation to all arrays etc.
# Add methods to Enumerable, which makes them available to Array
module Enumerable
# sum of an array of numbers
def sum
return self.inject(0){|acc,i|acc +i}
end
# average of an array of numbers
def average
return self.sum/self.length.to_f
end
# variance of an array of numbers
def sample_variance
avg=self.average
sum=self.inject(0){|acc,i|acc +(i-avg)**2}
return(1/self.length.to_f*sum)
end
# standard deviation of an array of numbers
def standard_deviation
return Math.sqrt(self.sample_variance)
end
end # module Enumerable
Example Useage
# enter an interpreted ruby session to play with this:
$ irb
# create a new array called data with six numbers in it
>> data = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
>> data.class
=> Array
# try running the following commands. Some will work, some require the module from above.
>> data.sum
=> 21
>> data.size
=> 6
>> data.min
=> 1
>> data.max
=> 6
>> data.average
=> 3.5
>> data.sample_variance
=> 2.91666666666667
>> data.standard_deviation
=> 1.70782512765993
References
- ruby inject blogbackground on inject.
- see notes for mixins for Enumerable adding standard_deviation to Enumerable
- ruby core documentationSee Module Enumerable and Class Enumerable::Enumerator