From 459f23fc092ce978969f5793b59475f6566a9f81 Mon Sep 17 00:00:00 2001 From: oscarddssmith Date: Wed, 4 Feb 2026 17:44:39 -0500 Subject: [PATCH 1/2] add ntdistpdf --- src/distrs/ntdist.jl | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/distrs/ntdist.jl b/src/distrs/ntdist.jl index b1bbb1b1..839eb790 100644 --- a/src/distrs/ntdist.jl +++ b/src/distrs/ntdist.jl @@ -2,8 +2,6 @@ # R implementations using .RFunctions: - ntdistpdf, - ntdistlogpdf, ntdistcdf, ntdistccdf, ntdistlogcdf, @@ -12,3 +10,19 @@ using .RFunctions: ntdistinvccdf, ntdistinvlogcdf, ntdistinvlogccdf + +using SpecialFunctions: gamma + +function ntdistpdf(k::Real, λ::Real, x::Real) + return exp(ntdistlogpdf(k, λ, x)) +end + +ntdistlogpdf(k::Real, λ::Real, x::Real) = ntdistlogpdf(promote(k, λ, x)...) + +function ntdistlogpdf(k::T, λ::T, x::T) where {T<:Real} + tdistlogpdf(k, x) - λ^2 / 2 + + log(_₁F₁((k + 1) / 2, 1 / 2, (λ * x)^2 / (2 * muladd(x,x,k))) + + sqrt(2) * λ * x * gamma(k/2 +1) / (sqrt(muladd(x,x,k))*gamma((k+1)/2)) * + _₁F₁(k/2 + 1, 3/2, (λ * x)^2 / (2 * muladd(x,x,k))) + ) +end From 2930a6a94f96e90c663e6619443965999889979f Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Thu, 5 Feb 2026 22:20:53 -0500 Subject: [PATCH 2/2] types --- src/distrs/ntdist.jl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/distrs/ntdist.jl b/src/distrs/ntdist.jl index 839eb790..ef42444a 100644 --- a/src/distrs/ntdist.jl +++ b/src/distrs/ntdist.jl @@ -20,9 +20,10 @@ end ntdistlogpdf(k::Real, λ::Real, x::Real) = ntdistlogpdf(promote(k, λ, x)...) function ntdistlogpdf(k::T, λ::T, x::T) where {T<:Real} + ONE = one(T) + Av = _₁F₁((k + 1) / 2, ONE / 2, (λ * x)^2 / (2 * muladd(x, x, k))) + Bv = sqrt(2*ONE) * λ * x * gamma(k/2 +1) / (sqrt(muladd(x, x, k)) * gamma((k+1)/2)) * + _₁F₁(k/2 + 1, 3*ONE/2, (λ * x)^2 / (2 * muladd(x, x, k))) tdistlogpdf(k, x) - λ^2 / 2 + - log(_₁F₁((k + 1) / 2, 1 / 2, (λ * x)^2 / (2 * muladd(x,x,k))) + - sqrt(2) * λ * x * gamma(k/2 +1) / (sqrt(muladd(x,x,k))*gamma((k+1)/2)) * - _₁F₁(k/2 + 1, 3/2, (λ * x)^2 / (2 * muladd(x,x,k))) - ) + log(Av + Bv) end