Class: Array

Inherits:
Object
  • Object
show all
Defined in:
lib/rstat/core_ext/array/sum.rb,
lib/rstat/core_ext/array/product.rb,
lib/rstat/core_ext/array/descriptive_statistics/shape/moment.rb,
lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb,
lib/rstat/core_ext/array/descriptive_statistics/location/mode.rb,
lib/rstat/core_ext/array/descriptive_statistics/shape/kurtosis.rb,
lib/rstat/core_ext/array/descriptive_statistics/shape/skewness.rb,
lib/rstat/core_ext/array/descriptive_statistics/shape/variance.rb,
lib/rstat/core_ext/array/descriptive_statistics/location/median.rb,
lib/rstat/core_ext/array/descriptive_statistics/dispersion/range.rb,
lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb,
lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb,
lib/rstat/core_ext/array/descriptive_statistics/dispersion/standard_deviation.rb

Instance Method Summary collapse

Instance Method Details

#arithmetric_meanObject



6
7
8
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 6

def arithmetric_mean
  self.mean
end

#central_moment(k) ⇒ Object



2
3
4
5
6
7
8
9
10
# File 'lib/rstat/core_ext/array/descriptive_statistics/shape/moment.rb', line 2

def central_moment(k)
  if k < 0
    nil
  else
    mean = self.mean

    (1.0 / self.length) * self.map{ |x| (x - mean) ** k }.sum
  end
end

#coefficient_of_dispersionObject



10
11
12
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 10

def coefficient_of_dispersion
  self.index_of_dispersion
end

#coefficient_of_variationObject



10
11
12
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/standard_deviation.rb', line 10

def coefficient_of_variation
  self.standard_deviation / self.mean
end

#dispersion_indexObject



6
7
8
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 6

def dispersion_index
  self.index_of_dispersion
end

#fano_factorObject



22
23
24
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 22

def fano_factor
  self.index_of_dispersion
end

#geometric_meanObject



10
11
12
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 10

def geometric_mean
  self.product.to_f ** (1.0 / self.length)
end

#harmonic_meanObject



14
15
16
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 14

def harmonic_mean
  self.length / self.map{ |x| 1.0 / x }.sum.to_f
end

#index_of_dispersionObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 2

def index_of_dispersion
  self.variance / self.mean
end

#interquartile_rangeObject



10
11
12
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb', line 10

def interquartile_range
  self.percentile(75) - self.percentile(25)
end

#iqrObject



14
15
16
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb', line 14

def iqr
  self.interquartile_range
end

#kurtosisObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/shape/kurtosis.rb', line 2

def kurtosis
  (self.central_moment(4) / self.variance ** 2) - 3
end

#meanObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 2

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

#medianObject



2
3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/median.rb', line 2

def median
  if self.length != 0
    copy = self.sort

    if copy.length % 2 == 0
      (copy[copy.length / 2 - 1] + copy[copy.length / 2]) / 2.0
    else
      copy[copy.length / 2]
    end
  else
    nil
  end
end

#middle_fiftyObject



22
23
24
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb', line 22

def middle_fifty
  self.interquartile_range
end

#midspreadObject



18
19
20
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb', line 18

def midspread
  self.interquartile_range
end

#modeObject



2
3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mode.rb', line 2

def mode
  if self.length <= 1
    return self
  end

  seen = Hash.new(0)

  self.each{ |value| seen[value] += 1 }

  max = seen.values.max

  seen.find_all{ |key, value| value == max }.map{ |key, value| key }.sort
end

#percentile(p) ⇒ Object



2
3
4
5
6
7
8
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb', line 2

def percentile(p)
  if p < 0 || p > 100
    nil
  else
    self.sort[((p.to_f / 100.0) * self.length.to_f) - 0.5]
  end
end

#power_mean(p = 1) ⇒ Object



22
23
24
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 22

def power_mean(p = 1)
  ((1.0 / self.length) * self.map{ |x| x ** p }.sum.to_f) ** (1.0 / p)
end

#productObject



2
3
4
# File 'lib/rstat/core_ext/array/product.rb', line 2

def product
  self.inject(:*)
end

#quadratic_meanObject



18
19
20
# File 'lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb', line 18

def quadratic_mean
  self.power_mean(2)
end

#rangeObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/range.rb', line 2

def range
  self.max - self.min
end

#raw_moment(k) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/rstat/core_ext/array/descriptive_statistics/shape/moment.rb', line 12

def raw_moment(k)
  if k < 0
    nil
  else
    (1.0 / self.length) * self.map{ |x| x ** k }.sum
  end
end

#skewnessObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/shape/skewness.rb', line 2

def skewness
  self.central_moment(3) / (self.variance ** 1.5)
end

#standard_deviationObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/standard_deviation.rb', line 2

def standard_deviation
  Math.sqrt(self.variance)
end

#std_devObject



6
7
8
# File 'lib/rstat/core_ext/array/descriptive_statistics/dispersion/standard_deviation.rb', line 6

def std_dev
  self.standard_deviation
end

#sumObject



2
3
4
# File 'lib/rstat/core_ext/array/sum.rb', line 2

def sum
  self.inject(:+)
end

#varianceObject



2
3
4
# File 'lib/rstat/core_ext/array/descriptive_statistics/shape/variance.rb', line 2

def variance
  self.central_moment 2
end

#variance_to_mean_ratioObject



14
15
16
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 14

def variance_to_mean_ratio
  self.index_of_dispersion
end

#vmrObject



18
19
20
# File 'lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb', line 18

def vmr
  self.index_of_dispersion
end