Class: Lite::Statistics::Descriptive
- Inherits:
-
Object
- Object
- Lite::Statistics::Descriptive
- Extended by:
- Memoize::Alias
- Defined in:
- lib/lite/statistics/descriptive.rb
Instance Method Summary collapse
- #frequencies ⇒ Object
-
#initialize(collection) ⇒ Descriptive
constructor
A new instance of Descriptive.
-
#max ⇒ Object
rubocop:disable Style/RedundantSort.
-
#mean ⇒ Object
(also: #average)
rubocop:enable Style/RedundantSort.
-
#median ⇒ Object
rubocop:disable Metrics/AbcSize.
- #midrange ⇒ Object (also: #midextreme)
-
#min ⇒ Object
rubocop:disable Style/RedundantSort.
-
#mode ⇒ Object
rubocop:enable Style/RedundantSort.
- #percentile_from_value(value) ⇒ Object (also: #percentile)
- #population_coefficient_of_variation ⇒ Object
- #population_kurtosis ⇒ Object
- #population_size ⇒ Object
- #population_skewness ⇒ Object
- #population_standard_deviation ⇒ Object
- #population_standard_error ⇒ Object
- #population_summary ⇒ Object
- #population_variance ⇒ Object
- #population_zscores ⇒ Object
- #proportions ⇒ Object
- #range ⇒ Object
- #sample_coefficient_of_variation ⇒ Object (also: #coefficient_of_variation)
- #sample_kurtosis ⇒ Object (also: #kurtosis)
- #sample_size ⇒ Object (also: #size)
- #sample_skewness ⇒ Object (also: #skewness)
- #sample_standard_deviation ⇒ Object (also: #standard_deviation)
- #sample_standard_error ⇒ Object (also: #standard_error)
- #sample_summary ⇒ Object (also: #summary)
- #sample_variance ⇒ Object (also: #variance)
- #sample_zscores ⇒ Object (also: #zscores)
- #sum ⇒ Object
- #value_from_percentile(percentile) ⇒ Object (also: #percentile_rank)
Constructor Details
#initialize(collection) ⇒ Descriptive
Returns a new instance of Descriptive.
18 19 20 |
# File 'lib/lite/statistics/descriptive.rb', line 18 def initialize(collection) @collection = collection end |
Instance Method Details
#frequencies ⇒ Object
33 34 35 36 37 |
# File 'lib/lite/statistics/descriptive.rb', line 33 def frequencies return if @collection.empty? @collection.each_with_object(Hash.new(0)) { |val, hash| hash[val] += 1 } end |
#max ⇒ Object
rubocop:disable Style/RedundantSort
42 43 44 45 46 |
# File 'lib/lite/statistics/descriptive.rb', line 42 def max return if @collection.empty? sort.last end |
#mean ⇒ Object Also known as: average
rubocop:enable Style/RedundantSort
51 52 53 54 55 |
# File 'lib/lite/statistics/descriptive.rb', line 51 def mean return if @collection.empty? sum / size.to_f end |
#median ⇒ Object
rubocop:disable Metrics/AbcSize
61 62 63 64 65 66 |
# File 'lib/lite/statistics/descriptive.rb', line 61 def median return if @collection.empty? return sort[size / 2] unless size.even? (sort[(size / 2) - 1] + sort[size / 2]) / 2.0 end |
#midrange ⇒ Object Also known as: midextreme
183 184 185 186 187 |
# File 'lib/lite/statistics/descriptive.rb', line 183 def midrange return if @collection.empty? [min, max].sum / 2.0 end |
#min ⇒ Object
rubocop:disable Style/RedundantSort
72 73 74 75 76 |
# File 'lib/lite/statistics/descriptive.rb', line 72 def min return if @collection.empty? sort.first end |
#mode ⇒ Object
rubocop:enable Style/RedundantSort
81 82 83 84 85 86 87 88 |
# File 'lib/lite/statistics/descriptive.rb', line 81 def mode return if @collection.empty? top_two = frequencies.sort_by { |_, val| -val }.take(2) return if top_two.first.last == top_two.last.last top_two.first.first end |
#percentile_from_value(value) ⇒ Object Also known as: percentile
92 93 94 95 96 |
# File 'lib/lite/statistics/descriptive.rb', line 92 def percentile_from_value(value) return if @collection.empty? (sort.index(value) / size.to_f * 100).ceil end |
#population_coefficient_of_variation ⇒ Object
101 102 103 104 105 |
# File 'lib/lite/statistics/descriptive.rb', line 101 def population_coefficient_of_variation return if @collection.empty? population_standard_deviation / mean end |
#population_kurtosis ⇒ Object
115 116 117 118 119 120 121 |
# File 'lib/lite/statistics/descriptive.rb', line 115 def population_kurtosis return if @collection.empty? return 0 if size == 1 quarted_standard_deviation = population_standard_deviation**4 sum_of_power(4) / (population_size * quarted_standard_deviation.to_f) end |
#population_size ⇒ Object
109 110 111 |
# File 'lib/lite/statistics/descriptive.rb', line 109 def population_size @collection.size - 1 end |
#population_skewness ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/lite/statistics/descriptive.rb', line 125 def population_skewness return if @collection.empty? return 0 if size == 1 cubed_standard_deviation = population_standard_deviation**3 sum_of_power(3) / (population_size * cubed_standard_deviation.to_f) end |
#population_standard_deviation ⇒ Object
135 136 137 138 139 |
# File 'lib/lite/statistics/descriptive.rb', line 135 def population_standard_deviation return if @collection.empty? Math.sqrt(population_variance) end |
#population_standard_error ⇒ Object
143 144 145 146 147 |
# File 'lib/lite/statistics/descriptive.rb', line 143 def population_standard_error return if @collection.empty? population_standard_deviation / Math.sqrt(population_size) end |
#population_summary ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/lite/statistics/descriptive.rb', line 151 def population_summary base_summary.merge( population_coefficient_of_variation: population_coefficient_of_variation, population_kurtosis: population_kurtosis, population_size: population_size, population_skewness: population_skewness, population_standard_deviation: population_standard_deviation, population_standard_error: population_standard_error, population_variance: population_variance, population_zscores: population_zscores ) end |
#population_variance ⇒ Object
164 165 166 167 168 |
# File 'lib/lite/statistics/descriptive.rb', line 164 def population_variance return if @collection.empty? sum_of_power(2) / population_size.to_f end |
#population_zscores ⇒ Object
172 173 174 175 176 177 178 179 |
# File 'lib/lite/statistics/descriptive.rb', line 172 def population_zscores return if size < 2 return Hash.new(0) if population_standard_deviation.zero? @collection.each_with_object({}) do |val, hash| hash[val] ||= (val - mean) / population_standard_deviation end end |
#proportions ⇒ Object
192 193 194 195 196 |
# File 'lib/lite/statistics/descriptive.rb', line 192 def proportions return if @collection.empty? frequencies.transform_values { |val| val / size.to_f } end |
#range ⇒ Object
200 201 202 203 204 |
# File 'lib/lite/statistics/descriptive.rb', line 200 def range return if @collection.empty? max - min end |
#sample_coefficient_of_variation ⇒ Object Also known as: coefficient_of_variation
208 209 210 211 212 |
# File 'lib/lite/statistics/descriptive.rb', line 208 def sample_coefficient_of_variation return if @collection.empty? sample_standard_deviation / mean end |
#sample_kurtosis ⇒ Object Also known as: kurtosis
224 225 226 227 228 229 230 |
# File 'lib/lite/statistics/descriptive.rb', line 224 def sample_kurtosis return if @collection.empty? return 0 if size == 1 quarted_standard_deviation = sample_standard_deviation**4 sum_of_power(4) / (sample_size * quarted_standard_deviation.to_f) end |
#sample_size ⇒ Object Also known as: size
217 218 219 |
# File 'lib/lite/statistics/descriptive.rb', line 217 def sample_size @collection.size end |
#sample_skewness ⇒ Object Also known as: skewness
235 236 237 238 239 240 241 |
# File 'lib/lite/statistics/descriptive.rb', line 235 def sample_skewness return if @collection.empty? return 0 if size == 1 cubed_standard_deviation = sample_standard_deviation**3 sum_of_power(3) / (sample_size * cubed_standard_deviation.to_f) end |
#sample_standard_deviation ⇒ Object Also known as: standard_deviation
246 247 248 249 250 |
# File 'lib/lite/statistics/descriptive.rb', line 246 def sample_standard_deviation return if @collection.empty? Math.sqrt(sample_variance) end |
#sample_standard_error ⇒ Object Also known as: standard_error
255 256 257 258 259 |
# File 'lib/lite/statistics/descriptive.rb', line 255 def sample_standard_error return if @collection.empty? sample_standard_deviation / Math.sqrt(sample_size) end |
#sample_summary ⇒ Object Also known as: summary
264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/lite/statistics/descriptive.rb', line 264 def sample_summary base_summary.merge( sample_coefficient_of_variation: sample_coefficient_of_variation, sample_kurtosis: sample_kurtosis, sample_size: sample_size, sample_skewness: sample_skewness, sample_standard_deviation: sample_standard_deviation, sample_standard_error: sample_standard_error, sample_variance: sample_variance, sample_zscores: sample_zscores ) end |
#sample_variance ⇒ Object Also known as: variance
279 280 281 282 283 |
# File 'lib/lite/statistics/descriptive.rb', line 279 def sample_variance return if @collection.empty? sum_of_power(2) / sample_size.to_f end |
#sample_zscores ⇒ Object Also known as: zscores
288 289 290 291 292 293 294 295 |
# File 'lib/lite/statistics/descriptive.rb', line 288 def sample_zscores return if size < 2 return Hash.new(0) if sample_standard_deviation.zero? @collection.each_with_object({}) do |val, hash| hash[val] ||= (val - mean) / sample_standard_deviation end end |
#sum ⇒ Object
300 301 302 |
# File 'lib/lite/statistics/descriptive.rb', line 300 def sum @collection.sum end |
#value_from_percentile(percentile) ⇒ Object Also known as: percentile_rank
306 307 308 309 310 311 |
# File 'lib/lite/statistics/descriptive.rb', line 306 def value_from_percentile(percentile) return if @collection.empty? index = (percentile.to_f / 100 * size).ceil sort[index] end |