Skip to content

Instantly share code, notes, and snippets.

@vderyagin
Last active December 10, 2015 08:28
Show Gist options
  • Save vderyagin/4407697 to your computer and use it in GitHub Desktop.
Save vderyagin/4407697 to your computer and use it in GitHub Desktop.
monkeypatched Array with some statistical methods
class Array
def mean
inject(:+).to_f / size
end
def median
s = size
idx1 = s / 2
sorted = sort
if s.odd?
sorted[idx1]
else
idx2 = idx1 - 1
(sorted[idx1] + sorted[idx2]) / 2
end
end
def mode
frequencies = group_by { |i| count i}
frequencies[frequencies.keys.max].first
end
def variance
s = size
sum, sum_of_squares = 0.0, 0.0
each do |item|
sum += item
sum_of_squares += item * item
end
sum_of_squares / s - sum * sum / s / s
end
def std_deviation
variance ** 0.5
end
# Magic number of 1.96 gives us 95% confidence:
MAGIC_NUMBER = 1.96
def confidence_interval(magic_number = MAGIC_NUMBER)
magic_number * (variance / size) ** 0.5
end
def confidence_boundaries(magic_number = MAGIC_NUMBER)
m = mean
ci = confidence_interval(magic_number)
[m - ci, m + ci]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment