Module: DTW::Statistics
- Defined in:
- lib/dtwrb/statistics.rb,
sig/dtwrb.rbs
Constant Summary collapse
- NORMAL_CONSISTENCY_SCALE =
1 / Phi^-1(3/4). Scaling the median absolute deviation by it makes the statistic a consistent estimator of sigma for normally distributed data.
1.4826- ESTIMATORS =
{ median: method(:median), mean: method(:mean), median_absolute_deviation: method(:median_absolute_deviation), mad: method(:median_absolute_deviation), standard_deviation: method(:standard_deviation) }.freeze
Class Method Summary collapse
- .mean(values) ⇒ ::Float?
- .median(values) ⇒ ::Float?
- .median_absolute_deviation(values) ⇒ ::Float
- .resolve(estimator) ⇒ _Estimator
- .standard_deviation(values) ⇒ ::Float
Class Method Details
.mean(values) ⇒ ::Float?
19 20 21 22 23 |
# File 'lib/dtwrb/statistics.rb', line 19 def mean(values) return nil if values.empty? values.sum(0.0) / values.length end |
.median(values) ⇒ ::Float?
11 12 13 14 15 16 17 |
# File 'lib/dtwrb/statistics.rb', line 11 def median(values) return nil if values.empty? sorted = values.sort middle = sorted.length / 2 sorted.length.odd? ? sorted[middle].to_f : 0.5 * (sorted[middle - 1] + sorted[middle]) end |
.median_absolute_deviation(values) ⇒ ::Float
25 26 27 28 29 30 |
# File 'lib/dtwrb/statistics.rb', line 25 def median_absolute_deviation(values) return 0.0 if values.length < 2 center = median(values) NORMAL_CONSISTENCY_SCALE * median(values.map { |value| (value - center).abs }) end |
.resolve(estimator) ⇒ _Estimator
47 |
# File 'lib/dtwrb/statistics.rb', line 47 def resolve(estimator) = Resolver.call(estimator, ESTIMATORS, "estimator") |
.standard_deviation(values) ⇒ ::Float
32 33 34 35 36 37 |
# File 'lib/dtwrb/statistics.rb', line 32 def standard_deviation(values) return 0.0 if values.length < 2 center = mean(values) Math.sqrt(values.sum(0.0) { |value| (value - center) ** 2 } / (values.length - 1)) end |