Skip to content

Commit

Permalink
Fix mode of LKJCholesky (#1938)
Browse files Browse the repository at this point in the history
* Fix `mode` of `LKJCholesky` and define `mean(::LKJCholesky)`

* Remove definition of `mean(::LKJCholesky)`

* Also test boundary case η = 1

Co-authored-by: Seth Axen <[email protected]>

---------

Co-authored-by: Seth Axen <[email protected]>
  • Loading branch information
devmotion and sethaxen authored Jan 17, 2025
1 parent 07d1e78 commit 3b981a0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Distributions"
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
authors = ["JuliaStats"]
version = "0.25.116"
version = "0.25.117"

[deps]
AliasTables = "66dad0bd-aa9a-41b7-9441-69ab47430ed8"
Expand Down
7 changes: 6 additions & 1 deletion src/cholesky/lkjcholesky.jl
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,12 @@ function insupport(d::LKJCholesky, R::LinearAlgebra.Cholesky)
return true
end

function StatsBase.mode(d::LKJCholesky)
function mode(d::LKJCholesky; check_args::Bool=true)
@check_args(
LKJCholesky,
@setup= d.η),
(η, η > 1, "mode is defined only when η > 1."),
)
factors = Matrix{eltype(d)}(LinearAlgebra.I, size(d))
return LinearAlgebra.Cholesky(factors, d.uplo, 0)
end
Expand Down
11 changes: 9 additions & 2 deletions test/cholesky/lkjcholesky.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,21 @@ using FiniteDifferences
end

@testset "properties" begin
@testset for p in (4, 5), η in (2, 3.5), uplo in ('L', 'U')
@testset for p in (4, 5), η in (0.5, 1, 2, 3.5), uplo in ('L', 'U')
d = LKJCholesky(p, η, uplo)
@test d.d == p
@test size(d) == (p, p)
@test Distributions.params(d) == (d.d, d.η, d.uplo)
@test partype(d) <: Float64

m = mode(d)
if η > 1
m = mode(d)
@test m isa Cholesky{eltype(d)}
@test Matrix(m) I
else
@test_throws DomainError(η, "LKJCholesky: mode is defined only when η > 1.") mode(d)
end
m = mode(d; check_args = false)
@test m isa Cholesky{eltype(d)}
@test Matrix(m) I
end
Expand Down

0 comments on commit 3b981a0

Please sign in to comment.