For when it’s just as quick to roll your own …
# In each of these functions, data is just an array of numbers
# average
def avg(data)
data.inject(0.0) { |sum, i| sum + i } / data.length
end
# median value
def median(data)
data.sort!
index = data.length / 2
(data.length % 2 == 0) ? data[index] : avg(data.values_at(index.floor, index.ceil))
end
# interquartile mean
def iqm(data)
data.sort!
first = (data.length/4).truncate
last = 3 * first
avg(data[first..last])
end
-
# In each of these functions, data is just an array of numbers
-
# average
-
def avg(data)
-
data.inject(0.0) { |sum, i| sum + i } / data.length
-
end
-
-
# median value
-
def median(data)
-
data.sort!
-
index = data.length / 2
-
(data.length % 2 == 0) ? data[index] : avg(data.values_at(index.floor, index.ceil))
-
end
-
-
# interquartile mean
-
def iqm(data)
-
data.sort!
-
first = (data.length/4).truncate
-
last = 3 * first
-
avg(data[first..last])
-
end
This entry was posted
on Thursday, February 22nd, 2007 at 8:32 am and is filed under programming, ruby, ruby on rails, snippets, statistics.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.