statsample 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -0
- data/Manifest.txt +15 -9
- data/README.txt +6 -0
- data/Rakefile +8 -0
- data/{demo → examples}/correlation_matrix.rb +0 -0
- data/{demo/dominanceanalysis.rb → examples/dominance_analysis.rb} +0 -0
- data/{demo → examples}/dominance_analysis_bootstrap.rb +0 -0
- data/{demo → examples}/levene.rb +0 -0
- data/{demo → examples}/multiple_regression.rb +5 -3
- data/{demo → examples}/multivariate_correlation.rb +0 -0
- data/{demo → examples}/polychoric.rb +0 -0
- data/{demo → examples}/principal_axis.rb +0 -0
- data/examples/t_test.rb +11 -0
- data/{demo → examples}/tetrachoric.rb +0 -0
- data/lib/statistics2.rb +1 -1
- data/lib/statsample.rb +57 -6
- data/lib/statsample/bivariate/polychoric.rb +12 -25
- data/lib/statsample/bivariate/tetrachoric.rb +1 -3
- data/lib/statsample/converter/csv.rb +11 -12
- data/lib/statsample/dominanceanalysis/bootstrap.rb +2 -3
- data/lib/statsample/factor/principalaxis.rb +0 -2
- data/lib/statsample/factor/rotation.rb +6 -8
- data/lib/statsample/graph.rb +8 -0
- data/lib/statsample/graph/svggraph.rb +0 -4
- data/lib/statsample/regression/multiple/baseengine.rb +25 -28
- data/lib/statsample/regression/multiple/matrixengine.rb +30 -34
- data/lib/statsample/test.rb +36 -1
- data/lib/statsample/test/levene.rb +11 -7
- data/lib/statsample/test/t.rb +189 -0
- data/test/test_anova.rb +8 -10
- data/test/test_bivariate.rb +40 -37
- data/test/test_codification.rb +9 -13
- data/test/test_combination.rb +37 -39
- data/test/test_crosstab.rb +46 -48
- data/test/test_csv.rb +40 -45
- data/test/test_dataset.rb +150 -152
- data/test/test_distribution.rb +24 -21
- data/test/test_dominance_analysis.rb +10 -12
- data/test/test_factor.rb +95 -91
- data/test/test_ggobi.rb +30 -33
- data/test/test_gsl.rb +4 -4
- data/test/test_helpers.rb +26 -0
- data/test/test_histogram.rb +5 -6
- data/test/test_logit.rb +20 -21
- data/test/test_matrix.rb +47 -48
- data/test/test_mle.rb +130 -131
- data/test/test_multiset.rb +95 -96
- data/test/test_permutation.rb +35 -36
- data/test/test_promise_after.rb +39 -0
- data/test/test_regression.rb +49 -51
- data/test/test_reliability.rb +29 -30
- data/test/test_resample.rb +22 -23
- data/test/test_srs.rb +8 -9
- data/test/test_statistics.rb +12 -6
- data/test/test_stest.rb +18 -10
- data/test/test_stratified.rb +15 -16
- data/test/test_svg_graph.rb +11 -22
- data/test/test_test_t.rb +40 -0
- data/test/test_umannwhitney.rb +14 -15
- data/test/test_vector.rb +33 -37
- data/test/test_xls.rb +34 -41
- metadata +22 -11
data/test/test_bivariate.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'minitest/unit'
|
4
|
-
MiniTest::Unit.autorun
|
1
|
+
require(File.dirname(__FILE__)+'/test_helpers.rb')
|
2
|
+
|
5
3
|
class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
6
4
|
def test_sum_of_squares
|
7
5
|
v1=[1,2,3,4,5,6].to_vector(:scale)
|
@@ -16,25 +14,25 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
16
14
|
else
|
17
15
|
puts "Bivariate::covariance not tested (needs GSL)"
|
18
16
|
end
|
19
|
-
|
17
|
+
|
20
18
|
end
|
21
19
|
|
22
20
|
def test_gsl_pearson
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
if Statsample.has_gsl?
|
22
|
+
v1=100.times.collect {|a| rand()}.to_scale
|
23
|
+
v2=100.times.collect {|a| rand()}.to_scale
|
24
|
+
|
25
|
+
assert_in_delta(GSL::Stats::correlation(v1.gsl, v2.gsl), Statsample::Bivariate.pearson_slow(v1,v2), 1e-10)
|
26
|
+
else
|
27
|
+
puts "Not tested gsl versus ruby correlation (needs GSL)"
|
28
|
+
end
|
31
29
|
end
|
32
30
|
def test_pearson
|
33
31
|
v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
|
34
32
|
v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
|
35
33
|
assert_in_delta(0.525,Statsample::Bivariate.pearson(v1,v2), 0.001)
|
36
34
|
assert_in_delta(0.525,Statsample::Bivariate.pearson_slow(v1,v2), 0.001)
|
37
|
-
|
35
|
+
|
38
36
|
v3=[6,2, 1000,1000,5,4,7,8,4,3,2,nil].to_vector(:scale)
|
39
37
|
v4=[2,nil,nil,nil, 3,7,8,6,4,3,2,500].to_vector(:scale)
|
40
38
|
assert_in_delta(0.525,Statsample::Bivariate.pearson(v3,v4),0.001)
|
@@ -53,6 +51,11 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
54
|
+
def test_polychoric_summary
|
55
|
+
matrix=Matrix[[150+rand(2),150+rand(2)],[150+rand(2),150+rand(2)],[200,300]]
|
56
|
+
poly = Statsample::Bivariate::Polychoric.new(matrix)
|
57
|
+
assert(poly.summary.size>0)
|
58
|
+
end
|
56
59
|
def test_poly_vs_tetra
|
57
60
|
5.times {
|
58
61
|
# Should be the same results as Tetrachoric for 2x2 matrix
|
@@ -68,19 +71,19 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
68
71
|
}
|
69
72
|
end
|
70
73
|
def test_polychoric
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
if Statsample.has_gsl?
|
74
|
+
|
75
|
+
matrix=Matrix[[58,52,1],[26,58,3],[8,12,9]]
|
76
|
+
poly=Statsample::Bivariate::Polychoric.new(matrix)
|
77
|
+
poly.compute_two_step_mle_drasgow_ruby
|
78
|
+
assert_in_delta(0.420, poly.r, 0.001)
|
79
|
+
assert_in_delta(-0.240, poly.threshold_y[0],0.001)
|
80
|
+
assert_in_delta(-0.027, poly.threshold_x[0],0.001)
|
81
|
+
assert_in_delta(1.578, poly.threshold_y[1],0.001)
|
82
|
+
assert_in_delta(1.137, poly.threshold_x[1],0.001)
|
83
|
+
if Statsample.has_gsl?
|
81
84
|
poly.method=:polychoric_series
|
82
85
|
poly.compute
|
83
|
-
|
86
|
+
|
84
87
|
assert_in_delta(0.556, poly.r, 0.001)
|
85
88
|
assert_in_delta(-0.240, poly.threshold_y[0],0.001)
|
86
89
|
assert_in_delta(-0.027, poly.threshold_x[0],0.001)
|
@@ -88,7 +91,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
88
91
|
assert_in_delta(1.137, poly.threshold_x[1],0.001)
|
89
92
|
|
90
93
|
# Example for Tallis(1962, cited by Drasgow, 2006)
|
91
|
-
|
94
|
+
|
92
95
|
matrix=Matrix[[58,52,1],[26,58,3],[8,12,9]]
|
93
96
|
poly=Statsample::Bivariate::Polychoric.new(matrix)
|
94
97
|
poly.compute_two_step_mle_drasgow_gsl
|
@@ -98,11 +101,11 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
98
101
|
assert_in_delta(1.578, poly.threshold_y[1],0.001)
|
99
102
|
assert_in_delta(1.137, poly.threshold_x[1],0.001)
|
100
103
|
|
101
|
-
|
104
|
+
|
102
105
|
poly.method=:joint
|
103
106
|
poly.compute
|
104
|
-
|
105
|
-
|
107
|
+
|
108
|
+
|
106
109
|
assert_in_delta(0.4192, poly.r, 0.0001)
|
107
110
|
assert_in_delta(-0.2421, poly.threshold_y[0],0.0001)
|
108
111
|
assert_in_delta(-0.0297, poly.threshold_x[0],0.0001)
|
@@ -113,7 +116,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
113
116
|
end
|
114
117
|
assert(poly.summary)
|
115
118
|
end
|
116
|
-
|
119
|
+
|
117
120
|
def test_tetrachoric
|
118
121
|
a,b,c,d=0,0,0,0
|
119
122
|
assert_raises RuntimeError do
|
@@ -135,7 +138,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
135
138
|
tc = Statsample::Bivariate::Tetrachoric.new(a,b,c,d)
|
136
139
|
assert_equal(-1,tc.r)
|
137
140
|
assert_equal(0,tc.se)
|
138
|
-
|
141
|
+
|
139
142
|
a,b,c,d = 30,40,70,20
|
140
143
|
tc = Statsample::Bivariate::Tetrachoric.new(a,b,c,d)
|
141
144
|
assert_in_delta(-0.53980,tc.r,0.0001)
|
@@ -162,9 +165,9 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
162
165
|
v3=[6,2, 1000,1000,5,4,7,8].to_vector(:scale)
|
163
166
|
v4=[2,nil,nil,nil, 3,7,8,6].to_vector(:scale)
|
164
167
|
ds={'v1'=>v1,'v2'=>v2,'v3'=>v3,'v4'=>v4}.to_dataset
|
165
|
-
c=Proc.new {|n1,n2|Statsample::Bivariate.pearson(n1,n2)}
|
168
|
+
c=Proc.new {|n1,n2|Statsample::Bivariate.pearson(n1,n2)}
|
166
169
|
expected=Matrix[ [c.call(v1,v1),c.call(v1,v2),c.call(v1,v3),c.call(v1,v4)], [c.call(v2,v1),c.call(v2,v2),c.call(v2,v3),c.call(v2,v4)], [c.call(v3,v1),c.call(v3,v2),c.call(v3,v3),c.call(v3,v4)],
|
167
|
-
|
170
|
+
[c.call(v4,v1),c.call(v4,v2),c.call(v4,v3),c.call(v4,v4)]
|
168
171
|
]
|
169
172
|
obt=Statsample::Bivariate.correlation_matrix(ds)
|
170
173
|
for i in 0...expected.row_size
|
@@ -193,12 +196,12 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
193
196
|
assert(Statsample::Bivariate.prop_pearson(t,n,:right)>0.05)
|
194
197
|
assert(Statsample::Bivariate.prop_pearson(t,n,:left)<0.05)
|
195
198
|
end
|
196
|
-
|
199
|
+
|
197
200
|
def test_spearman
|
198
201
|
v1=[86,97,99,100,101,103,106,110,112,113].to_vector(:scale)
|
199
202
|
v2=[0,20,28,27,50,29,7,17,6,12].to_vector(:scale)
|
200
203
|
assert_in_delta(-0.175758,Statsample::Bivariate.spearman(v1,v2),0.0001)
|
201
|
-
|
204
|
+
|
202
205
|
end
|
203
206
|
def test_point_biserial
|
204
207
|
c=[1,3,5,6,7,100,200,300,400,300].to_vector(:scale)
|
@@ -222,7 +225,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
222
225
|
assert_in_delta(0.636,Statsample::Bivariate.gamma(m),0.001)
|
223
226
|
m2=Matrix[[15,12,6,5],[12,8,10,8],[4,6,9,10]]
|
224
227
|
assert_in_delta(0.349,Statsample::Bivariate.gamma(m2),0.001)
|
225
|
-
|
226
|
-
|
228
|
+
|
229
|
+
|
227
230
|
end
|
228
231
|
end
|
data/test/test_codification.rb
CHANGED
@@ -1,21 +1,17 @@
|
|
1
|
-
|
2
|
-
require 'statsample'
|
3
|
-
require 'tempfile'
|
4
|
-
require 'tmpdir'
|
5
|
-
require 'test/unit'
|
1
|
+
require(File.dirname(__FILE__)+'/test_helpers.rb')
|
6
2
|
|
7
|
-
class StatsampleCodificationTestCase <
|
3
|
+
class StatsampleCodificationTestCase < MiniTest::Unit::TestCase
|
8
4
|
|
9
5
|
def initialize(*args)
|
10
6
|
v1=%w{run walk,run walking running sleep sleeping,dreaming sleep,dream}.to_vector
|
11
7
|
@dict={'run'=>'r','walk'=>'w','walking'=>'w','running'=>'r','sleep'=>'s', 'sleeping'=>'s', 'dream'=>'d', 'dreaming'=>'d'}
|
12
8
|
@ds={"v1"=>v1}.to_dataset
|
13
|
-
|
9
|
+
super
|
14
10
|
end
|
15
11
|
def test_create_hash
|
16
12
|
expected_keys_v1=%w{run walk walking running sleep sleeping dream dreaming}.sort
|
17
13
|
hash=Statsample::Codification.create_hash(@ds,['v1'])
|
18
|
-
assert_equal(['v1'],hash.keys)
|
14
|
+
assert_equal(['v1'],hash.keys)
|
19
15
|
assert_equal(expected_keys_v1,hash['v1'].keys.sort)
|
20
16
|
assert_equal(expected_keys_v1,hash['v1'].values.sort)
|
21
17
|
end
|
@@ -32,11 +28,11 @@ class StatsampleCodificationTestCase < Test::Unit::TestCase
|
|
32
28
|
hash=Statsample::Codification.excel_to_recoded_hash(filename)
|
33
29
|
assert_equal(keys.data, hash['v1'].keys.sort)
|
34
30
|
assert_equal(keys.data, hash['v1'].values.sort)
|
35
|
-
|
31
|
+
|
36
32
|
end
|
37
33
|
def test_create_yaml
|
38
34
|
assert_raise ArgumentError do
|
39
|
-
|
35
|
+
Statsample::Codification.create_yaml(@ds,[])
|
40
36
|
end
|
41
37
|
expected_keys_v1=%w{run walk walking running sleep sleeping dream dreaming}.sort
|
42
38
|
yaml_hash=Statsample::Codification.create_yaml(@ds,['v1'])
|
@@ -73,9 +69,9 @@ class StatsampleCodificationTestCase < Test::Unit::TestCase
|
|
73
69
|
e['s']=[0,0,0,0,1,1,1].to_vector
|
74
70
|
e['d']=[0,0,0,0,0,1,1].to_vector
|
75
71
|
e.each{|k,expected|
|
76
|
-
|
77
|
-
|
72
|
+
assert_equal(expected,@ds['v1_'+k],"Error on key #{k}")
|
73
|
+
|
78
74
|
}
|
79
75
|
end
|
80
76
|
|
81
|
-
end
|
77
|
+
end
|
data/test/test_combination.rb
CHANGED
@@ -1,42 +1,40 @@
|
|
1
|
-
|
2
|
-
require 'statsample'
|
3
|
-
require 'test/unit'
|
1
|
+
require(File.dirname(__FILE__)+'/test_helpers.rb')
|
4
2
|
|
5
|
-
class StatsampleCombinationTestCase <
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
3
|
+
class StatsampleCombinationTestCase < MiniTest::Unit::TestCase
|
4
|
+
def initialize(*args)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
def test_basic
|
8
|
+
k=3
|
9
|
+
n=5
|
10
|
+
expected=[[0,1,2],[0,1,3],[0,1,4],[0,2,3],[0,2,4],[0,3,4],[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
|
11
|
+
comb=Statsample::Combination.new(k,n)
|
12
|
+
a=[]
|
13
|
+
comb.each{|y|
|
14
|
+
a.push(y)
|
15
|
+
}
|
16
|
+
assert_equal(expected,a)
|
17
|
+
end
|
18
|
+
def test_gsl_versus_ruby
|
19
|
+
if Statsample.has_gsl?
|
20
|
+
k=3
|
21
|
+
n=10
|
22
|
+
gsl=Statsample::Combination.new(k,n,false)
|
23
|
+
gsl_array=[]
|
24
|
+
gsl.each{|y|
|
25
|
+
gsl_array.push(y)
|
26
|
+
}
|
27
|
+
rb=Statsample::Combination.new(k,n,true)
|
28
|
+
rb_array=[]
|
29
|
+
rb.each{|y|
|
30
|
+
rb_array.push(y)
|
31
|
+
}
|
32
|
+
assert(gsl.d.is_a?(Statsample::Combination::CombinationGsl))
|
33
|
+
assert(rb.d.is_a?(Statsample::Combination::CombinationRuby))
|
34
|
+
|
35
|
+
assert_equal(rb_array,gsl_array)
|
38
36
|
else
|
39
|
-
|
40
|
-
end
|
37
|
+
puts "Not CombinationRuby vs CombinationGSL (no gsl)"
|
41
38
|
end
|
42
|
-
end
|
39
|
+
end
|
40
|
+
end
|
data/test/test_crosstab.rb
CHANGED
@@ -1,52 +1,50 @@
|
|
1
|
-
|
2
|
-
require 'statsample'
|
3
|
-
require 'test/unit'
|
1
|
+
require(File.dirname(__FILE__)+'/test_helpers.rb')
|
4
2
|
|
5
|
-
class StatsampleCrosstabTestCase <
|
3
|
+
class StatsampleCrosstabTestCase < MiniTest::Unit::TestCase
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
e2=%w{black blonde black black red black brown black blonde black black}.to_vector
|
19
|
-
|
20
|
-
assert_raise ArgumentError do
|
21
|
-
Statsample::Crosstab.new(e2,@v2)
|
22
|
-
end
|
23
|
-
assert_nothing_raised do
|
24
|
-
Statsample::Crosstab.new(@v1,@v2)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
def test_crosstab_basic
|
28
|
-
assert_equal(%w{black blonde brown red}, @ct.rows_names)
|
29
|
-
assert_equal(%w{man woman}, @ct.cols_names)
|
30
|
-
assert_equal({'black'=>7,'blonde'=>3,'red'=>2,'brown'=>1}, @ct.rows_total)
|
31
|
-
assert_equal({'man'=>8,'woman'=>5}, @ct.cols_total)
|
32
|
-
end
|
33
|
-
def test_crosstab_frequencies
|
34
|
-
fq=@ct.frequencies
|
35
|
-
assert_equal(8,fq.size)
|
36
|
-
sum=fq.inject(0) {|s,x| s+x[1]}
|
37
|
-
assert_equal(13,sum)
|
38
|
-
fr=@ct.frequencies_by_row
|
39
|
-
assert_equal(4,fr.size)
|
40
|
-
assert_equal(%w{black blonde brown red},fr.keys.sort)
|
41
|
-
fc=@ct.frequencies_by_col
|
42
|
-
assert_equal(2,fc.size)
|
43
|
-
assert_equal(%w{man woman},fc.keys.sort)
|
44
|
-
assert_equal(Matrix.rows([[3,4],[3,0],[1,0],[1,1]]),@ct.to_matrix)
|
45
|
-
end
|
46
|
-
def test_expected
|
47
|
-
v1=%w{1 1 1 1 1 0 0 0 0 0}.to_vector
|
48
|
-
v2=%w{0 0 0 0 0 1 1 1 1 1}.to_vector
|
49
|
-
ct=Statsample::Crosstab.new(v1,v2)
|
50
|
-
assert_equal(Matrix[[2.5,2.5],[2.5,2.5]],ct.matrix_expected)
|
5
|
+
def initialize(*args)
|
6
|
+
@v1=%w{black blonde black black red black brown black blonde black red black blonde}.to_vector
|
7
|
+
@v2=%w{woman man man woman man man man woman man woman woman man man}.to_vector
|
8
|
+
@ct=Statsample::Crosstab.new(@v1,@v2)
|
9
|
+
super
|
10
|
+
end
|
11
|
+
def test_crosstab_errors
|
12
|
+
e1=%w{black blonde black black red black brown black blonde black}
|
13
|
+
assert_raise ArgumentError do
|
14
|
+
Statsample::Crosstab.new(e1,@v2)
|
51
15
|
end
|
16
|
+
e2=%w{black blonde black black red black brown black blonde black black}.to_vector
|
17
|
+
|
18
|
+
assert_raise ArgumentError do
|
19
|
+
Statsample::Crosstab.new(e2,@v2)
|
20
|
+
end
|
21
|
+
assert_nothing_raised do
|
22
|
+
Statsample::Crosstab.new(@v1,@v2)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
def test_crosstab_basic
|
26
|
+
assert_equal(%w{black blonde brown red}, @ct.rows_names)
|
27
|
+
assert_equal(%w{man woman}, @ct.cols_names)
|
28
|
+
assert_equal({'black'=>7,'blonde'=>3,'red'=>2,'brown'=>1}, @ct.rows_total)
|
29
|
+
assert_equal({'man'=>8,'woman'=>5}, @ct.cols_total)
|
30
|
+
end
|
31
|
+
def test_crosstab_frequencies
|
32
|
+
fq=@ct.frequencies
|
33
|
+
assert_equal(8,fq.size)
|
34
|
+
sum=fq.inject(0) {|s,x| s+x[1]}
|
35
|
+
assert_equal(13,sum)
|
36
|
+
fr=@ct.frequencies_by_row
|
37
|
+
assert_equal(4,fr.size)
|
38
|
+
assert_equal(%w{black blonde brown red},fr.keys.sort)
|
39
|
+
fc=@ct.frequencies_by_col
|
40
|
+
assert_equal(2,fc.size)
|
41
|
+
assert_equal(%w{man woman},fc.keys.sort)
|
42
|
+
assert_equal(Matrix.rows([[3,4],[3,0],[1,0],[1,1]]),@ct.to_matrix)
|
43
|
+
end
|
44
|
+
def test_expected
|
45
|
+
v1=%w{1 1 1 1 1 0 0 0 0 0}.to_vector
|
46
|
+
v2=%w{0 0 0 0 0 1 1 1 1 1}.to_vector
|
47
|
+
ct=Statsample::Crosstab.new(v1,v2)
|
48
|
+
assert_equal(Matrix[[2.5,2.5],[2.5,2.5]],ct.matrix_expected)
|
49
|
+
end
|
52
50
|
end
|
data/test/test_csv.rb
CHANGED
@@ -1,46 +1,41 @@
|
|
1
|
-
|
2
|
-
require 'statsample'
|
3
|
-
require "tempfile"
|
4
|
-
require 'minitest/unit'
|
5
|
-
MiniTest::Unit.autorun
|
6
|
-
class StatsampleCSVTestCase < MiniTest::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
@ds=Statsample::CSV.read(File.dirname(__FILE__)+"/test_csv.csv")
|
9
|
-
end
|
10
|
-
def test_read
|
11
|
-
assert_equal(6,@ds.cases)
|
12
|
-
assert_equal(%w{id name age city a1}, @ds.fields)
|
13
|
-
id=[1,2,3,4,5,6].to_vector(:scale)
|
14
|
-
name=["Alex","Claude","Peter","Franz","George","Fernand"].to_vector(:nominal)
|
15
|
-
age=[20,23,25,27,5.5,nil].to_vector(:scale)
|
16
|
-
city=["New York","London","London","Paris","Tome",nil].to_vector(:nominal)
|
17
|
-
a1=["a,b","b,c","a",nil,"a,b,c",nil].to_vector(:nominal)
|
18
|
-
ds_exp=Statsample::Dataset.new({'id'=>id,'name'=>name,'age'=>age,'city'=>city,'a1'=>a1}, %w{id name age city a1})
|
19
|
-
ds_exp.fields.each{|f|
|
20
|
-
assert_equal(ds_exp[f],@ds[f])
|
21
|
-
}
|
22
|
-
assert_equal(ds_exp,@ds)
|
23
|
-
|
1
|
+
require(File.dirname(__FILE__)+'/test_helpers.rb')
|
24
2
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
3
|
+
class StatsampleCSVTestCase < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@ds=Statsample::CSV.read(File.dirname(__FILE__)+"/test_csv.csv")
|
6
|
+
end
|
7
|
+
def test_read
|
8
|
+
assert_equal(6,@ds.cases)
|
9
|
+
assert_equal(%w{id name age city a1}, @ds.fields)
|
10
|
+
id=[1,2,3,4,5,6].to_vector(:scale)
|
11
|
+
name=["Alex","Claude","Peter","Franz","George","Fernand"].to_vector(:nominal)
|
12
|
+
age=[20,23,25,27,5.5,nil].to_vector(:scale)
|
13
|
+
city=["New York","London","London","Paris","Tome",nil].to_vector(:nominal)
|
14
|
+
a1=["a,b","b,c","a",nil,"a,b,c",nil].to_vector(:nominal)
|
15
|
+
ds_exp=Statsample::Dataset.new({'id'=>id,'name'=>name,'age'=>age,'city'=>city,'a1'=>a1}, %w{id name age city a1})
|
16
|
+
ds_exp.fields.each{|f|
|
17
|
+
assert_equal(ds_exp[f],@ds[f])
|
18
|
+
}
|
19
|
+
assert_equal(ds_exp,@ds)
|
20
|
+
end
|
21
|
+
def test_nil
|
22
|
+
assert_equal(nil,@ds['age'][5])
|
23
|
+
end
|
24
|
+
def test_repeated
|
25
|
+
ds=Statsample::CSV.read(File.dirname(__FILE__)+"/../data/repeated_fields.csv")
|
26
|
+
assert_equal(%w{id name_1 age_1 city a1 name_2 age_2},ds.fields)
|
27
|
+
age=[3,4,5,6,nil,8].to_vector(:scale)
|
28
|
+
assert_equal(age,ds['age_2'])
|
29
|
+
end
|
30
|
+
def test_write
|
31
|
+
filename=Tempfile.new("afile")
|
32
|
+
# filename=Dir::tmpdir+"/test_write.csv"
|
33
|
+
Statsample::CSV.write(@ds, filename.path)
|
34
|
+
ds2=Statsample::CSV.read(filename.path)
|
35
|
+
i=0
|
36
|
+
ds2.each_array{|row|
|
37
|
+
assert_equal(@ds.case_as_array(i),row)
|
38
|
+
i+=1
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|