-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathcha-building-models.html
More file actions
1044 lines (1003 loc) · 108 KB
/
cha-building-models.html
File metadata and controls
1044 lines (1003 loc) · 108 KB
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
<!DOCTYPE html>
<html lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Chapter 6 Building and using models | NimbleUserManual.knit</title>
<meta name="description" content="This is the NIMBLE User Manual." />
<meta name="generator" content="bookdown 0.37 and GitBook 2.6.7" />
<meta property="og:title" content="Chapter 6 Building and using models | NimbleUserManual.knit" />
<meta property="og:type" content="book" />
<meta property="og:image" content="/nimble-icon.png" />
<meta property="og:description" content="This is the NIMBLE User Manual." />
<meta name="github-repo" content="nimble-dev/nimble" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Chapter 6 Building and using models | NimbleUserManual.knit" />
<meta name="twitter:description" content="This is the NIMBLE User Manual." />
<meta name="twitter:image" content="/nimble-icon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="prev" href="cha-writing-models.html"/>
<link rel="next" href="cha-mcmc.html"/>
<script src="libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.4.6/dist/fuse.min.js"></script>
<link href="libs/gitbook-2.6.7/css/style.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-table.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-bookdown.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-highlight.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-search.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-fontsettings.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-clipboard.css" rel="stylesheet" />
<link href="libs/anchor-sections-1.1.0/anchor-sections.css" rel="stylesheet" />
<link href="libs/anchor-sections-1.1.0/anchor-sections-hash.css" rel="stylesheet" />
<script src="libs/anchor-sections-1.1.0/anchor-sections.js"></script>
<style type="text/css">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<style type="text/css">
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
</style>
<style type="text/css">
/* Used with Pandoc 2.11+ new --citeproc when CSL is used */
div.csl-bib-body { }
div.csl-entry {
clear: both;
}
.hanging div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}
</style>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<div class="book without-animation with-summary font-size-2 font-family-1" data-basepath=".">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<img src="./nimble-icon.png"
width=100>
<li><a href="./cha-welcome-nimble.html">NIMBLE User Manual, Version 1.4.2</a></li>
<li><a href="https://github.com/nimble-dev/nimble">NIMBLE Development Team</a></li>
<li><a href="https://R-nimble.org">https://R-nimble.org</a></li>
<li class="divider"></li>
<li class="part"><span><b>I Introduction</b></span></li>
<li class="chapter" data-level="1" data-path="cha-welcome-nimble.html"><a href="cha-welcome-nimble.html"><i class="fa fa-check"></i><b>1</b> Welcome to NIMBLE</a>
<ul>
<li class="chapter" data-level="1.1" data-path="cha-welcome-nimble.html"><a href="cha-welcome-nimble.html#sec:what-is-nimble"><i class="fa fa-check"></i><b>1.1</b> What does NIMBLE do?</a></li>
<li class="chapter" data-level="1.2" data-path="cha-welcome-nimble.html"><a href="cha-welcome-nimble.html#how-to-use-this-manual"><i class="fa fa-check"></i><b>1.2</b> How to use this manual</a></li>
</ul></li>
<li class="chapter" data-level="2" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html"><i class="fa fa-check"></i><b>2</b> Lightning introduction</a>
<ul>
<li class="chapter" data-level="2.1" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:brief-example"><i class="fa fa-check"></i><b>2.1</b> A brief example</a></li>
<li class="chapter" data-level="2.2" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:creating-model"><i class="fa fa-check"></i><b>2.2</b> Creating a model</a></li>
<li class="chapter" data-level="2.3" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:compiling-model"><i class="fa fa-check"></i><b>2.3</b> Compiling the model</a></li>
<li class="chapter" data-level="2.4" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:intro-runMCMC"><i class="fa fa-check"></i><b>2.4</b> One-line invocation of MCMC</a></li>
<li class="chapter" data-level="2.5" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:creating-mcmc"><i class="fa fa-check"></i><b>2.5</b> Creating, compiling and running a basic MCMC configuration</a></li>
<li class="chapter" data-level="2.6" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:customizing-mcmc"><i class="fa fa-check"></i><b>2.6</b> Customizing the MCMC</a></li>
<li class="chapter" data-level="2.7" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:running-mcem"><i class="fa fa-check"></i><b>2.7</b> Running MCEM</a></li>
<li class="chapter" data-level="2.8" data-path="cha-lightning-intro.html"><a href="cha-lightning-intro.html#sec:creating-your-own"><i class="fa fa-check"></i><b>2.8</b> Creating your own functions</a></li>
</ul></li>
<li class="chapter" data-level="3" data-path="cha-more-introduction.html"><a href="cha-more-introduction.html"><i class="fa fa-check"></i><b>3</b> More introduction</a>
<ul>
<li class="chapter" data-level="3.1" data-path="cha-more-introduction.html"><a href="cha-more-introduction.html#nimble-adopts-and-extends-the-bugs-language-for-specifying-models"><i class="fa fa-check"></i><b>3.1</b> NIMBLE adopts and extends the BUGS language for specifying models</a></li>
<li class="chapter" data-level="3.2" data-path="cha-more-introduction.html"><a href="cha-more-introduction.html#sec:nimble-lang-writ"><i class="fa fa-check"></i><b>3.2</b> nimbleFunctions for writing algorithms</a></li>
<li class="chapter" data-level="3.3" data-path="cha-more-introduction.html"><a href="cha-more-introduction.html#sec:nimble-algor-libr"><i class="fa fa-check"></i><b>3.3</b> The NIMBLE algorithm library</a></li>
</ul></li>
<li class="chapter" data-level="4" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html"><i class="fa fa-check"></i><b>4</b> Installing NIMBLE</a>
<ul>
<li class="chapter" data-level="4.1" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#sec:requ-run-nimble"><i class="fa fa-check"></i><b>4.1</b> Requirements to run NIMBLE</a></li>
<li class="chapter" data-level="4.2" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#sec:compiler"><i class="fa fa-check"></i><b>4.2</b> Installing a C++ compiler for NIMBLE to use</a>
<ul>
<li class="chapter" data-level="4.2.1" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#macos"><i class="fa fa-check"></i><b>4.2.1</b> MacOS</a></li>
<li class="chapter" data-level="4.2.2" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#linux"><i class="fa fa-check"></i><b>4.2.2</b> Linux</a></li>
<li class="chapter" data-level="4.2.3" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#windows"><i class="fa fa-check"></i><b>4.2.3</b> Windows</a></li>
</ul></li>
<li class="chapter" data-level="4.3" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#installing-the-nimble-package"><i class="fa fa-check"></i><b>4.3</b> Installing the NIMBLE package</a></li>
<li class="chapter" data-level="4.4" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#troubleshooting-installation-problems"><i class="fa fa-check"></i><b>4.4</b> Troubleshooting installation problems</a></li>
<li class="chapter" data-level="4.5" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#customizing-your-installation"><i class="fa fa-check"></i><b>4.5</b> Customizing your installation</a>
<ul>
<li class="chapter" data-level="4.5.1" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#using-your-own-copy-of-eigen"><i class="fa fa-check"></i><b>4.5.1</b> Using your own copy of Eigen</a></li>
<li class="chapter" data-level="4.5.2" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#using-libnimble"><i class="fa fa-check"></i><b>4.5.2</b> Using libnimble</a></li>
<li class="chapter" data-level="4.5.3" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#sec:blas"><i class="fa fa-check"></i><b>4.5.3</b> BLAS and LAPACK</a></li>
<li class="chapter" data-level="4.5.4" data-path="cha-installing-nimble.html"><a href="cha-installing-nimble.html#customizing-compilation-of-the-nimble-generated-c"><i class="fa fa-check"></i><b>4.5.4</b> Customizing compilation of the NIMBLE-generated C++</a></li>
</ul></li>
</ul></li>
<li class="part"><span><b>II Models in NIMBLE</b></span></li>
<li class="chapter" data-level="5" data-path="cha-writing-models.html"><a href="cha-writing-models.html"><i class="fa fa-check"></i><b>5</b> Writing models in NIMBLE’s dialect of BUGS</a>
<ul>
<li class="chapter" data-level="5.1" data-path="cha-writing-models.html"><a href="cha-writing-models.html#sec:supp-feat-bugs"><i class="fa fa-check"></i><b>5.1</b> Comparison to BUGS dialects supported by WinBUGS, OpenBUGS and JAGS</a>
<ul>
<li class="chapter" data-level="5.1.1" data-path="cha-writing-models.html"><a href="cha-writing-models.html#supported-features-of-bugs-and-jags"><i class="fa fa-check"></i><b>5.1.1</b> Supported features of BUGS and JAGS</a></li>
<li class="chapter" data-level="5.1.2" data-path="cha-writing-models.html"><a href="cha-writing-models.html#sec:extensions-bugs"><i class="fa fa-check"></i><b>5.1.2</b> NIMBLE’s Extensions to BUGS and JAGS</a></li>
<li class="chapter" data-level="5.1.3" data-path="cha-writing-models.html"><a href="cha-writing-models.html#sec:not-yet-supported"><i class="fa fa-check"></i><b>5.1.3</b> Not-supported features of BUGS and JAGS</a></li>
</ul></li>
<li class="chapter" data-level="5.2" data-path="cha-writing-models.html"><a href="cha-writing-models.html#writing-models"><i class="fa fa-check"></i><b>5.2</b> Writing models</a>
<ul>
<li class="chapter" data-level="5.2.1" data-path="cha-writing-models.html"><a href="cha-writing-models.html#declaring-stochastic-and-deterministic-nodes"><i class="fa fa-check"></i><b>5.2.1</b> Declaring stochastic and deterministic nodes</a></li>
<li class="chapter" data-level="5.2.2" data-path="cha-writing-models.html"><a href="cha-writing-models.html#sec:more-kinds-bugs"><i class="fa fa-check"></i><b>5.2.2</b> More kinds of BUGS declarations</a></li>
<li class="chapter" data-level="5.2.3" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:vectorized-versus-scalar-declarations"><i class="fa fa-check"></i><b>5.2.3</b> Vectorized versus scalar declarations</a></li>
<li class="chapter" data-level="5.2.4" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:dists-and-functions"><i class="fa fa-check"></i><b>5.2.4</b> Available distributions</a></li>
<li class="chapter" data-level="5.2.5" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:BUGS-lang-fxns"><i class="fa fa-check"></i><b>5.2.5</b> Available BUGS language functions</a></li>
<li class="chapter" data-level="5.2.6" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:BUGS-link"><i class="fa fa-check"></i><b>5.2.6</b> Available link functions</a></li>
<li class="chapter" data-level="5.2.7" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:trunc"><i class="fa fa-check"></i><b>5.2.7</b> Truncation, censoring, and constraints</a></li>
<li class="chapter" data-level="5.2.8" data-path="cha-writing-models.html"><a href="cha-writing-models.html#subsec:macros"><i class="fa fa-check"></i><b>5.2.8</b> Model macros</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="6" data-path="cha-building-models.html"><a href="cha-building-models.html"><i class="fa fa-check"></i><b>6</b> Building and using models</a>
<ul>
<li class="chapter" data-level="6.1" data-path="cha-building-models.html"><a href="cha-building-models.html#creating-model-objects"><i class="fa fa-check"></i><b>6.1</b> Creating model objects</a>
<ul>
<li class="chapter" data-level="6.1.1" data-path="cha-building-models.html"><a href="cha-building-models.html#using-nimblemodel-to-create-a-model"><i class="fa fa-check"></i><b>6.1.1</b> Using <em>nimbleModel</em> to create a model</a></li>
<li class="chapter" data-level="6.1.2" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:readBUGSmodel"><i class="fa fa-check"></i><b>6.1.2</b> Creating a model from standard BUGS and JAGS input files</a></li>
<li class="chapter" data-level="6.1.3" data-path="cha-building-models.html"><a href="cha-building-models.html#sub:multiple-instances"><i class="fa fa-check"></i><b>6.1.3</b> Making multiple instances from the same model definition</a></li>
</ul></li>
<li class="chapter" data-level="6.2" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:nodes-and-variables"><i class="fa fa-check"></i><b>6.2</b> NIMBLE models are objects you can query and manipulate</a>
<ul>
<li class="chapter" data-level="6.2.1" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:what-are-nodes-and-variables"><i class="fa fa-check"></i><b>6.2.1</b> What are variables and nodes?</a></li>
<li class="chapter" data-level="6.2.2" data-path="cha-building-models.html"><a href="cha-building-models.html#determining-the-nodes-and-variables-in-a-model"><i class="fa fa-check"></i><b>6.2.2</b> Determining the nodes and variables in a model</a></li>
<li class="chapter" data-level="6.2.3" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:accessing-nodes"><i class="fa fa-check"></i><b>6.2.3</b> Accessing nodes</a></li>
<li class="chapter" data-level="6.2.4" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:how-nodes-are"><i class="fa fa-check"></i><b>6.2.4</b> How nodes are named</a></li>
<li class="chapter" data-level="6.2.5" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:why-use-node"><i class="fa fa-check"></i><b>6.2.5</b> Why use node names?</a></li>
<li class="chapter" data-level="6.2.6" data-path="cha-building-models.html"><a href="cha-building-models.html#sec:cdisdata"><i class="fa fa-check"></i><b>6.2.6</b> Checking if a node holds data</a></li>
</ul></li>
<li class="chapter" data-level="6.3" data-path="cha-building-models.html"><a href="cha-building-models.html#using-models-in-parallel"><i class="fa fa-check"></i><b>6.3</b> Using models in parallel</a></li>
</ul></li>
<li class="part"><span><b>III Algorithms in NIMBLE</b></span></li>
<li class="chapter" data-level="7" data-path="cha-mcmc.html"><a href="cha-mcmc.html"><i class="fa fa-check"></i><b>7</b> MCMC</a>
<ul>
<li class="chapter" data-level="7.1" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:nimbleMCMC"><i class="fa fa-check"></i><b>7.1</b> One-line invocation of MCMC: <em>nimbleMCMC</em></a></li>
<li class="chapter" data-level="7.2" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:mcmc-configuration"><i class="fa fa-check"></i><b>7.2</b> The MCMC configuration</a>
<ul>
<li class="chapter" data-level="7.2.1" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:default-mcmc-conf"><i class="fa fa-check"></i><b>7.2.1</b> Default MCMC configuration</a></li>
<li class="chapter" data-level="7.2.2" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:customizing-mcmc-conf"><i class="fa fa-check"></i><b>7.2.2</b> Customizing the MCMC configuration</a></li>
<li class="chapter" data-level="7.2.3" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:derived-quantities"><i class="fa fa-check"></i><b>7.2.3</b> Setting up derived quantities for additional quantities of interest</a></li>
</ul></li>
<li class="chapter" data-level="7.3" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:build-compile-mcmc"><i class="fa fa-check"></i><b>7.3</b> Building and compiling the MCMC</a></li>
<li class="chapter" data-level="7.4" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:initMCMC"><i class="fa fa-check"></i><b>7.4</b> Initializing MCMC</a></li>
<li class="chapter" data-level="7.5" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:runMCMC"><i class="fa fa-check"></i><b>7.5</b> User-friendly execution of MCMC algorithms: <em>runMCMC</em></a></li>
<li class="chapter" data-level="7.6" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:executing-the-mcmc-algorithm"><i class="fa fa-check"></i><b>7.6</b> Running the MCMC</a>
<ul>
<li class="chapter" data-level="7.6.1" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:mcmc-rerun"><i class="fa fa-check"></i><b>7.6.1</b> Rerunning versus restarting an MCMC</a></li>
<li class="chapter" data-level="7.6.2" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:sampler-time"><i class="fa fa-check"></i><b>7.6.2</b> Measuring sampler computation times: <em>getTimes</em></a></li>
<li class="chapter" data-level="7.6.3" data-path="cha-mcmc.html"><a href="cha-mcmc.html#assessing-the-adaption-process-of-rw-and-rw_block-samplers"><i class="fa fa-check"></i><b>7.6.3</b> Assessing the adaption process of <em>RW</em> and <em>RW_block</em> samplers</a></li>
</ul></li>
<li class="chapter" data-level="7.7" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:extracting-samples"><i class="fa fa-check"></i><b>7.7</b> Extracting MCMC samples</a></li>
<li class="chapter" data-level="7.8" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:WAIC"><i class="fa fa-check"></i><b>7.8</b> Calculating WAIC</a></li>
<li class="chapter" data-level="7.9" data-path="cha-mcmc.html"><a href="cha-mcmc.html#k-fold-cross-validation"><i class="fa fa-check"></i><b>7.9</b> k-fold cross-validation</a></li>
<li class="chapter" data-level="7.10" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:rjmcmc"><i class="fa fa-check"></i><b>7.10</b> Variable selection using Reversible Jump MCMC</a>
<ul>
<li class="chapter" data-level="7.10.1" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:rjmcmc-indicator"><i class="fa fa-check"></i><b>7.10.1</b> Using indicator variables</a></li>
<li class="chapter" data-level="7.10.2" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:rjmcmc-no-indicator"><i class="fa fa-check"></i><b>7.10.2</b> Without indicator variables</a></li>
</ul></li>
<li class="chapter" data-level="7.11" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:samplers-provided"><i class="fa fa-check"></i><b>7.11</b> Samplers provided with NIMBLE</a>
<ul>
<li class="chapter" data-level="7.11.1" data-path="cha-mcmc.html"><a href="cha-mcmc.html#conjugate-gibbs-samplers"><i class="fa fa-check"></i><b>7.11.1</b> Conjugate (‘Gibbs’) samplers</a></li>
<li class="chapter" data-level="7.11.2" data-path="cha-mcmc.html"><a href="cha-mcmc.html#subsec:HMC"><i class="fa fa-check"></i><b>7.11.2</b> Hamiltonian Monte Carlo (HMC)</a></li>
<li class="chapter" data-level="7.11.3" data-path="cha-mcmc.html"><a href="cha-mcmc.html#particle-filter-samplers"><i class="fa fa-check"></i><b>7.11.3</b> Particle filter samplers</a></li>
<li class="chapter" data-level="7.11.4" data-path="cha-mcmc.html"><a href="cha-mcmc.html#customized-log-likelihood-evaluations-rw_llfunction-sampler"><i class="fa fa-check"></i><b>7.11.4</b> Customized log-likelihood evaluations: <em>RW_llFunction sampler</em></a></li>
</ul></li>
<li class="chapter" data-level="7.12" data-path="cha-mcmc.html"><a href="cha-mcmc.html#sec:mcmc-example-litters"><i class="fa fa-check"></i><b>7.12</b> Detailed MCMC example: <em>litters</em></a></li>
<li class="chapter" data-level="7.13" data-path="cha-mcmc.html"><a href="cha-mcmc.html#mcmc-suite-compare-mcmcs"><i class="fa fa-check"></i><b>7.13</b> Comparing different MCMCs with <em>compareMCMCs</em></a></li>
<li class="chapter" data-level="7.14" data-path="cha-mcmc.html"><a href="cha-mcmc.html#running-mcmc-chains-in-parallel"><i class="fa fa-check"></i><b>7.14</b> Running MCMC chains in parallel</a></li>
</ul></li>
<li class="chapter" data-level="8" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html"><i class="fa fa-check"></i><b>8</b> Particle Filters, PMCMC, and MCEM</a>
<ul>
<li class="chapter" data-level="8.1" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html#particle-filters-sequential-monte-carlo-and-iterated-filtering"><i class="fa fa-check"></i><b>8.1</b> Particle filters / sequential Monte Carlo and iterated filtering</a>
<ul>
<li class="chapter" data-level="8.1.1" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html#filtering-algorithms"><i class="fa fa-check"></i><b>8.1.1</b> Filtering algorithms</a></li>
<li class="chapter" data-level="8.1.2" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html#sec:particle-mcmc"><i class="fa fa-check"></i><b>8.1.2</b> Particle MCMC (PMCMC)</a></li>
</ul></li>
<li class="chapter" data-level="8.2" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html#monte-carlo-expectation-maximization-mcem"><i class="fa fa-check"></i><b>8.2</b> Monte Carlo Expectation Maximization (MCEM)</a>
<ul>
<li class="chapter" data-level="8.2.1" data-path="cha-algos-provided.html"><a href="cha-algos-provided.html#sec:estimate-mcem-cov"><i class="fa fa-check"></i><b>8.2.1</b> Estimating the asymptotic covariance From MCEM</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="9" data-path="cha-laplace.html"><a href="cha-laplace.html"><i class="fa fa-check"></i><b>9</b> Laplace, AGHQ, and nested approximations</a>
<ul>
<li class="chapter" data-level="9.1" data-path="cha-laplace.html"><a href="cha-laplace.html#sec:AD-laplace"><i class="fa fa-check"></i><b>9.1</b> Laplace approximation and adaptive Gauss-Hermite quadrature (AGHQ)</a>
<ul>
<li class="chapter" data-level="9.1.1" data-path="cha-laplace.html"><a href="cha-laplace.html#glmm-example"><i class="fa fa-check"></i><b>9.1.1</b> GLMM example</a></li>
<li class="chapter" data-level="9.1.2" data-path="cha-laplace.html"><a href="cha-laplace.html#using-laplace-approximation"><i class="fa fa-check"></i><b>9.1.2</b> Using Laplace approximation</a></li>
<li class="chapter" data-level="9.1.3" data-path="cha-laplace.html"><a href="cha-laplace.html#using-the-laplace-approximation-methods-directly"><i class="fa fa-check"></i><b>9.1.3</b> Using the Laplace approximation methods directly</a></li>
<li class="chapter" data-level="9.1.4" data-path="cha-laplace.html"><a href="cha-laplace.html#changing-the-optimization-methods"><i class="fa fa-check"></i><b>9.1.4</b> Changing the optimization methods</a></li>
</ul></li>
<li class="chapter" data-level="9.2" data-path="cha-laplace.html"><a href="cha-laplace.html#sec:nested-approx"><i class="fa fa-check"></i><b>9.2</b> Nested approximation (INLA-like) methods</a>
<ul>
<li class="chapter" data-level="9.2.1" data-path="cha-laplace.html"><a href="cha-laplace.html#overview-of-the-methodology"><i class="fa fa-check"></i><b>9.2.1</b> Overview of the methodology</a></li>
<li class="chapter" data-level="9.2.2" data-path="cha-laplace.html"><a href="cha-laplace.html#using-nimbles-nested-approximation"><i class="fa fa-check"></i><b>9.2.2</b> Using NIMBLE’s nested approximation</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="10" data-path="cha-spatial.html"><a href="cha-spatial.html"><i class="fa fa-check"></i><b>10</b> Spatial models</a>
<ul>
<li class="chapter" data-level="10.1" data-path="cha-spatial.html"><a href="cha-spatial.html#intrinsic-gaussian-car-model-dcar_normal"><i class="fa fa-check"></i><b>10.1</b> Intrinsic Gaussian CAR model: <em>dcar_normal</em></a>
<ul>
<li class="chapter" data-level="10.1.1" data-path="cha-spatial.html"><a href="cha-spatial.html#specification-and-density"><i class="fa fa-check"></i><b>10.1.1</b> Specification and density</a></li>
<li class="chapter" data-level="10.1.2" data-path="cha-spatial.html"><a href="cha-spatial.html#example"><i class="fa fa-check"></i><b>10.1.2</b> Example</a></li>
</ul></li>
<li class="chapter" data-level="10.2" data-path="cha-spatial.html"><a href="cha-spatial.html#proper-gaussian-car-model-dcar_proper"><i class="fa fa-check"></i><b>10.2</b> Proper Gaussian CAR model: <em>dcar_proper</em></a>
<ul>
<li class="chapter" data-level="10.2.1" data-path="cha-spatial.html"><a href="cha-spatial.html#specification-and-density-1"><i class="fa fa-check"></i><b>10.2.1</b> Specification and density</a></li>
<li class="chapter" data-level="10.2.2" data-path="cha-spatial.html"><a href="cha-spatial.html#example-1"><i class="fa fa-check"></i><b>10.2.2</b> Example</a></li>
</ul></li>
<li class="chapter" data-level="10.3" data-path="cha-spatial.html"><a href="cha-spatial.html#sec:spatial-mcmc-sampling-car"><i class="fa fa-check"></i><b>10.3</b> MCMC Sampling of CAR models</a>
<ul>
<li class="chapter" data-level="10.3.1" data-path="cha-spatial.html"><a href="cha-spatial.html#initial-values"><i class="fa fa-check"></i><b>10.3.1</b> Initial values</a></li>
<li class="chapter" data-level="10.3.2" data-path="cha-spatial.html"><a href="cha-spatial.html#zero-neighbor-regions"><i class="fa fa-check"></i><b>10.3.2</b> Zero-neighbor regions</a></li>
<li class="chapter" data-level="10.3.3" data-path="cha-spatial.html"><a href="cha-spatial.html#zero-mean-constraint"><i class="fa fa-check"></i><b>10.3.3</b> Zero-mean constraint</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="11" data-path="cha-bnp.html"><a href="cha-bnp.html"><i class="fa fa-check"></i><b>11</b> Bayesian nonparametric models</a>
<ul>
<li class="chapter" data-level="11.1" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:bnpmixtures"><i class="fa fa-check"></i><b>11.1</b> Bayesian nonparametric mixture models</a></li>
<li class="chapter" data-level="11.2" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:crp"><i class="fa fa-check"></i><b>11.2</b> Chinese Restaurant Process model</a>
<ul>
<li class="chapter" data-level="11.2.1" data-path="cha-bnp.html"><a href="cha-bnp.html#specification-and-density-2"><i class="fa fa-check"></i><b>11.2.1</b> Specification and density</a></li>
<li class="chapter" data-level="11.2.2" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:excrp"><i class="fa fa-check"></i><b>11.2.2</b> Example</a></li>
<li class="chapter" data-level="11.2.3" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:extensionscrp"><i class="fa fa-check"></i><b>11.2.3</b> Extensions</a></li>
</ul></li>
<li class="chapter" data-level="11.3" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:sb"><i class="fa fa-check"></i><b>11.3</b> Stick-breaking model</a>
<ul>
<li class="chapter" data-level="11.3.1" data-path="cha-bnp.html"><a href="cha-bnp.html#specification-and-function"><i class="fa fa-check"></i><b>11.3.1</b> Specification and function</a></li>
<li class="chapter" data-level="11.3.2" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:exsb"><i class="fa fa-check"></i><b>11.3.2</b> Example</a></li>
</ul></li>
<li class="chapter" data-level="11.4" data-path="cha-bnp.html"><a href="cha-bnp.html#mcmc-sampling-of-bnp-models"><i class="fa fa-check"></i><b>11.4</b> MCMC sampling of BNP models</a>
<ul>
<li class="chapter" data-level="11.4.1" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:mcmcdcrp"><i class="fa fa-check"></i><b>11.4.1</b> Sampling CRP models</a></li>
<li class="chapter" data-level="11.4.2" data-path="cha-bnp.html"><a href="cha-bnp.html#sec:mcmcsb"><i class="fa fa-check"></i><b>11.4.2</b> Sampling stick-breaking models</a></li>
</ul></li>
</ul></li>
<li class="part"><span><b>IV Programming with NIMBLE</b></span></li>
<li class="chapter" data-level="" data-path="overview.html"><a href="overview.html"><i class="fa fa-check"></i>Overview</a></li>
<li class="chapter" data-level="12" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html"><i class="fa fa-check"></i><b>12</b> Writing simple nimbleFunctions</a>
<ul>
<li class="chapter" data-level="12.1" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:RC-intro"><i class="fa fa-check"></i><b>12.1</b> Introduction to simple nimbleFunctions</a></li>
<li class="chapter" data-level="12.2" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:r-fiunctions-implemented"><i class="fa fa-check"></i><b>12.2</b> R functions (or variants) implemented in NIMBLE</a>
<ul>
<li class="chapter" data-level="12.2.1" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#finding-help-for-nimbles-versions-of-r-functions"><i class="fa fa-check"></i><b>12.2.1</b> Finding help for NIMBLE’s versions of R functions</a></li>
<li class="chapter" data-level="12.2.2" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#basic-operations"><i class="fa fa-check"></i><b>12.2.2</b> Basic operations</a></li>
<li class="chapter" data-level="12.2.3" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:basic-math-linear"><i class="fa fa-check"></i><b>12.2.3</b> Math and linear algebra</a></li>
<li class="chapter" data-level="12.2.4" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:nimble-dist-funs"><i class="fa fa-check"></i><b>12.2.4</b> Distribution functions</a></li>
<li class="chapter" data-level="12.2.5" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:basic-flow-control"><i class="fa fa-check"></i><b>12.2.5</b> Flow control: <em>if-then-else</em>, <em>for</em>, <em>while</em>, and <em>stop</em></a></li>
<li class="chapter" data-level="12.2.6" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:print"><i class="fa fa-check"></i><b>12.2.6</b> <em>print</em> and <em>cat</em></a></li>
<li class="chapter" data-level="12.2.7" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:check-user-interr"><i class="fa fa-check"></i><b>12.2.7</b> Checking for user interrupts: <em>checkInterrupt</em></a></li>
<li class="chapter" data-level="12.2.8" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#optimization-optim-and-nimoptim"><i class="fa fa-check"></i><b>12.2.8</b> Optimization: <em>optim</em> and <em>nimOptim</em></a></li>
<li class="chapter" data-level="12.2.9" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#integration-integrate-and-nimintegrate"><i class="fa fa-check"></i><b>12.2.9</b> Integration: <em>integrate</em> and <em>nimIntegrate</em></a></li>
<li class="chapter" data-level="12.2.10" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:altern-keyw-some"><i class="fa fa-check"></i><b>12.2.10</b> ‘nim’ synonyms for some functions</a></li>
</ul></li>
<li class="chapter" data-level="12.3" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:how-nimble-handles"><i class="fa fa-check"></i><b>12.3</b> How NIMBLE handles types of variables</a>
<ul>
<li class="chapter" data-level="12.3.1" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:nimbleList-RCFuns"><i class="fa fa-check"></i><b>12.3.1</b> nimbleList data structures</a></li>
<li class="chapter" data-level="12.3.2" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:how-types-work"><i class="fa fa-check"></i><b>12.3.2</b> How numeric types work</a></li>
</ul></li>
<li class="chapter" data-level="12.4" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:decl-argum-return"><i class="fa fa-check"></i><b>12.4</b> Declaring argument and return types</a></li>
<li class="chapter" data-level="12.5" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:comp-nimbl-pass"><i class="fa fa-check"></i><b>12.5</b> Compiled nimbleFunctions pass arguments by reference</a></li>
<li class="chapter" data-level="12.6" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:calling-external-code"><i class="fa fa-check"></i><b>12.6</b> Calling external compiled code</a></li>
<li class="chapter" data-level="12.7" data-path="cha-RCfunctions.html"><a href="cha-RCfunctions.html#sec:calling-R-code"><i class="fa fa-check"></i><b>12.7</b> Calling uncompiled R functions from compiled nimbleFunctions</a></li>
</ul></li>
<li class="chapter" data-level="13" data-path="cha-user-defined.html"><a href="cha-user-defined.html"><i class="fa fa-check"></i><b>13</b> Creating user-defined distributions and functions for models</a>
<ul>
<li class="chapter" data-level="13.1" data-path="cha-user-defined.html"><a href="cha-user-defined.html#sec:user-functions"><i class="fa fa-check"></i><b>13.1</b> User-defined functions</a></li>
<li class="chapter" data-level="13.2" data-path="cha-user-defined.html"><a href="cha-user-defined.html#sec:user-distributions"><i class="fa fa-check"></i><b>13.2</b> User-defined distributions</a>
<ul>
<li class="chapter" data-level="13.2.1" data-path="cha-user-defined.html"><a href="cha-user-defined.html#sec:registerDistributions"><i class="fa fa-check"></i><b>13.2.1</b> Using <em>registerDistributions</em> for alternative parameterizations and providing other information</a></li>
</ul></li>
<li class="chapter" data-level="13.3" data-path="cha-user-defined.html"><a href="cha-user-defined.html#sec:adv-user-def"><i class="fa fa-check"></i><b>13.3</b> Advanced user-defined functions and distributions</a></li>
<li class="chapter" data-level="13.4" data-path="cha-user-defined.html"><a href="cha-user-defined.html#sec:user-macros"><i class="fa fa-check"></i><b>13.4</b> User-defined model macros</a></li>
</ul></li>
<li class="chapter" data-level="14" data-path="cha-using-models.html"><a href="cha-using-models.html"><i class="fa fa-check"></i><b>14</b> Working with NIMBLE models</a>
<ul>
<li class="chapter" data-level="14.1" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:accessing-variables"><i class="fa fa-check"></i><b>14.1</b> The variables and nodes in a NIMBLE model</a>
<ul>
<li class="chapter" data-level="14.1.1" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:get-nodes"><i class="fa fa-check"></i><b>14.1.1</b> Determining the nodes in a model</a></li>
<li class="chapter" data-level="14.1.2" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:introduced-nodes"><i class="fa fa-check"></i><b>14.1.2</b> Understanding lifted nodes</a></li>
<li class="chapter" data-level="14.1.3" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:cdgetdependencies"><i class="fa fa-check"></i><b>14.1.3</b> Determining dependencies in a model</a></li>
</ul></li>
<li class="chapter" data-level="14.2" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:nodeInfo"><i class="fa fa-check"></i><b>14.2</b> Accessing information about nodes and variables</a>
<ul>
<li class="chapter" data-level="14.2.1" data-path="cha-using-models.html"><a href="cha-using-models.html#getting-distributional-information-about-a-node"><i class="fa fa-check"></i><b>14.2.1</b> Getting distributional information about a node</a></li>
<li class="chapter" data-level="14.2.2" data-path="cha-using-models.html"><a href="cha-using-models.html#getting-information-about-a-distribution"><i class="fa fa-check"></i><b>14.2.2</b> Getting information about a distribution</a></li>
<li class="chapter" data-level="14.2.3" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:getParam"><i class="fa fa-check"></i><b>14.2.3</b> Getting distribution parameter values for a node</a></li>
<li class="chapter" data-level="14.2.4" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:getBound"><i class="fa fa-check"></i><b>14.2.4</b> Getting distribution bounds for a node</a></li>
</ul></li>
<li class="chapter" data-level="14.3" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:cdcalc-cdsim-cdgetl"><i class="fa fa-check"></i><b>14.3</b> Carrying out model calculations</a>
<ul>
<li class="chapter" data-level="14.3.1" data-path="cha-using-models.html"><a href="cha-using-models.html#core-model-operations-calculation-and-simulation"><i class="fa fa-check"></i><b>14.3.1</b> Core model operations: calculation and simulation</a></li>
<li class="chapter" data-level="14.3.2" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:cdsimn-cdcalcn-cdget"><i class="fa fa-check"></i><b>14.3.2</b> Pre-defined nimbleFunctions for operating on model nodes: <em>simNodes</em>, <em>calcNodes</em>, and <em>getLogProbNodes</em></a></li>
<li class="chapter" data-level="14.3.3" data-path="cha-using-models.html"><a href="cha-using-models.html#sec:access-log-prob"><i class="fa fa-check"></i><b>14.3.3</b> Accessing log probabilities via <em>logProb</em> variables</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="15" data-path="cha-data-structures.html"><a href="cha-data-structures.html"><i class="fa fa-check"></i><b>15</b> Data structures in NIMBLE</a>
<ul>
<li class="chapter" data-level="15.1" data-path="cha-data-structures.html"><a href="cha-data-structures.html#sec:modelValues-struct"><i class="fa fa-check"></i><b>15.1</b> The modelValues data structure</a>
<ul>
<li class="chapter" data-level="15.1.1" data-path="cha-data-structures.html"><a href="cha-data-structures.html#creating-modelvalues-objects"><i class="fa fa-check"></i><b>15.1.1</b> Creating modelValues objects</a></li>
<li class="chapter" data-level="15.1.2" data-path="cha-data-structures.html"><a href="cha-data-structures.html#sec:access-cont-modelv"><i class="fa fa-check"></i><b>15.1.2</b> Accessing contents of modelValues</a></li>
</ul></li>
<li class="chapter" data-level="15.2" data-path="cha-data-structures.html"><a href="cha-data-structures.html#sec:nimbleLists"><i class="fa fa-check"></i><b>15.2</b> The nimbleList data structure</a>
<ul>
<li class="chapter" data-level="15.2.1" data-path="cha-data-structures.html"><a href="cha-data-structures.html#sec:predef-nimbleLists"><i class="fa fa-check"></i><b>15.2.1</b> Pre-defined nimbleList types</a></li>
<li class="chapter" data-level="15.2.2" data-path="cha-data-structures.html"><a href="cha-data-structures.html#sec:eigen-nimFunctions"><i class="fa fa-check"></i><b>15.2.2</b> Using <em>eigen</em> and <em>svd</em> in nimbleFunctions</a></li>
</ul></li>
</ul></li>
<li class="chapter" data-level="16" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html"><i class="fa fa-check"></i><b>16</b> Writing nimbleFunctions to interact with models</a>
<ul>
<li class="chapter" data-level="16.1" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:writ-nimble-funct"><i class="fa fa-check"></i><b>16.1</b> Overview</a></li>
<li class="chapter" data-level="16.2" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:using-comp-nimbl"><i class="fa fa-check"></i><b>16.2</b> Using and compiling nimbleFunctions</a></li>
<li class="chapter" data-level="16.3" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#writing-setup-code"><i class="fa fa-check"></i><b>16.3</b> Writing setup code</a>
<ul>
<li class="chapter" data-level="16.3.1" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#useful-tools-for-setup-functions"><i class="fa fa-check"></i><b>16.3.1</b> Useful tools for setup functions</a></li>
<li class="chapter" data-level="16.3.2" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:access-modify-numer"><i class="fa fa-check"></i><b>16.3.2</b> Accessing and modifying numeric values from setup</a></li>
<li class="chapter" data-level="16.3.3" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#determining-numeric-types-in-nimblefunctions"><i class="fa fa-check"></i><b>16.3.3</b> Determining numeric types in nimbleFunctions</a></li>
<li class="chapter" data-level="16.3.4" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:determ-pers-texttts"><i class="fa fa-check"></i><b>16.3.4</b> Control of setup outputs</a></li>
</ul></li>
<li class="chapter" data-level="16.4" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:nimble-lang-comp"><i class="fa fa-check"></i><b>16.4</b> Writing run code</a>
<ul>
<li class="chapter" data-level="16.4.1" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:driv-models:-calc"><i class="fa fa-check"></i><b>16.4.1</b> Driving models: <em>calculate</em>, <em>calculateDiff</em>, <em>simulate</em>, <em>getLogProb</em></a></li>
<li class="chapter" data-level="16.4.2" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#getting-and-setting-variable-and-node-values"><i class="fa fa-check"></i><b>16.4.2</b> Getting and setting variable and node values</a></li>
<li class="chapter" data-level="16.4.3" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#getting-parameter-values-and-node-bounds"><i class="fa fa-check"></i><b>16.4.3</b> Getting parameter values and node bounds</a></li>
<li class="chapter" data-level="16.4.4" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:access-model-modelv"><i class="fa fa-check"></i><b>16.4.4</b> Using modelValues objects</a></li>
<li class="chapter" data-level="16.4.5" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:using-model-variable"><i class="fa fa-check"></i><b>16.4.5</b> Using model variables and modelValues in expressions</a></li>
<li class="chapter" data-level="16.4.6" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:incl-other-meth"><i class="fa fa-check"></i><b>16.4.6</b> Including other methods in a nimbleFunction</a></li>
<li class="chapter" data-level="16.4.7" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:using-other-nimbl"><i class="fa fa-check"></i><b>16.4.7</b> Using other nimbleFunctions</a></li>
<li class="chapter" data-level="16.4.8" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:virt-nimbl-nimbl"><i class="fa fa-check"></i><b>16.4.8</b> Virtual nimbleFunctions and nimbleFunctionLists</a></li>
<li class="chapter" data-level="16.4.9" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#character-objects"><i class="fa fa-check"></i><b>16.4.9</b> Character objects</a></li>
<li class="chapter" data-level="16.4.10" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:user-defined-data"><i class="fa fa-check"></i><b>16.4.10</b> User-defined data structures</a></li>
</ul></li>
<li class="chapter" data-level="16.5" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:user-samplers"><i class="fa fa-check"></i><b>16.5</b> Example: writing user-defined samplers to extend NIMBLE’s MCMC engine</a>
<ul>
<li class="chapter" data-level="16.5.1" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#user-defined-samplers-and-posterior-predictive-nodes"><i class="fa fa-check"></i><b>16.5.1</b> User-defined samplers and posterior predictive nodes</a></li>
</ul></li>
<li class="chapter" data-level="16.6" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#copying-nimblefunctions-and-nimble-models"><i class="fa fa-check"></i><b>16.6</b> Copying nimbleFunctions (and NIMBLE models)</a></li>
<li class="chapter" data-level="16.7" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#sec:debugging"><i class="fa fa-check"></i><b>16.7</b> Debugging nimbleFunctions</a></li>
<li class="chapter" data-level="16.8" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#timing-nimblefunctions-with-run.time"><i class="fa fa-check"></i><b>16.8</b> Timing nimbleFunctions with <em>run.time</em></a></li>
<li class="chapter" data-level="16.9" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#clearing-and-unloading-compiled-objects"><i class="fa fa-check"></i><b>16.9</b> Clearing and unloading compiled objects</a></li>
<li class="chapter" data-level="16.10" data-path="cha-progr-with-models.html"><a href="cha-progr-with-models.html#reducing-memory-usage"><i class="fa fa-check"></i><b>16.10</b> Reducing memory usage</a></li>
</ul></li>
<li class="part"><span><b>V Automatic Derivatives in NIMBLE</b></span></li>
<li class="chapter" data-level="17" data-path="cha-AD.html"><a href="cha-AD.html"><i class="fa fa-check"></i><b>17</b> Automatic Derivatives</a>
<ul>
<li class="chapter" data-level="17.1" data-path="cha-AD.html"><a href="cha-AD.html#sec:use-derivs"><i class="fa fa-check"></i><b>17.1</b> How to turn on derivatives in a model</a></li>
<li class="chapter" data-level="17.2" data-path="cha-AD.html"><a href="cha-AD.html#sec:AD-user-def"><i class="fa fa-check"></i><b>17.2</b> How to support derivatives in user-defined functions and distributions</a></li>
<li class="chapter" data-level="17.3" data-path="cha-AD.html"><a href="cha-AD.html#what-operations-are-and-arent-supported-for-ad"><i class="fa fa-check"></i><b>17.3</b> What operations are and aren’t supported for AD</a></li>
<li class="chapter" data-level="17.4" data-path="cha-AD.html"><a href="cha-AD.html#basics-of-obtaining-derivatives-in-nimblefunctions"><i class="fa fa-check"></i><b>17.4</b> Basics of obtaining derivatives in <code>nimbleFunctions</code></a>
<ul>
<li class="chapter" data-level="17.4.1" data-path="cha-AD.html"><a href="cha-AD.html#checking-derivatives-with-uncompiled-execution"><i class="fa fa-check"></i><b>17.4.1</b> Checking derivatives with uncompiled execution</a></li>
<li class="chapter" data-level="17.4.2" data-path="cha-AD.html"><a href="cha-AD.html#sec:AD-holding-out"><i class="fa fa-check"></i><b>17.4.2</b> Holding some local variables out of derivative tracking</a></li>
<li class="chapter" data-level="17.4.3" data-path="cha-AD.html"><a href="cha-AD.html#sec:AD-multiple-NF"><i class="fa fa-check"></i><b>17.4.3</b> Using AD with multiple nimbleFunctions</a></li>
<li class="chapter" data-level="17.4.4" data-path="cha-AD.html"><a href="cha-AD.html#sec:understanding-more-AD"><i class="fa fa-check"></i><b>17.4.4</b> Understanding more about how AD works: <em>taping</em> of operations</a></li>
<li class="chapter" data-level="17.4.5" data-path="cha-AD.html"><a href="cha-AD.html#resetting-a-nimderivs-call"><i class="fa fa-check"></i><b>17.4.5</b> Resetting a <code>nimDerivs</code> call</a></li>
<li class="chapter" data-level="17.4.6" data-path="cha-AD.html"><a href="cha-AD.html#a-note-on-performance-benchmarking"><i class="fa fa-check"></i><b>17.4.6</b> A note on performance benchmarking</a></li>
</ul></li>
<li class="chapter" data-level="17.5" data-path="cha-AD.html"><a href="cha-AD.html#advanced-uses-double-taping"><i class="fa fa-check"></i><b>17.5</b> Advanced uses: double taping</a></li>
<li class="chapter" data-level="17.6" data-path="cha-AD.html"><a href="cha-AD.html#derivatives-involving-model-calculations"><i class="fa fa-check"></i><b>17.6</b> Derivatives involving model calculations</a>
<ul>
<li class="chapter" data-level="17.6.1" data-path="cha-AD.html"><a href="cha-AD.html#method-1-nimderivs-of-modelcalculate"><i class="fa fa-check"></i><b>17.6.1</b> Method 1: <code>nimDerivs</code> of <code>model$calculate</code></a></li>
<li class="chapter" data-level="17.6.2" data-path="cha-AD.html"><a href="cha-AD.html#method-2-nimderivs-of-a-method-that-calls-modelcalculate"><i class="fa fa-check"></i><b>17.6.2</b> Method 2: <code>nimDerivs</code> of a method that calls <code>model$calculate</code></a></li>
</ul></li>
<li class="chapter" data-level="17.7" data-path="cha-AD.html"><a href="cha-AD.html#sec:parameter-transform"><i class="fa fa-check"></i><b>17.7</b> Parameter transformations</a></li>
</ul></li>
<li class="chapter" data-level="18" data-path="example-maximum-likelihood-estimation-using-optim-with-gradients-from-nimderivs..html"><a href="example-maximum-likelihood-estimation-using-optim-with-gradients-from-nimderivs..html"><i class="fa fa-check"></i><b>18</b> Example: maximum likelihood estimation using <code>optim</code> with gradients from <code>nimDerivs</code>.</a></li>
<li class="chapter" data-level="" data-path="references.html"><a href="references.html"><i class="fa fa-check"></i>References</a></li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i><a href="./"></a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal" id="section-">
<div id="cha-building-models" class="section level1 hasAnchor" number="6">
<h1><span class="header-section-number">Chapter 6</span> Building and using models<a href="cha-building-models.html#cha-building-models" class="anchor-section" aria-label="Anchor link to header"></a></h1>
<p>This chapter explains how to build and manipulate model objects
starting from BUGS code.</p>
<div id="creating-model-objects" class="section level2 hasAnchor" number="6.1">
<h2><span class="header-section-number">6.1</span> Creating model objects<a href="cha-building-models.html#creating-model-objects" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>NIMBLE provides two functions for creating model objects:
<code>nimbleModel</code> and <code>readBUGSmodel</code>. The first, <code>nimbleModel</code>,
is more general and was illustrated in Chapter <a href="cha-lightning-intro.html#cha-lightning-intro">2</a>. The
second, <code>readBUGSmodel</code> provides compatibility with BUGS file
formats for models, variables, data, and initial values for MCMC.</p>
<p>In addition one can create new model objects from existing model objects.</p>
<div id="using-nimblemodel-to-create-a-model" class="section level3 hasAnchor" number="6.1.1">
<h3><span class="header-section-number">6.1.1</span> Using <em>nimbleModel</em> to create a model<a href="cha-building-models.html#using-nimblemodel-to-create-a-model" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>nimbleModel</code> processes BUGS code to determine all the nodes,
variables, and their relationships in a model. Any constants must be
provided at this step. Data and initial values can optionally be
provided. BUGS code passed to <code>nimbleModel</code> must go through
<code>nimbleCode</code>.</p>
<p>We look again at the pump example from the introduction:</p>
<div class="sourceCode" id="cb99"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb99-1"><a href="cha-building-models.html#cb99-1" tabindex="-1"></a>pumpCode <span class="ot"><-</span> <span class="fu">nimbleCode</span>({ </span>
<span id="cb99-2"><a href="cha-building-models.html#cb99-2" tabindex="-1"></a> <span class="cf">for</span> (i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span>N){</span>
<span id="cb99-3"><a href="cha-building-models.html#cb99-3" tabindex="-1"></a> theta[i] <span class="sc">~</span> <span class="fu">dgamma</span>(alpha,beta);</span>
<span id="cb99-4"><a href="cha-building-models.html#cb99-4" tabindex="-1"></a> lambda[i] <span class="ot"><-</span> theta[i]<span class="sc">*</span>t[i];</span>
<span id="cb99-5"><a href="cha-building-models.html#cb99-5" tabindex="-1"></a> x[i] <span class="sc">~</span> <span class="fu">dpois</span>(lambda[i])</span>
<span id="cb99-6"><a href="cha-building-models.html#cb99-6" tabindex="-1"></a> }</span>
<span id="cb99-7"><a href="cha-building-models.html#cb99-7" tabindex="-1"></a> alpha <span class="sc">~</span> <span class="fu">dexp</span>(<span class="fl">1.0</span>);</span>
<span id="cb99-8"><a href="cha-building-models.html#cb99-8" tabindex="-1"></a> beta <span class="sc">~</span> <span class="fu">dgamma</span>(<span class="fl">0.1</span>,<span class="fl">1.0</span>);</span>
<span id="cb99-9"><a href="cha-building-models.html#cb99-9" tabindex="-1"></a>})</span>
<span id="cb99-10"><a href="cha-building-models.html#cb99-10" tabindex="-1"></a></span>
<span id="cb99-11"><a href="cha-building-models.html#cb99-11" tabindex="-1"></a>pumpConsts <span class="ot"><-</span> <span class="fu">list</span>(<span class="at">N =</span> <span class="dv">10</span>,</span>
<span id="cb99-12"><a href="cha-building-models.html#cb99-12" tabindex="-1"></a> <span class="at">t =</span> <span class="fu">c</span>(<span class="fl">94.3</span>, <span class="fl">15.7</span>, <span class="fl">62.9</span>, <span class="dv">126</span>, <span class="fl">5.24</span>,</span>
<span id="cb99-13"><a href="cha-building-models.html#cb99-13" tabindex="-1"></a> <span class="fl">31.4</span>, <span class="fl">1.05</span>, <span class="fl">1.05</span>, <span class="fl">2.1</span>, <span class="fl">10.5</span>))</span>
<span id="cb99-14"><a href="cha-building-models.html#cb99-14" tabindex="-1"></a></span>
<span id="cb99-15"><a href="cha-building-models.html#cb99-15" tabindex="-1"></a>pumpData <span class="ot"><-</span> <span class="fu">list</span>(<span class="at">x =</span> <span class="fu">c</span>(<span class="dv">5</span>, <span class="dv">1</span>, <span class="dv">5</span>, <span class="dv">14</span>, <span class="dv">3</span>, <span class="dv">19</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">4</span>, <span class="dv">22</span>))</span>
<span id="cb99-16"><a href="cha-building-models.html#cb99-16" tabindex="-1"></a></span>
<span id="cb99-17"><a href="cha-building-models.html#cb99-17" tabindex="-1"></a>pumpInits <span class="ot"><-</span> <span class="fu">list</span>(<span class="at">alpha =</span> <span class="dv">1</span>, <span class="at">beta =</span> <span class="dv">1</span>,</span>
<span id="cb99-18"><a href="cha-building-models.html#cb99-18" tabindex="-1"></a> <span class="at">theta =</span> <span class="fu">rep</span>(<span class="fl">0.1</span>, pumpConsts<span class="sc">$</span>N))</span>
<span id="cb99-19"><a href="cha-building-models.html#cb99-19" tabindex="-1"></a></span>
<span id="cb99-20"><a href="cha-building-models.html#cb99-20" tabindex="-1"></a>pump <span class="ot"><-</span> <span class="fu">nimbleModel</span>(<span class="at">code =</span> pumpCode, <span class="at">name =</span> <span class="st">"pump"</span>, <span class="at">constants =</span> pumpConsts,</span>
<span id="cb99-21"><a href="cha-building-models.html#cb99-21" tabindex="-1"></a> <span class="at">data =</span> pumpData, <span class="at">inits =</span> pumpInits)</span></code></pre></div>
<div id="sec:data-constants" class="section level4 hasAnchor" number="6.1.1.1">
<h4><span class="header-section-number">6.1.1.1</span> Data and constants<a href="cha-building-models.html#sec:data-constants" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>NIMBLE makes a distinction between data and constants:</p>
<ul>
<li><em>Constants</em> can never be changed and must be provided when a
model is defined. For example, a vector of known index values, such
as for block indices, helps define the model graph itself and must
be provided as constants. Variables used in the index ranges of
for-loops must also be provided as constants.</li>
<li><em>Data</em> is a label for the role a node plays in the model.
Nodes marked as data will by default be protected from any functions
that would simulate over their values (see <code>simulate</code> in Chapter
<a href="cha-using-models.html#cha-using-models">14</a>), but it is possible to over-ride
that default or to change their values by direct assignment. This
allows an algorithm to be applied to many data sets in the same
model without re-creating the model each time. It also allows
simulation of data in a model.<br />
<!--- TODO: I don't think this statement is true (i.e., setData()):
% Data must be provided when an -->
<!--- instance of a model is created from the model definition, although
% they can also be provided earlier when a model is defined. --></li>
</ul>
<p>WinBUGS, OpenBUGS and JAGS do not allow data values to be changed or
different nodes to be labeled as data without starting from the
beginning again. Hence they do not distinguish between constants and
data.</p>
<p>For compatibility with BUGS and JAGS, NIMBLE allows both to be
provided in the <code>constants</code> argument to <code>nimbleModel</code>, in
which case NIMBLE handles values for stochastic nodes as data and
everything else as constants.</p>
<p>Values for nodes that appear only on the right-hand side of BUGS
declarations (e.g., covariates/predictors) can be provided as constants or as data or initial values. There is no real difference between providing as data or initial values and the values can be added after building a model via <code>setInits</code> or <code>setData</code>. However if provided as data, calls to <code>setInits</code> will not overwrite those values (though direct assignment of values will overwrite those values).</p>
</div>
<div id="providing-or-changing-data-and-initial-values-for-an-existing-model" class="section level4 hasAnchor" number="6.1.1.2">
<h4><span class="header-section-number">6.1.1.2</span> Providing (or changing) data and initial values for an existing model<a href="cha-building-models.html#providing-or-changing-data-and-initial-values-for-an-existing-model" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>Whereas constants must be provided during the call to
<code>nimbleModel</code>, data and initial values can be provided later via
the model member functions <code>setData</code> and <code>setInits</code>. For
example, if <code>pumpData</code> is a named list of data values (as above),
then <code>pump$setData(pumpData)</code> sets the named variables to the
values in the list.</p>
<p><code>setData</code> does two things: it sets the values of the (stochastic) data nodes,
and it flags those nodes as containing data. nimbleFunction
programmers can then use that information to control whether an
algorithm should over-write data or not. For example, NIMBLE’s
<code>simulate</code> functions by default do not overwrite data values but
can be told to do so. Values of data variables can be replaced, and
the indication of which nodes should be treated as data can be reset
by using the <code>resetData</code> method, e.g. <code>pump$resetData()</code>.</p>
<p>Data nodes cannot be deterministic, and using <code>setData</code> on
deterministic nodes (or passing values for deterministic nodes
via the <code>data</code> argument to <code>nimbleModel</code>) will not flag those
nodes as containing data. It will set the values of those nodes,
but that will presumably be overwritten as soon as the nodes
are deterministically calculated.</p>
<p>To change data values without any modification of which nodes are
flagged as containing data, simply use R’s usual assignment syntax
to assign values in a compiled (or, more rarely, an uncompiled) model, e.g.,</p>
<div class="sourceCode" id="cb100"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb100-1"><a href="cha-building-models.html#cb100-1" tabindex="-1"></a>cModel<span class="sc">$</span>y <span class="ot"><-</span> <span class="fu">c</span>(<span class="fl">1.5</span>, <span class="fl">2.5</span>, <span class="fl">1.7</span>)</span></code></pre></div>
<p>This can be useful for running an MCMC with a different dataset of the same size
(and of course the same pattern of missingness, if any) without
having to rebuild and recompile the MCMC, such as in a simulation study.
It is possible to change the data values in a compiled model using <code>setData</code>,
but we don’t recommend doing this because <code>setData</code> won’t modify which nodes are flagged
as containing data in the already-constructed MCMC, thereby potentially introducing confusion.</p>
</div>
<div id="missing-data-values" class="section level4 hasAnchor" number="6.1.1.3">
<h4><span class="header-section-number">6.1.1.3</span> Missing data values<a href="cha-building-models.html#missing-data-values" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>Sometimes one needs a model variable to have a mix of data and
non-data, often due to missing data values. In NIMBLE, when data
values are provided, any nodes with <code>NA</code> values will <em>not</em> be
labeled as data. A node following a multivariate distribution must be either entirely observed or entirely missing.</p>
<p>Here’s an example of running an MCMC on the <em>pump</em> model, with two
of the observations taken to be missing. Some of the steps in this
example are documented more below. NIMBLE’s default MCMC
configuration will treat the missing values as unknowns to be sampled,
as can be seen in the MCMC output here.</p>
<div class="sourceCode" id="cb101"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb101-1"><a href="cha-building-models.html#cb101-1" tabindex="-1"></a>pumpMiss <span class="ot"><-</span> pump<span class="sc">$</span><span class="fu">newModel</span>()</span>
<span id="cb101-2"><a href="cha-building-models.html#cb101-2" tabindex="-1"></a>pumpMiss<span class="sc">$</span><span class="fu">resetData</span>()</span>
<span id="cb101-3"><a href="cha-building-models.html#cb101-3" tabindex="-1"></a>pumpDataNew <span class="ot"><-</span> pumpData</span>
<span id="cb101-4"><a href="cha-building-models.html#cb101-4" tabindex="-1"></a>pumpDataNew<span class="sc">$</span>x[<span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">3</span>)] <span class="ot"><-</span> <span class="cn">NA</span></span>
<span id="cb101-5"><a href="cha-building-models.html#cb101-5" tabindex="-1"></a>pumpMiss<span class="sc">$</span><span class="fu">setData</span>(pumpDataNew)</span>
<span id="cb101-6"><a href="cha-building-models.html#cb101-6" tabindex="-1"></a></span>
<span id="cb101-7"><a href="cha-building-models.html#cb101-7" tabindex="-1"></a>pumpMissConf <span class="ot"><-</span> <span class="fu">configureMCMC</span>(pumpMiss)</span></code></pre></div>
<pre><code>## ===== Monitors =====
## thin = 1: alpha, beta
## ===== Samplers =====
## RW sampler (1)
## - alpha
## posterior_predictive sampler (2)
## - theta[] (2 elements)
## conjugate sampler (9)
## - beta
## - theta[] (8 elements)
## ===== Comments =====</code></pre>
<div class="sourceCode" id="cb103"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb103-1"><a href="cha-building-models.html#cb103-1" tabindex="-1"></a>pumpMissConf<span class="sc">$</span><span class="fu">addMonitors</span>(<span class="st">'x'</span>, <span class="st">'alpha'</span>, <span class="st">'beta'</span>, <span class="st">'theta'</span>)</span></code></pre></div>
<pre><code>## thin = 1: alpha, beta, theta, x</code></pre>
<div class="sourceCode" id="cb105"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb105-1"><a href="cha-building-models.html#cb105-1" tabindex="-1"></a>pumpMissMCMC <span class="ot"><-</span> <span class="fu">buildMCMC</span>(pumpMissConf)</span>
<span id="cb105-2"><a href="cha-building-models.html#cb105-2" tabindex="-1"></a>Cobj <span class="ot"><-</span> <span class="fu">compileNimble</span>(pumpMiss, pumpMissMCMC)</span>
<span id="cb105-3"><a href="cha-building-models.html#cb105-3" tabindex="-1"></a></span>
<span id="cb105-4"><a href="cha-building-models.html#cb105-4" tabindex="-1"></a>niter <span class="ot"><-</span> <span class="dv">10</span></span>
<span id="cb105-5"><a href="cha-building-models.html#cb105-5" tabindex="-1"></a><span class="fu">set.seed</span>(<span class="dv">0</span>)</span>
<span id="cb105-6"><a href="cha-building-models.html#cb105-6" tabindex="-1"></a>Cobj<span class="sc">$</span>pumpMissMCMC<span class="sc">$</span><span class="fu">run</span>(niter)</span>
<span id="cb105-7"><a href="cha-building-models.html#cb105-7" tabindex="-1"></a>samples <span class="ot"><-</span> <span class="fu">as.matrix</span>(Cobj<span class="sc">$</span>pumpMissMCMC<span class="sc">$</span>mvSamples)</span>
<span id="cb105-8"><a href="cha-building-models.html#cb105-8" tabindex="-1"></a></span>
<span id="cb105-9"><a href="cha-building-models.html#cb105-9" tabindex="-1"></a>samples[<span class="dv">1</span><span class="sc">:</span><span class="dv">5</span>, <span class="dv">13</span><span class="sc">:</span><span class="dv">17</span>]</span></code></pre></div>
<pre><code>## x[1] x[2] x[3] x[4] x[5]
## [1,] 12 1 0 14 3
## [2,] 7 1 35 14 3
## [3,] 19 1 4 14 3
## [4,] 61 1 36 14 3
## [5,] 70 1 61 14 3</code></pre>
<p>Missing values may also occur in explanatory/predictor variables. Values for
such variables should be passed in via the <code>data</code> argument to
<code>nimbleModel</code>, with <code>NA</code> for the missing values. In some
contexts, one would want to specify distributions for such explanatory
variables, for example so that an MCMC would impute the missing values.</p>
</div>
<div id="sec:defin-altern-models" class="section level4 hasAnchor" number="6.1.1.4">
<h4><span class="header-section-number">6.1.1.4</span> Defining alternative models with the same code<a href="cha-building-models.html#sec:defin-altern-models" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>Avoiding code duplication is a basic principle of good programming. In
NIMBLE, one can use definition-time if-then-else statements to create
different models from the same code. As a simple example, say we have
a linear regression model and want to consider including or omitting
<code>x[2]</code> as an explanatory variable:</p>
<div class="sourceCode" id="cb107"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb107-1"><a href="cha-building-models.html#cb107-1" tabindex="-1"></a>regressionCode <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb107-2"><a href="cha-building-models.html#cb107-2" tabindex="-1"></a> intercept <span class="sc">~</span> <span class="fu">dnorm</span>(<span class="dv">0</span>, <span class="at">sd =</span> <span class="dv">1000</span>)</span>
<span id="cb107-3"><a href="cha-building-models.html#cb107-3" tabindex="-1"></a> slope1 <span class="sc">~</span> <span class="fu">dnorm</span>(<span class="dv">0</span>, <span class="at">sd =</span> <span class="dv">1000</span>)</span>
<span id="cb107-4"><a href="cha-building-models.html#cb107-4" tabindex="-1"></a> <span class="cf">if</span>(includeX2) {</span>
<span id="cb107-5"><a href="cha-building-models.html#cb107-5" tabindex="-1"></a> slope2 <span class="sc">~</span> <span class="fu">dnorm</span>(<span class="dv">0</span>, <span class="at">sd =</span> <span class="dv">1000</span>)</span>
<span id="cb107-6"><a href="cha-building-models.html#cb107-6" tabindex="-1"></a> <span class="cf">for</span>(i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span>N) </span>
<span id="cb107-7"><a href="cha-building-models.html#cb107-7" tabindex="-1"></a> predictedY[i] <span class="ot"><-</span> intercept <span class="sc">+</span> slope1 <span class="sc">*</span> x1[i] <span class="sc">+</span> slope2 <span class="sc">*</span> x2[i]</span>
<span id="cb107-8"><a href="cha-building-models.html#cb107-8" tabindex="-1"></a> } <span class="cf">else</span> {</span>
<span id="cb107-9"><a href="cha-building-models.html#cb107-9" tabindex="-1"></a> <span class="cf">for</span>(i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span>N) predictedY[i] <span class="ot"><-</span> intercept <span class="sc">+</span> slope1 <span class="sc">*</span> x1[i]</span>
<span id="cb107-10"><a href="cha-building-models.html#cb107-10" tabindex="-1"></a> }</span>
<span id="cb107-11"><a href="cha-building-models.html#cb107-11" tabindex="-1"></a> sigmaY <span class="sc">~</span> <span class="fu">dunif</span>(<span class="dv">0</span>, <span class="dv">100</span>)</span>
<span id="cb107-12"><a href="cha-building-models.html#cb107-12" tabindex="-1"></a> <span class="cf">for</span>(i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span>N) Y[i] <span class="sc">~</span> <span class="fu">dnorm</span>(predictedY[i], sigmaY)</span>
<span id="cb107-13"><a href="cha-building-models.html#cb107-13" tabindex="-1"></a>})</span>
<span id="cb107-14"><a href="cha-building-models.html#cb107-14" tabindex="-1"></a></span>
<span id="cb107-15"><a href="cha-building-models.html#cb107-15" tabindex="-1"></a>includeX2 <span class="ot"><-</span> <span class="cn">FALSE</span></span>
<span id="cb107-16"><a href="cha-building-models.html#cb107-16" tabindex="-1"></a>modelWithoutX2 <span class="ot"><-</span> <span class="fu">nimbleModel</span>(regressionCode, <span class="at">constants =</span> <span class="fu">list</span>(<span class="at">N =</span> <span class="dv">30</span>), </span>
<span id="cb107-17"><a href="cha-building-models.html#cb107-17" tabindex="-1"></a> <span class="at">check=</span><span class="cn">FALSE</span>)</span>
<span id="cb107-18"><a href="cha-building-models.html#cb107-18" tabindex="-1"></a>modelWithoutX2<span class="sc">$</span><span class="fu">getVarNames</span>()</span></code></pre></div>
<pre><code>## [1] "intercept" "slope1"
## [3] "predictedY" "sigmaY"
## [5] "lifted_d1_over_sqrt_oPsigmaY_cP" "Y"
## [7] "x1"</code></pre>
<div class="sourceCode" id="cb109"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb109-1"><a href="cha-building-models.html#cb109-1" tabindex="-1"></a>includeX2 <span class="ot"><-</span> <span class="cn">TRUE</span></span>
<span id="cb109-2"><a href="cha-building-models.html#cb109-2" tabindex="-1"></a>modelWithX2 <span class="ot"><-</span> <span class="fu">nimbleModel</span>(regressionCode, <span class="at">constants =</span> <span class="fu">list</span>(<span class="at">N =</span> <span class="dv">30</span>), </span>
<span id="cb109-3"><a href="cha-building-models.html#cb109-3" tabindex="-1"></a> <span class="at">check =</span> <span class="cn">FALSE</span>)</span>
<span id="cb109-4"><a href="cha-building-models.html#cb109-4" tabindex="-1"></a>modelWithX2<span class="sc">$</span><span class="fu">getVarNames</span>()</span></code></pre></div>
<pre><code>## [1] "intercept" "slope1"
## [3] "slope2" "predictedY"
## [5] "sigmaY" "lifted_d1_over_sqrt_oPsigmaY_cP"
## [7] "Y" "x1"
## [9] "x2"</code></pre>
<p>Whereas the <em>constants</em> are a property of the <em>model definition</em>
– since they may help determine the model structure itself –
<em>data</em> nodes can be different in different copies of the model
generated from the same <em>model definition</em>. The <code>setData</code> and
<code>setInits</code> described above can be used for each copy of the model.</p>
</div>
<div id="sec:provide-dimensions" class="section level4 hasAnchor" number="6.1.1.5">
<h4><span class="header-section-number">6.1.1.5</span> Providing dimensions via <em>nimbleModel</em><a href="cha-building-models.html#sec:provide-dimensions" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p><code>nimbleModel</code> can usually determine the dimensions of every
variable from the declarations in the BUGS code. However, it is
possible to use a multivariate object only with empty indices
(e.g. <code>x[,]</code>), in which case the dimensions must be provided as an
argument to <code>nimbleModel</code>.</p>
<p>Here’s an example with multivariate nodes. The first provides indices, so
no <code>dimensions</code> argument is needed, while the second omits the
indices and provides a <code>dimensions</code> argument instead.</p>
<div class="sourceCode" id="cb111"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb111-1"><a href="cha-building-models.html#cb111-1" tabindex="-1"></a>code <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb111-2"><a href="cha-building-models.html#cb111-2" tabindex="-1"></a> y[<span class="dv">1</span><span class="sc">:</span>K] <span class="sc">~</span> <span class="fu">dmulti</span>(p[<span class="dv">1</span><span class="sc">:</span>K], n)</span>
<span id="cb111-3"><a href="cha-building-models.html#cb111-3" tabindex="-1"></a> p[<span class="dv">1</span><span class="sc">:</span>K] <span class="sc">~</span> <span class="fu">ddirch</span>(alpha[<span class="dv">1</span><span class="sc">:</span>K])</span>
<span id="cb111-4"><a href="cha-building-models.html#cb111-4" tabindex="-1"></a> <span class="fu">log</span>(alpha[<span class="dv">1</span><span class="sc">:</span>K]) <span class="sc">~</span> <span class="fu">dmnorm</span>(alpha0[<span class="dv">1</span><span class="sc">:</span>K], R[<span class="dv">1</span><span class="sc">:</span>K, <span class="dv">1</span><span class="sc">:</span>K])</span>
<span id="cb111-5"><a href="cha-building-models.html#cb111-5" tabindex="-1"></a>})</span>
<span id="cb111-6"><a href="cha-building-models.html#cb111-6" tabindex="-1"></a></span>
<span id="cb111-7"><a href="cha-building-models.html#cb111-7" tabindex="-1"></a>K <span class="ot"><-</span> <span class="dv">5</span></span>
<span id="cb111-8"><a href="cha-building-models.html#cb111-8" tabindex="-1"></a>model <span class="ot"><-</span> <span class="fu">nimbleModel</span>(code, <span class="at">constants =</span> <span class="fu">list</span>(<span class="at">n =</span> <span class="dv">3</span>, <span class="at">K =</span> K,</span>
<span id="cb111-9"><a href="cha-building-models.html#cb111-9" tabindex="-1"></a> <span class="at">alpha0 =</span> <span class="fu">rep</span>(<span class="dv">0</span>, K), <span class="at">R =</span> <span class="fu">diag</span>(K)),</span>
<span id="cb111-10"><a href="cha-building-models.html#cb111-10" tabindex="-1"></a> <span class="at">check =</span> <span class="cn">FALSE</span>)</span>
<span id="cb111-11"><a href="cha-building-models.html#cb111-11" tabindex="-1"></a></span>
<span id="cb111-12"><a href="cha-building-models.html#cb111-12" tabindex="-1"></a>codeAlt <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb111-13"><a href="cha-building-models.html#cb111-13" tabindex="-1"></a> y[] <span class="sc">~</span> <span class="fu">dmulti</span>(p[], n)</span>
<span id="cb111-14"><a href="cha-building-models.html#cb111-14" tabindex="-1"></a> p[] <span class="sc">~</span> <span class="fu">ddirch</span>(alpha[])</span>
<span id="cb111-15"><a href="cha-building-models.html#cb111-15" tabindex="-1"></a> <span class="fu">log</span>(alpha[]) <span class="sc">~</span> <span class="fu">dmnorm</span>(alpha0[], R[ , ])</span>
<span id="cb111-16"><a href="cha-building-models.html#cb111-16" tabindex="-1"></a>})</span>
<span id="cb111-17"><a href="cha-building-models.html#cb111-17" tabindex="-1"></a></span>
<span id="cb111-18"><a href="cha-building-models.html#cb111-18" tabindex="-1"></a>model <span class="ot"><-</span> <span class="fu">nimbleModel</span>(codeAlt, <span class="at">constants =</span> <span class="fu">list</span>(<span class="at">n =</span> <span class="dv">3</span>, <span class="at">K =</span> K, <span class="at">alpha0 =</span> <span class="fu">rep</span>(<span class="dv">0</span>, K),</span>
<span id="cb111-19"><a href="cha-building-models.html#cb111-19" tabindex="-1"></a> <span class="at">R =</span> <span class="fu">diag</span>(K)),</span>
<span id="cb111-20"><a href="cha-building-models.html#cb111-20" tabindex="-1"></a> <span class="at">dimensions =</span> <span class="fu">list</span>(<span class="at">y =</span> K, <span class="at">p =</span> K, <span class="at">alpha =</span> K),</span>
<span id="cb111-21"><a href="cha-building-models.html#cb111-21" tabindex="-1"></a> <span class="at">check =</span> <span class="cn">FALSE</span>)</span></code></pre></div>
<p>In that example, since <code>alpha0</code> and <code>R</code> are provided as constants, we don’t need to specify their dimensions.</p>
</div>
</div>
<div id="sec:readBUGSmodel" class="section level3 hasAnchor" number="6.1.2">
<h3><span class="header-section-number">6.1.2</span> Creating a model from standard BUGS and JAGS input files<a href="cha-building-models.html#sec:readBUGSmodel" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Users with BUGS and JAGS experience may have files set up in standard
formats for use in BUGS and JAGS. <code>readBUGSmodel</code> can
read in the model, data/constant values and initial values in those
formats. It can also take information directly from R objects
somewhat more flexibly than <code>nimbleModel</code>, specifically allowing
inputs set up similarly to those for BUGS and JAGS.
In either case, after processing the inputs, it calls <code>nimbleModel</code>.
Note that unlike BUGS and JAGS, only a single set of initial values can be
specified in creating a model. Please see <code>help(readBUGSmodel)</code> for argument details.</p>
<p>As an example of using <code>readBUGSmodel</code>, let’s create a model for the <em>pump</em> example from BUGS.</p>
<div class="sourceCode" id="cb112"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb112-1"><a href="cha-building-models.html#cb112-1" tabindex="-1"></a>pumpDir <span class="ot"><-</span> <span class="fu">system.file</span>(<span class="st">'classic-bugs'</span>, <span class="st">'vol1'</span>, <span class="st">'pump'</span>, <span class="at">package =</span> <span class="st">'nimble'</span>)</span>
<span id="cb112-2"><a href="cha-building-models.html#cb112-2" tabindex="-1"></a>pumpModel <span class="ot"><-</span> <span class="fu">readBUGSmodel</span>(<span class="st">'pump.bug'</span>, <span class="at">data =</span> <span class="st">'pump-data.R'</span>, </span>
<span id="cb112-3"><a href="cha-building-models.html#cb112-3" tabindex="-1"></a> <span class="at">inits =</span> <span class="st">'pump-init.R'</span>, <span class="at">dir =</span> pumpDir)</span></code></pre></div>
<p>Note that <code>readBUGSmodel</code> allows one to include <code>var</code> and <code>data</code> blocks in the model file as in some of the BUGS examples (such as <code>inhaler</code>). The <code>data</code> block pre-computes constant and data values. Also note that if <code>data</code> and <code>inits</code> are provided
as files, the files should contain R code that creates objects
analogous to what would populate the list if a list were provided
instead. Please see the JAGS manual examples or the
<code>classic_bugs</code> directory in the NIMBLE package for example
syntax.
<!--- PdV - at some point I think there was discussion of code that would appear in a 'data' block being put in the model code directly, but I think this could lead to variable on the LHS twice with <- and ~, so I think I'm not understanding what we want to allow in code defining a model
% I have no recollection of that idea. Doesn't sound safe. -Perry -->
NIMBLE by and large does not need the information given in a <code>var</code>
block but occasionally this is used to determine dimensionality, such
as in the case of syntax like <code>xbar <- mean(x[])</code> where <code>x</code> is a variable that appears only on the right-hand side of BUGS expressions.</p>
<p>Note that NIMBLE does not handle formatting such as in some of the
original BUGS examples in which data was indicated with syntax such as
<code>data x in 'x.txt'</code>.</p>
</div>
<div id="sub:multiple-instances" class="section level3 hasAnchor" number="6.1.3">
<h3><span class="header-section-number">6.1.3</span> Making multiple instances from the same model definition<a href="cha-building-models.html#sub:multiple-instances" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Sometimes it is useful to have more than one copy of the same model.
For example, an algorithm (i.e., nimbleFunction) such as an MCMC will be
bound to a particular model before it is run. A user could build multiple algorithms
to use the same model instance, or they may want each algorithm to
have its own instance of the model.</p>
<p>There are two ways to create new instances of a model, shown in this example:</p>
<div class="sourceCode" id="cb113"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb113-1"><a href="cha-building-models.html#cb113-1" tabindex="-1"></a>simpleCode <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb113-2"><a href="cha-building-models.html#cb113-2" tabindex="-1"></a> <span class="cf">for</span>(i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span>N) x[i] <span class="sc">~</span> <span class="fu">dnorm</span>(<span class="dv">0</span>, <span class="dv">1</span>)</span>
<span id="cb113-3"><a href="cha-building-models.html#cb113-3" tabindex="-1"></a>})</span>
<span id="cb113-4"><a href="cha-building-models.html#cb113-4" tabindex="-1"></a></span>
<span id="cb113-5"><a href="cha-building-models.html#cb113-5" tabindex="-1"></a><span class="co"># Return the model definition only, not a built model</span></span>
<span id="cb113-6"><a href="cha-building-models.html#cb113-6" tabindex="-1"></a>simpleModelDefinition <span class="ot"><-</span> <span class="fu">nimbleModel</span>(simpleCode, <span class="at">constants =</span> <span class="fu">list</span>(<span class="at">N =</span> <span class="dv">10</span>),</span>
<span id="cb113-7"><a href="cha-building-models.html#cb113-7" tabindex="-1"></a> <span class="at">returnDef =</span> <span class="cn">TRUE</span>, <span class="at">check =</span> <span class="cn">FALSE</span>)</span>
<span id="cb113-8"><a href="cha-building-models.html#cb113-8" tabindex="-1"></a><span class="co"># Make one instance of the model</span></span>
<span id="cb113-9"><a href="cha-building-models.html#cb113-9" tabindex="-1"></a>simpleModelCopy1 <span class="ot"><-</span> simpleModelDefinition<span class="sc">$</span><span class="fu">newModel</span>(<span class="at">check =</span> <span class="cn">FALSE</span>)</span>
<span id="cb113-10"><a href="cha-building-models.html#cb113-10" tabindex="-1"></a><span class="co"># Make another instance from the same definition</span></span>
<span id="cb113-11"><a href="cha-building-models.html#cb113-11" tabindex="-1"></a>simpleModelCopy2 <span class="ot"><-</span> simpleModelDefinition<span class="sc">$</span><span class="fu">newModel</span>(<span class="at">check =</span> <span class="cn">FALSE</span>)</span>
<span id="cb113-12"><a href="cha-building-models.html#cb113-12" tabindex="-1"></a><span class="co"># Ask simpleModelCopy2 for another copy of itself</span></span>
<span id="cb113-13"><a href="cha-building-models.html#cb113-13" tabindex="-1"></a>simpleModelCopy3 <span class="ot"><-</span> simpleModelCopy2<span class="sc">$</span><span class="fu">newModel</span>(<span class="at">check =</span> <span class="cn">FALSE</span>)</span></code></pre></div>
<p>Each copy of the model can have different nodes flagged as data and
different values in any nodes. They cannot have different values of
<code>N</code> because that is a constant; it must be a constant because
it helps define the model.</p>
</div>
</div>
<div id="sec:nodes-and-variables" class="section level2 hasAnchor" number="6.2">
<h2><span class="header-section-number">6.2</span> NIMBLE models are objects you can query and manipulate<a href="cha-building-models.html#sec:nodes-and-variables" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>NIMBLE models are objects that can be modified and manipulated from R.
In this section we introduce some basic ways to use a model object.
Chapter <a href="cha-using-models.html#cha-using-models">14</a> covers more topics for writing
algorithms that use models.</p>
<div id="sec:what-are-nodes-and-variables" class="section level3 hasAnchor" number="6.2.1">
<h3><span class="header-section-number">6.2.1</span> What are variables and nodes?<a href="cha-building-models.html#sec:what-are-nodes-and-variables" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>This section discusses some basic concepts and terminology to
be able to speak about NIMBLE models clearly.</p>
<p>Suppose we have created a model from the following BUGS code.
<!--- This chunk can be modified to jut remove the nimbleModel call. --></p>
<div class="sourceCode" id="cb114"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb114-1"><a href="cha-building-models.html#cb114-1" tabindex="-1"></a>mc <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb114-2"><a href="cha-building-models.html#cb114-2" tabindex="-1"></a> a <span class="sc">~</span> <span class="fu">dnorm</span>(<span class="dv">0</span>, <span class="fl">0.001</span>)</span>
<span id="cb114-3"><a href="cha-building-models.html#cb114-3" tabindex="-1"></a> <span class="cf">for</span>(i <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span><span class="dv">5</span>) {</span>
<span id="cb114-4"><a href="cha-building-models.html#cb114-4" tabindex="-1"></a> y[i] <span class="sc">~</span> <span class="fu">dnorm</span>(a, <span class="at">sd =</span> <span class="fl">0.1</span>)</span>
<span id="cb114-5"><a href="cha-building-models.html#cb114-5" tabindex="-1"></a> <span class="cf">for</span>(j <span class="cf">in</span> <span class="dv">1</span><span class="sc">:</span><span class="dv">3</span>)</span>
<span id="cb114-6"><a href="cha-building-models.html#cb114-6" tabindex="-1"></a> z[i,j] <span class="sc">~</span> <span class="fu">dnorm</span>(y[i], tau)</span>
<span id="cb114-7"><a href="cha-building-models.html#cb114-7" tabindex="-1"></a> }</span>
<span id="cb114-8"><a href="cha-building-models.html#cb114-8" tabindex="-1"></a> tau <span class="sc">~</span> <span class="fu">dunif</span>(<span class="dv">0</span>, <span class="dv">20</span>)</span>
<span id="cb114-9"><a href="cha-building-models.html#cb114-9" tabindex="-1"></a> y.squared[<span class="dv">1</span><span class="sc">:</span><span class="dv">5</span>] <span class="ot"><-</span> y[<span class="dv">1</span><span class="sc">:</span><span class="dv">5</span>]<span class="sc">^</span><span class="dv">2</span></span>
<span id="cb114-10"><a href="cha-building-models.html#cb114-10" tabindex="-1"></a>})</span>
<span id="cb114-11"><a href="cha-building-models.html#cb114-11" tabindex="-1"></a></span>
<span id="cb114-12"><a href="cha-building-models.html#cb114-12" tabindex="-1"></a>model <span class="ot"><-</span> <span class="fu">nimbleModel</span>(mc, <span class="at">data =</span> <span class="fu">list</span>(<span class="at">z =</span> <span class="fu">matrix</span>(<span class="fu">rnorm</span>(<span class="dv">15</span>), <span class="at">nrow =</span> <span class="dv">5</span>)))</span></code></pre></div>
<p>In NIMBLE terminology:</p>
<ul>
<li>The <em>variables</em> of this model are <code>a</code>, <code>y</code>, <code>z</code>,
and <code>y.squared</code>.</li>
<li>The <em>nodes</em> of this model are <code>a</code>, <code>y[1]</code> <span class="math inline">\(,\ldots,\)</span>
<code>y[5]</code>, <code>z[1,1]</code> <span class="math inline">\(,\ldots,\)</span> <code>z[5, 3]</code>, and
<code>y.squared[1:5]</code>. In graph terminology, nodes are vertices in
the model graph.</li>
<li>The <em>node functions</em> of this model are
<code>a ~ dnorm(0, 0.001)</code>, <code>y[i] ~ dnorm(a, 0.1)</code>,
<code>z[i,j] ~ dnorm(y[i], sd = 0.1)</code>, and
<code>y.squared[1:5] <- y[1:5]^2</code>. Each node’s calculations are
handled by a node function. Sometimes the distinction between
nodes and node functions is important, but when it is not important
we may refer to both simply as <em>nodes</em>.<br />
</li>
<li>The <em>scalar elements</em> of this model include all the scalar
nodes as well as the scalar elements <code>y.squared[1]</code> <span class="math inline">\(,\ldots,\)</span>
<code>y.squared[5]</code> of the multivariate node <code>y.squared[1:5]</code>.</li>
</ul>
</div>
<div id="determining-the-nodes-and-variables-in-a-model" class="section level3 hasAnchor" number="6.2.2">
<h3><span class="header-section-number">6.2.2</span> Determining the nodes and variables in a model<a href="cha-building-models.html#determining-the-nodes-and-variables-in-a-model" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>One can determine the variables in a model using <code>getVarNames</code> and the nodes in a model using <code>getNodeNames</code>. Optional arguments to <code>getNodeNames</code> allow you to select only certain types of nodes, as discussed in Section <a href="cha-using-models.html#sec:get-nodes">14.1.1</a> and in the R help for <code>getNodeNames</code>.</p>
<div class="sourceCode" id="cb115"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb115-1"><a href="cha-building-models.html#cb115-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">getVarNames</span>()</span></code></pre></div>
<pre><code>## [1] "a" "y"
## [3] "lifted_d1_over_sqrt_oPtau_cP" "z"
## [5] "tau" "y.squared"</code></pre>
<div class="sourceCode" id="cb117"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb117-1"><a href="cha-building-models.html#cb117-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">getNodeNames</span>()</span></code></pre></div>
<pre><code>## [1] "a" "tau"
## [3] "y[1]" "y[2]"
## [5] "y[3]" "y[4]"
## [7] "y[5]" "lifted_d1_over_sqrt_oPtau_cP"
## [9] "y.squared[1:5]" "z[1, 1]"
## [11] "z[1, 2]" "z[1, 3]"
## [13] "z[2, 1]" "z[2, 2]"
## [15] "z[2, 3]" "z[3, 1]"
## [17] "z[3, 2]" "z[3, 3]"
## [19] "z[4, 1]" "z[4, 2]"
## [21] "z[4, 3]" "z[5, 1]"
## [23] "z[5, 2]" "z[5, 3]"</code></pre>
<p>Note that some of the nodes may be ‘lifted’ nodes introduced by
NIMBLE (Section <a href="cha-using-models.html#sec:introduced-nodes">14.1.2</a>). In this case <code>lifted_d1_over_sqrt_oPtau_cP</code> (this is a node for the standard deviation of the <code>z</code> nodes using NIMBLE’s canonical parameterization of the normal distribution) is the only lifted node in the model.</p>
<p>To determine the dependencies of one or more nodes in the model, you can use <code>getDependencies</code> as discussed in Section <a href="cha-using-models.html#sec:cdgetdependencies">14.1.3</a>.</p>
</div>
<div id="sec:accessing-nodes" class="section level3 hasAnchor" number="6.2.3">
<h3><span class="header-section-number">6.2.3</span> Accessing nodes<a href="cha-building-models.html#sec:accessing-nodes" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Model variables can be accessed and set just as in R using <code>$</code> and
<code>[[ ]]</code>. For example</p>
<div class="sourceCode" id="cb119"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb119-1"><a href="cha-building-models.html#cb119-1" tabindex="-1"></a>model<span class="sc">$</span>a <span class="ot"><-</span> <span class="dv">5</span></span>
<span id="cb119-2"><a href="cha-building-models.html#cb119-2" tabindex="-1"></a>model<span class="sc">$</span>a</span></code></pre></div>
<pre><code>## [1] 5</code></pre>
<div class="sourceCode" id="cb121"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb121-1"><a href="cha-building-models.html#cb121-1" tabindex="-1"></a>model[[<span class="st">"a"</span>]]</span></code></pre></div>
<pre><code>## [1] 5</code></pre>
<div class="sourceCode" id="cb123"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb123-1"><a href="cha-building-models.html#cb123-1" tabindex="-1"></a>model<span class="sc">$</span>y[<span class="dv">2</span><span class="sc">:</span><span class="dv">4</span>] <span class="ot"><-</span> <span class="fu">rnorm</span>(<span class="dv">3</span>)</span>
<span id="cb123-2"><a href="cha-building-models.html#cb123-2" tabindex="-1"></a>model<span class="sc">$</span>y</span></code></pre></div>
<pre><code>## [1] NA -0.7317482 0.8303732 -1.2080828 NA</code></pre>
<div class="sourceCode" id="cb125"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb125-1"><a href="cha-building-models.html#cb125-1" tabindex="-1"></a>model[[<span class="st">"y"</span>]][<span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">5</span>)] <span class="ot"><-</span> <span class="fu">rnorm</span>(<span class="dv">2</span>)</span>
<span id="cb125-2"><a href="cha-building-models.html#cb125-2" tabindex="-1"></a>model<span class="sc">$</span>y</span></code></pre></div>
<pre><code>## [1] -1.0479844 -0.7317482 0.8303732 -1.2080828 1.4411577</code></pre>
<div class="sourceCode" id="cb127"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb127-1"><a href="cha-building-models.html#cb127-1" tabindex="-1"></a>model<span class="sc">$</span>z[<span class="dv">1</span>,]</span></code></pre></div>
<pre><code>## [1] 2.0752450 0.2199248 -0.7660820</code></pre>
<p>While nodes that are part of a variable can be accessed as above, each
node also has its own name that can be used to access it directly. For
example, <code>y[2]</code> has the name ‘y[2]’ and can be accessed by that
name as follows:</p>
<div class="sourceCode" id="cb129"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb129-1"><a href="cha-building-models.html#cb129-1" tabindex="-1"></a>model[[<span class="st">"y[2]"</span>]]</span></code></pre></div>
<pre><code>## [1] -0.7317482</code></pre>
<div class="sourceCode" id="cb131"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb131-1"><a href="cha-building-models.html#cb131-1" tabindex="-1"></a>model[[<span class="st">"y[2]"</span>]] <span class="ot"><-</span> <span class="sc">-</span><span class="dv">5</span></span>
<span id="cb131-2"><a href="cha-building-models.html#cb131-2" tabindex="-1"></a>model<span class="sc">$</span>y</span></code></pre></div>
<pre><code>## [1] -1.0479844 -5.0000000 0.8303732 -1.2080828 1.4411577</code></pre>
<div class="sourceCode" id="cb133"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb133-1"><a href="cha-building-models.html#cb133-1" tabindex="-1"></a>model[[<span class="st">"z[2, 3]"</span>]]</span></code></pre></div>
<pre><code>## [1] -0.4302118</code></pre>
<div class="sourceCode" id="cb135"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb135-1"><a href="cha-building-models.html#cb135-1" tabindex="-1"></a>model[[<span class="st">"z[2:4, 1:2]"</span>]][<span class="dv">1</span>, <span class="dv">2</span>]</span></code></pre></div>
<pre><code>## [1] -1.46725</code></pre>
<div class="sourceCode" id="cb137"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb137-1"><a href="cha-building-models.html#cb137-1" tabindex="-1"></a>model<span class="sc">$</span>z[<span class="dv">2</span>, <span class="dv">2</span>]</span></code></pre></div>
<pre><code>## [1] -1.46725</code></pre>
<p>Notice that node names can include index blocks, such as
<code>model[["z[2:4, 1:2]"]]</code>, and these are not strictly required to
correspond to actual nodes. Such blocks can be subsequently
sub-indexed in the regular R manner, such as <code>model[["z[2:4, 1:2]"]][1, 2]</code>.</p>
</div>
<div id="sec:how-nodes-are" class="section level3 hasAnchor" number="6.2.4">
<h3><span class="header-section-number">6.2.4</span> How nodes are named<a href="cha-building-models.html#sec:how-nodes-are" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Every node has a name that is a character string including its
indices, with a space after every comma. For example, <code>X[1, 2, 3]</code>
has the name ‘X[1, 2, 3]’. Nodes following multivariate
distributions have names that include their index blocks. For
example, a multivariate node for <code>X[6:10, 3]</code> has the name ‘X[6:10, 3]’.</p>
<p>The definitive source for node names in a model is
<code>getNodeNames</code>, described previously.</p>
<p>In the event you need to ensure that a name is formatted correctly,
you can use the <code>expandNodeNames</code> method. For
example, to get the spaces correctly inserted into ‘X[1,1:5]’:</p>
<div class="sourceCode" id="cb139"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb139-1"><a href="cha-building-models.html#cb139-1" tabindex="-1"></a>multiVarCode <span class="ot"><-</span> <span class="fu">nimbleCode</span>({</span>
<span id="cb139-2"><a href="cha-building-models.html#cb139-2" tabindex="-1"></a> X[<span class="dv">1</span>, <span class="dv">1</span><span class="sc">:</span><span class="dv">5</span>] <span class="sc">~</span> <span class="fu">dmnorm</span>(mu[], cov[,])</span>
<span id="cb139-3"><a href="cha-building-models.html#cb139-3" tabindex="-1"></a> X[<span class="dv">6</span><span class="sc">:</span><span class="dv">10</span>, <span class="dv">3</span>] <span class="sc">~</span> <span class="fu">dmnorm</span>(mu[], cov[,])</span>
<span id="cb139-4"><a href="cha-building-models.html#cb139-4" tabindex="-1"></a>})</span>
<span id="cb139-5"><a href="cha-building-models.html#cb139-5" tabindex="-1"></a></span>
<span id="cb139-6"><a href="cha-building-models.html#cb139-6" tabindex="-1"></a>multiVarModel <span class="ot"><-</span> <span class="fu">nimbleModel</span>(multiVarCode, <span class="at">dimensions =</span></span>
<span id="cb139-7"><a href="cha-building-models.html#cb139-7" tabindex="-1"></a> <span class="fu">list</span>(<span class="at">mu =</span> <span class="dv">5</span>, <span class="at">cov =</span> <span class="fu">c</span>(<span class="dv">5</span>,<span class="dv">5</span>)), <span class="at">calculate =</span> <span class="cn">FALSE</span>)</span>
<span id="cb139-8"><a href="cha-building-models.html#cb139-8" tabindex="-1"></a></span>
<span id="cb139-9"><a href="cha-building-models.html#cb139-9" tabindex="-1"></a>multiVarModel<span class="sc">$</span><span class="fu">expandNodeNames</span>(<span class="st">"X[1,1:5]"</span>)</span></code></pre></div>
<pre><code>## [1] "X[1, 1:5]"</code></pre>
<p>Alternatively, for those inclined to R’s less commonly used features, a nice trick is
to use its <code>parse</code> and <code>deparse</code> functions.</p>
<div class="sourceCode" id="cb141"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb141-1"><a href="cha-building-models.html#cb141-1" tabindex="-1"></a><span class="fu">deparse</span>(<span class="fu">parse</span>(<span class="at">text =</span> <span class="st">"X[1,1:5]"</span>, <span class="at">keep.source =</span> <span class="cn">FALSE</span>)[[<span class="dv">1</span>]])</span></code></pre></div>
<pre><code>## [1] "X[1, 1:5]"</code></pre>
<p>The <code>keep.source = FALSE</code> makes <code>parse</code> more efficient.</p>
</div>
<div id="sec:why-use-node" class="section level3 hasAnchor" number="6.2.5">
<h3><span class="header-section-number">6.2.5</span> Why use node names?<a href="cha-building-models.html#sec:why-use-node" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Syntax like <code>model[["z[2, 3]"]]</code> may seem strange at first, because
the natural habit of an R user would be <code>model[["z"]][2,3]</code>. To see
its utility, consider the example of writing the nimbleFunction given in
Section <a href="cha-lightning-intro.html#sec:creating-your-own">2.8</a>. By giving every scalar node a name, even
if it is part of a multivariate variable, one can write functions in R
or NIMBLE that access any single node by a name, regardless of the
dimensionality of the variable in which it is embedded. This is particularly
useful for NIMBLE, which resolves how to access a particular node
during the compilation process.</p>
</div>
<div id="sec:cdisdata" class="section level3 hasAnchor" number="6.2.6">
<h3><span class="header-section-number">6.2.6</span> Checking if a node holds data<a href="cha-building-models.html#sec:cdisdata" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Finally, you can query whether a node is flagged as data using the
<code>isData</code> method applied to one or more nodes or nodes within variables:</p>
<div class="sourceCode" id="cb143"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb143-1"><a href="cha-building-models.html#cb143-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">isData</span>(<span class="st">'z[1]'</span>)</span></code></pre></div>
<pre><code>## [1] TRUE</code></pre>
<div class="sourceCode" id="cb145"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb145-1"><a href="cha-building-models.html#cb145-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">isData</span>(<span class="fu">c</span>(<span class="st">'z[1]'</span>, <span class="st">'z[2]'</span>, <span class="st">'a'</span>))</span></code></pre></div>
<pre><code>## [1] TRUE TRUE FALSE</code></pre>
<div class="sourceCode" id="cb147"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb147-1"><a href="cha-building-models.html#cb147-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">isData</span>(<span class="st">'z'</span>)</span></code></pre></div>
<pre><code>## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE</code></pre>
<div class="sourceCode" id="cb149"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb149-1"><a href="cha-building-models.html#cb149-1" tabindex="-1"></a>model<span class="sc">$</span><span class="fu">isData</span>(<span class="st">'z[1:3, 1]'</span>)</span></code></pre></div>
<pre><code>## [1] TRUE TRUE TRUE</code></pre>
</div>
</div>
<div id="using-models-in-parallel" class="section level2 hasAnchor" number="6.3">
<h2><span class="header-section-number">6.3</span> Using models in parallel<a href="cha-building-models.html#using-models-in-parallel" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>NIMBLE uses Reference Classes and R6 classes for models and algorithms. Objects of these classes are passed by reference and copies of such objects are simply new variable names that reference the same underlying object.</p>
<p>Thus to run an algorithm in parallel on a given model, one must create multiple copies of the model and algorithm, and compiled versions of these, by calling <code>nimbleModel</code>, <code>buildMCMC</code>, <code>compileNimble</code>, etc. once for each copy. In other words all such calls should be within the parallelized block of code.</p>
<p>For a worked example in the context of MCMC, please see <a href="https://r-nimble.org/nimbleExamples/parallelizing_NIMBLE.html">the parallelization example on our webpage</a>.</p>
</div>
</div>
</section>
</div>
</div>
</div>
<a href="cha-writing-models.html" class="navigation navigation-prev " aria-label="Previous page"><i class="fa fa-angle-left"></i></a>
<a href="cha-mcmc.html" class="navigation navigation-next " aria-label="Next page"><i class="fa fa-angle-right"></i></a>
</div>
</div>
<script src="libs/gitbook-2.6.7/js/app.min.js"></script>
<script src="libs/gitbook-2.6.7/js/clipboard.min.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-search.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-sharing.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-fontsettings.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-bookdown.js"></script>
<script src="libs/gitbook-2.6.7/js/jquery.highlight.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-clipboard.js"></script>
<script>
gitbook.require(["gitbook"], function(gitbook) {
gitbook.start({
"sharing": {
"github": false,
"facebook": true,
"twitter": true,
"linkedin": false,
"weibo": false,
"instapaper": false,
"vk": false,
"whatsapp": false,
"all": ["facebook", "twitter", "linkedin", "weibo", "instapaper"]
},
"fontsettings": {
"theme": "white",
"family": "sans",