Class: Lite::Statistics::Descriptive
- Inherits:
-
Object
- Object
- Lite::Statistics::Descriptive
- Extended by:
- Memoize::Alias
- Defined in:
- lib/lite/statistics/descriptive.rb
Constant Summary collapse
- CALCULATIONS =
%i[ frequencies max mean median midrange min mode proportions percentile_from_value population_coefficient_of_variation population_kurtosis population_size population_skewness population_standard_deviation population_standard_error population_summary population_variance population_zscores range sample_coefficient_of_variation sample_kurtosis sample_size sample_skewness sample_standard_deviation sample_standard_error sample_summary sample_variance sample_zscores sum value_from_percentile ].freeze
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.
42 43 44 |
# File 'lib/lite/statistics/descriptive.rb', line 42 def initialize(collection) @collection = collection end |
Instance Method Details
#frequencies ⇒ Object
57 58 59 60 61 |
# File 'lib/lite/statistics/descriptive.rb', line 57 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
66 67 68 69 70 |
# File 'lib/lite/statistics/descriptive.rb', line 66 def max return if @collection.empty? sort.last end |
#mean ⇒ Object Also known as: average
rubocop:enable Style/RedundantSort
75 76 77 78 79 |
# File 'lib/lite/statistics/descriptive.rb', line 75 def mean return if @collection.empty? sum / size.to_f end |
#median ⇒ Object
rubocop:disable Metrics/AbcSize
85 86 87 88 89 90 |
# File 'lib/lite/statistics/descriptive.rb', line 85 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
207 208 209 210 211 |
# File 'lib/lite/statistics/descriptive.rb', line 207 def midrange return if @collection.empty? [min, max].sum / 2.0 end |
#min ⇒ Object
rubocop:disable Style/RedundantSort
96 97 98 99 100 |
# File 'lib/lite/statistics/descriptive.rb', line 96 def min return if @collection.empty? sort.first end |
#mode ⇒ Object
rubocop:enable Style/RedundantSort
105 106 107 108 109 110 111 112 |
# File 'lib/lite/statistics/descriptive.rb', line 105 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
116 117 118 119 120 |
# File 'lib/lite/statistics/descriptive.rb', line 116 def percentile_from_value(value) return if @collection.empty? (sort.index(value) / size.to_f * 100).ceil end |
#population_coefficient_of_variation ⇒ Object
125 126 127 128 129 |
# File 'lib/lite/statistics/descriptive.rb', line 125 def population_coefficient_of_variation return if @collection.empty? population_standard_deviation / mean end |
#population_kurtosis ⇒ Object
139 140 141 142 143 144 145 |
# File 'lib/lite/statistics/descriptive.rb', line 139 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
133 134 135 |
# File 'lib/lite/statistics/descriptive.rb', line 133 def population_size @collection.size - 1 end |
#population_skewness ⇒ Object
149 150 151 152 153 154 155 |
# File 'lib/lite/statistics/descriptive.rb', line 149 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
159 160 161 162 163 |
# File 'lib/lite/statistics/descriptive.rb', line 159 def population_standard_deviation return if @collection.empty? Math.sqrt(population_variance) end |
#population_standard_error ⇒ Object
167 168 169 170 171 |
# File 'lib/lite/statistics/descriptive.rb', line 167 def population_standard_error return if @collection.empty? population_standard_deviation / Math.sqrt(population_size) end |
#population_summary ⇒ Object
175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/lite/statistics/descriptive.rb', line 175 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
188 189 190 191 192 |
# File 'lib/lite/statistics/descriptive.rb', line 188 def population_variance return if @collection.empty? sum_of_power(2) / population_size.to_f end |
#population_zscores ⇒ Object
196 197 198 199 200 201 202 203 |
# File 'lib/lite/statistics/descriptive.rb', line 196 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
216 217 218 219 220 |
# File 'lib/lite/statistics/descriptive.rb', line 216 def proportions return if @collection.empty? frequencies.transform_values { |val| val / size.to_f } end |
#range ⇒ Object
224 225 226 227 228 |
# File 'lib/lite/statistics/descriptive.rb', line 224 def range return if @collection.empty? max - min end |
#sample_coefficient_of_variation ⇒ Object Also known as: coefficient_of_variation
232 233 234 235 236 |
# File 'lib/lite/statistics/descriptive.rb', line 232 def sample_coefficient_of_variation return if @collection.empty? sample_standard_deviation / mean end |
#sample_kurtosis ⇒ Object Also known as: kurtosis
248 249 250 251 252 253 254 |
# File 'lib/lite/statistics/descriptive.rb', line 248 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
241 242 243 |
# File 'lib/lite/statistics/descriptive.rb', line 241 def sample_size @collection.size end |
#sample_skewness ⇒ Object Also known as: skewness
259 260 261 262 263 264 265 |
# File 'lib/lite/statistics/descriptive.rb', line 259 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
270 271 272 273 274 |
# File 'lib/lite/statistics/descriptive.rb', line 270 def sample_standard_deviation return if @collection.empty? Math.sqrt(sample_variance) end |
#sample_standard_error ⇒ Object Also known as: standard_error
279 280 281 282 283 |
# File 'lib/lite/statistics/descriptive.rb', line 279 def sample_standard_error return if @collection.empty? sample_standard_deviation / Math.sqrt(sample_size) end |
#sample_summary ⇒ Object Also known as: summary
288 289 290 291 292 293 294 295 296 297 298 299 |
# File 'lib/lite/statistics/descriptive.rb', line 288 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
303 304 305 306 307 |
# File 'lib/lite/statistics/descriptive.rb', line 303 def sample_variance return if @collection.empty? sum_of_power(2) / sample_size.to_f end |
#sample_zscores ⇒ Object Also known as: zscores
312 313 314 315 316 317 318 319 |
# File 'lib/lite/statistics/descriptive.rb', line 312 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
324 325 326 |
# File 'lib/lite/statistics/descriptive.rb', line 324 def sum @collection.sum end |
#value_from_percentile(percentile) ⇒ Object Also known as: percentile_rank
330 331 332 333 334 335 |
# File 'lib/lite/statistics/descriptive.rb', line 330 def value_from_percentile(percentile) return if @collection.empty? index = (percentile.to_f / 100 * size).ceil sort[index] end |