rubystats 0.2.6 → 0.3.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 +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
|