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.
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"