Method: Histogram.iqrange
- Defined in:
- lib/histogram.rb
.iqrange(obj, opts = {}) ⇒ Object
opts:
defaults:
:method => :moore_mccabe, :tukey
:sorted => false
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/histogram.rb', line 58 def iqrange(obj, opts={}) opt = {:method => DEFAULT_QUARTILE_METHOD, :sorted => false}.merge( opts ) srted = opt[:sorted] ? obj : obj.sort sz = srted.size return 0 if sz == 1 answer = case opt[:method] when :tukey hi_idx = sz / 2 lo_idx = (sz % 2 == 0) ? hi_idx-1 : hi_idx median(srted[hi_idx..-1]) - median(srted[0..lo_idx]) when :moore_mccabe hi_idx = sz / 2 lo_idx = hi_idx - 1 hi_idx += 1 unless sz.even? median(srted[hi_idx..-1]) - median(srted[0..lo_idx]) else raise ArgumentError, "method must be :tukey or :moore_mccabe" end answer.to_f end |