statsample 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -3
  3. data/History.txt +4 -0
  4. data/README.md +4 -0
  5. data/lib/statsample/converter/csv.rb +41 -54
  6. data/lib/statsample/converters.rb +18 -19
  7. data/lib/statsample/version.rb +1 -1
  8. data/test/fixtures/scientific_notation.csv +4 -0
  9. data/test/helpers_tests.rb +37 -38
  10. data/test/test_analysis.rb +96 -97
  11. data/test/test_anova_contrast.rb +22 -22
  12. data/test/test_anovaoneway.rb +12 -12
  13. data/test/test_anovatwoway.rb +16 -17
  14. data/test/test_anovatwowaywithdataset.rb +22 -24
  15. data/test/test_anovawithvectors.rb +67 -69
  16. data/test/test_awesome_print_bug.rb +9 -9
  17. data/test/test_bartlettsphericity.rb +13 -13
  18. data/test/test_bivariate.rb +122 -126
  19. data/test/test_codification.rb +51 -49
  20. data/test/test_crosstab.rb +44 -40
  21. data/test/test_csv.rb +52 -70
  22. data/test/test_dataset.rb +347 -330
  23. data/test/test_dominance_analysis.rb +22 -24
  24. data/test/test_factor.rb +163 -166
  25. data/test/test_factor_map.rb +25 -30
  26. data/test/test_factor_pa.rb +28 -28
  27. data/test/test_ggobi.rb +19 -18
  28. data/test/test_gsl.rb +13 -15
  29. data/test/test_histogram.rb +74 -77
  30. data/test/test_matrix.rb +29 -31
  31. data/test/test_multiset.rb +132 -126
  32. data/test/test_regression.rb +143 -149
  33. data/test/test_reliability.rb +149 -155
  34. data/test/test_reliability_icc.rb +100 -104
  35. data/test/test_reliability_skillscale.rb +38 -40
  36. data/test/test_resample.rb +14 -12
  37. data/test/test_rserve_extension.rb +33 -33
  38. data/test/test_srs.rb +5 -5
  39. data/test/test_statistics.rb +52 -50
  40. data/test/test_stest.rb +27 -28
  41. data/test/test_stratified.rb +10 -10
  42. data/test/test_test_f.rb +17 -17
  43. data/test/test_test_kolmogorovsmirnov.rb +21 -21
  44. data/test/test_test_t.rb +52 -52
  45. data/test/test_umannwhitney.rb +16 -16
  46. data/test/test_vector.rb +419 -410
  47. data/test/test_wilcoxonsignedrank.rb +60 -63
  48. data/test/test_xls.rb +41 -41
  49. metadata +55 -5
  50. data/web/Rakefile +0 -39
@@ -1,27 +1,27 @@
1
- require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
1
+ require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
2
2
 
3
- class StatsampleUMannWhitneyTestCase < MiniTest::Unit::TestCase
3
+ class StatsampleUMannWhitneyTestCase < Minitest::Test
4
4
  include Statsample::Test
5
5
  context Statsample::Test::UMannWhitney do
6
6
  setup do
7
- @v1=[1,2,3,4,7,8,9,10,14,15].to_scale
8
- @v2=[5,6,11,12,13,16,17,18,19].to_scale
9
- @u=Statsample::Test::UMannWhitney.new(@v1,@v2)
7
+ @v1 = [1, 2, 3, 4, 7, 8, 9, 10, 14, 15].to_scale
8
+ @v2 = [5, 6, 11, 12, 13, 16, 17, 18, 19].to_scale
9
+ @u = Statsample::Test::UMannWhitney.new(@v1, @v2)
10
10
  end
11
- should "have same result using class or Test#u_mannwhitney" do
12
- assert_equal(Statsample::Test.u_mannwhitney(@v1,@v2).u, @u.u)
11
+ should 'have same result using class or Test#u_mannwhitney' do
12
+ assert_equal(Statsample::Test.u_mannwhitney(@v1, @v2).u, @u.u)
13
13
  end
14
- should "have correct U values" do
15
- assert_equal(73,@u.r1)
16
- assert_equal(117,@u.r2)
17
- assert_equal(18,@u.u)
14
+ should 'have correct U values' do
15
+ assert_equal(73, @u.r1)
16
+ assert_equal(117, @u.r2)
17
+ assert_equal(18, @u.u)
18
18
  end
19
- should "have correct value for z" do
20
- assert_in_delta(-2.205,@u.z,0.001)
19
+ should 'have correct value for z' do
20
+ assert_in_delta(-2.205, @u.z, 0.001)
21
21
  end
22
- should "have correct value for z and exact probability" do
23
- assert_in_delta(0.027,@u.probability_z,0.001)
24
- assert_in_delta(0.028,@u.probability_exact,0.001)
22
+ should 'have correct value for z and exact probability' do
23
+ assert_in_delta(0.027, @u.probability_z, 0.001)
24
+ assert_in_delta(0.028, @u.probability_exact, 0.001)
25
25
  end
26
26
  end
27
27
  end
data/test/test_vector.rb CHANGED
@@ -1,383 +1,376 @@
1
- require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
1
+ require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
2
2
 
3
- class StatsampleTestVector < MiniTest::Unit::TestCase
3
+ class StatsampleTestVector < Minitest::Test
4
4
  include Statsample::Shorthand
5
5
 
6
6
  def setup
7
- @c = Statsample::Vector.new([5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99], :nominal)
8
- @c.name="Test Vector"
9
- @c.missing_values=[-99]
7
+ @c = Statsample::Vector.new([5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99], :nominal)
8
+ @c.name = 'Test Vector'
9
+ @c.missing_values = [-99]
10
10
  end
11
+
11
12
  def assert_counting_tokens(b)
12
- assert_equal([1,1,0,1,0,nil],b['a'].to_a)
13
- assert_equal([0,1,0,0,0,nil],b['b'].to_a)
14
- assert_equal([0,0,1,0,0,nil],b['c'].to_a)
15
- assert_equal([0,0,1,1,0,nil],b['d'].to_a)
16
- assert_equal([0,0,0,0,1,nil],b[10].to_a)
13
+ assert_equal([1, 1, 0, 1, 0, nil], b['a'].to_a)
14
+ assert_equal([0, 1, 0, 0, 0, nil], b['b'].to_a)
15
+ assert_equal([0, 0, 1, 0, 0, nil], b['c'].to_a)
16
+ assert_equal([0, 0, 1, 1, 0, nil], b['d'].to_a)
17
+ assert_equal([0, 0, 0, 0, 1, nil], b[10].to_a)
17
18
  end
18
19
  context Statsample do
19
20
  setup do
20
- @sample=100
21
- @a=@sample.times.map{|i| (i+rand(10)) %10 ==0 ? nil : rand(100)}.to_scale
22
- @b=@sample.times.map{|i| (i+rand(10)) %10 ==0 ? nil : rand(100)}.to_scale
23
- @correct_a=Array.new
24
- @correct_b=Array.new
25
- @a.each_with_index do |v,i|
21
+ @sample = 100
22
+ @a = @sample.times.map { |i| (i + rand(10)) % 10 == 0 ? nil : rand(100) }.to_scale
23
+ @b = @sample.times.map { |i| (i + rand(10)) % 10 == 0 ? nil : rand(100) }.to_scale
24
+ @correct_a = []
25
+ @correct_b = []
26
+ @a.each_with_index do |_v, i|
26
27
  if !@a[i].nil? and !@b[i].nil?
27
28
  @correct_a.push(@a[i])
28
29
  @correct_b.push(@b[i])
29
30
  end
30
31
  end
31
- @correct_a=@correct_a.to_scale
32
- @correct_b=@correct_b.to_scale
33
-
34
- @common=lambda do |av,bv|
35
- assert_equal(@correct_a, av, "A no es esperado")
36
- assert_equal(@correct_b, bv, "B no es esperado")
37
- assert(!av.has_missing_data?, "A tiene datos faltantes")
38
- assert(!bv.has_missing_data?, "b tiene datos faltantes")
32
+ @correct_a = @correct_a.to_scale
33
+ @correct_b = @correct_b.to_scale
34
+
35
+ @common = lambda do |av, bv|
36
+ assert_equal(@correct_a, av, 'A no es esperado')
37
+ assert_equal(@correct_b, bv, 'B no es esperado')
38
+ assert(!av.has_missing_data?, 'A tiene datos faltantes')
39
+ assert(!bv.has_missing_data?, 'b tiene datos faltantes')
39
40
  end
40
41
  end
41
- should "return correct only_valid" do
42
- av,bv=Statsample.only_valid @a,@b
43
- av2,bv2=Statsample.only_valid av,bv
44
- @common.call(av,bv)
45
- assert_equal(av,av2)
46
- assert_not_same(av,av2)
47
- assert_not_same(bv,bv2)
48
- end
49
- should "return correct only_valid_clone" do
50
- av,bv=Statsample.only_valid_clone @a,@b
51
- @common.call(av,bv)
52
- av2,bv2=Statsample.only_valid_clone av,bv
53
- assert_equal(av,av2)
54
- assert_same(av,av2)
55
- assert_same(bv,bv2)
42
+ should 'return correct only_valid' do
43
+ av, bv = Statsample.only_valid @a, @b
44
+ av2, bv2 = Statsample.only_valid av, bv
45
+ @common.call(av, bv)
46
+ assert_equal(av, av2)
47
+ assert_not_same(av, av2)
48
+ assert_not_same(bv, bv2)
49
+ end
50
+ should 'return correct only_valid_clone' do
51
+ av, bv = Statsample.only_valid_clone @a, @b
52
+ @common.call(av, bv)
53
+ av2, bv2 = Statsample.only_valid_clone av, bv
54
+ assert_equal(av, av2)
55
+ assert_same(av, av2)
56
+ assert_same(bv, bv2)
56
57
  end
57
58
  end
58
59
  context Statsample::Vector do
59
60
  setup do
60
- @c = Statsample::Vector.new([5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99], :nominal)
61
- @c.name="Test Vector"
62
- @c.missing_values=[-99]
63
- end
64
- should_with_gsl "be created with GSL::Vector" do
65
- gsl=GSL::Vector[1,2,3,4,5]
66
- v=Statsample::Vector.new(gsl)
67
- assert_equal([1,2,3,4,5], v.to_a)
61
+ @c = Statsample::Vector.new([5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99], :nominal)
62
+ @c.name = 'Test Vector'
63
+ @c.missing_values = [-99]
64
+ end
65
+ should_with_gsl 'be created with GSL::Vector' do
66
+ gsl = GSL::Vector[1, 2, 3, 4, 5]
67
+ v = Statsample::Vector.new(gsl)
68
+ assert_equal([1, 2, 3, 4, 5], v.to_a)
68
69
  refute(v.flawed?)
69
-
70
70
  end
71
71
 
72
- context "using matrix operations" do
72
+ context 'using matrix operations' do
73
73
  setup do
74
- @a=[1,2,3,4,5].to_scale
74
+ @a = [1, 2, 3, 4, 5].to_scale
75
75
  end
76
- should "to_matrix returns a matrix with 1 row" do
77
- mh=Matrix[[1,2,3,4,5]]
78
- assert_equal(mh,@a.to_matrix)
76
+ should 'to_matrix returns a matrix with 1 row' do
77
+ mh = Matrix[[1, 2, 3, 4, 5]]
78
+ assert_equal(mh, @a.to_matrix)
79
79
  end
80
- should "to_matrix(:vertical) returns a matrix with 1 column" do
81
- mv=Matrix.columns([[1,2,3,4,5]])
82
- assert_equal(mv,@a.to_matrix(:vertical))
80
+ should 'to_matrix(:vertical) returns a matrix with 1 column' do
81
+ mv = Matrix.columns([[1, 2, 3, 4, 5]])
82
+ assert_equal(mv, @a.to_matrix(:vertical))
83
83
  end
84
- should "returns valid submatrixes" do
84
+ should 'returns valid submatrixes' do
85
85
  # 3*4 + 2*5 = 22
86
- a=[3,2].to_vector(:scale)
87
- b=[4,5].to_vector(:scale)
88
- assert_equal(22,(a.to_matrix*b.to_matrix(:vertical))[0,0])
86
+ a = [3, 2].to_vector(:scale)
87
+ b = [4, 5].to_vector(:scale)
88
+ assert_equal(22, (a.to_matrix * b.to_matrix(:vertical))[0, 0])
89
89
  end
90
90
  end
91
- context "when initializing" do
91
+ context 'when initializing' do
92
92
  setup do
93
- @data=(10.times.map{rand(100)})+[nil]
94
- @original=Statsample::Vector.new(@data, :scale)
93
+ @data = (10.times.map { rand(100) }) + [nil]
94
+ @original = Statsample::Vector.new(@data, :scale)
95
95
  end
96
- should "be the sample using []" do
97
- second=Statsample::Vector[*@data]
96
+ should 'be the sample using []' do
97
+ second = Statsample::Vector[*@data]
98
98
  assert_equal(@original, second)
99
99
  end
100
- should "[] returns same results as R-c()" do
101
- reference=[0,4,5,6,10].to_scale
102
- assert_equal(reference, Statsample::Vector[0,4,5,6,10])
103
- assert_equal(reference, Statsample::Vector[0,4..6,10])
104
- assert_equal(reference, Statsample::Vector[[0],[4,5,6],[10]])
105
- assert_equal(reference, Statsample::Vector[[0],[4,[5,[6]]],[10]])
106
-
107
- assert_equal(reference, Statsample::Vector[[0],[4,5,6].to_vector,[10]])
108
-
100
+ should '[] returns same results as R-c()' do
101
+ reference = [0, 4, 5, 6, 10].to_scale
102
+ assert_equal(reference, Statsample::Vector[0, 4, 5, 6, 10])
103
+ assert_equal(reference, Statsample::Vector[0, 4..6, 10])
104
+ assert_equal(reference, Statsample::Vector[[0], [4, 5, 6], [10]])
105
+ assert_equal(reference, Statsample::Vector[[0], [4, [5, [6]]], [10]])
106
+
107
+ assert_equal(reference, Statsample::Vector[[0], [4, 5, 6].to_vector, [10]])
109
108
  end
110
- should "be the same usign #to_vector" do
111
- lazy1=@data.to_vector(:scale)
112
- assert_equal(@original,lazy1)
109
+ should 'be the same usign #to_vector' do
110
+ lazy1 = @data.to_vector(:scale)
111
+ assert_equal(@original, lazy1)
113
112
  end
114
- should "be the same using #to_scale" do
115
- lazy2=@data.to_scale
116
- assert_equal(@original,lazy2)
117
- assert_equal(:scale,lazy2.type)
118
- assert_equal(@data.find_all{|v| !v.nil?},lazy2.valid_data)
113
+ should 'be the same using #to_scale' do
114
+ lazy2 = @data.to_scale
115
+ assert_equal(@original, lazy2)
116
+ assert_equal(:scale, lazy2.type)
117
+ assert_equal(@data.find_all { |v| !v.nil? }, lazy2.valid_data)
119
118
  end
120
- should "could use new_scale with size only" do
121
- v1=10.times.map {nil}.to_scale
122
- v2=Statsample::Vector.new_scale(10)
123
- assert_equal(v1,v2)
124
-
119
+ should 'could use new_scale with size only' do
120
+ v1 = 10.times.map { nil }.to_scale
121
+ v2 = Statsample::Vector.new_scale(10)
122
+ assert_equal(v1, v2)
125
123
  end
126
- should "could use new_scale with size and value" do
127
- a=rand
128
- v1=10.times.map {a}.to_scale
129
- v2=Statsample::Vector.new_scale(10,a)
130
- assert_equal(v1,v2)
124
+ should 'could use new_scale with size and value' do
125
+ a = rand
126
+ v1 = 10.times.map { a }.to_scale
127
+ v2 = Statsample::Vector.new_scale(10, a)
128
+ assert_equal(v1, v2)
131
129
  end
132
- should "could use new_scale with func" do
133
- v1=10.times.map {|i| i*2}.to_scale
134
- v2=Statsample::Vector.new_scale(10) {|i| i*2}
135
- assert_equal(v1,v2)
130
+ should 'could use new_scale with func' do
131
+ v1 = 10.times.map { |i| i * 2 }.to_scale
132
+ v2 = Statsample::Vector.new_scale(10) { |i| i * 2 }
133
+ assert_equal(v1, v2)
136
134
  end
137
-
138
135
  end
139
136
 
140
- context "#split_by_separator" do
141
-
137
+ context '#split_by_separator' do
142
138
  setup do
143
- @a = Statsample::Vector.new(["a","a,b","c,d","a,d",10,nil],:nominal)
144
- @b=@a.split_by_separator(",")
139
+ @a = Statsample::Vector.new(['a', 'a,b', 'c,d', 'a,d', 10, nil], :nominal)
140
+ @b = @a.split_by_separator(',')
145
141
  end
146
- should "returns a Hash" do
142
+ should 'returns a Hash' do
147
143
  assert_kind_of(Hash, @b)
148
144
  end
149
- should "return a Hash with keys with different values of @a" do
150
- expected=['a','b','c','d',10]
145
+ should 'return a Hash with keys with different values of @a' do
146
+ expected = ['a', 'b', 'c', 'd', 10]
151
147
  assert_equal(expected, @b.keys)
152
148
  end
153
149
 
154
- should "returns a Hash, which values are Statsample::Vector" do
155
- @b.each_key {|k| assert_instance_of(Statsample::Vector, @b[k])}
150
+ should 'returns a Hash, which values are Statsample::Vector' do
151
+ @b.each_key { |k| assert_instance_of(Statsample::Vector, @b[k]) }
156
152
  end
157
- should "hash values are n times the tokens appears" do
153
+ should 'hash values are n times the tokens appears' do
158
154
  assert_counting_tokens(@b)
159
155
  end
160
- should "#split_by_separator_freq returns the number of ocurrences of tokens" do
161
- assert_equal({'a'=>3,'b'=>1,'c'=>1,'d'=>2,10=>1}, @a.split_by_separator_freq())
156
+ should '#split_by_separator_freq returns the number of ocurrences of tokens' do
157
+ assert_equal({ 'a' => 3, 'b' => 1, 'c' => 1, 'd' => 2, 10 => 1 }, @a.split_by_separator_freq)
162
158
  end
163
- should "using a different separator give the same values" do
164
- a = Statsample::Vector.new(["a","a*b","c*d","a*d",10,nil],:nominal)
165
- b=a.split_by_separator("*")
159
+ should 'using a different separator give the same values' do
160
+ a = Statsample::Vector.new(['a', 'a*b', 'c*d', 'a*d', 10, nil], :nominal)
161
+ b = a.split_by_separator('*')
166
162
  assert_counting_tokens(b)
167
163
  end
168
164
  end
169
- should "return correct median_absolute_deviation" do
170
- a=[1, 1, 2, 2, 4, 6, 9].to_scale
165
+ should 'return correct median_absolute_deviation' do
166
+ a = [1, 1, 2, 2, 4, 6, 9].to_scale
171
167
  assert_equal(1, a.median_absolute_deviation)
172
168
  end
173
- should "return correct histogram" do
174
- a=10.times.map {|v| v}.to_scale
175
- hist=a.histogram(2)
176
- assert_equal([5,5], hist.bin)
169
+ should 'return correct histogram' do
170
+ a = 10.times.map { |v| v }.to_scale
171
+ hist = a.histogram(2)
172
+ assert_equal([5, 5], hist.bin)
177
173
  3.times do |i|
178
- assert_in_delta(i*4.5, hist.get_range(i)[0], 1e-9)
174
+ assert_in_delta(i * 4.5, hist.get_range(i)[0], 1e-9)
179
175
  end
180
-
181
176
  end
182
- should "have a name" do
183
- @c.name=="Test Vector"
177
+ should 'have a name' do
178
+ @c.name == 'Test Vector'
184
179
  end
185
- should "without explicit name, returns vector with succesive numbers" do
186
- a=10.times.map{rand(100)}.to_scale
187
- b=10.times.map{rand(100)}.to_scale
180
+ should 'without explicit name, returns vector with succesive numbers' do
181
+ a = 10.times.map { rand(100) }.to_scale
182
+ b = 10.times.map { rand(100) }.to_scale
188
183
  assert_match(/Vector \d+/, a.name)
189
- a.name=~/Vector (\d+)/
190
- next_number=$1.to_i+1
191
- assert_equal("Vector #{next_number}",b.name)
184
+ a.name =~ /Vector (\d+)/
185
+ next_number = Regexp.last_match(1).to_i + 1
186
+ assert_equal("Vector #{next_number}", b.name)
192
187
  end
193
- should "save to a file and load the same Vector" do
194
- outfile=Tempfile.new("vector.vec")
188
+ should 'save to a file and load the same Vector' do
189
+ outfile = Tempfile.new('vector.vec')
195
190
  @c.save(outfile.path)
196
- a=Statsample.load(outfile.path)
197
- assert_equal(@c,a)
198
- end
199
- should "#collect returns an array" do
200
- val=@c.collect {|v| v}
201
- assert_equal(val,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
202
- end
203
-
204
- should "#recode returns a recoded array" do
205
- a=@c.recode{|v| @c.is_valid?(v) ? 0 : 1 }
206
- exp=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1].to_vector
207
- assert_equal(exp,a)
208
- exp.recode!{|v| v==0 ? 1:0}
209
- exp2=(([1]*15)+([0]*3)).to_vector
210
- assert_equal(exp2,exp)
211
- end
212
- should "#product returns the * of all values" do
213
- a=[1,2,3,4,5].to_vector(:scale)
214
- assert_equal(120,a.product)
215
- end
216
-
217
- should "missing values" do
218
- @c.missing_values=[10]
219
- assert_equal([-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9], @c.valid_data.sort)
220
- assert_equal([5,5,5,5,5,6,6,7,8,9,nil,1,2,3,4,nil,-99,-99], @c.data_with_nils)
221
- @c.missing_values=[-99]
222
- assert_equal(@c.valid_data.sort,[1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
223
- assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,nil,nil])
224
- @c.missing_values=[]
225
- assert_equal(@c.valid_data.sort,[-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
226
- assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
227
-
228
- end
229
- should "correct has_missing_data? with missing data" do
230
- a=[1,2,3,nil].to_vector
191
+ a = Statsample.load(outfile.path)
192
+ assert_equal(@c, a)
193
+ end
194
+ should '#collect returns an array' do
195
+ val = @c.collect { |v| v }
196
+ assert_equal(val, [5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99])
197
+ end
198
+
199
+ should '#recode returns a recoded array' do
200
+ a = @c.recode { |v| @c.is_valid?(v) ? 0 : 1 }
201
+ exp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1].to_vector
202
+ assert_equal(exp, a)
203
+ exp.recode! { |v| v == 0 ? 1 : 0 }
204
+ exp2 = (([1] * 15) + ([0] * 3)).to_vector
205
+ assert_equal(exp2, exp)
206
+ end
207
+ should '#product returns the * of all values' do
208
+ a = [1, 2, 3, 4, 5].to_vector(:scale)
209
+ assert_equal(120, a.product)
210
+ end
211
+
212
+ should 'missing values' do
213
+ @c.missing_values = [10]
214
+ assert_equal([-99, -99, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 9], @c.valid_data.sort)
215
+ assert_equal([5, 5, 5, 5, 5, 6, 6, 7, 8, 9, nil, 1, 2, 3, 4, nil, -99, -99], @c.data_with_nils)
216
+ @c.missing_values = [-99]
217
+ assert_equal(@c.valid_data.sort, [1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10])
218
+ assert_equal(@c.data_with_nils, [5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, nil, nil])
219
+ @c.missing_values = []
220
+ assert_equal(@c.valid_data.sort, [-99, -99, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10])
221
+ assert_equal(@c.data_with_nils, [5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99])
222
+ end
223
+ should 'correct has_missing_data? with missing data' do
224
+ a = [1, 2, 3, nil].to_vector
231
225
  assert(a.has_missing_data?)
232
226
  end
233
- should "correct has_missing_data? without missing data" do
234
- a=[1,2,3,4,10].to_vector
227
+ should 'correct has_missing_data? without missing data' do
228
+ a = [1, 2, 3, 4, 10].to_vector
235
229
  assert(!a.has_missing_data?)
236
230
  end
237
- should "with explicit missing_values, should respond has_missing_data?" do
238
- a=[1,2,3,4,10].to_vector
239
- a.missing_values=[10]
231
+ should 'with explicit missing_values, should respond has_missing_data?' do
232
+ a = [1, 2, 3, 4, 10].to_vector
233
+ a.missing_values = [10]
240
234
  assert(a.has_missing_data?)
241
235
  end
242
- should "label correctly fields" do
243
- @c.labels={5=>'FIVE'}
244
- assert_equal(["FIVE","FIVE","FIVE","FIVE","FIVE",6,6,7,8,9,10,1,2,3,4,nil,-99, -99],@c.vector_labeled.to_a)
236
+ should 'label correctly fields' do
237
+ @c.labels = { 5 => 'FIVE' }
238
+ assert_equal(['FIVE', 'FIVE', 'FIVE', 'FIVE', 'FIVE', 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99], @c.vector_labeled.to_a)
245
239
  end
246
- should "verify" do
247
- h=@c.verify{|d| !d.nil? and d>0}
248
- e={15=>nil,16=>-99,17=>-99}
249
- assert_equal(e,h)
240
+ should 'verify' do
241
+ h = @c.verify { |d| !d.nil? and d > 0 }
242
+ e = { 15 => nil, 16 => -99, 17 => -99 }
243
+ assert_equal(e, h)
250
244
  end
251
- should "have a summary with name on it" do
245
+ should 'have a summary with name on it' do
252
246
  assert_match(/#{@c.name}/, @c.summary)
253
247
  end
254
248
 
255
- should "GSL::Vector based should push correcty" do
249
+ should 'GSL::Vector based should push correcty' do
256
250
  if Statsample.has_gsl?
257
- v=GSL::Vector[1,2,3,4,5].to_scale
251
+ v = GSL::Vector[1, 2, 3, 4, 5].to_scale
258
252
  v.push(nil)
259
- assert_equal([1,2,3,4,5,nil], v.to_a)
253
+ assert_equal([1, 2, 3, 4, 5, nil], v.to_a)
260
254
  assert(v.flawed?)
261
255
  else
262
- skip("Requires GSL")
256
+ skip('Requires GSL')
263
257
  end
264
258
  end
265
259
 
266
-
267
- should "split correctly" do
268
- a = Statsample::Vector.new(["a","a,b","c,d","a,d","d",10,nil],:nominal)
269
- assert_equal([%w{a},%w{a b},%w{c d},%w{a d},%w{d},[10],nil], a.splitted)
260
+ should 'split correctly' do
261
+ a = Statsample::Vector.new(['a', 'a,b', 'c,d', 'a,d', 'd', 10, nil], :nominal)
262
+ assert_equal([%w(a), %w(a b), %w(c d), %w(a d), %w(d), [10], nil], a.splitted)
270
263
  end
271
- should "multiply correct for scalar" do
272
- a = [1,2,3].to_scale
273
- assert_equal([5,10,15].to_scale, a*5)
264
+ should 'multiply correct for scalar' do
265
+ a = [1, 2, 3].to_scale
266
+ assert_equal([5, 10, 15].to_scale, a * 5)
274
267
  end
275
- should "multiply correct with other vector" do
276
- a = [1,2,3].to_scale
277
- b = [2,4,6].to_scale
268
+ should 'multiply correct with other vector' do
269
+ a = [1, 2, 3].to_scale
270
+ b = [2, 4, 6].to_scale
278
271
 
279
- assert_equal([2,8,18].to_scale, a*b)
272
+ assert_equal([2, 8, 18].to_scale, a * b)
280
273
  end
281
- should "sum correct for scalar" do
282
- a = [1,2,3].to_scale
283
- assert_equal([11,12,13].to_scale, a+10)
274
+ should 'sum correct for scalar' do
275
+ a = [1, 2, 3].to_scale
276
+ assert_equal([11, 12, 13].to_scale, a + 10)
284
277
  end
285
278
 
286
- should "raise NoMethodError when method requires ordinal and vector is nominal" do
287
- @c.type=:nominal
279
+ should 'raise NoMethodError when method requires ordinal and vector is nominal' do
280
+ @c.type = :nominal
288
281
  assert_raise(::NoMethodError) { @c.median }
289
282
  end
290
283
 
291
- should "raise NoMethodError when method requires scalar and vector is ordinal" do
292
- @c.type=:ordinal
284
+ should 'raise NoMethodError when method requires scalar and vector is ordinal' do
285
+ @c.type = :ordinal
293
286
  assert_raise(::NoMethodError) { @c.mean }
294
287
  end
295
- should "jacknife correctly with named method" do
288
+ should 'jacknife correctly with named method' do
296
289
  # First example
297
- a=[1,2,3,4].to_scale
298
- ds=a.jacknife(:mean)
290
+ a = [1, 2, 3, 4].to_scale
291
+ ds = a.jacknife(:mean)
299
292
  assert_equal(a.mean, ds[:mean].mean)
300
- ds=a.jacknife([:mean,:sd])
293
+ ds = a.jacknife([:mean, :sd])
301
294
  assert_equal(a.mean, ds[:mean].mean)
302
295
  assert_equal(a.sd, ds[:mean].sd)
303
296
  end
304
- should "jacknife correctly with custom method" do
297
+ should 'jacknife correctly with custom method' do
305
298
  # Second example
306
- a=[17.23, 18.71,13.93,18.81,15.78,11.29,14.91,13.39, 18.21, 11.57, 14.28, 10.94, 18.83, 15.52,13.45,15.25].to_scale
307
- ds=a.jacknife(:log_s2=>lambda {|v| Math.log(v.variance) })
308
- exp=[1.605, 2.972, 1.151, 3.097, 0.998, 3.308, 0.942, 1.393, 2.416, 2.951, 1.043, 3.806, 3.122, 0.958, 1.362, 0.937].to_scale
299
+ a = [17.23, 18.71, 13.93, 18.81, 15.78, 11.29, 14.91, 13.39, 18.21, 11.57, 14.28, 10.94, 18.83, 15.52, 13.45, 15.25].to_scale
300
+ ds = a.jacknife(log_s2: ->(v) { Math.log(v.variance) })
301
+ exp = [1.605, 2.972, 1.151, 3.097, 0.998, 3.308, 0.942, 1.393, 2.416, 2.951, 1.043, 3.806, 3.122, 0.958, 1.362, 0.937].to_scale
309
302
 
310
303
  assert_similar_vector(exp, ds[:log_s2], 0.001)
311
304
  assert_in_delta(2.00389, ds[:log_s2].mean, 0.00001)
312
305
  assert_in_delta(1.091, ds[:log_s2].variance, 0.001)
313
306
  end
314
- should "jacknife correctly with k>1" do
315
- a=rnorm(6)
316
- ds=a.jacknife(:mean,2)
317
- mean=a.mean
318
- exp=[3*mean-2*(a[2]+a[3]+a[4]+a[5]) / 4, 3*mean-2*(a[0]+a[1]+a[4]+a[5]) / 4, 3*mean-2*(a[0]+a[1]+a[2]+a[3]) / 4].to_scale
307
+ should 'jacknife correctly with k>1' do
308
+ a = rnorm(6)
309
+ ds = a.jacknife(:mean, 2)
310
+ mean = a.mean
311
+ exp = [3 * mean - 2 * (a[2] + a[3] + a[4] + a[5]) / 4, 3 * mean - 2 * (a[0] + a[1] + a[4] + a[5]) / 4, 3 * mean - 2 * (a[0] + a[1] + a[2] + a[3]) / 4].to_scale
319
312
  assert_similar_vector(exp, ds[:mean], 1e-13)
320
313
  end
321
- should "bootstrap should return a vector with mean=mu and sd=se" do
322
- a=rnorm(100)
323
- ds=a.bootstrap([:mean,:sd],200)
324
- se=1/Math.sqrt(a.size)
314
+ should 'bootstrap should return a vector with mean=mu and sd=se' do
315
+ a = rnorm(100)
316
+ ds = a.bootstrap([:mean, :sd], 200)
317
+ se = 1 / Math.sqrt(a.size)
325
318
  assert_in_delta(0, ds[:mean].mean, 0.3)
326
319
  assert_in_delta(se, ds[:mean].sd, 0.02)
327
320
  end
328
-
329
-
330
321
  end
331
322
 
332
-
333
-
334
323
  def test_nominal
335
- assert_equal(@c[1],5)
336
- assert_equal({ 1=>1,2=>1,3=>1,4=>1,5=>5,6=>2,7=>1,8=>1, 9=>1,10=>1},@c.frequencies)
337
- assert_equal({ 1=>1,2=>1,3=>1,4=>1,5=>5,6=>2,7=>1,8=>1, 9=>1,10=>1},@c._frequencies)
338
- assert_equal({ 1 => 1.quo(15) ,2=>1.quo(15), 3=>1.quo(15),4=>1.quo(15),5=>5.quo(15),6=>2.quo(15),7=>1.quo(15), 8=>1.quo(15), 9=>1.quo(15),10=>1.quo(15)}, @c.proportions)
324
+ assert_equal(@c[1], 5)
325
+ assert_equal({ 1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 5, 6 => 2, 7 => 1, 8 => 1, 9 => 1, 10 => 1 }, @c.frequencies)
326
+ assert_equal({ 1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 5, 6 => 2, 7 => 1, 8 => 1, 9 => 1, 10 => 1 }, @c._frequencies)
327
+ assert_equal({ 1 => 1.quo(15), 2 => 1.quo(15), 3 => 1.quo(15), 4 => 1.quo(15), 5 => 5.quo(15), 6 => 2.quo(15), 7 => 1.quo(15), 8 => 1.quo(15), 9 => 1.quo(15), 10 => 1.quo(15) }, @c.proportions)
339
328
  assert_equal(@c.proportion, 1.quo(15))
340
329
  assert_equal(@c.proportion(2), 1.quo(15))
341
- assert_equal([1,2,3,4,5,6,7,8,9,10], @c.factors.sort)
342
- assert_equal(@c.mode,5)
343
- assert_equal(@c.n_valid,15)
330
+ assert_equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], @c.factors.sort)
331
+ assert_equal(@c.mode, 5)
332
+ assert_equal(@c.n_valid, 15)
344
333
  end
334
+
345
335
  def test_equality
346
- v1=[1,2,3].to_vector
347
- v2=[1,2,3].to_vector
348
- assert_equal(v1,v2)
349
- v1=[1,2,3].to_vector(:nominal)
350
- v2=[1,2,3].to_vector(:ordinal)
351
- assert_not_equal(v1,v2)
352
- v2=[1,2,3]
353
- assert_not_equal(v1,v2)
354
- v1=[1,2,3].to_vector()
355
- v2=[1,2,3].to_vector()
356
- assert_equal(v1,v2)
336
+ v1 = [1, 2, 3].to_vector
337
+ v2 = [1, 2, 3].to_vector
338
+ assert_equal(v1, v2)
339
+ v1 = [1, 2, 3].to_vector(:nominal)
340
+ v2 = [1, 2, 3].to_vector(:ordinal)
341
+ assert_not_equal(v1, v2)
342
+ v2 = [1, 2, 3]
343
+ assert_not_equal(v1, v2)
344
+ v1 = [1, 2, 3].to_vector
345
+ v2 = [1, 2, 3].to_vector
346
+ assert_equal(v1, v2)
357
347
  assert_equal(false, v1 == Object.new)
358
348
  end
349
+
359
350
  def test_vector_percentil
360
- a=[1,2,2,3,4,5,5,5,6,10].to_scale
361
- expected=[10,25,25,40,50,70,70,70,90,100].to_scale
351
+ a = [1, 2, 2, 3, 4, 5, 5, 5, 6, 10].to_scale
352
+ expected = [10, 25, 25, 40, 50, 70, 70, 70, 90, 100].to_scale
362
353
  assert_equal(expected, a.vector_percentil)
363
- a=[1,nil,nil,2,2,3,4,nil,nil,5,5,5,6,10].to_scale
364
- expected=[10,nil,nil,25,25,40,50,nil,nil,70,70,70,90,100].to_scale
354
+ a = [1, nil, nil, 2, 2, 3, 4, nil, nil, 5, 5, 5, 6, 10].to_scale
355
+ expected = [10, nil, nil, 25, 25, 40, 50, nil, nil, 70, 70, 70, 90, 100].to_scale
365
356
  assert_equal(expected, a.vector_percentil)
366
357
  end
358
+
367
359
  def test_ordinal
368
- @c.type=:ordinal
369
- assert_equal(5,@c.median)
370
- assert_equal(4,@c.percentil(25))
371
- assert_equal(7,@c.percentil(75))
372
-
373
- v=[200000, 200000, 210000, 220000, 230000, 250000, 250000, 250000, 270000, 300000, 450000, 130000, 140000, 140000, 140000, 145000, 148000, 165000, 170000, 180000, 180000, 180000, 180000, 180000, 180000 ].to_scale
374
- assert_equal(180000,v.median)
375
- a=[7.0, 7.0, 7.0, 7.0, 7.0, 8.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 10.0, 10.0, 10.0, 12.0, 12.0, 13.0, 14.0, 14.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0].to_scale
360
+ @c.type = :ordinal
361
+ assert_equal(5, @c.median)
362
+ assert_equal(4, @c.percentil(25))
363
+ assert_equal(7, @c.percentil(75))
364
+
365
+ v = [200_000, 200_000, 210_000, 220_000, 230_000, 250_000, 250_000, 250_000, 270_000, 300_000, 450_000, 130_000, 140_000, 140_000, 140_000, 145_000, 148_000, 165_000, 170_000, 180_000, 180_000, 180_000, 180_000, 180_000, 180_000].to_scale
366
+ assert_equal(180_000, v.median)
367
+ a = [7.0, 7.0, 7.0, 7.0, 7.0, 8.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 10.0, 10.0, 10.0, 12.0, 12.0, 13.0, 14.0, 14.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0].to_scale
376
368
  assert_equal(4.5, a.percentil(25))
377
369
  assert_equal(6.5, a.percentil(50))
378
370
  assert_equal(9.5, a.percentil(75))
379
371
  assert_equal(3.0, a.percentil(10))
380
372
  end
373
+
381
374
  def test_linear_percentil_strategy
382
375
  values = [102, 104, 105, 107, 108, 109, 110, 112, 115, 116].shuffle.to_scale
383
376
  assert_equal 102, values.percentil(0, :linear)
@@ -393,252 +386,268 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
393
386
  assert_equal 115, values.percentil(75, :linear)
394
387
  assert_equal 118, values.percentil(100, :linear)
395
388
  end
389
+
396
390
  def test_ranked
397
- v1=[0.8,1.2,1.2,2.3,18].to_vector(:ordinal)
398
- expected=[1,2.5,2.5,4,5].to_vector(:ordinal)
399
- assert_equal(expected,v1.ranked)
400
- v1=[nil,0.8,1.2,1.2,2.3,18,nil].to_vector(:ordinal)
401
- expected=[nil,1,2.5,2.5,4,5,nil].to_vector(:ordinal)
402
- assert_equal(expected,v1.ranked)
391
+ v1 = [0.8, 1.2, 1.2, 2.3, 18].to_vector(:ordinal)
392
+ expected = [1, 2.5, 2.5, 4, 5].to_vector(:ordinal)
393
+ assert_equal(expected, v1.ranked)
394
+ v1 = [nil, 0.8, 1.2, 1.2, 2.3, 18, nil].to_vector(:ordinal)
395
+ expected = [nil, 1, 2.5, 2.5, 4, 5, nil].to_vector(:ordinal)
396
+ assert_equal(expected, v1.ranked)
403
397
  end
398
+
404
399
  def test_scale
405
- a=Statsample::Vector.new([1,2,3,4,"STRING"], :scale)
400
+ a = Statsample::Vector.new([1, 2, 3, 4, 'STRING'], :scale)
406
401
  assert_equal(10, a.sum)
407
- i=0
408
- factors=a.factors.sort
409
- [0,1,2,3,4].each{|v|
410
- assert(v==factors[i])
411
- assert(v.class==factors[i].class,"#{v} - #{v.class} != #{factors[i]} - #{factors[i].class}")
412
- i+=1
402
+ i = 0
403
+ factors = a.factors.sort
404
+ [0, 1, 2, 3, 4].each{|v|
405
+ assert(v == factors[i])
406
+ assert(v.class == factors[i].class, "#{v} - #{v.class} != #{factors[i]} - #{factors[i].class}")
407
+ i += 1
413
408
  }
414
409
  end
410
+
415
411
  def test_vector_centered
416
- mean=rand()
417
- samples=11
418
- centered=samples.times.map {|i| i-((samples/2).floor).to_i}.to_scale
419
- not_centered=centered.recode {|v| v+mean}
420
- obs=not_centered.centered
421
- centered.each_with_index do |v,i|
422
- assert_in_delta(v,obs[i],0.0001)
412
+ mean = rand
413
+ samples = 11
414
+ centered = samples.times.map { |i| i - ((samples / 2).floor).to_i }.to_scale
415
+ not_centered = centered.recode { |v| v + mean }
416
+ obs = not_centered.centered
417
+ centered.each_with_index do |v, i|
418
+ assert_in_delta(v, obs[i], 0.0001)
423
419
  end
424
420
  end
421
+
425
422
  def test_vector_standarized
426
- v1=[1,2,3,4,nil].to_vector(:scale)
427
- sds=v1.sds
428
- expected=[((1-2.5).quo(sds)),((2-2.5).quo(sds)),((3-2.5).quo(sds)),((4-2.5).quo(sds)), nil].to_vector(:scale)
429
- vs=v1.vector_standarized
423
+ v1 = [1, 2, 3, 4, nil].to_vector(:scale)
424
+ sds = v1.sds
425
+ expected = [((1 - 2.5).quo(sds)), ((2 - 2.5).quo(sds)), ((3 - 2.5).quo(sds)), ((4 - 2.5).quo(sds)), nil].to_vector(:scale)
426
+ vs = v1.vector_standarized
430
427
  assert_equal(expected, vs)
431
- assert_equal(0,vs.mean)
432
- assert_equal(1,vs.sds)
428
+ assert_equal(0, vs.mean)
429
+ assert_equal(1, vs.sds)
433
430
  end
434
431
 
435
432
  def test_vector_standarized_with_zero_variance
436
- v1=100.times.map {|i| 1}.to_scale
437
- exp=100.times.map {nil}.to_scale
438
- assert_equal(exp,v1.standarized)
433
+ v1 = 100.times.map { |_i| 1 }.to_scale
434
+ exp = 100.times.map { nil }.to_scale
435
+ assert_equal(exp, v1.standarized)
439
436
  end
440
437
 
441
- def test_check_type
442
- v=Statsample::Vector.new
443
- v.type=:nominal
444
- assert_raise(NoMethodError) { v.check_type(:scale)}
445
- assert_raise(NoMethodError) { v.check_type(:ordinal)}
438
+ def test_check_type
439
+ v = Statsample::Vector.new
440
+ v.type = :nominal
441
+ assert_raise(NoMethodError) { v.check_type(:scale) }
442
+ assert_raise(NoMethodError) { v.check_type(:ordinal) }
446
443
  assert(v.check_type(:nominal).nil?)
447
444
 
448
- v.type=:ordinal
445
+ v.type = :ordinal
449
446
 
450
- assert_raise(NoMethodError) { v.check_type(:scale)}
447
+ assert_raise(NoMethodError) { v.check_type(:scale) }
451
448
 
452
449
  assert(v.check_type(:ordinal).nil?)
453
450
  assert(v.check_type(:nominal).nil?)
454
451
 
455
-
456
- v.type=:scale
452
+ v.type = :scale
457
453
  assert(v.check_type(:scale).nil?)
458
454
  assert(v.check_type(:ordinal).nil?)
459
455
  assert(v.check_type(:nominal).nil?)
460
456
 
461
- v.type=:date
462
- assert_raise(NoMethodError) { v.check_type(:scale)}
463
- assert_raise(NoMethodError) { v.check_type(:ordinal)}
464
- assert_raise(NoMethodError) { v.check_type(:nominal)}
465
- end
457
+ v.type = :date
458
+ assert_raise(NoMethodError) { v.check_type(:scale) }
459
+ assert_raise(NoMethodError) { v.check_type(:ordinal) }
460
+ assert_raise(NoMethodError) { v.check_type(:nominal) }
461
+ end
466
462
 
467
463
  def test_add
468
- a=Statsample::Vector.new([1,2,3,4,5], :scale)
469
- b=Statsample::Vector.new([11,12,13,14,15], :scale)
470
- assert_equal([3,4,5,6,7], (a+2).to_a)
471
- assert_equal([12,14,16,18,20], (a+b).to_a)
472
- assert_raise ArgumentError do
464
+ a = Statsample::Vector.new([1, 2, 3, 4, 5], :scale)
465
+ b = Statsample::Vector.new([11, 12, 13, 14, 15], :scale)
466
+ assert_equal([3, 4, 5, 6, 7], (a + 2).to_a)
467
+ assert_equal([12, 14, 16, 18, 20], (a + b).to_a)
468
+ assert_raise ArgumentError do
473
469
  a + @c
474
470
  end
475
- assert_raise TypeError do
476
- a+"string"
471
+ assert_raise TypeError do
472
+ a + 'string'
477
473
  end
478
- a=Statsample::Vector.new([nil,1, 2 ,3 ,4 ,5], :scale)
479
- b=Statsample::Vector.new([11, 12,nil,13,14,15], :scale)
480
- assert_equal([nil,13,nil,16,18,20], (a+b).to_a)
481
- assert_equal([nil,13,nil,16,18,20], (a+b.to_a).to_a)
474
+ a = Statsample::Vector.new([nil, 1, 2, 3, 4, 5], :scale)
475
+ b = Statsample::Vector.new([11, 12, nil, 13, 14, 15], :scale)
476
+ assert_equal([nil, 13, nil, 16, 18, 20], (a + b).to_a)
477
+ assert_equal([nil, 13, nil, 16, 18, 20], (a + b.to_a).to_a)
482
478
  end
479
+
483
480
  def test_minus
484
- a=Statsample::Vector.new([1,2,3,4,5], :scale)
485
- b=Statsample::Vector.new([11,12,13,14,15], :scale)
486
- assert_equal([-1,0,1,2,3], (a-2).to_a)
487
- assert_equal([10,10,10,10,10], (b-a).to_a)
488
- assert_raise ArgumentError do
489
- a-@c
490
- end
491
- assert_raise TypeError do
492
- a-"string"
493
- end
494
- a=Statsample::Vector.new([nil,1, 2 ,3 ,4 ,5], :scale)
495
- b=Statsample::Vector.new([11, 12,nil,13,14,15], :scale)
496
- assert_equal([nil,11,nil,10,10,10], (b-a).to_a)
497
- assert_equal([nil,11,nil,10,10,10], (b-a.to_a).to_a)
481
+ a = Statsample::Vector.new([1, 2, 3, 4, 5], :scale)
482
+ b = Statsample::Vector.new([11, 12, 13, 14, 15], :scale)
483
+ assert_equal([-1, 0, 1, 2, 3], (a - 2).to_a)
484
+ assert_equal([10, 10, 10, 10, 10], (b - a).to_a)
485
+ assert_raise ArgumentError do
486
+ a - @c
487
+ end
488
+ assert_raise TypeError do
489
+ a - 'string'
490
+ end
491
+ a = Statsample::Vector.new([nil, 1, 2, 3, 4, 5], :scale)
492
+ b = Statsample::Vector.new([11, 12, nil, 13, 14, 15], :scale)
493
+ assert_equal([nil, 11, nil, 10, 10, 10], (b - a).to_a)
494
+ assert_equal([nil, 11, nil, 10, 10, 10], (b - a.to_a).to_a)
498
495
  end
496
+
499
497
  def test_sum_of_squares
500
- a=[1,2,3,4,5,6].to_vector(:scale)
498
+ a = [1, 2, 3, 4, 5, 6].to_vector(:scale)
501
499
  assert_equal(17.5, a.sum_of_squared_deviation)
502
500
  end
501
+
503
502
  def test_average_deviation
504
- a=[1,2,3,4,5,6,7,8,9].to_scale
503
+ a = [1, 2, 3, 4, 5, 6, 7, 8, 9].to_scale
505
504
  assert_equal(20.quo(9), a.average_deviation_population)
506
505
  end
506
+
507
507
  def test_samples
508
508
  srand(1)
509
- assert_equal(100,@c.sample_with_replacement(100).size)
509
+ assert_equal(100, @c.sample_with_replacement(100).size)
510
510
  assert_equal(@c.valid_data.to_a.sort, @c.sample_without_replacement(15).sort)
511
- assert_raise ArgumentError do
511
+ assert_raise ArgumentError do
512
512
  @c.sample_without_replacement(20)
513
513
  end
514
- @c.type=:scale
514
+ @c.type = :scale
515
515
  srand(1)
516
516
  assert_equal(100, @c.sample_with_replacement(100).size)
517
517
  assert_equal(@c.valid_data.to_a.sort, @c.sample_without_replacement(15).sort)
518
-
519
518
  end
519
+
520
520
  def test_valid_data
521
- a=Statsample::Vector.new([1,2,3,4,"STRING"])
522
- a.missing_values=[-99]
523
- a.add(1,false)
524
- a.add(2,false)
525
- a.add(-99,false)
521
+ a = Statsample::Vector.new([1, 2, 3, 4, 'STRING'])
522
+ a.missing_values = [-99]
523
+ a.add(1, false)
524
+ a.add(2, false)
525
+ a.add(-99, false)
526
526
  a.set_valid_data
527
- exp_valid_data=[1,2,3,4,"STRING",1,2]
528
- assert_equal(exp_valid_data,a.valid_data)
529
- a.add(20,false)
530
- a.add(30,false)
531
- assert_equal(exp_valid_data,a.valid_data)
527
+ exp_valid_data = [1, 2, 3, 4, 'STRING', 1, 2]
528
+ assert_equal(exp_valid_data, a.valid_data)
529
+ a.add(20, false)
530
+ a.add(30, false)
531
+ assert_equal(exp_valid_data, a.valid_data)
532
532
  a.set_valid_data
533
- exp_valid_data_2=[1,2,3,4,"STRING",1,2,20,30]
534
- assert_equal(exp_valid_data_2,a.valid_data)
533
+ exp_valid_data_2 = [1, 2, 3, 4, 'STRING', 1, 2, 20, 30]
534
+ assert_equal(exp_valid_data_2, a.valid_data)
535
535
  end
536
+
536
537
  def test_set_value
537
- @c[2]=10
538
- expected=[5,5,10,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99].to_vector
539
- assert_equal(expected.data,@c.data)
538
+ @c[2] = 10
539
+ expected = [5, 5, 10, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, nil, -99, -99].to_vector
540
+ assert_equal(expected.data, @c.data)
540
541
  end
542
+
541
543
  def test_gsl
542
544
  if Statsample.has_gsl?
543
- a=Statsample::Vector.new([1,2,3,4,"STRING"], :scale)
545
+ a = Statsample::Vector.new([1, 2, 3, 4, 'STRING'], :scale)
544
546
 
545
- assert_equal(2,a.mean)
546
- assert_equal(a.variance_sample_ruby,a.variance_sample)
547
- assert_equal(a.standard_deviation_sample_ruby,a.sds)
548
- assert_equal(a.variance_population_ruby,a.variance_population)
549
- assert_equal(a.standard_deviation_population_ruby,a.standard_deviation_population)
547
+ assert_equal(2, a.mean)
548
+ assert_equal(a.variance_sample_ruby, a.variance_sample)
549
+ assert_equal(a.standard_deviation_sample_ruby, a.sds)
550
+ assert_equal(a.variance_population_ruby, a.variance_population)
551
+ assert_equal(a.standard_deviation_population_ruby, a.standard_deviation_population)
550
552
  assert_nothing_raised do
551
- a=[].to_vector(:scale)
553
+ a = [].to_vector(:scale)
552
554
  end
553
- a.add(1,false)
554
- a.add(2,false)
555
+ a.add(1, false)
556
+ a.add(2, false)
555
557
  a.set_valid_data
556
- assert_equal(3,a.sum)
557
- b=[1,2,nil,3,4,5,nil,6].to_vector(:scale)
558
+ assert_equal(3, a.sum)
559
+ b = [1, 2, nil, 3, 4, 5, nil, 6].to_vector(:scale)
558
560
  assert_equal(21, b.sum)
559
561
  assert_equal(3.5, b.mean)
560
- assert_equal(6,b.gsl.size)
561
- c=[10,20,30,40,50,100,1000,2000,5000].to_scale
562
- assert_in_delta(c.skew, c.skew_ruby ,0.0001)
563
- assert_in_delta(c.kurtosis, c.kurtosis_ruby ,0.0001)
562
+ assert_equal(6, b.gsl.size)
563
+ c = [10, 20, 30, 40, 50, 100, 1000, 2000, 5000].to_scale
564
+ assert_in_delta(c.skew, c.skew_ruby, 0.0001)
565
+ assert_in_delta(c.kurtosis, c.kurtosis_ruby, 0.0001)
564
566
  end
565
567
  end
568
+
566
569
  def test_vector_matrix
567
- v1=%w{a a a b b b c c}.to_vector
568
- v2=%w{1 3 4 5 6 4 3 2}.to_vector
569
- v3=%w{1 0 0 0 1 1 1 0}.to_vector
570
- ex=Matrix.rows([["a", "1", "1"], ["a", "3", "0"], ["a", "4", "0"], ["b", "5", "0"], ["b", "6", "1"], ["b", "4", "1"], ["c", "3", "1"], ["c", "2", "0"]])
571
- assert_equal(ex,Statsample.vector_cols_matrix(v1,v2,v3))
570
+ v1 = %w(a a a b b b c c).to_vector
571
+ v2 = %w(1 3 4 5 6 4 3 2).to_vector
572
+ v3 = %w(1 0 0 0 1 1 1 0).to_vector
573
+ ex = Matrix.rows([%w(a 1 1), %w(a 3 0), %w(a 4 0), %w(b 5 0), %w(b 6 1), %w(b 4 1), %w(c 3 1), %w(c 2 0)])
574
+ assert_equal(ex, Statsample.vector_cols_matrix(v1, v2, v3))
572
575
  end
576
+
573
577
  def test_marshalling
574
- v1=(0..100).to_a.collect{|n| rand(100)}.to_vector(:scale)
575
- v2=Marshal.load(Marshal.dump(v1))
576
- assert_equal(v1,v2)
578
+ v1 = (0..100).to_a.collect { |_n| rand(100) }.to_vector(:scale)
579
+ v2 = Marshal.load(Marshal.dump(v1))
580
+ assert_equal(v1, v2)
577
581
  end
582
+
578
583
  def test_dup
579
- v1=%w{a a a b b b c c}.to_vector
580
- v2=v1.dup
581
- assert_equal(v1.data,v2.data)
582
- assert_not_same(v1.data,v2.data)
583
- assert_equal(v1.type,v2.type)
584
-
585
- v1.type=:ordinal
586
- assert_not_equal(v1.type,v2.type)
587
- assert_equal(v1.missing_values,v2.missing_values)
588
- assert_not_same(v1.missing_values,v2.missing_values)
589
- assert_equal(v1.labels,v2.labels)
590
- assert_not_same(v1.labels,v2.labels)
591
-
592
- v3=v1.dup_empty
593
- assert_equal([],v3.data)
594
- assert_not_equal(v1.data,v3.data)
595
- assert_not_same(v1.data,v3.data)
596
- assert_equal(v1.type,v3.type)
597
- v1.type=:ordinal
598
- v3.type=:nominal
599
- assert_not_equal(v1.type,v3.type)
600
- assert_equal(v1.missing_values,v3.missing_values)
601
- assert_not_same(v1.missing_values,v3.missing_values)
602
- assert_equal(v1.labels,v3.labels)
603
- assert_not_same(v1.labels,v3.labels)
584
+ v1 = %w(a a a b b b c c).to_vector
585
+ v2 = v1.dup
586
+ assert_equal(v1.data, v2.data)
587
+ assert_not_same(v1.data, v2.data)
588
+ assert_equal(v1.type, v2.type)
589
+
590
+ v1.type = :ordinal
591
+ assert_not_equal(v1.type, v2.type)
592
+ assert_equal(v1.missing_values, v2.missing_values)
593
+ assert_not_same(v1.missing_values, v2.missing_values)
594
+ assert_equal(v1.labels, v2.labels)
595
+ assert_not_same(v1.labels, v2.labels)
596
+
597
+ v3 = v1.dup_empty
598
+ assert_equal([], v3.data)
599
+ assert_not_equal(v1.data, v3.data)
600
+ assert_not_same(v1.data, v3.data)
601
+ assert_equal(v1.type, v3.type)
602
+ v1.type = :ordinal
603
+ v3.type = :nominal
604
+ assert_not_equal(v1.type, v3.type)
605
+ assert_equal(v1.missing_values, v3.missing_values)
606
+ assert_not_same(v1.missing_values, v3.missing_values)
607
+ assert_equal(v1.labels, v3.labels)
608
+ assert_not_same(v1.labels, v3.labels)
604
609
  end
610
+
605
611
  def test_paired_ties
606
- a=[0,0,0,1,1,2,3,3,4,4,4].to_vector(:ordinal)
607
- expected=[2,2,2,4.5,4.5,6,7.5,7.5,10,10,10].to_vector(:ordinal)
608
- assert_equal(expected,a.ranked)
612
+ a = [0, 0, 0, 1, 1, 2, 3, 3, 4, 4, 4].to_vector(:ordinal)
613
+ expected = [2, 2, 2, 4.5, 4.5, 6, 7.5, 7.5, 10, 10, 10].to_vector(:ordinal)
614
+ assert_equal(expected, a.ranked)
609
615
  end
616
+
610
617
  def test_dichotomize
611
- a= [0,0,0,1,2,3,nil].to_vector
612
- exp=[0,0,0,1,1,1,nil].to_scale
613
- assert_equal(exp,a.dichotomize)
614
- a= [1,1,1,2,2,2,3].to_vector
615
- exp=[0,0,0,1,1,1,1].to_scale
616
- assert_equal(exp,a.dichotomize)
617
- a= [0,0,0,1,2,3,nil].to_vector
618
- exp=[0,0,0,0,1,1,nil].to_scale
619
- assert_equal(exp,a.dichotomize(1))
620
- a= %w{a a a b c d}.to_vector
621
- exp=[0,0,0,1,1,1].to_scale
618
+ a = [0, 0, 0, 1, 2, 3, nil].to_vector
619
+ exp = [0, 0, 0, 1, 1, 1, nil].to_scale
620
+ assert_equal(exp, a.dichotomize)
621
+ a = [1, 1, 1, 2, 2, 2, 3].to_vector
622
+ exp = [0, 0, 0, 1, 1, 1, 1].to_scale
623
+ assert_equal(exp, a.dichotomize)
624
+ a = [0, 0, 0, 1, 2, 3, nil].to_vector
625
+ exp = [0, 0, 0, 0, 1, 1, nil].to_scale
626
+ assert_equal(exp, a.dichotomize(1))
627
+ a = %w(a a a b c d).to_vector
628
+ exp = [0, 0, 0, 1, 1, 1].to_scale
622
629
  assert_equal(exp, a.dichotomize)
623
630
  end
631
+
624
632
  def test_can_be_methods
625
- a= [0,0,0,1,2,3,nil].to_vector
633
+ a = [0, 0, 0, 1, 2, 3, nil].to_vector
626
634
  assert(a.can_be_scale?)
627
- a=[0,"s",0,1,2,3,nil].to_vector
635
+ a = [0, 's', 0, 1, 2, 3, nil].to_vector
628
636
  assert(!a.can_be_scale?)
629
- a.missing_values=["s"]
637
+ a.missing_values = ['s']
630
638
  assert(a.can_be_scale?)
631
639
 
632
- a=[Date.new(2009,10,10), Date.today(), "2009-10-10", "2009-1-1", nil, "NOW"].to_vector
640
+ a = [Date.new(2009, 10, 10), Date.today, '2009-10-10', '2009-1-1', nil, 'NOW'].to_vector
633
641
  assert(a.can_be_date?)
634
- a=[Date.new(2009,10,10), Date.today(),nil,"sss"].to_vector
642
+ a = [Date.new(2009, 10, 10), Date.today, nil, 'sss'].to_vector
635
643
  assert(!a.can_be_date?)
636
644
  end
645
+
637
646
  def test_date_vector
638
- a=[Date.new(2009,10,10), :NOW, "2009-10-10", "2009-1-1", nil, "NOW","MISSING"].to_vector(:date, :missing_values=>["MISSING"])
647
+ a = [Date.new(2009, 10, 10), :NOW, '2009-10-10', '2009-1-1', nil, 'NOW', 'MISSING'].to_vector(:date, missing_values: ['MISSING'])
639
648
 
640
- assert(a.type==:date)
641
- expected=[Date.new(2009,10,10), Date.today(), Date.new(2009,10,10), Date.new(2009,1,1), nil, Date.today(), nil ]
649
+ assert(a.type == :date)
650
+ expected = [Date.new(2009, 10, 10), Date.today, Date.new(2009, 10, 10), Date.new(2009, 1, 1), nil, Date.today, nil]
642
651
  assert_equal(expected, a.date_data_with_nils)
643
652
  end
644
653
  end