diverge 1.4 → 1.5

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/diverge.rb +17 -17
  3. metadata +6 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3c6dfef4a14c085ab041478e61c5105726ad5ef
4
- data.tar.gz: cf3a2fb9db9b13a332809bca504ec5b66064902f
3
+ metadata.gz: ba2b6cc8caffede3c5d2f8ab9638623c066d454e
4
+ data.tar.gz: c5cbf22b8fdbb2b4db61b5fc971c01b7e3df70e8
5
5
  SHA512:
6
- metadata.gz: 19f099057566ce796d8b90553efad207402ea8c4ec6cd88abed6b87970108de5c33697d09926c1958afcc515cf9fb292f178db67a88b5ad7b79d385b8addf552
7
- data.tar.gz: 653f177767f13a8bdd28b1663d6be09fdc36fdb8c4cf3d89d2dd720ad3ed967798bf0de2e4cd26ad9b6868dbb2cf8e6e23c87ccb17f4e5d1bf5fc652aee0115c
6
+ metadata.gz: 906006fe28fc85baa620c23f191b9e1da02118d249a00afa5ed938addb5488b86d213cea215c98b3036b6ed68863aedfe2363ce8000af8611d4b0857d39be6c0
7
+ data.tar.gz: 9230cde1bd5d72ac864c31a7a09e30deb50b8a28acff4e98febad6d8d7ffca9bd03969b2671a3c084a8acb74503c412c8755e170b5b73d82a3126577fcc3d684
data/lib/diverge.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "gsl"
2
-
3
1
  class Diverge
4
2
  class << self
5
3
  attr_accessor :debug, :method_names
@@ -62,17 +60,19 @@ class Diverge
62
60
  alias :tvd :total_variation_distance
63
61
 
64
62
  def correlation
65
- GSL::Stats::correlation(GSL::Vector.alloc(p), GSL::Vector.alloc(q))
63
+ square = ->(x) { x ** 2 }
64
+ top = size * p.zip(q).map { |x, y| x * y }.inject(&:+) - p.inject(&:+) * q.inject(&:+)
65
+ bottom = Math.sqrt((size * p.map(&square).inject(&:+) - p.inject(&:+) ** 2) * (size * q.map(&square).inject(&:+) - q.inject(&:+) ** 2))
66
+
67
+ bottom.zero? ? 0 : top / bottom
66
68
  end
67
69
 
68
70
  alias :corr :correlation
69
71
 
70
72
  def spearman_correlation
71
- p_ranks = list_ranks(p)
72
- q_ranks = list_ranks(q)
73
- d_squared = p.zip(q).map { |x, y| (p_ranks[x] - q_ranks[y]) ** 2 }
73
+ sum_d_squared = list_ranks(p).zip(list_ranks(q)).inject(0.0) { |sum, (p_data, q_data)| sum + (p_data.rank_order - q_data.rank_order) ** 2 }
74
74
 
75
- 1 - ((6 * d_squared.inject(&:+)) / (size * (size ** 2 - 1)))
75
+ 1 - ((6 * sum_d_squared) / (size * (size ** 2 - 1)))
76
76
  end
77
77
 
78
78
  alias :s_corr :spearman_correlation
@@ -94,16 +94,16 @@ class Diverge
94
94
  private
95
95
 
96
96
  def list_ranks(list)
97
- uniq_list = list.sort.uniq
98
- Hash[*
99
- list.
100
- sort.
101
- each_with_index.
102
- group_by { |x, i| x }.
103
- values.
104
- map { |a| a.map(&:first).zip([a.map(&:last).avg + 1] * a.length).uniq }.
105
- flatten
106
- ]
97
+ element = Struct.new(:value, :order, :rank_order)
98
+ list.
99
+ each_with_index.
100
+ map { |x, i| element.new(x, i, nil) }.
101
+ sort_by(&:value).
102
+ each_with_index.
103
+ group_by { |e, i| e.value }.
104
+ values.
105
+ inject([]) { |memo, a| memo + a.map(&:first).map { |e| e.tap { e.rank_order = a.map(&:last).avg + 1 } } }.
106
+ sort_by(&:order)
107
107
  end
108
108
 
109
109
  def size
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diverge
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.4'
4
+ version: '1.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Senter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-04 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: gsl
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: 1.14.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: 1.14.0
11
+ date: 2013-10-11 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: A simple collection of functions for determining the divergence between
28
14
  two distributions.
29
15
  email: evansenter@gmail.com
@@ -43,17 +29,17 @@ require_paths:
43
29
  - lib
44
30
  required_ruby_version: !ruby/object:Gem::Requirement
45
31
  requirements:
46
- - - '>='
32
+ - - ">="
47
33
  - !ruby/object:Gem::Version
48
34
  version: '0'
49
35
  required_rubygems_version: !ruby/object:Gem::Requirement
50
36
  requirements:
51
- - - '>='
37
+ - - ">="
52
38
  - !ruby/object:Gem::Version
53
39
  version: '0'
54
40
  requirements: []
55
41
  rubyforge_project:
56
- rubygems_version: 2.0.6
42
+ rubygems_version: 2.1.5
57
43
  signing_key:
58
44
  specification_version: 4
59
45
  summary: Distribution divergences.