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