statsample 0.18.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +23 -0
  3. data/Manifest.txt +28 -17
  4. data/Rakefile +3 -2
  5. data/benchmarks/correlation_matrix_15_variables.rb +31 -0
  6. data/benchmarks/correlation_matrix_5_variables.rb +32 -0
  7. data/benchmarks/correlation_matrix_methods/correlation_matrix.ds +0 -0
  8. data/benchmarks/correlation_matrix_methods/correlation_matrix.html +93 -0
  9. data/benchmarks/correlation_matrix_methods/correlation_matrix.rb +75 -0
  10. data/benchmarks/correlation_matrix_methods/correlation_matrix.xls +0 -0
  11. data/benchmarks/correlation_matrix_methods/correlation_matrix_gsl_ruby.ods +0 -0
  12. data/benchmarks/correlation_matrix_methods/correlation_matrix_with_graphics.ods +0 -0
  13. data/benchmarks/correlation_matrix_methods/results.ds +0 -0
  14. data/benchmarks/factor_map.rb +37 -0
  15. data/benchmarks/helpers_benchmark.rb +5 -0
  16. data/examples/boxplot.rb +13 -14
  17. data/examples/correlation_matrix.rb +16 -8
  18. data/examples/dataset.rb +13 -4
  19. data/examples/dominance_analysis.rb +23 -17
  20. data/examples/dominance_analysis_bootstrap.rb +28 -22
  21. data/examples/histogram.rb +8 -9
  22. data/examples/icc.rb +20 -21
  23. data/examples/levene.rb +10 -4
  24. data/examples/multiple_regression.rb +9 -28
  25. data/examples/multivariate_correlation.rb +9 -3
  26. data/examples/parallel_analysis.rb +20 -16
  27. data/examples/polychoric.rb +15 -9
  28. data/examples/principal_axis.rb +18 -6
  29. data/examples/reliability.rb +26 -13
  30. data/examples/scatterplot.rb +10 -6
  31. data/examples/t_test.rb +15 -6
  32. data/examples/tetrachoric.rb +9 -2
  33. data/examples/u_test.rb +12 -4
  34. data/examples/vector.rb +13 -2
  35. data/examples/velicer_map_test.rb +33 -26
  36. data/lib/statsample.rb +32 -12
  37. data/lib/statsample/analysis.rb +79 -0
  38. data/lib/statsample/analysis/suite.rb +72 -0
  39. data/lib/statsample/analysis/suitereportbuilder.rb +38 -0
  40. data/lib/statsample/bivariate.rb +70 -16
  41. data/lib/statsample/dataset.rb +25 -19
  42. data/lib/statsample/dominanceanalysis.rb +2 -2
  43. data/lib/statsample/factor.rb +2 -0
  44. data/lib/statsample/factor/map.rb +16 -10
  45. data/lib/statsample/factor/parallelanalysis.rb +9 -3
  46. data/lib/statsample/factor/pca.rb +28 -32
  47. data/lib/statsample/factor/rotation.rb +15 -8
  48. data/lib/statsample/graph/boxplot.rb +3 -4
  49. data/lib/statsample/graph/histogram.rb +2 -1
  50. data/lib/statsample/graph/scatterplot.rb +1 -0
  51. data/lib/statsample/matrix.rb +106 -16
  52. data/lib/statsample/regression.rb +4 -1
  53. data/lib/statsample/regression/binomial.rb +1 -1
  54. data/lib/statsample/regression/multiple/baseengine.rb +19 -9
  55. data/lib/statsample/regression/multiple/gslengine.rb +127 -126
  56. data/lib/statsample/regression/multiple/matrixengine.rb +8 -5
  57. data/lib/statsample/regression/multiple/rubyengine.rb +1 -1
  58. data/lib/statsample/regression/simple.rb +31 -6
  59. data/lib/statsample/reliability.rb +11 -3
  60. data/lib/statsample/reliability/scaleanalysis.rb +4 -4
  61. data/lib/statsample/shorthand.rb +81 -0
  62. data/lib/statsample/test/chisquare.rb +1 -1
  63. data/lib/statsample/vector.rb +163 -163
  64. data/lib/statsample/vector/gsl.rb +106 -0
  65. data/references.txt +2 -2
  66. data/{data → test/fixtures}/crime.txt +0 -0
  67. data/{data → test/fixtures}/hartman_23.matrix +0 -0
  68. data/{data → test/fixtures}/repeated_fields.csv +0 -0
  69. data/{data → test/fixtures}/test_binomial.csv +0 -0
  70. data/test/{test_csv.csv → fixtures/test_csv.csv} +0 -0
  71. data/test/{test_xls.xls → fixtures/test_xls.xls} +0 -0
  72. data/{data → test/fixtures}/tetmat_matrix.txt +0 -0
  73. data/{data → test/fixtures}/tetmat_test.txt +0 -0
  74. data/test/helpers_tests.rb +18 -2
  75. data/test/test_analysis.rb +118 -0
  76. data/test/test_anovatwoway.rb +1 -1
  77. data/test/test_anovatwowaywithdataset.rb +1 -1
  78. data/test/test_anovawithvectors.rb +1 -2
  79. data/test/test_bartlettsphericity.rb +1 -2
  80. data/test/test_bivariate.rb +64 -22
  81. data/test/test_codification.rb +1 -2
  82. data/test/test_crosstab.rb +1 -2
  83. data/test/test_csv.rb +3 -4
  84. data/test/test_dataset.rb +24 -3
  85. data/test/test_dominance_analysis.rb +1 -2
  86. data/test/test_factor.rb +8 -69
  87. data/test/test_factor_map.rb +43 -0
  88. data/test/test_factor_pa.rb +54 -0
  89. data/test/test_ggobi.rb +1 -1
  90. data/test/test_gsl.rb +12 -18
  91. data/test/test_histogram.rb +1 -2
  92. data/test/test_logit.rb +62 -18
  93. data/test/test_matrix.rb +4 -5
  94. data/test/test_mle.rb +3 -4
  95. data/test/test_regression.rb +21 -2
  96. data/test/test_reliability.rb +3 -3
  97. data/test/test_reliability_icc.rb +1 -1
  98. data/test/test_reliability_skillscale.rb +20 -4
  99. data/test/test_resample.rb +1 -2
  100. data/test/test_rserve_extension.rb +1 -2
  101. data/test/test_srs.rb +1 -2
  102. data/test/test_statistics.rb +1 -2
  103. data/test/test_stest.rb +1 -2
  104. data/test/test_stratified.rb +1 -2
  105. data/test/test_test_f.rb +1 -2
  106. data/test/test_test_t.rb +1 -2
  107. data/test/test_umannwhitney.rb +1 -2
  108. data/test/test_vector.rb +117 -18
  109. data/test/test_xls.rb +2 -3
  110. data/web/Rakefile +39 -0
  111. metadata +109 -29
  112. metadata.gz.sig +0 -0
  113. data/examples/parallel_analysis_tetrachoric.rb +0 -31
  114. data/lib/distribution.rb +0 -25
  115. data/lib/distribution/chisquare.rb +0 -23
  116. data/lib/distribution/f.rb +0 -35
  117. data/lib/distribution/normal.rb +0 -60
  118. data/lib/distribution/normalbivariate.rb +0 -284
  119. data/lib/distribution/normalmultivariate.rb +0 -73
  120. data/lib/distribution/t.rb +0 -55
  121. 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__)+'/../data/test_binomial.csv'
6
- @crime=File.dirname(__FILE__)+'/../data/crime.txt'
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()
@@ -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)
@@ -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
- assert_equal(@x1.sds, @ia.item_statistics['x1'][:sds])
201
- assert_equal(@x4.sds, @ia.item_statistics['x4'][:sds])
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,5 @@
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
1
2
  $reliability_icc=nil
2
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
3
3
  class StatsampleReliabilityIccTestCase < MiniTest::Unit::TestCase
4
4
  context Statsample::Reliability::ICC do
5
5
  setup do
@@ -1,5 +1,6 @@
1
- $reliability_icc=nil
2
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
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 {rand()>0.8 ? nil : options[rand(5)]}.to_vector
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'=>options[rand(5)], 'b'=>options[rand(5)], 'c'=>options[rand(5)], 'd'=>options[rand(5)],'e'=>options[rand(5)]}
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
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleResampleTestCase < MiniTest::Unit::TestCase
5
4
  def initialize(*args)
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  begin
4
3
  require 'rserve'
5
4
  require 'statsample/rserve_extension'
data/test/test_srs.rb CHANGED
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleSrsTestCase < MiniTest::Unit::TestCase
5
4
  def test_std_error
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  class StatsampleStatisicsTestCase < MiniTest::Unit::TestCase
4
3
 
5
4
  def initialize(*args)
data/test/test_stest.rb CHANGED
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleTestTestCase < MiniTest::Unit::TestCase
5
4
  def test_chi_square_matrix_with_expected
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleStratifiedTestCase < MiniTest::Unit::TestCase
5
4
 
data/test/test_test_f.rb CHANGED
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  class StatsampleTestFTestCase < MiniTest::Unit::TestCase
4
3
  context(Statsample::Test::F) do
5
4
  setup do
data/test/test_test_t.rb CHANGED
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  class StatsampleTestTTestCase < MiniTest::Unit::TestCase
4
3
  include Statsample::Test
5
4
  include Math
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleUMannWhitneyTestCase < MiniTest::Unit::TestCase
5
4
  include Statsample::Test
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
- end
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
- @c.type=:ordinal
223
- assert_raise NoMethodError do
224
- @c.mean
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.variance_sample_slow,a.variance_sample)
396
- assert_equal(a.standard_deviation_sample_slow,a.sds)
397
- assert_equal(a.variance_population_slow,a.variance_population)
398
- assert_equal(a.standard_deviation_population_slow,a.standard_deviation_population)
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.skew_slow ,0.0001)
412
- assert_in_delta(c.kurtosis, c.kurtosis_slow ,0.0001)
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"