-
Notifications
You must be signed in to change notification settings - Fork 3
/
incremental-online-statistics-006.nb
7881 lines (7656 loc) · 375 KB
/
incremental-online-statistics-006.nb
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
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* CreatedBy='Mathematica 10.4' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 158, 7]
NotebookDataLength[ 384167, 7873]
NotebookOptionsPosition[ 362026, 7506]
NotebookOutlinePosition[ 367300, 7623]
CellTagsIndexPosition[ 367257, 7620]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[CellGroupData[{
Cell["Windowed Incremental Online Statistics", "Title",
CellChangeTimes->{{3.6698529556858463`*^9, 3.669852964981929*^9}, {
3.703627058983081*^9, 3.70362706623743*^9}, {3.703628927030475*^9,
3.703628928893201*^9}},ExpressionUUID->"b0744051-821f-478f-bc14-\
6bebce883993"],
Cell["Extracting Models from Data, One Observation at a Time", "Subtitle",
CellChangeTimes->{
3.762854478509541*^9, {3.762854525374554*^9,
3.762854537420007*^9}},ExpressionUUID->"b3f72312-1f30-4cff-a8b6-\
4689f3a236a9"],
Cell["Brian Beckman", "Subsubtitle",
CellChangeTimes->{{3.669852973717079*^9,
3.6698529760933933`*^9}},ExpressionUUID->"56da506d-a60f-4f33-b478-\
9bef0e27827d"],
Cell["11 May 2024", "Subsubtitle",
CellChangeTimes->{{3.669916040271191*^9, 3.669916050814829*^9}, {
3.670568322040224*^9, 3.67056832212545*^9}, {3.703627074282936*^9,
3.703627081067047*^9}, {3.7628541692863617`*^9, 3.762854179784972*^9}, {
3.924467511030157*^9,
3.924467519844315*^9}},ExpressionUUID->"381e9851-d168-47b4-94ec-\
14616942eb57"],
Cell[TextData[{
"We calculate descriptive statistics\[LongDash]mean, unbiased variance, \
windowed versions of the same\[LongDash]of sequences of numerical data. ",
StyleBox["Fold",
FontWeight->"Bold",
FontSlant->"Italic"],
" and its variants decouple iteration and accumulation from data access. \
Exactly the same stateless accumulator functions work over data distributed \
over space in memory or in tables, or over time in asynchronous streams. \
Foldable accumulator functions can be tested independently of data source, \
say over ground-truth test data. The same functions can be deployed in harsh \
asynchronous environments without even being recompiled."
}], "Text",
CellChangeTimes->{{3.6704315337480507`*^9, 3.670431538810305*^9}, {
3.670433011092613*^9, 3.670433012117442*^9}, {3.670517974613204*^9,
3.670518132702087*^9}, {3.703257038903595*^9, 3.70325709498783*^9}, {
3.703521036238616*^9, 3.7035211007149377`*^9}, {3.7036271493714*^9,
3.703627240750091*^9}, {3.7036273107413287`*^9, 3.703627493470467*^9}, {
3.7628539631382866`*^9, 3.7628541530644703`*^9}, {3.762854594374955*^9,
3.7628546866424217`*^9}, {3.762854747110767*^9, 3.762854749523016*^9}, {
3.762856715095398*^9, 3.762856836630719*^9}, {3.9244192850425167`*^9,
3.924419285724481*^9}, {3.924419362109108*^9,
3.924419417849194*^9}},ExpressionUUID->"7692651a-e82e-447d-ba88-\
f11c8d7ccc78"],
Cell[CellGroupData[{
Cell["Prelude: Running Count", "Chapter",
CellChangeTimes->{{3.6704315063231487`*^9, 3.6704315092341843`*^9}, {
3.703627512012957*^9,
3.703627514556757*^9}},ExpressionUUID->"7189fc66-31fb-4cb2-8745-\
c29fa068f25d"],
Cell["\<\
For ground truth, we want a fixed but random collection of data. The \
following is a sample of length ten from the standard normal distribution, \
mean zero, standard deviation one:\
\>", "Text",
CellChangeTimes->{{3.706391457777802*^9, 3.706391483858736*^9}, {
3.762854718260289*^9, 3.762854722823119*^9}, {3.762854797689057*^9,
3.7628548874162083`*^9}},ExpressionUUID->"bb306649-10eb-4b62-a946-\
2a8b77fb5924"],
Cell[BoxData[
RowBox[{
RowBox[{"zs", " ", "=", " ",
RowBox[{"{",
RowBox[{
RowBox[{"-", "0.178654"}], ",", "0.828305", ",", "0.0592247", ",",
RowBox[{"-", "0.0121089"}], ",",
RowBox[{"-", "1.48014"}], ",",
RowBox[{"-", "0.315044"}], ",",
RowBox[{"-", "0.324796"}], ",",
RowBox[{"-", "0.676357"}], ",", "0.16301", ",",
RowBox[{"-", "0.858164"}]}], "}"}]}], ";"}]], "Input",
CellChangeTimes->{{3.70639144335928*^9, 3.706391452389128*^9},
3.7063914992771873`*^9},
CellLabel->"In[1]:=",ExpressionUUID->"8ca4ee7b-ccb5-4754-84d6-fd9fc5f93bad"],
Cell[TextData[{
"We begin with focusing attention on ",
StyleBox["Fold",
FontSlant->"Italic"],
" rather than on any particular accumulator function. ",
StyleBox["Fold", "Code"],
" has three arguments: an accumulator function, an initial state, and an \
abstract sequence of data. All variations of ",
StyleBox["Fold\[LongDash]", "Code"],
"over asynchronous streams, on-demand (lazy) streams, tables, lists, arrays\
\[LongDash]have exactly the same signature."
}], "Text",
CellChangeTimes->{{3.670433018774361*^9, 3.670433023108251*^9}, {
3.670518142496415*^9, 3.670518147005398*^9}, {3.703521108648394*^9,
3.703521119744053*^9}, {3.762854740100055*^9, 3.762854784514863*^9}, {
3.762856879508958*^9, 3.762856916403267*^9}, {3.7628570048641543`*^9,
3.762857100752841*^9}, {3.924419362157299*^9, 3.924419362172904*^9}, {
3.9244194446089*^9,
3.9244196368792753`*^9}},ExpressionUUID->"ffa4b7c9-3950-48b1-9915-\
531b1df13028"],
Cell[CellGroupData[{
Cell[BoxData[{
RowBox[{
RowBox[{"ClearAll", "[", "cume", "]"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"cume", "[",
RowBox[{"n_", ",", "z_"}], "]"}], ":=",
RowBox[{"n", "+", "1"}]}], ";"}], "\[IndentingNewLine]",
RowBox[{"Fold", "[",
RowBox[{"cume", ",", "0", ",", "zs"}], "]"}]}], "Input",
CellChangeTimes->{{3.670362262676239*^9, 3.670362403112179*^9}, {
3.670362491967467*^9, 3.670362500108472*^9}, {3.670382335403171*^9,
3.670382392568015*^9}, {3.670431573529311*^9, 3.67043161176023*^9}},
CellLabel->"In[2]:=",ExpressionUUID->"9e959217-11b5-422a-a847-02da0de6f86c"],
Cell[BoxData["10"], "Output",
CellChangeTimes->{{3.670362386860121*^9, 3.670362403451788*^9},
3.6703625007501388`*^9, {3.670382380701834*^9, 3.670382393646204*^9}, {
3.6704316052181597`*^9, 3.670431612698892*^9}, 3.6704316598530817`*^9,
3.670434305008449*^9, 3.670510828814732*^9, 3.670511021991407*^9,
3.6705156383222437`*^9, 3.670532554390843*^9, 3.670533641128706*^9,
3.670534990204936*^9, 3.670545241683096*^9, 3.670568332167439*^9,
3.670603468588195*^9, 3.670775509237636*^9, 3.6708648250455*^9,
3.670872521140728*^9, 3.670956957876609*^9, 3.6709746721071672`*^9,
3.670979363897111*^9, 3.671033133935173*^9, 3.671033181090272*^9,
3.671033248379916*^9, 3.671039609902426*^9, 3.671042461077897*^9,
3.671044042463487*^9, 3.671065160885859*^9, 3.6710834272121267`*^9,
3.671208538711453*^9, 3.671213360851935*^9, 3.67121764635679*^9,
3.671218311528186*^9, 3.671380182639037*^9, 3.671467523124352*^9,
3.67149460139983*^9, 3.671551662821696*^9, 3.6715632502793927`*^9,
3.671587605321035*^9, 3.671654764447816*^9, 3.671663238240183*^9,
3.6716657335167413`*^9, 3.671666441628186*^9, 3.671887645821486*^9,
3.671939612530803*^9, 3.671974959421951*^9, 3.672154916974106*^9,
3.67222181089568*^9, 3.672306126242933*^9, 3.672308486802026*^9,
3.672311740498646*^9, 3.672311893426462*^9, 3.672476728306038*^9,
3.672833720310568*^9, 3.672911581556663*^9, 3.673548773060635*^9,
3.676478494593018*^9, 3.703191966360875*^9, 3.703238552830134*^9,
3.703238745418429*^9, 3.703247642341167*^9, 3.7035209774920692`*^9,
3.70352111141931*^9, 3.703626685236958*^9, 3.70639150619586*^9,
3.762854892146904*^9, 3.76311091518804*^9, 3.763122795361785*^9,
3.924419656908058*^9},
CellLabel->"Out[4]=",ExpressionUUID->"635faa0a-f0de-4a5d-b4a5-19df7a2c74b3"]
}, Open ]],
Cell[TextData[{
"The first argument of the accumulator function, ",
StyleBox["cume", "Input"],
", is a ",
StyleBox["circulating state",
FontWeight->"Bold",
FontSlant->"Italic"],
", kept externally to the function. The caller must feed in the ",
StyleBox["prior",
FontWeight->"Bold",
FontSlant->"Italic"],
" value ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"72a1a6cf-3e74-4bba-8ecd-19e149c6ff19"],
" of the state and a new observation ",
Cell[BoxData[
FormBox["z", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"fdcf5742-02b2-4d65-b5bc-f26bfe6f02fa"],
". The caller receives the ",
StyleBox["posterior",
FontWeight->"Bold",
FontSlant->"Italic"],
" value of the state, ",
Cell[BoxData[
FormBox[
RowBox[{"n", "+", "1"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"5cb215fb-0232-494a-b90a-a3c4a01a8235"],
"."
}], "Text",
CellChangeTimes->{{3.92442012286875*^9, 3.924420317276824*^9}, {
3.9244203481831837`*^9,
3.924420375230352*^9}},ExpressionUUID->"c23474ac-c5ba-41da-aca1-\
c695b816f0af"],
Cell[TextData[{
"To see all intermediate results, use ",
StyleBox["FoldList", "Code"],
":"
}], "Text",
CellChangeTimes->{{3.7628569426216598`*^9,
3.7628569591755505`*^9}},ExpressionUUID->"d6246666-3a29-4921-b4a6-\
4ec5a48b9400"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"FoldList", "[",
RowBox[{"cume", ",", "0", ",", "zs"}], "]"}]], "Input",
CellChangeTimes->{{3.7628569869815464`*^9, 3.7628569942567587`*^9}},
CellLabel->"In[5]:=",ExpressionUUID->"d6d3e7be-b5de-4b0e-a374-7d4fc03e94b1"],
Cell[BoxData[
RowBox[{"{",
RowBox[{
"0", ",", "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7",
",", "8", ",", "9", ",", "10"}], "}"}]], "Output",
CellChangeTimes->{3.762856995336447*^9, 3.763110917204025*^9,
3.7631227969459224`*^9, 3.924419666092806*^9},
CellLabel->"Out[5]=",ExpressionUUID->"6d3014be-7ac3-48e5-ade7-1a8f6907a012"]
}, Open ]],
Cell["LEFT FOLD", "Item",
CellChangeTimes->{{3.762855000301767*^9,
3.7628550046819477`*^9}},ExpressionUUID->"d3a92e89-9116-4d74-a1d5-\
328750d8997d"],
Cell[TextData[{
"Wolfram\[CloseCurlyQuote]s documentation for ",
StyleBox["Fold", "Code"],
" includes an example that explains this operator symbolically:"
}], "Text",
CellChangeTimes->{{3.703627654696693*^9, 3.703627655361246*^9}, {
3.703627730638696*^9,
3.703627778906796*^9}},ExpressionUUID->"7df49337-3474-47de-8329-\
fe349fd58939"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Fold", "[",
RowBox[{"f", ",", "z", ",",
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}]}], "]"}]], "Input",
CellChangeTimes->{3.703627846568565*^9},
CellLabel->"In[6]:=",
CellID->12834,ExpressionUUID->"d965aa6c-3c1f-407c-99bd-dc38275b68d1"],
Cell[BoxData[
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], ",", "b"}], "]"}], ",", "c"}], "]"}],
",", "d"}], "]"}]], "Output",
CellChangeTimes->{3.703627785817709*^9, 3.703627847322299*^9,
3.706391509227429*^9, 3.706391558600135*^9, 3.7628548959191914`*^9,
3.763110919065629*^9, 3.7631227986549654`*^9, 3.924419680465679*^9},
ImageSize->{167, 16},
ImageMargins->{{0, 0}, {0, 0}},
ImageRegion->{{0, 1}, {0, 1}},
CellLabel->"Out[6]=",ExpressionUUID->"d75b4757-5b58-43a2-bb34-852bc70e9941"]
}, Open ]],
Cell[TextData[{
StyleBox["Fold", "Code"],
" first computes ",
Cell[BoxData[
FormBox[
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"0b6e7b89-386b-4072-b71f-30c85cb3d9b3"],
", then feeds the result\[LongDash]the posterior value of the circulating \
state\[LongDash]back into ",
Cell[BoxData[
FormBox["f", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"4397797f-78bb-4557-949e-901cb99c2d59"],
", computing ",
Cell[BoxData[
FormBox[
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], ",", "b"}], "]"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"0ecd7888-8f10-45c1-b34a-5d12d67cf4a0"],
", and so on. More concisely, ",
StyleBox["Fold", "Input"],
" iteratively applies the binary function ",
Cell[BoxData[
FormBox["f", TraditionalForm]],ExpressionUUID->
"581dc6b4-6c6f-4278-8965-0efbd45c391c"],
" to the sequence ",
Cell[BoxData[
FormBox[
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}], TraditionalForm]],
ExpressionUUID->"e031a03f-0b27-4cbd-b71c-a8e7bbe9812b"],
". ",
StyleBox["Fold", "Code"],
" places no restriction on its accumulator-function argument ",
Cell[BoxData[
FormBox["f", TraditionalForm]],ExpressionUUID->
"0ff9a00e-93a3-4cdc-934b-c698c694600c"],
" other than it accept an argument of the type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "z"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"67b81c5c-fa4a-477e-bfc0-3fa099658070"],
" of ",
Cell[BoxData[
FormBox["z", TraditionalForm]],ExpressionUUID->
"9e01e919-f2cf-4a0d-b6b8-2e2cfa32180d"],
" in its first position, an argument of the type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "a"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"e3cd03cd-e4cb-4e49-a99d-a5947ff34844"],
" of any of ",
Cell[BoxData[
FormBox[
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], TraditionalForm]],
ExpressionUUID->"398020e0-da04-4333-a6fd-2a8db0b2ae38"],
", in its second position, and produces a result of type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "a"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"bb3a7449-fc1a-42a9-8533-66b1a69e5970"],
"."
}], "Text",
CellChangeTimes->{{3.703627897564636*^9, 3.7036281013370333`*^9}, {
3.703628214280526*^9, 3.703628271644765*^9}, {3.706391520184956*^9,
3.7063915501904993`*^9}, {3.762854898234641*^9, 3.762854900241898*^9}, {
3.924419701247325*^9, 3.924419705367957*^9}, {3.924422494352737*^9,
3.924422537026087*^9}, {3.924422662922558*^9, 3.9244227332992277`*^9}, {
3.924422781899427*^9,
3.9244228588494873`*^9}},ExpressionUUID->"6ef0c628-82c2-4845-a672-\
48d64ad3bf9d"],
Cell["RIGHT FOLD", "Item",
CellChangeTimes->{{3.7628550272069793`*^9,
3.762855028796365*^9}},ExpressionUUID->"87b099e7-f88e-43d8-9198-\
d0803ab83131"],
Cell["\<\
We use only the left fold in this document. Contrast it to the right fold, \
presented for conceptual completeness (the following is an expression of \
right fold in terms of left fold):\
\>", "Text",
CellChangeTimes->{{3.703628283798584*^9, 3.7036283431829658`*^9}, {
3.7628549389314346`*^9, 3.762854960735669*^9}, {3.7628550365615587`*^9,
3.762855119152248*^9}, {3.7631109324629526`*^9, 3.763110941310856*^9}, {
3.924419777506917*^9,
3.924419798985585*^9}},ExpressionUUID->"8ec0345b-1119-4b86-9503-\
9afb895b2d3c"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Fold", "[",
RowBox[{
RowBox[{
RowBox[{"{",
RowBox[{"x", ",", "y"}], "}"}], "\[Function]",
RowBox[{"f", "[",
RowBox[{"y", ",", "x"}], "]"}]}], ",", "z", ",",
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}]}], "]"}]], "Input",
CellChangeTimes->{{3.7036277976045523`*^9, 3.703627798479802*^9}, {
3.703627828938348*^9, 3.703627875074729*^9}, {3.703628309261767*^9,
3.703628311575758*^9}, 3.924419918713853*^9},
CellLabel->"In[7]:=",ExpressionUUID->"b08724dc-9031-4525-b7f6-4004e64e4bc5"],
Cell[BoxData[
RowBox[{"f", "[",
RowBox[{"d", ",",
RowBox[{"f", "[",
RowBox[{"c", ",",
RowBox[{"f", "[",
RowBox[{"b", ",",
RowBox[{"f", "[",
RowBox[{"a", ",", "z"}], "]"}]}], "]"}]}], "]"}]}], "]"}]], "Output",
CellChangeTimes->{
3.703627875445041*^9, 3.703628312329408*^9, 3.7063915561834383`*^9, {
3.7631109228499*^9, 3.763110944530025*^9}, 3.7631228014144754`*^9,
3.924419924430501*^9},
CellLabel->"Out[7]=",ExpressionUUID->"7a3aa6d7-b7b9-4f44-b712-b7e567eaf376"]
}, Open ]],
Cell[TextData[{
"Operators of the same signature as ",
StyleBox["Fold", "Code"],
" are broadly useful for separating computation from data access. Wolfram\
\[CloseCurlyQuote]s ",
StyleBox["Fold", "Code"],
" works only on lists in memory, but similar fold operators with exactly the \
same signatures are easy to write over asynchronous and lazy streams. "
}], "Text",
CellChangeTimes->{{3.703628376653116*^9, 3.703628404405504*^9}, {
3.703628961422155*^9, 3.703629021349121*^9}, {3.703629340231266*^9,
3.703629388683691*^9}, {3.762855129706135*^9, 3.762855200701746*^9}, {
3.92442002818021*^9, 3.924420036775334*^9},
3.924420074063136*^9},ExpressionUUID->"7c537260-ce0e-46e4-9691-\
63506a1ea692"]
}, Open ]],
Cell[CellGroupData[{
Cell["Running Mean", "Chapter",
CellChangeTimes->{{3.670382281644032*^9, 3.6703822840358477`*^9}, {
3.703417921227977*^9,
3.703417921748693*^9}},ExpressionUUID->"2e907cf8-02e7-4eb1-97b9-\
8045ac871b0c"],
Cell[TextData[{
"Write ",
Cell[BoxData[
FormBox["x", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"379bb54f-6d61-4e39-9168-d6671b6574a1"],
" for the mean-so-far, and write a new accumulator function that computes \
the running mean. Its circulating state includes the running mean ",
Cell[BoxData[
FormBox["x", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"638dee21-6102-4fb3-9fc0-c28032f55ef5"],
", the running count ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"40cbe654-a80e-4da0-be1d-42c2fe399b23"],
", and the running sum. The new accumulator function computes the new values \
of all three state variables in the obvious way. Note that all three state \
variables are necessary to accomplish the task of tracking the running mean. \
We relieve that situation shortly below."
}], "Text",
CellChangeTimes->{{3.670431465148507*^9, 3.67043148791577*^9}, {
3.670518308010725*^9, 3.670518363776095*^9}, 3.6714946268792133`*^9, {
3.7032571068989577`*^9, 3.70325710732666*^9}, {3.762856628754756*^9,
3.762856678357593*^9}, {3.924423258815722*^9,
3.924423428307579*^9}},ExpressionUUID->"487e0667-44b9-4f04-8636-\
162ffad41841"],
Cell[CellGroupData[{
Cell[BoxData[{
RowBox[{
RowBox[{"ClearAll", "[", "cume", "]"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"cume", "[",
RowBox[{
RowBox[{"{",
RowBox[{"x_", ",", "n_", ",", "sum_"}], "}"}], ",", "z_"}], "]"}], ":=",
"\[IndentingNewLine]",
RowBox[{"{",
RowBox[{
FractionBox[
RowBox[{"sum", "+", "z"}],
RowBox[{"n", "+", "1"}]], ",",
RowBox[{"n", "+", "1"}], ",",
RowBox[{"sum", "+", "z"}]}], "}"}]}], ";"}], "\[IndentingNewLine]",
RowBox[{"Fold", "[",
RowBox[{"cume", ",",
RowBox[{"{",
RowBox[{"0", ",", "0", ",", "0"}], "}"}], ",", "zs"}], "]"}]}], "Input",
CellChangeTimes->{{3.670362262676239*^9, 3.670362403112179*^9}, {
3.670362491967467*^9, 3.670362500108472*^9}, {3.670382335403171*^9,
3.670382392568015*^9}, {3.6704316503726196`*^9, 3.670431652756393*^9},
3.671494635109106*^9},
CellLabel->"In[12]:=",ExpressionUUID->"d347849b-80e4-4d80-8107-7605d03bf929"],
Cell[BoxData[
RowBox[{"{",
RowBox[{
RowBox[{"-", "0.27947242`"}], ",", "10", ",",
RowBox[{"-", "2.7947242`"}]}], "}"}]], "Output",
CellChangeTimes->CompressedData["
1:eJxTTMoPSmVkYGCwB+I4j7NfT0W8djyVqORwBkgzzZo99yOQXhN8cCuI9io6
8+0zkFaY6Wf5B0i/mqB6EERbbDqR+RdIN/8yz2aKfO1o4NG+kRdIN0ysuS0H
pHUMVt4qAtJX/v2omAeizdUsFwHpz3P3Fp8G0ncYWaWugOiyupRrQPrw6v1L
PwDp1YuXrAbR0trRW0H0ziN25z8D6RNcS4y/Auk9T/x/gmhWIzlPhqjXjgn2
mSacQFphUYS3G5DOvSazzANIG9ac3esFpE+8/CTgDaTbtK9JzQLSMbtTDxwB
0l7cq/9eBNIfFO9cfQukhS54130G61+d9B9Iv/rRr6sQ/drRw/5kgAqQvmG6
qUMVSP9bZ/oQRO913/N4IpBm+DjJeTWQXpvzvnUPkD4kvjBFJOa144ZFcXym
QLp04gnLOCC9cv3thHggfb9r4vcEIJ2XvY4rEUgf+MHdvhFIt2/muh4f+9qR
JXPz7VYgve7Yoj974l478uy40hyc8tpRqkDN3H36a8dj592/xAJpja963HFA
mqXRJzkJSEsKriyXnvHa8eaF/NbEucBw+/ZkmgjnG8cVf0taJgDpp9tn+E0D
0mZfv1vY2b51BACKWwll
"],
CellLabel->"Out[14]=",ExpressionUUID->"3643e979-a816-4880-ba4c-fa94b6821f5a"]
}, Open ]],
Cell[TextData[{
"Check against ",
StyleBox["Mathematica",
FontSlant->"Italic"],
" built-in."
}], "Text",
CellChangeTimes->{{3.670431675634911*^9,
3.670431683354504*^9}},ExpressionUUID->"68ed2278-ce54-4449-916c-\
7228ebecc711"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Mean", "[", "zs", "]"}]], "Input",
CellChangeTimes->{{3.67038269040097*^9, 3.67038269418116*^9}},
CellLabel->"In[15]:=",ExpressionUUID->"4f6889ba-e985-4f05-9d17-8e395df44066"],
Cell[BoxData[
RowBox[{"-", "0.27947242`"}]], "Output",
CellChangeTimes->CompressedData["
1:eJwVz1ssW3EABvBOZKI68SB7ODLm2pdJJgjHbf3XJZuKFRObS1tVRBDLlkxF
Is3c+qiRbUjqoZlmKhId4gWtS9jOLjXqPg9L+8KprUvpwurynYcvv6cv+b5I
ZUtx7Q0ej5eFZJyvCSafssQ84PEy8PJPtOgr5Kfp9X/hB9fiNGeP/3evB8Za
pLQP2ouEC5xWhmm4gBof3ej3jCVOh9Z8C75OV/8Mh88PTXsvIHX0Xz0M780L
aQPsSre8/AJHDTcpOywJ0Ki2YId4YcQNl2jjGKdDIJvmXFsV2TxwxziSeAr5
tqIzzrjFiEe8cpY8cDYmBcLf8eWSPLguDTc+hNZB21w+FLefhEhgzrdtaggK
LfXWZajZKLv8AZ0fDzaP4Ym8sMMD9fXjyivoVuvi71awpN/OSGNg8+dJbSx8
kpLyi1O8O+fQwRXqTfYY9J65u2dhzYxBFVrJkqhURXAynEliaBl8lX2gkMPU
O/3/FLCtYIJfDUW3g3vNMCNUsC2vQu9iar8biuff+2Zl+J271Vmigp/8zqve
sSSi736QDErqHtcoITVqag0bYInWlNBTrccO03hXX6CL2JqWC99Cl66Uzso8
JtcRYgXY
"],
CellLabel->"Out[15]=",ExpressionUUID->"5de07447-f18e-42be-8e08-8b1bfa49ecda"]
}, Open ]],
Cell["\<\
Notice how the mean improves and stabilizes as data accumulate, here over a \
longer and random sample:\
\>", "Text",
CellChangeTimes->{{3.762857156081581*^9, 3.762857170812067*^9}, {
3.762857401452814*^9, 3.762857418179927*^9}, {3.924423204604253*^9,
3.924423209718257*^9}},ExpressionUUID->"8ffb72d3-dbb2-4eb0-bb55-\
5e97fa788022"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"ListLinePlot", "[",
RowBox[{
RowBox[{
RowBox[{"#", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}],
"&"}], "/@",
RowBox[{"FoldList", "[",
RowBox[{"cume", ",",
RowBox[{"{",
RowBox[{"0", ",", "0", ",", "0"}], "}"}], ",",
RowBox[{"RandomVariate", "[",
RowBox[{
RowBox[{"NormalDistribution", "[", "]"}], ",", "10000"}], "]"}]}],
"]"}]}], "]"}]], "Input",
CellChangeTimes->{{3.762857172632971*^9, 3.762857215053729*^9}, {
3.762857258492292*^9, 3.76285725938229*^9}, {3.7628573040402527`*^9,
3.7628573914448557`*^9}, 3.7628574218163824`*^9, {3.924423084640047*^9,
3.924423121730132*^9}},
CellLabel->"In[18]:=",ExpressionUUID->"c0bbb199-ec16-4eb8-a32e-7a3604937ac4"],
Cell[BoxData[
GraphicsBox[{{}, {{}, {},
TagBox[
{RGBColor[0.368417, 0.506779, 0.709798], PointSize[
NCache[
Rational[1, 180], 0.005555555555555556]], AbsoluteThickness[2],
LineBox[{{1., 0.}, {1.0354213023774852`, 0.06137553146603105}}],
LineBox[{{2.945015639825459, 0.06137553146603105}, {
3., -0.035869760950735685`}, {3.370292592602585,
0.06137553146603105}}],
LineBox[{{5.791201429217449, 0.06137553146603105}, {6.,
0.02761415474319471}, {7., -0.029973997373973077`}, {7.71954786924624,
0.06137553146603105}}],
LineBox[{{8.667075001769138, 0.06137553146603105}, {9.,
0.04360595386958149}, {9.735735425235989, -0.08204331259620706}}],
LineBox[{{18.92702231365751, -0.08204331259620706}, {
19., -0.07960336775599539}, {20., -0.05182441678111345}, {
20.719540907842656`, -0.08204331259620706}}],
LineBox[{{250.64758744816316`, -0.08204331259620706}, {
251., -0.08159389677060094}, {252., -0.07904832584981544}, {
252.82769393904462`, -0.08204331259620706}}],
LineBox[{{262.5427961175753, -0.08204331259620706}, {
263., -0.08078343282558811}, {264., -0.07781225171959663}, {
265., -0.07596796701577432}, {266., -0.08008408945384235}, {
267., -0.07743566777190702}, {268., -0.07938811526481278}, {
269., -0.0818208650721781}, {
269.08485799702646`, -0.08204331259620706}}],
LineBox[{{270.4729023877355, -0.08204331259620706}, {
271., -0.07936942694546116}, {272., -0.08147115362230585}, {
273., -0.07720131138480645}, {274., -0.07619142459972969}, {
275., -0.07544559130733364}, {276., -0.07832969545555425}, {
277., -0.07312231884922261}, {278., -0.07600444904989347}, {
279., -0.0778482567105328}, {280., -0.07813382692155277}, {
281., -0.07828358368196733}, {
281.61828858640166`, -0.08204331259620706}}],
LineBox[{{285.2809950878, -0.08204331259620706}, {
286., -0.07986097861764664}, {287., -0.08031803340054697}, {
288., -0.0774679493013079}, {289., -0.07797154267364766}, {
290., -0.077209620332817}, {291., -0.07822336017839014}, {
292., -0.07563113914459126}, {
292.833250980226, -0.08204331259620706}}],
LineBox[{{294.6475405019184, -0.08204331259620706}, {
295., -0.0807166491468058}, {
295.72376492546266`, -0.08204331259620706}}],
LineBox[{{298.5119381215454, -0.08204331259620706}, {
299., -0.07909218248799617}, {300., -0.08144459602760372}, {
300.498743598228, -0.08204331259620706}}],
LineBox[{{301.4483233262694, -0.08204331259620706}, {
302., -0.08130286017036174}, {303., -0.07719415257745564}, {
304., -0.07806360041907028}, {305., -0.07385614495193348}, {
306., -0.07098817992845434}, {307., -0.07523692644028782}, {
308., -0.07531906510997577}, {309., -0.0741140291759306}, {
309.86957035750055`, -0.08204331259620706}}],
LineBox[{{311.2586468269481, -0.08204331259620706}, {
312., -0.0766736681927368}, {313., -0.08125861377255744}, {
313.5369160431173, -0.08204331259620706}}],
LineBox[{{314.24660761760464`, -0.08204331259620706}, {
315., -0.07997569084046224}, {316., -0.07991096572861911}, {
317., -0.07790108195310093}, {318., -0.07871267292742759}, {
319., -0.08051832035541324}, {320., -0.07929625636289447}, {
320.5681577496868, -0.08204331259620706}}],
LineBox[{{324.3203457075884, -0.08204331259620706}, {
325., -0.07919040067686864}, {
325.78142159947714`, -0.08204331259620706}}],
LineBox[{{326.26660665364585`, -0.08204331259620706}, {
327., -0.07984810206579007}, {328., -0.07855164151152592}, {
329., -0.08187124173090371}, {330., -0.07807709620968023}, {
331., -0.07647737266759691}, {332., -0.07655301936951117}, {
333., -0.07465304569106836}, {334., -0.0777546633920706}, {
335., -0.0750444831074412}, {336., -0.07734294463528738}, {
337., -0.08149791639867392}, {
337.5053337686251, -0.08204331259620706}}],
LineBox[{{339.8490002434518, -0.08204331259620706}, {
340., -0.08162128922648436}, {341., -0.08129882464571471}, {
341.18466983394245`, -0.08204331259620706}}],
LineBox[{{345.721070406105, -0.08204331259620706}, {
346., -0.08035397962760023}, {347., -0.08080665481534587}, {
347.88284887120426`, -0.08204331259620706}}],
LineBox[{{350.6599880086423, -0.08204331259620706}, {
351., -0.08085445976197969}, {352., -0.08131684648411301}, {
353., -0.07795962952614653}, {354., -0.08001197942554178}, {
355., -0.07752277342196508}, {356., -0.07557435537703855}, {
357., -0.08040506113762294}, {
357.33878936681987`, -0.08204331259620706}}],
LineBox[{{365.36896704201996`, -0.08204331259620706}, {
366., -0.08036522252130292}, {367., -0.07746384017278937}, {
368., -0.07644418672099229}, {369., -0.07810787872629468}, {
369.6406939970665, -0.08204331259620706}}], LineBox[CompressedData["
1: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
urgSqyXD6vGsgvoaP7J/MmRFPj+dONvJ/slwVjvQ4XeXPWT/ZGxfO+Ht/BbS
xyAZV7+WvspvJrlhMlrXBJ7qcnAf2T8ZE+7/jNIb5EP2T0acz7NxAXt8yf7J
aOu02/OYmPSxSsa/m2s/v+lFcttkRI+49WfxjRCyfzISDdROJ82JIPsnY07U
zI6X3Kj/3ZIx2a3hV8YSYq9kWKgvvnzZP5zsn4zlrZnn52yj/KHJOMsd+HzU
C+o/TjJmuz+I2H+e8nOTsXVM96pLbjQfiJKxuY4XfseC5MpkqG1fEvB5Nsmz
kiFePj7CIJTGW04ybq64M0XdmvwtLxlFY74NnB5K/lSYDAPv37sW9ycuScbE
9dnyr5eIy5JhtrHcrXsOcWUy8rZbZH3Jp/JrVP3rYHHy4VlqT30ykkLzPPov
JW5ORi+tQZ0tZhK3JmObXs1RyU7SV42LCQsCv2W+oP5Q5+L86PlT+usRa3Dx
KH+obbI1jSctLj7d7VdblkXjR5uL2zf/GWh5k1yHi/6rroce+0j9rctFk7dh
QVImyfW54LzBrQxNYgMufHpuP9txHrVnJBeD5YOb+m4kNuTCIHS8nc1UGj9G
XBR0fGWT9JfGizEXmzMPugne7W5nEy7shusHb9hI49OUi3HBH167LHFv59lc
JNkPXnhMZxWNPy403Oz9Zgzb3M7mXNxJmi90/+5C45ELbsiU5Qmebu1szUXR
HduncdZUni0XcweIbm4zIf+056LL4A7DF58i/3HkYt1a6Qm1ndvaeS0XkYaF
9oFLttD45eL71ajx12upflcu8td22K8rpfrcuDhTfnjeoxzndvbgojTln+uf
Mlca31yUP2xyvjKFytvDRfRwxGj2Jf19ufj27M2Ut4Y03wRyMerDpfnbLan9
oVwkGncsyDy/sZ0juWh50t9wxOeV5A9c6JweUNXpyYZ2TuDCxEB8zDiLmKtq
b7XP5/i+Tu3M52JVqfuNH+s8yF+4eBt3+cnofmQfmaq8mY/0ppt5k/9w4f7o
w6kLm0j/Q1x0f9d1ttF/ZJ8sLpYmyN/Yxlu2c7Zq/Nw6u6pl1kjyL5X9E1zd
lv6abPb/OVc1fvqf+Ldu09B2zuOiR45neuXg6e18mYurR28OvGru1M6FXJgV
SFZc9NzYzsVctLYM7/lryrJ2LlGN/9pvj1ecnd3Opar2/5gauTPevJ3LuNha
kmH2NHhaO1dwsfFn8BVdZ+d2ruSierjo4ebcte1czcUUP/f8Xinz27lGNR4H
3Sp433tuO9dy0TP96W5TUPp6LvyHbJ7yb5F9OzdyMaBmaK7XndXt3MxF7o9d
JXOGuLRzi2p81p5sOhlF9beq6luUNc1/PXEbF3VvD0zcWObazmopuHlA61Pf
pu3trJ4Cy8oBD9W83NtZIwVfw3vcsnen/tJKweDHq7o/6b21nbVT4H3AaEJm
CvWfTgpc+he6JGlatrNuCvrEGC/bfXdFO+unYPGWca51ynnk/ynIsXu81PDA
WPL/FJQ0uDu7X3JsT2+YghnTLs3tW7SwnY1SMPm/4b8Xa5G+xilYWpx3/Pan
Te1skoLXK4v3mk6wa2fTFJzZ8CF4zurp5P8puDZZq/ij94x2OVIwslRy5PGs
Qe1sngK97fvnaxfT+LdKQfSAH31emsxrl1unYOy+G7rOq9XJ/1NwrmfzvfKe
5I/2KTD/OcA0Z7IV+X8Klu+1SXm5Zyj5fwqCImPAN3Yg/0/Bquk1sxqdyf9c
UxAoW9V2tJ7kbqr+TLkwfOOdReT/Knsoc+587UDt80qBjVHZlZ6nVpD/q+wX
nDN0wzti3xSs7p30VCm1I/9PQWTgqYSjW1aT/6fAKTTmYOkaSh+ZgrtCTZMh
snXk/6r+K6jUHhRB80VCClLidpReLqL5jJuCadP6yasCPcn/Ve2bZ9CrjrEo
BRlmlR2fTiB/l6Wgy4OSwG/5ND8pU/Byn/DIOnVaLxxStW/qxHc9LSj+Z6Ug
666D68cBFI+yU9C3qktiswVbX6ny77pqNO4rxZPcFKx5qzY+nsX7vBSonXXI
n9c5sp0vp+DyqB5OWl5UXmEKprZ0bzv+nOTFqvYeWf4hazhxiao/kpcdWtmf
uDQFwa7uluu6UrwvS8Hj8IPfN8iJK1LQzE3zkZRRfK5MwYUueXW7/1D8r07B
nj+d9+ew9UFNCk6FmNXMXkbyWtX40PkxoQQU7+tTYDVn8n7Pv7R+bkyB+wWD
8yM30/q6OQUrndZPFbLfwy0pGJDoavf4LHFrCk4O0TNa9pq4LQVLgj+9L9Sg
3wtqqfAwv5gytInk6qk4VthSEzuIfl9opEL5PSdNYxGxVioUE18nF92k/Nqp
mDs27MifwfT7UycV0+9O7rr8NzsvSMXCjgtDUroS66di5ZeAlrZoYoNUnGrb
f6X8Lv3eGZmKN3olA6U3iA1TUfJ0yeNrocRGqfh+Q9MiwJjyG6diQ/7HgeNm
UXtMUtHz39M+UQ9IH9NUHL5wbn3LX+LZqXhrd3ibbTcqD6koNR/rvTqH8pun
wlv9ae0yc2KrVKR6nTs6s4zyW6dCc+49z237SW6biuqUZ/fqPlF59qm4lRre
2nKC2DEVwx9K931i/bU2FUMX89KdDxG7pGKTTdRs0UVi11Q4T+J0bnAmdktF
k4CfffAWsYeq/uTr/xaUsv2NVJTZrBb8tKD+2JMK0bOyXu7s/MY3FZ7LV7fe
vUYcmIrdc7XN7/xh+x+q8q5Ub93CJftFpiJj//hPe3rSfgUnFcsEnjVvWkie
kAqdJWH3//tDzFW1t6KPWvMMSs9PRfNc39VWH4lFqejdw0f6aQ+xTJWf965o
tDOxMhWbP0uv/bOl/ZZDqv5748lrGED7J1mq9u3w2uj4gTg7FeN77i8KWcfO
11Tjz2pm///eEuem4qZ7bI11F3belop1b/0WyHJIflll/99fk/pbU3mFqTD/
m7G26DrVX5yKHjWV1gOSKH1JKuw3L8iwqyEuTYXJ5V+b+p2n8stSEcIZ+3PH
feKKVFiLzwzKmkn7iZWpmBKaeUL5keTVqXANPjbFsJS4JhV+iReuGWgR16aC
U7jhxVE9qq8+FUW7PwYUSYkbU+HysUf3q3Jqf3MqtnGm1u4dQPlbVP7GrU6Z
953St6bivNrYnxstidtSMcTZ+486259S46Hs9ii3jyBW50H6+tzMzS/YeSAP
kzSVTfP9SK7Fw2b+j5k2mux8iIe2gu7dCuZS/To8cL8PuJ7mTfrr8rAwWM41
nU+sz8NDdxdZVTjlN+DBzbrPebMyKn8kDwOe91a34JDckIe0B75VGycSG/Hw
O3ZHzQt2nmjMg/n1X4VqWiQ34eG4gU2tLzu/M+Vh+In3Gv1/k3w2D28+BkzO
XE3tAQ+fHsXwu4oovTkP2m2ZJ6RySm/FQ5H/RVm2A8mtVfqa39bacZKdT/Kw
+73R8PlfSG7PQ0rU9VE/zKl8Rx72rjeLTfEiXstDZw2DcONF7PySB53Yu6Gn
b1N+Vx7+8ziaprePnWeq9P3kPbMItP/swcOSutYau4vEXjzMOvNxhi7jPSp9
Jv73QdaV7XfzsJU/yqelgeSBPDj3SM/7VcbOv3k4M9locYwRpY/kocRyytSq
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