statsample 0.15.1 → 0.16.0

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