@@ -47,24 +47,24 @@ quantile_bisect(d::ContinuousUnivariateDistribution, p::Real) =
47
47
# Distribution, with Application to the Inverse Gaussian Distribution
48
48
# http://www.statsci.org/smyth/pubs/qinvgaussPreprint.pdf
49
49
50
- function newton (f , xs:: T = mode (d), tol:: Real = 1e-12 ) where {T}
51
- x = xs - f (xs)
50
+ function newton (Δ , xs:: T = mode (d), tol:: Real = 1e-12 ) where {T}
51
+ x = xs - Δ (xs)
52
52
@assert typeof (x) === T
53
53
x0 = T (xs)
54
54
while abs (x- x0) > max (abs (x),abs (x0)) * tol
55
55
x0 = x
56
- x = x0 - f (x0)
56
+ x = x0 - Δ (x0)
57
57
end
58
58
return x
59
59
end
60
60
61
61
function quantile_newton (d:: ContinuousUnivariateDistribution , p:: Real , xs:: Real = mode (d), tol:: Real = 1e-12 )
62
- f (x) = - ((p - cdf (d, x)) / pdf (d, x))
62
+ Δ (x) = - ((p - cdf (d, x)) / pdf (d, x))
63
63
# FIXME : can this be expressed via `promote_type()`? Test coverage missing.
64
- x = xs - f (xs)
64
+ x = xs - Δ (xs)
65
65
T = typeof (x)
66
66
if 0 < p < 1
67
- return newton (f , T (xs), tol)
67
+ return newton (Δ , T (xs), tol)
68
68
elseif p == 0
69
69
return T (minimum (d))
70
70
elseif p == 1
@@ -75,12 +75,12 @@ function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=
75
75
end
76
76
77
77
function cquantile_newton (d:: ContinuousUnivariateDistribution , p:: Real , xs:: Real = mode (d), tol:: Real = 1e-12 )
78
- f (x) = - ((ccdf (d, x)- p) / pdf (d, x))
78
+ Δ (x) = - ((ccdf (d, x)- p) / pdf (d, x))
79
79
# FIXME : can this be expressed via `promote_type()`? Test coverage missing.
80
- x = xs - f (xs)
80
+ x = xs - Δ (xs)
81
81
T = typeof (x)
82
82
if 0 < p < 1
83
- return newton (f , T (xs), tol)
83
+ return newton (Δ , T (xs), tol)
84
84
elseif p == 1
85
85
return T (minimum (d))
86
86
elseif p == 0
92
92
93
93
function invlogcdf_newton (d:: ContinuousUnivariateDistribution , lp:: Real , xs:: Real = mode (d), tol:: Real = 1e-12 )
94
94
T = typeof (lp - logpdf (d,xs))
95
- f_a (x) = exp (lp - logpdf (d,x) + logexpm1 (max (logcdf (d,x)- lp,0 )))
96
- f_b (x) = - exp (lp - logpdf (d,x) + log1mexp (min (logcdf (d,x)- lp,0 )))
95
+ Δ_ver0 (x) = exp (lp - logpdf (d,x) + logexpm1 (max (logcdf (d,x)- lp,0 )))
96
+ Δ_ver1 (x) = - exp (lp - logpdf (d,x) + log1mexp (min (logcdf (d,x)- lp,0 )))
97
97
if - Inf < lp < 0
98
98
x0 = T (xs)
99
99
if lp < logcdf (d,x0)
100
- return newton (f_a , T (xs), tol)
100
+ return newton (Δ_ver0 , T (xs), tol)
101
101
else
102
- return newton (f_b , T (xs), tol)
102
+ return newton (Δ_ver1 , T (xs), tol)
103
103
end
104
104
return x
105
105
elseif lp == - Inf
@@ -113,14 +113,14 @@ end
113
113
114
114
function invlogccdf_newton (d:: ContinuousUnivariateDistribution , lp:: Real , xs:: Real = mode (d), tol:: Real = 1e-12 )
115
115
T = typeof (lp - logpdf (d,xs))
116
- f_a (x) = - exp (lp - logpdf (d,x) + logexpm1 (max (logccdf (d,x)- lp,0 )))
117
- f_b (x) = exp (lp - logpdf (d,x) + log1mexp (min (logccdf (d,x)- lp,0 )))
116
+ Δ_ver0 (x) = - exp (lp - logpdf (d,x) + logexpm1 (max (logccdf (d,x)- lp,0 )))
117
+ Δ_ver1 (x) = exp (lp - logpdf (d,x) + log1mexp (min (logccdf (d,x)- lp,0 )))
118
118
if - Inf < lp < 0
119
119
x0 = T (xs)
120
120
if lp < logccdf (d,x0)
121
- return newton (f_a , T (xs), tol)
121
+ return newton (Δ_ver0 , T (xs), tol)
122
122
else
123
- return newton (f_b , T (xs), tol)
123
+ return newton (Δ_ver1 , T (xs), tol)
124
124
end
125
125
return x
126
126
elseif lp == - Inf
0 commit comments