Ejemplo n.º 1
0
    def test_simu_hawkes_multi_attrs(self):
        """...Test multiple simulations via SimuHawkesMulti vs. single Hawkes

        See that multiple simulations has same attributes as a single Hawkes
        simulation, but different results
        """

        hawkes = SimuHawkes(kernels=self.kernels, baseline=self.baseline,
                            end_time=10, verbose=False, seed=504)

        multi = SimuHawkesMulti(hawkes, n_threads=4, n_simulations=10)
        multi.simulate()

        hawkes.simulate()

        np.testing.assert_array_equal(hawkes.simulation_time,
                                      multi.simulation_time)
        np.testing.assert_array_equal(hawkes.n_nodes,
                                      multi.n_nodes)
        np.testing.assert_array_equal(hawkes.end_time,
                                      multi.end_time)
        np.testing.assert_array_equal(hawkes.max_jumps,
                                      multi.max_jumps)
        np.testing.assert_array_equal(hawkes.spectral_radius(),
                                      multi.spectral_radius)

        self.assertTrue(
            all(np.array_equal(hawkes.mean_intensity(), np.array(x)) for x in
                multi.mean_intensity))

        self.assertFalse(
            np.array_equal(hawkes.n_total_jumps, multi.n_total_jumps))
Ejemplo n.º 2
0
    def test_hawkes_set_baseline_piecewiseconstant(self):
        """...Test Hawkes process baseline set with time and value arrays
        """
        baselines = [[1., 2., 1.5, 4.],
                     [2., 1.5, 4., 1.]]
        hawkes = SimuHawkes(baseline=baselines, period_length=3.5,
                            kernels=self.kernels, verbose=False)

        hawkes.end_time = 10
        hawkes.simulate()
        self.assertGreater(hawkes.n_total_jumps, 1)
Ejemplo n.º 3
0
 def test_hawkes_set_baseline_timefunction(self):
     """...Test Hawkes process baseline set with TimeFunction
     """
     t_values = [0.5, 1., 2., 3.5]
     y_values_1 = [1., 2., 1.5, 4.]
     y_values_2 = [2., 1.5, 4., 1.]
     timefunction1 = TimeFunction((t_values, y_values_1))
     timefunction2 = TimeFunction((t_values, y_values_2))
     hawkes = SimuHawkes(baseline=[timefunction1, timefunction2],
                         kernels=self.kernels, verbose=False)
     hawkes.end_time = 10
     hawkes.simulate()
     self.assertGreater(hawkes.n_total_jumps, 1)
Ejemplo n.º 4
0
    def test_hawkes_mean_intensity(self):
        """...Test that Hawkes obtained mean intensity is consistent
        """

        hawkes = SimuHawkes(kernels=self.kernels, baseline=self.baseline,
                            seed=308, end_time=300, verbose=False)
        self.assertLess(hawkes.spectral_radius(), 1)

        hawkes.track_intensity(0.01)
        hawkes.simulate()

        mean_intensity = hawkes.mean_intensity()
        for i in range(hawkes.n_nodes):
            self.assertAlmostEqual(np.mean(hawkes.tracked_intensity[i]),
                                   mean_intensity[i], delta=0.3)
Ejemplo n.º 5
0
    def test_hawkes_negative_intensity_fail(self):
        """...Test simulation with negative kernel without threshold_negative_intensity
        """
        run_time = 40

        hawkes = SimuHawkes(n_nodes=1,
                            end_time=run_time,
                            verbose=False,
                            seed=1398)
        kernel = HawkesKernelExp(-1.3, .8)
        hawkes.set_kernel(0, 0, kernel)
        hawkes.set_baseline(0, 0.3)

        msg = 'Simulation stopped because intensity went negative ' \
              '\(you could call ``threshold_negative_intensity`` to allow it\)'
        with self.assertRaisesRegex(RuntimeError, msg):
            hawkes.simulate()
Ejemplo n.º 6
0
    def test_simu_hawkes_force_simulation(self):
        """...Test force_simulation parameter of SimuHawkes
        """
        diverging_kernel = [[HawkesKernelExp(2, 3)]]
        hawkes = SimuHawkes(kernels=diverging_kernel, baseline=[1],
                            verbose=False)
        hawkes.end_time = 10

        msg = '^Simulation not launched as this Hawkes process is not ' \
              'stable \(spectral radius of 2\). You can use ' \
              'force_simulation parameter if you really want to simulate it$'
        with self.assertRaisesRegex(ValueError, msg):
            hawkes.simulate()

        msg = "^This process has already be simulated until time 0.000000$"
        with self.assertWarnsRegex(UserWarning, msg):
            hawkes.end_time = 0
            hawkes.force_simulation = True
            hawkes.simulate()
Ejemplo n.º 7
0
    def test_hawkes_negative_intensity(self):
        """...Test simulation with negative kernel
        """
        run_time = 40

        hawkes = SimuHawkes(n_nodes=1,
                            end_time=run_time,
                            verbose=False,
                            seed=1398)
        kernel = HawkesKernelExp(-1.3, .8)
        hawkes.set_kernel(0, 0, kernel)
        hawkes.set_baseline(0, 0.3)
        hawkes.threshold_negative_intensity()

        dt = 0.1
        hawkes.track_intensity(dt)
        hawkes.simulate()

        self.assertAlmostEqual(hawkes.tracked_intensity[0].min(), 0)
        self.assertAlmostEqual(hawkes.tracked_intensity[0].max(),
                               hawkes.baseline[0])
        self.assertGreater(hawkes.n_total_jumps, 1)
Ejemplo n.º 8
0
                   inter_mode=TimeFunction.InterConstRight,
                   dt=0.1)
kernel1 = HawkesKernelTimeFunc(tf1)

t_values2 = np.linspace(0, 4, 20)
y_values2 = np.maximum(0., np.sin(t_values2) / 4)
tf2 = TimeFunction([t_values2, y_values2])
kernel2 = HawkesKernelTimeFunc(tf2)

baseline = np.array([0.1, 0.3])

hawkes = SimuHawkes(baseline=baseline,
                    end_time=run_time,
                    verbose=False,
                    seed=2334)

hawkes.set_kernel(0, 0, kernel1)
hawkes.set_kernel(0, 1, HawkesKernelExp(.5, .7))
hawkes.set_kernel(1, 1, kernel2)

hawkes.simulate()

em = HawkesEM(4, kernel_size=16, n_threads=8, verbose=False, tol=1e-3)
em.fit(hawkes.timestamps)

fig = plot_hawkes_kernels(em, hawkes=hawkes, show=False)

for ax in fig.axes:
    ax.set_ylim([0, 1])
plt.show()