statsample 0.18.0 → 1.0.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.tar.gz.sig +0 -0
- data/History.txt +23 -0
- data/Manifest.txt +28 -17
- data/Rakefile +3 -2
- data/benchmarks/correlation_matrix_15_variables.rb +31 -0
- data/benchmarks/correlation_matrix_5_variables.rb +32 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix.ds +0 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix.html +93 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix.rb +75 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix.xls +0 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix_gsl_ruby.ods +0 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix_with_graphics.ods +0 -0
- data/benchmarks/correlation_matrix_methods/results.ds +0 -0
- data/benchmarks/factor_map.rb +37 -0
- data/benchmarks/helpers_benchmark.rb +5 -0
- data/examples/boxplot.rb +13 -14
- data/examples/correlation_matrix.rb +16 -8
- data/examples/dataset.rb +13 -4
- data/examples/dominance_analysis.rb +23 -17
- data/examples/dominance_analysis_bootstrap.rb +28 -22
- data/examples/histogram.rb +8 -9
- data/examples/icc.rb +20 -21
- data/examples/levene.rb +10 -4
- data/examples/multiple_regression.rb +9 -28
- data/examples/multivariate_correlation.rb +9 -3
- data/examples/parallel_analysis.rb +20 -16
- data/examples/polychoric.rb +15 -9
- data/examples/principal_axis.rb +18 -6
- data/examples/reliability.rb +26 -13
- data/examples/scatterplot.rb +10 -6
- data/examples/t_test.rb +15 -6
- data/examples/tetrachoric.rb +9 -2
- data/examples/u_test.rb +12 -4
- data/examples/vector.rb +13 -2
- data/examples/velicer_map_test.rb +33 -26
- data/lib/statsample.rb +32 -12
- data/lib/statsample/analysis.rb +79 -0
- data/lib/statsample/analysis/suite.rb +72 -0
- data/lib/statsample/analysis/suitereportbuilder.rb +38 -0
- data/lib/statsample/bivariate.rb +70 -16
- data/lib/statsample/dataset.rb +25 -19
- data/lib/statsample/dominanceanalysis.rb +2 -2
- data/lib/statsample/factor.rb +2 -0
- data/lib/statsample/factor/map.rb +16 -10
- data/lib/statsample/factor/parallelanalysis.rb +9 -3
- data/lib/statsample/factor/pca.rb +28 -32
- data/lib/statsample/factor/rotation.rb +15 -8
- data/lib/statsample/graph/boxplot.rb +3 -4
- data/lib/statsample/graph/histogram.rb +2 -1
- data/lib/statsample/graph/scatterplot.rb +1 -0
- data/lib/statsample/matrix.rb +106 -16
- data/lib/statsample/regression.rb +4 -1
- data/lib/statsample/regression/binomial.rb +1 -1
- data/lib/statsample/regression/multiple/baseengine.rb +19 -9
- data/lib/statsample/regression/multiple/gslengine.rb +127 -126
- data/lib/statsample/regression/multiple/matrixengine.rb +8 -5
- data/lib/statsample/regression/multiple/rubyengine.rb +1 -1
- data/lib/statsample/regression/simple.rb +31 -6
- data/lib/statsample/reliability.rb +11 -3
- data/lib/statsample/reliability/scaleanalysis.rb +4 -4
- data/lib/statsample/shorthand.rb +81 -0
- data/lib/statsample/test/chisquare.rb +1 -1
- data/lib/statsample/vector.rb +163 -163
- data/lib/statsample/vector/gsl.rb +106 -0
- data/references.txt +2 -2
- data/{data → test/fixtures}/crime.txt +0 -0
- data/{data → test/fixtures}/hartman_23.matrix +0 -0
- data/{data → test/fixtures}/repeated_fields.csv +0 -0
- data/{data → test/fixtures}/test_binomial.csv +0 -0
- data/test/{test_csv.csv → fixtures/test_csv.csv} +0 -0
- data/test/{test_xls.xls → fixtures/test_xls.xls} +0 -0
- data/{data → test/fixtures}/tetmat_matrix.txt +0 -0
- data/{data → test/fixtures}/tetmat_test.txt +0 -0
- data/test/helpers_tests.rb +18 -2
- data/test/test_analysis.rb +118 -0
- data/test/test_anovatwoway.rb +1 -1
- data/test/test_anovatwowaywithdataset.rb +1 -1
- data/test/test_anovawithvectors.rb +1 -2
- data/test/test_bartlettsphericity.rb +1 -2
- data/test/test_bivariate.rb +64 -22
- data/test/test_codification.rb +1 -2
- data/test/test_crosstab.rb +1 -2
- data/test/test_csv.rb +3 -4
- data/test/test_dataset.rb +24 -3
- data/test/test_dominance_analysis.rb +1 -2
- data/test/test_factor.rb +8 -69
- data/test/test_factor_map.rb +43 -0
- data/test/test_factor_pa.rb +54 -0
- data/test/test_ggobi.rb +1 -1
- data/test/test_gsl.rb +12 -18
- data/test/test_histogram.rb +1 -2
- data/test/test_logit.rb +62 -18
- data/test/test_matrix.rb +4 -5
- data/test/test_mle.rb +3 -4
- data/test/test_regression.rb +21 -2
- data/test/test_reliability.rb +3 -3
- data/test/test_reliability_icc.rb +1 -1
- data/test/test_reliability_skillscale.rb +20 -4
- data/test/test_resample.rb +1 -2
- data/test/test_rserve_extension.rb +1 -2
- data/test/test_srs.rb +1 -2
- data/test/test_statistics.rb +1 -2
- data/test/test_stest.rb +1 -2
- data/test/test_stratified.rb +1 -2
- data/test/test_test_f.rb +1 -2
- data/test/test_test_t.rb +1 -2
- data/test/test_umannwhitney.rb +1 -2
- data/test/test_vector.rb +117 -18
- data/test/test_xls.rb +2 -3
- data/web/Rakefile +39 -0
- metadata +109 -29
- metadata.gz.sig +0 -0
- data/examples/parallel_analysis_tetrachoric.rb +0 -31
- data/lib/distribution.rb +0 -25
- data/lib/distribution/chisquare.rb +0 -23
- data/lib/distribution/f.rb +0 -35
- data/lib/distribution/normal.rb +0 -60
- data/lib/distribution/normalbivariate.rb +0 -284
- data/lib/distribution/normalmultivariate.rb +0 -73
- data/lib/distribution/t.rb +0 -55
- data/test/test_distribution.rb +0 -73
data/test/test_mle.rb
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
|
2
|
-
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
|
3
2
|
class StatsampleMLETestCase < MiniTest::Unit::TestCase
|
|
4
3
|
def setup
|
|
5
|
-
@file_binomial=File.dirname(__FILE__)+'
|
|
6
|
-
@crime=File.dirname(__FILE__)+'
|
|
4
|
+
@file_binomial=File.dirname(__FILE__)+'/fixtures/test_binomial.csv'
|
|
5
|
+
@crime=File.dirname(__FILE__)+'/fixtures/crime.txt'
|
|
7
6
|
@cases=100
|
|
8
7
|
a=Array.new()
|
|
9
8
|
b=Array.new()
|
data/test/test_regression.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
|
2
2
|
|
|
3
3
|
class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
|
|
4
4
|
context "Example with missing data" do
|
|
@@ -21,6 +21,22 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
|
|
|
21
21
|
assert_in_delta(0.064, @lr.constant_se,0.001,"constant se")
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
|
+
should "return an error if data is linearly dependent" do
|
|
25
|
+
samples=100
|
|
26
|
+
|
|
27
|
+
a,b=rand,rand
|
|
28
|
+
|
|
29
|
+
x1=samples.times.map { rand}.to_scale
|
|
30
|
+
x2=samples.times.map {rand}.to_scale
|
|
31
|
+
x3=samples.times.map {|i| x1[i]*(1+a)+x2[i]*(1+b)}.to_scale
|
|
32
|
+
y=samples.times.map {|i| x1[i]+x2[i]+x3[i]+rand}.to_scale
|
|
33
|
+
|
|
34
|
+
ds={'x1'=>x1,'x2'=>x2,'x3'=>x3,'y'=>y}.to_dataset
|
|
35
|
+
|
|
36
|
+
assert_raise(Statsample::Regression::LinearDependency) {
|
|
37
|
+
Statsample::Regression::Multiple::RubyEngine.new(ds,'y')
|
|
38
|
+
}
|
|
39
|
+
end
|
|
24
40
|
def test_parameters
|
|
25
41
|
@x=[13,20,10,33,15].to_vector(:scale)
|
|
26
42
|
@y=[23,18,35,10,27 ].to_vector(:scale)
|
|
@@ -34,10 +50,13 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
|
|
|
34
50
|
|
|
35
51
|
end
|
|
36
52
|
def _test_simple_regression(reg)
|
|
53
|
+
|
|
37
54
|
assert_in_delta(40.009, reg.a,0.001)
|
|
38
55
|
assert_in_delta(-0.957, reg.b,0.001)
|
|
39
56
|
assert_in_delta(4.248,reg.standard_error,0.002)
|
|
57
|
+
assert(reg.summary)
|
|
40
58
|
end
|
|
59
|
+
|
|
41
60
|
def test_summaries
|
|
42
61
|
a=10.times.map{rand(100)}.to_scale
|
|
43
62
|
b=10.times.map{rand(100)}.to_scale
|
|
@@ -166,8 +185,8 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
|
|
|
166
185
|
@c=[11,22,30,40,50,65,78,79,99,100].to_vector(:scale)
|
|
167
186
|
@y=[3,4,5,6,7,8,9,10,20,30].to_vector(:scale)
|
|
168
187
|
ds={'a'=>@a,'b'=>@b,'c'=>@c,'y'=>@y}.to_dataset
|
|
169
|
-
|
|
170
188
|
cor=Statsample::Bivariate.correlation_matrix(ds)
|
|
189
|
+
|
|
171
190
|
lr=Statsample::Regression::Multiple::MatrixEngine.new(cor,'y', :y_mean=>@y.mean, :x_mean=>{'a'=>ds['a'].mean, 'b'=>ds['b'].mean, 'c'=>ds['c'].mean}, :cases=>@a.size, :y_sd=>@y.sd , :x_sd=>{'a' => @a.sd, 'b' => @b.sd, 'c' => @c.sd})
|
|
172
191
|
assert_nil(lr.constant_se)
|
|
173
192
|
assert_nil(lr.constant_t)
|
data/test/test_reliability.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
|
2
2
|
class StatsampleReliabilityTestCase < MiniTest::Unit::TestCase
|
|
3
3
|
context Statsample::Reliability do
|
|
4
4
|
should "return correct r according to Spearman-Brown prophecy" do
|
|
@@ -197,8 +197,8 @@ class StatsampleReliabilityTestCase < MiniTest::Unit::TestCase
|
|
|
197
197
|
assert_in_delta(var_mean, @ia.variances_mean)
|
|
198
198
|
assert_equal(@x1.mean, @ia.item_statistics['x1'][:mean])
|
|
199
199
|
assert_equal(@x4.mean, @ia.item_statistics['x4'][:mean])
|
|
200
|
-
|
|
201
|
-
|
|
200
|
+
assert_in_delta(@x1.sds, @ia.item_statistics['x1'][:sds],1e-14)
|
|
201
|
+
assert_in_delta(@x4.sds, @ia.item_statistics['x4'][:sds],1e-14)
|
|
202
202
|
ds2=@ds.clone
|
|
203
203
|
ds2.delete_vector('x1')
|
|
204
204
|
vector_sum=ds2.vector_sum
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
|
2
|
+
|
|
3
|
+
|
|
3
4
|
class StatsampleReliabilitySkillScaleTestCase < MiniTest::Unit::TestCase
|
|
4
5
|
context Statsample::Reliability::SkillScaleAnalysis do
|
|
5
6
|
setup do
|
|
@@ -10,9 +11,12 @@ class StatsampleReliabilitySkillScaleTestCase < MiniTest::Unit::TestCase
|
|
|
10
11
|
@b=cases.times.map {options[rand(5)]}.to_vector
|
|
11
12
|
@c=cases.times.map {options[rand(5)]}.to_vector
|
|
12
13
|
@d=cases.times.map {options[rand(5)]}.to_vector
|
|
13
|
-
@e=cases.times.map {
|
|
14
|
+
@e=cases.times.map {|i|
|
|
15
|
+
i==0 ? options[rand(0)] :
|
|
16
|
+
rand()>0.8 ? nil : options[rand(5)]
|
|
17
|
+
}.to_vector
|
|
14
18
|
@ds={'id'=>@id,'a'=>@a,'b'=>@b,'c'=>@c,'d'=>@d,'e'=>@e}.to_dataset
|
|
15
|
-
@key={'a'=>
|
|
19
|
+
@key={'a'=>"a", 'b'=>options[rand(5)], 'c'=>options[rand(5)], 'd'=>options[rand(5)],'e'=>options[rand(5)]}
|
|
16
20
|
@ssa=Statsample::Reliability::SkillScaleAnalysis.new(@ds, @key)
|
|
17
21
|
@ac=@a.map {|v| v==@key['a'] ? 1 : 0}.to_scale
|
|
18
22
|
@bc=@b.map {|v| v==@key['b'] ? 1 : 0}.to_scale
|
|
@@ -34,6 +38,18 @@ class StatsampleReliabilitySkillScaleTestCase < MiniTest::Unit::TestCase
|
|
|
34
38
|
assert_equal(cdsm.vector_sum, @ssa.vector_sum)
|
|
35
39
|
assert_equal(cdsm.vector_mean, @ssa.vector_mean)
|
|
36
40
|
end
|
|
41
|
+
should "not crash on rare case" do
|
|
42
|
+
a=Statsample::Vector["c","c","a","a","c","a","b","c","c","b","a","d","a","d","a","a","d","e","c","d"]
|
|
43
|
+
b=Statsample::Vector["e","b","e","b","c","d","a","e","e","c","b","e","e","b","d","c","e","b","b","d"]
|
|
44
|
+
c=Statsample::Vector["e","b","e","c","e","c","b","d","e","c","a","a","b","d","e","c","b","a","a","e"]
|
|
45
|
+
d=Statsample::Vector["a","b","d","d","e","b","e","b","d","c","e","a","c","d","c","c","e","d","d","b"]
|
|
46
|
+
e=Statsample::Vector["a","b",nil,"d","c","c","d",nil,"d","d","e","e",nil,nil,nil,"d","c",nil,"e","d"]
|
|
47
|
+
key={"a"=>"a", "b"=>"e", "c"=>"d", "d"=>"c", "e"=>"d"}
|
|
48
|
+
ds=Statsample::Dataset.new("a"=>a,"b"=>b,"c"=>c,"d"=>d,"e"=>e)
|
|
49
|
+
ssa=Statsample::Reliability::SkillScaleAnalysis.new(ds, key)
|
|
50
|
+
assert(ssa.summary)
|
|
51
|
+
end
|
|
52
|
+
|
|
37
53
|
should "return valid summary" do
|
|
38
54
|
assert(@ssa.summary.size>0)
|
|
39
55
|
end
|
data/test/test_resample.rb
CHANGED
data/test/test_srs.rb
CHANGED
data/test/test_statistics.rb
CHANGED
data/test/test_stest.rb
CHANGED
data/test/test_stratified.rb
CHANGED
data/test/test_test_f.rb
CHANGED
data/test/test_test_t.rb
CHANGED
data/test/test_umannwhitney.rb
CHANGED
data/test/test_vector.rb
CHANGED
|
@@ -51,8 +51,7 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
51
51
|
assert_equal(av,av2)
|
|
52
52
|
assert_same(av,av2)
|
|
53
53
|
assert_same(bv,bv2)
|
|
54
|
-
end
|
|
55
|
-
|
|
54
|
+
end
|
|
56
55
|
end
|
|
57
56
|
context Statsample::Vector do
|
|
58
57
|
setup do
|
|
@@ -60,6 +59,14 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
60
59
|
@c.name="Test Vector"
|
|
61
60
|
@c.missing_values=[-99]
|
|
62
61
|
end
|
|
62
|
+
should_with_gsl "be created with GSL::Vector" do
|
|
63
|
+
gsl=GSL::Vector[1,2,3,4,5]
|
|
64
|
+
v=Statsample::Vector.new(gsl)
|
|
65
|
+
assert_equal([1,2,3,4,5], v.to_a)
|
|
66
|
+
refute(v.flawed?)
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
63
70
|
context "using matrix operations" do
|
|
64
71
|
setup do
|
|
65
72
|
@a=[1,2,3,4,5].to_scale
|
|
@@ -84,6 +91,20 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
84
91
|
@data=(10.times.map{rand(100)})+[nil]
|
|
85
92
|
@original=Statsample::Vector.new(@data, :scale)
|
|
86
93
|
end
|
|
94
|
+
should "be the sample using []" do
|
|
95
|
+
second=Statsample::Vector[*@data]
|
|
96
|
+
assert_equal(@original, second)
|
|
97
|
+
end
|
|
98
|
+
should "[] returns same results as R-c()" do
|
|
99
|
+
reference=[0,4,5,6,10].to_scale
|
|
100
|
+
assert_equal(reference, Statsample::Vector[0,4,5,6,10])
|
|
101
|
+
assert_equal(reference, Statsample::Vector[0,4..6,10])
|
|
102
|
+
assert_equal(reference, Statsample::Vector[[0],[4,5,6],[10]])
|
|
103
|
+
assert_equal(reference, Statsample::Vector[[0],[4,[5,[6]]],[10]])
|
|
104
|
+
|
|
105
|
+
assert_equal(reference, Statsample::Vector[[0],[4,5,6].to_vector,[10]])
|
|
106
|
+
|
|
107
|
+
end
|
|
87
108
|
should "be the same usign #to_vector" do
|
|
88
109
|
lazy1=@data.to_vector(:scale)
|
|
89
110
|
assert_equal(@original,lazy1)
|
|
@@ -94,6 +115,24 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
94
115
|
assert_equal(:scale,lazy2.type)
|
|
95
116
|
assert_equal(@data.find_all{|v| !v.nil?},lazy2.valid_data)
|
|
96
117
|
end
|
|
118
|
+
should "could use new_scale with size only" do
|
|
119
|
+
v1=10.times.map {nil}.to_scale
|
|
120
|
+
v2=Statsample::Vector.new_scale(10)
|
|
121
|
+
assert_equal(v1,v2)
|
|
122
|
+
|
|
123
|
+
end
|
|
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)
|
|
129
|
+
end
|
|
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)
|
|
134
|
+
end
|
|
135
|
+
|
|
97
136
|
end
|
|
98
137
|
|
|
99
138
|
context "#split_by_separator" do
|
|
@@ -207,23 +246,53 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
207
246
|
should "have a summary with name on it" do
|
|
208
247
|
assert_match(/#{@c.name}/, @c.summary)
|
|
209
248
|
end
|
|
249
|
+
|
|
250
|
+
should "GSL::Vector based should push correcty" do
|
|
251
|
+
if Statsample.has_gsl?
|
|
252
|
+
v=GSL::Vector[1,2,3,4,5].to_scale
|
|
253
|
+
v.push(nil)
|
|
254
|
+
assert_equal([1,2,3,4,5,nil], v.to_a)
|
|
255
|
+
assert(v.flawed?)
|
|
256
|
+
else
|
|
257
|
+
skip("Requires GSL")
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
|
|
210
262
|
should "split correctly" do
|
|
211
263
|
a = Statsample::Vector.new(["a","a,b","c,d","a,d","d",10,nil],:nominal)
|
|
212
264
|
assert_equal([%w{a},%w{a b},%w{c d},%w{a d},%w{d},[10],nil], a.splitted)
|
|
213
265
|
end
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
def test_types
|
|
218
|
-
@c.type=:nominal
|
|
219
|
-
assert_raise NoMethodError do
|
|
220
|
-
@c.median
|
|
266
|
+
should "multiply correct for scalar" do
|
|
267
|
+
a = [1,2,3].to_scale
|
|
268
|
+
assert_equal([5,10,15].to_scale, a*5)
|
|
221
269
|
end
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
270
|
+
should "multiply correct with other vector" do
|
|
271
|
+
a = [1,2,3].to_scale
|
|
272
|
+
b = [2,4,6].to_scale
|
|
273
|
+
|
|
274
|
+
assert_equal([2,8,18].to_scale, a*b)
|
|
275
|
+
end
|
|
276
|
+
should "sum correct for scalar" do
|
|
277
|
+
a = [1,2,3].to_scale
|
|
278
|
+
assert_equal([11,12,13].to_scale, a+10)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
should "raise NoMethodError when method requires ordinal and vector is nominal" do
|
|
282
|
+
@c.type=:nominal
|
|
283
|
+
assert_raise(::NoMethodError) { @c.median }
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
should "raise NoMethodError when method requires scalar and vector is ordinal" do
|
|
287
|
+
@c.type=:ordinal
|
|
288
|
+
assert_raise(::NoMethodError) { @c.mean }
|
|
225
289
|
end
|
|
290
|
+
|
|
291
|
+
|
|
226
292
|
end
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
227
296
|
def test_nominal
|
|
228
297
|
assert_equal(@c[1],5)
|
|
229
298
|
assert_equal({ 1=>1,2=>1,3=>1,4=>1,5=>5,6=>2,7=>1,8=>1, 9=>1,10=>1},@c.frequencies)
|
|
@@ -308,12 +377,41 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
308
377
|
assert_equal(0,vs.mean)
|
|
309
378
|
assert_equal(1,vs.sds)
|
|
310
379
|
end
|
|
380
|
+
|
|
311
381
|
def test_vector_standarized_with_zero_variance
|
|
312
382
|
v1=100.times.map {|i| 1}.to_scale
|
|
313
383
|
exp=100.times.map {nil}.to_scale
|
|
314
384
|
assert_equal(exp,v1.standarized)
|
|
315
385
|
end
|
|
316
386
|
|
|
387
|
+
def test_check_type
|
|
388
|
+
v=Statsample::Vector.new
|
|
389
|
+
v.type=:nominal
|
|
390
|
+
assert_raise(NoMethodError) { v.check_type(:scale)}
|
|
391
|
+
assert_raise(NoMethodError) { v.check_type(:ordinal)}
|
|
392
|
+
assert(v.check_type(:nominal).nil?)
|
|
393
|
+
|
|
394
|
+
v.type=:ordinal
|
|
395
|
+
|
|
396
|
+
assert_raise(NoMethodError) { v.check_type(:scale)}
|
|
397
|
+
|
|
398
|
+
assert(v.check_type(:ordinal).nil?)
|
|
399
|
+
assert(v.check_type(:nominal).nil?)
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
v.type=:scale
|
|
403
|
+
assert(v.check_type(:scale).nil?)
|
|
404
|
+
assert(v.check_type(:ordinal).nil?)
|
|
405
|
+
assert(v.check_type(:nominal).nil?)
|
|
406
|
+
|
|
407
|
+
v.type=:date
|
|
408
|
+
assert_raise(NoMethodError) { v.check_type(:scale)}
|
|
409
|
+
assert_raise(NoMethodError) { v.check_type(:ordinal)}
|
|
410
|
+
assert_raise(NoMethodError) { v.check_type(:nominal)}
|
|
411
|
+
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
|
|
317
415
|
def test_add
|
|
318
416
|
a=Statsample::Vector.new([1,2,3,4,5], :scale)
|
|
319
417
|
b=Statsample::Vector.new([11,12,13,14,15], :scale)
|
|
@@ -391,11 +489,12 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
391
489
|
def test_gsl
|
|
392
490
|
if Statsample.has_gsl?
|
|
393
491
|
a=Statsample::Vector.new([1,2,3,4,"STRING"], :scale)
|
|
492
|
+
|
|
394
493
|
assert_equal(2,a.mean)
|
|
395
|
-
assert_equal(a.
|
|
396
|
-
assert_equal(a.
|
|
397
|
-
assert_equal(a.
|
|
398
|
-
assert_equal(a.
|
|
494
|
+
assert_equal(a.variance_sample_ruby,a.variance_sample)
|
|
495
|
+
assert_equal(a.standard_deviation_sample_ruby,a.sds)
|
|
496
|
+
assert_equal(a.variance_population_ruby,a.variance_population)
|
|
497
|
+
assert_equal(a.standard_deviation_population_ruby,a.standard_deviation_population)
|
|
399
498
|
assert_nothing_raised do
|
|
400
499
|
a=[].to_vector(:scale)
|
|
401
500
|
end
|
|
@@ -408,8 +507,8 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
|
|
|
408
507
|
assert_equal(3.5, b.mean)
|
|
409
508
|
assert_equal(6,b.gsl.size)
|
|
410
509
|
c=[10,20,30,40,50,100,1000,2000,5000].to_scale
|
|
411
|
-
assert_in_delta(c.skew, c.
|
|
412
|
-
assert_in_delta(c.kurtosis, c.
|
|
510
|
+
assert_in_delta(c.skew, c.skew_ruby ,0.0001)
|
|
511
|
+
assert_in_delta(c.kurtosis, c.kurtosis_ruby ,0.0001)
|
|
413
512
|
end
|
|
414
513
|
end
|
|
415
514
|
def test_vector_matrix
|
data/test/test_xls.rb
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
|
2
|
-
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
|
3
2
|
class StatsampleExcelTestCase < MiniTest::Unit::TestCase
|
|
4
3
|
context "Excel reader" do
|
|
5
4
|
setup do
|
|
6
|
-
@ds=Statsample::Excel.read(File.dirname(__FILE__)+"/test_xls.xls")
|
|
5
|
+
@ds=Statsample::Excel.read(File.dirname(__FILE__)+"/fixtures/test_xls.xls")
|
|
7
6
|
end
|
|
8
7
|
should "set the number of cases" do
|
|
9
8
|
assert_equal(6,@ds.cases)
|
data/web/Rakefile
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
directory "examples"
|
|
5
|
+
|
|
6
|
+
def get_base(f)
|
|
7
|
+
f.sub(File.dirname(__FILE__)+"/../examples/","").gsub("/","_").gsub(".rb","")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
EXAMPLES=Dir.glob(File.dirname(__FILE__)+"/../examples/**/*.rb").map {|v| [v, get_base(v)]
|
|
12
|
+
}.find_all{|v| !v[0].include?"_data"}
|
|
13
|
+
|
|
14
|
+
EXAMPLES_BASE=EXAMPLES.map {|v| v[1]}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
desc "Build all html, rtf and pdf files"
|
|
18
|
+
task :build_site do
|
|
19
|
+
ruby "build_site.rb"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
task :clean do
|
|
24
|
+
Dir.glob(File.dirname(__FILE__)+"/examples/*.pdf").each do |t|
|
|
25
|
+
FileUtils.rm t
|
|
26
|
+
end
|
|
27
|
+
Dir.glob(File.dirname(__FILE__)+"/examples/*.html").each do |t|
|
|
28
|
+
FileUtils.rm t
|
|
29
|
+
end
|
|
30
|
+
Dir.glob(File.dirname(__FILE__)+"/examples/*.rtf").each do |t|
|
|
31
|
+
FileUtils.rm t
|
|
32
|
+
end
|
|
33
|
+
Dir.glob(File.dirname(__FILE__)+"/examples/images/*.*").each do |t|
|
|
34
|
+
FileUtils.rm t
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
load 'upload_task.rb' if File.exists? "upload_task.rb"
|