statsample 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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