statsample 0.6.5 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/History.txt +15 -0
  2. data/Manifest.txt +6 -0
  3. data/README.txt +30 -12
  4. data/Rakefile +91 -0
  5. data/demo/levene.rb +9 -0
  6. data/demo/multiple_regression.rb +1 -7
  7. data/demo/polychoric.rb +1 -0
  8. data/demo/principal_axis.rb +8 -0
  9. data/lib/distribution/f.rb +22 -22
  10. data/lib/spss.rb +99 -99
  11. data/lib/statsample/bivariate/polychoric.rb +32 -22
  12. data/lib/statsample/bivariate/tetrachoric.rb +212 -207
  13. data/lib/statsample/bivariate.rb +6 -6
  14. data/lib/statsample/codification.rb +65 -65
  15. data/lib/statsample/combination.rb +60 -59
  16. data/lib/statsample/converter/csv19.rb +12 -12
  17. data/lib/statsample/converters.rb +1 -1
  18. data/lib/statsample/dataset.rb +93 -36
  19. data/lib/statsample/dominanceanalysis/bootstrap.rb +66 -3
  20. data/lib/statsample/dominanceanalysis.rb +5 -6
  21. data/lib/statsample/factor/pca.rb +41 -11
  22. data/lib/statsample/factor/principalaxis.rb +105 -29
  23. data/lib/statsample/factor/rotation.rb +20 -3
  24. data/lib/statsample/factor.rb +1 -1
  25. data/lib/statsample/graph/gdchart.rb +13 -13
  26. data/lib/statsample/graph/svggraph.rb +166 -167
  27. data/lib/statsample/matrix.rb +22 -12
  28. data/lib/statsample/mle/logit.rb +3 -2
  29. data/lib/statsample/mle/probit.rb +7 -5
  30. data/lib/statsample/mle.rb +4 -2
  31. data/lib/statsample/multiset.rb +125 -124
  32. data/lib/statsample/permutation.rb +2 -1
  33. data/lib/statsample/regression/binomial/logit.rb +4 -3
  34. data/lib/statsample/regression/binomial/probit.rb +2 -1
  35. data/lib/statsample/regression/binomial.rb +62 -81
  36. data/lib/statsample/regression/multiple/baseengine.rb +1 -1
  37. data/lib/statsample/regression/multiple/gslengine.rb +1 -1
  38. data/lib/statsample/regression/multiple/matrixengine.rb +12 -6
  39. data/lib/statsample/regression/multiple.rb +15 -42
  40. data/lib/statsample/regression/simple.rb +93 -78
  41. data/lib/statsample/regression.rb +74 -2
  42. data/lib/statsample/reliability.rb +117 -120
  43. data/lib/statsample/srs.rb +156 -153
  44. data/lib/statsample/test/levene.rb +90 -0
  45. data/lib/statsample/test/umannwhitney.rb +25 -9
  46. data/lib/statsample/test.rb +2 -0
  47. data/lib/statsample/vector.rb +388 -413
  48. data/lib/statsample.rb +74 -30
  49. data/po/es/statsample.mo +0 -0
  50. data/test/test_bivariate.rb +5 -4
  51. data/test/test_combination.rb +1 -1
  52. data/test/test_dataset.rb +2 -2
  53. data/test/test_factor.rb +53 -6
  54. data/test/test_gsl.rb +1 -1
  55. data/test/test_mle.rb +1 -1
  56. data/test/test_regression.rb +18 -33
  57. data/test/test_statistics.rb +15 -33
  58. data/test/test_stest.rb +35 -0
  59. data/test/test_svg_graph.rb +2 -2
  60. data/test/test_vector.rb +331 -333
  61. metadata +38 -11
data/lib/statsample.rb CHANGED
@@ -23,8 +23,8 @@ $:.unshift(File.expand_path(File.dirname(__FILE__)+"/../ext"))
23
23
 
24
24
  require 'matrix'
25
25
  require 'distribution'
26
+ raise "Install reportbuilder ~>0.2.0" unless gem 'reportbuilder','~>0.2.0'
26
27
  require 'reportbuilder'
27
-
28
28
  class Numeric
29
29
  def square ; self * self ; end
30
30
  end
@@ -88,28 +88,32 @@ rescue LoadError
88
88
  end
89
89
  end
90
90
  end
91
-
92
- begin
93
- require 'rbgsl'
94
- HAS_GSL=true
95
- rescue LoadError
96
- HAS_GSL=false
97
- end
98
- begin
99
- require 'alglib'
100
- HAS_ALGIB=true
101
- rescue LoadError
102
- HAS_ALGIB=false
103
- end
104
- # ++
105
- # Modules for statistical analysis
106
- # See first:
107
- # * Converter : several modules to import and export data
108
- # * Vector: The base class of all analysis
109
- # * Dataset: An union of vectors.
91
+ # Library for statistical analysis on Ruby
92
+ #
93
+ # * Classes for manipulation and storage of data:
94
+ # * Module Statsample::Bivariate provides covariance and pearson, spearman, point biserial, tau a, tau b, gamma, tetrachoric (see Bivariate::Tetrachoric) and polychoric (see Bivariate::Polychoric) correlations. Include methods to create correlation and covariance matrices
95
+ # * Multiple types of regression on Statsample::Regression
96
+ # * Factorial Analysis algorithms on Statsample::Factor module.
97
+ # * Dominance Analysis. Based on Budescu and Azen papers.link[http://psycnet.apa.org/journals/met/8/2/129/].
98
+ # * Module Statsample::Codification, to help to codify open questions
99
+ # * Converters to import and export data from databases, csv and excel files.
100
+ # * Module Statsample::Crosstab provides function to create crosstab for categorical data
101
+ # * Reliability analysis provides functions to analyze scales.
102
+ # * Module Statsample::SRS (Simple Random Sampling) provides a lot of functions to estimate standard error for several type of samples
103
+ # * Interfaces to gdchart, gnuplot and SVG::Graph
110
104
  #
111
105
  module Statsample
112
- VERSION = '0.6.5'
106
+ begin
107
+ require 'rbgsl'
108
+ def self.has_gsl?
109
+ true
110
+ end
111
+ rescue LoadError
112
+ def self.has_gsl?
113
+ false
114
+ end
115
+ end
116
+ VERSION = '0.6.7'
113
117
  SPLIT_TOKEN = ","
114
118
  autoload(:Database, 'statsample/converters')
115
119
  autoload(:Anova, 'statsample/anova')
@@ -137,16 +141,56 @@ module Statsample
137
141
  autoload(:Test, 'statsample/test')
138
142
  autoload(:Factor, 'statsample/factor')
139
143
 
140
- def self.load(filename)
141
- if File.exists? filename
142
- o=false
143
- File.open(filename,"r") {|fp| o=Marshal.load(fp) }
144
- o
145
- else
146
- false
144
+
145
+
146
+ class << self
147
+ # Load a object saved on a file.
148
+ def load(filename)
149
+ if File.exists? filename
150
+ o=false
151
+ File.open(filename,"r") {|fp| o=Marshal.load(fp) }
152
+ o
153
+ else
154
+ false
155
+ end
147
156
  end
148
- end
149
-
157
+ # Create a matrix using vectors as columns.
158
+ # Use:
159
+ #
160
+ # matrix=Statsample.vector_cols_matrix(v1,v2)
161
+ def vector_cols_matrix(*vs)
162
+ # test
163
+ size=vs[0].size
164
+ vs.each{|v|
165
+ raise ArgumentError,"Arguments should be Vector" unless v.instance_of? Statsample::Vector
166
+ raise ArgumentError,"Vectors size should be the same" if v.size!=size
167
+ }
168
+ Matrix.rows((0...size).to_a.collect() {|i|
169
+ vs.collect{|v| v[i]}
170
+ })
171
+ end
172
+ # Returns a duplicate of the input vectors, without missing data
173
+ # for any of the vectors.
174
+ #
175
+ # a=[1,2,3,6,7,nil,3,5].to_scale
176
+ # b=[nil,nil,5,6,4,5,10,2].to_scale
177
+ # c=[2,4,6,7,4,5,6,7].to_scale
178
+ # a2,b2,c2=Statsample.only_valid(a,b,c)
179
+ # => [#<Statsample::Scale:0xb748c8c8 @data=[3, 6, 7, 3, 5]>,
180
+ # #<Statsample::Scale:0xb748c814 @data=[5, 6, 4, 10, 2]>,
181
+ # #<Statsample::Scale:0xb748c760 @data=[6, 7, 4, 6, 7]>]
182
+ #
183
+ def only_valid(*vs)
184
+ i=1
185
+ h=vs.inject({}) {|a,v| a["v#{i}"]=v;i+=1;a}
186
+ ds=Statsample::Dataset.new(h).dup_only_valid
187
+ ds.vectors.values
188
+ end
189
+ end
190
+
191
+
192
+
193
+
150
194
  module Util
151
195
  # Reference: http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm
152
196
  def normal_order_statistic_medians(i,n)
Binary file
@@ -33,7 +33,7 @@ class StatsampleBivariateTestCase < Test::Unit::TestCase
33
33
  poly = Statsample::Bivariate::Polychoric.new(matrix)
34
34
  poly.compute_two_step_mle_drasgow_ruby
35
35
  assert_in_delta(tetra.r,poly.r,0.0001)
36
- if HAS_GSL
36
+ if Statsample.has_gsl?
37
37
  poly.compute_two_step_mle_drasgow_gsl
38
38
  assert_in_delta(tetra.r,poly.r,0.0001)
39
39
  end
@@ -59,7 +59,7 @@ class StatsampleBivariateTestCase < Test::Unit::TestCase
59
59
 
60
60
 
61
61
 
62
- if HAS_GSL
62
+ if Statsample.has_gsl?
63
63
  poly.method=:polychoric_series
64
64
  poly.compute
65
65
 
@@ -93,6 +93,7 @@ class StatsampleBivariateTestCase < Test::Unit::TestCase
93
93
  else
94
94
  puts "Two-step optimized, polychoric series and Joint method for Polychoric requires GSL"
95
95
  end
96
+ assert(poly.summary)
96
97
  end
97
98
  def test_tetrachoric
98
99
  a,b,c,d=0,0,0,0
@@ -134,7 +135,7 @@ class StatsampleBivariateTestCase < Test::Unit::TestCase
134
135
  tc2 = Statsample::Bivariate::Tetrachoric.new_with_vectors(x,y)
135
136
  assert_equal(tc1.r,tc2.r)
136
137
  assert_equal(tc1.se,tc2.se)
137
-
138
+ assert(tc.summary)
138
139
  end
139
140
  def test_matrix_correlation
140
141
  v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
@@ -174,7 +175,7 @@ class StatsampleBivariateTestCase < Test::Unit::TestCase
174
175
  assert(Statsample::Bivariate.prop_pearson(t,n,:left)<0.05)
175
176
  end
176
177
  def test_covariance
177
- if HAS_GSL
178
+ if Statsample.has_gsl?
178
179
  v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
179
180
  v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
180
181
  assert_in_delta(Statsample::Bivariate.covariance(v1,v2), Statsample::Bivariate.covariance_slow(v1,v2), 0.001)
@@ -18,7 +18,7 @@ class StatsampleCombinationTestCase < Test::Unit::TestCase
18
18
  assert_equal(expected,a)
19
19
  end
20
20
  def test_gsl_versus_ruby
21
- if HAS_GSL
21
+ if Statsample.has_gsl?
22
22
  k=3
23
23
  n=10
24
24
  gsl=Statsample::Combination.new(k,n,false)
data/test/test_dataset.rb CHANGED
@@ -13,7 +13,7 @@ class StatsampleDatasetTestCase < Test::Unit::TestCase
13
13
  assert_equal(%w{id name age city a1}, @ds.fields)
14
14
  end
15
15
  def test_saveload
16
- outfile=Tempfile.new("/dataset.ds")
16
+ outfile=Tempfile.new("dataset.ds")
17
17
  @ds.save(outfile.path)
18
18
  a=Statsample.load(outfile.path)
19
19
  assert_equal(@ds,a)
@@ -389,4 +389,4 @@ class StatsampleDatasetTestCase < Test::Unit::TestCase
389
389
 
390
390
  end
391
391
 
392
- end
392
+ end
data/test/test_factor.rb CHANGED
@@ -2,11 +2,12 @@ $:.unshift(File.dirname(__FILE__)+'/../lib/')
2
2
  require 'statsample'
3
3
  require 'test/unit'
4
4
  class StatsampleFactorTestCase < Test::Unit::TestCase
5
+ # Tested with SPSS and R
5
6
  def test_pca
6
- if HAS_GSL
7
+ if Statsample.has_gsl?
7
8
  require 'gsl'
8
9
  a=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2.0, 1.0, 1.5, 1.1].to_scale
9
- b=[2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9].to_scale
10
+ b=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9].to_scale
10
11
  a.recode! {|c| c-a.mean}
11
12
  b.recode! {|c| c-b.mean}
12
13
  ds={'a'=>a,'b'=>b}.to_dataset
@@ -16,20 +17,66 @@ class StatsampleFactorTestCase < Test::Unit::TestCase
16
17
  expected_eigenvalues.each_with_index{|ev,i|
17
18
  assert_in_delta(ev,pca.eigenvalues[i],0.001)
18
19
  }
20
+ expected_communality=[0.590, 0.694]
21
+ expected_communality.each_with_index{|ev,i|
22
+ assert_in_delta(ev,pca.communalities[i],0.001)
23
+ }
24
+ expected_cm=[0.768, 0.833]
25
+
26
+ obs=pca.component_matrix(1).column(0).to_a
27
+ expected_cm.each_with_index{|ev,i|
28
+ assert_in_delta(ev,obs[i],0.001)
29
+ }
30
+
19
31
  expected_fm_1=GSL::Matrix[[0.677], [0.735]]
20
32
  expected_fm_2=GSL::Matrix[[0.677,0.735], [0.735, -0.677]]
21
33
  _test_matrix(expected_fm_1,pca.feature_vector(1))
22
34
  _test_matrix(expected_fm_2,pca.feature_vector(2))
35
+ assert(pca.summary)
23
36
  else
24
37
  puts "PCA not tested. Requires GSL"
25
38
  end
26
39
  end
40
+
41
+ # Tested with R
42
+ def test_principalaxis
43
+ if Statsample.has_gsl?
44
+ require 'gsl'
45
+ matrix=Matrix[
46
+ [1.0, 0.709501601093587, 0.877596585880047, 0.272219316266807], [0.709501601093587, 1.0, 0.291633797330304, 0.871141831433844], [0.877596585880047, 0.291633797330304, 1.0, -0.213373722977167], [0.272219316266807, 0.871141831433844, -0.213373722977167, 1.0]]
47
+ fa=Statsample::Factor::PrincipalAxis.new(matrix,:m=>1)
48
+ cm=Matrix[[0.923],[0.912],[0.507],[0.483]].to_gsl
49
+ _test_matrix(cm,fa.component_matrix)
50
+ h2=[0.852,0.832,0.257,0.233]
51
+ h2.each_with_index{|ev,i|
52
+ assert_in_delta(ev,fa.communalities[i],0.001)
53
+ }
54
+ eigen1=2.175
55
+ assert_in_delta(eigen1, fa.eigenvalues[0],0.001)
56
+
57
+ fa=Statsample::Factor::PrincipalAxis.new(matrix,:smc=>false)
58
+ assert_raise RuntimeError do
59
+ fa.iterate
60
+
61
+ end
62
+
63
+
64
+
65
+ assert(fa.summary)
66
+
67
+ else
68
+ puts "Principal Axis not tested. Requires GSL"
69
+ end
70
+ end
71
+
72
+
27
73
  def test_rotation_varimax
28
- if HAS_GSL
74
+ if Statsample.has_gsl?
29
75
  a = Matrix[ [ 0.4320, 0.8129, 0.3872] ,
30
76
  [0.7950, -0.5416, 0.2565] ,
31
77
  [0.5944, 0.7234, -0.3441],
32
78
  [0.8945, -0.3921, -0.1863] ]
79
+
33
80
  expected= Matrix[[-0.0204423, 0.938674, -0.340334],
34
81
  [0.983662, 0.0730206, 0.134997],
35
82
  [0.0826106, 0.435975, -0.893379],
@@ -37,9 +84,9 @@ class StatsampleFactorTestCase < Test::Unit::TestCase
37
84
  varimax=Statsample::Factor::Varimax.new(a)
38
85
  varimax.iterate
39
86
  _test_matrix(expected,varimax.rotated)
40
- else
41
- puts "Rotation not tested. Requires GSL"
42
- end
87
+ else
88
+ puts "Rotation not tested. Requires GSL"
89
+ end
43
90
  end
44
91
  def _test_matrix(a,b)
45
92
  a.size1.times {|i|
data/test/test_gsl.rb CHANGED
@@ -3,7 +3,7 @@ require 'statsample'
3
3
  require 'test/unit'
4
4
  class StatsampleGSLTestCase < Test::Unit::TestCase
5
5
  def test_matrix_to_gsl
6
- if HAS_GSL
6
+ if Statsample.has_gsl?
7
7
  a=[1,2,3,4,20].to_vector(:scale)
8
8
  b=[3,2,3,4,50].to_vector(:scale)
9
9
  c=[6,2,3,4,3].to_vector(:scale)
data/test/test_mle.rb CHANGED
@@ -49,7 +49,7 @@ class StatsampleMLETestCase < Test::Unit::TestCase
49
49
  #p coeffs_nr
50
50
  ds=@ds_indep.dup
51
51
  ds.add_vector('y',y)
52
- lr=Statsample::Regression::Multiple.listwise(ds,'y')
52
+ lr=Statsample::Regression.multiple(ds,'y')
53
53
  lr_constant = lr.constant
54
54
  lr_coeffs = lr.coeffs
55
55
  assert_in_delta(coeffs_nr[0,0], lr_constant,0.0000001)
@@ -2,17 +2,24 @@ $:.unshift(File.dirname(__FILE__)+'/../lib/')
2
2
  require 'statsample'
3
3
  require 'test/unit'
4
4
  class StatsampleRegressionTestCase < Test::Unit::TestCase
5
- def initialize(*args)
6
- @x=[13,20,10,33,15].to_vector(:scale)
7
- @y=[23,18,35,10,27 ].to_vector(:scale)
8
- @reg=Statsample::Regression::Simple.new_from_vectors(@x,@y)
9
- super
10
- end
11
5
  def test_parameters
12
- assert_in_delta(40.009, @reg.a,0.001)
13
- assert_in_delta(-0.957, @reg.b,0.001)
14
- assert_in_delta(4.248,@reg.standard_error,0.002)
6
+ @x=[13,20,10,33,15].to_vector(:scale)
7
+ @y=[23,18,35,10,27 ].to_vector(:scale)
8
+ reg=Statsample::Regression::Simple.new_from_vectors(@x,@y)
9
+ _test_simple_regression(reg)
10
+ ds={'x'=>@x,'y'=>@y}.to_dataset
11
+ reg=Statsample::Regression::Simple.new_from_dataset(ds,'x','y')
12
+ _test_simple_regression(reg)
13
+ reg=Statsample::Regression.simple(@x,@y)
14
+ _test_simple_regression(reg)
15
+
15
16
  end
17
+ def _test_simple_regression(reg)
18
+ assert_in_delta(40.009, reg.a,0.001)
19
+ assert_in_delta(-0.957, reg.b,0.001)
20
+ assert_in_delta(4.248,reg.standard_error,0.002)
21
+ end
22
+
16
23
  def test_multiple_dependent
17
24
  complete=Matrix[
18
25
  [1,0.53,0.62,0.19,-0.09,0.08,0.02,-0.12,0.08],
@@ -54,7 +61,7 @@ class StatsampleRegressionTestCase < Test::Unit::TestCase
54
61
 
55
62
 
56
63
  def test_multiple_regression_gsl
57
- if HAS_GSL
64
+ if Statsample.has_gsl?
58
65
  @a=[1,3,2,4,3,5,4,6,5,7].to_vector(:scale)
59
66
  @b=[3,3,4,4,5,5,6,6,4,4].to_vector(:scale)
60
67
  @c=[11,22,30,40,50,65,78,79,99,100].to_vector(:scale)
@@ -78,29 +85,7 @@ class StatsampleRegressionTestCase < Test::Unit::TestCase
78
85
  end
79
86
 
80
87
 
81
- def test_multiple_regression_alglib
82
- if HAS_ALGIB
83
- @a=[1,3,2,4,3,5,4,6,5,7].to_vector(:scale)
84
- @b=[3,3,4,4,5,5,6,6,4,4].to_vector(:scale)
85
- @c=[11,22,30,40,50,65,78,79,99,100].to_vector(:scale)
86
- @y=[3,4,5,6,7,8,9,10,20,30].to_vector(:scale)
87
- ds={'a'=>@a,'b'=>@b,'c'=>@c,'y'=>@y}.to_dataset
88
- lr=Statsample::Regression::Multiple::AlglibEngine.new(ds,'y')
89
- model_test(lr,'alglib')
90
- predicted=[1.7857, 6.0989, 3.2433, 7.2908, 4.9667, 10.3428, 8.8158, 10.4717, 23.6639, 25.3198]
91
- c_predicted=lr.predicted
92
- predicted.each_index{|i|
93
- assert_in_delta(predicted[i],c_predicted[i],0.001)
94
- }
95
- residuals=[1.2142, -2.0989, 1.7566, -1.29085, 2.033, -2.3428, 0.18414, -0.47177, -3.66395, 4.6801]
96
- c_residuals=lr.residuals
97
- residuals.each_index{|i|
98
- assert_in_delta(residuals[i],c_residuals[i],0.001)
99
- }
100
- else
101
- puts "Regression::Multiple::AlglibEngine not tested (no Alglib)"
102
- end
103
- end
88
+
104
89
  def model_test_matrix(lr,name='undefined')
105
90
 
106
91
  stan_coeffs={'a'=>0.151,'b'=>-0.547,'c'=>0.997}
@@ -3,9 +3,9 @@ require 'statsample'
3
3
  require 'test/unit'
4
4
  class StatsampleStatisicsTestCase < Test::Unit::TestCase
5
5
 
6
- def initialize(*args)
7
- super
8
- end
6
+ def initialize(*args)
7
+ super
8
+ end
9
9
  def test_recode_repeated
10
10
  a=%w{a b c c d d d e}
11
11
  exp=["a","b","c_1","c_2","d_1","d_2","d_3","e"]
@@ -21,19 +21,11 @@ class StatsampleStatisicsTestCase < Test::Unit::TestCase
21
21
  assert(!"1212-1212-1".is_number?)
22
22
  assert(!"a10".is_number?)
23
23
  assert(!"".is_number?)
24
-
25
- end
26
- def test_chi_square
27
- real=Matrix[[95,95],[45,155]]
28
- expected=Matrix[[68,122],[72,128]]
29
- assert_nothing_raised do
30
- chi=Statsample::Test.chi_square(real,expected)
31
- end
32
- chi=Statsample::Test.chi_square(real,expected)
33
- assert_in_delta(32.53,chi,0.1)
24
+
34
25
  end
35
-
36
- def test_estimation_mean
26
+
27
+
28
+ def test_estimation_mean
37
29
  v=([42]*23+[41]*4+[36]*1+[32]*1+[29]*1+[27]*2+[23]*1+[19]*1+[16]*2+[15]*2+[14,11,10,9,7]+ [6]*3+[5]*2+[4,3]).to_vector(:scale)
38
30
  assert_equal(50,v.size)
39
31
  assert_equal(1471,v.sum())
@@ -45,7 +37,7 @@ class StatsampleStatisicsTestCase < Test::Unit::TestCase
45
37
  sam=200
46
38
  prop=0.19
47
39
  assert_in_delta(81.8, Statsample::SRS.proportion_total_sd_ep_wor(prop, sam, pop), 0.1)
48
-
40
+
49
41
  # confidence limits
50
42
  pop=500
51
43
  sam=100
@@ -57,13 +49,15 @@ class StatsampleStatisicsTestCase < Test::Unit::TestCase
57
49
  end
58
50
  def test_ml
59
51
  if(true)
60
- real=[1,1,1,1].to_vector(:scale)
61
-
62
- pred=[0.0001,0.0001,0.0001,0.0001].to_vector(:scale)
63
- # puts Statsample::Bivariate.maximum_likehood_dichotomic(pred,real)
64
-
52
+ real=[1,1,1,1].to_vector(:scale)
53
+
54
+ pred=[0.0001,0.0001,0.0001,0.0001].to_vector(:scale)
55
+ # puts Statsample::Bivariate.maximum_likehood_dichotomic(pred,real)
56
+
65
57
  end
66
58
  end
59
+
60
+
67
61
  def test_simple_linear_regression
68
62
  a=[1,2,3,4,5,6].to_vector(:scale)
69
63
  b=[6,2,4,10,12,8].to_vector(:scale)
@@ -74,17 +68,5 @@ class StatsampleStatisicsTestCase < Test::Unit::TestCase
74
68
  assert_in_delta(1.314,reg.b,0.001)
75
69
  assert_in_delta(0.657,reg.r,0.001)
76
70
  assert_in_delta(0.432,reg.r2,0.001)
77
- end
78
- def test_u_mannwhitney
79
- a=[1,2,3,4,5,6].to_scale
80
- b=[0,5,7,9,10,11].to_scale
81
- assert_equal(7.5, Statsample::Test.u_mannwhitney(a,b).u)
82
- assert_equal(7.5, Statsample::Test.u_mannwhitney(b,a).u)
83
- a=[1, 7,8,9,10,11].to_scale
84
- b=[2,3,4,5,6,12].to_scale
85
- assert_equal(11, Statsample::Test.u_mannwhitney(a,b).u)
86
-
87
-
88
-
89
71
  end
90
72
  end
@@ -0,0 +1,35 @@
1
+ $:.unshift(File.dirname(__FILE__)+'/../lib/')
2
+ require 'statsample'
3
+ require "tempfile"
4
+ require 'test/unit'
5
+
6
+ class StatsampleStatisticalTestCase < Test::Unit::TestCase
7
+ def test_chi_square
8
+ real=Matrix[[95,95],[45,155]]
9
+ expected=Matrix[[68,122],[72,128]]
10
+ assert_nothing_raised do
11
+ chi=Statsample::Test.chi_square(real,expected)
12
+ end
13
+ chi=Statsample::Test.chi_square(real,expected)
14
+ assert_in_delta(32.53,chi,0.1)
15
+ end
16
+ def test_u_mannwhitney
17
+ a=[1,2,3,4,5,6].to_scale
18
+ b=[0,5,7,9,10,11].to_scale
19
+ assert_equal(7.5, Statsample::Test.u_mannwhitney(a,b).u)
20
+ assert_equal(7.5, Statsample::Test.u_mannwhitney(b,a).u)
21
+ a=[1, 7,8,9,10,11].to_scale
22
+ b=[2,3,4,5,6,12].to_scale
23
+ assert_equal(11, Statsample::Test.u_mannwhitney(a,b).u)
24
+ end
25
+
26
+
27
+ def test_levene
28
+
29
+ a=[1,2,3,4,5,6,7,8,100,10].to_scale
30
+ b=[30,40,50,60,70,80,90,100,110,120].to_scale
31
+ levene=Statsample::Test::Levene.new([a,b])
32
+ assert_in_delta(0.778, levene.f, 0.001)
33
+ assert_in_delta(0.389, levene.probability, 0.001)
34
+ end
35
+ end
@@ -15,7 +15,7 @@ class StatsampleSvgGraphTestCase < Test::Unit::TestCase
15
15
  super
16
16
  end
17
17
  def test_histogram
18
- if HAS_GSL
18
+ if Statsample.has_gsl?
19
19
  ar=(1..1000).to_a.collect {|a|
20
20
  rand(10)
21
21
  }.to_vector(:scale)
@@ -47,7 +47,7 @@ class StatsampleSvgGraphTestCase < Test::Unit::TestCase
47
47
  vector.svggraph_frequencies(file,800,600,SVG::Graph::PieNoOp,:graph_title=>'Pie')
48
48
  assert(File.exists?(file))
49
49
  vector.type=:scale
50
- if HAS_GSL
50
+ if Statsample.has_gsl?
51
51
  file=Tempfile.new("svg_histogram.svg").path
52
52
  hist=vector.svggraph_histogram(5)
53
53
  File.open(file,"wb") {|fp|