statsample 0.15.1 → 0.16.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.
@@ -1,22 +1,22 @@
1
- require 'extendmatrix'
2
-
3
-
4
1
  class ::Matrix
5
2
  def to_matrix
6
3
  self
7
4
  end
8
- alias :eigenpairs_ruby :eigenpairs
5
+ if defined? :eigenpairs
6
+ alias_method :eigenpairs_ruby, :eigenpairs
7
+ end
9
8
 
10
9
  if Statsample.has_gsl?
11
10
  # Optimize eigenpairs of extendmatrix module using gsl
12
11
  def eigenpairs
13
12
  eigval, eigvec= GSL::Eigen.symmv(self.to_gsl)
14
13
  ep=eigval.size.times.map {|i|
15
- [eigval[i], eigvec.get_col(i)]
14
+ [eigval[i], eigvec.get_col(i).to_a]
16
15
  }
17
16
  ep.sort{|a,b| a[0]<=>b[0]}.reverse
18
17
  end
19
18
  end
19
+
20
20
  def eigenvalues
21
21
  eigen[:eigenvalues]
22
22
  end
@@ -57,9 +57,9 @@ module Statsample
57
57
  # x: Matrix (NxM)
58
58
  # y: Matrix (Nx1)
59
59
  # p: Matrix (Mx1)
60
- def second_derivative(x,y,p)
60
+ def second_derivative(x,y,p2)
61
61
  raise "x.rows!=y.rows" if x.row_size!=y.row_size
62
- raise "x.columns!=p.rows" if x.column_size!=p.row_size
62
+ raise "x.columns!=p.rows" if x.column_size!=p2.row_size
63
63
  n = x.row_size
64
64
  k = x.column_size
65
65
  sd = Array.new(k)
@@ -70,15 +70,16 @@ module Statsample
70
70
  end
71
71
  n.times do |i|
72
72
  row = x.row(i).to_a
73
- p_m = p_minus(row,p)
73
+ p_m = p_minus(row,p2)
74
74
  k.times do |j|
75
75
  k.times do |l|
76
- sd[j][l] -= p_m *(1-p_m)*row[j]*row[l]
76
+ sd[j][l] -= (p_m*(1-p_m)*row[j]*row[l])
77
77
  end
78
78
  end
79
79
  end
80
80
  Matrix.rows(sd, true)
81
81
  end
82
+
82
83
  private
83
84
  def p_minus(x_row,p)
84
85
  value = 0.0;
@@ -3,7 +3,10 @@ module Statsample
3
3
  # but with different number of cases.
4
4
  # This is the base class for stratified and cluster sampling estimation
5
5
  class Multiset
6
- attr_reader :fields, :datasets
6
+ # Name of fields
7
+ attr_reader :fields
8
+ # Array with Statsample::Dataset
9
+ attr_reader :datasets
7
10
  # To create a multiset
8
11
  # * Multiset.new(%w{f1 f2 f3}) # define only fields
9
12
  def initialize(fields)
@@ -783,8 +783,15 @@ module Statsample
783
783
  check_type :scale
784
784
  Math::sqrt( variance_population(m) )
785
785
  end
786
+
787
+ # Population average deviation (denominator N)
788
+ def average_deviation_population( m = nil )
789
+ check_type :scale
790
+ m ||= mean
791
+ ( @scale_data.inject( 0 ) { |a, x| ( x - m ).abs + a } ).quo( n_valid )
792
+ end
793
+
786
794
  # Sample Variance (denominator n-1)
787
-
788
795
  def variance_sample(m=nil)
789
796
  check_type :scale
790
797
  m||=mean
@@ -792,7 +799,6 @@ module Statsample
792
799
  end
793
800
 
794
801
  # Sample Standard deviation (denominator n-1)
795
-
796
802
  def standard_deviation_sample(m=nil)
797
803
  check_type :scale
798
804
 
@@ -898,6 +904,7 @@ module Statsample
898
904
 
899
905
  alias_method :sdp, :standard_deviation_population
900
906
  alias_method :sds, :standard_deviation_sample
907
+ alias_method :adp, :average_deviation_population
901
908
  alias_method :cov, :coefficient_of_variation
902
909
  alias_method :variance, :variance_sample
903
910
  alias_method :sd, :standard_deviation_sample
data/references.txt CHANGED
@@ -20,3 +20,4 @@ References
20
20
  * http://stattrek.com/Lesson6/SRS.aspx
21
21
  * http://www.cut-the-knot.org/do_you_know/AllPerm.shtml
22
22
  * http://www.gnu.org/software/gsl/manual/html_node/The-histogram-struct.html
23
+ * http://www.taygeta.com/random/gaussian.html
@@ -1,4 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
2
  class StatsampleAnovaOneWayTestCase < MiniTest::Unit::TestCase
3
3
  context(Statsample::Anova::OneWay) do
4
4
  setup do
data/test/test_factor.rb CHANGED
@@ -1,4 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
2
 
3
3
  class StatsampleFactorTestCase < MiniTest::Unit::TestCase
4
4
  include Statsample::Fixtures
@@ -28,33 +28,38 @@ class StatsampleFactorTestCase < MiniTest::Unit::TestCase
28
28
  }
29
29
  end
30
30
  def test_parallelanalysis_with_data
31
- samples=100
32
- variables=10
33
- iterations=50
34
- rng = GSL::Rng.alloc()
35
- f1=samples.times.collect {rng.ugaussian()}.to_scale
36
- f2=samples.times.collect {rng.ugaussian()}.to_scale
37
- vectors={}
38
- variables.times do |i|
39
- if i<5
40
- vectors["v#{i}"]=samples.times.collect {|nv|
41
- f1[nv]*5+f2[nv]*2+rng.ugaussian()
42
- }.to_scale
43
- else
44
- vectors["v#{i}"]=samples.times.collect {|nv|
45
- f2[nv]*5+f1[nv]*2+rng.ugaussian()
46
- }.to_scale
31
+ if Statsample.has_gsl?
32
+ samples=100
33
+ variables=10
34
+ iterations=50
35
+ rng = Distribution::Normal.rng_ugaussian
36
+ f1=samples.times.collect {rng.call}.to_scale
37
+ f2=samples.times.collect {rng.call}.to_scale
38
+ vectors={}
39
+ variables.times do |i|
40
+ if i<5
41
+ vectors["v#{i}"]=samples.times.collect {|nv|
42
+ f1[nv]*5+f2[nv]*2+rng.call
43
+ }.to_scale
44
+ else
45
+ vectors["v#{i}"]=samples.times.collect {|nv|
46
+ f2[nv]*5+f1[nv]*2+rng.call
47
+ }.to_scale
48
+ end
49
+
47
50
  end
51
+ ds=vectors.to_dataset
48
52
 
53
+ pa1=Statsample::Factor::ParallelAnalysis.new(ds, :bootstrap_method=>:data, :iterations=>iterations)
54
+ pa2=Statsample::Factor::ParallelAnalysis.with_random_data(samples,variables,:iterations=>iterations,:percentil=>95)
55
+ 3.times do |n|
56
+ var="ev_0000#{n+1}"
57
+ assert_in_delta(pa1.ds_eigenvalues[var].mean,pa2.ds_eigenvalues[var].mean,0.04)
58
+ end
59
+ else
60
+ skip("Too slow without GSL")
49
61
  end
50
- ds=vectors.to_dataset
51
62
 
52
- pa1=Statsample::Factor::ParallelAnalysis.new(ds, :bootstrap_method=>:data, :iterations=>iterations)
53
- pa2=Statsample::Factor::ParallelAnalysis.with_random_data(samples,variables,:iterations=>iterations,:percentil=>95)
54
- 3.times do |n|
55
- var="ev_0000#{n+1}"
56
- assert_in_delta(pa1.ds_eigenvalues[var].mean,pa2.ds_eigenvalues[var].mean,0.04)
57
- end
58
63
  end
59
64
  def test_parallelanalysis
60
65
  pa=Statsample::Factor::ParallelAnalysis.with_random_data(305,8,:iterations=>100,:percentil=>95)
@@ -128,8 +128,6 @@ class StatsampleReliabilityIccTestCase < MiniTest::Unit::TestCase
128
128
  d=a.recode{|i|i+rand(4)-2}
129
129
  @ds={'a'=>a,'b'=>b,'c'=>c,'d'=>d}.to_dataset
130
130
 
131
-
132
-
133
131
  @icc=Statsample::Reliability::ICC.new(@ds)
134
132
  @r=Rserve::Connection.new
135
133
  @r.assign('ds',@ds)
data/test/test_vector.rb CHANGED
@@ -326,6 +326,10 @@ class StatsampleTestVector < MiniTest::Unit::TestCase
326
326
  a=[1,2,3,4,5,6].to_vector(:scale)
327
327
  assert_equal(17.5, a.sum_of_squared_deviation)
328
328
  end
329
+ def test_average_deviation
330
+ a=[1,2,3,4,5,6,7,8,9].to_scale
331
+ assert_equal(20.quo(9), a.average_deviation_population)
332
+ end
329
333
  def test_samples
330
334
  srand(1)
331
335
  assert_equal(100,@c.sample_with_replacement(100).size)
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 15
8
- - 1
9
- version: 0.15.1
7
+ - 16
8
+ - 0
9
+ version: 0.16.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Claudio Bustos
@@ -35,13 +35,14 @@ cert_chain:
35
35
  rpP0jjs0
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2010-10-20 00:00:00 -03:00
38
+ date: 2010-11-13 00:00:00 -03:00
39
39
  default_executable:
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: spreadsheet
43
43
  prerelease: false
44
44
  requirement: &id001 !ruby/object:Gem::Requirement
45
+ none: false
45
46
  requirements:
46
47
  - - ~>
47
48
  - !ruby/object:Gem::Version
@@ -53,9 +54,10 @@ dependencies:
53
54
  type: :runtime
54
55
  version_requirements: *id001
55
56
  - !ruby/object:Gem::Dependency
56
- name: svg-graph
57
+ name: reportbuilder
57
58
  prerelease: false
58
59
  requirement: &id002 !ruby/object:Gem::Requirement
60
+ none: false
59
61
  requirements:
60
62
  - - ~>
61
63
  - !ruby/object:Gem::Version
@@ -66,89 +68,110 @@ dependencies:
66
68
  type: :runtime
67
69
  version_requirements: *id002
68
70
  - !ruby/object:Gem::Dependency
69
- name: reportbuilder
71
+ name: minimization
70
72
  prerelease: false
71
73
  requirement: &id003 !ruby/object:Gem::Requirement
74
+ none: false
72
75
  requirements:
73
76
  - - ~>
74
77
  - !ruby/object:Gem::Version
75
78
  segments:
76
- - 1
77
79
  - 0
78
- version: "1.0"
80
+ - 2
81
+ - 0
82
+ version: 0.2.0
79
83
  type: :runtime
80
84
  version_requirements: *id003
81
85
  - !ruby/object:Gem::Dependency
82
- name: minimization
86
+ name: fastercsv
83
87
  prerelease: false
84
88
  requirement: &id004 !ruby/object:Gem::Requirement
89
+ none: false
85
90
  requirements:
86
- - - ~>
91
+ - - ">="
87
92
  - !ruby/object:Gem::Version
88
93
  segments:
89
94
  - 0
90
- - 2
91
- - 0
92
- version: 0.2.0
95
+ version: "0"
93
96
  type: :runtime
94
97
  version_requirements: *id004
95
98
  - !ruby/object:Gem::Dependency
96
- name: fastercsv
99
+ name: dirty-memoize
97
100
  prerelease: false
98
101
  requirement: &id005 !ruby/object:Gem::Requirement
102
+ none: false
99
103
  requirements:
100
- - - ">="
104
+ - - ~>
101
105
  - !ruby/object:Gem::Version
102
106
  segments:
103
107
  - 0
104
- version: "0"
108
+ - 0
109
+ version: "0.0"
105
110
  type: :runtime
106
111
  version_requirements: *id005
107
112
  - !ruby/object:Gem::Dependency
108
- name: dirty-memoize
113
+ name: extendmatrix
109
114
  prerelease: false
110
115
  requirement: &id006 !ruby/object:Gem::Requirement
116
+ none: false
111
117
  requirements:
112
118
  - - ~>
113
119
  - !ruby/object:Gem::Version
114
120
  segments:
115
121
  - 0
116
- - 0
117
- version: "0.0"
122
+ - 3
123
+ - 1
124
+ version: 0.3.1
118
125
  type: :runtime
119
126
  version_requirements: *id006
120
127
  - !ruby/object:Gem::Dependency
121
- name: extendmatrix
128
+ name: statsample-bivariate-extension
122
129
  prerelease: false
123
130
  requirement: &id007 !ruby/object:Gem::Requirement
131
+ none: false
124
132
  requirements:
125
- - - ~>
133
+ - - ">"
126
134
  - !ruby/object:Gem::Version
127
135
  segments:
128
136
  - 0
129
- - 3
130
- - 1
131
- version: 0.3.1
137
+ version: "0"
132
138
  type: :runtime
133
139
  version_requirements: *id007
134
140
  - !ruby/object:Gem::Dependency
135
- name: statsample-bivariate-extension
141
+ name: rserve-client
136
142
  prerelease: false
137
143
  requirement: &id008 !ruby/object:Gem::Requirement
144
+ none: false
138
145
  requirements:
139
146
  - - ~>
140
147
  - !ruby/object:Gem::Version
141
148
  segments:
142
149
  - 0
143
- - 13
144
- - 0
145
- version: 0.13.0
150
+ - 2
151
+ - 5
152
+ version: 0.2.5
146
153
  type: :runtime
147
154
  version_requirements: *id008
148
155
  - !ruby/object:Gem::Dependency
149
- name: rubyforge
156
+ name: rubyvis
150
157
  prerelease: false
151
158
  requirement: &id009 !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ~>
162
+ - !ruby/object:Gem::Version
163
+ segments:
164
+ - 0
165
+ - 2
166
+ - 2
167
+ version: 0.2.2
168
+ type: :runtime
169
+ version_requirements: *id009
170
+ - !ruby/object:Gem::Dependency
171
+ name: rubyforge
172
+ prerelease: false
173
+ requirement: &id010 !ruby/object:Gem::Requirement
174
+ none: false
152
175
  requirements:
153
176
  - - ">="
154
177
  - !ruby/object:Gem::Version
@@ -158,11 +181,12 @@ dependencies:
158
181
  - 4
159
182
  version: 2.0.4
160
183
  type: :development
161
- version_requirements: *id009
184
+ version_requirements: *id010
162
185
  - !ruby/object:Gem::Dependency
163
186
  name: shoulda
164
187
  prerelease: false
165
- requirement: &id010 !ruby/object:Gem::Requirement
188
+ requirement: &id011 !ruby/object:Gem::Requirement
189
+ none: false
166
190
  requirements:
167
191
  - - ">="
168
192
  - !ruby/object:Gem::Version
@@ -170,11 +194,26 @@ dependencies:
170
194
  - 0
171
195
  version: "0"
172
196
  type: :development
173
- version_requirements: *id010
197
+ version_requirements: *id011
198
+ - !ruby/object:Gem::Dependency
199
+ name: minitest
200
+ prerelease: false
201
+ requirement: &id012 !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ segments:
207
+ - 2
208
+ - 0
209
+ version: "2.0"
210
+ type: :development
211
+ version_requirements: *id012
174
212
  - !ruby/object:Gem::Dependency
175
213
  name: hoe
176
214
  prerelease: false
177
- requirement: &id011 !ruby/object:Gem::Requirement
215
+ requirement: &id013 !ruby/object:Gem::Requirement
216
+ none: false
178
217
  requirements:
179
218
  - - ">="
180
219
  - !ruby/object:Gem::Version
@@ -184,7 +223,7 @@ dependencies:
184
223
  - 2
185
224
  version: 2.6.2
186
225
  type: :development
187
- version_requirements: *id011
226
+ version_requirements: *id013
188
227
  description: |-
189
228
  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).
190
229
 
@@ -242,6 +281,7 @@ files:
242
281
  - examples/polychoric.rb
243
282
  - examples/principal_axis.rb
244
283
  - examples/reliability.rb
284
+ - examples/scatterplot.rb
245
285
  - examples/t_test.rb
246
286
  - examples/tetrachoric.rb
247
287
  - examples/u_test.rb
@@ -278,11 +318,7 @@ files:
278
318
  - lib/statsample/factor/principalaxis.rb
279
319
  - lib/statsample/factor/rotation.rb
280
320
  - lib/statsample/graph.rb
281
- - lib/statsample/graph/gdchart.rb
282
- - lib/statsample/graph/svgboxplot.rb
283
- - lib/statsample/graph/svggraph.rb
284
- - lib/statsample/graph/svghistogram.rb
285
- - lib/statsample/graph/svgscatterplot.rb
321
+ - lib/statsample/graph/scatterplot.rb
286
322
  - lib/statsample/histogram.rb
287
323
  - lib/statsample/matrix.rb
288
324
  - lib/statsample/mle.rb
@@ -356,7 +392,6 @@ files:
356
392
  - test/test_statistics.rb
357
393
  - test/test_stest.rb
358
394
  - test/test_stratified.rb
359
- - test/test_svg_graph.rb
360
395
  - test/test_test_f.rb
361
396
  - test/test_test_t.rb
362
397
  - test/test_umannwhitney.rb
@@ -392,6 +427,7 @@ rdoc_options:
392
427
  require_paths:
393
428
  - lib
394
429
  required_ruby_version: !ruby/object:Gem::Requirement
430
+ none: false
395
431
  requirements:
396
432
  - - ">="
397
433
  - !ruby/object:Gem::Version
@@ -399,6 +435,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
399
435
  - 0
400
436
  version: "0"
401
437
  required_rubygems_version: !ruby/object:Gem::Requirement
438
+ none: false
402
439
  requirements:
403
440
  - - ">="
404
441
  - !ruby/object:Gem::Version
@@ -408,7 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
408
445
  requirements: []
409
446
 
410
447
  rubyforge_project: ruby-statsample
411
- rubygems_version: 1.3.6
448
+ rubygems_version: 1.3.7
412
449
  signing_key:
413
450
  specification_version: 3
414
451
  summary: A suite for basic and advanced statistics on Ruby
@@ -423,7 +460,6 @@ test_files:
423
460
  - test/test_anovawithvectors.rb
424
461
  - test/test_crosstab.rb
425
462
  - test/test_distribution.rb
426
- - test/test_svg_graph.rb
427
463
  - test/test_rserve_extension.rb
428
464
  - test/test_csv.rb
429
465
  - test/test_matrix.rb