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