rubystats 0.2.6 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/README.rdoc +17 -6
- data/examples/uniform.rb +14 -0
- data/lib/rubystats.rb +29 -0
- data/lib/rubystats/beta_distribution.rb +4 -0
- data/lib/rubystats/binomial_distribution.rb +42 -131
- data/lib/rubystats/cauchy_distribution.rb +50 -0
- data/lib/rubystats/exponential_distribution.rb +2 -2
- data/lib/rubystats/gamma_distribution.rb +70 -0
- data/lib/rubystats/lognormal_distribution.rb +59 -0
- data/lib/rubystats/modules.rb +6 -0
- data/lib/rubystats/multivariate_normal_distribution.rb +73 -0
- data/lib/rubystats/normal_distribution.rb +2 -2
- data/lib/rubystats/poisson_distribution.rb +78 -0
- data/lib/rubystats/probability_distribution.rb +3 -3
- data/lib/rubystats/student_t_distribution.rb +62 -0
- data/lib/rubystats/uniform_distribution.rb +70 -0
- data/lib/rubystats/version.rb +1 -1
- data/lib/rubystats/weibull_distribution.rb +56 -0
- data/test/tc_beta.rb +21 -0
- data/test/tc_binomial.rb +14 -0
- data/test/tc_cauchy.rb +39 -0
- data/test/tc_exponential.rb +10 -0
- data/test/tc_gamma.rb +39 -0
- data/test/tc_lnorm.rb +45 -0
- data/test/tc_multivariate_normal.rb +53 -0
- data/test/tc_norm.rb +11 -1
- data/test/tc_poisson.rb +35 -0
- data/test/tc_studentt.rb +43 -0
- data/test/tc_unif.rb +48 -0
- data/test/tc_weibull.rb +51 -0
- metadata +27 -2
data/test/tc_beta.rb
CHANGED
@@ -96,5 +96,26 @@ class TestBeta < MiniTest::Unit::TestCase
|
|
96
96
|
ucl=bin.icdf(1-alpha)
|
97
97
|
return ucl
|
98
98
|
end
|
99
|
+
|
100
|
+
def test_rng_distribution
|
101
|
+
p = 4.0
|
102
|
+
q = 12.0
|
103
|
+
beta = Rubystats::BetaDistribution.new(p,q)
|
104
|
+
|
105
|
+
total = 10000
|
106
|
+
values = Array.new(total).map{ beta.rng }
|
107
|
+
|
108
|
+
mean = values.inject(0.0) {|sum,v| sum + v} / values.size
|
109
|
+
assert_in_epsilon 0.25, mean.round(2), 0.01
|
110
|
+
end
|
99
111
|
|
112
|
+
def test_integer_input
|
113
|
+
pi, qi = 2, 4
|
114
|
+
pf, qf = 2.0, 4.0
|
115
|
+
x = 0.25
|
116
|
+
dbetai = Rubystats::BetaDistribution.new(pi,qi).pdf(x)
|
117
|
+
dbetaf = Rubystats::BetaDistribution.new(pf,qf).pdf(x)
|
118
|
+
assert_in_delta dbetai, dbetaf, 0.00000001
|
119
|
+
end
|
120
|
+
|
100
121
|
end
|
data/test/tc_binomial.rb
CHANGED
@@ -10,13 +10,27 @@ class TestBinomial < MiniTest::Unit::TestCase
|
|
10
10
|
|
11
11
|
bin = Rubystats::BinomialDistribution.new(t,p)
|
12
12
|
cdf = bin.cdf(f)
|
13
|
+
pmf = bin.pmf(f)
|
13
14
|
pdf = bin.pdf(f)
|
14
15
|
mean = bin.mean
|
15
16
|
inv_cdf = bin.icdf(cdf)
|
16
17
|
|
18
|
+
assert_equal pmf, pdf
|
17
19
|
assert_in_delta(0.10602553736479, pdf, 0.00000000000001 )
|
18
20
|
assert_in_delta(0.87203952137960, cdf, 0.00000000000001)
|
19
21
|
assert_equal("5.0",mean.to_s)
|
20
22
|
assert_equal(f,inv_cdf)
|
21
23
|
end
|
24
|
+
|
25
|
+
def test_rng
|
26
|
+
t, p = 100, 0.75
|
27
|
+
bin = Rubystats::BinomialDistribution.new(t,p)
|
28
|
+
|
29
|
+
rngs = []
|
30
|
+
n = 1000
|
31
|
+
n.times { rngs << bin.rng.to_f }
|
32
|
+
avg = rngs.reduce(:+) / rngs.size
|
33
|
+
|
34
|
+
assert_in_delta(avg, bin.mean, 0.5)
|
35
|
+
end
|
22
36
|
end
|
data/test/tc_cauchy.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/cauchy_distribution'
|
4
|
+
|
5
|
+
class TestCauchy < MiniTest::Unit::TestCase
|
6
|
+
def test_simple
|
7
|
+
location = 0.0
|
8
|
+
scale = 0.5
|
9
|
+
cd = Rubystats::CauchyDistribution.new(location,scale)
|
10
|
+
assert_in_delta(0.6366198, cd.pdf(0.0), 0.000001)
|
11
|
+
assert_in_delta(0.5, cd.cdf(0.0), 0.00000001)
|
12
|
+
assert_in_delta(3.169765, cd.icdf(0.9502), 0.000001)
|
13
|
+
|
14
|
+
# make sure the mean of RNG values is close to the expected mean
|
15
|
+
rngs = []
|
16
|
+
n = 10000
|
17
|
+
n.times {|i| rngs << cd.rng }
|
18
|
+
quantile = rngs.sort[(0.75*rngs.size).ceil]
|
19
|
+
assert_in_delta(quantile, 0.5, 0.1)
|
20
|
+
|
21
|
+
x_vals = [-2.0, -1.0, -0.5, 0.0, 0.5, 1.0, 2.0]
|
22
|
+
|
23
|
+
x_vals.each do |x|
|
24
|
+
cdf = cd.cdf(x)
|
25
|
+
inv_cdf = cd.icdf(cdf)
|
26
|
+
assert_in_delta(x, inv_cdf, 0.00000001)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_integer_input
|
31
|
+
locationi, scalei = 3, 1
|
32
|
+
locationf, scalef = 3.0, 1.0
|
33
|
+
xi = 4
|
34
|
+
xf = 4.0
|
35
|
+
dcdi = Rubystats::CauchyDistribution.new(locationi,scalei).pdf(xi)
|
36
|
+
dcdf = Rubystats::CauchyDistribution.new(locationf,scalef).pdf(xf)
|
37
|
+
assert_in_delta dcdi, dcdf, 0.00000001
|
38
|
+
end
|
39
|
+
end
|
data/test/tc_exponential.rb
CHANGED
@@ -57,4 +57,14 @@ class TestExponential < MiniTest::Unit::TestCase
|
|
57
57
|
assert_in_delta(x, inv_cdf, 0.00000001)
|
58
58
|
end
|
59
59
|
end
|
60
|
+
|
61
|
+
def test_integer_input
|
62
|
+
lambdai = 2
|
63
|
+
lambdaf = 2.0
|
64
|
+
xi = 3
|
65
|
+
xf = 3.0
|
66
|
+
dexpi = Rubystats::ExponentialDistribution.new(lambdai).pdf(xi)
|
67
|
+
dexpf = Rubystats::ExponentialDistribution.new(lambdaf).pdf(xf)
|
68
|
+
assert_in_delta dexpi, dexpf, 0.00000001
|
69
|
+
end
|
60
70
|
end
|
data/test/tc_gamma.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/gamma_distribution'
|
4
|
+
|
5
|
+
class TestGamma < MiniTest::Unit::TestCase
|
6
|
+
def test_simple
|
7
|
+
shape = 3.0
|
8
|
+
scale = 2.0
|
9
|
+
gamma = Rubystats::GammaDistribution.new(shape,scale)
|
10
|
+
|
11
|
+
#check properties
|
12
|
+
assert_in_delta(6.0, gamma.mean, 0.000001)
|
13
|
+
assert_in_delta(12.0, gamma.variance, 0.000001)
|
14
|
+
|
15
|
+
#check distributions
|
16
|
+
assert_in_delta(0.0, gamma.pdf(0.0), 0.000001)
|
17
|
+
assert_in_delta(0.1353353, gamma.pdf(4.0), 0.000001)
|
18
|
+
assert_in_delta(0.001134998, gamma.pdf(20.0), 0.000001)
|
19
|
+
assert_in_delta(0.5768099, gamma.cdf(6.0), 0.01)
|
20
|
+
assert_in_delta(0.986246, gamma.cdf(16.0), 0.01)
|
21
|
+
|
22
|
+
# make sure the mean of RNG values is close to the expected mean
|
23
|
+
rngs = []
|
24
|
+
n = 10000
|
25
|
+
n.times {|i| rngs << gamma.rng }
|
26
|
+
quantile = rngs.sort[(0.75*rngs.size).ceil]
|
27
|
+
assert_in_delta(quantile, 7.84080, 0.2)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_integer_input
|
31
|
+
shapei, scalei = 3, 1
|
32
|
+
shapef, scalef = 3.0, 1.0
|
33
|
+
xi = 4
|
34
|
+
xf = 4.0
|
35
|
+
pdfi = Rubystats::GammaDistribution.new(shapei,scalei).pdf(xi)
|
36
|
+
pdff = Rubystats::GammaDistribution.new(shapef,scalef).pdf(xf)
|
37
|
+
assert_in_delta pdfi, pdff, 0.00000001
|
38
|
+
end
|
39
|
+
end
|
data/test/tc_lnorm.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/lognormal_distribution'
|
4
|
+
|
5
|
+
class TestLognormal < MiniTest::Unit::TestCase
|
6
|
+
def test_cdf_pdf
|
7
|
+
lnorm = Rubystats::LognormalDistribution.new(2.0,0.2)
|
8
|
+
|
9
|
+
cdf = lnorm.cdf(8.0)
|
10
|
+
assert_in_epsilon cdf, 0.654392, 0.0001, "cdf"
|
11
|
+
|
12
|
+
pdf = lnorm.pdf(8.0)
|
13
|
+
assert_in_epsilon pdf, 0.2304252, 0.000001, "pdf"
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_properties
|
18
|
+
lnorm = Rubystats::LognormalDistribution.new(2.0,0.2)
|
19
|
+
assert_in_epsilon lnorm.mean, 7.538325, 0.000001, "mean"
|
20
|
+
assert_in_epsilon lnorm.variance, 2.319127, 0.000001, "variance"
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_rng
|
24
|
+
lnorm = Rubystats::LognormalDistribution.new(2.0,0.2)
|
25
|
+
|
26
|
+
total = 100000
|
27
|
+
values = Array.new(total).map{lnorm.rng}
|
28
|
+
|
29
|
+
mean = values.inject(0.0) {|sum, v| sum + v} / values.size
|
30
|
+
|
31
|
+
assert_in_delta mean, 7.538325, 0.1, "rng mean"
|
32
|
+
assert_equal values.min >= 0.0, true, "rng min value"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_integer_input
|
36
|
+
meani, sdi = 2, 1
|
37
|
+
meanf, sdf = 2.0, 1.0
|
38
|
+
xi = 9
|
39
|
+
xf = 9.0
|
40
|
+
dlnormi = Rubystats::LognormalDistribution.new(meani,sdi).pdf(xi)
|
41
|
+
dlnormf = Rubystats::LognormalDistribution.new(meanf,sdf).pdf(xf)
|
42
|
+
assert_in_delta dlnormi, dlnormf, 0.000001
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/multivariate_normal_distribution'
|
4
|
+
|
5
|
+
class TestMultivariateNormal < MiniTest::Unit::TestCase
|
6
|
+
def test_simple
|
7
|
+
mu = [1.3,-2.5]
|
8
|
+
sigma = [[1.0,0.3],[0.3,1.0]]
|
9
|
+
|
10
|
+
mvnorm = Rubystats::MultivariateNormalDistribution.new(mu,sigma)
|
11
|
+
|
12
|
+
assert_in_delta(0.0001340771, mvnorm.pdf([1.0,1.0]), 0.000001)
|
13
|
+
assert_in_delta(0.131732, mvnorm.pdf([1.0,-2.0]), 0.000001)
|
14
|
+
|
15
|
+
|
16
|
+
# make sure the mean of RNG values is close to the expected mean
|
17
|
+
rngs = []
|
18
|
+
n = 5000
|
19
|
+
n.times {|i| rngs << mvnorm.rng }
|
20
|
+
|
21
|
+
a,b = rngs.transpose
|
22
|
+
|
23
|
+
#check means
|
24
|
+
mean_a = a.inject(0.0) {|sum,x| sum + x} / a.size
|
25
|
+
assert_in_delta(1.3, mean_a, 0.1)
|
26
|
+
|
27
|
+
mean_b = b.inject(0.0) {|sum,x| sum + x} / b.size
|
28
|
+
assert_in_delta(1.3, mean_a, 0.1)
|
29
|
+
|
30
|
+
#check variances
|
31
|
+
var_a = a.inject(0.0) {|sum,x| sum + (x - mean_a)**2 } / a.size
|
32
|
+
assert_in_delta(1.0, var_a, 0.1)
|
33
|
+
|
34
|
+
var_b = b.inject(0.0) {|sum,x| sum + (x - mean_b)**2 } / b.size
|
35
|
+
assert_in_delta(1.0, var_b, 0.1)
|
36
|
+
|
37
|
+
#check correlation
|
38
|
+
covariance = a.zip(b).map{|xa,xb| (xa-mean_a)*(xb-mean_b)}.inject(0.0){|sum,x| sum + x} / a.size
|
39
|
+
correlation = covariance / Math.sqrt(var_a * var_b)
|
40
|
+
assert_in_delta(0.3, correlation, 0.1)
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_integer_input
|
45
|
+
mui, sigmai = [1,2], [[1,0.3],[0.3,1]]
|
46
|
+
muf, sigmaf = [1.0,2.0], [[1.0,0.3],[0.3,1.0]]
|
47
|
+
xi = [1,1]
|
48
|
+
xf = [1.0,1.0]
|
49
|
+
dmvnormi = Rubystats::MultivariateNormalDistribution.new(mui,sigmai).pdf(xi)
|
50
|
+
dmvnormf = Rubystats::MultivariateNormalDistribution.new(muf,sigmaf).pdf(xf)
|
51
|
+
assert_in_delta dmvnormi, dmvnormf, 0.00000001
|
52
|
+
end
|
53
|
+
end
|
data/test/tc_norm.rb
CHANGED
@@ -28,6 +28,16 @@ class TestNormal < MiniTest::Unit::TestCase
|
|
28
28
|
|
29
29
|
three_sigma = two_sigma + histogram[7] + histogram[12]
|
30
30
|
assert_in_epsilon 0.997300203937 , three_sigma.to_f / total, 0.005, 'the 3-sigma-environment should contain 99.7%'
|
31
|
-
|
32
31
|
end
|
32
|
+
|
33
|
+
def test_integer_input
|
34
|
+
meani, sdi = 10, 2
|
35
|
+
meanf, sdf = 10.0, 2.0
|
36
|
+
xi = 11
|
37
|
+
xf = 11.0
|
38
|
+
dnormi = Rubystats::NormalDistribution.new(meani,sdi).pdf(xi)
|
39
|
+
dnormf = Rubystats::NormalDistribution.new(meanf,sdf).pdf(xf)
|
40
|
+
assert_in_delta dnormi, dnormf, 0.00000001
|
41
|
+
end
|
42
|
+
|
33
43
|
end
|
data/test/tc_poisson.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/poisson_distribution'
|
4
|
+
|
5
|
+
class TestPoisson < MiniTest::Unit::TestCase
|
6
|
+
def test_simple
|
7
|
+
rate = 3.5
|
8
|
+
k = 6
|
9
|
+
|
10
|
+
pois = Rubystats::PoissonDistribution.new(rate)
|
11
|
+
cdf = pois.cdf(k)
|
12
|
+
pmf = pois.pmf(k)
|
13
|
+
pdf = pois.pdf(k)
|
14
|
+
mean = pois.mean
|
15
|
+
inv_cdf = pois.icdf(cdf)
|
16
|
+
|
17
|
+
assert_equal pmf, pdf
|
18
|
+
assert_in_delta(0.0770984, pdf, 0.0000001 )
|
19
|
+
assert_in_delta(0.9347119, cdf, 0.0000001)
|
20
|
+
assert_equal(k,inv_cdf)
|
21
|
+
assert_equal(3.5,mean)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_rng
|
25
|
+
rate = 3.5
|
26
|
+
pois = Rubystats::PoissonDistribution.new(rate)
|
27
|
+
|
28
|
+
rngs = []
|
29
|
+
n = 1000
|
30
|
+
n.times { rngs << pois.rng.to_f }
|
31
|
+
avg = rngs.reduce(:+) / rngs.size
|
32
|
+
|
33
|
+
assert_in_delta(avg, pois.mean, 0.5)
|
34
|
+
end
|
35
|
+
end
|
data/test/tc_studentt.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/student_t_distribution'
|
4
|
+
|
5
|
+
class TestStudentT < MiniTest::Unit::TestCase
|
6
|
+
def test_pdf
|
7
|
+
t = Rubystats::StudentTDistribution.new(8)
|
8
|
+
|
9
|
+
pdf = t.pdf(0.0)
|
10
|
+
assert_in_epsilon pdf, 0.386699, 0.000001, "pdf"
|
11
|
+
|
12
|
+
pdf = t.pdf(1.0)
|
13
|
+
assert_in_epsilon pdf, 0.2276076, 0.000001, "pdf"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_properties
|
17
|
+
t = Rubystats::StudentTDistribution.new(8)
|
18
|
+
assert_in_epsilon t.mean, 0.0, 0.01, "mean"
|
19
|
+
assert_in_epsilon t.variance, 1.333, 0.01, "variance"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_rng
|
23
|
+
t = Rubystats::StudentTDistribution.new(8)
|
24
|
+
|
25
|
+
total = 100000
|
26
|
+
values = Array.new(total).map{t.rng}
|
27
|
+
|
28
|
+
mean = values.inject(0.0) {|sum, v| sum + v} / values.size
|
29
|
+
assert_in_delta mean, 0.0, 0.1, "rng mean"
|
30
|
+
|
31
|
+
var = values.inject(0.0) {|sum, v| sum + (v - mean)**2} / values.size
|
32
|
+
assert_in_delta var, 8.0/(8.0-2.0), 0.1, "rng mean"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_integer_input
|
36
|
+
dfi, dff = 8, 8.0
|
37
|
+
xi,xf = 1, 1.0
|
38
|
+
dti = Rubystats::StudentTDistribution.new(dfi).pdf(xi)
|
39
|
+
dtf = Rubystats::StudentTDistribution.new(dff).pdf(xf)
|
40
|
+
assert_in_delta dti, dtf, 0.000001
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/test/tc_unif.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/uniform_distribution'
|
4
|
+
|
5
|
+
class TestUnif < MiniTest::Unit::TestCase
|
6
|
+
def test_cdf
|
7
|
+
|
8
|
+
unif = Rubystats::UniformDistribution.new(1,6)
|
9
|
+
cdf = unif.cdf(2.5)
|
10
|
+
|
11
|
+
assert_equal 0.3, cdf
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_pdf
|
15
|
+
unif = Rubystats::UniformDistribution.new(1.0, 6.0)
|
16
|
+
|
17
|
+
pdf = unif.pdf(2.5)
|
18
|
+
assert_equal 0.2, pdf
|
19
|
+
|
20
|
+
pdf_out_of_lower_bounds = unif.pdf(0.0)
|
21
|
+
assert_equal 0.0, pdf_out_of_lower_bounds
|
22
|
+
|
23
|
+
pdf_out_of_upper_bounds = unif.pdf(8.0)
|
24
|
+
assert_equal 0.0, pdf_out_of_upper_bounds
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_rng
|
28
|
+
lower, upper = 1,6
|
29
|
+
unif = Rubystats::UniformDistribution.new(lower,upper)
|
30
|
+
|
31
|
+
total = 10000
|
32
|
+
values = Array.new(total).map{unif.rng}
|
33
|
+
|
34
|
+
assert_equal values.min >= lower, true
|
35
|
+
assert_equal values.max <= upper, true
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_integer_input
|
39
|
+
loweri, upperi = 1, 6
|
40
|
+
lowerf, upperf = 1.0, 6.0
|
41
|
+
xi = 3
|
42
|
+
xf = 3.0
|
43
|
+
dunifi = Rubystats::NormalDistribution.new(loweri,upperi).pdf(xi)
|
44
|
+
duniff = Rubystats::NormalDistribution.new(lowerf,upperf).pdf(xf)
|
45
|
+
assert_in_delta dunifi, duniff, 0.00000001
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/test/tc_weibull.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'rubystats/weibull_distribution'
|
4
|
+
|
5
|
+
class TestWeibull < MiniTest::Unit::TestCase
|
6
|
+
def test_simple
|
7
|
+
scale = 6.0
|
8
|
+
shape = 4.0
|
9
|
+
wbd = Rubystats::WeibullDistribution.new(scale,shape)
|
10
|
+
assert_in_delta(5.438415, wbd.mean, 0.000001)
|
11
|
+
assert_in_delta(2.327813, wbd.variance, 0.000001)
|
12
|
+
assert_in_delta(0.0243884, wbd.pdf(2.0), 0.000001)
|
13
|
+
assert_in_delta(0.2381909, wbd.pdf(5.0), 0.000001)
|
14
|
+
assert_in_delta(0.3826092, wbd.cdf(5.0), 0.000001)
|
15
|
+
# make sure the mean of RNG values is close to the expected mean
|
16
|
+
rngs = []
|
17
|
+
n = 10000
|
18
|
+
n.times {|i| rngs << wbd.rng }
|
19
|
+
avg = rngs.inject(0.0) {|sum,x|sum + x} / rngs.size
|
20
|
+
assert_in_delta(avg, 5.438415, 0.1)
|
21
|
+
|
22
|
+
x_vals = [0.5, 1, 1.5, 2, 2.5, 3, 3.5]
|
23
|
+
|
24
|
+
p_vals = wbd.pdf(x_vals)
|
25
|
+
c_vals = wbd.cdf(x_vals)
|
26
|
+
|
27
|
+
expected_pvals = [0.00038578, 0.00308404, 0.01037606, 0.02438840, 0.04679345, 0.07828442, 0.11786168]
|
28
|
+
expected_cvals = [0.00004822, 0.00077131, 0.00389863, 0.01226978, 0.02969111, 0.06058694, 0.10933684]
|
29
|
+
|
30
|
+
x_vals.size.times do |i|
|
31
|
+
assert_in_delta expected_pvals[i], p_vals[i], 0.000001
|
32
|
+
assert_in_delta expected_cvals[i], c_vals[i], 0.000001
|
33
|
+
end
|
34
|
+
|
35
|
+
x_vals.each do |x|
|
36
|
+
cdf = wbd.cdf(x)
|
37
|
+
inv_cdf = wbd.icdf(cdf)
|
38
|
+
assert_in_delta(x, inv_cdf, 0.00000001)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_integer_input
|
43
|
+
scalei,shapei = 6, 4
|
44
|
+
scalef,shapef = 6.0, 4.0
|
45
|
+
xi = 3
|
46
|
+
xf = 3.0
|
47
|
+
dwbi = Rubystats::WeibullDistribution.new(scalei,shapei).pdf(xi)
|
48
|
+
dwbf = Rubystats::WeibullDistribution.new(scalef,shapef).pdf(xf)
|
49
|
+
assert_in_delta dwbi, dwbf, 0.000001
|
50
|
+
end
|
51
|
+
end
|