Module: Basic::Stats

Defined in:
lib/basic/stats.rb,
lib/basic/stats/version.rb

Constant Summary collapse

VERSION =
"0.0.2"
@@critical_z_table =
{
  3 => 1.15,
  4 => 1.48,
  5 => 1.71,
  6 => 1.89,
  7 => 2.02,
  8 => 2.13,
  9 => 2.21,
  10 => 2.29,
  11 => 2.34,
  12 => 2.41,
  13 => 2.46,
  14 => 2.51,
  15 => 2.55,
  16 => 2.59,
  17 => 2.62,
  18 => 2.65,
  19 => 2.68,
  20 => 2.71,
  21 => 2.73,
  22 => 2.76,
  23 => 2.78,
  24 => 2.80,
  25 => 2.82,
  26 => 2.84,
  27 => 2.86,
  28 => 2.88,
  29 => 2.89,
  30 => 2.91,
  31 => 2.92,
  32 => 2.94,
  33 => 2.95,
  34 => 2.97,
  35 => 2.98,
  36 => 2.99,
  37 => 3.00,
  38 => 3.01,
  39 => 3.03,
  40 => 3.04,
  50 => 3.13,
  60 => 3.20,
  70 => 3.26,
  80 => 3.31,
  90 => 3.35,
  100 => 3.38,
  110 => 3.42,
  120 => 3.44,
  130 => 3.47,
  140 => 3.49
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.critical_z(n) ⇒ Object



103
104
105
106
107
108
109
110
# File 'lib/basic/stats.rb', line 103

def self.critical_z(n)
  result = nil
  @@critical_z_table.keys.sort.each do |key|
    break if key > n
    result = @@critical_z_table[key]
  end
  result
end

Instance Method Details

#critical_zObject



33
34
35
# File 'lib/basic/stats.rb', line 33

def critical_z
  Stats.critical_z(self.size)
end

#meanObject



9
10
11
# File 'lib/basic/stats.rb', line 9

def mean
  self.sum/self.length.to_f
end

#medianObject



13
14
15
16
17
# File 'lib/basic/stats.rb', line 13

def median
  sorted = self.sort
  len = sorted.length
  return (sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0
end

#reject_outliersObject



37
38
39
40
# File 'lib/basic/stats.rb', line 37

def reject_outliers
  cz = self.critical_z
  self.reject { |value| z(value) > cz }
end

#reject_outliers!Object



42
43
44
45
# File 'lib/basic/stats.rb', line 42

def reject_outliers!
  cz = self.critical_z
  self.reject! { |value| z(value) > cz }
end

#sample_varianceObject



19
20
21
22
23
# File 'lib/basic/stats.rb', line 19

def sample_variance
  m = self.mean
  sum = self.inject(0){|accum, i| accum +(i-m)**2 }
  sum/(self.length - 1).to_f
end

#select_outliersObject



47
48
49
50
# File 'lib/basic/stats.rb', line 47

def select_outliers
  cz = self.critical_z
  self.select { |value| z(value) > cz }
end

#standard_deviationObject



25
26
27
# File 'lib/basic/stats.rb', line 25

def standard_deviation
  return Math.sqrt(self.sample_variance)
end

#sumObject



5
6
7
# File 'lib/basic/stats.rb', line 5

def sum
  self.inject(0){|accum, i| accum + i }
end

#z(value) ⇒ Object



29
30
31
# File 'lib/basic/stats.rb', line 29

def z(value)
  (self.mean - value).abs/standard_deviation
end