Skip to content

Commit 02b0f4a

Browse files
committed
newton(): f() is more of a function to calculate the actual delta
1 parent 52b5b54 commit 02b0f4a

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/quantilealgs.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,24 @@ quantile_bisect(d::ContinuousUnivariateDistribution, p::Real) =
4949
# Distribution, with Application to the Inverse Gaussian Distribution
5050
# http://www.statsci.org/smyth/pubs/qinvgaussPreprint.pdf
5151

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)
5454
@assert typeof(x) === T
5555
x0 = T(xs)
5656
while abs(x-x0) > max(abs(x),abs(x0)) * tol
5757
x0 = x
58-
x = x0 - f(x0)
58+
x = x0 - Δ(x0)
5959
end
6060
return x
6161
end
6262

6363
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))
6565
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
66-
x = xs - f(xs)
66+
x = xs - Δ(xs)
6767
T = typeof(x)
6868
if 0 < p < 1
69-
return newton(f, T(xs), tol)
69+
return newton(Δ, T(xs), tol)
7070
elseif p == 0
7171
return T(minimum(d))
7272
elseif p == 1
@@ -77,12 +77,12 @@ function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=
7777
end
7878

7979
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))
8181
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
82-
x = xs - f(xs)
82+
x = xs - Δ(xs)
8383
T = typeof(x)
8484
if 0 < p < 1
85-
return newton(f, T(xs), tol)
85+
return newton(Δ, T(xs), tol)
8686
elseif p == 1
8787
return T(minimum(d))
8888
elseif p == 0
@@ -94,14 +94,14 @@ end
9494

9595
function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
9696
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)))
9999
if -Inf < lp < 0
100100
x0 = T(xs)
101101
if lp < logcdf(d,x0)
102-
return newton(f_a, T(xs), tol)
102+
return newton(Δ_ver0, T(xs), tol)
103103
else
104-
return newton(f_b, T(xs), tol)
104+
return newton(Δ_ver1, T(xs), tol)
105105
end
106106
return x
107107
elseif lp == -Inf
@@ -115,14 +115,14 @@ end
115115

116116
function invlogccdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
117117
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)))
120120
if -Inf < lp < 0
121121
x0 = T(xs)
122122
if lp < logccdf(d,x0)
123-
return newton(f_a, T(xs), tol)
123+
return newton(Δ_ver0, T(xs), tol)
124124
else
125-
return newton(f_b, T(xs), tol)
125+
return newton(Δ_ver1, T(xs), tol)
126126
end
127127
return x
128128
elseif lp == -Inf

0 commit comments

Comments
 (0)