-
Notifications
You must be signed in to change notification settings - Fork 231
Closed
Description
While trying out my first example in Turing I ran into an issue (see discussion here: https://discourse.julialang.org/t/help-with-first-non-trivial-turing-example/38964/14)
Apparently Turing does not provide proper initial values when supports of the prior distribution are themselves random. Below is an example in which the issue arises. Note that the example may have other issues as well:
# Import Turing and Distributions.
using Turing, Distributions
n = 1000
m = 10
k = 4
theta = randn(n)
b = zeros(k,m)
for i in 1:m
b[1,i] = randn()
for j in 2:k
dd = truncated(Normal(), b[j-1,i], Inf)
b[j,i] = rand(dd)
end
end
logit = x -> log(x / (1 - x))
invlogit = x -> exp(x)/(1 + exp(x))
y = zeros(m,n)
probs = zeros(k,m,n)
for p in 1:n
for i in 1:m
probs[1,i,p] = 1.0
for j in 1:(k-1)
Q = invlogit(theta[p] - b[j,i])
probs[j,i,p] -= Q
probs[j+1,i,p] = Q
end
y[i,p] = rand(Categorical(probs[:,i,p]))
end
end
# Graded Response Model
@model function grm(y, n, m, k, ::Type{TC}=Array{Float64,3}, ::Type{TM}=Array{Float64,2}, ::Type{TV}=Vector{Float64}) where {TC, TM, TV}
b = TM(undef, k, m)
for i in 1:m
b[1,i] ~ Normal(0,1)
for j in 2:k
b[j,i] ~ truncated(Normal(0,1), b[j-1,i], Inf)
end
end
probs = TC(undef, k, m, n)
theta = TV(undef, n)
for p in 1:n
theta[p] ~ Normal(0,1)
for i in 1:m
probs[1,i,p] = 1.0
for j in 1:(k-1)
Q = invlogit(theta[p] - b[j,i])
probs[j,i,p] -= Q
probs[j+1,i,p] = Q
end
y[i,p] ~ Categorical(probs[:,i,p])
end
end
return theta, b
end;
result = sample(grm(y, n, m, k), MH(), 1)With error
Sampling: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| Time: 0:00:01
ERROR: ArgumentError: Categorical: the condition isprobvec(p) is not satisfied.Here probs[:i,p] should be guarenteed to be a probability vector as long as the b[:,i] are in ascending order. If we put in some debugging print statements we find that at times the b[:,i] are not in ascending order.
Metadata
Metadata
Assignees
Labels
No labels