distribution 0.6.0 → 0.8.0
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.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.travis.yml +13 -0
- data/.yardopts +5 -0
- data/Gemfile +5 -0
- data/History.txt +24 -8
- data/LICENCE.md +26 -0
- data/README.md +155 -0
- data/Rakefile +15 -19
- data/benchmark/binomial_coefficient.rb +19 -23
- data/benchmark/binomial_coefficient/experiment.rb +33 -36
- data/benchmark/factorial_hash.rb +7 -8
- data/benchmark/factorial_method.rb +4 -6
- data/benchmark/odd.rb +6 -7
- data/benchmark/power.rb +11 -11
- data/bin/distribution +26 -26
- data/data/template/spec.erb +7 -6
- data/distribution.gemspec +25 -0
- data/lib/distribution.rb +79 -124
- data/lib/distribution/beta.rb +6 -8
- data/lib/distribution/beta/gsl.rb +14 -9
- data/lib/distribution/beta/java.rb +1 -1
- data/lib/distribution/beta/ruby.rb +41 -7
- data/lib/distribution/binomial.rb +10 -11
- data/lib/distribution/binomial/gsl.rb +6 -5
- data/lib/distribution/binomial/java.rb +1 -1
- data/lib/distribution/binomial/ruby.rb +22 -15
- data/lib/distribution/bivariatenormal.rb +4 -5
- data/lib/distribution/bivariatenormal/gsl.rb +2 -2
- data/lib/distribution/bivariatenormal/java.rb +1 -1
- data/lib/distribution/bivariatenormal/ruby.rb +245 -254
- data/lib/distribution/chisquare.rb +8 -10
- data/lib/distribution/chisquare/gsl.rb +24 -19
- data/lib/distribution/chisquare/java.rb +1 -1
- data/lib/distribution/chisquare/ruby.rb +60 -55
- data/lib/distribution/chisquare/statistics2.rb +16 -13
- data/lib/distribution/distributable.rb +40 -0
- data/lib/distribution/exponential.rb +4 -5
- data/lib/distribution/exponential/gsl.rb +13 -9
- data/lib/distribution/exponential/ruby.rb +17 -11
- data/lib/distribution/f.rb +10 -11
- data/lib/distribution/f/gsl.rb +26 -22
- data/lib/distribution/f/java.rb +1 -1
- data/lib/distribution/f/ruby.rb +104 -105
- data/lib/distribution/f/statistics2.rb +22 -19
- data/lib/distribution/gamma.rb +5 -7
- data/lib/distribution/gamma/gsl.rb +13 -9
- data/lib/distribution/gamma/java.rb +1 -1
- data/lib/distribution/gamma/ruby.rb +5 -11
- data/lib/distribution/hypergeometric.rb +5 -8
- data/lib/distribution/hypergeometric/gsl.rb +5 -6
- data/lib/distribution/hypergeometric/java.rb +1 -1
- data/lib/distribution/hypergeometric/ruby.rb +34 -35
- data/lib/distribution/logistic.rb +6 -9
- data/lib/distribution/logistic/ruby.rb +14 -9
- data/lib/distribution/lognormal.rb +37 -0
- data/lib/distribution/lognormal/gsl.rb +21 -0
- data/lib/distribution/lognormal/ruby.rb +16 -0
- data/lib/distribution/math_extension.rb +187 -231
- data/lib/distribution/math_extension/chebyshev_series.rb +281 -272
- data/lib/distribution/math_extension/erfc.rb +28 -31
- data/lib/distribution/math_extension/exponential_integral.rb +17 -17
- data/lib/distribution/math_extension/gammastar.rb +19 -20
- data/lib/distribution/math_extension/gsl_utilities.rb +12 -12
- data/lib/distribution/math_extension/incomplete_beta.rb +52 -61
- data/lib/distribution/math_extension/incomplete_gamma.rb +166 -168
- data/lib/distribution/math_extension/log_utilities.rb +20 -22
- data/lib/distribution/normal.rb +11 -13
- data/lib/distribution/normal/gsl.rb +13 -10
- data/lib/distribution/normal/java.rb +30 -1
- data/lib/distribution/normal/ruby.rb +69 -59
- data/lib/distribution/normal/statistics2.rb +5 -2
- data/lib/distribution/normalmultivariate.rb +64 -64
- data/lib/distribution/poisson.rb +12 -14
- data/lib/distribution/poisson/gsl.rb +7 -7
- data/lib/distribution/poisson/java.rb +26 -0
- data/lib/distribution/poisson/ruby.rb +38 -9
- data/lib/distribution/shorthand.rb +17 -0
- data/lib/distribution/t.rb +16 -16
- data/lib/distribution/t/gsl.rb +27 -24
- data/lib/distribution/t/java.rb +1 -1
- data/lib/distribution/t/ruby.rb +99 -100
- data/lib/distribution/t/statistics2.rb +19 -19
- data/lib/distribution/uniform.rb +26 -0
- data/lib/distribution/uniform/gsl.rb +36 -0
- data/lib/distribution/uniform/ruby.rb +91 -0
- data/lib/distribution/version.rb +3 -0
- data/lib/distribution/weibull.rb +10 -0
- data/lib/distribution/weibull/gsl.rb +21 -0
- data/lib/distribution/weibull/ruby.rb +34 -0
- data/spec/beta_spec.rb +48 -50
- data/spec/binomial_spec.rb +80 -84
- data/spec/bivariatenormal_spec.rb +28 -35
- data/spec/chisquare_spec.rb +49 -52
- data/spec/distribution_spec.rb +11 -11
- data/spec/exponential_spec.rb +48 -39
- data/spec/f_spec.rb +73 -71
- data/spec/gamma_spec.rb +50 -53
- data/spec/hypergeometric_spec.rb +63 -69
- data/spec/logistic_spec.rb +31 -37
- data/spec/lognormal_spec.rb +54 -0
- data/spec/math_extension_spec.rb +192 -209
- data/spec/normal_spec.rb +80 -73
- data/spec/poisson_spec.rb +78 -36
- data/spec/shorthand_spec.rb +19 -22
- data/spec/spec_helper.rb +31 -6
- data/spec/t_spec.rb +63 -77
- data/spec/uniform_spec.rb +154 -0
- data/spec/weibull_spec.rb +17 -0
- data/vendor/java/commons-math-2.2.jar +0 -0
- metadata +91 -111
- data.tar.gz.sig +0 -0
- data/.autotest +0 -23
- data/.gemtest +0 -0
- data/Manifest.txt +0 -95
- data/README.txt +0 -100
- metadata.gz.sig +0 -0
|
@@ -1,63 +1,56 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)+
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
|
|
2
2
|
include ExampleWithGSL
|
|
3
3
|
describe Distribution::BivariateNormal do
|
|
4
|
-
shared_examples_for
|
|
5
|
-
it_only_with_gsl
|
|
4
|
+
shared_examples_for 'all pdf normal capables engines' do
|
|
5
|
+
it_only_with_gsl 'should return correct pdf' do
|
|
6
6
|
if @engine.respond_to? :pdf
|
|
7
|
-
[0.2,0.4,0.6,0.8,0.9, 0.99,0.999,0.999999].each {|rho|
|
|
8
|
-
@engine.pdf(0,0, rho
|
|
7
|
+
[0.2, 0.4, 0.6, 0.8, 0.9, 0.99, 0.999, 0.999999].each {|rho|
|
|
8
|
+
expect(@engine.pdf(0, 0, rho, 1, 1)).to be_within(1e-8).of(GSL::Ran.bivariate_gaussian_pdf(0, 0, 1, 1, rho))
|
|
9
9
|
}
|
|
10
10
|
else
|
|
11
11
|
pending("No #{@engine}.pdf")
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
-
|
|
16
|
-
shared_examples_for
|
|
17
|
-
it
|
|
15
|
+
|
|
16
|
+
shared_examples_for 'all cdf normal capables engines' do
|
|
17
|
+
it 'should return correct cdf' do
|
|
18
18
|
if @engine.respond_to? :cdf
|
|
19
|
-
@engine.cdf(2,0.5,0.5).
|
|
20
|
-
@engine.cdf(2,0.0,0.5).
|
|
21
|
-
@engine.cdf(1.5,0.5,0.5).
|
|
22
|
-
v=rand
|
|
23
|
-
@engine.cdf(10,0,v).
|
|
19
|
+
expect(@engine.cdf(2, 0.5, 0.5)).to be_within(1e-3).of(0.686)
|
|
20
|
+
expect(@engine.cdf(2, 0.0, 0.5)).to be_within(1e-3).of(0.498)
|
|
21
|
+
expect(@engine.cdf(1.5, 0.5, 0.5)).to be_within(1e-3).of(0.671)
|
|
22
|
+
v = rand
|
|
23
|
+
expect(@engine.cdf(10, 0, v)).to be_within(1e-3).of(Distribution::Normal.cdf(0))
|
|
24
24
|
else
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
pending("No #{@engine}.cdf")
|
|
26
|
+
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
|
|
30
29
|
end
|
|
31
|
-
describe
|
|
30
|
+
describe 'singleton' do
|
|
32
31
|
before do
|
|
33
|
-
@engine=Distribution::BivariateNormal
|
|
32
|
+
@engine = Distribution::BivariateNormal
|
|
34
33
|
end
|
|
35
|
-
it_should_behave_like
|
|
36
|
-
it_should_behave_like
|
|
37
|
-
|
|
34
|
+
it_should_behave_like 'all pdf normal capables engines'
|
|
35
|
+
it_should_behave_like 'all cdf normal capables engines'
|
|
38
36
|
end
|
|
39
|
-
|
|
37
|
+
|
|
40
38
|
describe Distribution::Normal::Ruby_ do
|
|
41
39
|
before do
|
|
42
|
-
@engine=Distribution::BivariateNormal::Ruby_
|
|
40
|
+
@engine = Distribution::BivariateNormal::Ruby_
|
|
43
41
|
end
|
|
44
|
-
it_should_behave_like
|
|
45
|
-
it_should_behave_like
|
|
46
|
-
it
|
|
47
|
-
[-3
|
|
48
|
-
@engine.cdf_hull(x,x,0.5).
|
|
49
|
-
|
|
42
|
+
it_should_behave_like 'all pdf normal capables engines'
|
|
43
|
+
it_should_behave_like 'all cdf normal capables engines'
|
|
44
|
+
it 'Ganz method should return similar method to Hull one' do
|
|
45
|
+
[-3, -2, -1, 0, 1, 1.5].each {|x|
|
|
46
|
+
expect(@engine.cdf_hull(x, x, 0.5)).to be_within(0.001).of(@engine.cdf_genz(x, x, 0.5))
|
|
50
47
|
}
|
|
51
48
|
end
|
|
52
|
-
|
|
53
49
|
end
|
|
54
50
|
describe Distribution::Normal::GSL_ do
|
|
55
51
|
before do
|
|
56
|
-
@engine=Distribution::BivariateNormal::GSL_
|
|
52
|
+
@engine = Distribution::BivariateNormal::GSL_
|
|
57
53
|
end
|
|
58
|
-
it_should_behave_like
|
|
59
|
-
|
|
54
|
+
it_should_behave_like 'all pdf normal capables engines'
|
|
60
55
|
end
|
|
61
|
-
|
|
62
|
-
|
|
63
56
|
end
|
data/spec/chisquare_spec.rb
CHANGED
|
@@ -1,89 +1,86 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)+
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
|
|
2
2
|
include ExampleWithGSL
|
|
3
3
|
describe Distribution::ChiSquare do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
it_only_with_gsl "should return correct pdf" do
|
|
4
|
+
shared_examples_for 'Chi-square engine(with pdf)' do
|
|
5
|
+
it_only_with_gsl 'should return correct pdf' do
|
|
7
6
|
if @engine.respond_to? :pdf
|
|
8
7
|
1.upto(10) do |k|
|
|
9
|
-
v=1+rand(5)
|
|
10
|
-
chi=GSL::Ran.chisq_pdf(v,k)
|
|
11
|
-
@engine.pdf(v,k).
|
|
8
|
+
v = 1 + rand(5)
|
|
9
|
+
chi = GSL::Ran.chisq_pdf(v, k)
|
|
10
|
+
expect(@engine.pdf(v, k)).to be_within(10e-10).of(chi)
|
|
12
11
|
end
|
|
13
12
|
else
|
|
14
|
-
|
|
13
|
+
skip("No #{@engine}.pdf")
|
|
15
14
|
end
|
|
16
15
|
end
|
|
16
|
+
end
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
shared_examples_for 'Chi-square engine' do
|
|
19
|
+
it_only_with_gsl 'should return correct cdf' do
|
|
20
|
+
if @engine.respond_to? :cdf
|
|
21
|
+
1.upto(10) do |k|
|
|
22
|
+
v = 1 + rand(5)
|
|
23
|
+
chi = GSL::Cdf.chisq_P(v, k)
|
|
24
|
+
expect(@engine.cdf(v, k)).to be_within(10e-10).of(chi)
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
skip("No #{@engine}.cdf")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
it 'should return correct p_value' do
|
|
32
|
+
if @engine.respond_to? :p_value
|
|
33
|
+
1.upto(10) do |k|
|
|
34
|
+
v = 1 + rand(5)
|
|
35
|
+
pr = @engine.cdf(v, k)
|
|
36
|
+
expect(@engine.p_value(pr, k)).to be_within(10e-4).of(v)
|
|
37
|
+
end
|
|
38
|
+
else
|
|
39
|
+
skip("No #{@engine}.p_value")
|
|
28
40
|
end
|
|
29
|
-
else
|
|
30
|
-
pending("No #{@engine}.cdf")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
it "should return correct p_value" do
|
|
34
|
-
if @engine.respond_to? :p_value
|
|
35
|
-
1.upto(10) do |k|
|
|
36
|
-
v=1+rand(5)
|
|
37
|
-
pr=@engine.cdf(v,k)
|
|
38
|
-
@engine.p_value(pr,k).should be_within(10e-4).of(v)
|
|
39
|
-
end
|
|
40
|
-
else
|
|
41
|
-
pending("No #{@engine}.p_value")
|
|
42
41
|
end
|
|
43
42
|
end
|
|
44
|
-
end
|
|
45
43
|
|
|
46
|
-
describe
|
|
44
|
+
describe 'singleton' do
|
|
47
45
|
before do
|
|
48
|
-
@engine=Distribution::ChiSquare
|
|
46
|
+
@engine = Distribution::ChiSquare
|
|
49
47
|
end
|
|
50
|
-
it_should_behave_like
|
|
51
|
-
it_should_behave_like
|
|
48
|
+
it_should_behave_like 'Chi-square engine'
|
|
49
|
+
it_should_behave_like 'Chi-square engine(with pdf)'
|
|
52
50
|
end
|
|
53
|
-
|
|
51
|
+
|
|
54
52
|
describe Distribution::ChiSquare::Ruby_ do
|
|
55
53
|
before do
|
|
56
|
-
@engine=Distribution::ChiSquare::Ruby_
|
|
54
|
+
@engine = Distribution::ChiSquare::Ruby_
|
|
57
55
|
end
|
|
58
|
-
it_should_behave_like
|
|
59
|
-
it_should_behave_like
|
|
56
|
+
it_should_behave_like 'Chi-square engine'
|
|
57
|
+
it_should_behave_like 'Chi-square engine(with pdf)'
|
|
60
58
|
end
|
|
61
59
|
if Distribution.has_gsl?
|
|
62
60
|
describe Distribution::ChiSquare::GSL_ do
|
|
63
61
|
before do
|
|
64
|
-
@engine=Distribution::ChiSquare::GSL_
|
|
62
|
+
@engine = Distribution::ChiSquare::GSL_
|
|
65
63
|
end
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
it_should_behave_like 'Chi-square engine'
|
|
65
|
+
it_should_behave_like 'Chi-square engine(with pdf)'
|
|
68
66
|
end
|
|
69
|
-
end
|
|
67
|
+
end
|
|
70
68
|
if Distribution.has_statistics2?
|
|
71
69
|
describe Distribution::ChiSquare::Statistics2_ do
|
|
72
70
|
before do
|
|
73
|
-
@engine=Distribution::ChiSquare::Statistics2_
|
|
71
|
+
@engine = Distribution::ChiSquare::Statistics2_
|
|
74
72
|
end
|
|
75
|
-
|
|
76
|
-
end
|
|
73
|
+
it_should_behave_like 'Chi-square engine'
|
|
74
|
+
end
|
|
77
75
|
end
|
|
78
|
-
|
|
76
|
+
|
|
79
77
|
if Distribution.has_java?
|
|
80
78
|
describe Distribution::ChiSquare::Java_ do
|
|
81
79
|
before do
|
|
82
|
-
@engine=Distribution::ChiSquare::Java_
|
|
80
|
+
@engine = Distribution::ChiSquare::Java_
|
|
83
81
|
end
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
end
|
|
82
|
+
it_should_behave_like 'Chi-square engine'
|
|
83
|
+
it_should_behave_like 'Chi-square engine(with pdf)'
|
|
84
|
+
end
|
|
87
85
|
end
|
|
88
|
-
|
|
89
86
|
end
|
data/spec/distribution_spec.rb
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)+
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
|
|
2
2
|
describe Distribution do
|
|
3
|
-
it
|
|
4
|
-
lambda {Distribution.has_gsl?}.should_not raise_exception
|
|
3
|
+
it 'should respond to has_gsl?' do
|
|
4
|
+
lambda { Distribution.has_gsl? }.should_not raise_exception
|
|
5
5
|
if Distribution.has_gsl?
|
|
6
|
-
defined?(GSL).
|
|
6
|
+
expect(defined?(GSL)).to be
|
|
7
7
|
else
|
|
8
|
-
defined?(GSL).
|
|
9
|
-
end
|
|
8
|
+
expect(defined?(GSL)).to be_nil
|
|
9
|
+
end
|
|
10
10
|
end
|
|
11
|
-
it
|
|
12
|
-
lambda {Distribution.has_statistics2?}.should_not raise_exception
|
|
11
|
+
it 'should respond to has_statistics2?' do
|
|
12
|
+
lambda { Distribution.has_statistics2? }.should_not raise_exception
|
|
13
13
|
if Distribution.has_statistics2?
|
|
14
|
-
defined?(Statistics2).
|
|
14
|
+
expect(defined?(Statistics2)).to be
|
|
15
15
|
else
|
|
16
|
-
defined?(Statistics2).
|
|
17
|
-
end
|
|
16
|
+
expect(defined?(Statistics2)).to be_nil
|
|
17
|
+
end
|
|
18
18
|
end
|
|
19
19
|
end
|
data/spec/exponential_spec.rb
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)+
|
|
2
|
-
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
|
|
2
|
+
|
|
3
3
|
describe Distribution::Exponential do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
it "should return correct pdf" do
|
|
4
|
+
shared_examples_for 'exponential engine' do
|
|
5
|
+
it 'should return correct pdf' do
|
|
7
6
|
if @engine.respond_to? :pdf
|
|
8
|
-
[0.5,1,1.5].each {|l|
|
|
7
|
+
[0.5, 1, 1.5].each {|l|
|
|
9
8
|
1.upto(5) {|x|
|
|
10
|
-
@engine.pdf(x,l).
|
|
9
|
+
expect(@engine.pdf(x, l)).to be_within(1e-10).of(l * Math.exp(-l * x))
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
12
|
else
|
|
14
13
|
pending("No #{@engine}.pdf")
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
|
-
|
|
18
|
-
it
|
|
16
|
+
|
|
17
|
+
it 'should return correct cdf' do
|
|
19
18
|
if @engine.respond_to? :cdf
|
|
20
|
-
[0.5,1,1.5].each {|l|
|
|
19
|
+
[0.5, 1, 1.5].each {|l|
|
|
21
20
|
1.upto(5) {|x|
|
|
22
|
-
@engine.cdf(x,l).
|
|
21
|
+
expect(@engine.cdf(x, l)).to be_within(1e-10).of(1 - Math.exp(-l * x))
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
24
|
else
|
|
26
25
|
pending("No #{@engine}.cdf")
|
|
27
26
|
end
|
|
28
27
|
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
it "should return correct p_value" do
|
|
28
|
+
|
|
29
|
+
it 'should return correct p_value' do
|
|
32
30
|
if @engine.respond_to? :p_value
|
|
33
|
-
[0.5,1,1.5].each {|l|
|
|
31
|
+
[0.5, 1, 1.5].each {|l|
|
|
34
32
|
1.upto(5) {|x|
|
|
35
|
-
pr
|
|
36
|
-
@engine.p_value(pr,l).
|
|
33
|
+
pr = @engine.cdf(x, l)
|
|
34
|
+
expect(@engine.p_value(pr, l)).to be_within(1e-10).of(x)
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
else
|
|
@@ -41,40 +39,51 @@ describe Distribution::Exponential do
|
|
|
41
39
|
end
|
|
42
40
|
end
|
|
43
41
|
end
|
|
44
|
-
|
|
45
42
|
|
|
46
|
-
describe
|
|
43
|
+
describe 'singleton' do
|
|
47
44
|
before do
|
|
48
|
-
@engine=Distribution::Exponential
|
|
45
|
+
@engine = Distribution::Exponential
|
|
49
46
|
end
|
|
50
|
-
it_should_behave_like
|
|
47
|
+
it_should_behave_like 'exponential engine'
|
|
51
48
|
end
|
|
52
|
-
|
|
49
|
+
|
|
53
50
|
describe Distribution::Exponential::Ruby_ do
|
|
54
51
|
before do
|
|
55
|
-
@engine=Distribution::Exponential::Ruby_
|
|
52
|
+
@engine = Distribution::Exponential::Ruby_
|
|
56
53
|
end
|
|
57
|
-
it_should_behave_like
|
|
58
|
-
|
|
54
|
+
it_should_behave_like 'exponential engine'
|
|
59
55
|
end
|
|
60
|
-
|
|
56
|
+
|
|
61
57
|
if Distribution.has_gsl?
|
|
62
58
|
describe Distribution::Exponential::GSL_ do
|
|
63
59
|
before do
|
|
64
|
-
@engine=Distribution::Exponential::GSL_
|
|
60
|
+
@engine = Distribution::Exponential::GSL_
|
|
65
61
|
end
|
|
66
|
-
|
|
62
|
+
it_should_behave_like 'exponential engine'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# if Distribution.has_java?
|
|
67
|
+
# describe Distribution::Exponential::Java_ do
|
|
68
|
+
# before do
|
|
69
|
+
# @engine=Distribution::Exponential::Java_
|
|
70
|
+
# end
|
|
71
|
+
# it_should_behave_like "exponential engine"
|
|
72
|
+
#
|
|
73
|
+
# end
|
|
74
|
+
# end
|
|
75
|
+
describe 'rng' do
|
|
76
|
+
it 'should default to Kernel#rand if no :random is given' do
|
|
77
|
+
allow(Random).to receive(:rand).and_return(0.5)
|
|
78
|
+
rng = Distribution::Exponential.rng 1.0
|
|
79
|
+
rng.call
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'should use a given rng if one is passed during construction' do
|
|
83
|
+
random = double('random')
|
|
84
|
+
allow(random).to receive(:rand).and_return(0.5)
|
|
85
|
+
rng = Distribution::Exponential.rng 1.0, random: random
|
|
86
|
+
rng.call
|
|
67
87
|
end
|
|
68
88
|
end
|
|
69
|
-
|
|
70
|
-
# if Distribution.has_java?
|
|
71
|
-
# describe Distribution::Exponential::Java_ do
|
|
72
|
-
# before do
|
|
73
|
-
# @engine=Distribution::Exponential::Java_
|
|
74
|
-
# end
|
|
75
|
-
# it_should_behave_like "exponential engine"
|
|
76
|
-
#
|
|
77
|
-
# end
|
|
78
|
-
# end
|
|
79
|
-
|
|
80
89
|
end
|
data/spec/f_spec.rb
CHANGED
|
@@ -1,107 +1,109 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)+
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
|
|
2
2
|
|
|
3
3
|
include ExampleWithGSL
|
|
4
4
|
|
|
5
5
|
describe Distribution::F do
|
|
6
|
-
shared_examples_for
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
shared_examples_for 'F engine (with rng)' do
|
|
7
|
+
it 'should return correct rng' do
|
|
8
|
+
pending
|
|
9
|
+
end
|
|
9
10
|
end
|
|
10
|
-
end
|
|
11
11
|
|
|
12
|
-
shared_examples_for
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
shared_examples_for 'F engine (with pdf)' do
|
|
13
|
+
it_only_with_gsl 'should return correct pdf' do
|
|
14
|
+
if @engine.respond_to? :pdf
|
|
15
|
+
[0.1, 0.5, 1, 2, 10, 20, 30].each do |x|
|
|
16
|
+
[2, 5, 10].product([2, 5, 10]).each do |n, m|
|
|
17
|
+
expected_value = GSL::Ran.fdist_pdf(x, n, m)
|
|
18
|
+
expect(@engine.pdf(x, n, m)).to be_within(1e-4).of(expected_value)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
else
|
|
22
|
+
pending("No #{@engine}.pdf")
|
|
23
|
+
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
|
-
end
|
|
27
26
|
|
|
28
|
-
shared_examples_for
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
pending("No #{@engine}.cdf")
|
|
27
|
+
shared_examples_for 'F engine' do
|
|
28
|
+
it_only_with_gsl 'should return correct cdf' do
|
|
29
|
+
if @engine.respond_to? :cdf
|
|
30
|
+
[0.1, 0.5, 1, 2, 10, 20, 30].each do |f|
|
|
31
|
+
[2, 5, 10].each do |n2|
|
|
32
|
+
[2, 5, 10].each do |n1|
|
|
33
|
+
expect(@engine.cdf(f, n1, n2)).to be_within(1e-4).of(GSL::Cdf.fdist_P(f, n1, n2))
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
pending("No #{@engine}.cdf")
|
|
39
|
+
end
|
|
42
40
|
end
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
|
|
42
|
+
it_only_with_gsl 'should return correct p_value', focus: true do
|
|
43
|
+
if @engine.respond_to? :p_value
|
|
44
|
+
|
|
45
|
+
expected_value = GSL::Cdf.fdist_Pinv(0.975, 5, 4.189092917592713)
|
|
46
|
+
expect(@engine.p_value(0.975, 5, 4.189092917592713)).to be_within(1e-4).of(expected_value)
|
|
47
|
+
|
|
48
|
+
[0.1, 0.5, 1, 2, 10, 20, 30].each do |f|
|
|
49
|
+
[2, 5, 10].each do |n2|
|
|
50
|
+
[2, 5, 10].each do |n1|
|
|
51
|
+
area = @engine.cdf(f, n1, n2)
|
|
52
|
+
expected_value = GSL::Cdf.fdist_Pinv(area, n1, n2)
|
|
53
|
+
|
|
54
|
+
expect(@engine.p_value(area, n1, n2)).to be_within(1e-4).of(expected_value)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
else
|
|
59
|
+
pending("No #{@engine}.p_value")
|
|
60
|
+
end
|
|
60
61
|
end
|
|
61
62
|
end
|
|
62
|
-
end
|
|
63
63
|
|
|
64
|
-
describe
|
|
64
|
+
describe 'singleton' do
|
|
65
65
|
before do
|
|
66
|
-
@engine=Distribution::F
|
|
66
|
+
@engine = Distribution::F
|
|
67
67
|
end
|
|
68
|
-
|
|
69
|
-
it_should_behave_like
|
|
68
|
+
|
|
69
|
+
it_should_behave_like 'F engine'
|
|
70
|
+
it_should_behave_like 'F engine (with pdf)'
|
|
70
71
|
end
|
|
71
|
-
|
|
72
|
+
|
|
72
73
|
describe Distribution::F::Ruby_ do
|
|
73
74
|
before do
|
|
74
|
-
@engine=Distribution::F::Ruby_
|
|
75
|
+
@engine = Distribution::F::Ruby_
|
|
75
76
|
end
|
|
76
|
-
it_should_behave_like
|
|
77
|
-
it_should_behave_like
|
|
77
|
+
it_should_behave_like 'F engine'
|
|
78
|
+
it_should_behave_like 'F engine (with pdf)'
|
|
78
79
|
end
|
|
80
|
+
|
|
79
81
|
if Distribution.has_gsl?
|
|
80
82
|
describe Distribution::F::GSL_ do
|
|
81
83
|
before do
|
|
82
|
-
@engine=Distribution::F::GSL_
|
|
84
|
+
@engine = Distribution::F::GSL_
|
|
83
85
|
end
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
it_should_behave_like 'F engine'
|
|
87
|
+
it_should_behave_like 'F engine (with pdf)'
|
|
86
88
|
end
|
|
87
|
-
end
|
|
89
|
+
end
|
|
90
|
+
|
|
88
91
|
if Distribution.has_statistics2?
|
|
89
92
|
describe Distribution::F::Statistics2_ do
|
|
90
93
|
before do
|
|
91
|
-
@engine=Distribution::F::Statistics2_
|
|
94
|
+
@engine = Distribution::F::Statistics2_
|
|
92
95
|
end
|
|
93
|
-
|
|
94
|
-
end
|
|
96
|
+
it_should_behave_like 'F engine'
|
|
97
|
+
end
|
|
95
98
|
end
|
|
96
|
-
|
|
99
|
+
|
|
97
100
|
if Distribution.has_java?
|
|
98
101
|
describe Distribution::F::Java_ do
|
|
99
102
|
before do
|
|
100
|
-
@engine=Distribution::F::Java_
|
|
103
|
+
@engine = Distribution::F::Java_
|
|
101
104
|
end
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
end
|
|
105
|
+
it_should_behave_like 'F engine'
|
|
106
|
+
it_should_behave_like 'F engine (with pdf)'
|
|
107
|
+
end
|
|
105
108
|
end
|
|
106
|
-
|
|
107
109
|
end
|