rstat 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/lib/rstat.rb +0 -1
- data/lib/rstat/core_ext/array/descriptive_statistics.rb +3 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/dispersion.rb +3 -0
- data/lib/rstat/core_ext/array/{percentile.rb → descriptive_statistics/dispersion/percentile.rb} +1 -1
- data/lib/rstat/core_ext/array/{range.rb → descriptive_statistics/dispersion/range.rb} +0 -0
- data/lib/rstat/core_ext/array/{standard_deviation.rb → descriptive_statistics/dispersion/standard_deviation.rb} +0 -6
- data/lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb +25 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/location.rb +3 -0
- data/lib/rstat/core_ext/array/{mean.rb → descriptive_statistics/location/mean.rb} +2 -2
- data/lib/rstat/core_ext/array/{median.rb → descriptive_statistics/location/median.rb} +1 -1
- data/lib/rstat/core_ext/array/{mode.rb → descriptive_statistics/location/mode.rb} +0 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/shape.rb +3 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/shape/kurtosis.rb +5 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/shape/moment.rb +23 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/shape/skewness.rb +5 -0
- data/lib/rstat/core_ext/array/descriptive_statistics/shape/variance.rb +5 -0
- data/lib/rstat/core_ext/fixnum.rb +3 -0
- data/lib/rstat/core_ext/fixnum/binomial_coefficient.rb +5 -0
- data/lib/rstat/version.rb +1 -1
- data/spec/rstat/array_spec.rb +143 -67
- data/spec/rstat/fixnum_spec.rb +12 -0
- metadata +21 -8
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## v0.1.0
|
2
|
+
|
3
|
+
* Major reorganization! All files now in directories named after their corresponding discipline (as sort of defined by Wikipedia).
|
4
|
+
* Added skewness.
|
5
|
+
* Mean methods now now use the sum method.
|
6
|
+
* Minor reorganization of tests.
|
7
|
+
* Changed Gemfile source to https.
|
8
|
+
* Added index of dispersion.
|
9
|
+
|
1
10
|
## v0.0.4
|
2
11
|
|
3
12
|
* Added percentile.
|
data/Gemfile
CHANGED
data/lib/rstat.rb
CHANGED
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Array
|
2
|
+
def index_of_dispersion
|
3
|
+
self.variance / self.mean
|
4
|
+
end
|
5
|
+
|
6
|
+
def dispersion_index
|
7
|
+
self.index_of_dispersion
|
8
|
+
end
|
9
|
+
|
10
|
+
def coefficient_of_dispersion
|
11
|
+
self.index_of_dispersion
|
12
|
+
end
|
13
|
+
|
14
|
+
def variance_to_mean_ratio
|
15
|
+
self.index_of_dispersion
|
16
|
+
end
|
17
|
+
|
18
|
+
def vmr
|
19
|
+
self.index_of_dispersion
|
20
|
+
end
|
21
|
+
|
22
|
+
def fano_factor
|
23
|
+
self.index_of_dispersion
|
24
|
+
end
|
25
|
+
end
|
@@ -12,7 +12,7 @@ class Array
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def harmonic_mean
|
15
|
-
self.length / self.map{ |x| 1.0 / x }.
|
15
|
+
self.length / self.map{ |x| 1.0 / x }.sum.to_f
|
16
16
|
end
|
17
17
|
|
18
18
|
def quadratic_mean
|
@@ -20,6 +20,6 @@ class Array
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def power_mean(p = 1)
|
23
|
-
((1.0 / self.length) * self.map{ |x| x ** p }.
|
23
|
+
((1.0 / self.length) * self.map{ |x| x ** p }.sum.to_f) ** (1.0 / p)
|
24
24
|
end
|
25
25
|
end
|
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Array
|
2
|
+
def central_moment k
|
3
|
+
if k < 0
|
4
|
+
nil
|
5
|
+
else
|
6
|
+
mean = self.mean
|
7
|
+
|
8
|
+
(1.0 / self.length) * self.map{ |x| (x - mean) ** k }.sum
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def raw_moment k
|
13
|
+
if k < 0
|
14
|
+
nil
|
15
|
+
else
|
16
|
+
(1.0 / self.length) * self.map{ |x| x ** k }.sum
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# def l_moment k
|
21
|
+
#
|
22
|
+
# end
|
23
|
+
end
|
data/lib/rstat/version.rb
CHANGED
data/spec/rstat/array_spec.rb
CHANGED
@@ -14,114 +14,190 @@ describe Rstat do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
context "Location" do
|
18
|
+
describe ".mean" do
|
19
|
+
it "calculates the mean of an array" do
|
20
|
+
[1, 2, 3, 4, 5].mean.should be_within(0.0001).of(3.0000)
|
21
|
+
end
|
20
22
|
end
|
21
|
-
end
|
22
23
|
|
23
|
-
|
24
|
-
it "calculates the mean of an array" do
|
25
|
-
[1, 2, 3, 4, 5].
|
24
|
+
describe ".geometric_mean" do
|
25
|
+
it "calculates the geometric mean of an array" do
|
26
|
+
[1, 2, 3, 4, 5].geometric_mean.should be_within(0.0001).of(2.6052)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "calculates the geometric mean of an array with a zero element" do
|
30
|
+
[0, 2, 3, 4, 5].geometric_mean.should eql(0.0)
|
26
31
|
end
|
27
|
-
end
|
28
32
|
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
it "calculates the geometric mean of an array with a negative element" do
|
34
|
+
[-1, 2, 3, 4, 5].geometric_mean.real?.should be_false
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
|
-
|
35
|
-
|
38
|
+
describe ".harmonic mean" do
|
39
|
+
it "calculates the harmonic mean of an array" do
|
40
|
+
[1, 2, 3, 4, 5].harmonic_mean.should be_within(0.0001).of(2.1897)
|
41
|
+
end
|
36
42
|
end
|
37
43
|
|
38
|
-
|
39
|
-
|
44
|
+
describe ".power_mean" do
|
45
|
+
it "power_mean(2) should equal quadratic_mean" do
|
46
|
+
p = [1, 2, 3, 4, 5].power_mean(2)
|
47
|
+
q = [1, 2, 3, 4, 5].quadratic_mean
|
48
|
+
|
49
|
+
p.should eql(q)
|
50
|
+
end
|
40
51
|
end
|
41
|
-
end
|
42
52
|
|
43
|
-
|
44
|
-
|
45
|
-
|
53
|
+
it "AM > GM > HM" do
|
54
|
+
a = [1, 2, 3, 4, 5]
|
55
|
+
am = a.arithmetric_mean
|
56
|
+
gm = a.geometric_mean
|
57
|
+
hm = a.harmonic_mean
|
58
|
+
|
59
|
+
am.should be > gm
|
60
|
+
gm.should be > hm
|
46
61
|
end
|
47
|
-
end
|
48
62
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
63
|
+
describe ".median" do
|
64
|
+
it "calculates the median of an array with an odd number of elements" do
|
65
|
+
[2, 3, 5, 1, 4].median.should eql(3)
|
66
|
+
end
|
53
67
|
|
54
|
-
|
68
|
+
it "calculates the median of an array with an even number of elements" do
|
69
|
+
[2, 3, 5, 1, 4, 6].median.should eql(3.5)
|
70
|
+
end
|
55
71
|
end
|
56
|
-
end
|
57
72
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
hm = a.harmonic_mean
|
73
|
+
describe ".mode" do
|
74
|
+
it "calculates the mode of an empty array" do
|
75
|
+
[].mode.should eql([])
|
76
|
+
end
|
63
77
|
|
64
|
-
|
65
|
-
|
66
|
-
|
78
|
+
it "calculates the mode of an array with one element" do
|
79
|
+
[100].mode.should eql([100])
|
80
|
+
end
|
67
81
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
82
|
+
it "calculates the mode of an unimodal array" do
|
83
|
+
[1, 1, 1, 2, 3, 4, 5, 5, 6].mode.should eql([1])
|
84
|
+
end
|
72
85
|
|
73
|
-
|
74
|
-
|
86
|
+
it "calculates the mode of a bimodal array" do
|
87
|
+
[44, 45, 46, 44, 46, 50].mode.should eql([44, 46])
|
88
|
+
end
|
75
89
|
end
|
76
90
|
end
|
77
91
|
|
78
|
-
|
79
|
-
|
80
|
-
|
92
|
+
context "Dispersion" do
|
93
|
+
describe ".range" do
|
94
|
+
it "finds the range of an array" do
|
95
|
+
[0, 34, 656, 400, 1000].range.should be(1000)
|
96
|
+
end
|
81
97
|
end
|
82
98
|
|
83
|
-
|
84
|
-
|
99
|
+
describe ".standard_deviation" do
|
100
|
+
it "calculates the standard deviation of an array" do
|
101
|
+
[1, 2, 3, 4, 5, 6].standard_deviation.should be_within(0.00001).of(1.70783)
|
102
|
+
end
|
85
103
|
end
|
86
104
|
|
87
|
-
|
88
|
-
|
105
|
+
describe ".coefficient_of_variation" do
|
106
|
+
it "calculates the coefficient of variation of an array" do
|
107
|
+
[1, 2, 3, 4, 5, 6].coefficient_of_variation.should be_within(0.00001).of(0.48795)
|
108
|
+
end
|
89
109
|
end
|
90
110
|
|
91
|
-
|
92
|
-
|
111
|
+
describe ".percentile" do
|
112
|
+
it "finds the 30th percentile of an array" do
|
113
|
+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].percentile(30).should be(3)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "finds the 50th percentile of an array" do
|
117
|
+
[1, 2, 3, 4, 5].percentile(50).should be(3)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "finds the 10th percentile of an array" do
|
121
|
+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17].percentile(10).should be(2)
|
122
|
+
end
|
93
123
|
end
|
94
|
-
end
|
95
124
|
|
96
|
-
|
97
|
-
|
98
|
-
|
125
|
+
describe ".interquartile_range" do
|
126
|
+
it "finds the interquartile range of an array" do
|
127
|
+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].interquartile_range.should be(5)
|
128
|
+
end
|
99
129
|
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "Shape" do
|
133
|
+
describe ".central_moment" do
|
134
|
+
it "calculates the 0th central moment of an array" do
|
135
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].central_moment(0).should be_within(0.00001).of(1.0)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "calculates the 1st central moment of an array" do
|
139
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].central_moment(1).should be_within(0.00001).of(0.0)
|
140
|
+
end
|
100
141
|
|
101
|
-
|
102
|
-
|
142
|
+
it "calculates the 2nd central moment of an array" do
|
143
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].central_moment(2).should be_within(0.00001).of(3459.44000)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "calculates the 3rd central moment of an array" do
|
147
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].central_moment(3).should be_within(0.00001).of(321046.00800)
|
148
|
+
end
|
149
|
+
|
150
|
+
it "calculates the 4th central moment of an array" do
|
151
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].central_moment(4).should be_within(0.00001).of(56245095.69920)
|
152
|
+
end
|
103
153
|
end
|
104
154
|
|
105
|
-
|
106
|
-
|
155
|
+
describe ".raw_moment" do
|
156
|
+
it "calculates the 0th central moment of an array" do
|
157
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].raw_moment(0).should be_within(0.00001).of(1.0)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "calculates the 1st central moment of an array" do
|
161
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].raw_moment(1).should be_within(0.00001).of([2, 43, 5, 65, 56, 7, 85, 3, -1, 199].mean)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "calculates the 2nd central moment of an array" do
|
165
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].raw_moment(2).should be_within(0.00001).of(5612.40000)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "calculates the 3rd central moment of an array" do
|
169
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].raw_moment(3).should be_within(0.00001).of(902497.40000)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "calculates the 4th central moment of an array" do
|
173
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].raw_moment(4).should be_within(0.00001).of(165154687.20000)
|
174
|
+
end
|
107
175
|
end
|
108
|
-
end
|
109
176
|
|
110
|
-
|
111
|
-
|
112
|
-
|
177
|
+
describe ".variance" do
|
178
|
+
it "calculates the variance of an array" do
|
179
|
+
[1, 2, 3, 4, 5, 6].variance.should be_within(0.00001).of(2.91667)
|
180
|
+
end
|
113
181
|
end
|
114
182
|
|
115
|
-
|
116
|
-
|
183
|
+
describe ".skewness" do
|
184
|
+
it "finds the skewness of an array" do
|
185
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].skewness.should be_within(0.00001).of(1.57782)
|
186
|
+
end
|
117
187
|
end
|
118
188
|
|
119
|
-
|
120
|
-
|
189
|
+
describe ".kurtosis" do
|
190
|
+
it "finds the kurtosis of an array" do
|
191
|
+
[2, 43, 5, 65, 56, 7, 85, 3, -1, 199].kurtosis.should be_within(0.00001).of(1.69973)
|
192
|
+
end
|
121
193
|
end
|
194
|
+
end
|
122
195
|
|
123
|
-
|
124
|
-
|
196
|
+
context "Count Data" do
|
197
|
+
describe ".index_of_dispersion" do
|
198
|
+
it "finds the index of dispersion of an array" do
|
199
|
+
[1, 2, 3, 4, 5, 6].index_of_dispersion.should be_within(0.00001).of(0.83333)
|
200
|
+
end
|
125
201
|
end
|
126
202
|
end
|
127
203
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Rstat do
|
5
|
+
describe ".binomial_coefficient" do
|
6
|
+
it "computes the binomial coeffecient of itself and another number" do
|
7
|
+
10.binomial_coefficient(4).should eq(210)
|
8
|
+
|
9
|
+
50.binomial_coefficient(34).should eq(4_923_689_695_575)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rstat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -43,17 +43,29 @@ files:
|
|
43
43
|
- lib/rstat.rb
|
44
44
|
- lib/rstat/core_ext.rb
|
45
45
|
- lib/rstat/core_ext/array.rb
|
46
|
-
- lib/rstat/core_ext/array/
|
47
|
-
- lib/rstat/core_ext/array/
|
48
|
-
- lib/rstat/core_ext/array/
|
49
|
-
- lib/rstat/core_ext/array/
|
46
|
+
- lib/rstat/core_ext/array/descriptive_statistics.rb
|
47
|
+
- lib/rstat/core_ext/array/descriptive_statistics/dispersion.rb
|
48
|
+
- lib/rstat/core_ext/array/descriptive_statistics/dispersion/percentile.rb
|
49
|
+
- lib/rstat/core_ext/array/descriptive_statistics/dispersion/range.rb
|
50
|
+
- lib/rstat/core_ext/array/descriptive_statistics/dispersion/standard_deviation.rb
|
51
|
+
- lib/rstat/core_ext/array/descriptive_statistics/index_of_dispersion.rb
|
52
|
+
- lib/rstat/core_ext/array/descriptive_statistics/location.rb
|
53
|
+
- lib/rstat/core_ext/array/descriptive_statistics/location/mean.rb
|
54
|
+
- lib/rstat/core_ext/array/descriptive_statistics/location/median.rb
|
55
|
+
- lib/rstat/core_ext/array/descriptive_statistics/location/mode.rb
|
56
|
+
- lib/rstat/core_ext/array/descriptive_statistics/shape.rb
|
57
|
+
- lib/rstat/core_ext/array/descriptive_statistics/shape/kurtosis.rb
|
58
|
+
- lib/rstat/core_ext/array/descriptive_statistics/shape/moment.rb
|
59
|
+
- lib/rstat/core_ext/array/descriptive_statistics/shape/skewness.rb
|
60
|
+
- lib/rstat/core_ext/array/descriptive_statistics/shape/variance.rb
|
50
61
|
- lib/rstat/core_ext/array/product.rb
|
51
|
-
- lib/rstat/core_ext/array/range.rb
|
52
|
-
- lib/rstat/core_ext/array/standard_deviation.rb
|
53
62
|
- lib/rstat/core_ext/array/sum.rb
|
63
|
+
- lib/rstat/core_ext/fixnum.rb
|
64
|
+
- lib/rstat/core_ext/fixnum/binomial_coefficient.rb
|
54
65
|
- lib/rstat/version.rb
|
55
66
|
- rstat.gemspec
|
56
67
|
- spec/rstat/array_spec.rb
|
68
|
+
- spec/rstat/fixnum_spec.rb
|
57
69
|
- spec/spec_helper.rb
|
58
70
|
homepage: http://seaneshbaugh.com/
|
59
71
|
licenses: []
|
@@ -81,4 +93,5 @@ specification_version: 3
|
|
81
93
|
summary: A Simple statistics gem.
|
82
94
|
test_files:
|
83
95
|
- spec/rstat/array_spec.rb
|
96
|
+
- spec/rstat/fixnum_spec.rb
|
84
97
|
- spec/spec_helper.rb
|