statsample-glm 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +51 -0
- data/.rspec +1 -0
- data/.travis.yml +2 -9
- data/Gemfile +2 -20
- data/LICENSE.txt +1 -1
- data/README.rdoc +14 -11
- data/Rakefile +16 -24
- data/lib/statsample-glm.rb +1 -11
- data/lib/statsample-glm/{regression.rb → glm.rb} +13 -46
- data/lib/statsample-glm/glm/base.rb +99 -0
- data/lib/statsample-glm/glm/irls/base.rb +54 -0
- data/lib/statsample-glm/glm/irls/logistic.rb +46 -0
- data/lib/statsample-glm/glm/irls/poisson.rb +48 -0
- data/lib/statsample-glm/glm/logistic.rb +16 -0
- data/lib/statsample-glm/glm/mle/base.rb +157 -0
- data/lib/statsample-glm/glm/mle/logistic.rb +113 -0
- data/lib/statsample-glm/glm/mle/normal.rb +94 -0
- data/lib/statsample-glm/glm/mle/probit.rb +100 -0
- data/lib/statsample-glm/glm/normal.rb +17 -0
- data/lib/statsample-glm/glm/poisson.rb +17 -0
- data/lib/statsample-glm/glm/probit.rb +16 -0
- data/lib/statsample-glm/version.rb +5 -0
- data/spec/data/logistic.csv +51 -0
- data/spec/data/logistic_mle.csv +201 -0
- data/spec/data/normal.csv +30 -0
- data/spec/logistic_spec.rb +37 -0
- data/spec/normal_spec.rb +15 -0
- data/spec/poisson_spec.rb +32 -0
- data/spec/probit_spec.rb +19 -0
- data/spec/spec_helper.rb +50 -0
- data/statsample-glm.gemspec +35 -0
- metadata +71 -145
- data/VERSION +0 -1
- data/features/bio-statsample-glm.feature +0 -9
- data/features/step_definitions/bio-statsample-glm_steps.rb +0 -0
- data/features/support/env.rb +0 -15
- data/lib/statsample-glm/regression/logistic.rb +0 -108
- data/lib/statsample-glm/regression/poisson.rb +0 -90
- data/test/helper.rb +0 -87
- data/test/test_glm.rb +0 -4
- data/test/test_glm_logistic.rb +0 -23
- data/test/test_glm_poisson.rb +0 -25
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.1
|
File without changes
|
data/features/support/env.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
begin
|
3
|
-
Bundler.setup(:default, :development)
|
4
|
-
rescue Bundler::BundlerError => e
|
5
|
-
$stderr.puts e.message
|
6
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
7
|
-
exit e.status_code
|
8
|
-
end
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
11
|
-
require 'statsample-glm'
|
12
|
-
|
13
|
-
require 'test/unit/assertions'
|
14
|
-
|
15
|
-
World(Test::Unit::Assertions)
|
@@ -1,108 +0,0 @@
|
|
1
|
-
module Statsample
|
2
|
-
module Regression
|
3
|
-
module GLM
|
4
|
-
|
5
|
-
class Logistic
|
6
|
-
|
7
|
-
attr_reader :se
|
8
|
-
# The fitted mean values
|
9
|
-
attr_reader :fit
|
10
|
-
# the _working_ residuals; that is the residuals in the final iteration of the IRWLS fit.
|
11
|
-
attr_reader :residuals
|
12
|
-
# The residuals degree of freedom
|
13
|
-
attr_reader :df
|
14
|
-
# Number of iterations used for convergence
|
15
|
-
attr_reader :iter
|
16
|
-
# Boolean. Tells whether the IRWLS for the given model converged or not
|
17
|
-
attr_reader :converged
|
18
|
-
|
19
|
-
def initialize(ds, y)
|
20
|
-
@ds=ds
|
21
|
-
@fields=@ds.fields
|
22
|
-
@x = ds.to_matrix
|
23
|
-
@y = y
|
24
|
-
end
|
25
|
-
|
26
|
-
# named vector/hash of coefficients
|
27
|
-
# === Parameter
|
28
|
-
# * *type*: symbol; (:array, default). Options = [:array, :hash]
|
29
|
-
def coefficients(type=:array)
|
30
|
-
if type==:array
|
31
|
-
#originally returned as vector; so pass it
|
32
|
-
@coefficients
|
33
|
-
elsif type==:hash
|
34
|
-
h={}
|
35
|
-
@fields.size.times {|i|
|
36
|
-
h[@fields[i]]=@coefficients[i]
|
37
|
-
}
|
38
|
-
h
|
39
|
-
end
|
40
|
-
end
|
41
|
-
def self.mu(x, b)
|
42
|
-
matrix_mul = x * b
|
43
|
-
numerator = matrix_mul.map { |y| Math.exp(y) }
|
44
|
-
denominator = numerator.map { |y| 1 + y }
|
45
|
-
|
46
|
-
numerator.each_with_index { |e, r, c|
|
47
|
-
numerator[r,c] = numerator[r,c].to_f / denominator[r,c].to_f
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.w(x, b)
|
52
|
-
mus = mu(x,b).column_vectors.map(&:to_a).flatten
|
53
|
-
mus_intermediate = mus.collect { |x| 1 - x }
|
54
|
-
w = mus.zip(mus_intermediate).collect { |x| x.inject(:*) }
|
55
|
-
w_mat = Matrix.I(w.size)
|
56
|
-
w_enum = w.to_enum
|
57
|
-
return w_mat.map do |x|
|
58
|
-
x.eql?(1) ? w_enum.next : x
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.h(x,b,y)
|
63
|
-
x_t = x.transpose
|
64
|
-
mu_flat = mu(x,b).column_vectors.map(&:to_a).flatten
|
65
|
-
column_data = y.zip(mu_flat).collect { |x| x.inject(:-) }
|
66
|
-
x_t * Matrix.column_vector(column_data)
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.j(x,b)
|
70
|
-
w_matrix = w(x, b)
|
71
|
-
jacobian_matrix = x.transpose * w_matrix * x
|
72
|
-
jacobian_matrix.map { |x| -x }
|
73
|
-
end
|
74
|
-
|
75
|
-
def to_s
|
76
|
-
sprintf("Logistic Regression (Statsample::Regression::GLM;:Logistic)")
|
77
|
-
end
|
78
|
-
|
79
|
-
# = Iteratively reweighted least squares
|
80
|
-
# Computes irwls for given model and parameters.
|
81
|
-
#
|
82
|
-
# == Usage
|
83
|
-
# require 'statsample-glm'
|
84
|
-
# x1=Statsample::Vector.new([0.537322309644812,-0.717124209978434,-0.519166718891331,0.434970973986765,-0.761822002215759,1.51170030921189,0.883854199811195,-0.908689798854196,1.70331977539793,-0.246971150634099,-1.59077593922623,-0.721548040910253,0.467025703920194,-0.510132788447137,0.430106510266798,-0.144353683251536,-1.54943800728303,0.849307651309298,-0.640304240933579,1.31462478279425,-0.399783455165345,0.0453055645017902,-2.58212161987746,-1.16484414309359,-1.08829266466281,-0.243893919684792,-1.96655661929441,0.301335373291024,-0.665832694463588,-0.0120650855753837,1.5116066367604,0.557300353673344,1.12829931872045,0.234443748015922,-2.03486690662651,0.275544751380246,-0.231465849558696,-0.356880153225012,-0.57746647541923,1.35758352580655,1.23971669378224,-0.662466275100489,0.313263561921793,-1.08783223256362,1.41964722846899,1.29325100940785,0.72153880625103,0.440580131022748,0.0351917814720056, -0.142353224879252],:scale)
|
85
|
-
# x2=Statsample::Vector.new([-0.866655707911859,-0.367820249977585,0.361486610435,0.857332626245179,0.133438466268095,0.716104533073575,1.77206093023382,-0.10136697295802,-0.777086491435508,-0.204573554913706,0.963353531412233,-1.10103024900542,-0.404372761837392,-0.230226345183469,0.0363730246866971,-0.838265540390497,1.12543549657924,-0.57929175648001,-0.747060244805248,0.58946979365152,-0.531952663697324,1.53338594419818,0.521992029051441,1.41631763288724,0.611402316795129,-0.518355638373296,-0.515192557101107,-0.672697937866108,1.84347042325327,-0.21195540664804,-0.269869371631611,0.296155694010096,-2.18097898069634,-1.21314663927206,1.49193669881581,1.38969280369493,-0.400680808117106,-1.87282814976479,1.82394870451051,0.637864732838274,-0.141155946382493,0.0699950644281617,1.32568550595165,-0.412599258349398,0.14436832227506,-1.16507785388489,-2.16782049922428,0.24318371493798,0.258954871320764,-0.151966534521183],:scale)
|
86
|
-
# y=Statsample::Vector.new([0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1],:scale)
|
87
|
-
# x=Statsample::Dataset.new({"i"=>intercept,"x1"=>x1,"x2"=>x2})
|
88
|
-
# obj = Statsample::Regression.glm(x, y, :binomial)
|
89
|
-
# #=> Logistic Regression object
|
90
|
-
# obj.irlws
|
91
|
-
# #=> Array of returned values
|
92
|
-
# obj.coefficients
|
93
|
-
# #=> named vector of coefficients
|
94
|
-
|
95
|
-
def irwls
|
96
|
-
x, y = @x, @y
|
97
|
-
#calling irwls on Regression and passing equivalent methods in lambdas.
|
98
|
-
#Ruby_level+=awesome!
|
99
|
-
@coefficients, @se, @fit, @residuals, @df, @iter, @converged = Statsample::Regression.irwls(
|
100
|
-
x,y, ->l,m{self.class.mu(l,m)}, ->l,m{self.class.w(l,m)},
|
101
|
-
->l,m{self.class.j(l,m)}, ->k,l,m{self.class.h(k,l,m)}
|
102
|
-
)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
module Statsample
|
2
|
-
module Regression
|
3
|
-
module GLM
|
4
|
-
|
5
|
-
class Poisson
|
6
|
-
|
7
|
-
attr_reader :se
|
8
|
-
# The fitted mean values
|
9
|
-
attr_reader :fit
|
10
|
-
# the _working_ residuals; that is the residuals in the final iteration of the IRWLS fit.
|
11
|
-
attr_reader :residuals
|
12
|
-
# The residuals degree of freedom
|
13
|
-
attr_reader :df
|
14
|
-
# Number of iterations used for convergence
|
15
|
-
attr_reader :iter
|
16
|
-
# Boolean. Tells whether the IRWLS for the given model converged or not
|
17
|
-
attr_reader :converged
|
18
|
-
|
19
|
-
def initialize(ds, y)
|
20
|
-
@ds=ds
|
21
|
-
@fields=@ds.fields
|
22
|
-
@x = ds.to_matrix
|
23
|
-
@y = y
|
24
|
-
end
|
25
|
-
|
26
|
-
# named vector/hash of coefficients
|
27
|
-
# === Parameter
|
28
|
-
# * *type*: symbol; (:array, default). Options = [:array, :hash]
|
29
|
-
def coefficients(type=:array)
|
30
|
-
if type==:array
|
31
|
-
@coefficients
|
32
|
-
elsif type==:hash
|
33
|
-
h={}
|
34
|
-
@fields.size.times {|i|
|
35
|
-
h[@fields[i]]=@coefficients[i]
|
36
|
-
}
|
37
|
-
h
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.mu(x, b, link=:log)
|
42
|
-
if link.downcase.to_sym == :log
|
43
|
-
(x * b).map { |y| Math.exp(y) }
|
44
|
-
elsif link.downcase.to_sym == :sqrt
|
45
|
-
(x * b).collect { |y| y**2 }
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.w(x, b)
|
50
|
-
poisson_mu = mu(x,b)
|
51
|
-
mu_flat = poisson_mu.column_vectors.map(&:to_a).flatten
|
52
|
-
|
53
|
-
w_mat = Matrix.I(mu_flat.size)
|
54
|
-
mu_enum = mu_flat.to_enum
|
55
|
-
return w_mat.map do |x|
|
56
|
-
x.eql?(1) ? mu_enum.next : x
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.h(x, b, y)
|
61
|
-
x_t = x.transpose
|
62
|
-
mu_flat = mu(x,b).column_vectors.map(&:to_a).flatten
|
63
|
-
column_data = y.zip(mu_flat).collect { |x| x.inject(:-) }
|
64
|
-
x_t * Matrix.columns([column_data])
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.j(x, b)
|
68
|
-
w_matrix = w(x, b)
|
69
|
-
jacobian_matrix = x.transpose * w_matrix * x
|
70
|
-
jacobian_matrix.map { |x| -x }
|
71
|
-
end
|
72
|
-
|
73
|
-
def to_s
|
74
|
-
sprintf("Logistic Regression (Statsample::Regression::GLM;:Logistic)")
|
75
|
-
end
|
76
|
-
|
77
|
-
def irwls
|
78
|
-
x,y = @x,@y
|
79
|
-
#calling irwls on Regression and passing equivalent methods in lambdas.
|
80
|
-
#Ruby_level+=awesome!
|
81
|
-
@coefficients, @se, @fit, @residuals, @df, @iter, @converged = Statsample::Regression.irwls(
|
82
|
-
x,y, ->l,m{self.class.mu(l,m)}, ->l,m{self.class.w(l,m)},
|
83
|
-
->l,m{self.class.j(l,m)}, ->k,l,m{self.class.h(k,l,m)}
|
84
|
-
)
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
data/test/helper.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'minitest/unit'
|
11
|
-
require 'shoulda'
|
12
|
-
require 'shoulda-context'
|
13
|
-
require 'mocha/setup'
|
14
|
-
|
15
|
-
|
16
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
17
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
18
|
-
require 'statsample-glm'
|
19
|
-
module MiniTest
|
20
|
-
class Unit
|
21
|
-
class TestCase
|
22
|
-
include Shoulda::Context::Assertions
|
23
|
-
include Shoulda::Context::InstanceMethods
|
24
|
-
extend Shoulda::Context::ClassMethods
|
25
|
-
def self.should_with_gsl(name,&block)
|
26
|
-
should(name) do
|
27
|
-
if Statsample.has_gsl?
|
28
|
-
instance_eval(&block)
|
29
|
-
else
|
30
|
-
skip("Requires GSL")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
module Assertions
|
38
|
-
def assert_similar_vector(exp, obs, delta=1e-10,msg=nil)
|
39
|
-
msg||="Different vectors #{exp} - #{obs}"
|
40
|
-
assert_equal(exp.size, obs.size)
|
41
|
-
exp.data_with_nils.each_with_index {|v,i|
|
42
|
-
assert_in_delta(v,obs[i],delta)
|
43
|
-
}
|
44
|
-
end
|
45
|
-
def assert_similar_hash(exp, obs, delta=1e-10,msg=nil)
|
46
|
-
msg||="Different hash #{exp} - #{obs}"
|
47
|
-
assert_equal(exp.size, obs.size)
|
48
|
-
exp.each_key {|k|
|
49
|
-
assert_in_delta(exp[k],obs[k],delta)
|
50
|
-
}
|
51
|
-
end
|
52
|
-
|
53
|
-
def assert_equal_vector(exp,obs,delta=1e-10,msg=nil)
|
54
|
-
assert_equal(exp.size, obs.size, "Different size.#{msg}")
|
55
|
-
exp.size.times {|i|
|
56
|
-
assert_in_delta(exp[i],obs[i],delta, "Different element #{i}. \nExpected:\n#{exp}\nObserved:\n#{obs}.#{msg}")
|
57
|
-
}
|
58
|
-
end
|
59
|
-
def assert_equal_matrix(exp,obs,delta=1e-10,msg=nil)
|
60
|
-
assert_equal(exp.row_size, obs.row_size, "Different row size.#{msg}")
|
61
|
-
assert_equal(exp.column_size, obs.column_size, "Different column size.#{msg}")
|
62
|
-
exp.row_size.times {|i|
|
63
|
-
exp.column_size.times {|j|
|
64
|
-
assert_in_delta(exp[i,j],obs[i,j], delta, "Different element #{i},#{j}\nExpected:\n#{exp}\nObserved:\n#{obs}.#{msg}")
|
65
|
-
}
|
66
|
-
}
|
67
|
-
end
|
68
|
-
alias :assert_raise :assert_raises unless method_defined? :assert_raise
|
69
|
-
alias :assert_not_equal :refute_equal unless method_defined? :assert_not_equal
|
70
|
-
alias :assert_not_same :refute_same unless method_defined? :assert_not_same
|
71
|
-
unless method_defined? :assert_nothing_raised
|
72
|
-
def assert_nothing_raised(msg=nil)
|
73
|
-
msg||="Nothing should be raised, but raised %s"
|
74
|
-
begin
|
75
|
-
yield
|
76
|
-
not_raised=true
|
77
|
-
rescue Exception => e
|
78
|
-
not_raised=false
|
79
|
-
msg=sprintf(msg,e)
|
80
|
-
end
|
81
|
-
assert(not_raised,msg)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
MiniTest::Unit.autorun
|
data/test/test_glm.rb
DELETED
data/test/test_glm_logistic.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require(File.expand_path(File.dirname(__FILE__)+'/helper.rb'))
|
2
|
-
|
3
|
-
class StatsampleRegressionGlmLogistic < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
context("Example") do
|
6
|
-
setup do
|
7
|
-
x1=Statsample::Vector.new([0.537322309644812,-0.717124209978434,-0.519166718891331,0.434970973986765,-0.761822002215759,1.51170030921189,0.883854199811195,-0.908689798854196,1.70331977539793,-0.246971150634099,-1.59077593922623,-0.721548040910253,0.467025703920194,-0.510132788447137,0.430106510266798,-0.144353683251536,-1.54943800728303,0.849307651309298,-0.640304240933579,1.31462478279425,-0.399783455165345,0.0453055645017902,-2.58212161987746,-1.16484414309359,-1.08829266466281,-0.243893919684792,-1.96655661929441,0.301335373291024,-0.665832694463588,-0.0120650855753837,1.5116066367604,0.557300353673344,1.12829931872045,0.234443748015922,-2.03486690662651,0.275544751380246,-0.231465849558696,-0.356880153225012,-0.57746647541923,1.35758352580655,1.23971669378224,-0.662466275100489,0.313263561921793,-1.08783223256362,1.41964722846899,1.29325100940785,0.72153880625103,0.440580131022748,0.0351917814720056, -0.142353224879252],:scale)
|
8
|
-
x2=Statsample::Vector.new([-0.866655707911859,-0.367820249977585,0.361486610435,0.857332626245179,0.133438466268095,0.716104533073575,1.77206093023382,-0.10136697295802,-0.777086491435508,-0.204573554913706,0.963353531412233,-1.10103024900542,-0.404372761837392,-0.230226345183469,0.0363730246866971,-0.838265540390497,1.12543549657924,-0.57929175648001,-0.747060244805248,0.58946979365152,-0.531952663697324,1.53338594419818,0.521992029051441,1.41631763288724,0.611402316795129,-0.518355638373296,-0.515192557101107,-0.672697937866108,1.84347042325327,-0.21195540664804,-0.269869371631611,0.296155694010096,-2.18097898069634,-1.21314663927206,1.49193669881581,1.38969280369493,-0.400680808117106,-1.87282814976479,1.82394870451051,0.637864732838274,-0.141155946382493,0.0699950644281617,1.32568550595165,-0.412599258349398,0.14436832227506,-1.16507785388489,-2.16782049922428,0.24318371493798,0.258954871320764,-0.151966534521183],:scale)
|
9
|
-
@y_log=Statsample::Vector.new([0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1],:scale)
|
10
|
-
@y_pois=Statsample::Vector.new([1,2,1,3,3,1,10,1,1,2,15,0,0,2,1,2,18,2,1,1,1,8,18,13,7,1,1,0,26,0,2,2,0,0,25,7,0,0,21,0,0,1,5,0,3,0,0,1,0,0],:scale)
|
11
|
-
intercept=Statsample::Vector.new([1]*50,:scale)
|
12
|
-
@df=Statsample::Dataset.new({"i"=>intercept,"x1"=>x1,"x2"=>x2})
|
13
|
-
@glm=Statsample::Regression.glm(@df,@y_log,:binomial)
|
14
|
-
end
|
15
|
-
should "report correct coefficientes as array" do
|
16
|
-
assert_similar_vector(@glm.coefficients,[0.675603176233325,-0.312493754568903,2.28671333346264])
|
17
|
-
end
|
18
|
-
should "report correct coefficientes as hash" do
|
19
|
-
assert_similar_hash(@glm.coefficients(:hash), {"i"=>0.675603176233325,"x1"=>-0.312493754568903,"x2"=>2.28671333346264})
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
data/test/test_glm_poisson.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require(File.expand_path(File.dirname(__FILE__)+'/helper.rb'))
|
2
|
-
|
3
|
-
class StatsampleRegressionGlmPoisson < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
context("Example") do
|
6
|
-
setup do
|
7
|
-
x1=Statsample::Vector.new([0.537322309644812,-0.717124209978434,-0.519166718891331,0.434970973986765,-0.761822002215759,1.51170030921189,0.883854199811195,-0.908689798854196,1.70331977539793,-0.246971150634099,-1.59077593922623,-0.721548040910253,0.467025703920194,-0.510132788447137,0.430106510266798,-0.144353683251536,-1.54943800728303,0.849307651309298,-0.640304240933579,1.31462478279425,-0.399783455165345,0.0453055645017902,-2.58212161987746,-1.16484414309359,-1.08829266466281,-0.243893919684792,-1.96655661929441,0.301335373291024,-0.665832694463588,-0.0120650855753837,1.5116066367604,0.557300353673344,1.12829931872045,0.234443748015922,-2.03486690662651,0.275544751380246,-0.231465849558696,-0.356880153225012,-0.57746647541923,1.35758352580655,1.23971669378224,-0.662466275100489,0.313263561921793,-1.08783223256362,1.41964722846899,1.29325100940785,0.72153880625103,0.440580131022748,0.0351917814720056, -0.142353224879252],:scale)
|
8
|
-
x2=Statsample::Vector.new([-0.866655707911859,-0.367820249977585,0.361486610435,0.857332626245179,0.133438466268095,0.716104533073575,1.77206093023382,-0.10136697295802,-0.777086491435508,-0.204573554913706,0.963353531412233,-1.10103024900542,-0.404372761837392,-0.230226345183469,0.0363730246866971,-0.838265540390497,1.12543549657924,-0.57929175648001,-0.747060244805248,0.58946979365152,-0.531952663697324,1.53338594419818,0.521992029051441,1.41631763288724,0.611402316795129,-0.518355638373296,-0.515192557101107,-0.672697937866108,1.84347042325327,-0.21195540664804,-0.269869371631611,0.296155694010096,-2.18097898069634,-1.21314663927206,1.49193669881581,1.38969280369493,-0.400680808117106,-1.87282814976479,1.82394870451051,0.637864732838274,-0.141155946382493,0.0699950644281617,1.32568550595165,-0.412599258349398,0.14436832227506,-1.16507785388489,-2.16782049922428,0.24318371493798,0.258954871320764,-0.151966534521183],:scale)
|
9
|
-
@y_log=Statsample::Vector.new([0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1],:scale)
|
10
|
-
@y_pois=Statsample::Vector.new([1,2,1,3,3,1,10,1,1,2,15,0,0,2,1,2,18,2,1,1,1,8,18,13,7,1,1,0,26,0,2,2,0,0,25,7,0,0,21,0,0,1,5,0,3,0,0,1,0,0],:scale)
|
11
|
-
intercept=Statsample::Vector.new([1]*50,:scale)
|
12
|
-
@df=Statsample::Dataset.new({"i"=>intercept,"x1"=>x1,"x2"=>x2})
|
13
|
-
@glm=Statsample::Regression.glm(@df,@y_pois,:poisson)
|
14
|
-
|
15
|
-
end
|
16
|
-
should "report correct coefficientes as array" do
|
17
|
-
assert_similar_vector(@glm.coefficients,[0.32993246633711,-0.586359358356708,1.28511323439258])
|
18
|
-
end # should
|
19
|
-
should "report correct coefficientes as hash" do
|
20
|
-
assert_similar_hash(@glm.coefficients(:hash), {"i"=>0.32993246633711,"x1"=>-0.586359358356708, "x2"=>1.28511323439258})
|
21
|
-
end # should
|
22
|
-
|
23
|
-
end # context
|
24
|
-
end # class
|
25
|
-
|