Skip to content

Commit d065f06

Browse files
committed
further doc-string fixes
1 parent 608e0d9 commit d065f06

File tree

2 files changed

+57
-25
lines changed

2 files changed

+57
-25
lines changed

src/arrays.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ function Base.Broadcast.broadcasted(::typeof(mode),
254254
return reshape(mode_flat, size(u))
255255
end
256256

257+
257258
## EXTENSION OF CLASSES TO ARRAYS OF UNIVARIATE FINITE
258259

259260
# We already have `classes(::UnivariateFininiteArray)
@@ -266,3 +267,5 @@ function classes(yhat::AbstractArray{<:Union{Missing,UnivariateFinite}})
266267
i === nothing && throw(ERR_EMPTY_UNIVARIATE_FINITE)
267268
return classes(yhat[i])
268269
end
270+
271+

src/types.jl

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ generated.
1515
1616
Here the word "probabilities" is an abuse of terminology as there is
1717
no requirement that the that probabilities actually sum to one. Indeed
18-
there is no restriction on the probablities at all. In particular,
18+
there is no restriction on the probabilities at all. In particular,
1919
`UnivariateFinite` objects implement arbitrary non-negative, signed,
2020
or complex measures over finite sets of labelled points. A
2121
`UnivariateDistribution` will be a bona fide probability measure when
@@ -40,28 +40,37 @@ constructor then returns an array of `UnivariateFinite` distributions
4040
of size `(n1, n2, ..., nk)`.
4141
4242
```
43-
using CategoricalArrays
44-
v = categorical([:x, :x, :y, :x, :z])
45-
46-
julia> UnivariateFinite(classes(v), [0.2, 0.3, 0.5])
47-
UnivariateFinite{Multiclass{3}}(x=>0.2, y=>0.3, z=>0.5)
48-
49-
julia> d = UnivariateFinite([v[1], v[end]], [0.1, 0.9])
43+
using CategoricalDistributions, CategoricalArrays, Distributions
44+
samples = categorical(['x', 'x', 'y', 'x', 'z'])
45+
julia> Distributions.fit(UnivariateFinite, samples)
46+
UnivariateFinite{Multiclass{3}}
47+
┌ ┐
48+
x ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.6
49+
y ┤■■■■■■■■■■■■ 0.2
50+
z ┤■■■■■■■■■■■■ 0.2
51+
└ ┘
52+
53+
julia> d = UnivariateFinite([samples[1], samples[end]], [0.1, 0.9])
5054
UnivariateFinite{Multiclass{3}(x=>0.1, z=>0.9)
55+
UnivariateFinite{Multiclass{3}}
56+
┌ ┐
57+
x ┤■■■■ 0.1
58+
z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
59+
└ ┘
5160
5261
julia> rand(d, 3)
5362
3-element Array{Any,1}:
54-
CategoricalArrays.CategoricalValue{Symbol,UInt32} :z
55-
CategoricalArrays.CategoricalValue{Symbol,UInt32} :z
56-
CategoricalArrays.CategoricalValue{Symbol,UInt32} :z
63+
CategoricalValue{Symbol,UInt32} 'z'
64+
CategoricalValue{Symbol,UInt32} 'z'
65+
CategoricalValue{Symbol,UInt32} 'z'
5766
58-
julia> levels(d)
67+
julia> levels(samples)
5968
3-element Array{Symbol,1}:
60-
:x
61-
:y
62-
:z
69+
'x'
70+
'y'
71+
'z'
6372
64-
julia> pdf(d, :y)
73+
julia> pdf(d, 'y')
6574
0.0
6675
```
6776
@@ -80,19 +89,27 @@ In the last case, specify `ordered=true` if the pool is to be
8089
considered ordered.
8190
8291
```
83-
julia> UnivariateFinite([:x, :z], [0.1, 0.9], pool=missing, ordered=true)
84-
UnivariateFinite{OrderedFactor{2}}(x=>0.1, z=>0.9)
85-
86-
julia> d = UnivariateFinite([:x, :z], [0.1, 0.9], pool=v) # v defined above
87-
UnivariateFinite(x=>0.1, z=>0.9) (Multiclass{3} samples)
88-
89-
julia> pdf(d, :y) # allowed as `:y in levels(v)`
92+
julia> UnivariateFinite(['x', 'z'], [0.1, 0.9], pool=missing, ordered=true)
93+
UnivariateFinite{OrderedFactor{2}}
94+
┌ ┐
95+
x ┤■■■■ 0.1
96+
z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
97+
└ ┘
98+
99+
samples = categorical(['x', 'x', 'y', 'x', 'z'])
100+
julia> d = UnivariateFinite(['x', 'z'], [0.1, 0.9], pool=samples)
101+
┌ ┐
102+
x ┤■■■■ 0.1
103+
z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
104+
└ ┘
105+
106+
julia> pdf(d, 'y') # allowed as `'y' in levels(samples)`
90107
0.0
91108
92-
v = categorical([:x, :x, :y, :x, :z, :w])
109+
v = categorical(['x', 'x', 'y', 'x', 'z', 'w'])
93110
probs = rand(100, 3)
94111
probs = probs ./ sum(probs, dims=2)
95-
julia> UnivariateFinite([:x, :y, :z], probs, pool=v)
112+
julia> d1 = UnivariateFinite(['x', 'y', 'z'], probs, pool=v)
96113
100-element UnivariateFiniteVector{Multiclass{4},Symbol,UInt32,Float64}:
97114
UnivariateFinite{Multiclass{4}}(x=>0.194, y=>0.3, z=>0.505)
98115
UnivariateFinite{Multiclass{4}}(x=>0.727, y=>0.234, z=>0.0391)
@@ -110,6 +127,18 @@ for the classes `c2, c3, ..., cn`. The class `c1` probabilities are
110127
chosen so that each `UnivariateFinite` distribution in the returned
111128
array is a bona fide probability distribution.
112129
130+
```julia
131+
julia> UnivariateFinite([0.1, 0.2, 0.3], augment=true, pool=missing)
132+
3-element UnivariateFiniteArray{Multiclass{2}, String, UInt8, Float64, 1}:
133+
UnivariateFinite{Multiclass{2}}(class_1=>0.9, class_2=>0.1)
134+
UnivariateFinite{Multiclass{2}}(class_1=>0.8, class_2=>0.2)
135+
UnivariateFinite{Multiclass{2}}(class_1=>0.7, class_2=>0.3)
136+
137+
d2 = UnivariateFinite(['x', 'y', 'z'], probs[:, 2:end], augment=true, pool=v)
138+
julia> pdf(d1, levels(v)) ≈ pdf(d2, levels(v))
139+
true
140+
```
141+
113142
---
114143
115144
UnivariateFinite(prob_given_class; pool=nothing, ordered=false)

0 commit comments

Comments
 (0)