ruby-regress 0.0.1 → 0.1.1

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.
@@ -4,10 +4,29 @@
4
4
  `ruby-regress` is a tool for computing correlations and regression equations
5
5
  from two-variable input. It is designed to function as a drop-in replacement
6
6
  for Gary Perlman's `regress`, at least for those who use only the basic
7
- functionality that `regress` provides...
7
+ functionality that `regress` provides.
8
8
 
9
+ ## Why!?
10
+
11
+ The problem with Gary Perlman's excellent |STAT programs is twofold:
12
+
13
+ + The only way of obtaining a copy is by emailing Perlman and asking for it.
14
+ + The distribution of modified copies is [expressely forbidden](http://oldwww.acm.org/perlman/stat/history.html#conditions).
15
+
16
+ If you need bulletproof robustness you're probably better off dealing with Perlman's terms of access and using |STAT; if you want ease of installation, try `ruby-regress`.
9
17
  ## Installation
10
18
 
19
+ #### From rubygems
20
+
21
+ If you're using Gemcutter.org as a your gem host (hint: you almost certainly are) you can
22
+ install ruby-regress using rubygems:
23
+
24
+ gem install ruby-regress
25
+
26
+ which installs the `regress` executable.
27
+
28
+ #### From source
29
+
11
30
  Download the most recent source from Github:
12
31
 
13
32
  git clone git://github.com/doches/ruby-regress.git
@@ -35,4 +54,4 @@ we can get the correlation coefficient between these two variables by:
35
54
  cat data.txt | regress
36
55
 
37
56
  which will dump a load of statistical information about the datasets to
38
- the terminal.
57
+ the terminal.
data/Rakefile CHANGED
@@ -44,7 +44,7 @@ task :test => :check_dependencies
44
44
 
45
45
  task :default => :test
46
46
 
47
- require 'rake/rdoctask'
47
+ require 'rdoc/task'
48
48
  Rake::RDocTask.new do |rdoc|
49
49
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
50
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.1
@@ -19,28 +19,44 @@ require 'ruby-regress'
19
19
 
20
20
  input = []
21
21
  STDIN.each_line do |line|
22
- cols = line.strip.gsub(/#.+$/,'').split(/\s/).map { |x| x.to_f }
23
- input.push cols if cols.size == 2
22
+ cols = line.strip.gsub(/#.+$/,'').split(/\s/).map { |x| x.to_f }
23
+ input.push cols if cols.size > 0
24
24
  end
25
- a,b = *[0,1].map { |i| input.collect { |x| x[i] } }
25
+ if input[0].size == 1 # Single column, stats only
26
+ a = input.flatten
27
+ puts "Analysis for #{a.size} cases of 1 variable:"
28
+ puts "Variable A"
29
+ puts "Min#{sprintf("%18.4f",Regress.min(a))}"
30
+ puts "Max#{sprintf("%18.4f",Regress.max(a))}"
31
+ puts "Sum#{sprintf("%18.4f",Regress.sum(a))}"
32
+ puts "Mean#{sprintf("%17.4f",Regress.mean(a))}"
33
+ puts "SD#{sprintf("%19.4f",Regress.standard_deviation(a))}"
34
+ elsif input[0].size == 2 # Two column, stats + regression
35
+ a,b = *[0,1].map { |i| input.collect { |x| x[i] } }
26
36
 
27
- regress = Regress.new(a,b)
28
- puts "Analysis for #{a.size} cases of 2 variables:"
29
- puts "Variable REG A "
30
- puts "Min#{sprintf("%18.4f",Regress.min(a))}#{sprintf("%11.4f ",Regress.min(b))}"
31
- puts "Max#{sprintf("%18.4f",Regress.max(a))}#{sprintf("%11.4f ",Regress.max(b))}"
32
- puts "Sum#{sprintf("%18.4f",Regress.sum(a))}#{sprintf("%11.4f ",Regress.sum(b))}"
33
- puts "Mean#{sprintf("%17.4f",Regress.mean(a))}#{sprintf("%11.4f ",Regress.mean(b))}"
34
- puts "SD#{sprintf("%19.4f",Regress.standard_deviation(a))}#{sprintf("%11.4f ",Regress.standard_deviation(b))}"
35
- puts ""
36
- puts "Correlation Matrix:"
37
- puts "REG 1.0000 "
38
- puts "A #{sprintf("%1.4f",regress.r)} 1.0000 "
39
- puts "Variable REG A"
40
- puts ""
41
- #puts "Regression Equation for REG:"
42
- #puts "REG =#{sprintf("%3.3f",Regress.slope)} A +#{sprintf("%4.4f",Regress.intercept)}"
43
- #puts ""
44
- puts "Significance test for prediction of REG"
45
- puts " Mult-R R-Squared "
46
- puts " #{sprintf("%9.4f",regress.r)} #{sprintf("%9.4f",regress.r**2)} "
37
+ regress = Regress.new(a,b)
38
+ puts "Analysis for #{a.size} cases of 2 variables:"
39
+ puts "Variable REG A "
40
+ puts "Min#{sprintf("%18.4f",Regress.min(a))}#{sprintf("%11.4f ",Regress.min(b))}"
41
+ puts "Max#{sprintf("%18.4f",Regress.max(a))}#{sprintf("%11.4f ",Regress.max(b))}"
42
+ puts "Sum#{sprintf("%18.4f",Regress.sum(a))}#{sprintf("%11.4f ",Regress.sum(b))}"
43
+ puts "Mean#{sprintf("%17.4f",Regress.mean(a))}#{sprintf("%11.4f ",Regress.mean(b))}"
44
+ puts "SD#{sprintf("%19.4f",Regress.standard_deviation(a))}#{sprintf("%11.4f ",Regress.standard_deviation(b))}"
45
+ puts ""
46
+ puts "Correlation Matrix:"
47
+ puts "REG 1.0000 "
48
+ puts "A #{sprintf("%1.4f",regress.r)} 1.0000 "
49
+ puts "Variable REG A"
50
+ puts ""
51
+ #puts "Regression Equation for REG:"
52
+ #puts "REG =#{sprintf("%3.3f",Regress.slope)} A +#{sprintf("%4.4f",Regress.intercept)}"
53
+ #puts ""
54
+ puts "Significance test for prediction of REG"
55
+ puts " Mult-R R-Squared "
56
+ puts " #{sprintf("%9.4f",regress.r)} #{sprintf("%9.4f",regress.r**2)} "
57
+ else
58
+ STDERR.puts "> 2 column input not supported."
59
+ STDERR.puts ""
60
+ STDERR.puts "Sorry."
61
+ exit(1)
62
+ end
@@ -2,15 +2,20 @@ class Regress
2
2
  attr_reader :r, :slope, :intercept
3
3
 
4
4
  # Create a Regress object from two vectors +a+ and +b+. Note that +a+ and +b+ must be of the same length.
5
- def initialize(a,b)
6
- raise "Regress#initialize expects two vectors of equal length (given vectors of lengths #{a.size}, #{b.size})." if a.size != b.size
7
-
8
- sa,sb = *[a,b].map { |d| Regress.sum(d) }
9
- sa2,sb2 = *[a,b].map { |d| Regress.sum(Regress.square(d)) }
10
- sab = Regress.multiply(a,b)
11
- n = a.size
12
-
13
- @r = (n * sab - sa * sb) / (( (n * sa2 - sa**2) * (n * sb2 - sb**2) ) ** 0.5)
5
+ def initialize(a,b=nil)
6
+ if b.nil?
7
+ # Don't do regression if we're only given one item
8
+ else
9
+ raise "Regress#initialize expects two vectors of equal length (given vectors of lengths #{a.size}, #{b.size})." if a.size != b.size
10
+
11
+ sa,sb = *[a,b].map { |d| Regress.sum(d) }
12
+ sa2,sb2 = *[a,b].map { |d| Regress.sum(Regress.square(d)) }
13
+ sab = Regress.multiply(a,b)
14
+ n = a.size
15
+
16
+ @r = (n * sab - sa * sb) / (( (n * sa2 - sa**2) * (n * sb2 - sb**2) ) ** 0.5)
17
+ @r = 0.0 if @r.nan?
18
+ end
14
19
  end
15
20
 
16
21
  def Regress.sum(vector)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-regress
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
4
+ hash: 25
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Trevor Fountain
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-25 00:00:00 +01:00
19
- default_executable: regress
18
+ date: 2012-04-17 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: wrong
@@ -44,8 +43,6 @@ extra_rdoc_files:
44
43
  - LICENSE
45
44
  - README.mdown
46
45
  files:
47
- - .document
48
- - .gitignore
49
46
  - LICENSE
50
47
  - README.mdown
51
48
  - Rakefile
@@ -54,13 +51,12 @@ files:
54
51
  - lib/ruby-regress.rb
55
52
  - test/helper.rb
56
53
  - test/test_ruby-regress.rb
57
- has_rdoc: true
58
54
  homepage: http://github.com/doches/ruby-regress
59
55
  licenses: []
60
56
 
61
57
  post_install_message:
62
- rdoc_options:
63
- - --charset=UTF-8
58
+ rdoc_options: []
59
+
64
60
  require_paths:
65
61
  - lib
66
62
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -84,10 +80,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
80
  requirements: []
85
81
 
86
82
  rubyforge_project:
87
- rubygems_version: 1.3.7
83
+ rubygems_version: 1.8.15
88
84
  signing_key:
89
85
  specification_version: 3
90
86
  summary: CLI tool for computing correlation (Pearson's r)
91
- test_files:
92
- - test/helper.rb
93
- - test/test_ruby-regress.rb
87
+ test_files: []
88
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC