Skip to content

Commit fd6017d

Browse files
committed
newton(): f() is more of a function to calculate the actual delta
1 parent b97bfca commit fd6017d

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
@@ -47,24 +47,24 @@ quantile_bisect(d::ContinuousUnivariateDistribution, p::Real) =
4747
# Distribution, with Application to the Inverse Gaussian Distribution
4848
# http://www.statsci.org/smyth/pubs/qinvgaussPreprint.pdf
4949

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

6161
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))
6363
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
64-
x = xs - f(xs)
64+
x = xs - Δ(xs)
6565
T = typeof(x)
6666
if 0 < p < 1
67-
return newton(f, T(xs), tol)
67+
return newton(Δ, T(xs), tol)
6868
elseif p == 0
6969
return T(minimum(d))
7070
elseif p == 1
@@ -75,12 +75,12 @@ function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=
7575
end
7676

7777
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))
7979
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
80-
x = xs - f(xs)
80+
x = xs - Δ(xs)
8181
T = typeof(x)
8282
if 0 < p < 1
83-
return newton(f, T(xs), tol)
83+
return newton(Δ, T(xs), tol)
8484
elseif p == 1
8585
return T(minimum(d))
8686
elseif p == 0
@@ -92,14 +92,14 @@ end
9292

9393
function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
9494
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)))
9797
if -Inf < lp < 0
9898
x0 = T(xs)
9999
if lp < logcdf(d,x0)
100-
return newton(f_a, T(xs), tol)
100+
return newton(Δ_ver0, T(xs), tol)
101101
else
102-
return newton(f_b, T(xs), tol)
102+
return newton(Δ_ver1, T(xs), tol)
103103
end
104104
return x
105105
elseif lp == -Inf
@@ -113,14 +113,14 @@ end
113113

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

0 commit comments

Comments
 (0)