/
marked_hawkes_point_process.ipynb
874 lines (874 loc) · 124 KB
/
marked_hawkes_point_process.ipynb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"#### Required Packages\n",
"1. poweRlaw\n",
"2. ipoptr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's first start by making all functions availble for simmulating, modeling and predicting cascades"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading required package: poweRlaw\n",
"Loading required package: ipoptr\n"
]
}
],
"source": [
"## Just source the rscript provided\n",
"source('rscripts/marked_hawkes.R')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will start with visualizing how would kernel function for an event with mark 1000 evolve, where it's parameters are $\\kappa = 0.8$, $\\beta = 0.6$, $c = 10$ and $\\theta = 0.8$. For any code where we want to use power law kernel we don't need to pass the kernel value as it's te defualt type implemented."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAIAAAByhViMAAAACXBIWXMAABJ0AAASdAHeZh94\nAAAgAElEQVR4nOzdeWATdf7/8Xdb2iItlN5QWgqFct+HgCi3KCynyiHigSAiiKLrIqgciihf\nXXX9iiL8VjxAAQ9YLrnLKTfIglQKFKgcpRRaCqW0QJPfH7Pf2TFN06RJM8n0+fhrOjOZeTfJ\nJK98PjOf8TGbzQIAAADv56t3AQAAAHANgh0AAIBBEOwAAAAMgmAHAABgEAQ7AAAAgyDYAQAA\nGATBDgAAwCAIdgAAAAZBsAMAADAIgh0AAIBBEOwAAAAMgmAHAABgEAQ7AAAAgyDYAQAAGATB\nDgAAwCAIdgAAAAZBsAMAADAIgh0AAIBBEOwAAAAMgmAHAABgEAQ7AAAAgyDYAQAAGATBDgAA\nwCAIdgAAAAZBsAMAADAIgh0AAIBBEOwAAPiTGzduTJ069eGHH3ZyOzt37rznnnv279/vkqoA\nexDsAAD4rxUrVjRo0OCzzz4bO3ask5tq0aJF/fr177777meffTYrK8sl5QG2EewAABARMZlM\nU6dO7d+/f1hY2P79+7t37+7kBitVqjR//vx//OMf8+bNa9eu3alTp1xSJ2CDj9ls1rsGAAB0\nZjKZnnrqqQULFlSrVu3AgQMxMTEu3Phbb701bdq06OjoNWvWtGzZ0oVbBiwYvMVu4cKFPnao\nWrVq3bp1hwwZ8v/+3//Ly8vTu2ov1qZNG+UpjYiI0LsWoJQGDBigvI2HDx+udy2ea+3atepH\naG5urt7lOMtsNo8bN27BggUVKlT46aefXJvqRGTKlCldunTJyMjo3bt3RkaGazcOaBk82Nkp\nJycnNTX1+++/Hz16dHx8/Lfffqt3RQAA9/nnP//5+eefi8iYMWPuuecel2/fx8fnww8/9PHx\nuXjx4mOPPVZYWOjyXUBrzJgx6g+PCRMm6F2OWxHsLF2+fHn48OFvv/223oUAQDmya9euy5cv\n67Lr33///YUXXhARf3//iRMnltFeWrZs+dRTT4nIpk2b+Ipx3qpVq6ZPnz59+vSFCxfqXYtn\nqaB3Ae4zduzY++67r+j8q1evpqSk7N+/f8eOHerMKVOmtGnT5sEHH3RjgQBQfi1evHju3Lnb\ntm27++673bzryZMn5+fni8jTTz8dFxdXdjuaOnXql19+KSJvvvnmAw880L59+7Lbl+GtWrVq\n7ty5IvLAAw9w1oRWOQp2HTp0GDp0qI0Vfv755zFjxpw9e1b5c/LkyQ888ICPj49bqgOAcq1i\nxYoFBQW3bt1y837379+/fPlyZfrZZ58t033VqlWrXbt2e/bsMZvNM2bMWL16dZnuDuUTXbH/\n1bt37yVLlqhJ7tChQwcPHtS3JAAoJwIDA0WkUqVKbt7v1KlTlYmYmJgWLVqU9e4GDRqkTPz8\n88+HDh0q692VWy+//PLm//P888/rXY5bEez+pEOHDk888YT655YtW/SrBQDKEX9/fxGpWLGi\nO3e6a9euNWvWKNO9e/d2QxfNI488ok6/++67Zb27cqtevXpd/k/dunX1LsetCHaWtCc9pKam\n6lgJAJQfSqjy9XXrt9K8efPU6b/85S9u2GN8fHzjxo2V6R9//JEhi+Fy5egcOzvVr19fnb5y\n5UpxqxUWFu7duzclJSUjI8Pf3z86OrpZs2ZNmjTxhHPyzp49u2vXrosXLxYUFNSqVat27drN\nmzdXfg3b7/r16+vXrz9x4kR0dPSIESPKqFTbMjMzU1NTz549q5z4GBsbW6NGjcTExKioKF3q\ncUhBQcGmTZvOnDmTk5NTvXr1Vq1aNWvWzGKdvLy8pKSktLS069evJyQk1KtXr2nTpn5+fvZs\n3yWvcpkW6apjxBPeiqXm5oPxt99+O3z48Llz50JCQurVq9e4cWP7DxaXlOpdzGbz2rVr1T/d\ndilDs2bNjh49KiImk+nnn392vqNQx+8jw3zdeMUntr3MhrZgwQL1P12wYIE9D9EOYvfEE08U\nXSEnJ2fy5MlWB+CNi4v76KOP8vPzLR6iXOIuIr6+vllZWUW3aTKZtBucM2eO1dqUC/IVR48e\nLbqRFStWtG7dumhhMTExb7/9dmZmptXN7tu3T1mtfv36ypwffvghOjraYqY91L2Hh4fb/6ii\ntm7d2rVrV6ufSn5+fkOGDNm1a5d2ffc8w8X5/ffflYfEx8ebzebCwsJZs2aFhYVZVN6+ffuT\nJ08qDykoKHj99deDgoIs1mnVqpXFv1b0Hyndq+zOIktxjCjseStmZ2ern4aTJ0+2UYbZbFbP\nZwoPDy8oKLC9sqp///7Kox577DGrK5w5c6Z27drKOhUqVFi6dKnFCmV9MKqrKa+m2WzesWNH\nhw4dLPbl5+c3ZsyY9PR0G/9sqUtVezBF5Pr16zZ2YY/bt28rg439/vvvTm7KftpT3EJCQkwm\n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\niYnq9ufPn+/Q9u1x4cIF0fjiiy9sr//CCy/4+fl9+eWXasq8c+eO8uPBoXYmhbYzbtSoUY4+\n3MljTR1Lr0qVKlZDofYGm99//70636O+blwS7Dz2E9sZjGNnRa9evZYvX67GbRHJyspSX+bh\nw4erP9SKateundofr3TnKdNNmjSJjY1Vpjdt2qR9yNatW5WJzp07q13yW7ZsMZlM6jrp6enH\njh1Tpi0GW1J7B4YOHWrjRNqKFSuql3yeOnVKvXOahYceekjNN+7Xrl07ZaDwLVu22ChD28Gk\nKrtn2CEPP/yw1Yt569Spo0737dvXop1fER0drZ5Crq1NXP0ql0WRzh8jFmy/Ffv376/2xv70\n009FV/juu++UiXvvvdfilCNHnT17tmvXrsp4Y/7+/kuXLi3ubGtdDsZhw4bVq1fP6qLg4OD4\n+Hhl2uJ5dm2pjnrjjTeUiSeffNLqCnfddZf2OraPPvqouPdJqWVkZGj/tPqpojKZTD/++OPI\nkSOfeuoptSU4PT29sLBQRNSTveynPT0uMzPTocc6f6ypJ7Rcu3Ztw4YNRR+4aNEiZSIsLEx7\nhpKRvm4UXvGJ7SiC3Z+0aNHi22+/XbVqlcVJqdrfPWofUHHUWJCenn7+/Hll2sfHR33gpk2b\ntB9S2tihnsx7+fLl5ORkdR3tPTC0BWRmZqrNURbnaRalPZ/aoj1cZXHeqJvFxMQoA4V37ty5\nuBGYzGaz+oxpldEz7Cj155eFu+66S50uOjySwsfHx+qw+y5/lcuiSOePEQu234qhoaH333+/\nMl002J0+fVr95tPeS6YUzp4926VLF3UU2a5du/bp08fqmnodjLZHX3PPO8ohhw8fVhuEinsr\nyp9/Xx05csTlA/laBDv1JA2r9u7dm52dPW3aNO1M5Ws4JCTE6re+bdrdaS/bsofzx1qvXr3U\n77gff/zR4iF37txRc8nw4cPVfluDfd0ovOIT21HlaIDisWPHqr9dLPj6+kZGRtarV6+4nz7q\niyQiao9McWrVqqVOHzt2TG1G6t27tzLK+blz506cOKH+yN62bZsy0blz55o1a9atW/fkyZMi\nsnnzZnX0jc2bNysTTZs2VU99EJEjR46o02PGjNF22Bel/Ulx9epVq+vY+PGnr5s3bx4/fvzQ\noUMLFiywaJBTlcUz7Ch7frs7+vve5a9yWRTpkmNEq8S34qBBg37++WcROXDgwJkzZ7TbVNsb\nAgMD1aHsSuH8+fPaVCci69evX716tdU2Xb0ORm2XpZ1cXqpDVmvufG+jMSM6Orpt27bqV92O\nHTu0jSjOy83N1f5pe6jYc+fO/f3vf7eo9o8//hAR7Rn09tMGghs3bjj0WOePtYoVKz788MPK\n+QzLly+/deuWNpsmJSWpWVM7XLAhv2684hPbUeUo2HXo0GHo0KGle6z26Va7NoqjXSE7O1ud\n7t69u7+/v3I91KZNm5TYcebMGeXToVq1asoHdNeuXdXYob4h1Nhh8Y2SlZWlTjv0s+/atWtW\n55c4KpJ7mM3mo0ePbty48dixYydOnDhx4oQ9bdRl8Qx7Ape/ymXBJceIVolvRaU3Vnm5f/rp\np7/+9a/KfLPZrPbD9u3bt2rVqiXVXiy1Hbd69eoXL15UmoHHjRvXpUuXokOV6nUwar+57aTv\nO0ptrvPz87M6sq6qffv2arBLS0tzftdaFoHMIudZ0N7gVaV8KJUu2Gl352hucMmxNmzYMCXY\nXb16ddOmTb169VIXqb+LWrVq1aJFC3W+Ub9uXE73T2y6Yu2iHoRBQUG2T8WQP/8KycnJUaeD\ng4M7d+6sTKttTtpeQqXzsVu3buoiJcufPXtWCSJSJHaUOuBrz6rWCg0NLd0GXcVkMi1cuLBO\nnTpNmzZ96aWX5s6dm5SUpE11CQkJbdu2tfrYsniGPYHLX+Wy4JJjRKvEt2JoaGiPHj2UaW1v\n7JEjR5T7NYmIeq2MM2rVqrVz5071oum0tDTtQAYqvQ7GUtyVSN93lPJDS2H7zrDqDQlE5PLl\ny87vWsviZmul+E5VejZL95mpfSa1/6Y9XHKsdenSRd2vtjc2Pz9fvYjN4u5exvu6KSO6f2KX\noxY7Z6gHz40bN3Jzc20fS9ozYS3W/Mtf/rJx40YR2bx5s8lk8vX1VXsJ1SFt1JPAsrKyjhw5\n0rx5c7UxKTQ01OJ8Gu0182lpac70ISr0vddtYWHh8OHDFy9erM6pVKlSixYtmjdvXr9+/Xr1\n6jVo0KBWrVoff/xxceciuPwZ9gQuf5XLgquOEZU9b8XBgwcr12bu2rXr/PnzyneY2lwXHh7+\n4IMP2ld+sWrXrr158+b4+PiZM2cuXbr04sWLIvLhhx8OHz7c4swbLzoY9X1HqffgLiwszMvL\nK9r2qdJmL6snMznDop2sFN+pSk4qXTrRttg5GuxccqxVqFBhyJAh//u//ysi//rXvz7//HPl\nF8KaNWuUjBsQEKAdNFS86h2uL90/sWmxs4u2N6fEHgHtGTkWt59TT3TNyspSblOobU9SJqKj\no9XBh5SeIDV2PPjgg9prdeXPnymOnoHrgd5991011XXv3n3Dhg3Xrl375ZdfPvvssxdffLFX\nr161a9e2/Vng8mfYE3jFq+yqY8Qh2mtjlXuWmEwmtSNp6NChpTirXSs+Pn7r1q1KZ1bVqlX/\n8Y9/KPMLCwufffZZi+vgvOJlUuhbqnoyvhS5gsGCNnuVrsfThrCwMO2HSSla7JRwVrq+fm2O\ntLgPQYlcdaypuS0rK0v9DFQPn4EDB1qs70XvcH3p/kQR7OyiHU3gzJkztlfWHkgWZ7YmJiaq\nczZt2nT+/PnU1FQRiYiI0N5xQe0rVA42G6d/1a1bV53W3gHGG+Xn56tfnP369Vu3bl2PHj2s\n3o3RYmRRLZc/w57AK15lVx0jDinaG7tz5061p8/5fth77703Li5O/XPw4MHq3Sx2796tXKmj\n8oqXSaFvqdrz6ixu4mzh5s2b6rR2rF2X8PPz0zallKL7TAl2FkMo2PlA7b/m6KlmrjrW7r77\nbnWO0ht7/fr1lStXKnOefvppi0150TtcX7o/UQQ7u2hvAKwdltMq5Uo9EYmKirK4jMvHx0eN\nDps2bdL2Emp/O2pPAktNTVV+k/n6+hbtV6pbt676o3bVqlW2C1u+fPmAAQMGDBgwaNAgZfgl\nj5KSkqL20Tz33HM2brBtMW64lsufYU/gFa+yq44RRw0ePFiZ2LZt26VLl9R+2Hr16lncL9V5\nPj4+n332mdonOGnSJKVnVuEVL5NC31KbN2+uTh88eNDGmtqn95577lEm7ty54+Pj4+Pjc+7c\nuczMzBdeeKFWrVqBgYHR0dGPPvqokmNMJtPnn3/etm3bypUrV61atV27dsqdhyy2rx1uIyUl\nxdF/RLmaVVukiJw4cUJ7k2KrLPalvbWUPVz4ffToo48q08uWLbtz587y5cvz8/NFJC4urug4\nHV70DteX7k8Uwc4u4eHh6pfEggULLI5krT179qh9fw8++GDRfkO1r3D79u3qyJBqL6FCTSFX\nr15VG7Hat29ftDNCm2NWrlypHZjNgslkmjx58vLly5cvX56ZmWkjNulFO56ZjdNuUlJSbN+x\n0bXPsCfwilfZhceIQ9TeWJPJ9MMPP6g3/H388cfL4gyehIQE9cYnOTk5L730krrIK14mhb6l\nag9GNXZYpb6LevToUbTL/uTJky1atPjkk0/S0tJu3bp16dKlxYsX33333SdOnBgwYMBzzz23\nf//+3NzcnJycvXv3PvHEE2+//bbFFrTZxXbboVUhISEisnXr1oKCAnXmihUrVqxYYfuB6ljo\nItKoUSNHz8Fy4bGmBrvLly9v3bpV7YfVjsOs8qJ3uL50f6IIdvYaO3asMnHt2rURI0ZY7Q28\nfPmy9jKi559/vug6nTt3VkY+zMvL+/bbb9WZ2nXCwsJatmypTKvdPcX1Eqp7MZvNw4YNK65D\nYebMmWpD16hRo6yuoy/lU1JR3M/Q1NTU7t27q8M+WdxLW+HyZ9gTeMWr7KpjxCHa3thp06ap\njb7Dhw93csvF+etf/6p26y9evHjdunXqIq94mRQ6ljpw4EC1+3Lfvn02OhP37NmjTKg3ltUa\nMmTIrVu3vvnmm/Pnzx89elQ5Y+zKlSvNmzdfuXLlo48+unfv3osXLy5atEgJhTNnzrQYMU5t\nuReRU6dOOTqenHJu3B9//PHaa68pJ1yaTKbvvvuuxIshtMGudL0ErjrWGjdurDagzp07d/36\n9cr0U089ZXW/nvkOV1oZPYrOT5Sr7k3mmbT3ilWa4kutoKBA24PQpUuXo0ePqktNJtPmzZvr\n16+vrjBo0KDiNmURIEJDQ4vewPuVV16xeKUOHTpU3AbVX10i0qhRo02bNmk3ePHixQkTJqgr\nNG3a9NatW9qH27innqPUe8UGBwcvstvZs2fNZnNubq56VrWPj8+MGTMuXbqkbDYvL+/AgQOj\nR48uei78qlWrit4g3OXPsG3aruHibn2oPVd6zZo1xW1KbTKcM2eOxSInX2U3FOn8MVK6t+L8\n+fMtXsr77rvPzsdaVfResRa2b9+u7ishISEvL09d5J6D0f4nSn3CZ8yYYbHIyVKduVeseidN\nERkzZowyU3uvWLPZrAa+rl27au/mqf6cCwwM1N4k9/bt2+o/O3LkSO1D1HfIwYMHLSrR3tJq\nz549Dv0X2ibAdu3avfrqq0oT4Jdffmn7gQMHDlQfuH79eod2qnDh99GsWbPkz7p27Wpj157z\ndTNmzBhlO5UrVz5y5IjJZMrOzlZ3Z+e9Yj32E9sZBDsHHDlyxOK2M02bNh0wYEDfvn0tbkZZ\nq1aty5cvF7edTz/9VLtyv379iq5j0UMRGxtr9UbFiuzsbO3ZmiISFBTUoUOHgQMHtmnTRnsN\nWpUqVQ4fPmzx8LIIdg5ZtmyZ8nD1QFVVrVq1evXq2jl+fn6vvvqqdk5oaKjFJ6nLn2Hb3PMx\n4eSr7J4inTxGSvdWzMrKsriWed68eXY+1qoSg53ZbNb+vH7ttdfU+e45GF0S7Jws1Zlgd/Pm\nzYYNGyqP9ff337t3r7lIsFPuFRseHn7ixAntY9VgN3bsWIvNPvPMM8qizMxM7Xz10tGi7+p3\n331X/S9mz57t0H9htYvN19fXxk3flfrVqyZDQkJu3rzp0E5Vrvo+Ktpiavu70nO+bt5//31t\nGUpHs/r+0T3YOflEOYNg55gDBw6U2MzevHlz2we2xU0PP/jgg6LrXLt2TftdNXr0aNuFXbx4\nscRQVaNGDeUD1ILnBLvs7GztQOdFhYWFrVixwmw2P/TQQ9r5FgdVWTzDNrjnY8Ls3KvstiKd\nOUZK/VbUjpsfGBiYnZ1t/2OLsifYXblyRT0/ukKFCr/99pu6yA0Ho0uCnZOlOhPszGZzamqq\nesVxVFTUL7/8og123333na+vb5UqVXbv3m3xQDXYzZ8/32KR8pMvISHBYr76xi76rr569ara\nL9ytWzdH/4t7773X4ul6/vnnbT9EvaJLRN58801H96jlku8ji/+iSpUqN27csL2+h3zdnDlz\npugggp4T7MzOPVHO4Bw7x7Rq1erYsWN/+9vfrA5KWbNmzY8//njv3r22L1+vXbu2+mtVipz+\npahcubL2mr4ST/+Kjo7etWvXp59+avFbTREaGjpx4sTffvutuHs2eIiqVavu3Lnzf/7nf4oO\nDVW1atXnn38+JSWlb9++IrJgwYJXXnklJiYmJCSkffv2Fld7lcUz7Am84lV2yTHiKO0NYZ28\njZidwsLCPvzwQ2X6zp07Y8aMUYe184qXSaFjqQkJCb/88otyfuSlS5c6duw4d+5cEZk1a1bH\njh2HDRvWpk2bgwcPaq8ALVqeQ/OtCgkJUU+H2rJli6Ojji1evFh7S7dhw4Z98MEHth+i3io3\nLCxM2xlXCq461rQDEQ8dOlQ7vq5VHvIOj4+P37Zt28MPP1yjRg1/f/+YmJi2bduWWLw76fVE\n+ZiLXAEOe9y5c2fv3r0pKSmXLl3y8/OLjo5u0aJFkyZNdB9K22w2Jycn//rrrxkZGbdu3QoL\nC2vWrFnr1q2dHKnVza5fv56cnHzy5MmzZ8+GhYUlJCTcd9992rbrcs4rXmV3HiUaeLIAACAA\n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\nBwAAYBEEOwAAAIsg2AEAAFgEwc6rCgoKdu/effz48dLSUrNrwTlsF3PRf/dyOByZmZn79u2z\n2+01GU//3ctut+/fvz8vL6+G4+m/d9S2z/V3uxDsvGTFihXXX399cHBwmzZtoqKiWrZs+be/\n/a24uNjsuqxm5cqV9957b/fu3Zs1axYTE5OSkvLMM8/k5ORcaDzbxaM+/vjjfv36vfLKKxca\nQP/dKzc3d9KkSTExMS1atEhMTAwODu7bt++mTZsuNJ7+u5HD4fjkk0+6dOkSFBTUqlWr0NDQ\nli1bPvzww1lZWRf6CP2/SAUFBQMGDJg8eXLVw2rb53q/XRzwvLffftvHx6di87t161ZQUGB2\ndRZRWlr68MMPV/pLHhUVtWjRooofYbt41I4dO5o0aSJp1KhRlQ6g/+61f//+xMTEiv308fGZ\nN29exfH0341KSkoGDBhQ6d+fsLCwDRs2VPwI/b948+bNkzRgwIAqxtS2zxbYLgQ7j/vpp598\nfX0ltW/ffsWKFfn5+Xv27PnP//xP43flgQceMLtAi5g2bZrR0pYtW86YMePHH3/817/+9eST\nT9psNkmBgYFpaWllx7NdPKqwsLBTp05GMysNdvTfvYqKijp27GjEiPfeey8jIyM7O3vRokVG\n1GvSpMnOnTvLjqf/7uXaaXTbbbdt2LAhLy9v3759r7/+ekhIiKTExMRTp06VHU//L15ubu7l\nl19edbCrbZ+tsV0Idh530003SQoPDz927FjZ+ffdd58kX1/fPXv2mFWbZRQWFkZGRkqKj4/P\nzs4uu2jjxo3+/v6SevbsWXY+28Wjyu49rTTY0X/3euONNyTZbLZyO4d2797duHFjSZMnTy47\nn/670dmzZ4ODgyUNHDiwtLS07KLPPvvM+Ffw8ccfl51P/y9GVlbW/Pnzu3TpYvS2imBX2z5b\nY7sQ7Dzr2LFjxm/e448/Xm7Rjh07jEX/8z//Y0ptVrJhwwajmbNmzaq49L/+678k+fj45OXl\nGXPYLh61aNEiSUFBQc2aNas02NF/9yotLb300kslDR8+vOLSxx9/vFOnTrfffrtrDv13r61b\ntxpNq3jI++zZs0awfuSRR1wz6f8fduDAgejoaJ3vQsGutn22zHbh4gnPWr58uTExaNCgcova\ntWvXpk0bSUuXLvV2WZazfft2Y6LS01yuu+46SQ6HIzU11ZjDdvGcw4cPjx49WtKbb77ZokWL\n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",
"text/plain": [
"Plot with title “paste(\"Power Law memory kernel \", phi[m](tau), \" over time\")”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# initial event we want to use for simmulation\n",
"event <- c(1000, 0)\n",
"# series of time points we want to simmulate event for\n",
"t <- seq(from = 0, to = 100, length=1000)\n",
"# parameters for kernel\n",
"K <- 0.8\n",
"beta <- 0.6\n",
"c <- 10\n",
"theta <- 0.8\n",
"\n",
"# Power Law Kernel\n",
"# calling the kernelfunction to get the values\n",
"values.PL <- kernelFct(event = event, t = t, K = K, beta = beta, c = c, theta = theta, kernel.type='PL')\n",
"# ploting the kernel function\n",
"plot(x = t, y = values.PL, type = 'l', col = 'blue', pch=16, bty = \"n\",\n",
" lty = 1, las = 1, yaxt = \"n\", xaxt = \"n\", ylim = c(0, max(values.PL)+0.1),\n",
" cex.main = 2, cex.lab = 1.8, cex.axis = 1.4,\n",
" main = expression(paste(\"Power Law memory kernel \", phi[m] (tau), \" over time\")), ylab = \"\", xlab = \"\" )\n",
"axis(side = 2, las = 1, cex.axis = 1.4)\n",
"axis(side = 1, cex.axis = 1.4 )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also simulate a series of events generated by a hawkes process described by the parameters above. We have option to save it to a file and specify the time till we want events to b simulated. We can even simulate a series of events after providing an initial history."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Current simulation time: 50.066 / 50.000 (43 events).\n",
"--> Simulation done!\n",
"Current simulation time: 61.200 / 60.000 (47 events).\n",
"--> Simulation done!\n"
]
}
],
"source": [
"# generating events till a time\n",
"events1 <- generate_Hawkes_event_series(K = K, beta = beta, c = c, theta = theta, Tmax = 50)\n",
"events2 <- generate_Hawkes_event_series(K = K, beta = beta, c = c, theta = theta, history_init = events1, Tmax = 60)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now if we compare events2 and events1 we find events2 has all of events1 as prefix, with some extra generated events."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Real Example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this section, we first read a real twitter cascade and then fit a hawkes model to it after observing first 1 hours of cacscade and then we will do the final prediction. A retweet cascade is provided in the file 'example.csv' with each row representing an event with values of the form \n",
"\n",
"** [magnitude(#user followers), time(secs)] **"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## read the real cascade provided in the file example.csv\n",
"real_cascade <- read.csv(file = 'example_book.csv', header = T)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>X</th><th scope=col>magnitude</th><th scope=col>time</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td> 1 </td><td>40989</td><td> 0 </td></tr>\n",
"\t<tr><td> 2 </td><td> 1445</td><td>21 </td></tr>\n",
"\t<tr><td> 3 </td><td> 563</td><td>31 </td></tr>\n",
"\t<tr><td> 4 </td><td> 329</td><td>33 </td></tr>\n",
"\t<tr><td> 5 </td><td> 555</td><td>49 </td></tr>\n",
"\t<tr><td> 6 </td><td> 513</td><td>54 </td></tr>\n",
"\t<tr><td> 7 </td><td>28145</td><td>58 </td></tr>\n",
"\t<tr><td> 8 </td><td> 100</td><td>62 </td></tr>\n",
"\t<tr><td> 9 </td><td> 164</td><td>82 </td></tr>\n",
"\t<tr><td>10 </td><td> 491</td><td>87 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" X & magnitude & time\\\\\n",
"\\hline\n",
"\t 1 & 40989 & 0 \\\\\n",
"\t 2 & 1445 & 21 \\\\\n",
"\t 3 & 563 & 31 \\\\\n",
"\t 4 & 329 & 33 \\\\\n",
"\t 5 & 555 & 49 \\\\\n",
"\t 6 & 513 & 54 \\\\\n",
"\t 7 & 28145 & 58 \\\\\n",
"\t 8 & 100 & 62 \\\\\n",
"\t 9 & 164 & 82 \\\\\n",
"\t 10 & 491 & 87 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
" X magnitude time\n",
"1 1 40989 0 \n",
"2 2 1445 21 \n",
"3 3 563 31 \n",
"4 4 329 33 \n",
"5 5 555 49 \n",
"6 6 513 54 \n",
"7 7 28145 58 \n",
"8 8 100 62 \n",
"9 9 164 82 \n",
"10 10 491 87 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## just looking at data\n",
"real_cascade[1:10, ]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## reading the events uptill prediction time, 600 secs, to be used for fitting\n",
"predTime <- 600\n",
"history <- real_cascade[real_cascade$time <= predTime, ]\n",
"## removing the first column, index\n",
"history <- history[ , 2:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using Power Law Kernel as Social Kernel"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"******************************************************************************\n",
"This program contains Ipopt, a library for large-scale nonlinear optimization.\n",
" Ipopt is released as open source code under the Eclipse Public License (EPL).\n",
" For more information visit http://projects.coin-or.org/Ipopt\n",
"******************************************************************************\n",
"\n"
]
}
],
"source": [
"## just to supress warnings as optimization \n",
"oldw <- getOption(\"warn\")\n",
"options(warn = -1)\n",
"## now for fitting we just call the fitting function, which uses IPOPT which needs some starting values for parameters\n",
"startParams <- c(K= 1,beta=1, c=250, theta= 1)\n",
"result <- fitParameters(startParams, history)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In IPOPT the optimal values returned are in order they are passed to the objective function hence:\n",
"\n",
"$\\kappa = result\\$solution[1]$\n",
"\n",
"$\\beta = result\\$solution[2] $\n",
"\n",
"$ c = result\\$solution[3] $\n",
"\n",
"$\\theta = result\\$solution[4] $"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of K = 1.000000'</span>"
],
"text/latex": [
"'Value of K = 1.000000'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of K = 1.000000'</span>"
],
"text/plain": [
"[1] \"Value of K = 1.000000\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Value of beta = 1.015493'"
],
"text/latex": [
"'Value of beta = 1.015493'"
],
"text/markdown": [
"'Value of beta = 1.015493'"
],
"text/plain": [
"[1] \"Value of beta = 1.015493\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of c = 250.657531'</span>"
],
"text/latex": [
"'Value of c = 250.657531'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of c = 250.657531'</span>"
],
"text/plain": [
"[1] \"Value of c = 250.657531\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of theta = 1.338108'</span>"
],
"text/latex": [
"'Value of theta = 1.338108'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of theta = 1.338108'</span>"
],
"text/plain": [
"[1] \"Value of theta = 1.338108\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sprintf(\"Value of K = %f\", result$solution[1])\n",
"sprintf(\"Value of beta = %f\", result$solution[2])\n",
"sprintf(\"Value of c = %f\", result$solution[3])\n",
"sprintf(\"Value of theta = %f\", result$solution[4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we plot part of the observed event series and the corresponding intensity function with fitted parameters. We do not plot the whole observed parts as it's too big to be seen with useful information on a single small graph\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2dB5zUxPuH3+sHBxwdaVIVQQGR\nXhRQD+x/BaUoiBUr4E8RREGaYEUURRAQERvFjhUUVFSkKVgQ6SAoTeHo1zb/TLJ9s9ls9p3d\n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\ndte6aZW6TnOP7pa6YxsG1sso03KC+5EhLMEwixAADEAkABiASAAwAJEAYAAiAcAARAKAAYgE\nAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEA\nYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIA\nDEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKA\nAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAw\nAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAG\nIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAA\nRAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiA\nSAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQ\nCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAi\nAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAk\nABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgE\nAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEA\nYAAiAcAARAKAAYgEAAMQCQAGIBIADEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGIBIA\nDEAkABiASAAwAJEAYAAiAcAARAKAAYgEAAMQCQAGiq9IQ1+NdQkAcFN8RepU4WCsiwCACzki\n/Xf3QDcDOkgJobSnu+VkDED4yBfp/yhPSoy2F6asl5IxAOEj/9Tue0kitXr6qs6OcBIcOi6l\nHAAoxVmk8yZtyXzL+uazf213qZRyAKAUZ5GaP6eMrvyX5c2bnJaS8YaUggBQnEVqOkUp6NTV\n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",
"text/plain": [
"Plot with title “A retweet cascade as a sequence of events”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## length of time to use for plottig\n",
"plotTime <- 600\n",
"\n",
"pltData <- history[history$time <= plotTime,]\n",
"intensity <- lambda(t=seq(0,plotTime,1), history = history, params = result$solution, inclusive = T)\n",
"par(mfrow=c(2,1))\n",
"data <- data.frame(time= seq(0,plotTime,1), intensity=intensity)\n",
"\n",
"plot(x = pltData$time, y = log(pltData$magnitude, base = 10), type = 'p', col = 'black', pch=16, bty = \"n\",\n",
" xaxt = \"n\", yaxt = \"n\", xlab = \"\", ylab = \"User Influence\", main = \"A retweet cascade as a sequence of events\",\n",
" cex.main = 1.8, cex.lab = 1.8)\n",
"axis(side = 1, cex.axis=1.4)\n",
"segments(x0 =pltData$time, y0 = 0, x1 = pltData$time, y1 = log(pltData$magnitude, base = 10),lty = 2)\n",
"points(x = pltData$time, y = log(pltData$magnitude, base = 10), type = 'p', col = 'black', pch=16)\n",
"axis(side = 2)\n",
"\n",
"\n",
"plot(x = data$time, y = data$intensity, type = 'l', col = 'black', pch=16, bty = \"n\", \n",
" xaxt = \"n\", yaxt = \"n\", xlab = \"\", ylab = \"Intensity\",\n",
" cex.main = 1.8, cex.lab = 1.8)\n",
"axis(side = 1, cex.axis=1.4)\n",
"axis(side = 2)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## To get predictions from fitted model we call the function provided in rscipts\n",
"prediction <- getTotalEvents(history = history, bigT = predTime, \n",
" K = result$solution[1], alpha = 2.016, \n",
" beta = result$solution[2], mmin = 1, \n",
" c = result$solution[3], theta = result$solution[4])\n",
"# settings warnings back to deafult\n",
"options(warn = oldw)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>total</dt>\n",
"\t\t<dd>216</dd>\n",
"\t<dt>nstar</dt>\n",
"\t\t<dd>0.922294642616219</dd>\n",
"\t<dt>a1</dt>\n",
"\t\t<dd>13.4134242589397</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[total] 216\n",
"\\item[nstar] 0.922294642616219\n",
"\\item[a1] 13.4134242589397\n",
"\\end{description*}\n"
],
"text/markdown": [
"total\n",
": 216nstar\n",
": 0.922294642616219a1\n",
": 13.4134242589397\n",
"\n"
],
"text/plain": [
" total nstar a1 \n",
"216.0000000 0.9222946 13.4134243 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"prediction"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"'The real size of cascade is 219 and predicted values is 216'"
],
"text/latex": [
"'The real size of cascade is 219 and predicted values is 216'"
],
"text/markdown": [
"'The real size of cascade is 219 and predicted values is 216'"
],
"text/plain": [
"[1] \"The real size of cascade is 219 and predicted values is 216\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'The relative error in percentage is 1.37'"
],
"text/latex": [
"'The relative error in percentage is 1.37'"
],
"text/markdown": [
"'The relative error in percentage is 1.37'"
],
"text/plain": [
"[1] \"The relative error in percentage is 1.37\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Total length of real casacde\n",
"nReal = nrow(real_cascade)\n",
"nPredicted = prediction['total']\n",
"sprintf(\"The real size of cascade is %d and predicted values is %d\", nReal, nPredicted)\n",
"sprintf(\"The relative error in percentage is %0.2f\", 100*abs(nReal-nPredicted)/nReal)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using Exponential Kernel as Social Kernel"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## just to supress warnings as optimization \n",
"oldw <- getOption(\"warn\")\n",
"options(warn = -1)\n",
"## now for fitting we just call the fitting function, which uses IPOPT which needs some starting values for parameters\n",
"## for exp there is no c value\n",
"startParams <- c(K= 0.01,beta=0.01, c=0, theta= 0.01)\n",
"result <- fitParameters(startParams, history, kernel.type = 'EXP')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In IPOPT the optimal values returned are in order they are passed to the objective function hence:\n",
"\n",
"$\\kappa = result\\$solution[1]$\n",
"\n",
"$\\beta = result\\$solution[2] $\n",
"\n",
"$ c = result\\$solution[3] $\n",
"\n",
"$\\theta = result\\$solution[4] $"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of K = 0.000382'</span>"
],
"text/latex": [
"'Value of K = 0.000382'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of K = 0.000382'</span>"
],
"text/plain": [
"[1] \"Value of K = 0.000382\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Value of beta = 1.015611'"
],
"text/latex": [
"'Value of beta = 1.015611'"
],
"text/markdown": [
"'Value of beta = 1.015611'"
],
"text/plain": [
"[1] \"Value of beta = 1.015611\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of c = 0.000000'</span>"
],
"text/latex": [
"'Value of c = 0.000000'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of c = 0.000000'</span>"
],
"text/plain": [
"[1] \"Value of c = 0.000000\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<span style=white-space:pre-wrap>'Value of theta = 0.005451'</span>"
],
"text/latex": [
"'Value of theta = 0.005451'"
],
"text/markdown": [
"<span style=white-space:pre-wrap>'Value of theta = 0.005451'</span>"
],
"text/plain": [
"[1] \"Value of theta = 0.005451\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sprintf(\"Value of K = %f\", result$solution[1])\n",
"sprintf(\"Value of beta = %f\", result$solution[2])\n",
"## no significance of c, we have to use it just to have same call for all kernel types\n",
"sprintf(\"Value of c = %f\", result$solution[3])\n",
"sprintf(\"Value of theta = %f\", result$solution[4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we plot part of the observed event series and the corresponding intensity function with fitted parameters. We do not plot the whole observed parts as it's too big to be seen with useful information on a single small graph\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2dB5zURPvHn+vHHR3pvfiKICDS\nixT18LW+CgJieUFRbBT/oiAiIqiIhSrFioivCIIFUVFAEFGQptgQpSMoTeDg4ODu2PwzyfbN\n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\nK5jVtU5aha4znXd3S92wLQPqZpRs8YzzkSEswTCLEAAMQCQAGIBIADAAkQBgACIBwABEAoAB\niAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAA\nkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYg\nEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABE\nAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBI\nADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJ\nAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIB\nwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQA\nGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQA\nAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBg\nACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAM\nQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoAB\niAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAA\nkQBgACIBwABEAoABiAQAAxAJAAYgEgAMQCQAGIBIADAAkQBgACIBwABEAoABiAQAAxAJAAYg\nEgAMyBHp0C09nVx/0TkpMQCIIeSIlDtkgJP/0FkpMQCIIeQf2n0LkUDxByIBwABEAoABiAQA\nAxAJAAYSSKQRY6JdA1B8SRiRHnouNeX5aFcCFFvCF2nmSvP3Y0SkC6jVgtTXol0LUFwJXyTq\nb/5+jIhU+9r1yuup86NdDVBMCVWkxU4oR/3PJGWMiFR5nvrfi2mfRrseoHgSqkjkiUnKGBGp\n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",
"text/plain": [
"Plot with title “A retweet cascade as a sequence of events”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## length of time to use for plottig\n",
"plotTime <- 600\n",
"\n",
"pltData <- history[history$time <= plotTime,]\n",
"intensity <- lambda(t=seq(0,plotTime,1), history = history, params = result$solution, inclusive = T, kernel.type = 'EXP')\n",
"par(mfrow=c(2,1))\n",
"data <- data.frame(time= seq(0,plotTime,1), intensity=intensity)\n",
"\n",
"plot(x = pltData$time, y = log(pltData$magnitude, base = 10), type = 'p', col = 'black', pch=16, bty = \"n\",\n",
" xaxt = \"n\", yaxt = \"n\", xlab = \"\", ylab = \"User Influence\", main = \"A retweet cascade as a sequence of events\",\n",
" cex.main = 1.8, cex.lab = 1.8)\n",
"axis(side = 1, cex.axis=1.4)\n",
"segments(x0 =pltData$time, y0 = 0, x1 = pltData$time, y1 = log(pltData$magnitude, base = 10),lty = 2)\n",
"points(x = pltData$time, y = log(pltData$magnitude, base = 10), type = 'p', col = 'black', pch=16)\n",
"axis(side = 2)\n",
"\n",
"\n",
"plot(x = data$time, y = data$intensity, type = 'l', col = 'black', pch=16, bty = \"n\", \n",
" xaxt = \"n\", yaxt = \"n\", xlab = \"\", ylab = \"Intensity\",\n",
" cex.main = 1.8, cex.lab = 1.8)\n",
"axis(side = 1, cex.axis=1.4)\n",
"axis(side = 2)\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## To get predictions from fitted model we call the function provided in rscipts\n",
"prediction <- getTotalEvents(history = history, bigT = predTime, \n",
" K = result$solution[1], alpha = 2.016, \n",
" beta = result$solution[2], mmin = 1, \n",
" c = result$solution[3], theta = result$solution[4],\n",
" kernel.type = 'EXP')\n",
"# settings warnings back to deafult\n",
"options(warn = oldw)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>total</dt>\n",
"\t\t<dd>1603</dd>\n",
"\t<dt>nstar</dt>\n",
"\t\t<dd>0.997453161223473</dd>\n",
"\t<dt>a1</dt>\n",
"\t\t<dd>3.97306402730592</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[total] 1603\n",
"\\item[nstar] 0.997453161223473\n",
"\\item[a1] 3.97306402730592\n",
"\\end{description*}\n"
],
"text/markdown": [
"total\n",
": 1603nstar\n",
": 0.997453161223473a1\n",
": 3.97306402730592\n",
"\n"
],
"text/plain": [
" total nstar a1 \n",
"1603.0000000 0.9974532 3.9730640 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"prediction"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"'The real size of cascade is 219 and predicted values is 1603'"
],
"text/latex": [
"'The real size of cascade is 219 and predicted values is 1603'"
],
"text/markdown": [
"'The real size of cascade is 219 and predicted values is 1603'"
],
"text/plain": [
"[1] \"The real size of cascade is 219 and predicted values is 1603\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'The relative error in percentage is 631.96'"
],
"text/latex": [
"'The relative error in percentage is 631.96'"
],
"text/markdown": [
"'The relative error in percentage is 631.96'"
],
"text/plain": [
"[1] \"The relative error in percentage is 631.96\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Total length of real casacde\n",
"nReal = nrow(real_cascade)\n",
"nPredicted = prediction['total']\n",
"sprintf(\"The real size of cascade is %d and predicted values is %d\", nReal, nPredicted)\n",
"sprintf(\"The relative error in percentage is %0.2f\", 100*abs(nReal-nPredicted)/nReal)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have used only a single starting point for optimization solver. To get best fittings it's generally recommended to use random different starting points and then select the parameters that best fit. We have not covered this trick here as it's more of a coding exercise."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### To understand how each function is implemented please look at the files in _rscripts_ folder"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.3.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}