Module: Statistica

Defined in:
lib/get_sum.rb,
lib/get_mode.rb,
lib/get_range.rb,
lib/get_stdev.rb,
lib/get_median.rb,
lib/get_product.rb,
lib/get_geo_mean.rb,
lib/get_variance.rb,
lib/get_harm_mean.rb,
lib/get_arith_mean.rb,
lib/get_percentile.rb,
lib/statistica/version.rb,
lib/get_coeff_variation.rb,
lib/get_relative_variance.rb,
lib/get_interquartile_range.rb

Constant Summary collapse

VERSION =
"0.1.3"

Instance Method Summary collapse

Instance Method Details

#get_arith_meanObject



2
3
4
5
# File 'lib/get_arith_mean.rb', line 2

def get_arith_mean
  mean = self.get_sum.to_f / self.length
  mean.round(2)
end

#get_coeff_variationObject



2
3
4
5
# File 'lib/get_coeff_variation.rb', line 2

def get_coeff_variation
  variation = self.get_stdev/self.get_arith_mean
  variation.round(2)
end

#get_geo_meanObject



2
3
4
5
# File 'lib/get_geo_mean.rb', line 2

def get_geo_mean
  geo_mean = (self.get_product) ** (1.to_f / (self.length))
  geo_mean.round(2)
end

#get_harm_meanObject



2
3
4
5
6
# File 'lib/get_harm_mean.rb', line 2

def get_harm_mean
  recip = self.map { |element|(1/element.to_f) }
  harm_mean = 1/(recip.inject(:+)/self.length)
  harm_mean.round(2)
end

#get_interquartile_rangeObject



2
3
4
# File 'lib/get_interquartile_range.rb', line 2

def get_interquartile_range
  self.get_percentile(75) - self.get_percentile(25)
end

#get_medianObject



2
3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/get_median.rb', line 2

def get_median
  # Confirm odd number of elements
  if self.sort!.length % 2 == 1
    median_odd = self[(self.length / 2)]
    median_odd
  # Confirm even number of elements
  elsif self.sort!.length % 2 == 0
    f_middle_element = self[(self.length / 2 - 1)]
    s_middle_element = self[(self.length / 2)]
    median_even = (f_middle_element + s_middle_element) / 2.0
    median_even
  end
end

#get_modeObject



2
3
4
5
6
7
8
# File 'lib/get_mode.rb', line 2

def get_mode
  array_sort = self.sort!
  elements = array_sort.uniq.map! { |actual_num| actual_num }
  elements_frequency = array_sort.uniq.map! { |num| array_sort.count(num) }
  highest_occuring_element_position = elements_frequency.index(elements_frequency.max)
  elements.fetch(highest_occuring_element_position)
end

#get_percentile(n) ⇒ Object



2
3
4
5
6
7
8
9
10
# File 'lib/get_percentile.rb', line 2

def get_percentile(n)
  sorted_array = self.sort
  percentile_index = n.to_f/100 * sorted_array.length
  if percentile_index == percentile_index.round
    result = (sorted_array[percentile_index.ceil - 1] + sorted_array[percentile_index.ceil])/2.to_f
  else
    sorted_array[percentile_index.ceil - 1]
  end
end

#get_productObject



2
3
4
# File 'lib/get_product.rb', line 2

def get_product
  self.inject(:*)
end

#get_rangeObject



2
3
4
# File 'lib/get_range.rb', line 2

def get_range
  self.max - self.min
end

#get_relative_varianceObject



2
3
4
5
6
# File 'lib/get_relative_variance.rb', line 2

def get_relative_variance
  var_square = (self.get_variance) ** 2
  rel_variance = var_square/self.get_arith_mean
  rel_variance.round(2)
end

#get_stdevObject



2
3
4
5
# File 'lib/get_stdev.rb', line 2

def get_stdev
  stdev = Math.sqrt(self.get_variance)
  stdev.round(2)
end

#get_sumObject



2
3
4
# File 'lib/get_sum.rb', line 2

def get_sum
  self.inject(:+)
end

#get_varianceObject



2
3
4
5
6
# File 'lib/get_variance.rb', line 2

def get_variance
  square_diff = self.map { |element| (element - self.get_arith_mean) ** 2 }
  variance = square_diff.get_sum / (square_diff.length - 1)
  variance.round(2)
end