Observed event rate per bin over the whole subset, with the expected rate per bin from the global Hawkes fit (compensator increments conditioned on the observed history) and the Poisson rate. The dashed line separates training and test windows.
What happens when you press Apply subset & fit, step by step, with the numbers from the current data. Chips show the settings each step uses.
Time layers
\(\ell_{\rm time}=\sum_k\log G(t_k)-\int G\,dt\). Test likelihoods condition Hawkes intensities on the full training history. The NHPP cannot extrapolate, so on the test window it falls back to the mean training rate. KS: time-rescaling test on training inter-event times (pooled across senders for per-sender layers).
Mark layers
\(\ell_{\rm mark}=\sum_k\log p_{i_kj_k}\) with \(p_{ij}=w_{ij}/W\) (joint, paired with global time layers) or \(p_{j\mid i}=w_{ij}/\sum_{j'}w_{ij'}\) (conditional on sender, paired with per-sender layers). \(\mathbb E[U]=\sum_{i\neq j}(1-e^{-Kp_{ij}})\) is the expected number of distinct directed pairs.
Full model: test log-likelihood per event
\(\ell=\ell_{\rm time}+\ell_{\rm mark}\). The best cell is highlighted, and the featured model is shaded. With ME-Strength, the global-Poisson and per-sender-Poisson rows coincide on training data: this checks the time × mark factorisation.
Full model: training ΔAIC / ΔBIC
Reciprocity extension
Each event \(i\to j\) raises the intensity of the reverse pair: \(\lambda_{ij}(t)=c\,G_{r(i,j)}(t)\,p_{ij}+\rho\,\beta_\rho\sum_{t_k\lt t,\;m_k=j\to i}e^{-\beta_\rho(t-t_k)}\), so \(\rho\) is the expected number of replies per event, and \(\rho=0\) recovers the factorised model. Cells show test \(\ell\)/event, with the change versus \(\rho=0\) and the fitted \(\rho\) in brackets.
Senders with ≥ 8 training events get their own Hawkes fit; the rest fall back to Poisson.
Log-binned density of gaps between consecutive events, empirical vs. simulated from fitted time layers.
Under a correct model, \(u_k=1-e^{-\Delta\Lambda_k}\) are i.i.d. uniform. Plotted: empirical minus uniform quantiles, with the 95% KS band.
Expected distinct out/in-neighbours \(\sum_j(1-e^{-Kp_{ij}})\) vs. observed, training window.
Share of training events followed within δ = by each of the six two-event motifs. Bars are means over simulations; whiskers are ±1 s.d. Full motif analysis →
A temporal motif is a pair of events sharing a node: an event \(i\to j\) at time \(t\) followed by a second event within a window \(\delta\). The second event's source and target fall into exactly one of six types. Click a type to focus on it. In each diagram the dark arrow is the first event and the coloured arrow its follow-up. Rates are the share of events followed by that type within \(\delta\).
Which motifs are over-represented?
Observed rates in the training window against two simulated references: the featured model and a structure-only null (Poisson clock × the same mark layer, so degrees and blocks are kept but timing is random). The z-score is (observed − simulated mean) ÷ simulated s.d.
Over-represented (z > 2 vs the null): the motif appears more often than degrees and blocks alone imply, so it needs a temporal mechanism. Reproduced (|z| ≤ 2 vs the featured model): the model accounts for it.
At what timescale?
Each panel shows a motif's rate as the window δ grows. The lag at which the empirical curve leaves the null shows the motif's characteristic response time; the vertical line marks the current δ.
Distribution of the delay from an event to its first follow-up of the focused type (log bins). A peak shows the typical response time.
When do motifs appear?
Rows: motif types; columns: time bins over the whole subset. Colour is the share of events in the bin followed by that motif within δ, scaled within each row so you can see when each type peaks (hover for values). The top strip is the event count per bin; the dashed line separates training and test windows.
Left of the dashed line: the featured model simulated on the training window (in-sample). Right: forecasts for the test window from the training fit, conditioned on the training history (bands: ±1 s.d. over simulations).
Predicting motifs on the test window
Each model is fitted on the training window only, then simulated forward over the test window, starting from the excitation left by training events. A forecast passes if the observed rate falls inside its 95% interval.
Who drives the focused motif?
For each node with at least 10 eligible training events: the share of its outgoing events followed by the focused motif. Points above the diagonal: the model expects more than observed.
Each tick is one event. Rows are nodes (or blocks) ranked by training activity; upper panel outgoing, lower panel incoming. Same rows and time axis in both panels.
Each row counts the events that complete a highlighted motif, per time bin, on one shared scale; with nothing highlighted it counts all events. The shaded band is the animation window; click or drag to scrub. Model rows are simulated on the training window and forecast after the split, conditioned on the observed training history.
The same nodes, positions and clock in every panel: a force layout of the aggregated training network, coloured by block. Arrows are events in the sliding window, fading with age. A highlighted arrow completes a motif: it follows, within δ, an earlier event that shares a node with it. δ is shared with the Motifs tab. Best for subsets of up to about 150 nodes.
Temporal networks as marked point processes
Events are pairs \((t_k, i_k\!\to\! j_k)\) on \([0,T]\). Each directed pair carries an intensity \(\lambda_{ij}(t)\), and the log-likelihood of a marked non-homogeneous Poisson process is
$$\ell(\{\lambda_{ij}\})=\sum_k \log\lambda_{i_kj_k}(t_k)-\sum_{(i,j)}\int_0^T\lambda_{ij}(t)\,dt .$$Maximum-entropy factorisation
Maximising the path entropy \(-\sum_{ij}\int(\lambda_{ij}\log\lambda_{ij}-\lambda_{ij})\,dt\) subject to time-dependent constraints on partition totals \(\sum_{(i,j)\in E_r}\lambda_{ij}(t)=G_r(t)\) and time-independent linear constraints on the integrated intensities gives
$$\lambda_{ij}(t)=\varphi_{r(i,j)}(t)\,w_{ij},\qquad w_{ij}=M_{ij}\,e^{\Theta_{ij}+\theta^{\rm out}_i+\theta^{\rm in}_j+\zeta_{g(i)g(j)}}.$$Stationarity of the Lagrangian gives \(-\log\lambda_{ij}(t)+\alpha_{r(i,j)}(t)+\Psi_{ij}=0\), since \(\partial_\lambda(\lambda\log\lambda-\lambda)=\log\lambda\); hence \(\varphi_r=e^{\alpha_r}\) and \(w_{ij}=e^{\Psi_{ij}}\). The likelihood then splits exactly into a time part and a mark part, \(\ell=\ell_{\rm time}[G]+\sum_k\log p_{m_k}\), so each layer can be fitted and compared independently.
Layers implemented here
- Poisson and NHPP (piecewise constant, user-set bins) global profiles.
- Hawkes-exp: \(G(t)=\mu+\eta\beta\sum_{t_k\lt t}e^{-\beta(t-t_k)}\), with branching ratio \(\eta\). Maximum likelihood by multi-start Nelder–Mead on \((\log\mu,\operatorname{logit}\eta,\log\beta)\), using the \(O(K)\) recursion over the \(K\) events.
- Per-sender Poisson or Hawkes profiles, i.e. the partition \(E_r=\{(r,j)\}\). Here marks are conditional, \(p_{j\mid i}\).
- Uniform: \(w_{ij}\equiv\text{const}\). Edge-Poisson: \(w_{ij}=N_{ij}\).
- ME-Strength: the directed weighted configuration model \(w_{ij}=x_iy_j\), fitted by iterative proportional fitting to in/out strengths.
- Block-DWCM: \(w_{ij}=x_iy_jz_{g(i)g(j)}\) on the full support, which also matches block-pair totals \(C_{ab}\). Blocks come from Louvain on the symmetrised training counts.
- Block-Mask: the same constraints restricted to the support observed in training, \(M_{ij}=\mathbb 1[N_{ij}>0]\). The mask is selected from data and is not penalised in AIC.
For out-of-sample evaluation every mark distribution is mixed with the uniform one, \(p\to(1-\kappa)p+\kappa/|S|\), so that pairs unseen in training have finite likelihood. Parameter counts are for the normalised mark distribution: DWCM has \(a_{\rm out}+a_{\rm in}-2\) free parameters (one gauge, one normalisation; \(a\) = number of active senders/receivers), block factors add the non-empty block cells minus \(2B-1\) gauges, and conditional marks drop the \(a_{\rm out}-1\) sender marginals now carried by the time layer. Per-sender time layers give senders with no training events a regularising rate \(0.5/T\) (not counted as a parameter), so test likelihoods stay finite. A Hawkes fit whose maximum is not above the Poisson likelihood, or whose kernel is longer than half the training window (\(\beta T<2\)), is reported in the Poisson limit \(\eta=0\).
Reciprocity
The factorised models cannot express that a message \(i\to j\) makes a reply \(j\to i\) more likely soon after. The extension adds a reply kernel to every pair,
$$\lambda_{ij}(t)=c\,G_{r(i,j)}(t)\,p_{ij}+\rho\,\beta_\rho\!\!\sum_{t_k\lt t,\;m_k=j\to i}\!\!e^{-\beta_\rho(t-t_k)},$$i.e. a superposition of the MaxEnt process with a reply cascade. Every event spawns on average \(\rho\) replies on the reversed pair, with delays \(\sim{\rm Exp}(\beta_\rho)\). Replies feed back into the global Hawkes excitation, and replies to replies are allowed. The model is stable if \(c\,\eta+\rho<1\) (per-sender: \(c\max_i\eta_i+\rho<1\)). The log-likelihood keeps an \(O(K)\) recursion along pair chains,
$$\ell=\sum_k\log\!\Big(c\,G(t_k)\,p_{m_k}+\rho\beta_\rho R_{m_k}(t_k)\Big)-c\!\int\! G\,dt-\rho\sum_k\big(1-e^{-\beta_\rho(T-t_k)}\big),$$where \(R_{ij}(t)\) is the decayed count of past \(j\to i\) events. With the global Hawkes layer, \((\mu,\eta,\beta,\rho,\beta_\rho)\) are fitted jointly by maximum likelihood. For the other layers the fitted time profile is kept and \((c,\rho,\beta_\rho)\) are profiled, so those fits are conditional on the first-stage estimate. Simulations use the exact branching representation. On a generator whose only mark effect is replying, the estimator recovers \(\rho\), \(\beta_\rho\), \(\eta\) and \(\beta\) without detectable bias. When other mark effects are present (repeats, broadcasts), \(\rho\) absorbs part of them.
The additive form leaves the time × mark factorisation, but keeps the mark layer's MaxEnt weights and has a branching interpretation. The strict maximum-entropy alternative constrains \(\mathbb E\int\lambda_{ij}h_{ij}\,dt\) with \(h_{ij}(t)=\sum_{m_k=j\to i}e^{-\beta_\rho(t-t_k)}\). It gives a log-linear coupling \(\lambda_{ij}=\varphi(t)\,w_{ij}\,e^{\theta h_{ij}(t)}\), whose compensator needs numerical integration and which can explode for \(\theta>0\).
How the models are fitted
- Blocks: Louvain modularity maximisation (resolution \(\gamma\)) on the symmetrised training counts.
- Mark layers: closed form (Uniform, Edge-Poisson) or iterative proportional fitting, which alternately rescales rows, columns and block cells of \(w\) until every constraint is met to a relative error of \(10^{-7}\).
- Time layers: closed form (Poisson, NHPP) or maximum likelihood by multi-start Nelder–Mead on transformed parameters, with an \(O(K)\) likelihood recursion (Hawkes).
- Reciprocity: joint maximum likelihood of all five parameters for the global Hawkes layer; for the other layers a profile fit of a scale \(c\), \(\rho\) and \(\beta_\rho\) on top of the fitted time profile.
The Fitting tab shows each step, its iterations and convergence on the current data.
Temporal motifs
For an event \(i\to j\) at \(t\), its first follow-up of type \(m\) is the earliest later event whose (source, target) is \((i,j)\) for repetition, \((j,i)\) for reciprocity, \((i,k)\) for broadcast, \((k,j)\) for convergence, \((j,k)\) for chain or \((k,i)\) for reverse chain, with \(k\notin\{i,j\}\). The motif rate is
$$r_m(\delta)=\frac{\#\{k:\ t_k+\delta\le T,\ d_m(k)\le\delta\}}{\#\{k:\ t_k+\delta\le T\}},$$where \(d_m(k)\) is the delay to that follow-up. Only events whose whole window fits inside the data count. Models are compared through simulations: the featured model, a structure-only null (Poisson clock with the same marks), and forecasts on the test window. Forecasts are exact for these linear models: each training event still to fire contributes \(\mathrm{Poisson}(\eta e^{-\beta(T_s-t_k)})\) offspring after the split, at delays \(\mathrm{Exp}(\beta)\), and likewise for replies.
Diagnostics
- Time rescaling: \(\Delta\Lambda_k=\int_{t_{k-1}}^{t_k}G\,dt\) are i.i.d. Exp(1) under the true model, so a KS test on \(1-e^{-\Delta\Lambda_k}\) checks the time layer. Parameters are estimated on the same data, so the reported p-values are conservative (in tests with a fitted Poisson rate, about 0.5% rejections at nominal 5%): a rejection is meaningful, an acceptance is weak evidence.
- Unique edges and degrees under Poissonisation: \(\mathbb E[U]=\sum_{i\ne j}(1-e^{-Kp_{ij}})\).
- Motifs are compared against simulations of the fitted model and of the same mark layer with a Poisson clock, isolating the role of temporal clustering.
Adding datasets to this page
Any whitespace-, comma- or semicolon-separated edge list with columns source target timestamp works; headers and lines starting with # or % are skipped, and ISO dates are parsed. Visitors can upload files directly. To offer datasets from this site, put files in the repository (e.g. data/enron.csv) and list them at the top of the page script:
const HOSTED_DATASETS = [
{name: 'Enron e-mail', url: 'data/enron.csv'},
{name: 'SocioPatterns hospital', url: 'data/hospital.csv'},
];
Citation
@article{barucca2025maxent,
title = {Maximum entropy temporal networks},
author = {Barucca, Paolo},
journal = {arXiv preprint arXiv:2509.02098},
year = {2025}
}