statsample 0.9.0 → 0.10.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 (65) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +20 -1
  3. data/Manifest.txt +8 -1
  4. data/README.txt +11 -7
  5. data/Rakefile +2 -2
  6. data/data/locale/es/LC_MESSAGES/statsample.mo +0 -0
  7. data/examples/dataset.rb +8 -0
  8. data/examples/multiple_regression.rb +1 -1
  9. data/examples/parallel_analysis.rb +29 -0
  10. data/examples/parallel_analysis_tetrachoric.rb +30 -0
  11. data/examples/vector.rb +6 -0
  12. data/lib/distribution.rb +16 -6
  13. data/lib/distribution/normal.rb +27 -20
  14. data/lib/distribution/normalbivariate.rb +1 -1
  15. data/lib/statsample.rb +19 -2
  16. data/lib/statsample/anova.rb +118 -16
  17. data/lib/statsample/bivariate.rb +27 -13
  18. data/lib/statsample/bivariate/polychoric.rb +18 -5
  19. data/lib/statsample/crosstab.rb +66 -74
  20. data/lib/statsample/dataset.rb +52 -45
  21. data/lib/statsample/dominanceanalysis.rb +2 -5
  22. data/lib/statsample/factor.rb +1 -1
  23. data/lib/statsample/factor/parallelanalysis.rb +122 -0
  24. data/lib/statsample/factor/pca.rb +23 -28
  25. data/lib/statsample/factor/principalaxis.rb +8 -3
  26. data/lib/statsample/matrix.rb +27 -24
  27. data/lib/statsample/mle.rb +11 -11
  28. data/lib/statsample/permutation.rb +2 -1
  29. data/lib/statsample/regression.rb +10 -8
  30. data/lib/statsample/regression/multiple/baseengine.rb +36 -25
  31. data/lib/statsample/regression/multiple/gslengine.rb +14 -0
  32. data/lib/statsample/regression/multiple/matrixengine.rb +4 -32
  33. data/lib/statsample/regression/multiple/rubyengine.rb +2 -6
  34. data/lib/statsample/regression/simple.rb +1 -1
  35. data/lib/statsample/reliability.rb +42 -54
  36. data/lib/statsample/test.rb +10 -6
  37. data/lib/statsample/test/f.rb +16 -26
  38. data/lib/statsample/test/levene.rb +4 -8
  39. data/lib/statsample/test/t.rb +30 -24
  40. data/lib/statsample/test/umannwhitney.rb +13 -6
  41. data/lib/statsample/vector.rb +86 -76
  42. data/po/es/statsample.mo +0 -0
  43. data/po/es/statsample.po +127 -94
  44. data/po/statsample.pot +114 -79
  45. data/test/test_anovaoneway.rb +27 -0
  46. data/test/test_anovawithvectors.rb +97 -0
  47. data/test/test_bivariate.rb +6 -57
  48. data/test/test_bivariate_polychoric.rb +65 -0
  49. data/test/test_crosstab.rb +6 -0
  50. data/test/test_dataset.rb +29 -1
  51. data/test/test_distribution.rb +6 -13
  52. data/test/test_dominance_analysis.rb +1 -1
  53. data/test/test_factor.rb +3 -3
  54. data/test/test_helpers.rb +18 -18
  55. data/test/test_matrix.rb +33 -20
  56. data/test/test_permutation.rb +36 -30
  57. data/test/test_regression.rb +26 -8
  58. data/test/test_reliability.rb +104 -14
  59. data/test/test_test_f.rb +11 -14
  60. data/test/test_test_t.rb +42 -35
  61. data/test/test_umannwhitney.rb +22 -10
  62. data/test/test_vector.rb +204 -102
  63. metadata +57 -81
  64. metadata.gz.sig +0 -0
  65. data/test/test_anova.rb +0 -24
data/test/test_matrix.rb CHANGED
@@ -2,23 +2,36 @@ require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
 
4
4
  class StatsampleMatrixTestCase < MiniTest::Unit::TestCase
5
-
6
- def setup
7
- end
8
- def test_subindex
9
- matrix=Matrix[[1,2,3],[4,5,6],[7,8,9]]
10
- assert_equal(5, matrix[1,1])
11
- assert_equal(Matrix[[1,2,3]], matrix[0,:*])
12
- assert_equal(Matrix[[1],[4],[7]], matrix[:*,0])
13
- assert_equal(Matrix[[1,2],[4,5],[7,8]], matrix[:*,0..1])
14
- assert_equal(Matrix[[1,2],[4,5]], matrix[0..1,0..1])
15
- end
16
- def test_sums
17
- matrix=Matrix[[1,2,3],[4,5,6],[7,8,9]]
18
- assert_equal(6,matrix.row_sum[0])
19
- assert_equal(12,matrix.column_sum[0])
20
- assert_equal(45,matrix.total_sum)
5
+ context(Matrix) do
6
+ setup do
7
+ @matrix=Matrix[[1,2,3],[4,5,6],[7,8,9]]
8
+ end
9
+ should "return correct value for [i,j]" do
10
+ assert_equal(5, @matrix[1,1])
11
+ end
12
+ should "return correct value for [i,:*]" do
13
+ assert_equal(Matrix[[1,2,3]], @matrix[0,:*])
14
+ end
15
+ should "return correct value for [:*,j]" do
16
+ assert_equal(Matrix[[1],[4],[7]], @matrix[:*,0])
17
+ end
18
+ should "return correct value for [:*,j1..j2]" do
19
+ assert_equal(Matrix[[1,2],[4,5],[7,8]], @matrix[:*,0..1])
20
+ end
21
+ should "return correct value for [i1..i2,j1..j2]" do
22
+ assert_equal(Matrix[[1,2],[4,5]], @matrix[0..1,0..1])
23
+ end
24
+ should "return correct value for row_sum" do
25
+ assert_equal(6,@matrix.row_sum[0])
26
+ end
27
+ should "return correct value for column_sum" do
28
+ assert_equal(12,@matrix.column_sum[0])
29
+ end
30
+ should "return correct value for total_sum" do
31
+ assert_equal(45,@matrix.total_sum)
32
+ end
21
33
  end
34
+
22
35
  def test_covariate
23
36
  a=Matrix[[1.0, 0.3, 0.2], [0.3, 1.0, 0.5], [0.2, 0.5, 1.0]]
24
37
  a.extend Statsample::CovariateMatrix
@@ -35,9 +48,9 @@ class StatsampleMatrixTestCase < MiniTest::Unit::TestCase
35
48
 
36
49
  assert_equal(:covariance, a.type)
37
50
 
38
- a=100.times.collect {rand()}.to_scale
39
- b=100.times.collect {rand()}.to_scale
40
- c=100.times.collect {rand()}.to_scale
51
+ a=50.times.collect {rand()}.to_scale
52
+ b=50.times.collect {rand()}.to_scale
53
+ c=50.times.collect {rand()}.to_scale
41
54
  ds={'a'=>a,'b'=>b,'c'=>c}.to_dataset
42
55
  corr=Statsample::Bivariate.correlation_matrix(ds)
43
56
  real=Statsample::Bivariate.covariance_matrix(ds).correlation
@@ -46,5 +59,5 @@ class StatsampleMatrixTestCase < MiniTest::Unit::TestCase
46
59
  assert_in_delta(corr[i,j], real[i,j],1e-15)
47
60
  end
48
61
  end
49
- end
62
+ end
50
63
  end
@@ -2,35 +2,41 @@ require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
 
4
4
  class StatsamplePermutationTestCase < MiniTest::Unit::TestCase
5
- def initialize(*args)
6
- super
7
- end
8
- def test_number_of_permutations
9
- per1=Statsample::Permutation.new(4)
10
- assert_equal(24,per1.permutation_number)
11
- per2=Statsample::Permutation.new([1,1,1,0,0,0])
12
- assert_equal(20,per2.permutation_number)
13
- end
14
- def test_permutation_with_number
15
- per1=Statsample::Permutation.new(2)
16
- exp1=[[0,1],[1,0]]
17
- assert_equal(exp1,per1.permutations)
18
- per2=Statsample::Permutation.new(3)
19
- exp2=[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]]
20
- assert_equal(exp2,per2.permutations)
21
-
22
- end
23
- def test_permutation_with_array_simple
24
- per1=Statsample::Permutation.new(%w{a b})
25
- exp1=[['a','b'],['b','a']]
26
- assert_equal(exp1,per1.permutations)
27
- per2=Statsample::Permutation.new(%w{a b c})
28
- exp2=[%w{a b c},%w{a c b},%w{b a c} ,%w{b c a},%w{c a b},%w{c b a}]
29
- assert_equal(exp2,per2.permutations)
30
- end
31
- def test_permutation_with_array_repeated
32
- per1=Statsample::Permutation.new([0,0,1,1])
33
- exp1=[[0,0,1,1],[0,1,0,1],[0,1,1,0],[1,0,0,1],[1,0,1,0],[1,1,0,0]]
34
- assert_equal(exp1,per1.permutations)
5
+ context Statsample::Permutation do
6
+ should "initialize with number" do
7
+ per1=Statsample::Permutation.new(2)
8
+ exp1=[[0,1],[1,0]]
9
+ assert_equal(exp1,per1.permutations)
10
+ per2=Statsample::Permutation.new(3)
11
+ exp2=[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]]
12
+ assert_equal(exp2,per2.permutations)
13
+ end
14
+ should "initialize with simple array" do
15
+ per1=Statsample::Permutation.new(%w{a b})
16
+ exp1=[['a','b'],['b','a']]
17
+ assert_equal(exp1,per1.permutations)
18
+ per2=Statsample::Permutation.new(%w{a b c})
19
+ exp2=[%w{a b c},%w{a c b},%w{b a c} ,%w{b c a},%w{c a b},%w{c b a}]
20
+ assert_equal(exp2,per2.permutations)
21
+ end
22
+ should "initialize with Statsample::Vector" do
23
+ per2=Statsample::Permutation.new(%w{a b c}.to_vector)
24
+ exp2=[%w{a b c},%w{a c b},%w{b a c} ,%w{b c a},%w{c a b},%w{c b a}]
25
+ assert_equal(exp2, per2.permutations)
26
+ end
27
+
28
+ should "calculate correct number of total permutations without repetitions" do
29
+ per1=Statsample::Permutation.new(4)
30
+ assert_equal(24,per1.permutation_number)
31
+ end
32
+ should "calculate correct number of total permutations with repetitions" do
33
+ per2=Statsample::Permutation.new([1,1,1,0,0,0])
34
+ assert_equal(20,per2.permutation_number)
35
+ end
36
+ should "initialize with array repeated" do
37
+ per1=Statsample::Permutation.new([0,0,1,1])
38
+ exp1=[[0,0,1,1],[0,1,0,1],[0,1,1,0],[1,0,0,1],[1,0,1,0],[1,1,0,0]]
39
+ assert_equal(exp1,per1.permutations)
40
+ end
35
41
  end
36
42
  end
@@ -1,6 +1,26 @@
1
1
  require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
  class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
4
+ context "Example with missing data" do
5
+ setup do
6
+ @x=[0.285714285714286, 0.114285714285714, 0.314285714285714, 0.2, 0.2, 0.228571428571429, 0.2, 0.4, 0.714285714285714, 0.285714285714286, 0.285714285714286, 0.228571428571429, 0.485714285714286, 0.457142857142857, 0.257142857142857, 0.228571428571429, 0.285714285714286, 0.285714285714286, 0.285714285714286, 0.142857142857143, 0.285714285714286, 0.514285714285714, 0.485714285714286, 0.228571428571429, 0.285714285714286, 0.342857142857143, 0.285714285714286, 0.0857142857142857].to_scale
7
+
8
+ @y=[nil, 0.233333333333333, nil, 0.266666666666667, 0.366666666666667, nil, 0.333333333333333, 0.3, 0.666666666666667, 0.0333333333333333, 0.333333333333333, nil, nil, 0.533333333333333, 0.433333333333333, 0.4, 0.4, 0.5, 0.4, 0.266666666666667, 0.166666666666667, 0.666666666666667, 0.433333333333333, 0.166666666666667, nil, 0.4, 0.366666666666667, nil].to_scale
9
+ @ds={'x'=>@x,'y'=>@y}.to_dataset
10
+ @lr=Statsample::Regression::Multiple::RubyEngine.new(@ds,'y')
11
+ end
12
+ should "have correct values" do
13
+ assert_in_delta(0.455,@lr.r2,0.001)
14
+ assert_in_delta(0.427,@lr.r2_adjusted, 0.001)
15
+ assert_in_delta(0.1165,@lr.se_estimate,0.001)
16
+ assert_in_delta(15.925,@lr.f,0.0001)
17
+ assert_in_delta(0.675, @lr.standarized_coeffs['x'],0.001)
18
+ assert_in_delta(0.778, @lr.coeffs['x'],0.001, "coeff x")
19
+ assert_in_delta(0.132, @lr.constant,0.001,"constant")
20
+ assert_in_delta(0.195, @lr.coeffs_se['x'],0.001,"coeff x se")
21
+ assert_in_delta(0.064, @lr.constant_se,0.001,"constant se")
22
+ end
23
+ end
4
24
  def test_parameters
5
25
  @x=[13,20,10,33,15].to_vector(:scale)
6
26
  @y=[23,18,35,10,27 ].to_vector(:scale)
@@ -19,15 +39,13 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
19
39
  assert_in_delta(4.248,reg.standard_error,0.002)
20
40
  end
21
41
  def test_summaries
22
- a=100.times.map{rand(100)}.to_scale
23
- b=100.times.map{rand(100)}.to_scale
24
- y=100.times.map{rand(100)}.to_scale
42
+ a=10.times.map{rand(100)}.to_scale
43
+ b=10.times.map{rand(100)}.to_scale
44
+ y=10.times.map{rand(100)}.to_scale
25
45
  ds={'a'=>a,'b'=>b,'y'=>y}.to_dataset
26
46
  lr=Statsample::Regression::Multiple::RubyEngine.new(ds,'y')
27
47
  assert(lr.summary.size>0)
28
48
 
29
-
30
-
31
49
  end
32
50
  def test_multiple_dependent
33
51
  complete=Matrix[
@@ -65,7 +83,6 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
65
83
  assert_in_delta(1361.130,lr.ssr,0.001)
66
84
  assert_in_delta(1046.306,lr.sse,0.001)
67
85
  assert_in_delta(3.035,lr.f,0.001)
68
-
69
86
  end
70
87
 
71
88
 
@@ -170,14 +187,15 @@ class StatsampleRegressionTestCase < MiniTest::Unit::TestCase
170
187
  @y=[nil,3,4,5,6,7,8,9,10,20,30].to_vector(:scale)
171
188
  ds={'a'=>@a,'b'=>@b,'c'=>@c,'y'=>@y}.to_dataset
172
189
  lr=Statsample::Regression::Multiple::RubyEngine.new(ds,'y')
190
+ assert_equal(11, lr.total_cases)
191
+ assert_equal(10, lr.valid_cases)
173
192
  model_test(lr, 'rubyengine with missing data')
174
193
 
175
194
  predicted=[nil,1.7857, 6.0989, 3.2433, 7.2908, 4.9667, 10.3428, 8.8158, 10.4717, 23.6639, 25.3198]
176
195
  c_predicted = lr.predicted
177
-
178
196
  predicted.each_index do |i|
179
197
  if c_predicted[i].nil?
180
- assert(predicted[i].nil?)
198
+ assert(predicted[i].nil?, "Actual #{i} is nil, but expected #{predicted[i]}")
181
199
  else
182
200
  assert_in_delta(predicted[i], c_predicted[i], 0.001)
183
201
  end
@@ -2,20 +2,110 @@ require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
 
4
4
  class StatsampleReliabilityTestCase < MiniTest::Unit::TestCase
5
+ context Statsample::Reliability do
6
+ context "Cronbach's alpha" do
7
+ setup do
8
+ @samples=40
9
+ @n_variables=rand(10)+2
10
+ @ds=Statsample::Dataset.new()
11
+ base=@samples.times.collect {|a| rand()}.to_scale
12
+ @n_variables.times do |i|
13
+ @ds[i]=base.collect {|v| v+rand()}.to_scale
14
+ end
15
+ @ds.update_valid_data
16
+ @k=@ds.fields.size
17
+ @cm=Statsample::Bivariate.covariance_matrix(@ds)
18
+ @dse=@ds.dup
19
+ @dse.fields.each do |f|
20
+ @dse[f]=@dse[f].standarized
21
+ end
22
+ @cme=Statsample::Bivariate.covariance_matrix(@dse)
23
+ @a=Statsample::Reliability.cronbach_alpha(@ds)
24
+ @as=Statsample::Reliability.cronbach_alpha_standarized(@ds)
25
+ end
26
+ should "alpha will be equal to sum of matrix covariance less the individual variances" do
27
+ total_sum=@cm.total_sum
28
+ ind_var=@ds.fields.inject(0) {|ac,v| ac+@ds[v].variance}
29
+ expected = @k.quo(@k-1) * (1-(ind_var.quo(total_sum)))
30
+ assert_in_delta(expected, @a,1e-10)
31
+ end
32
+ should "standarized alpha will be equal to sum of matrix covariance less the individual variances on standarized values" do
33
+ total_sum=@cme.total_sum
34
+ ind_var=@dse.fields.inject(0) {|ac,v| ac+@dse[v].variance}
35
+ expected = @k.quo(@k-1) * (1-(ind_var.quo(total_sum)))
36
+ assert_in_delta(expected, @as, 1e-10)
37
+ end
38
+ end
39
+ context Statsample::Reliability::ItemCharacteristicCurve do
40
+ setup do
41
+ @samples=100
42
+ @points=rand(10)+3
43
+ @max_point=(@points-1)*3
44
+ @x1=@samples.times.map{rand(@points)}.to_scale
45
+ @x2=@samples.times.map{rand(@points)}.to_scale
46
+ @x3=@samples.times.map{rand(@points)}.to_scale
47
+ @ds={'a'=>@x1,'b'=>@x2,'c'=>@x3}.to_dataset
48
+ @icc=Statsample::Reliability::ItemCharacteristicCurve.new(@ds)
49
+ end
50
+ should "have a correct automatic vector_total" do
51
+ assert_equal(@ds.vector_sum, @icc.vector_total)
52
+ end
53
+ should "have a correct different vector_total" do
54
+ x2=@samples.times.map{rand(10)}.to_scale
55
+ @icc=Statsample::Reliability::ItemCharacteristicCurve.new(@ds,x2)
56
+ assert_equal(x2, @icc.vector_total)
57
+ assert_raises(ArgumentError) do
58
+ inc=(@samples+10).times.map{rand(10)}.to_scale
59
+ @icc=Statsample::Reliability::ItemCharacteristicCurve.new(@ds,inc)
60
+ end
61
+ end
62
+ should "have 0% for 0 points on maximum value values" do
63
+ max=@icc.curve_field('a',0)[@max_point.to_f]
64
+ max||=0
65
+ assert_in_delta(0, max)
66
+ end
67
+ should "have 0 for max value on minimum value" do
68
+ max=@icc.curve_field('a',@max_point)[0.0]
69
+ max||=0
70
+ assert_in_delta(0, max)
71
+ end
72
+ should "have correct values of % for any value" do
73
+ sum=@icc.vector_total
74
+ total={}
75
+ total_g=sum.frequencies
76
+ index=rand(@points)
77
+ @x1.each_with_index do |v,i|
78
+ total[sum[i]]||=0
79
+ total[sum[i]]+=1 if v==index
80
+ end
81
+ expected=total.each {|k,v|
82
+ total[k]=v.quo(total_g[k])
83
+ }
84
+ assert_equal(expected, @icc.curve_field('a',index))
85
+
86
+ end
87
+
88
+ end
89
+ context Statsample::Reliability::ItemAnalysis do
90
+ setup do
91
+ @x1=[1,1,1,1,2,2,2,2,3,3,3,30].to_vector(:scale)
92
+ @x2=[1,1,1,2,2,3,3,3,3,4,4,50].to_vector(:scale)
93
+ @x3=[2,2,1,1,1,2,2,2,3,4,5,40].to_vector(:scale)
94
+ @x4=[1,2,3,4,4,4,4,3,4,4,5,30].to_vector(:scale)
95
+ @ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3,'x4'=>@x4}.to_dataset
96
+ @ia=Statsample::Reliability::ItemAnalysis.new(@ds)
5
97
 
6
- def setup
7
- @x1=[1,1,1,1,2,2,2,2,3,3,3,30].to_vector(:scale)
8
- @x2=[1,1,1,2,2,3,3,3,3,4,4,50].to_vector(:scale)
9
- @x3=[2,2,1,1,1,2,2,2,3,4,5,40].to_vector(:scale)
10
- @x4=[1,2,3,4,4,4,4,3,4,4,5,30].to_vector(:scale)
11
- @ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3,'x4'=>@x4}.to_dataset
12
- end
13
-
14
- def test_general
15
- ia=Statsample::Reliability::ItemAnalysis.new(@ds)
16
- assert_in_delta(0.980,ia.alpha,0.001)
17
- assert_in_delta(0.999,ia.alpha_standarized,0.001)
18
- assert_in_delta(0.999,ia.item_total_correlation()['x1'],0.001)
19
- assert_in_delta(1050.455,ia.stats_if_deleted()['x1'][:variance_sample],0.001)
98
+ end
99
+ should "return correct values for item analysis" do
100
+ assert_in_delta(0.980,@ia.alpha,0.001)
101
+ assert_in_delta(0.999,@ia.alpha_standarized,0.001)
102
+ assert_in_delta(0.999,@ia.item_total_correlation()['x1'],0.001)
103
+ assert_in_delta(1050.455,@ia.stats_if_deleted()['x1'][:variance_sample],0.001)
104
+ end
105
+ should "return a summary" do
106
+ assert(@ia.summary.size>0)
107
+ end
108
+
109
+ end
20
110
  end
21
111
  end
data/test/test_test_f.rb CHANGED
@@ -5,33 +5,30 @@ class StatsampleTestFTestCase < MiniTest::Unit::TestCase
5
5
  setup do
6
6
  @ssb=84
7
7
  @ssw=68
8
- @f=Statsample::Test::F.new(@ssb,@ssw, 2,15)
8
+ @df_num=2
9
+ @df_den=15
10
+ @f=Statsample::Test::F.new(@ssb.quo(@df_num),@ssw.quo(@df_den), @df_num, @df_den)
9
11
  end
10
- should "have f equal to msb/msw" do
11
- assert_equal((@ssb.quo(2)).quo(@ssw.quo(15)), @f.f)
12
+ should "have #f equal to msb/msw" do
13
+ assert_equal((@ssb.quo(@df_num)).quo(@ssw.quo(@df_den)), @f.f)
12
14
  end
13
15
  should "have df total equal to df_num+df_den" do
14
- assert_equal(17, @f.df_total)
16
+ assert_equal(@df_num+@df_den, @f.df_total)
15
17
  end
16
18
  should "have probability near 0.002" do
17
19
  assert_in_delta(0.002, @f.probability, 0.0005)
18
20
  end
19
- context("#summary") do
21
+ should "be coerced into float" do
22
+ assert_equal(@f.to_f, @f.f)
23
+ end
24
+
25
+ context("method #summary") do
20
26
  setup do
21
- @f.name_numerator="MSb"
22
- @f.name_denominator="MSw"
23
- @f.name="ANOVA"
24
27
  @summary=@f.summary
25
28
  end
26
29
  should "have size > 0" do
27
30
  assert(@summary.size>0)
28
31
  end
29
- should "include correct names for title, num and den" do
30
- assert_match(@f.name_numerator, @summary)
31
- assert_match(@f.name_denominator, @summary)
32
- assert_match(@f.name, @summary)
33
- end
34
32
  end
35
33
  end
36
-
37
34
  end
data/test/test_test_t.rb CHANGED
@@ -1,40 +1,47 @@
1
1
  require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
  class StatsampleTestTTestCase < MiniTest::Unit::TestCase
4
- def setup
5
- @a=[30.02, 29.99, 30.11, 29.97, 30.01, 29.99].to_scale
6
- @b=[29.89, 29.93, 29.72, 29.98, 30.02, 29.98].to_scale
7
- @x1=@a.mean
8
- @x2=@b.mean
9
- @s1=@a.sd
10
- @s2=@b.sd
11
- @n1=@a.n
12
- @n2=@b.n
13
- end
14
- def test_t_sample_independent_t
15
- assert_in_delta(1.959, Statsample::Test::T.two_sample_independent(@x1, @x2, @s1, @s2, @n1, @n2))
16
- assert_in_delta(1.959, Statsample::Test::T.two_sample_independent(@x1, @x2, @s1, @s2, @n1, @n2,true))
17
- end
18
- def test_t_sample_independent_df
19
- assert_equal(10, Statsample::Test::T.df_equal_variance(@n1,@n2))
20
- assert_in_delta(7.03, Statsample::Test::T.df_not_equal_variance(@s1,@s2,@n1,@n2))
21
- end
22
- def test_t_sample_independent_object
23
- t=Statsample::Test.t_two_samples_independent(@a,@b)
24
- assert(t.summary.size>0)
25
- assert_in_delta(1.959, t.t_equal_variance)
26
- assert_in_delta(1.959, t.t_not_equal_variance)
27
- assert_in_delta(10, t.df_equal_variance)
28
- assert_in_delta(7.03, t.df_not_equal_variance)
29
- assert_in_delta(0.07856, t.probability_equal_variance)
30
- assert_in_delta(0.09095, t.probability_not_equal_variance)
31
-
32
- end
33
- def test_t_one_sample
34
- u=@a.mean+(1-rand*2)
35
- tos=Statsample::Test::T::OneSample.new(@a,{:u=>u})
36
- assert_equal((@a.mean-u).quo(@a.sd.quo(Math::sqrt(@a.n))), tos.t)
37
- assert_equal(@a.n-1, tos.df)
38
- assert(tos.summary.size>0)
4
+ include Statsample::Test
5
+ include Math
6
+ context T do
7
+ setup do
8
+ @a=[30.02, 29.99, 30.11, 29.97, 30.01, 29.99].to_scale
9
+ @b=[29.89, 29.93, 29.72, 29.98, 30.02, 29.98].to_scale
10
+ @x1=@a.mean
11
+ @x2=@b.mean
12
+ @s1=@a.sd
13
+ @s2=@b.sd
14
+ @n1=@a.n
15
+ @n2=@b.n
16
+ end
17
+ should "calculate correctly t for two samples" do
18
+ assert_in_delta(1.959, T.two_sample_independent(@x1, @x2, @s1, @s2, @n1, @n2),0.001)
19
+ assert_in_delta(1.959, T.two_sample_independent(@x1, @x2, @s1, @s2, @n1, @n2,true),0.001)
20
+ end
21
+ should "calculate correctly df for equal and unequal variance" do
22
+ assert_equal(10, T.df_equal_variance(@n1,@n2))
23
+ assert_in_delta(7.03, T.df_not_equal_variance(@s1,@s2,@n1,@n2),0.001)
24
+ end
25
+ should "calculate all values for T object" do
26
+ t=Statsample::Test.t_two_samples_independent(@a,@b)
27
+ assert(t.summary.size>0)
28
+ assert_in_delta(1.959, t.t_equal_variance,0.001)
29
+ assert_in_delta(1.959, t.t_not_equal_variance,0.001)
30
+ assert_in_delta(10, t.df_equal_variance,0.001)
31
+ assert_in_delta(7.03, t.df_not_equal_variance,0.001)
32
+ assert_in_delta(0.07856, t.probability_equal_variance,0.001)
33
+ assert_in_delta(0.09095, t.probability_not_equal_variance,0.001)
34
+ end
35
+ should "be the same using shorthand" do
36
+ v=100.times.map {rand(100)}.to_scale
37
+ assert_equal(Statsample::Test.t_one_sample(v).t, T::OneSample.new(v).t)
38
+ end
39
+ should "calculate all values for one sample T test" do
40
+ u=@a.mean+(1-rand*2)
41
+ tos=T::OneSample.new(@a,{:u=>u})
42
+ assert_equal((@a.mean-u).quo(@a.sd.quo(sqrt(@a.n))), tos.t)
43
+ assert_equal(@a.n-1, tos.df)
44
+ assert(tos.summary.size>0)
45
+ end
39
46
  end
40
47
  end