diverge 1.4 → 1.5

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