Learn R Programming

ppdiag

ppdiag is an R package which provides a collection of tools which can be used to assess the fit of temporal point processes to data.

These currently include:

  • Simulating data from a specified point process
  • Fitting a specified point process model to data
  • Evaluating the fit of a point process model to data using several diagnostic tools

Installation

You can install the released version of ppdiag from CRAN with:

install.packages("ppdiag")

The current development version of this package is available from GitHub with:

# install.packages("remotes")
remotes::install_github("OwenWard/ppdiag")

Example

To illustrate some of the basic functionality of this package, we can simulate data from a specified Hawkes process and examine our diagnostic results when we fit a homogeneous Poisson process to this data.

library(ppdiag)

hp_obj <- pp_hp(lambda0 = 0.2, alpha = 0.35, beta = 0.8)
sim_hp <- pp_simulate(hp_obj, end = 200)
sim_hp
#>  [1]   1.275239   4.783765   5.594645   8.598805  12.615358  13.236031
#>  [7]  16.646178  17.963423  18.111810  22.084071  26.666076  34.308807
#> [13]  34.356333  34.495016  34.951780  35.092074  36.397702  37.473565
#> [19]  37.846293  37.999420  54.822306  54.960122  55.721565  56.161485
#> [25]  56.825700  57.272058  59.441202  67.259184  67.951046  73.067622
#> [31]  73.376321  73.864017  74.351076  78.675743  84.520527  86.082185
#> [37]  86.547380  89.036582  99.411569 100.220569 101.941447 104.265342
#> [43] 106.553315 115.496473 126.077235 126.679327 126.705392 130.829836
#> [49] 134.226466 135.613464 135.633740 149.809218 156.366308 156.732731
#> [55] 157.273463 160.788531 161.764239 166.976330 187.590412 187.737997
#> [61] 187.994724 195.153693

We can readily evaluate the fit of a homogeneous Poisson process to this data.

est_hpp <- fithpp(sim_hp)
est_hpp
#> Homogeneous Poisson Process 
#> lambda  
#> events 1.275239 4.783765 5.594645 8.598805 12.61536 13.23603 16.64618 17.96342 18.11181 22.08407 26.66608 34.30881 34.35633 34.49502 34.95178 35.09207 36.3977 37.47357 37.84629 37.99942 54.82231 54.96012 55.72156 56.16149 56.8257 57.27206 59.4412 67.25918 67.95105 73.06762 73.37632 73.86402 74.35108 78.67574 84.52053 86.08219 86.54738 89.03658 99.41157 100.2206 101.9414 104.2653 106.5533 115.4965 126.0772 126.6793 126.7054 130.8298 134.2265 135.6135 135.6337 149.8092 156.3663 156.7327 157.2735 160.7885 161.7642 166.9763 187.5904 187.738 187.9947 195.1537

pp_diag(est_hpp, events = sim_hp)
#> 
#> Raw residual: -7.105427e-15
#> Pearson residual: 1.421085e-14
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  r
#> D = 0.20838, p-value = 0.007712
#> alternative hypothesis: two-sided
hp_est <- fithp(events = sim_hp)
pp_diag(hp_est, events = sim_hp)
#> Raw residual: -0.002513104
#> Pearson residual: 0.2040545
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  r
#> D = 0.075428, p-value = 0.846
#> alternative hypothesis: two-sided

Markov Modulated Hawkes Process Example

This is particularly useful for more complex point processes, such as the Markov Modulated Hawkes Process (MMHP). We can simulate events from this model and examine the fit of simpler point processes to this data.

Q <- matrix(c(-0.2, 0.2, 0.1, -0.1), ncol = 2, byrow = TRUE)

mmhp_obj <- pp_mmhp(Q, delta = c(1 / 3, 2 / 3), 
          lambda0 = 0.2,
          lambda1 = .75,
          alpha = 0.4,
          beta = 0.8)

mmhp_obj
#> Markov Modulated Hawkes Process 
#> lambda0  0.2 
#> lambda1  0.75 
#> alpha  0.4 
#> beta  0.8 
#> Q  -0.2 0.1 0.2 -0.1 
#> delta 0.3333333 0.6666667
mmhp_events <- pp_simulate(mmhp_obj, n = 50)

We can easily fit a homogeneous Poisson process and visualise the goodness of fit.

est_hpp <- fithpp(events = mmhp_events$events)
pp_diag(est_hpp,mmhp_events$events)
#> 
#> Raw residual: -1
#> Pearson residual: -1.270479
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  r
#> D = 0.30169, p-value = 0.000156
#> alternative hypothesis: two-sided

Similarly for a Hawkes process.

est_hp <- fithp(events = mmhp_events$events)
pp_diag(est_hp,mmhp_events$events)
#> Raw residual: -0.3695538
#> Pearson residual: -1.850818
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  r
#> D = 0.081193, p-value = 0.87
#> alternative hypothesis: two-sided

We can then compare to the true point process model.

pp_diag(mmhp_obj, mmhp_events$events)
#> Raw residual: 6.507162
#> Pearson residual: 3.326864
#> 
#>  One-sample Kolmogorov-Smirnov test
#> 
#> data:  r
#> D = 0.1025, p-value = 0.6324
#> alternative hypothesis: two-sided

Getting help and contributing

Please file any issues here. Similarly, we would be delighted if anyone would like to contribute to this package (such as adding other point processes, kernel functions). Feel free to take a look here and reach out with any questions.

References

  • Sun et al., (2021). ppdiag: Diagnostic Tools for Temporal Point Processes. Journal of Open Source Software, 6(61), 3133, https://doi.org/10.21105/joss.03133
  • Wu et al. (2021), Diagnostics and Visualization of Point Process Models for Event Times on a Social Network, In Applied Modeling Techniques and Data Analysis 1 (eds Y. Dimotikalis, A. Karagrigoriou, C. Parpoula and C.H. Skiadas). https://doi.org/10.1002/9781119821588.ch7

Copy Link

Version

Install

install.packages('ppdiag')

Monthly Downloads

117

Version

0.1.1

License

MIT + file LICENSE

Maintainer

Owen G. Ward

Last Published

August 12th, 2021

Functions in ppdiag (0.1.1)

drawUniMMPPIntensity

Draw the intensity of the Markov-modulated Poisson Process(MMPP)
negloglik_hp

Fit a Hawkes process with exponential kernel to event data
negloglik

Compute negative log likelihood for point process models
pp_ksplot

KS plot of empirical and theoretical cdf curve of fitted point process
fithpp

Fit a homogeneous poisson process to event data
pp_hpp

Create a homogeneous Poisson process object
intensityqqplot

Draw intensity of fitted point process and QQ-Plot of rescaled events
drawHPIntensity

Draw the intensity of Hawkes Process
drawHPPIntensity

Draw intensity of homogeneous Poisson process
pearsonresidual

Compute Pearson residuals for point process models
mmhp_event_state

Estimate the latent state for events of an MMHP
mmpp_event_state

Estimate the latent state for events of an MMPP
pp_compensator

Compensators for point processes
pp_qqexp

Plot QQ-plot for rescaled-inter-event-times of fitted point process
mmpp_latent

Estimate Latent process of MMPP
pp_residual

Compute raw and pearson residuals for point process models
pp_mmpp

Create a Markov-modulated Poisson Process(MMPP) object
pp_mmhp

Create a Markov-modulated Hawkes Process(MMHP) object
pp_diag

Summarise diagnostics for point process models
pp_hp

Create a Hawkes process object
pp_simulate

Simulate events from a temporal point process
rawresidual

Compute raw residuals for point process models
fithp

Determine the MLE of Hawkes process numerically
drawUniMMHPIntensity

Draw the intensity of the Markov-modulated Hawkes Process(MMHP)
interpolate_mmhp_latent

Interpolate latent process of MMHP
hawkes_max_intensity

max intensity of a hawkes process