Skip to content

Commit

Permalink
Merge 293f22f into 9d9ef59
Browse files Browse the repository at this point in the history
  • Loading branch information
dm13450 committed Jul 16, 2020
2 parents 9d9ef59 + 293f22f commit d72d881
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 7 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[![Build Status](https://travis-ci.org/dm13450/HawkesProcesses.jl.svg?branch=master)](https://travis-ci.org/dm13450/HawkesProcesses.jl)

[![Coverage Status](https://coveralls.io/repos/github/dm13450/HawkesProcesses.jl/badge.svg?branch=master)](https://coveralls.io/github/dm13450/HawkesProcesses.jl?branch=master)

# HawkesProcesses

A Julia package for fitting, analysing and plotting Hawkes processes.
Expand Down
4 changes: 3 additions & 1 deletion src/HawkesProcesses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ module HawkesProcesses
include("simulate.jl")
include("intensity.jl")
include("likelihood.jl")
include("time_change.jl")
include("compensator.jl")
include("utils.jl")

export HawkesFit, HierarchicalHawkesFit
export fit, HierarchicalHawkesFit

end # module
3 changes: 3 additions & 0 deletions src/compensator.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function compensator(ts::Number, events::Array{<:Number}, bg::Number, kappa::Number, kern::Distributions.Distribution)
bg * ts + kappa * sum(Distributions.cdf.(kern, ts .- events[events .< ts]))
end
28 changes: 28 additions & 0 deletions src/time_change.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@


function time_change_null(events::Array{<:Number}, maxT::Number)
rate = length(events) / maxT
Lambda = rate .* events
_time_change(Lambda)
end

function time_change_hawkes(events::Array{<:Number}, bg::Number, kappa::Number, kern::Distributions.Distribution)

Lambda = Array{Float64, 1}(undef, length(events))

for (i, event) in enumerate(events)
Lambda[i] = compensator(event, events, bg, kappa, kern)
end

_time_change(Lambda)
end

function _time_change(Lambda::Array{<:Number})

tau = diff(Lambda)

u = 1 .- exp.(-tau)
b = (collect(1:length(u)) .- 0.5) / length(u)

return (b, sort(u))
end
14 changes: 14 additions & 0 deletions test/compensator_test.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@testset "Compensator" begin

bg = 0.5
kappa = 0.5
kernD = Distributions.Exponential(1/0.5)
events = sort(rand(10))

testval = HawkesProcesses.compensator(events[1], events, bg, kappa, kernD)

@test length(testval) == 1

inferTests && @inferred HawkesProcesses.compensator(events[1], events, bg, kappa, kernD)

end
12 changes: 8 additions & 4 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ my_tests = ["event_difference_test.jl",
"sample_parents_test.jl",
"all_constant_hawkes_test.jl",
"simulate_test.jl",
"intensity_test.jl"]
"intensity_test.jl",
"compensator_test.jl",
"time_change_test.jl"]

println("Running tests: ")

for test in my_tests
include(test)
end
@testset "HawkesProcesses.jl" begin
for test in my_tests
include(test)
end
end
4 changes: 3 additions & 1 deletion test/sample_parents_test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
@testset "Constant Background Rate" begin
inferTests && @inferred HawkesProcesses.sample_parents([1,2,3], 0.5, 0.5, kernelTest)

HawkesProcesses.sample_parents([1,2,3], 0.5, 0.5, kernelTest)
sp = HawkesProcesses.sample_parents([1,2,3], 0.5, 0.5, kernelTest)
@test length(sp) == 4
@test length(sp[1]) == 3
end

@testset "Function Background Rate" begin
Expand Down
5 changes: 4 additions & 1 deletion test/simulate_test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ using Distributions
end
@testset "Hawkes Simulation" begin
kern(x) = pdf.(Distributions.Exponential(1/0.5), x)
testevents = HawkesProcesses.simulate(0.5, 0.5, kern, 1)
testevents = HawkesProcesses.simulate(0.5, 0.5, kern, 10)

@test length(testevents) > 0

inferTests && @inferred HawkesProcesses.simulate(0.5, 0.5, kern, 100)
end

Expand Down
30 changes: 30 additions & 0 deletions test/time_change_test.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
@testset "Null Time Change" begin

testEvents = sort(rand(100)*100)
null = HawkesProcesses.time_change_null(testEvents, 100)

@test length(null) == 2
inferTests && @inferred HawkesProcesses.time_change_null(testEvents, 100)

end

@testset "Hawkes Time Change" begin
bg = 0.5
kappa = 0.5
kernD = Distributions.Exponential(1/0.5)
events = sort(rand(10))

res = HawkesProcesses.time_change_hawkes(events, bg, kappa, kernD)
@test length(res) == 2
inferTests && @inferred HawkesProcesses.time_change_hawkes(events, bg, kappa, kernD)

end

@testset "Internal Function" begin

res = HawkesProcesses._time_change(sort(rand(100)))

@test length(res) == 2
inferTests && @inferred HawkesProcesses._time_change(sort(rand(100)))

end

0 comments on commit d72d881

Please sign in to comment.