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
@@ -2,15 +2,27 @@ require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
 
4
4
  class StatsampleUMannWhitneyTestCase < MiniTest::Unit::TestCase
5
- def test_u_mannwhitney
6
- v1=[1,2,3,4,7,8,9,10,14,15].to_scale
7
- v2=[5,6,11,12,13,16,17,18,19].to_scale
8
- u=Statsample::Test::UMannWhitney.new(v1,v2)
9
- assert_equal(73,u.r1)
10
- assert_equal(117,u.r2)
11
- assert_equal(18,u.u)
12
- assert_in_delta(-2.205,u.z,0.001)
13
- assert_in_delta(0.027,u.z_probability,0.001)
14
- assert_in_delta(0.028,u.exact_probability,0.001)
5
+ include Statsample::Test
6
+ context Statsample::Test::UMannWhitney do
7
+ setup do
8
+ @v1=[1,2,3,4,7,8,9,10,14,15].to_scale
9
+ @v2=[5,6,11,12,13,16,17,18,19].to_scale
10
+ @u=Statsample::Test::UMannWhitney.new(@v1,@v2)
11
+ end
12
+ should "have same result using class or Test#u_mannwhitney" do
13
+ assert_equal(Statsample::Test.u_mannwhitney(@v1,@v2).u, @u.u)
14
+ end
15
+ should "have correct U values" do
16
+ assert_equal(73,@u.r1)
17
+ assert_equal(117,@u.r2)
18
+ assert_equal(18,@u.u)
19
+ end
20
+ should "have correct value for z" do
21
+ assert_in_delta(-2.205,@u.z,0.001)
22
+ end
23
+ should "have correct value for z and exact probability" do
24
+ assert_in_delta(0.027,@u.probability_z,0.001)
25
+ assert_in_delta(0.028,@u.probability_exact,0.001)
26
+ end
15
27
  end
16
28
  end
data/test/test_vector.rb CHANGED
@@ -1,113 +1,222 @@
1
1
  require(File.dirname(__FILE__)+'/test_helpers.rb')
2
2
 
3
3
  class StatsampleTestVector < MiniTest::Unit::TestCase
4
-
5
4
  def setup
6
5
  @c = Statsample::Vector.new([5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99], :nominal)
6
+ @c.name="Test Vector"
7
7
  @c.missing_values=[-99]
8
-
9
- end
10
- def test_save_load
11
- outfile=Tempfile.new("vector.vec")
12
- @c.save(outfile.path)
13
- a=Statsample.load(outfile.path)
14
- assert_equal(@c,a)
15
-
16
- end
17
- def test_lazy_methods
18
- data=[1,2,3,4,5,nil]
19
- correct=Statsample::Vector.new(data,:scale)
20
- lazy1=data.to_vector(:scale)
21
- lazy2=data.to_scale
22
- assert_equal(correct,lazy1)
23
- assert_equal(correct,lazy2)
24
- assert_equal(:scale,lazy2.type)
25
- assert_equal([1,2,3,4,5],lazy2.valid_data)
26
8
  end
27
- def test_enumerable
28
- val=@c.collect {|v| v}
29
- assert_equal(val,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
30
- end
31
- def test_recode
32
- a=@c.recode{|v| @c.is_valid?(v) ? 0 : 1 }
33
- exp=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1].to_vector
34
- assert_equal(exp,a)
35
- exp.recode!{|v| v==0 ? 1:0}
36
- exp2=(([1]*15)+([0]*3)).to_vector
37
- assert_equal(exp2,exp)
38
- end
39
- def test_product
40
- a=[1,2,3,4,5].to_vector(:scale)
41
- assert_equal(120,a.product)
9
+ def assert_counting_tokens(b)
10
+ assert_equal([1,1,0,1,0,nil],b['a'].to_a)
11
+ assert_equal([0,1,0,0,0,nil],b['b'].to_a)
12
+ assert_equal([0,0,1,0,0,nil],b['c'].to_a)
13
+ assert_equal([0,0,1,1,0,nil],b['d'].to_a)
14
+ assert_equal([0,0,0,0,1,nil],b[10].to_a)
42
15
  end
43
- def test_matrix
44
- a=[1,2,3,4,5].to_vector(:scale)
45
- mh=Matrix[[1,2,3,4,5]]
46
- mv=Matrix.columns([[1,2,3,4,5]])
47
- assert_equal(mh,a.to_matrix)
48
- assert_equal(mv,a.to_matrix(:vertical))
49
- # 3*4 + 2*5 = 22
50
- a=[3,2].to_vector(:scale)
51
- b=[4,5].to_vector(:scale)
52
- assert_equal(22,(a.to_matrix*b.to_matrix(:vertical))[0,0])
16
+ context Statsample do
17
+ setup do
18
+ @sample=100
19
+ @a=@sample.times.map{|i| (i+rand(10)) %10 ==0 ? nil : rand(100)}.to_scale
20
+ @b=@sample.times.map{|i| (i+rand(10)) %10 ==0 ? nil : rand(100)}.to_scale
21
+ @correct_a=Array.new
22
+ @correct_b=Array.new
23
+ @a.each_with_index do |v,i|
24
+ if !@a[i].nil? and !@b[i].nil?
25
+ @correct_a.push(@a[i])
26
+ @correct_b.push(@b[i])
27
+ end
28
+ end
29
+ @correct_a=@correct_a.to_scale
30
+ @correct_b=@correct_b.to_scale
31
+
32
+ @common=lambda do |av,bv|
33
+ assert_equal(@correct_a,av)
34
+ assert_equal(@correct_b,bv)
35
+ assert(!av.has_missing_data?)
36
+ assert(!bv.has_missing_data?)
37
+ end
38
+ end
39
+ should "return correct only_valid" do
40
+ av,bv=Statsample.only_valid @a,@b
41
+ av2,bv2=Statsample.only_valid av,bv
42
+ @common.call(av,bv)
43
+ assert_equal(av,av2)
44
+ assert_not_same(av,av2)
45
+ assert_not_same(bv,bv2)
46
+ end
47
+ should "return correct only_valid_clone" do
48
+ av,bv=Statsample.only_valid_clone @a,@b
49
+ @common.call(av,bv)
50
+ av2,bv2=Statsample.only_valid_clone av,bv
51
+ assert_equal(av,av2)
52
+ assert_same(av,av2)
53
+ assert_same(bv,bv2)
54
+ end
55
+
53
56
  end
54
- def test_missing_values
55
- @c.missing_values=[10]
56
- assert_equal([-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9], @c.valid_data.sort)
57
- assert_equal([5,5,5,5,5,6,6,7,8,9,nil,1,2,3,4,nil,-99,-99], @c.data_with_nils)
58
- @c.missing_values=[-99]
59
- assert_equal(@c.valid_data.sort,[1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
60
- assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,nil,nil])
61
- @c.missing_values=[]
62
- assert_equal(@c.valid_data.sort,[-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
63
- assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
57
+ context Statsample::Vector do
58
+ setup do
59
+ @c = Statsample::Vector.new([5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99], :nominal)
60
+ @c.name="Test Vector"
61
+ @c.missing_values=[-99]
62
+ end
63
+ context "using matrix operations" do
64
+ setup do
65
+ @a=[1,2,3,4,5].to_scale
66
+ end
67
+ should "to_matrix returns a matrix with 1 row" do
68
+ mh=Matrix[[1,2,3,4,5]]
69
+ assert_equal(mh,@a.to_matrix)
70
+ end
71
+ should "to_matrix(:vertical) returns a matrix with 1 column" do
72
+ mv=Matrix.columns([[1,2,3,4,5]])
73
+ assert_equal(mv,@a.to_matrix(:vertical))
74
+ end
75
+ should "returns valid submatrixes" do
76
+ # 3*4 + 2*5 = 22
77
+ a=[3,2].to_vector(:scale)
78
+ b=[4,5].to_vector(:scale)
79
+ assert_equal(22,(a.to_matrix*b.to_matrix(:vertical))[0,0])
80
+ end
81
+ end
82
+ context "when initializing" do
83
+ setup do
84
+ @data=(10.times.map{rand(100)})+[nil]
85
+ @original=Statsample::Vector.new(@data, :scale)
86
+ end
87
+ should "be the same usign #to_vector" do
88
+ lazy1=@data.to_vector(:scale)
89
+ assert_equal(@original,lazy1)
90
+ end
91
+ should "be the same using #to_scale" do
92
+ lazy2=@data.to_scale
93
+ assert_equal(@original,lazy2)
94
+ assert_equal(:scale,lazy2.type)
95
+ assert_equal(@data.find_all{|v| !v.nil?},lazy2.valid_data)
96
+ end
97
+ end
98
+
99
+ context "#split_by_separator" do
100
+
101
+ setup do
102
+ @a = Statsample::Vector.new(["a","a,b","c,d","a,d",10,nil],:nominal)
103
+ @b=@a.split_by_separator(",")
104
+ end
105
+ should "returns a Hash" do
106
+ assert_kind_of(Hash, @b)
107
+ end
108
+ should "return a Hash with keys with different values of @a" do
109
+ expected=['a','b','c','d',10]
110
+ assert_equal(expected, @b.keys)
111
+ end
112
+
113
+ should "returns a Hash, which values are Statsample::Vector" do
114
+ @b.each_key {|k| assert_instance_of(Statsample::Vector, @b[k])}
115
+ end
116
+ should "hash values are n times the tokens appears" do
117
+ assert_counting_tokens(@b)
118
+ end
119
+ should "#split_by_separator_freq returns the number of ocurrences of tokens" do
120
+ assert_equal({'a'=>3,'b'=>1,'c'=>1,'d'=>2,10=>1}, @a.split_by_separator_freq())
121
+ end
122
+ should "using a different separator give the same values" do
123
+ a = Statsample::Vector.new(["a","a*b","c*d","a*d",10,nil],:nominal)
124
+ b=a.split_by_separator("*")
125
+ assert_counting_tokens(b)
126
+ end
127
+ end
64
128
 
65
- end
66
- def test_has_missing_data
67
- a=[1,2,3,nil].to_vector
68
- assert(a.has_missing_data?)
69
- a=[1,2,3,4,10].to_vector
70
- assert(!a.has_missing_data?)
71
- a.missing_values=[10]
72
- assert(a.has_missing_data?)
73
- end
74
- def test_labeled
75
- @c.labels={5=>'FIVE'}
76
- assert_equal(["FIVE","FIVE","FIVE","FIVE","FIVE",6,6,7,8,9,10,1,2,3,4,nil,-99, -99],@c.vector_labeled.to_a)
129
+
130
+ should "have a name" do
131
+ @c.name=="Test Vector"
132
+ end
133
+ should "without explicit name, returns vector with succesive numbers" do
134
+ a=10.times.map{rand(100)}.to_scale
135
+ b=10.times.map{rand(100)}.to_scale
136
+ assert_match(/Vector \d+/, a.name)
137
+ a.name=~/Vector (\d+)/
138
+ next_number=$1.to_i+1
139
+ assert_equal("Vector #{next_number}",b.name)
140
+ end
141
+ should "save to a file and load the same Vector" do
142
+ outfile=Tempfile.new("vector.vec")
143
+ @c.save(outfile.path)
144
+ a=Statsample.load(outfile.path)
145
+ assert_equal(@c,a)
146
+ end
147
+ should "#collect returns an array" do
148
+ val=@c.collect {|v| v}
149
+ assert_equal(val,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
150
+ end
151
+
152
+ should "#recode returns a recoded array" do
153
+ a=@c.recode{|v| @c.is_valid?(v) ? 0 : 1 }
154
+ exp=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1].to_vector
155
+ assert_equal(exp,a)
156
+ exp.recode!{|v| v==0 ? 1:0}
157
+ exp2=(([1]*15)+([0]*3)).to_vector
158
+ assert_equal(exp2,exp)
159
+ end
160
+ should "#product returns the * of all values" do
161
+ a=[1,2,3,4,5].to_vector(:scale)
162
+ assert_equal(120,a.product)
163
+ end
164
+
165
+ should "missing values" do
166
+ @c.missing_values=[10]
167
+ assert_equal([-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9], @c.valid_data.sort)
168
+ assert_equal([5,5,5,5,5,6,6,7,8,9,nil,1,2,3,4,nil,-99,-99], @c.data_with_nils)
169
+ @c.missing_values=[-99]
170
+ assert_equal(@c.valid_data.sort,[1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
171
+ assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,nil,nil])
172
+ @c.missing_values=[]
173
+ assert_equal(@c.valid_data.sort,[-99,-99,1,2,3,4,5,5,5,5,5,6,6,7,8,9,10])
174
+ assert_equal(@c.data_with_nils,[5,5,5,5,5,6,6,7,8,9,10,1,2,3,4,nil,-99,-99])
175
+
176
+ end
177
+ should "correct has_missing_data? with missing data" do
178
+ a=[1,2,3,nil].to_vector
179
+ assert(a.has_missing_data?)
180
+ end
181
+ should "correct has_missing_data? without missing data" do
182
+ a=[1,2,3,4,10].to_vector
183
+ assert(!a.has_missing_data?)
184
+ end
185
+ should "with explicit missing_values, should respond has_missing_data?" do
186
+ a=[1,2,3,4,10].to_vector
187
+ a.missing_values=[10]
188
+ assert(a.has_missing_data?)
189
+ end
190
+ should "label correctly fields" do
191
+ @c.labels={5=>'FIVE'}
192
+ assert_equal(["FIVE","FIVE","FIVE","FIVE","FIVE",6,6,7,8,9,10,1,2,3,4,nil,-99, -99],@c.vector_labeled.to_a)
193
+ end
194
+ should "verify" do
195
+ h=@c.verify{|d| !d.nil? and d>0}
196
+ e={15=>nil,16=>-99,17=>-99}
197
+ assert_equal(e,h)
198
+ end
199
+ should "have a summary with name on it" do
200
+
201
+ assert_match(/#{@c.name}/, @c.summary)
202
+ end
203
+ should "have output dependent of #type" do
204
+ @c.type=:nominal
205
+ assert_match(/Distribution/, @c.summary())
206
+ @c.type=:ordinal
207
+ assert_match(/median/, @c.summary())
208
+ @c.type=:scale
209
+ assert_match(/mean/, @c.summary())
210
+ end
211
+
212
+
77
213
  end
78
214
  def test_split
79
215
  a = Statsample::Vector.new(["a","a,b","c,d","a,d","d",10,nil],:nominal)
80
216
  assert_equal([%w{a},%w{a b},%w{c d},%w{a d},%w{d},[10],nil], a.splitted)
81
217
  end
82
- def test_verify
83
- h=@c.verify{|d| !d.nil? and d>0}
84
- e={15=>nil,16=>-99,17=>-99}
85
- assert_equal(e,h)
86
- end
87
- def test_split_by_separator
88
- a = Statsample::Vector.new(["a","a,b","c,d","a,d",10,nil],:nominal)
89
- b=a.split_by_separator(",")
90
- assert_kind_of(Hash, b)
91
- assert_instance_of(Statsample::Vector,b['a'])
92
- assert_instance_of(Statsample::Vector,b['b'])
93
- assert_instance_of(Statsample::Vector,b['c'])
94
- assert_instance_of(Statsample::Vector,b['d'])
95
- assert_instance_of(Statsample::Vector,b[10])
96
- assert_equal([1,1,0,1,0,nil],b['a'].to_a)
97
- assert_equal([0,1,0,0,0,nil],b['b'].to_a)
98
- assert_equal([0,0,1,0,0,nil],b['c'].to_a)
99
- assert_equal([0,0,1,1,0,nil],b['d'].to_a)
100
- assert_equal([0,0,0,0,1,nil],b[10].to_a)
101
- assert_equal({'a'=>3,'b'=>1,'c'=>1,'d'=>2,10=>1}, a.split_by_separator_freq())
102
218
 
103
- a = Statsample::Vector.new(["a","a*b","c*d","a*d",10,nil],:nominal)
104
- b=a.split_by_separator("*")
105
- assert_equal([1,1,0,1,0,nil],b['a'].to_a)
106
- assert_equal([0,1,0,0,0,nil],b['b'].to_a)
107
- assert_equal([0,0,1,0,0,nil],b['c'].to_a)
108
- assert_equal([0,0,1,1,0,nil],b['d'].to_a)
109
- assert_equal([0,0,0,0,1,nil],b[10].to_a)
110
- end
219
+
111
220
  def test_types
112
221
  @c.type=:nominal
113
222
  assert_raise NoMethodError do
@@ -175,14 +284,7 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
175
284
  assert_equal(0,vs.mean)
176
285
  assert_equal(1,vs.sds)
177
286
  end
178
- def test_summary
179
- @c.type=:nominal
180
- assert_match(/Distribution/, @c.summary())
181
- @c.type=:ordinal
182
- assert_match(/median/, @c.summary())
183
- @c.type=:scale
184
- assert_match(/mean/, @c.summary())
185
- end
287
+
186
288
  def test_add
187
289
  a=Statsample::Vector.new([1,2,3,4,5], :scale)
188
290
  b=Statsample::Vector.new([11,12,13,14,15], :scale)
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statsample
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 9
8
- - 0
9
- version: 0.9.0
4
+ version: 0.10.0
10
5
  platform: ruby
11
6
  authors:
12
7
  - Claudio Bustos
@@ -35,129 +30,103 @@ cert_chain:
35
30
  rpP0jjs0
36
31
  -----END CERTIFICATE-----
37
32
 
38
- date: 2010-04-04 00:00:00 -04:00
33
+ date: 2010-04-15 00:00:00 -04:00
39
34
  default_executable:
40
35
  dependencies:
41
36
  - !ruby/object:Gem::Dependency
42
37
  name: spreadsheet
43
- prerelease: false
44
- requirement: &id001 !ruby/object:Gem::Requirement
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
45
41
  requirements:
46
42
  - - ~>
47
43
  - !ruby/object:Gem::Version
48
- segments:
49
- - 0
50
- - 6
51
- - 0
52
44
  version: 0.6.0
53
- type: :runtime
54
- version_requirements: *id001
45
+ version:
55
46
  - !ruby/object:Gem::Dependency
56
47
  name: svg-graph
57
- prerelease: false
58
- requirement: &id002 !ruby/object:Gem::Requirement
48
+ type: :runtime
49
+ version_requirement:
50
+ version_requirements: !ruby/object:Gem::Requirement
59
51
  requirements:
60
52
  - - ~>
61
53
  - !ruby/object:Gem::Version
62
- segments:
63
- - 1
64
- - 0
65
54
  version: "1.0"
66
- type: :runtime
67
- version_requirements: *id002
55
+ version:
68
56
  - !ruby/object:Gem::Dependency
69
57
  name: reportbuilder
70
- prerelease: false
71
- requirement: &id003 !ruby/object:Gem::Requirement
58
+ type: :runtime
59
+ version_requirement:
60
+ version_requirements: !ruby/object:Gem::Requirement
72
61
  requirements:
73
62
  - - ~>
74
63
  - !ruby/object:Gem::Version
75
- segments:
76
- - 1
77
- - 0
78
64
  version: "1.0"
79
- type: :runtime
80
- version_requirements: *id003
65
+ version:
81
66
  - !ruby/object:Gem::Dependency
82
67
  name: minimization
83
- prerelease: false
84
- requirement: &id004 !ruby/object:Gem::Requirement
68
+ type: :runtime
69
+ version_requirement:
70
+ version_requirements: !ruby/object:Gem::Requirement
85
71
  requirements:
86
72
  - - ~>
87
73
  - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- - 1
91
- - 0
92
- version: 0.1.0
93
- type: :runtime
94
- version_requirements: *id004
74
+ version: 0.2.0
75
+ version:
95
76
  - !ruby/object:Gem::Dependency
96
77
  name: fastercsv
97
- prerelease: false
98
- requirement: &id005 !ruby/object:Gem::Requirement
78
+ type: :runtime
79
+ version_requirement:
80
+ version_requirements: !ruby/object:Gem::Requirement
99
81
  requirements:
100
82
  - - ">="
101
83
  - !ruby/object:Gem::Version
102
- segments:
103
- - 0
104
84
  version: "0"
105
- type: :runtime
106
- version_requirements: *id005
85
+ version:
107
86
  - !ruby/object:Gem::Dependency
108
87
  name: dirty-memoize
109
- prerelease: false
110
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ type: :runtime
89
+ version_requirement:
90
+ version_requirements: !ruby/object:Gem::Requirement
111
91
  requirements:
112
92
  - - ~>
113
93
  - !ruby/object:Gem::Version
114
- segments:
115
- - 0
116
- - 0
117
94
  version: "0.0"
118
- type: :runtime
119
- version_requirements: *id006
95
+ version:
120
96
  - !ruby/object:Gem::Dependency
121
97
  name: rubyforge
122
- prerelease: false
123
- requirement: &id007 !ruby/object:Gem::Requirement
98
+ type: :development
99
+ version_requirement:
100
+ version_requirements: !ruby/object:Gem::Requirement
124
101
  requirements:
125
102
  - - ">="
126
103
  - !ruby/object:Gem::Version
127
- segments:
128
- - 2
129
- - 0
130
- - 4
131
104
  version: 2.0.4
132
- type: :development
133
- version_requirements: *id007
105
+ version:
134
106
  - !ruby/object:Gem::Dependency
135
107
  name: hoe
136
- prerelease: false
137
- requirement: &id008 !ruby/object:Gem::Requirement
108
+ type: :development
109
+ version_requirement:
110
+ version_requirements: !ruby/object:Gem::Requirement
138
111
  requirements:
139
112
  - - ">="
140
113
  - !ruby/object:Gem::Version
141
- segments:
142
- - 2
143
- - 6
144
- - 0
145
114
  version: 2.6.0
146
- type: :development
147
- version_requirements: *id008
115
+ version:
148
116
  description: |-
149
- A suite for basic and advanced statistics on Ruby. Tested on Ruby 1.8.7, 1.9.1, 1.9.2 (April, 2010) and JRuby 1.4 (Ruby 1.8.7 compatible)
117
+ A suite for basic and advanced statistics on Ruby. Tested on Ruby 1.8.7, 1.9.1, 1.9.2 (April, 2010) and JRuby 1.4 (Ruby 1.8.7 compatible).
150
118
 
151
- Includes:
119
+ Include:
152
120
  * Descriptive statistics: frequencies, median, mean, standard error, skew, kurtosis (and many others).
153
121
  * Imports and exports datasets from and to Excel, CSV and plain text files.
154
- * Correlations: Pearson's r, Spearman's rank correlation (rho), Tetrachoric, Polychoric
155
- * Tests: F (Anona One-Way), T, Levene, U-Mannwhitney.
156
- * Regression: Simple, Multiple, Probit and Logit
157
- * Factorial Analysis: Extraction (PCA and Principal Axis) and Rotation (Varimax and relatives)
122
+ * Correlations: Pearson's r, Spearman's rank correlation (rho), Tetrachoric, Polychoric.
123
+ * Anova: generic and vector-based One-way ANOVA
124
+ * Tests: F, T, Levene, U-Mannwhitney.
125
+ * Regression: Simple, Multiple (OLS), Probit and Logit
126
+ * Factorial Analysis: Extraction (PCA and Principal Axis), Rotation (Varimax, Equimax, Quartimax) and Parallel Analysis, for estimation of number of factors.
158
127
  * Dominance Analysis, with multivariate dependent and bootstrap (Azen & Budescu)
159
128
  * Sample calculation related formulas
160
- * Creates reports on text, html and rtf, using ReportBuilder
129
+ * Creates reports on text, html and rtf, using ReportBuilder gem
161
130
  email:
162
131
  - clbustos@gmail.com
163
132
  executables:
@@ -183,15 +152,19 @@ files:
183
152
  - data/tetmat_matrix.txt
184
153
  - data/tetmat_test.txt
185
154
  - examples/correlation_matrix.rb
155
+ - examples/dataset.rb
186
156
  - examples/dominance_analysis.rb
187
157
  - examples/dominance_analysis_bootstrap.rb
188
158
  - examples/levene.rb
189
159
  - examples/multiple_regression.rb
190
160
  - examples/multivariate_correlation.rb
161
+ - examples/parallel_analysis.rb
162
+ - examples/parallel_analysis_tetrachoric.rb
191
163
  - examples/polychoric.rb
192
164
  - examples/principal_axis.rb
193
165
  - examples/t_test.rb
194
166
  - examples/tetrachoric.rb
167
+ - examples/vector.rb
195
168
  - lib/distribution.rb
196
169
  - lib/distribution/chisquare.rb
197
170
  - lib/distribution/f.rb
@@ -215,6 +188,7 @@ files:
215
188
  - lib/statsample/dominanceanalysis.rb
216
189
  - lib/statsample/dominanceanalysis/bootstrap.rb
217
190
  - lib/statsample/factor.rb
191
+ - lib/statsample/factor/parallelanalysis.rb
218
192
  - lib/statsample/factor/pca.rb
219
193
  - lib/statsample/factor/principalaxis.rb
220
194
  - lib/statsample/factor/rotation.rb
@@ -256,8 +230,10 @@ files:
256
230
  - po/es/statsample.po
257
231
  - po/statsample.pot
258
232
  - setup.rb
259
- - test/test_anova.rb
233
+ - test/test_anovaoneway.rb
234
+ - test/test_anovawithvectors.rb
260
235
  - test/test_bivariate.rb
236
+ - test/test_bivariate_polychoric.rb
261
237
  - test/test_codification.rb
262
238
  - test/test_combination.rb
263
239
  - test/test_crosstab.rb
@@ -304,20 +280,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
304
280
  requirements:
305
281
  - - ">="
306
282
  - !ruby/object:Gem::Version
307
- segments:
308
- - 0
309
283
  version: "0"
284
+ version:
310
285
  required_rubygems_version: !ruby/object:Gem::Requirement
311
286
  requirements:
312
287
  - - ">="
313
288
  - !ruby/object:Gem::Version
314
- segments:
315
- - 0
316
289
  version: "0"
290
+ version:
317
291
  requirements: []
318
292
 
319
293
  rubyforge_project: ruby-statsample
320
- rubygems_version: 1.3.6
294
+ rubygems_version: 1.3.5
321
295
  signing_key:
322
296
  specification_version: 3
323
297
  summary: A suite for basic and advanced statistics on Ruby
@@ -325,11 +299,11 @@ test_files:
325
299
  - test/test_bivariate.rb
326
300
  - test/test_dominance_analysis.rb
327
301
  - test/test_factor.rb
328
- - test/test_anova.rb
329
302
  - test/test_permutation.rb
330
303
  - test/test_codification.rb
331
304
  - test/test_umannwhitney.rb
332
305
  - test/test_helpers.rb
306
+ - test/test_anovawithvectors.rb
333
307
  - test/test_crosstab.rb
334
308
  - test/test_distribution.rb
335
309
  - test/test_svg_graph.rb
@@ -339,6 +313,7 @@ test_files:
339
313
  - test/test_combination.rb
340
314
  - test/test_mle.rb
341
315
  - test/test_resample.rb
316
+ - test/test_bivariate_polychoric.rb
342
317
  - test/test_stratified.rb
343
318
  - test/test_vector.rb
344
319
  - test/test_srs.rb
@@ -354,3 +329,4 @@ test_files:
354
329
  - test/test_dataset.rb
355
330
  - test/test_regression.rb
356
331
  - test/test_multiset.rb
332
+ - test/test_anovaoneway.rb