statsample 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +20 -1
- data/Manifest.txt +8 -1
- data/README.txt +11 -7
- data/Rakefile +2 -2
- data/data/locale/es/LC_MESSAGES/statsample.mo +0 -0
- data/examples/dataset.rb +8 -0
- data/examples/multiple_regression.rb +1 -1
- data/examples/parallel_analysis.rb +29 -0
- data/examples/parallel_analysis_tetrachoric.rb +30 -0
- data/examples/vector.rb +6 -0
- data/lib/distribution.rb +16 -6
- data/lib/distribution/normal.rb +27 -20
- data/lib/distribution/normalbivariate.rb +1 -1
- data/lib/statsample.rb +19 -2
- data/lib/statsample/anova.rb +118 -16
- data/lib/statsample/bivariate.rb +27 -13
- data/lib/statsample/bivariate/polychoric.rb +18 -5
- data/lib/statsample/crosstab.rb +66 -74
- data/lib/statsample/dataset.rb +52 -45
- data/lib/statsample/dominanceanalysis.rb +2 -5
- data/lib/statsample/factor.rb +1 -1
- data/lib/statsample/factor/parallelanalysis.rb +122 -0
- data/lib/statsample/factor/pca.rb +23 -28
- data/lib/statsample/factor/principalaxis.rb +8 -3
- data/lib/statsample/matrix.rb +27 -24
- data/lib/statsample/mle.rb +11 -11
- data/lib/statsample/permutation.rb +2 -1
- data/lib/statsample/regression.rb +10 -8
- data/lib/statsample/regression/multiple/baseengine.rb +36 -25
- data/lib/statsample/regression/multiple/gslengine.rb +14 -0
- data/lib/statsample/regression/multiple/matrixengine.rb +4 -32
- data/lib/statsample/regression/multiple/rubyengine.rb +2 -6
- data/lib/statsample/regression/simple.rb +1 -1
- data/lib/statsample/reliability.rb +42 -54
- data/lib/statsample/test.rb +10 -6
- data/lib/statsample/test/f.rb +16 -26
- data/lib/statsample/test/levene.rb +4 -8
- data/lib/statsample/test/t.rb +30 -24
- data/lib/statsample/test/umannwhitney.rb +13 -6
- data/lib/statsample/vector.rb +86 -76
- data/po/es/statsample.mo +0 -0
- data/po/es/statsample.po +127 -94
- data/po/statsample.pot +114 -79
- data/test/test_anovaoneway.rb +27 -0
- data/test/test_anovawithvectors.rb +97 -0
- data/test/test_bivariate.rb +6 -57
- data/test/test_bivariate_polychoric.rb +65 -0
- data/test/test_crosstab.rb +6 -0
- data/test/test_dataset.rb +29 -1
- data/test/test_distribution.rb +6 -13
- data/test/test_dominance_analysis.rb +1 -1
- data/test/test_factor.rb +3 -3
- data/test/test_helpers.rb +18 -18
- data/test/test_matrix.rb +33 -20
- data/test/test_permutation.rb +36 -30
- data/test/test_regression.rb +26 -8
- data/test/test_reliability.rb +104 -14
- data/test/test_test_f.rb +11 -14
- data/test/test_test_t.rb +42 -35
- data/test/test_umannwhitney.rb +22 -10
- data/test/test_vector.rb +204 -102
- metadata +57 -81
- metadata.gz.sig +0 -0
- 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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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=
|
39
|
-
b=
|
40
|
-
c=
|
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
|
data/test/test_permutation.rb
CHANGED
@@ -2,35 +2,41 @@ require(File.dirname(__FILE__)+'/test_helpers.rb')
|
|
2
2
|
|
3
3
|
|
4
4
|
class StatsamplePermutationTestCase < MiniTest::Unit::TestCase
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
data/test/test_regression.rb
CHANGED
@@ -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=
|
23
|
-
b=
|
24
|
-
y=
|
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
|
data/test/test_reliability.rb
CHANGED
@@ -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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
@
|
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(
|
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(
|
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
|
-
|
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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|