Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error finding gradient of poislogpdf #60

Closed
dtjohnson opened this issue Oct 21, 2018 · 4 comments
Closed

Error finding gradient of poislogpdf #60

dtjohnson opened this issue Oct 21, 2018 · 4 comments

Comments

@dtjohnson
Copy link

I'm getting an error when trying to find the gradient of the poislogpdf for a MAP analysis.

using StatsFuns
using ForwardDiff
ForwardDiff.gradient(x -> poislogpdf(x[1], 2), [0.75])

MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1})
Closest candidates are:
Float64(::Real, !Matched::RoundingMode) where T<:AbstractFloat at rounding.jl:185
Float64(::T<:Number) where T<:Number at boot.jl:725
Float64(!Matched::Int8) at float.jl:60
...

Stacktrace:
[1] convert(::Type{Float64}, ::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1}) at ./number.jl:7
[2] cconvert(::Type, ::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1}) at ./essentials.jl:344
[3] poislogpdf(::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1}, ::Int64) at /Users/djohnson/.julia/packages/StatsFuns/0W2sM/src/rmath.jl:58
[4] (::getfield(Main, Symbol("##31#32")))(::Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1},1}) at ./In[40]:2
[5] vector_mode_dual_eval(::getfield(Main, Symbol("##31#32")), ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/apiutils.jl:35
[6] vector_mode_gradient(::getfield(Main, Symbol("##31#32")), ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:96
[7] gradient(::Function, ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1},1}}, ::Val{true}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:17
[8] gradient(::Function, ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##31#32")),Float64},Float64,1},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:15 (repeats 2 times)
[9] top-level scope at In[40]:2

Looks like poislogpdf is fine accepting duals but something fails farther in.

@dtjohnson dtjohnson changed the title Error finding gradient of logpoi Error finding gradient of poislogpdf Oct 21, 2018
@dtjohnson
Copy link
Author

I should add that the gradient works for normlogpdf:

ForwardDiff.gradient(x -> normlogpdf(x[1], x[2], 2), [0.75, 1.0])

2-element Array{Float64,1}:
1.25
0.5625

However, I get the same failure for gammalogpdf:

ForwardDiff.gradient(x -> gammalogpdf(x[1], x[2], 2), [0.75, 1.0])

MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2})
Closest candidates are:
Float64(::Real, !Matched::RoundingMode) where T<:AbstractFloat at rounding.jl:185
Float64(::T<:Number) where T<:Number at boot.jl:725
Float64(!Matched::Int8) at float.jl:60
...

Stacktrace:
[1] convert(::Type{Float64}, ::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2}) at ./number.jl:7
[2] cconvert(::Type, ::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2}) at ./essentials.jl:344
[3] gammalogpdf(::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2}, ::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2}, ::Int64) at /Users/djohnson/.julia/packages/StatsFuns/0W2sM/src/rmath.jl:58
[4] (::getfield(Main, Symbol("##77#78")))(::Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2},1}) at ./In[93]:3
[5] vector_mode_dual_eval(::getfield(Main, Symbol("##77#78")), ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/apiutils.jl:35
[6] vector_mode_gradient(::getfield(Main, Symbol("##77#78")), ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:96
[7] gradient(::Function, ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2},1}}, ::Val{true}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:17
[8] gradient(::Function, ::Array{Float64,1}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##77#78")),Float64},Float64,2},1}}) at /Users/djohnson/.julia/packages/ForwardDiff/hnKaN/src/gradient.jl:15 (repeats 2 times)
[9] top-level scope at In[93]:3

@ngiann
Copy link

ngiann commented Nov 22, 2018

Same problem occurs with the Hessian too.

@devmotion
Copy link
Member

Do you still have these issues? All examples mentioned here (including Hessians) work for me on Julia 1.1.1 with StatsFuns v0.8.0 and ForwardDiff v0.10.3. Maybe the problems were fixed by #65?

@devmotion
Copy link
Member

As mentioned above, I can't reproduce the errors anymore. Both examples work on recent versions of StatsFuns, therefore I'll close this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants