From c5c842cb4c81871d760963ca3f078693f9f2da79 Mon Sep 17 00:00:00 2001 From: mattfidler Date: Tue, 28 May 2024 04:01:40 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20nlmixr2/?= =?UTF-8?q?rxode2@659749fd56edca5fb76a81bf60b3d01c62ff58b3=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ng-User-Defined-Functions-into-rxode2.html | 4 +- .../figure-html/benmchmark1-1.png | Bin 40425 -> 43430 bytes .../figure-html/convertC-1.png | Bin 34032 -> 40398 bytes articles/Modifying-Models.html | 2 +- articles/rxode2-cmt.html | 6 +- articles/rxode2-speed.html | 40 +-- .../figure-html/unnamed-chunk-10-1.png | Bin 35849 -> 36489 bytes .../figure-html/unnamed-chunk-12-1.png | Bin 65510 -> 64330 bytes .../figure-html/unnamed-chunk-13-1.png | Bin 69408 -> 65303 bytes articles/rxode2-stiff.html | 4 +- articles/rxode2-syntax.html | 4 +- pkgdown.yml | 2 +- reference/dot-rxWithWd.html | 2 +- .../704a78003b911881e13e3865d8be8e09.md5 | 1 + reference/myapp/mod1.d/mod1_.c | 234 +++++++++--------- reference/myapp/mod1.d/mod1_.o | Bin 112848 -> 112848 bytes reference/myapp/mod1.d/mod1_.so | Bin 90360 -> 90360 bytes reference/myapp/rx_shiny_data.rda | Bin 5591 -> 5588 bytes reference/rxCombineErrorLines.html | 2 +- reference/rxExpandGrid.html | 12 +- search.json | 2 +- 21 files changed, 158 insertions(+), 157 deletions(-) create mode 100644 reference/myapp/mod1.d/704a78003b911881e13e3865d8be8e09.md5 diff --git a/articles/Integrating-User-Defined-Functions-into-rxode2.html b/articles/Integrating-User-Defined-Functions-into-rxode2.html index 3d1e47bc1..ba0f0df8a 100644 --- a/articles/Integrating-User-Defined-Functions-into-rxode2.html +++ b/articles/Integrating-User-Defined-Functions-into-rxode2.html @@ -253,8 +253,8 @@

R based user functionsprint(mb) #> Unit: milliseconds #> expr min lq mean median uq max neval -#> withoutC 6.724595 6.871821 7.296725 6.924844 7.033558 12.172650 100 -#> withC 1.979874 2.033378 2.336496 2.132534 2.630452 6.166024 100 +#> withoutC 6.867416 6.970227 7.706955 7.084244 7.519517 12.342958 100 +#> withC 1.961846 2.025228 2.333243 2.122846 2.614116 6.562157 100

The C version is almost twice as fast as the R version. You may have noticed the conversion also created C versions of the first derivative. This is done automatically and gives not just C versions of function, diff --git a/articles/Integrating-User-Defined-Functions-into-rxode2_files/figure-html/benmchmark1-1.png b/articles/Integrating-User-Defined-Functions-into-rxode2_files/figure-html/benmchmark1-1.png index 484ecebec9355256674c8d499975131239221629..0e96e334c6043866250e238e82c7a000a7b3c75b 100644 GIT binary patch literal 43430 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 z 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 X>rxcFgBRM6r=cBGIgqsf^rim;eGeT- diff --git a/articles/Integrating-User-Defined-Functions-into-rxode2_files/figure-html/convertC-1.png b/articles/Integrating-User-Defined-Functions-into-rxode2_files/figure-html/convertC-1.png index 2a5f6b9f6f1a35ef1eb76daad7fac6184ce64f7c..46a074fbccb1f95bb4be4210379e718179febfd0 100644 GIT binary patch literal 40398 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 S(drBabGOzXPj()?@P7ej7R|E& literal 34032 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 CMU|ug diff --git a/articles/Modifying-Models.html b/articles/Modifying-Models.html index f4751fd15..fda354e94 100644 --- a/articles/Modifying-Models.html +++ b/articles/Modifying-Models.html @@ -1432,7 +1432,7 @@

Creating more comple #> cp <- center/v #> }) #> } -#> <environment: 0x55b14af6e288> +#> <environment: 0x55ff06d78570>

Note that these functions do not modify the ini({}) block. You may have to modify the ini block first to make it a valid rxode2/nlmixr2 model.

diff --git a/articles/rxode2-cmt.html b/articles/rxode2-cmt.html index 6fb5a9baf..5699092fe 100644 --- a/articles/rxode2-cmt.html +++ b/articles/rxode2-cmt.html @@ -381,8 +381,8 @@

How rxode2 assigns compartment n
#> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
 summary(pbpk)
-
#> rxode2 2.1.3 model named rx_a688fd3d12f8698d15feb47597e1364f model (ready). 
-#> DLL: /tmp/RtmpSPRppR/rxode2/rx_a688fd3d12f8698d15feb47597e1364f__.rxd/rx_a688fd3d12f8698d15feb47597e1364f_.so
+
#> rxode2 2.1.3 model named rx_0a5b43d0b1e7bff7f47de827bf0daaa5 model (ready). 
+#> DLL: /tmp/RtmpPXkf2x/rxode2/rx_0a5b43d0b1e7bff7f47de827bf0daaa5__.rxd/rx_0a5b43d0b1e7bff7f47de827bf0daaa5_.so
 #> NULL
 #> 
 #> Calculated Variables:
@@ -732,7 +732,7 @@ 

Appending compartments to the model
 ode.1c.ka$simulationModel
#> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
-
#> rxode2 2.1.3 model named rx_31957e383dd61d7e82e22d46f409ad8a model (ready). 
+
#> rxode2 2.1.3 model named rx_1e03154980d52540647eaa8bacb10b0f model (ready). 
 #> x$state: depot, center
 #> x$stateExtra: eff
 #> x$params: V, KA, CL
diff --git a/articles/rxode2-speed.html b/articles/rxode2-speed.html
index 0ae72650d..b60b6c5ae 100644
--- a/articles/rxode2-speed.html
+++ b/articles/rxode2-speed.html
@@ -264,8 +264,8 @@ 

A note about t output. You can see the differences below:

 summary(mod1$simulationModel)
-#> rxode2 2.1.3 model named rx_4e26e9d8f25df5e07a0521b7b177da87 model ( ready). 
-#> DLL: /tmp/RtmpSPRppR/rxode2/rx_4e26e9d8f25df5e07a0521b7b177da87__.rxd/rx_4e26e9d8f25df5e07a0521b7b177da87_.so
+#> rxode2 2.1.3 model named rx_cb1fa822f5309328f76b6ae6134387bc model ( ready). 
+#> DLL: /tmp/RtmpPXkf2x/rxode2/rx_cb1fa822f5309328f76b6ae6134387bc__.rxd/rx_cb1fa822f5309328f76b6ae6134387bc_.so
 #> NULL
 #> 
 #> Calculated Variables:
@@ -284,8 +284,8 @@ 

A note about t
 summary(mod1$simulationIniModel)
 #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
-#> rxode2 2.1.3 model named rx_5c7a85ad8a3c6825cf7c3e1131132e2a model ( ready). 
-#> DLL: /tmp/RtmpSPRppR/rxode2/rx_5c7a85ad8a3c6825cf7c3e1131132e2a__.rxd/rx_5c7a85ad8a3c6825cf7c3e1131132e2a_.so
+#> rxode2 2.1.3 model named rx_f8478a8ad7138c076241f845fcf72d6c model ( ready). 
+#> DLL: /tmp/RtmpPXkf2x/rxode2/rx_f8478a8ad7138c076241f845fcf72d6c__.rxd/rx_f8478a8ad7138c076241f845fcf72d6c_.so
 #> NULL
 #> 
 #> Calculated Variables:
@@ -312,8 +312,8 @@ 

A note about t
 summary(mod2f$simulationModel)
 #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
-#> rxode2 2.1.3 model named rx_ea7cfb51903394d4a9db941ee311eca2 model ( ready). 
-#> DLL: /tmp/RtmpSPRppR/rxode2/rx_ea7cfb51903394d4a9db941ee311eca2__.rxd/rx_ea7cfb51903394d4a9db941ee311eca2_.so
+#> rxode2 2.1.3 model named rx_881bb97ef0dcf691ed7a5d08770c2985 model ( ready). 
+#> DLL: /tmp/RtmpPXkf2x/rxode2/rx_881bb97ef0dcf691ed7a5d08770c2985__.rxd/rx_881bb97ef0dcf691ed7a5d08770c2985_.so
 #> NULL
 #> 
 #> Calculated Variables:
@@ -370,8 +370,8 @@ 

A note about t
 summary(mod2f$simulationIniModel)
 #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
-#> rxode2 2.1.3 model named rx_d7291e04a9631f78bdda73dc6745fe46 model ( ready). 
-#> DLL: /tmp/RtmpSPRppR/rxode2/rx_d7291e04a9631f78bdda73dc6745fe46__.rxd/rx_d7291e04a9631f78bdda73dc6745fe46_.so
+#> rxode2 2.1.3 model named rx_a19506ad281e7f985f0efe169504bf02 model ( ready). 
+#> DLL: /tmp/RtmpPXkf2x/rxode2/rx_a19506ad281e7f985f0efe169504bf02__.rxd/rx_a19506ad281e7f985f0efe169504bf02_.so
 #> NULL
 #> 
 #> Calculated Variables:
@@ -558,10 +558,10 @@ 

Compare the times between all print(bench) #> Unit: milliseconds #> expr min lq mean median uq max -#> runFor() 265.60642 270.91812 280.10508 273.27375 276.22522 390.10634 -#> runSapply() 264.82305 271.37265 280.13567 273.25948 277.09826 440.15521 -#> runSingleThread() 27.71541 27.86995 28.73338 27.96453 28.08604 48.11461 -#> run2Thread() 16.31607 16.43347 17.25248 16.52140 16.67760 27.95446 +#> runFor() 263.75899 267.88252 276.54611 269.91252 273.66833 391.77390 +#> runSapply() 262.40141 268.24234 276.38984 270.40109 272.75447 434.24999 +#> runSingleThread() 27.45217 27.61226 27.94130 27.69391 27.96168 37.54928 +#> run2Thread() 16.17052 16.32538 17.99204 16.45466 16.85388 27.76178 #> neval #> 100 #> 100 @@ -588,10 +588,10 @@

Compare the times between all print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval -#> runThread(1) 27.73454 27.90294 29.28469 28.52594 29.34674 48.13157 100 -#> runThread(2) 16.29712 16.53740 18.44910 17.22503 17.44130 27.90322 100 -#> runThread(3) 17.40113 19.47790 19.87893 19.73595 20.33017 25.56011 100 -#> runThread(4) 15.93134 16.07433 18.29293 16.73419 16.86182 38.19777 100

+#> runThread(1) 27.45592 27.64329 29.31929 28.28103 29.36378 48.39516 100 +#> runThread(2) 16.17788 16.39189 18.17140 17.07855 17.39019 28.93695 100 +#> runThread(3) 17.42292 19.35593 20.04593 19.99469 20.21361 27.37969 100 +#> runThread(4) 15.80004 16.03155 18.46875 16.62245 16.95347 40.09879 100

 autoplot(bench)

@@ -682,8 +682,8 @@

Increasing speed with compiler o print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval -#> standardCompile 176.6202 183.5591 219.5272 191.7218 238.6262 350.7461 100 -#> fastCompile 176.9396 183.0521 219.0194 187.1348 235.6830 351.4314 100

+#> standardCompile 173.3969 181.5005 218.6953 188.4703 239.3224 375.4217 100 +#> fastCompile 174.1782 179.6236 214.7402 182.9570 230.5892 352.4374 100

 
 autoplot(bench)
@@ -779,7 +779,7 @@

A real life exampleStoplapply <- Sys.time() print(Stoplapply - Startlapply) -#> Time difference of 11.31994 secs

+#> Time difference of 12.08713 secs

By applying some of the new parallel solving concepts you can simply run the same simulation both with less code and faster:

@@ -821,7 +821,7 @@ 

A real life exampleres <- rxSolve(rx, ev, omega=omega, returnType="data.table") endParallel <- Sys.time() print(endParallel - startParallel) -#> Time difference of 0.1070809 secs

+#> Time difference of 0.1223662 secs

You can see a striking time difference between the two methods; A few things to keep in mind:

    diff --git a/articles/rxode2-speed_files/figure-html/unnamed-chunk-10-1.png b/articles/rxode2-speed_files/figure-html/unnamed-chunk-10-1.png index 8ed1c9bf75dbe61dbfea1c2f142ff3c1105c4984..8d796fc192b42a737f97510929be7665cd4990cb 100644 GIT binary patch literal 36489 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
    QyF1u1Z6G5#t~D5YsVR1 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 literal 35849 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 t%=teEsWlX1cM(bW? zmN}JSJgl-VqcLNNPRer*9ww%)pnC5jMa(&^d3U9>}F#%lpP84c6MxijH!;Gp6rHb#$Ena)=<}suP@K>U~#01Rp{;=?sTq zW#)7h!5D*L={gFJwVLgM^>KtR1Y>*wsYUJBfHKxrvpwF`rz$z92LJ#7 diff --git a/articles/rxode2-speed_files/figure-html/unnamed-chunk-12-1.png b/articles/rxode2-speed_files/figure-html/unnamed-chunk-12-1.png index 4ff952965fb6cdfa43965ede33b7ddcae64a65ac..20db0a4816d9dc69e854603cdaccbe72c2e10378 100644 GIT binary patch literal 64330 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 T@KeA|4I214uer{@S zER8qHCTRtdD;y!A@a`40(|sQ*Go*Lw}FJ<2Z#KDPi&U+ttS3BXsq;5 zDRd<6h_Vp&t67jGY+(|eT)Hc+bf0NMRWMi+>$*CtlQWaepLAN*(}X8DQEr`cTlviK z*6MBmvSaSo(n}p2!A@Bh`I0PhSoxEJ)awnvRoN9K%Sa*z6J;#ch5(^-Hzh&{t0zAj%XW>D&G@7HQfVZ@j2lR*`(rV#_g`kavC#Y#Ge9b$6Xw& z{R0xqyD=L-4h7|0A9$7*!(*JEM;3ZPPLPVVWLp>5_~v(;o~CRNPV3nd5Ula*DtouU ze87OA3dbe?3AcH&v-9kBnB?u4HpA_@xz=JuBoWk%@@xsfg+K zqAvOoJ5RCtvMX>?aiELu&S?ky&R3JkS2F)uz}CpRW?1CwP@I)L2YfpON%GkmVS&2O zT=DIQW{f#)y2y>i?;pB$bbmOcfaqy@VJL4 zkx8(wRId^)K5@eZBPYeAlR+_EE-XKKu?^)`t68f*V!dZ3Bn)#L3Ps;!;J~E2tMDeO zn-a0H8DqIp%T&^@m61{*WWN@uXvaLnf`-&dT`pAno%|k3Ll5ou$FA8{eRKU-ADe-H zICpJ4J1A(z0dKm^W$B`dx!Yh~a&>MXIa1`22~oq6?i^WjrRR9-4AeV*5i8OPFOW@H z*!4A?)e`0rV(|W{No>7m&K6lmA&RH+Ews5Wbr>zm(5yvvesc}^rOMHy##eQ zXuDQaZM};pfIhX<#m4SC$RvbhPr~D_W+ygtUD}|cB$nUrWi^d z^r22y>7W&UL3zvZx%C+}twHBp&@ihPfqmzCV-Iz4q@HGl zb=BMy!I-zE9k~tq*z=Dzh}7Tp&SR>-TqxUq5$1RW?q|fh%UB`xs@YH3D=Z6s&t#6z!R347^M4Z0H1|9Be@DbxUp}VYJShH_-X{6SRGH<} zrORdNpMaTmByEXxGo9R)JZT#|n8QN$7<7z7VmM1j%w41{sG=x;#CbqO5%cq&l^q%I z=X&agLvMQ0oB6WnMb3q!@685Vh`zUrWqHLq&kmF3*;H>te4}tLD`J~N5(kzeQ4owYnsDo<7G?Y`zm{@r;@j1t`Hqp8Ln{) z`Z_tWvQUZ!Fw=A)Wrd&tM7e$%0qJC}(8}pN5^cazkZ-r@-yG`?6cPU3iLjbJKHYtpbq%l7~BVN;KUWN<*t`9XAOT5rQ)}DLc#sc+B;IJ2+o1enwSrm0CX~0*x|P-cKILPHI|m<`sO#QNqfXybKvnN zppooG5pRgS4aC6YC}4Vd5xmC;HO(C{0dT!HJ@+}QHu43DL;_M%XO462_UfImdLEKw zj`5!JdR{0{`N0v&qOl*rUD;1FIa2}V@fe@+?WRpsIF}G~!COIyC9SDm>l?h$05w_` z-^%3AHk`8R8F_E&Ydu=#TF)kAqZ6~=4IxDiQv2=Kc{to*s> z`(MOm5h)i!j4!n;zdCmWMjyiACD*a>2*!I)HX-#8?Soe=oB$HPyoEhn;nj#CfhTf` zE|#|tU()6K<>s3w+vb97`)*P;x$|Z;3fOUfMjf6+Rh2-21Z`nFtT3dVH^j1)g|v`h zFQ$bl=j=>Lcq)vW8@>Z*t&=g#iHDM>aKYRt@sgqIrx=aVi9@G<=-q;+Wk=G5vB1HO z@J|v;cY+nvf8h<&MRjHk=29XH2LJe3B$c7~pU~c(hKJLT5<_4p@gOo99W)I~q~R6o z+`Et|3;mc=>oBYYA!AWB=E4~U#TXz*KbTP1iTg?NH50GTnY#L+J4u|%3$y-FD+m2T zQx#S!UBHHG?CWGPd!?iK3IfGCBe4GU+mxIyB<4s#wa=2}aX)y7|%lCFOA<=_WBL;7!!8U;MFwW4s(-1V0J|2oHqL8gk_ mTs7exU2W*n;{WoW4Z?o8=KI$5uU5$=X+CrMH2IU+U;h_Tq6|6! literal 65510 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 SYO3&))ng}*IX}ui;J*MWvOk0X literal 69408 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
    f54+^}K8g7cZK0*D^nRT=&Z zD&@U?kw!T{P+Dm5ZcEBGNsgF!N(2sM63}l^*N*=gW&A&2iCqe&MZA~UT#_%aB?@*k z%PplFz9Yr87xz#m@8X%Und*<33ktZWWLL=~oTBb7;;d|bAOHSl<>IrnWX_>YDMGXo z_jY&fu}65qS(yG2iN4odyl}QMpe_bjW=J)K@H#8m1sW-~j?~Am_FN~6Inh7~)%R}~ z?2G!*I1v@hEaxmNMgH2FU0YA%@@`}=tMcVJPI8eE6xDe)N!_h@5U`9B3aR+{pAoh`>~%P3tR{URX5XfZ{=Rw`Z#06m?;H zKNjel7^y>+*L<(aPTqpAvurwe2a;L7?c@DqMo^xJgOcKzj#oT+51GrOS_t+C+1gU% zg)eRnId<#~?#R~Q%hz{NfQ0+S{6rOG0%%=~5~PVM$8iZAKfw)&7$uQPLyabP?Zu#w zP707&Fko~p{AE#zv?2B?0qh5VU;L%4Rip02uq)n1-z3p^*$2pfPyvrgjdJJT51`Z# zjGBXp7dZzoyPfF&`{U12FxQ)i3Bgq3sQPlH%p#Mz zrQnBV(NeE{;|n_|mq}VK7(IbkDFZ~|Q-s|mTVo5>%r#$)$aC{Q*1*>E8)_%6Iphp!SgQ&;`|usEQmGDVo^c^XZK!On)$CKWQHyvo(uBaU$Yvu0E7DEYUZ7r_Ae_A&C5*o8rC?HQHAt90&RIBA4 zD$Cqy1F#VVo+Nsl6rPejsAh<$I~0(V`757aS}t>*JmJsU*Ob&s2EVlpuUiO3v>u+$M<~f&+pPQ$(f!N6FH`hz zT3b>$7Wkv!;R!|lPb2h9rv1WIgb!Y9GJ;wbChD|jprTmk4>2h3LKvv65vbPf%$DT; zOUS*AE75$G(mwJBJ*Rx#+8!ARMfP_5_zRm;4-A}yy+AC%d+i?Oq|drG`Cfwq7)|&I zpD<0Zg$07V7eqYRw&n4r{uZ)}0FIBDk)jg|i+hP;@ZE3Gk=hsFKb;pa?3gUd%C~35 z2UkinmJg-(!+8jl-76lLDh9x&b_T;%lf(eN9WNm#`DAx9kVA3_Z$zi(P1$f%t((*_ z_HEvkq(jls$6{loXsFXMMKwu{2H;$Ee!8N9PeWyS{79{FbUuYVAzo7#yB(StV;kd9 zG8N+qU&rs|3spt~Sf3sDYHU(=(qR-E0ci>A(@`uS)_eqTyHu3AkxtZ$Y?*X}>O-j< zhS-Omq8QuVHG1+Ax;Xh9%J>b|9<#nyU-G0@KND+Le=x5ZC#$$;s_9X9SyllOBvXvc zTW|jP@Vg5+O=sFowSXaF8|QXhA{|&kx;b!x1?`WH_zh!41zEKQu3(~p0mVOwD+H;W z^PmDen^+8pn2jJarT$Djp-%$D2PBiaGUM=qEIeQ>=M7q{w%5Ayu-TV`BKS%#UX?;b$p=}3O90M z^Y*%@D3ZS>`s@i8{*pqU@Jl2WVTo|e+|FM31{A8YUd1E-T?IM^amLwJU`1HLela|@s07@MOW9pcy0qw zIUwsuCtH7h+Ileify5k;_pZ)2r49(zH0nxaRuRqT7u%b-P+O3RAoLZ1RuyjAx-~=e zrm?|ryVc+#RgL6~mp94>Hs0SDiTY*_J90-k1M*Wdlt1#X1d@M zQjDU8WTP}j$t%w4W;XkC$pEP+%8Y>WQ1Pm$7ZHf4O-pZp5ga^0!gJNacRcq?Ewq57 zwm{)Vj9j0uDCh=1VswDu;}SmS8n1xi2$kgLZno!s0V|~!S^iM^(c<7HmM+xk3eKl8 z4+-6mi%J<)x7s{$q+gSnMy2A_mycj)`v<0v34)A8B2?!&N^3a$XCY24g@J&m1P zX$Yf?NSQ)+dzHJ*^d^IwZwhw~b>7~4e^WlRH$2nF?ewju#W%m7>jE&yqFwz73I63Rtm6z4m#F0*UVT$zlU>TuBK=UY*W&1|^6o|%YgYB=Poissbjl#>+?UKy zYfO<3^OYg^9nF~Xc^)fCR{C`5l!4E z`0+<;(79Qv`whE&+h8;WM`>xxtzbloqIAU|Bhq!`yF~avgA*%vZd1N=*)mZZfxs;_ z0dh&Y56_FDDF>1X5+v*r8jZu&aQ|NCW+hq=+0;O*Hy`pa39NT`Xwt2pHu+_5)oJ2_ z5wq&$Pt<~H@gMA!5j3Ub=Sjd_=QkFXkeno!dU(6tFM_@RcnJMRAQWA?%(5=kYS1WKe1}f%6t2onZD3^jmbT zu&qW1k{Y-=&H?NfK!;Ye_-iGacrn1#Ap`^gG!j*HBr(oDF(kbKyN@V9C~ZU{MyXy( zRCe}>hy$a5UMqbba$tMqC^Bs%Z z&Zw`9XpLk69oM3+MAppfp~GBiRtc6yQA3_5MPm`wr-05k))v;;de~Jl(1YEZTUgkQ z70fb3j{e20yq9x6G;7&XpNG_b)=jy?HaT4avWtq0Ip{%NtcX|qT?qeAkL<5p!FwGi zDUR~TWTfN<%AZ6f-`0FiYAI=m^5=i?#fdcwik`1I+C{tX7V}Q4vh41Rs{2KKXH|!1 z8~fP}{l0U{u&-O@>Ns!HN!A&5>W@Xfbqa5+-nlQJ&Zd!#zyGmO$GWS|FEuRt^@8J+ zcLtqmT>A&azAJ&a&;JHQ3L2?diUWH6J`o z@2W$4xxTm(LDOnV)TbxctNNL*>kDkNht`_ltz8m(jk3I3vvlTOk*p7&k^FFAlHups z%$D=r-TwLoao&jmf;#6w^1CoxW&P>y{{G{Xgi^FZD9%ma;8{PhsbZQ4G?W+_{C`vT zWxjLRkw%d*1nQGr&n6)0@NP`*khe`V!>;P16t&IMd1PSC-H zsfbjAiBf;6z8mOUbs@`@cHn6NA-xe2h3r!ISdF3d$J=lH>e`;p0mC%XM+PUq-Ic@zqsvt7}K5#Qjhbc?Zy9E;m4?T!<`=mafG9Uw5X@bQM`9i@dErG~EAF*Y-TcJrL_;%q{R z_?4f|h&luz3W2W`h|DIl>{X3^@Ogdbnq#9*0Bm5IpTAc0yWN+6h!e8!TOeCwS1 zhgQ)N?aY@^`4->10bUj7Al;NgKOO4l-11b)a-C)#)o*vSP3^kHlhdVH{g^rF4*}Ao zU-n#<9_8rBi|C;>7^)edp~txF7+BKT+@4uzG{%R>#qDBNep<*@Y5mhq|Hkhym@hF> z7vWw+Ft9GHXUq8Aei3)Zdh+BOKEFFh)_*%6DR!kc4*Cdc)h!dP^w2Sb$(|HtGKK{J zZ@%aY=er&JqW(ei%IO`pyv`M3l7&GrQXjtrj7)pPfNqNDIcgl#;UN7c?aVF>$)XBX zV4O+xs5RMM6*_O_?}61$k@ds+5W1inF(QB!Z$Iz5*ESZ#pPqKA8grn`QYyDyRvjr@ zA7A4w;V7V&ApL?NZ@i)JZPPD&a<-F`d!0jPN_tPKSQGbk=u|$=@)uUUp73vuSzr!+U9NwZBdSDm>(Rb^fG;F45JH(E_S#reEK8?a)!u7W9$^ z94-klQjPy%#_xec*}ERw-n)BuJhBy%JAnDh>znXtbK9oFqu<{Rv`F6$RL64154U@b zDhR7#(DIihR332O7j&dwYF)j^jqi30U1Vx(F2nZot(=ls0{n(mf!F}(SF4?i;_L!e z)(mue(4xiGo6|0Tl>6%B?&*4*spCnKpB^)JQhLOcNq)|f%TQxTLwa0NWnN~~^&MyT zbX^seTfN?7CKiND!F*6bzgcYfVE8io)Gf2li%fl*$zoc&VfJ2GiQ=w7y+Vj%4k_uO zi;5Q7dzg1#u<>B8R$foT&3SP>ek_8xL-5|M(I*r)nD}Ky zkyNK{7I+=gKgpN|9P{`0ADek`@#`(eJUjIsI(pmZlZ{n}CvJ~BV@SFd5KRG zjmL{vTES6XXH5GY3=%xIMYC2-4C9yNNdgo2DJX}1*|zM2v~_J~f;9^`MvJ;ZxRGk@ zoi%p@bGPr^+a>S$v&k(N8(6DbnLW$%-tSW9@R+A&HhOJSt)ywx{udT0l~utwy1#p7 zgZP3&T;0Y=CLo#GTY?Uo|C<_Jjt4YF4JGb4GWUQb>ih`| z?I;wgCxBYmG-!JJX6|*`@BX}}Ym{R`BpnNA*AagtO%Px;^Frz^0i`s0QB3TJr8$f9j!#Sw;@=`q!pk?WC2~>v!vAzz)LR(O%d~ z!Tgw~kIhH-cDE`1^kxUWUM8ek#(H@~+NI@-h3ZY|$RVS0oE$g7aXr8{Aqi9R#G9i= z>O267qYCzPt>YQLLLDaM+e*V0-+d?b6VE|616ZDQZwGq?Hu~wzut61H z`WI0J#4!RjI8Gaq`HI(gOam?5L*7*tfy)E;u~ORWem>B(CuuN0pM73v1XMauTiOof zBNPO2%z_sVe$M6dg5thD9YPyGRKA#u zIjLs1OD_HS&p4vt-^t1!|ISx(o^Y z@Vj5{dr`l8{MxvJ|8ZOwKR4ixUhsQ=$M#PxW;JQs&zelK<1qh59+}LY5AoVsZTp$L zEc!xa@#CXL?h+FD9(m>(OA1}(>T>_kPqx^5j!fH`lKYiK>f75nB_36u^|p4Zf4TF? z@RH7{8Vsp6+(sYh)&I}rX+o}QNHw!M%r?MEq#R< zge@1xbS4o8^WqoZ=0^Q#E6cwLeU1y~_Nh7Mv+lR2w9$X5U)ADTN|cUb5})mppBx(N;Hsls%&%;SEi1CL~D{UniS*uZ-m z2>Ps#A29cE;J5P^P*At%YBuA?6|{;i1MVFhbjq=&A_LIKajA`qlq*NJQHj$TPU8Z2 zfa8JHw`6vbQCHEI$zXp^$x1+R$%}rLG$PV@7y;kW=Me@iu>a4M#oF!v$UGWe^5xq1 zm)0{tI4eegyJjyQOZXuM6@;>4X)6k}u?t>&{A9N3+Z2xbSycI?Hb8$&@Lk6&TSzlX zJRy1;9fxtPG$!>1tq`L>!lyK-wi1gKP_Hv9Skb12A0@TXIcX<0^B&XV7Q5h3Fqm*4 zx5AW7o()F6eNBTVa?BWpPg%T}KSbdd41kW19`_F5KTaeMApLeC%g_ zB2+u|nM%%xaC6X;G1Y7xuZYYdGRl0IRrfD>mPO9qdty1Ylb&>)=f?3c`{=mL_}Hy~ z|0n(%H+E51>F)tpIMdbD^+w-EWdv2zVyIa=&iv%GVC$LWkZ|>?Ssn3Krq8`Sb+w5On@gS%S}JtVqYtnF1>4 z71&xY?}G&Yi*Ie~aQys(<5sPE8XKqjgJ(3@1G;AHZ++@^HycW^YInfh^73-Gz=o*7r0Mj4Rb*vf^LyVHZ$|r6?6^|-ZlJ`d>>my(X!Lak>+#xCx_c!W`Q+ExLaj%9u-q`mEw0zR zKTJ^ZIe+(~cx(Q&ra@r58BqkR-E@|cRkxn}yKt9|M?#g_)<9d&ENkgCuRsUhd_nuu%N;_Sq^LpD&$hcFey1uv>- zao$4%p;H7f#q9-{z&qp0$DSg#0(~;z7_~RIFWgq?gcmj+0jgH&WcolNe-*yI>+?&U ziHy9SGdl#sVqWoJ>xf6%k0!$u&ZmSO>!AHjk0GM42;cdy5|1Ti@9Y`F+4LyB?e8}I zw+gA|g#>%gxm+#w@O0$o8p7L*Xzk!})z*AP>6;!440=F>fY3cfCMjH3zU42sIMD_c zxI@4({+szv&fJ(=#T{(52WmBLEDdlDxNci-9wi@v7BiXg%rLJm(dNAHn4k2bq>k#4 zZ6me8bzZr}P}93pdJP#mbkC$H2ldl?ysV8?1Iy_nj*iOx^`PnOKpV_nGJ1ew?QO7! ziO}=x*|S!K7nz0)wRD|E^nejF<&}#%Ie1F1`qMnuR#30Kw?F!E6~^-Fr&o+w(SS;) zRP8qR@m^Os#$!`G%U8^T%ezWEOkcqj@Y*u`K?xYrnN+AV&Ko&inHRW^(=~%%T^fDo zZPvw%xqBF-y_Z+0&)muK+0?-2=FK*)4^*nqITuy~^-+~ShYUMD!P_gUV537-`J-{8 z^KP0~M`yS(E5@*q7+BI0^%)VqEY40KLHd^X5{@BVvnm`791IN2Aj^lm&ehe;PCCuo zYRyr;hZdTFC244cb(Y2E8Fb!Rs~s&@{P|m_QWP2|gtnuxBaI{dlWYygpEpf1(UKO| zC6aVgz#bI<0j0~kdP@Uw2A_pbz4?X5AfWte7EWi%Kz~EUcCld#ZM-(QR`=AHoa0&dN#P~uFF8iRlIRB-2eN7 zO9v-DvN&wGB|O2BCtK3;cIroE+dMG2o9ot@wap&#coHRaG92b`c;y8hIQKu6xqP{n zp}*4}HjemL6B>%pI6_BL@}HayA-g5-60*`8I%x*^U(7MwbpE?GZKh;bJI1-)ur<2W zH_~|B)o}eRG)^D6t()W!bi!n(`^7A?%11|rHV!V-^~?TH9j86OOr;v%S}DFJmfi8p zojx?`wBem8x)W`_nC3ZNho6)NC`fo5)VHO#AP$g(kU~TvulOY;$k=#dC+lhK@-c1w z=iBt!Uv?w-O3SK|t309_euHXln8v`N{f2M*%$wD10mN{B)%3?q+}g@Z!qA;ha|C zxrjjen5FDJagx;-cq(h-KW0s{A(DvfniOH%>e|6Wra+?w@-QVTBg%0>w}x{J+aZ!P zcRBCB)s>2vSzeCXhC7Z?SyBXPxoe1<v8Kp@V=ZiK`7l5Il$aMp<(lekh3Mos zXW&2QShML=YtHY=`SVZI3H1+PbW1t@aaopYtT-~kR}yb=NmG7)klv+;VHTV_XM-re z+FxFg{#6SgNurUUE_(5z%Zs?hucxZ(_1-0h&oQRJ^qo?Xc!fIu zB%9IR9y2!LxHmW>dk*dw^+X(oInfe)K$3~P7K&=()Dv)wMVNP^wWHxgW9w;80Fh0- zS|rUe8ubz-n`qI~lblvT0WHaU__bPgI^wbdHARe*+|9R88dM zXzV^IEXK^MVipJk!Ij!XIw$$bk(}YiDIu!8rzS?o7`6+o7LYk$*K$L#ITvIIl!_IH z%0e3@nTX7=Kvj?LLfzxCz=VS0tLk-^)vcjvSZpXQ$QaF0T~Xjz69$7Nl!}bx<+Och z8AsA4br4iJwFb%Dte3@(;9oP0y-OO)+02uE+hh6$=3xlnO^H?ot0>e&N^Xqj#N+2% zghsdR?{-YGFu+ma8?R4l{-<7@!@WI+E$`gB##BI_S}$wZ zXe0lvjd>ZB8{*Stiff ODEs with Jacobian Specifi
    ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
     summary(Vtpol)
    -
    ## rxode2 2.1.3 model named rx_cc493e863ffdb1841288028f0470c2e6 model (ready). 
    -## DLL: /tmp/RtmpSPRppR/rxode2/rx_cc493e863ffdb1841288028f0470c2e6__.rxd/rx_cc493e863ffdb1841288028f0470c2e6_.so
    +
    ## rxode2 2.1.3 model named rx_ebf53954066c14e2215d9e98d501de9f model (ready). 
    +## DLL: /tmp/RtmpPXkf2x/rxode2/rx_ebf53954066c14e2215d9e98d501de9f__.rxd/rx_ebf53954066c14e2215d9e98d501de9f_.so
     ## NULL
     ## -- rxode2 Model Syntax --
     ## rxode2({
    diff --git a/articles/rxode2-syntax.html b/articles/rxode2-syntax.html
    index 739b987f5..e654cf14c 100644
    --- a/articles/rxode2-syntax.html
    +++ b/articles/rxode2-syntax.html
    @@ -281,7 +281,7 @@ 

    Creating rxode2 models
     mod$simulationModel
     #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
    -#> rxode2 2.1.3 model named rx_b794dde852cc7c8fe9aebc3eea58fddc model ( ready). 
    +#> rxode2 2.1.3 model named rx_0577787cc435460f1d0396f10467e345 model ( ready). 
     #> x$state: depot, center
     #> x$stateExtra: cp
     #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp
    @@ -291,7 +291,7 @@ 

    Creating rxode2 models# or mod$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ -#> rxode2 2.1.3 model named rx_a9629bdbda112e498cbaf24cafcccfe9 model ( ready). +#> rxode2 2.1.3 model named rx_b3707fe11efa354614e6788ba8c23ed4 model ( ready). #> x$state: depot, center #> x$stateExtra: cp #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp diff --git a/pkgdown.yml b/pkgdown.yml index 960399357..68486a319 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -27,7 +27,7 @@ articles: rxode2-transit-compartments: rxode2-transit-compartments.html rxode2-tutorials: rxode2-tutorials.html rxode2-wt: rxode2-wt.html -last_built: 2024-05-28T03:30Z +last_built: 2024-05-28T03:47Z urls: reference: https://nlmixr2.github.io/rxode2/reference article: https://nlmixr2.github.io/rxode2/articles diff --git a/reference/dot-rxWithWd.html b/reference/dot-rxWithWd.html index ee03ed7ec..f6da3282e 100644 --- a/reference/dot-rxWithWd.html +++ b/reference/dot-rxWithWd.html @@ -162,7 +162,7 @@

    Examples.rxWithWd(tempdir(), { getwd() }) -#> [1] "/tmp/RtmpSPRppR" +#> [1] "/tmp/RtmpPXkf2x" getwd() #> [1] "/home/runner/work/rxode2/rxode2/docs/reference" diff --git a/reference/myapp/mod1.d/704a78003b911881e13e3865d8be8e09.md5 b/reference/myapp/mod1.d/704a78003b911881e13e3865d8be8e09.md5 new file mode 100644 index 000000000..8a5809ff2 --- /dev/null +++ b/reference/myapp/mod1.d/704a78003b911881e13e3865d8be8e09.md5 @@ -0,0 +1 @@ +rxode2 diff --git a/reference/myapp/mod1.d/mod1_.c b/reference/myapp/mod1.d/mod1_.c index d247a98e6..71afc86f5 100644 --- a/reference/myapp/mod1.d/mod1_.c +++ b/reference/myapp/mod1.d/mod1_.c @@ -1,119 +1,119 @@ -#define _getRxSolve_ _rxmod1_6b475db22b3a2d25441a4322fa9c2aef0 -#define _evalUdf _rxmod1_6b475db22b3a2d25441a4322fa9c2aef1 -#define _solveData _rxmod1_6b475db22b3a2d25441a4322fa9c2aef2 -#define _assign_ptr _rxmod1_6b475db22b3a2d25441a4322fa9c2aef3 -#define _rxRmModelLib _rxmod1_6b475db22b3a2d25441a4322fa9c2aef4 -#define _rxGetModelLib _rxmod1_6b475db22b3a2d25441a4322fa9c2aef5 -#define _old_c _rxmod1_6b475db22b3a2d25441a4322fa9c2aef6 -#define _ptrid _rxmod1_6b475db22b3a2d25441a4322fa9c2aef7 -#define _rxIsCurrentC _rxmod1_6b475db22b3a2d25441a4322fa9c2aef8 -#define _sumPS _rxmod1_6b475db22b3a2d25441a4322fa9c2aef9 -#define _prodPS _rxmod1_6b475db22b3a2d25441a4322fa9c2aef10 -#define _prodType _rxmod1_6b475db22b3a2d25441a4322fa9c2aef11 -#define _sumType _rxmod1_6b475db22b3a2d25441a4322fa9c2aef12 -#define _update_par_ptr _rxmod1_6b475db22b3a2d25441a4322fa9c2aef13 -#define _getParCov _rxmod1_6b475db22b3a2d25441a4322fa9c2aef14 -#define _rxode2_rxAssignPtr _rxmod1_6b475db22b3a2d25441a4322fa9c2aef15 -#define _rxQr _rxmod1_6b475db22b3a2d25441a4322fa9c2aef16 -#define _compareFactorVal _rxmod1_6b475db22b3a2d25441a4322fa9c2aef17 -#define _sum _rxmod1_6b475db22b3a2d25441a4322fa9c2aef18 -#define _udf _rxmod1_6b475db22b3a2d25441a4322fa9c2aef19 -#define _sign _rxmod1_6b475db22b3a2d25441a4322fa9c2aef20 -#define _prod _rxmod1_6b475db22b3a2d25441a4322fa9c2aef21 -#define _max _rxmod1_6b475db22b3a2d25441a4322fa9c2aef22 -#define _min _rxmod1_6b475db22b3a2d25441a4322fa9c2aef23 -#define _transit4P _rxmod1_6b475db22b3a2d25441a4322fa9c2aef24 -#define _transit3P _rxmod1_6b475db22b3a2d25441a4322fa9c2aef25 -#define _assignFuns0 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef26 -#define _assignFuns _rxmod1_6b475db22b3a2d25441a4322fa9c2aef27 -#define _rxord _rxmod1_6b475db22b3a2d25441a4322fa9c2aef28 -#define __assignFuns2 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef29 -#define _llikCauchyDscale _rxmod1_6b475db22b3a2d25441a4322fa9c2aef30 -#define _llikCauchyDlocation _rxmod1_6b475db22b3a2d25441a4322fa9c2aef31 -#define _llikCauchy _rxmod1_6b475db22b3a2d25441a4322fa9c2aef32 -#define _llikGammaDrate _rxmod1_6b475db22b3a2d25441a4322fa9c2aef33 -#define _llikGammaDshape _rxmod1_6b475db22b3a2d25441a4322fa9c2aef34 -#define _llikGamma _rxmod1_6b475db22b3a2d25441a4322fa9c2aef35 -#define _llikWeibullDscale _rxmod1_6b475db22b3a2d25441a4322fa9c2aef36 -#define _llikWeibullDshape _rxmod1_6b475db22b3a2d25441a4322fa9c2aef37 -#define _llikWeibull _rxmod1_6b475db22b3a2d25441a4322fa9c2aef38 -#define _llikUnifDbeta _rxmod1_6b475db22b3a2d25441a4322fa9c2aef39 -#define _llikUnifDalpha _rxmod1_6b475db22b3a2d25441a4322fa9c2aef40 -#define _llikUnif _rxmod1_6b475db22b3a2d25441a4322fa9c2aef41 -#define _llikGeomDp _rxmod1_6b475db22b3a2d25441a4322fa9c2aef42 -#define _llikGeom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef43 -#define _llikFDdf2 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef44 -#define _llikFDdf1 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef45 -#define _llikF _rxmod1_6b475db22b3a2d25441a4322fa9c2aef46 -#define _llikExpDrate _rxmod1_6b475db22b3a2d25441a4322fa9c2aef47 -#define _llikExp _rxmod1_6b475db22b3a2d25441a4322fa9c2aef48 -#define _llikChisqDdf _rxmod1_6b475db22b3a2d25441a4322fa9c2aef49 -#define _llikChisq _rxmod1_6b475db22b3a2d25441a4322fa9c2aef50 -#define _llikTDsd _rxmod1_6b475db22b3a2d25441a4322fa9c2aef51 -#define _llikTDmean _rxmod1_6b475db22b3a2d25441a4322fa9c2aef52 -#define _llikTDdf _rxmod1_6b475db22b3a2d25441a4322fa9c2aef53 -#define _llikT _rxmod1_6b475db22b3a2d25441a4322fa9c2aef54 -#define _llikBetaDshape2 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef55 -#define _llikBetaDshape1 _rxmod1_6b475db22b3a2d25441a4322fa9c2aef56 -#define _llikBeta _rxmod1_6b475db22b3a2d25441a4322fa9c2aef57 -#define _llikNbinomMuDmu _rxmod1_6b475db22b3a2d25441a4322fa9c2aef58 -#define _llikNbinomMu _rxmod1_6b475db22b3a2d25441a4322fa9c2aef59 -#define _llikNbinomDprob _rxmod1_6b475db22b3a2d25441a4322fa9c2aef60 -#define _llikNbinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef61 -#define _llikBinomDprob _rxmod1_6b475db22b3a2d25441a4322fa9c2aef62 -#define _llikBinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef63 -#define _llikPoisDlambda _rxmod1_6b475db22b3a2d25441a4322fa9c2aef64 -#define _llikPois _rxmod1_6b475db22b3a2d25441a4322fa9c2aef65 -#define _llikNormDsd _rxmod1_6b475db22b3a2d25441a4322fa9c2aef66 -#define _llikNormDmean _rxmod1_6b475db22b3a2d25441a4322fa9c2aef67 -#define _llikNorm _rxmod1_6b475db22b3a2d25441a4322fa9c2aef68 -#define simeps _rxmod1_6b475db22b3a2d25441a4322fa9c2aef69 -#define simeta _rxmod1_6b475db22b3a2d25441a4322fa9c2aef70 -#define expit _rxmod1_6b475db22b3a2d25441a4322fa9c2aef71 -#define logit _rxmod1_6b475db22b3a2d25441a4322fa9c2aef72 -#define gammapDer _rxmod1_6b475db22b3a2d25441a4322fa9c2aef73 -#define lowergamma _rxmod1_6b475db22b3a2d25441a4322fa9c2aef74 -#define uppergamma _rxmod1_6b475db22b3a2d25441a4322fa9c2aef75 -#define gammaqInva _rxmod1_6b475db22b3a2d25441a4322fa9c2aef76 -#define gammaqInv _rxmod1_6b475db22b3a2d25441a4322fa9c2aef77 -#define gammapInva _rxmod1_6b475db22b3a2d25441a4322fa9c2aef78 -#define gammapInv _rxmod1_6b475db22b3a2d25441a4322fa9c2aef79 -#define gammaq _rxmod1_6b475db22b3a2d25441a4322fa9c2aef80 -#define gammap _rxmod1_6b475db22b3a2d25441a4322fa9c2aef81 -#define phi _rxmod1_6b475db22b3a2d25441a4322fa9c2aef82 -#define riweibull _rxmod1_6b475db22b3a2d25441a4322fa9c2aef83 -#define riunif _rxmod1_6b475db22b3a2d25441a4322fa9c2aef84 -#define rit_ _rxmod1_6b475db22b3a2d25441a4322fa9c2aef85 -#define ripois _rxmod1_6b475db22b3a2d25441a4322fa9c2aef86 -#define ribeta _rxmod1_6b475db22b3a2d25441a4322fa9c2aef87 -#define rigamma _rxmod1_6b475db22b3a2d25441a4322fa9c2aef88 -#define rigeom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef89 -#define rif _rxmod1_6b475db22b3a2d25441a4322fa9c2aef90 -#define riexp _rxmod1_6b475db22b3a2d25441a4322fa9c2aef91 -#define richisq _rxmod1_6b475db22b3a2d25441a4322fa9c2aef92 -#define ricauchy _rxmod1_6b475db22b3a2d25441a4322fa9c2aef93 -#define rinbinomMu _rxmod1_6b475db22b3a2d25441a4322fa9c2aef94 -#define rinbinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef95 -#define ribinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef96 -#define rinorm _rxmod1_6b475db22b3a2d25441a4322fa9c2aef97 -#define rxweibull _rxmod1_6b475db22b3a2d25441a4322fa9c2aef98 -#define rxunif _rxmod1_6b475db22b3a2d25441a4322fa9c2aef99 -#define rxt_ _rxmod1_6b475db22b3a2d25441a4322fa9c2aef100 -#define rxpois _rxmod1_6b475db22b3a2d25441a4322fa9c2aef101 -#define rxbeta _rxmod1_6b475db22b3a2d25441a4322fa9c2aef102 -#define rxgamma _rxmod1_6b475db22b3a2d25441a4322fa9c2aef103 -#define rxgeom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef104 -#define rxf _rxmod1_6b475db22b3a2d25441a4322fa9c2aef105 -#define rxexp _rxmod1_6b475db22b3a2d25441a4322fa9c2aef106 -#define rxchisq _rxmod1_6b475db22b3a2d25441a4322fa9c2aef107 -#define rxcauchy _rxmod1_6b475db22b3a2d25441a4322fa9c2aef108 -#define rxnbinomMu _rxmod1_6b475db22b3a2d25441a4322fa9c2aef109 -#define rxnbinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef110 -#define rxbinom _rxmod1_6b475db22b3a2d25441a4322fa9c2aef111 -#define rxnorm _rxmod1_6b475db22b3a2d25441a4322fa9c2aef112 -#define linCmtC _rxmod1_6b475db22b3a2d25441a4322fa9c2aef113 -#define linCmtB _rxmod1_6b475db22b3a2d25441a4322fa9c2aef114 -#define linCmtA _rxmod1_6b475db22b3a2d25441a4322fa9c2aef115 +#define _getRxSolve_ _rxmod1_00d345ccfacba45976fe2f0b96dc54f90 +#define _evalUdf _rxmod1_00d345ccfacba45976fe2f0b96dc54f91 +#define _solveData _rxmod1_00d345ccfacba45976fe2f0b96dc54f92 +#define _assign_ptr _rxmod1_00d345ccfacba45976fe2f0b96dc54f93 +#define _rxRmModelLib _rxmod1_00d345ccfacba45976fe2f0b96dc54f94 +#define _rxGetModelLib _rxmod1_00d345ccfacba45976fe2f0b96dc54f95 +#define _old_c _rxmod1_00d345ccfacba45976fe2f0b96dc54f96 +#define _ptrid _rxmod1_00d345ccfacba45976fe2f0b96dc54f97 +#define _rxIsCurrentC _rxmod1_00d345ccfacba45976fe2f0b96dc54f98 +#define _sumPS _rxmod1_00d345ccfacba45976fe2f0b96dc54f99 +#define _prodPS _rxmod1_00d345ccfacba45976fe2f0b96dc54f910 +#define _prodType _rxmod1_00d345ccfacba45976fe2f0b96dc54f911 +#define _sumType _rxmod1_00d345ccfacba45976fe2f0b96dc54f912 +#define _update_par_ptr _rxmod1_00d345ccfacba45976fe2f0b96dc54f913 +#define _getParCov _rxmod1_00d345ccfacba45976fe2f0b96dc54f914 +#define _rxode2_rxAssignPtr _rxmod1_00d345ccfacba45976fe2f0b96dc54f915 +#define _rxQr _rxmod1_00d345ccfacba45976fe2f0b96dc54f916 +#define _compareFactorVal _rxmod1_00d345ccfacba45976fe2f0b96dc54f917 +#define _sum _rxmod1_00d345ccfacba45976fe2f0b96dc54f918 +#define _udf _rxmod1_00d345ccfacba45976fe2f0b96dc54f919 +#define _sign _rxmod1_00d345ccfacba45976fe2f0b96dc54f920 +#define _prod _rxmod1_00d345ccfacba45976fe2f0b96dc54f921 +#define _max _rxmod1_00d345ccfacba45976fe2f0b96dc54f922 +#define _min _rxmod1_00d345ccfacba45976fe2f0b96dc54f923 +#define _transit4P _rxmod1_00d345ccfacba45976fe2f0b96dc54f924 +#define _transit3P _rxmod1_00d345ccfacba45976fe2f0b96dc54f925 +#define _assignFuns0 _rxmod1_00d345ccfacba45976fe2f0b96dc54f926 +#define _assignFuns _rxmod1_00d345ccfacba45976fe2f0b96dc54f927 +#define _rxord _rxmod1_00d345ccfacba45976fe2f0b96dc54f928 +#define __assignFuns2 _rxmod1_00d345ccfacba45976fe2f0b96dc54f929 +#define _llikCauchyDscale _rxmod1_00d345ccfacba45976fe2f0b96dc54f930 +#define _llikCauchyDlocation _rxmod1_00d345ccfacba45976fe2f0b96dc54f931 +#define _llikCauchy _rxmod1_00d345ccfacba45976fe2f0b96dc54f932 +#define _llikGammaDrate _rxmod1_00d345ccfacba45976fe2f0b96dc54f933 +#define _llikGammaDshape _rxmod1_00d345ccfacba45976fe2f0b96dc54f934 +#define _llikGamma _rxmod1_00d345ccfacba45976fe2f0b96dc54f935 +#define _llikWeibullDscale _rxmod1_00d345ccfacba45976fe2f0b96dc54f936 +#define _llikWeibullDshape _rxmod1_00d345ccfacba45976fe2f0b96dc54f937 +#define _llikWeibull _rxmod1_00d345ccfacba45976fe2f0b96dc54f938 +#define _llikUnifDbeta _rxmod1_00d345ccfacba45976fe2f0b96dc54f939 +#define _llikUnifDalpha _rxmod1_00d345ccfacba45976fe2f0b96dc54f940 +#define _llikUnif _rxmod1_00d345ccfacba45976fe2f0b96dc54f941 +#define _llikGeomDp _rxmod1_00d345ccfacba45976fe2f0b96dc54f942 +#define _llikGeom _rxmod1_00d345ccfacba45976fe2f0b96dc54f943 +#define _llikFDdf2 _rxmod1_00d345ccfacba45976fe2f0b96dc54f944 +#define _llikFDdf1 _rxmod1_00d345ccfacba45976fe2f0b96dc54f945 +#define _llikF _rxmod1_00d345ccfacba45976fe2f0b96dc54f946 +#define _llikExpDrate _rxmod1_00d345ccfacba45976fe2f0b96dc54f947 +#define _llikExp _rxmod1_00d345ccfacba45976fe2f0b96dc54f948 +#define _llikChisqDdf _rxmod1_00d345ccfacba45976fe2f0b96dc54f949 +#define _llikChisq _rxmod1_00d345ccfacba45976fe2f0b96dc54f950 +#define _llikTDsd _rxmod1_00d345ccfacba45976fe2f0b96dc54f951 +#define _llikTDmean _rxmod1_00d345ccfacba45976fe2f0b96dc54f952 +#define _llikTDdf _rxmod1_00d345ccfacba45976fe2f0b96dc54f953 +#define _llikT _rxmod1_00d345ccfacba45976fe2f0b96dc54f954 +#define _llikBetaDshape2 _rxmod1_00d345ccfacba45976fe2f0b96dc54f955 +#define _llikBetaDshape1 _rxmod1_00d345ccfacba45976fe2f0b96dc54f956 +#define _llikBeta _rxmod1_00d345ccfacba45976fe2f0b96dc54f957 +#define _llikNbinomMuDmu _rxmod1_00d345ccfacba45976fe2f0b96dc54f958 +#define _llikNbinomMu _rxmod1_00d345ccfacba45976fe2f0b96dc54f959 +#define _llikNbinomDprob _rxmod1_00d345ccfacba45976fe2f0b96dc54f960 +#define _llikNbinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f961 +#define _llikBinomDprob _rxmod1_00d345ccfacba45976fe2f0b96dc54f962 +#define _llikBinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f963 +#define _llikPoisDlambda _rxmod1_00d345ccfacba45976fe2f0b96dc54f964 +#define _llikPois _rxmod1_00d345ccfacba45976fe2f0b96dc54f965 +#define _llikNormDsd _rxmod1_00d345ccfacba45976fe2f0b96dc54f966 +#define _llikNormDmean _rxmod1_00d345ccfacba45976fe2f0b96dc54f967 +#define _llikNorm _rxmod1_00d345ccfacba45976fe2f0b96dc54f968 +#define simeps _rxmod1_00d345ccfacba45976fe2f0b96dc54f969 +#define simeta _rxmod1_00d345ccfacba45976fe2f0b96dc54f970 +#define expit _rxmod1_00d345ccfacba45976fe2f0b96dc54f971 +#define logit _rxmod1_00d345ccfacba45976fe2f0b96dc54f972 +#define gammapDer _rxmod1_00d345ccfacba45976fe2f0b96dc54f973 +#define lowergamma _rxmod1_00d345ccfacba45976fe2f0b96dc54f974 +#define uppergamma _rxmod1_00d345ccfacba45976fe2f0b96dc54f975 +#define gammaqInva _rxmod1_00d345ccfacba45976fe2f0b96dc54f976 +#define gammaqInv _rxmod1_00d345ccfacba45976fe2f0b96dc54f977 +#define gammapInva _rxmod1_00d345ccfacba45976fe2f0b96dc54f978 +#define gammapInv _rxmod1_00d345ccfacba45976fe2f0b96dc54f979 +#define gammaq _rxmod1_00d345ccfacba45976fe2f0b96dc54f980 +#define gammap _rxmod1_00d345ccfacba45976fe2f0b96dc54f981 +#define phi _rxmod1_00d345ccfacba45976fe2f0b96dc54f982 +#define riweibull _rxmod1_00d345ccfacba45976fe2f0b96dc54f983 +#define riunif _rxmod1_00d345ccfacba45976fe2f0b96dc54f984 +#define rit_ _rxmod1_00d345ccfacba45976fe2f0b96dc54f985 +#define ripois _rxmod1_00d345ccfacba45976fe2f0b96dc54f986 +#define ribeta _rxmod1_00d345ccfacba45976fe2f0b96dc54f987 +#define rigamma _rxmod1_00d345ccfacba45976fe2f0b96dc54f988 +#define rigeom _rxmod1_00d345ccfacba45976fe2f0b96dc54f989 +#define rif _rxmod1_00d345ccfacba45976fe2f0b96dc54f990 +#define riexp _rxmod1_00d345ccfacba45976fe2f0b96dc54f991 +#define richisq _rxmod1_00d345ccfacba45976fe2f0b96dc54f992 +#define ricauchy _rxmod1_00d345ccfacba45976fe2f0b96dc54f993 +#define rinbinomMu _rxmod1_00d345ccfacba45976fe2f0b96dc54f994 +#define rinbinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f995 +#define ribinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f996 +#define rinorm _rxmod1_00d345ccfacba45976fe2f0b96dc54f997 +#define rxweibull _rxmod1_00d345ccfacba45976fe2f0b96dc54f998 +#define rxunif _rxmod1_00d345ccfacba45976fe2f0b96dc54f999 +#define rxt_ _rxmod1_00d345ccfacba45976fe2f0b96dc54f9100 +#define rxpois _rxmod1_00d345ccfacba45976fe2f0b96dc54f9101 +#define rxbeta _rxmod1_00d345ccfacba45976fe2f0b96dc54f9102 +#define rxgamma _rxmod1_00d345ccfacba45976fe2f0b96dc54f9103 +#define rxgeom _rxmod1_00d345ccfacba45976fe2f0b96dc54f9104 +#define rxf _rxmod1_00d345ccfacba45976fe2f0b96dc54f9105 +#define rxexp _rxmod1_00d345ccfacba45976fe2f0b96dc54f9106 +#define rxchisq _rxmod1_00d345ccfacba45976fe2f0b96dc54f9107 +#define rxcauchy _rxmod1_00d345ccfacba45976fe2f0b96dc54f9108 +#define rxnbinomMu _rxmod1_00d345ccfacba45976fe2f0b96dc54f9109 +#define rxnbinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f9110 +#define rxbinom _rxmod1_00d345ccfacba45976fe2f0b96dc54f9111 +#define rxnorm _rxmod1_00d345ccfacba45976fe2f0b96dc54f9112 +#define linCmtC _rxmod1_00d345ccfacba45976fe2f0b96dc54f9113 +#define linCmtB _rxmod1_00d345ccfacba45976fe2f0b96dc54f9114 +#define linCmtA _rxmod1_00d345ccfacba45976fe2f0b96dc54f9115 #include #define __MAX_PROD__ 0 #define _CMT CMT @@ -684,7 +684,7 @@ extern SEXP mod1__model_vars(void){ SEXP _mv = PROTECT(_rxGetModelLib("mod1__model_vars"));pro++; if (!_rxIsCurrentC(_mv)){ SEXP hash = PROTECT(allocVector(STRSXP, 1));pro++; -#define __doBuf__ snprintf(buf, __doBufN__, "un]\"BAAA@QRtHACAAAAAAAjnzAAAv7#aT)^XQ$MAI<8a=W6xYB]a`D57AeqxLOA26CsgiJ^H207;*5%%*m+~,842+[*<5ciWi@^i,T~)B07BY57jwL,1mJt,A_CCaj$91>uDm>/0s7IiP(U=]j+R9=mX|N3Z2t%%_PtW2[:{Z+0E6VoFy(${51UShkVW@}3r(Ir/&v4H+y_]p_15QnR^^>hV;!\"5rLJw@1z8\"O.Mqhk&M/&2z>n0fs*b:t\"Ew+gzU,)mTdMOQkl34Z5nrvpu\"S)k;W+U]a_)rufJ.2ZB),KLJ0v(v@C!uMeK4cGU!R01xp=zaNqh`,~Es*\"L:,hzBFuv\?MHEkt/M5gir7qC.4]n\"F*aEy1@s(oovyh;pg9.nn6D5+>790PU}Z7@DFL)&4/#=|d]G8\"]X3uE!+.3VY2x$k%%/l57CoSFZvg6:l&5D]|~+_2L|PGuB#rdO>3hs{^+EMFdydmsN,UX0nj@KXV9^6\?\?)gQ/_gSy7^>\"^O4;9^`Oun62OrLp*frQWmg,%%P{E

    )QM[_V&#R[0V&b@1^&nks~q*k%%IwfI2/06/oh7SHR`jxx\"IBb7Nc;MAm\"2OAe!tIA&wqHpIH7pzB|rU3B5kI\"[]i}[AAn0.0=FhFEZT)oTfNu*)H{a.a=Jxke6&HPW|*Vf}4vW%%O9o464BRGMDHajjLlRm,B@f8l/mtRsmE*U~GS|m<9ZNrg@!uLmCr;,hJt,A_CCaj$Cw!uDm>/0s7IS#i3n{:o3;mT5r1.6xo%%{Z\"sQ/4^anOJZr@KM\"${51UShkVW@}3rDIr/&vCJjZ|SVq//eI2pqn#3m<\"c)yauV2z8#P.Mqhk&M/&2z>n0fs*bh)l=CzL@eMYuD#DXh[\?1|c`L5gRRTVMoeOQwRR=T9RN!~;fz.j:%%K>;vtUhjR\?c\"H^nzZ@24Gxz6:a9t2%%SKqS{l:MNAF%%uGATl)n77O6OS|W,FSTHoT_P6(A=\"U\"P\?qhOlq~,:*9YGEs4i9>u8EsO;0F|FuQ;=O$XeOpM;QL%%;UC=N\?:x_Z9d^(DbjGuLCXE8kDXPonXa>Sed|#>ITV*anrC\"9G&k<~PI&y0W1WI+r72>Ip2e&x`@kF`/so>OvPNwTvfnm3ru3\?^\"L;\?U{N%%:OzCB}1#RiTHj)t2{cXl_3jt7eKs+X.lC$_&#G`~~88k2(qv8>.M[9N@CFO:Ob%%O\"V1^Cb*o[iyIo0/l={~:)Te.0VzU[8>=>1%%iw;\"/=r`m_`$!E{bz]w0`&qUJ1ZJTUhj6sNoh$i@jF6U9dJxI}R+YtEuNpIH7pzB|rU3B5kI\"[]i}[AAn0.0=FhFEZT)oTfNu*)H{a.a=Jxke6&HPW|*Vf}4vW%%O9o464BRGMDHajjLlRm,B5U\?QN(B"); char buf[1060]; #define __doBufN__ 1060 __doBuf__ diff --git a/reference/myapp/mod1.d/mod1_.o b/reference/myapp/mod1.d/mod1_.o index d1a119180fec3953e60b76d6649a00d170bef8f6..cda87e1a6f7f0890604d3d7989c9769349ad280d 100644 GIT binary patch delta 21287 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 DBBG%z delta 21322 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 RrxCwb>1SZa{eJfQ$M5x`^Qx|T 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 YCCa(1`4jt@(%-+6Q-0Ty!1Ad5Uyshhh5!Hn literal 90360 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 diff --git a/reference/myapp/rx_shiny_data.rda b/reference/myapp/rx_shiny_data.rda index 446e0f833d6d9b32e823b366a06c09e3975e8902..b847a70661c045937073ee16bdf50629d3410f33 100644 GIT binary patch delta 5433 zcmV-96~^kCHlmLokT~3{Pl!g8w=2DCM3!zCC+IlCo*=l9IAg z3EZ=Hq@4Zli(|wMBjh1R%}%V!5NC`|KfWZC(ApV zwrgIEJMe zmClyh?N)!FC=}hlttqa}(5&yArUvRoll-DyyP+AD=Tx57u9xfcH@b#nR-VpZFY6WE zJEt36+dF?__TJJ3{}BiKInLi8p|kas3-#LUL-6k+_(w8BQs-|x#8D*FXf{Dk)0(|! z_q+?|sE|Ts`8NN9N>&-3S^KxLk2PJbdWosU7yEsS;Dd3F66~;Em3MmX! z7R%!ulGYa!=}OIByKP#8PTr3rk!AFzZ|Nj{KMK**wzl?}s&PWw>n;wRL7^SkerwNF zhlGFcL*d@K;i=JrOv_|4!=l&PuC0@lhocNc;@(4Xpu9ELZa+61bko(KoDX6tT80-( zb%-w8Y|up%P}FUrAn0{PZAB~cNcD_plI5Ngt$xQdJ4Up!s_U99>vqo~jZj44_ish1 z-?jAHNPYMBu~HD(76HEsRAnOmP)PYM=(T_5CeaZ}s6|GcMMjY2mw{_OE2f3(x1W<$!d8hqll!z3+Fa_-Z=(#MUQ_0j>Q(%9X5I6;?zKv#1uTDK zuc2smr((4`=B7jJN*5>>k%_ETuQZ!gwbraIR*jl|rEz8PQlnwis=C^&HH^y)pQOwJ z&=}XWgTd7S?M%eq(HE)OY-bGhtDT~nfcH!{5&S!Zn+Cp5;V_am`0Mxkzh;6`9C1t$ z)-0_&AF$VPadb3J|)l1>GKPVn$}dchPtqL_41{rQESdM zu3pl$#f2u(B-yyCRrSjYH65g!yQJ3^fnr=%=NpTcFX?kv8jA_)Uu>FfV-0_50q*y{ z!s%;)UPN*o3C2v-Q9ER0$b>^;&h^5vCFeP6Fnr`XR3FQLp)nY6oB9@cc8wtYlut$(bxn$g<>uHS#QC>fSu$+1fYN1yMz|%Xi;dTwZR}OMWNL`XVV{yojUjck20el7U6~I>-8~7ez(G(x+&craTqA1|@ zJFG}=!yv3U1>B2{;2t7_>x_g}mf<^GdC%i~u-0VN8NUA(D}u&KbN0-FkKDzK@*raQu>k?89?SO{fE5flR|E=Bt$>m@?PM-(8>m8Nbw zfnw0cG}p8pEf5~a@=l(M~wrUp5(ssm)jZ*SsJ z5_9#y6e3dtA8PM``M@DMUfMfTfJg%t6(SNQZw&D=zDbJj1H|21z^Ht8HXJB5&%6^f z9v zG^&;C{`(!PcWwVB=i0qMqN&kce-#WDZ_CFOR6jl zmejsz{AqtSekvM&hK-+&#-C*>a*lbAG&^9P-+UK%)g9W_`=x}gV>Y8qyiYSVXs|gT z?Vj|Cn(W#=M`QaZDSJj5EV#F%!Gb%O&>AH;tprmN-%XY)8AZEoCJq}#&2G2Vu1n(S zDsd&m)@@LGACmYy7Xd6$+Pn(F7JuVJ0LTmqGVqbb11{voFJR_!vr$ya)^e4QY4 zvp5f(4;wZ%m>9LMF?(!$%z&kE4}=+VRDGwUI7Ec?JBbM&$9$ck+9QwYpbr61uOsw| z3G{#H{8^m8fZos0`N?$fFiv|H=Swqri|E}STEYE%Uy4u5h)kHjvE)N&7GK5*?S$@( z#2GeHc+@9_P7N<~M@+zmEOD5L8C94NGB^pX*(dExYo?^_YYkpXC0cV)Xw5d5NMY~* z8+1RuAK)-Y8~3kq+$0p}Eoo;8bP&DI()oV}4Esu-$~UQD|8*-!;4ha1En`oWJcITS>)ysds zZE2c(?n$F(c|EyWRTh-F*=o;!t$tpsDRT?waqw3!zr;Sz(46@$BxFsUm@m*UsSQYQ z_U_4w-SsMuDhn`crENCAvuSDVo^G6!XO}-(zIF4-9a#n`D?Qh#v~2+JNdg%B@x1I) ziLDo}c}AyOSuq=q>THo^Z7!XaspLlU(CsdZS!k8;p-!?Y@oVtM_qW+Qq3OY^CPn}y?dazW#7rfr~ zA7UrAD7w*PoqeR3QxIq#AL)NYJ9-4&5-%U-=p7`~H{Pg6YCWS+-ET#8Ju#gT(-|?H z!3JDRXWpohPfTaTbjH^bF`a?A#B?U$bXULqjqY+-#tV=@icK;o2#ai3jiLOmFHE2K zLiOsU=H*(odim1g!WxTY(~2pfO=qeTGATYAk|LvYo(m`_prC+)0t$Z$C@2XinD9(D z5&RQSkaHJMP(Z;r6wE8A8IfKb#i6I1&9z}7Prx##N6AX^o*yYOWi)3;%D`CGF*1ei zUKuG<%tl`rDH}a7jMfH}wI7YM7$lessQci+p z&W)5h1U#b&kU~YH6%cl{Q;P8p#@G`Jy|LZl9vI+xN-A z0Ac|{EMSNQjBnY%DHbruGr5Ze46%TL-oye18V$t)#o)5p_;yf$lAJfM+;Qw) zm&qzIsSc1jz|(+lS??UF{J;teesTpdl@gT5R|avpX0#kP(Qw(Ac}v)U*{+RgR7Vb`NAI@$n`lh zggk}x!Sg=+oTkE_;OB$Pj3YXw0`)TBVdtczQK>&2M0FZgp%W-tdR*eq1`#j%gqL@7 zBc-HoSx+o1u)_@ zk!u^x#H4T|IQ>#zO!&owUrhKh#1#|%JvYoF<|HxU zC*l(memshZ3BQ=|@5Ko}^U+3kqqXYw{Jxg7GnRi>{F;Rd#`v@uTraIMngD(j9*7p? z=x%iNHy6#XvdQp5NAwts7wm$`!gk;`v+3z~ICKPEHize0|A#n>q{|~!l_J}iFvVlC zwVAME8lh5vDC3V+Elwt62qsyD9WOb}H2JY6WGIK0pS1l7*G3|Q%V=DsiihnT7%mjM z6n%fa8GVIKl&46hU}e*cOAoTC}Ct#fWfO_yR6)kl9%8FM)()mL*rzs3$+9iFpl4nbI^KQ@0YCfN}*pLI6Z+;!91T7zI%abg*Bz}k2& z26G&MhW@_y-{dJ`@E#b=U&6m%eYpHCx}Qc2 zeCYf#!V`yvxbdVgu(wP%d%Xr$&*bGFnU}2Qsi~271FX*W)LLO%XQ`_WllQRZ`LCC~o+8`4*U~SWUAPdVPE=n){p9e_!j6 z#~s4i(Vu5A;=i{Jj23sQfrs*_?Vznq)H*RvToJoD1qg#GDNP5#Uyj4qqrMa~mF%MU z2jn?0Q_iLoE|b3sQ-8wi1e-dK3^Ws3ayFN@tQGV_m6*im{U~#klb^pwMWp;2oD6o$ z_c?9wnl8xVr$hEsrl{x8%0Pe&rZcANxe~YW{v6*+Yy$@^(lQ9piKryr&V#IV`;>q< zteYIs!|+dVmC^}Ss`WVqA3uA_pH`ohO;@&Txoul5!;#%yw;c;+ss^5D&GWP^CTs<& zSH91Q3TDS>1tF+)O{prAm=QQ9y%9W}$V}vO+D#{6{y`u#&FFIIP{o^b&j@q~*Wa-3BUk}EX6g;Yp7f)gB6PlYrNjdexZYk+m$844(%aPGUvjjj zndB^&*E-$%Ee9Beq!i)Af$^h4lSTd>4V8%|`Xc7yIoT;PEJJ5`+2&U&Y!g1+h0Y$f z7mz1D)nZWRf7T!WUIgx%In;w=aFqdjRfndY6%yC^j#S?Uicf?|tQ_64Is zUyPA9lJ6CYH|12kQdh88QBuee?`{}h{tGcNyiA1}wH zq+K6lV&h#*6|^;{nHhGd3QC^NVnPkpu=67*t?Tfk6cZ9X^H%3@Ql> zDlq6IF{p5Uk$!*w&Mz>*k0!L;`s0Mnh_Kxos%tP|)9}+%*kW#1)u?^ps7Qn3a+n>r z?@~p6Nj?7se%3jAk&!)|`iT*-D4wK#-LhgSd*AM~GNT-XSC<@pcL! zsej~cFJ^y~&ht?iCIehBHVrzkiQR>zw$>wG&5wJg*Eld06ZMnaC5Q)itpJUD+)diDRXgvhG7@Bje-Hg{gS delta 5416 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 S`GeBy{|9^*f6=+{0ssKP4|qiY diff --git a/reference/rxCombineErrorLines.html b/reference/rxCombineErrorLines.html index d003e17ba..f034b8ff2 100644 --- a/reference/rxCombineErrorLines.html +++ b/reference/rxCombineErrorLines.html @@ -383,7 +383,7 @@

    Examples#> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ -#> rxode2 2.1.3 model named rx_be0b5dbb4a0767d8702ddb24bbc603bc model ( ready). +#> rxode2 2.1.3 model named rx_8d950c43531f6895b2b69a6751925bb9 model ( ready). #> $state: depot, gut, center, effect #> $stateExtra: cp #> $params: tktr, tka, tcl, tv, prop.err, pkadd.err, temax, tec50, tkout, te0, pdadd.err, eta.ktr, eta.ka, eta.cl, eta.v, eta.emax, eta.ec50, eta.kout, eta.e0, CMT, rxerr.cp, rxerr.effect diff --git a/reference/rxExpandGrid.html b/reference/rxExpandGrid.html index ad8c0289d..20b41c813 100644 --- a/reference/rxExpandGrid.html +++ b/reference/rxExpandGrid.html @@ -859,12 +859,12 @@

    Examples# \donttest{ microbenchmark::microbenchmark(rxExpandGrid(letters, letters), expand.grid.jc(letters, letters)) #> Unit: microseconds -#> expr min lq mean median uq -#> rxExpandGrid(letters, letters) 10.80 11.1305 45.96206 11.3510 11.602 -#> expand.grid.jc(letters, letters) 16.07 16.7410 193.97223 17.8285 18.640 -#> max neval -#> 3295.638 100 -#> 4231.945 100 +#> expr min lq mean median uq max +#> rxExpandGrid(letters, letters) 10.61 11.121 30.09082 11.412 11.772 1713.883 +#> expand.grid.jc(letters, letters) 16.37 17.312 210.03084 17.994 18.740 5885.897 +#> neval +#> 100 +#> 100 # }

    diff --git a/search.json b/search.json index 1b0a79558..b821a5c43 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"user-defined-functions","dir":"Articles","previous_headings":"","what":"User Defined Functions","title":"Integrating User Defined Functions into rxode2","text":"defining models may wished write small R function make function integrate rxode2 somehow. article discusses 2 ways : R-based user function can loaded simple function certain circumstances translated C run efficiently C function define integrate code","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()`"},{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"r-based-user-functions","dir":"Articles","previous_headings":"","what":"R based user functions","title":"Integrating User Defined Functions into rxode2","text":"R-based user function convenient include ODE, slower done written C , C++ compiled language. requested github appropriate example; However, use simple example simply illustrate concepts. Now ODE compiled R functions called solving ODE. Since calling R, forces parallization turned since R single-threaded. also takes time solve since shuttling back forth R C. Lets see simple function performs: terribly bad, even though shuffling R C. can make better converting functions C: C version almost twice fast R version. may noticed conversion also created C versions first derivative. done automatically gives just C versions function, C versions derivatives registers rxode2. allows C versions work rxode2 nlmixr2 models. function setup advance allow type conversion. general derivatives calculated return() statement user defined function. means simply let R return last value instead explictly calling return(). Many people prefer method coding. Even return function, function converted C. github issue, used function convert derivatives: still helpful functions early returns, nlmixr2 models requiring derivatives calculated non-optimized finite differences occurs. gets internals rxode2 nlmixr2 can see easily calculating derivatives: Whereas originally defined function newAbs() use new derivatives calculated well: circumstances, conversion C possible, though can still use R function. requirements R functions integrated rxode2 system: function must set number arguments, variable arguments like f(…) currently allowed. function given argument single number, function return single number requirements met can use R function rxode2. Additional requirements conversion C include: functions use within R function must understood available rxode2. Practically speaking fun2() refers fun1(), fun1() must changed C code available rxode2 changing function fun2() C. functions can include /else assignments simple return statements (either returning value value line ). Special R control structures functions (like lapply) present. function refer package functions mentioned, return() statement present, derivative C functions rxode2’s derivative table updated.","code":"newAbs <- function(x) { if (x < 0) { -x } else { x } } f <- rxode2({ a <- newAbs(time) }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ e <- et(-10, 10, length.out=40) mb1 <- microbenchmark::microbenchmark(withoutC=suppressWarnings(rxSolve(f,e))) library(ggplot2) autoplot(mb1) + rxTheme() # Create C functions automatically with `rxFun()` rxFun(newAbs) #> → finding duplicate expressions in d(newAbs)/d(x)... #> [====|====|====|====|====|====|====|====|====|====] 0:00:00 #> → optimizing duplicate expressions in d(newAbs)/d(x)... #> [====|====|====|====|====|====|====|====|====|====] 0:00:00 #> converted R function 'newAbs' to C (will now use in rxode2) #> converted R function 'rx_newAbs_d_x' to C (will now use in rxode2) #> Added derivative table for 'newAbs' # Recompile to use the C functions # Note it would recompile anyway if you didn't do this step, # it just makes sure that it doesn't recompile every step in # the benchmark f <- rxode2({ a <- newAbs(time) }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ mb2 <- microbenchmark::microbenchmark(withC=rxSolve(f,e, cores=1)) mb <- rbind(mb1, mb2) autoplot(mb) + rxTheme() + xgxr::xgx_scale_y_log10() #> Scale for y is already present. #> Adding another scale for y, which will replace the existing scale. print(mb) #> Unit: milliseconds #> expr min lq mean median uq max neval #> withoutC 6.724595 6.871821 7.296725 6.924844 7.033558 12.172650 100 #> withC 1.979874 2.033378 2.336496 2.132534 2.630452 6.166024 100 # Light f_R <- function(actRad, k_0, a_k) { photfac <- a_k * actRad + k_0 if (photfac > 1) { photfac = 1 } return(photfac) } rxFun(f_R) #> function contains return statement; derivatives not calculated #> converted R function 'f_R' to C (will now use in rxode2) rxFromSE(\"Derivative(f_R(actRad, k_0, a_k),k_0)\") #> [1] \"(f_R(actRad,(k_0)+6.05545445239334e-06,a_k)-f_R(actRad,k_0,a_k))/6.05545445239334e-06\" rxFromSE(\"Derivative(newAbs(x),x)\") #> [1] \"rx_newAbs_d_x(x)\""},{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"c-based-functions","dir":"Articles","previous_headings":"","what":"C based functions","title":"Integrating User Defined Functions into rxode2","text":"can add C functions directly rxode2 well using rxFun(): wanted also use C functions expressions derivatives using rxD() function: Removing function rxRmFun() also remove derivative table:","code":"fun <- \" double fun(double a, double b, double c) { return a*a+b*a+c; } \" ## C-code for function rxFun(\"fun\", c(\"a\", \"b\", \"c\"), fun) rxD(\"fun\", list( function(a, b, c) { # derivative of arg1: a paste0(\"2*\", a, \"+\", b) }, function(a, b, c) { # derivative of arg2: b return(a) }, function(a, b, c) { # derivative of arg3: c return(\"0.0\") } )) rxRmFun(\"fun\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-model","dir":"Articles","previous_headings":"","what":"Modifying model","title":"Modifying Models","text":"tasks might want overall model: Change line model Add line model Rename parameters model Combine different models Create functions add certain model features model go model piping functions can use modify models even add functions modify models. cover model modification functions nlmixr2lib","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-a-model-line","dir":"Articles","previous_headings":"Modifying model","what":"Modifying a model line","title":"Modifying Models","text":"opinion, modifying lines model likely common task modifying model. may wish modify model subject variability add covariate effects. begin course need base model modify. Let’s start simple PK example, using single-dose theophylline dataset generously provided Dr. Robert . Upton University California, San Francisco: believed enough absorption support subject variability can change line drop subject modifying single line. simply type line want model piping expression: expected, line modified. Also can notice initial estimate subject variability dropped since longer part model. reason wanted add back model can modify model add back: modification, eta.ka automatically assumed subject variability parameter. Also since eta.ka mu-referenced rxode2 points . automatic detection eta.ka name follows convention. Parameters starting ending following names assumed subject variability parameters: eta (NONMEM convention) ppv (per patient variability) psv (per subject variability) iiv (inter-individual variability) bsv (subject variability) bpv (patient variability) functioning correctly can change covariate can add type initial estimate later: seen , eta.ka model assumed data-input parameter covariate instead estimated parameter. can also note WT automatically recognized covariate covWt automatically recognized covariate parameter. general covariates typical/population parameters automatically converted estimated parameters based parameter name starting (ending ): tv (typical value) t (also typical value) pop (population parameter) err (error parameter) eff (effect parameter) cov (covariate parameters) notable exceptions parameters like (wt, sex crcl) assumed covariates. don’t want automatic variable conversion, can also use auto=FALSE: case additional parameters (eta.ka, WT, covWt) assumed parameters dataset.","code":"one.compartment <- function() { ini({ tka <- 0.45; label(\"Ka\") tcl <- 1; label(\"Cl\") tv <- 3.45; label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } mod <- one.compartment |> model(ka <- exp(tka)) #> ! remove between subject variability `eta.ka` print(mod) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod2 <- mod |> model(ka <- tka * exp(eta.ka)) #> ℹ add between subject variability `eta.ka` and set estimate to 1 print(mod2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v eta.ka #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.ka 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.ka ~ 1 #> }) #> model({ #> ka <- tka * exp(eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod2 <- mod |> model(ka <- tka * exp(eta.ka) + WT * covWt, cov=\"eta.ka\") #> ℹ add covariate `eta.ka` (as requested by cov option) #> ℹ add covariate `WT` #> ℹ add population parameter `covWt` and set estimate to 1 print(mod2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd covWt #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> covWt <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod3 <- mod |> model(ka <- tka * exp(eta.ka) + WT * covWt, auto=FALSE) #> ℹ add covariate `eta.ka` #> ℹ add covariate `WT` #> ℹ add covariate `covWt` print(mod3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"note-on-automatic-detection-of-variables","dir":"Articles","previous_headings":"Modifying model","what":"Note on automatic detection of variables","title":"Modifying Models","text":"automatic detection variables convenient many models may suit style; like can always change using options(): option disabled, variables assumed covariates promote population parameters ini block last example option enabled none variables starting t added model course use turn back : can use withr::with_options(list(rxode2.autoVarPiping=FALSE), ...) turn option temporarily. don’t like defaults changing variables change well rxSetPipingAuto() example wanted variables starting ending te can change : requested population parameters starting te added ini block. want reset defaults simply call rxSetPipingAuto() without arguments:","code":"options(rxode2.autoVarPiping=FALSE) mod7 <- mod3 |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) print(mod7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } options(rxode2.autoVarPiping=TRUE) mod8 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1 print(mod8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } rxSetPipingAuto(thetamodelVars = rex::rex(\"te\")) mod9 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 print(mod9) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } rxSetPipingAuto() mod10 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"adding-model-lines","dir":"Articles","previous_headings":"Modifying model","what":"Adding model lines","title":"Modifying Models","text":"three ways insert lines rxode2/nlmixr2 model. can add lines end model, expression beginning model controlled append option. Let’s assume two different assays run compound noticed different variability. can modify model adding lines end model using append=TRUE: Perhaps instead may want add indirect response model addition concentrations, can choose add : append=lhsVar lhsVar left handed variable want insert new lines: last type insertion may wish add lines beginning model using append=FALSE:","code":"mod4 <- mod |> model({ cp2 <- cp cp2 ~ lnorm(lnorm.sd) }, append=TRUE) #> ℹ add residual parameter `lnorm.sd` and set estimate to 1 print(mod4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd lnorm.sd #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=3 dvid='cp' or dvid=1 #> 2 cp2 ~ … cmt='cp2' or cmt=4 dvid='cp2' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> lnorm.sd <- c(0, 1) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> cp2 <- cp #> cp2 ~ lnorm(lnorm.sd) #> }) #> } mod5 <- mod |> model({ PD <- 1-emax*cp/(ec50+cp) ## effect(0) <- e0 kin <- e0*kout d/dt(effect) <- kin*PD -kout*effect }, append=d/dt(center)) mod6 <- mod5 |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1 print(mod6) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"remove-lines-in-the-model","dir":"Articles","previous_headings":"Modifying model","what":"Remove lines in the model","title":"Modifying Models","text":"lines model can removed one 2 ways either use -param param <- NULL model piping:","code":"mod7 <- mod6 |> model(-emax) #> ! remove population parameter `temax` print(mod7) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # Equivalently mod8 <- mod6 |> model(emax <- NULL) #> ! remove population parameter `temax` print(mod8) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"rename-parameters-in-a-model","dir":"Articles","previous_headings":"Modifying model","what":"Rename parameters in a model","title":"Modifying Models","text":"may want rename parameters model, easy rxRename(). dplyr loaded can even replace rename(). semantics similar two functions, assigning newVar=oldVar. example: can see every instance variable named model renamed inside model ini block. completeness can see dplyr verb (since S3 method):","code":"mod11 <- mod10 |> rxRename(drug1kout=kout, tv.drug1kout=tkout) print(mod11) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 #> 0.45 1.00 3.45 0.70 1.00 1.00 #> tec50 tkin tv.drug1kout #> 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tv.drug1kout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> drug1kout <- exp(tv.drug1kout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union mod12 <- mod10 |> rename(drug1kout=kout, tv.drug1kout=tkout) print(mod12) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 #> 0.45 1.00 3.45 0.70 1.00 1.00 #> tec50 tkin tv.drug1kout #> 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tv.drug1kout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> drug1kout <- exp(tv.drug1kout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"combine-different-models","dir":"Articles","previous_headings":"Modifying model","what":"Combine different models","title":"Modifying Models","text":"can also combine different models rxAppendModel(). general need variables common combine. generally want models link . example pk pd model done renaming cp first model ceff second model: get error try combine models without variables common: want combine models without respecting variables common, can use common=FALSE:","code":"ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl tv <- exp(3.45); # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } idr <- function() { ini({ tkin <- log(1) tkout <- log(1) tic50 <- log(10) gamma <- fix(1) idr.sd <- 1 }) model({ kin <- exp(tkin) kout <- exp(tkout) ic50 <- exp(tic50) d/dt(eff) <- kin - kout*(1-ceff^gamma/(ic50^gamma+ceff^gamma)) eff ~ add(idr.sd) }) } rxAppendModel(ocmt %>% rxRename(ceff=cp), idr) #> ℹ parameter labels from comments will be replaced by 'label()' #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 ceff ~ … cmt='ceff' or cmt=4 dvid='ceff' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> ceff <- center/v #> ceff ~ add(add.sd) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> } try(rxAppendModel(ocmt, idr)) #> ℹ parameter labels from comments will be replaced by 'label()' #> Error : not all the models have variables in common (use `common=FALSE` to allow this) mod2 <- rxAppendModel(ocmt, idr, common=FALSE) |> model(ceff=cp, append=ic50) # here we add the translation after the #> ℹ parameter labels from comments will be replaced by 'label()' # ic50 line to make it reasonable print(mod2) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=4 dvid='cp' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> ceff <- cp #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"creating-more-complex-model-modification-functions","dir":"Articles","previous_headings":"Modifying model","what":"Creating more complex model modification functions","title":"Modifying Models","text":"pretty flexible, may want even , helper functions help create functions . discuss extract model function update . Lets start model: Lets assume moment want remove eta cl. First probably want get model lines. can modelExtract(): Now want worry cl line, can subset : Now wish change line “cl <- exp(tcl+eta.cl)” Note functions modify ini({}) block. may modify ini block first make valid rxode2/nlmixr2 model. particular case, using model piping easier, simply demonstrates two different way extract model information way add information final model. methods can tricky using model parsed correctly. means make sure parameters endpoints follow correct rules","code":"f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v }) } totLines <- modelExtract(f, endpoint=NA) # endpoints should be included print(totLines) #> [1] \"ka <- exp(tka + eta.ka)\" #> [2] \"cl <- exp(tcl)\" #> [3] \"v <- exp(tv + eta.v)\" #> [4] \"d/dt(depot) <- -ka * depot\" #> [5] \"d/dt(center) <- ka * depot - cl/v * center\" #> [6] \"cp <- center/v\" clLine <- modelExtract(f, cl, lines=TRUE) line <- attr(clLine, \"lines\") totLines[line] <- \"cl <- exp(tcl+eta.cl)\" # For now lets remove the entire `ini` block (so you don't have to # worry about syncing parameters). # ini(f) <- NULL model(f) <- totLines #> ℹ parameter labels from comments are typically ignored in non-interactive mode #> ℹ Need to run with the source intact to parse comments print(f) #> function () #> { #> ini({ #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> }) #> } #> "},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-initial-estimates","dir":"Articles","previous_headings":"","what":"Modifying initial estimates","title":"Modifying Models","text":"common items want initial estimates : Fix/Unfix parameter Change initial condition values bounds Change initial condition type Change labels transformations Reorder parameters may wish create functions; discuss .","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"fixing-or-unfixing-a-parameter","dir":"Articles","previous_headings":"Modifying initial estimates","what":"Fixing or unfixing a parameter","title":"Modifying Models","text":"can fix model estimates two ways. first fix value whatever model function, done piping model parameter name (like tka) setting equal fix (%>% ini(tka=fix)). full example: can also fix parameter different value wish; similar can specify value fix inside fix pseudo-function follows: %>% ini(tka=fix(0.1)). fully worked example :","code":"f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 add.sd <- c(0, 0.7) eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v cp ~ add(add.sd) }) } f2 <- f |> ini(tka=fix) #> ℹ fix `tka` to `0.45` print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.45) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 add.sd <- c(0, 0.7) eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v cp ~ add(add.sd) }) } f2 <- f |> ini(tka=fix(0.1)) #> ℹ fix `tka` to `0.45` #> ℹ change initial estimate of `tka` to `0.1` print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"unfixing-parameters","dir":"Articles","previous_headings":"Modifying initial estimates","what":"Unfixing parameters","title":"Modifying Models","text":"unfix parameters similarly fixing. Instead using fix keyword, use unfix keyword. unfix parameter (keeping value) pipe model using (|> ini(tka=unfix)). Starting fixed model fully worked example : can also unfix change initial estimate ini(parameter=unfix(newEst)):","code":"print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f2 |> ini(tka=unfix) #> ℹ unfix `tka` keeping initial estimate `0.1` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f2 |> ini(tka=unfix(10)) #> ℹ unfix `tka` keeping initial estimate `0.1` #> ℹ change initial estimate of `tka` to `10` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 10.00 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 10 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"multiple-parameter-assignment","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Multiple parameter assignment","title":"Modifying Models","text":"can also assign multiple parameters providing : vector/list multiple lines piped ini() block Using covariance matrix case vector can specify pipe model. example: can also added multiple lines commas separating estimates: also use matrix specify covariance:","code":"ini1 <- c(tka=0.1, tcl=1, tv=3) f4 <- f |> ini(ini1) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # or equivalently ini1 <- list(tka=0.1, tcl=1, tv=3) f4a <- f |> ini(ini1) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # commas separating values: f4 <- f |> ini(tka=0.1, tcl=1, tv=3) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # multiple lines in {} f4 <- f |> ini({ tka <- 0.2 tcl <- 2 tv <- 6 }) #> ℹ change initial estimate of `tka` to `0.2` #> ℹ change initial estimate of `tcl` to `2` #> ℹ change initial estimate of `tv` to `6` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.2 2.0 6.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.2 #> tcl <- 2 #> tv <- 6 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } ome <- lotri(eta.ka + eta.v ~ c(0.6, 0.01, 10.1)) f4 <- f |> ini(ome) #> ℹ change initial estimate of `eta.ka` to `0.6` #> ℹ add covariance between `eta.v` and `eta.ka` with initial estimate `0.01` #> ℹ change initial estimate of `eta.v` to `10.1` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.60 0.01 #> eta.v 0.01 10.10 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka + eta.v ~ c(0.6, 0.01, 10.1) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # or equavialtly use the lotri-type syntax for the omega: f4 <- f |> ini(eta.ka + eta.v ~ c(0.6, 0.01, 0.2)) #> ℹ change initial estimate of `eta.ka` to `0.6` #> ℹ add covariance between `eta.v` and `eta.ka` with initial estimate `0.01` #> ℹ change initial estimate of `eta.v` to `0.2` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.60 0.01 #> eta.v 0.01 0.20 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka + eta.v ~ c(0.6, 0.01, 0.2) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"single-parameter-assignment","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Single parameter assignment","title":"Modifying Models","text":"simplest way change initial parameter estimates simply use ini(parameter=newValue). can also use <- ~ change value: fully worked example showing three types initial value modification : can change bounds like model specification using numeric vector c(low, estimate) c(low, estimate, hi). worked example: Note changing parameters default values might show parameter printout:","code":"f3 <- f |> ini(tka <- 0.1) #> ℹ change initial estimate of `tka` to `0.1` f4 <- f |> ini(tka=0.1) #> ℹ change initial estimate of `tka` to `0.1` f5 <- f |> ini(tka ~ 0.1) #> ℹ change initial estimate of `tka` to `0.1` print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1, 0.2)) #> ℹ change initial estimate (0.1) and upper/lower bound (0 to 0.2) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1, 0.2) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1)) #> ℹ change initial estimate (0.1) and lower bound (0) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1, 0.2)) #> ℹ change initial estimate (0.1) and upper/lower bound (0 to 0.2) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1, 0.2) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Now reassign f4 <- f3 |> ini(tka <- c(-Inf, 0.1, Inf)) #> ℹ change initial estimate (0.1) and upper/lower bound (-Inf to Inf) of `tka` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-types","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter types","title":"Modifying Models","text":"can change parameter type two operators either using -par convert parameter covariate ~par toggle population individual parameters. example 3:","code":"# Switch population parameter to between subject variability parameter: f4 <- f |> ini( ~ tcl) #> ℹ convert 'tcl' from population parameter to between subject variability print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v tcl #> eta.ka 0.6 0.0 0 #> eta.v 0.0 0.1 0 #> tcl 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> tcl ~ 1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Switch back to population parameter f5 <- f4 |> ini( ~ tcl) #> ℹ convert 'tcl' from between subject variability to population parameter print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd tcl #> 0.45 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> tcl <- 1 #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Change the variable to a covariate parameter (ie it doesn't have an # initial estimate so remove it with the `-` operator): f6 <- f4 |> ini(-tcl) #> ℹ changing between subject variability parameter 'tcl' to covariate parameter print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # You can change the covariate or remove the parameter estimate by # `tcl <- NULL`: f6 <- f4 |> ini(tcl <- NULL) #> ℹ changing between subject variability parameter 'tcl' to covariate parameter print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # to add it back as a between subject variability or population # parameter you can pipe it as follows: f7 <- f6 |> ini(tcl=4) #> ℹ promote `tcl` to population parameter with initial estimate 4 #> ℹ change initial estimate of `tcl` to `4` print(f7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd tcl #> 0.45 3.45 0.70 4.00 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> tcl <- 4 #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f8 <- f6 |> ini(tcl ~ 0.1) #> ℹ promote `tcl` to between subject variability with initial estimate 0.1 #> ℹ change initial estimate of `tcl` to `0.1` print(f8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v tcl #> eta.ka 0.6 0.0 0.0 #> eta.v 0.0 0.1 0.0 #> tcl 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> tcl ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-labels","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter labels","title":"Modifying Models","text":"want change/add parameter label assign parameter label(\"label add\"). example: can also change order performing operations: want remove labels can remove ini(par=label(NULL)); example:","code":"f4 <- f |> ini(tka=label(\"Typical Ka (1/hr)\")) print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Typical Ka (1/hr)\") #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f5 <- f |> ini(tka=label(\"Typical Ka (1/hr)\"), append=tcl) print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tcl tka tv add.sd #> 1.00 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tcl <- 1 #> tka <- 0.45 #> label(\"Typical Ka (1/hr)\") #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f6 <- f |> ini(tka=label(NULL)) print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-transformations","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter transformations","title":"Modifying Models","text":"Back-transformations -ride back transformations nlmixr2 models. similar modification labels. use |> ini(tka=backTransform(exp)) add exponential back-transformation data: wish remove can also |> ini(tka=backTransform(NULL)):","code":"f7 <- f |> ini(tka=backTransform(exp)) print(f7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> backTransform(\"exp\") #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f8 <- f |> ini(tka=backTransform(NULL)) print(f8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"more-granular-access-of-initial-conditions","dir":"Articles","previous_headings":"Modifying initial estimates","what":"More granular access of initial conditions","title":"Modifying Models","text":"Just like model() can modify underlying data frame represents ini() block. case simply change initial estimate first parameter (tka):","code":"f <- rxode2(f) ini <- f$iniDf print(ini) #> ntheta neta1 neta2 name lower est upper fix label backTransform #> 1 1 NA NA tka -Inf 0.45 Inf FALSE #> 2 2 NA NA tcl -Inf 1.00 Inf FALSE #> 3 3 NA NA tv -Inf 3.45 Inf FALSE #> 4 4 NA NA add.sd 0 0.70 Inf FALSE #> 5 NA 1 1 eta.ka -Inf 0.60 Inf FALSE #> 6 NA 2 2 eta.v -Inf 0.10 Inf FALSE #> condition err #> 1 #> 2 #> 3 #> 4 cp add #> 5 id #> 6 id ini$est[1] <- 7 ini(f) <- ini print(f) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 7.00 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 7 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"how-rxode2-assigns-compartment-numbers","dir":"Articles","previous_headings":"","what":"How rxode2 assigns compartment numbers","title":"Changing rxode2 compartment numbers","text":"rxode2 automatically assigns compartment numbers parsing. example, Mavoglurant PBPK model following model may used: look printout, can see rxode2 assigned compartment number(s) can also see classic rxode2 model. case use summary() function: case, Venous_Blood assigned compartment 15. Figuring can inconvenient also lead re-numbering compartment simulation estimation datasets. easy probably clearer specify compartment name, tools support compartment numbers. Therefore, way number compartment easily can lead less data modification multiple tools.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` pbpk <- function() { model({ KbBR = exp(lKbBR) KbMU = exp(lKbMU) KbAD = exp(lKbAD) CLint= exp(lCLint + eta.LClint) KbBO = exp(lKbBO) KbRB = exp(lKbRB) ## Regional blood flows # Cardiac output (L/h) from White et al (1968) CO = (187.00*WT^0.81)*60/1000 QHT = 4.0 *CO/100 QBR = 12.0*CO/100 QMU = 17.0*CO/100 QAD = 5.0 *CO/100 QSK = 5.0 *CO/100 QSP = 3.0 *CO/100 QPA = 1.0 *CO/100 QLI = 25.5*CO/100 QST = 1.0 *CO/100 QGU = 14.0*CO/100 # Hepatic artery blood flow QHA = QLI - (QSP + QPA + QST + QGU) QBO = 5.0 *CO/100 QKI = 19.0*CO/100 QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI) QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB ## Organs' volumes = organs' weights / organs' density VLU = (0.76 *WT/100)/1.051 VHT = (0.47 *WT/100)/1.030 VBR = (2.00 *WT/100)/1.036 VMU = (40.00*WT/100)/1.041 VAD = (21.42*WT/100)/0.916 VSK = (3.71 *WT/100)/1.116 VSP = (0.26 *WT/100)/1.054 VPA = (0.14 *WT/100)/1.045 VLI = (2.57 *WT/100)/1.040 VST = (0.21 *WT/100)/1.050 VGU = (1.44 *WT/100)/1.043 VBO = (14.29*WT/100)/1.990 VKI = (0.44 *WT/100)/1.050 VAB = (2.81 *WT/100)/1.040 VVB = (5.62 *WT/100)/1.040 VRB = (3.86 *WT/100)/1.040 ## Fixed parameters BP = 0.61 # Blood:plasma partition coefficient fup = 0.028 # Fraction unbound in plasma fub = fup/BP # Fraction unbound in blood KbLU = exp(0.8334) KbHT = exp(1.1205) KbSK = exp(-.5238) KbSP = exp(0.3224) KbPA = exp(0.3224) KbLI = exp(1.7604) KbST = exp(0.3224) KbGU = exp(1.2026) KbKI = exp(1.3171) ##----------------------------------------- S15 = VVB*BP/1000 C15 = Venous_Blood/S15 ##----------------------------------------- d/dt(Lungs) = QLU*(Venous_Blood/VVB - Lungs/KbLU/VLU) d/dt(Heart) = QHT*(Arterial_Blood/VAB - Heart/KbHT/VHT) d/dt(Brain) = QBR*(Arterial_Blood/VAB - Brain/KbBR/VBR) d/dt(Muscles) = QMU*(Arterial_Blood/VAB - Muscles/KbMU/VMU) d/dt(Adipose) = QAD*(Arterial_Blood/VAB - Adipose/KbAD/VAD) d/dt(Skin) = QSK*(Arterial_Blood/VAB - Skin/KbSK/VSK) d/dt(Spleen) = QSP*(Arterial_Blood/VAB - Spleen/KbSP/VSP) d/dt(Pancreas) = QPA*(Arterial_Blood/VAB - Pancreas/KbPA/VPA) d/dt(Liver) = QHA*Arterial_Blood/VAB + QSP*Spleen/KbSP/VSP + QPA*Pancreas/KbPA/VPA + QST*Stomach/KbST/VST + QGU*Gut/KbGU/VGU - CLint*fub*Liver/KbLI/VLI - QLI*Liver/KbLI/VLI d/dt(Stomach) = QST*(Arterial_Blood/VAB - Stomach/KbST/VST) d/dt(Gut) = QGU*(Arterial_Blood/VAB - Gut/KbGU/VGU) d/dt(Bones) = QBO*(Arterial_Blood/VAB - Bones/KbBO/VBO) d/dt(Kidneys) = QKI*(Arterial_Blood/VAB - Kidneys/KbKI/VKI) d/dt(Arterial_Blood) = QLU*(Lungs/KbLU/VLU - Arterial_Blood/VAB) d/dt(Venous_Blood) = QHT*Heart/KbHT/VHT + QBR*Brain/KbBR/VBR + QMU*Muscles/KbMU/VMU + QAD*Adipose/KbAD/VAD + QSK*Skin/KbSK/VSK + QLI*Liver/KbLI/VLI + QBO*Bones/KbBO/VBO + QKI*Kidneys/KbKI/VKI + QRB*Rest_of_Body/KbRB/VRB - QLU*Venous_Blood/VVB d/dt(Rest_of_Body) = QRB*(Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) }) } pbpk <- pbpk() print(pbpk) #> -- rxode2-based free-form 16-cmt ODE model ------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 Lungs #> 2 2 Heart #> 3 3 Brain #> 4 4 Muscles #> 5 5 Adipose #> 6 6 Skin #> 7 7 Spleen #> 8 8 Pancreas #> 9 9 Liver #> 10 10 Stomach #> 11 11 Gut #> 12 12 Bones #> 13 13 Kidneys #> 14 14 Arterial_Blood #> 15 15 Venous_Blood #> 16 16 Rest_of_Body #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + #> QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + #> QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + #> QGU * Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - #> QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + #> QSK * Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * #> Bones/KbBO/VBO + QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> }) #> } pbpk <- pbpk$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ summary(pbpk) #> rxode2 2.1.3 model named rx_a688fd3d12f8698d15feb47597e1364f model (ready). #> DLL: /tmp/RtmpSPRppR/rxode2/rx_a688fd3d12f8698d15feb47597e1364f__.rxd/rx_a688fd3d12f8698d15feb47597e1364f_.so #> NULL #> #> Calculated Variables: #> [1] \"KbBR\" \"KbMU\" \"KbAD\" \"CLint\" \"KbBO\" \"KbRB\" \"CO\" \"QHT\" \"QBR\" #> [10] \"QMU\" \"QAD\" \"QSK\" \"QSP\" \"QPA\" \"QLI\" \"QST\" \"QGU\" \"QHA\" #> [19] \"QBO\" \"QKI\" \"QRB\" \"QLU\" \"VLU\" \"VHT\" \"VBR\" \"VMU\" \"VAD\" #> [28] \"VSK\" \"VSP\" \"VPA\" \"VLI\" \"VST\" \"VGU\" \"VBO\" \"VKI\" \"VAB\" #> [37] \"VVB\" \"VRB\" \"fub\" \"KbLU\" \"KbHT\" \"KbSK\" \"KbSP\" \"KbPA\" \"KbLI\" #> [46] \"KbST\" \"KbGU\" \"KbKI\" \"S15\" \"C15\" #> -- rxode2 Model Syntax -- #> rxode2({ #> param(lKbBR, lKbMU, lKbAD, lCLint, eta.LClint, lKbBO, lKbRB, #> WT) #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + QGU * #> Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + QSK * #> Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * Bones/KbBO/VBO + #> QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> })"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"changing-compartment-numbers-by-pre-declaring-the-compartments","dir":"Articles","previous_headings":"","what":"Changing compartment numbers by pre-declaring the compartments","title":"Changing rxode2 compartment numbers","text":"add compartments rxode2 model order desire simply need pre-declare compartments cmt. example specifying Venous_Blood Skin 1st 2nd compartments, respectively, simple: can see change simple printout first two compartments Venous_Blood followed Skin.","code":"pbpk2 <- function() { model({ ## Now this is the first compartment, ie cmt=1 cmt(Venous_Blood) ## Skin may be a compartment you wish to dose to as well, ## so it is now cmt=2 cmt(Skin) KbBR = exp(lKbBR) KbMU = exp(lKbMU) KbAD = exp(lKbAD) CLint= exp(lCLint + eta.LClint) KbBO = exp(lKbBO) KbRB = exp(lKbRB) ## Regional blood flows # Cardiac output (L/h) from White et al (1968)m CO = (187.00*WT^0.81)*60/1000; QHT = 4.0 *CO/100; QBR = 12.0*CO/100; QMU = 17.0*CO/100; QAD = 5.0 *CO/100; QSK = 5.0 *CO/100; QSP = 3.0 *CO/100; QPA = 1.0 *CO/100; QLI = 25.5*CO/100; QST = 1.0 *CO/100; QGU = 14.0*CO/100; QHA = QLI - (QSP + QPA + QST + QGU); # Hepatic artery blood flow QBO = 5.0 *CO/100; QKI = 19.0*CO/100; QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI); QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB; ## Organs' volumes = organs' weights / organs' density VLU = (0.76 *WT/100)/1.051; VHT = (0.47 *WT/100)/1.030; VBR = (2.00 *WT/100)/1.036; VMU = (40.00*WT/100)/1.041; VAD = (21.42*WT/100)/0.916; VSK = (3.71 *WT/100)/1.116; VSP = (0.26 *WT/100)/1.054; VPA = (0.14 *WT/100)/1.045; VLI = (2.57 *WT/100)/1.040; VST = (0.21 *WT/100)/1.050; VGU = (1.44 *WT/100)/1.043; VBO = (14.29*WT/100)/1.990; VKI = (0.44 *WT/100)/1.050; VAB = (2.81 *WT/100)/1.040; VVB = (5.62 *WT/100)/1.040; VRB = (3.86 *WT/100)/1.040; ## Fixed parameters BP = 0.61; # Blood:plasma partition coefficient fup = 0.028; # Fraction unbound in plasma fub = fup/BP; # Fraction unbound in blood KbLU = exp(0.8334); KbHT = exp(1.1205); KbSK = exp(-.5238); KbSP = exp(0.3224); KbPA = exp(0.3224); KbLI = exp(1.7604); KbST = exp(0.3224); KbGU = exp(1.2026); KbKI = exp(1.3171); ##----------------------------------------- S15 = VVB*BP/1000; C15 = Venous_Blood/S15 ##----------------------------------------- d/dt(Lungs) = QLU*(Venous_Blood/VVB - Lungs/KbLU/VLU); d/dt(Heart) = QHT*(Arterial_Blood/VAB - Heart/KbHT/VHT); d/dt(Brain) = QBR*(Arterial_Blood/VAB - Brain/KbBR/VBR); d/dt(Muscles) = QMU*(Arterial_Blood/VAB - Muscles/KbMU/VMU); d/dt(Adipose) = QAD*(Arterial_Blood/VAB - Adipose/KbAD/VAD); d/dt(Skin) = QSK*(Arterial_Blood/VAB - Skin/KbSK/VSK); d/dt(Spleen) = QSP*(Arterial_Blood/VAB - Spleen/KbSP/VSP); d/dt(Pancreas) = QPA*(Arterial_Blood/VAB - Pancreas/KbPA/VPA); d/dt(Liver) = QHA*Arterial_Blood/VAB + QSP*Spleen/KbSP/VSP + QPA*Pancreas/KbPA/VPA + QST*Stomach/KbST/VST + QGU*Gut/KbGU/VGU - CLint*fub*Liver/KbLI/VLI - QLI*Liver/KbLI/VLI; d/dt(Stomach) = QST*(Arterial_Blood/VAB - Stomach/KbST/VST); d/dt(Gut) = QGU*(Arterial_Blood/VAB - Gut/KbGU/VGU); d/dt(Bones) = QBO*(Arterial_Blood/VAB - Bones/KbBO/VBO); d/dt(Kidneys) = QKI*(Arterial_Blood/VAB - Kidneys/KbKI/VKI); d/dt(Arterial_Blood) = QLU*(Lungs/KbLU/VLU - Arterial_Blood/VAB); d/dt(Venous_Blood) = QHT*Heart/KbHT/VHT + QBR*Brain/KbBR/VBR + QMU*Muscles/KbMU/VMU + QAD*Adipose/KbAD/VAD + QSK*Skin/KbSK/VSK + QLI*Liver/KbLI/VLI + QBO*Bones/KbBO/VBO + QKI*Kidneys/KbKI/VKI + QRB*Rest_of_Body/KbRB/VRB - QLU*Venous_Blood/VVB; d/dt(Rest_of_Body) = QRB*(Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB); }) } pbpk2 <- pbpk2() pbpk2 #> -- rxode2-based free-form 16-cmt ODE model ------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 Venous_Blood #> 2 2 Skin #> 3 3 Lungs #> 4 4 Heart #> 5 5 Brain #> 6 6 Muscles #> 7 7 Adipose #> 8 8 Spleen #> 9 9 Pancreas #> 10 10 Liver #> 11 11 Stomach #> 12 12 Gut #> 13 13 Bones #> 14 14 Kidneys #> 15 15 Arterial_Blood #> 16 16 Rest_of_Body #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> cmt(Venous_Blood) #> cmt(Skin) #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + #> QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + #> QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + #> QGU * Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - #> QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + #> QSK * Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * #> Bones/KbBO/VBO + QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"appending-compartments-to-the-model","dir":"Articles","previous_headings":"","what":"Appending compartments to the model","title":"Changing rxode2 compartment numbers","text":"can also append “compartments” model. ODE solving internals, add fake compartments model differential equations defined. example legal: can see clearly underlying classic rxode2 model: compartments defined differential equations supported; model : give error:","code":"ode.1c.ka <- function(){ model({ C2 = center/V d / dt(depot) = -KA * depot d/dt(center) = KA * depot - CL*C2 cmt(eff) }) } ode.1c.ka <- ode.1c.ka() print(ode.1c.ka) #> -- rxode2-based free-form 2-cmt ODE model -------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> C2 = center/V #> d/dt(depot) = -KA * depot #> d/dt(center) = KA * depot - CL * C2 #> cmt(eff) #> }) #> } ode.1c.ka$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_31957e383dd61d7e82e22d46f409ad8a model (ready). #> x$state: depot, center #> x$stateExtra: eff #> x$params: V, KA, CL #> x$lhs: C2 ode.1c.ka <- rxode2({ cmt(eff) C2 = center/V; d / dt(depot) = -KA * depot d/dt(center) = KA * depot - CL*C2 }) Error in rxModelVars_(obj) : Evaluation error: Compartment 'eff' needs differential equations defined."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-covariates.html","id":"individual-covariates","dir":"Articles","previous_headings":"","what":"Individual Covariates","title":"rxode2 Covariates","text":"individual covariate wish solve may specify iCov dataset:","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` library(units) ## udunits database from /usr/share/xml/udunits/udunits2.xml library(xgxr) mod3 <- function() { ini({ TKA <- 2.94E-01 ## Clearance with individuals TCL <- 1.86E+01 TV2 <-4.02E+01 TQ <-1.05E+01 TV3 <-2.97E+02 TKin <- 1 TKout <- 1 TEC50 <-200 }) model({ KA <- TKA CL <- TCL * (WT / 70) ^ 0.75 V2 <- TV2 Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 Tz <- 8 amp <- 0.1 C2 <- central/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(central) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 ## This specifies that the effect compartment starts at 1. }) } ev <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=10000, cmt=1) %>% et(0,48,length.out=100) %>% et(id=1:4) set.seed(10) rxSetSeed(10) ## Now use iCov to simulate a 4-id sample r1 <- solve(mod3, ev, # Create individual covariate data-frame iCov=data.frame(id=1:4, WT=rnorm(4, 70, 10))) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(r1) ## ── Solved rxode2 object ── ## ── Parameters ($params): ── ## TKA TCL TV2 TQ TV3 TKin TKout TEC50 Tz amp ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 8.000 0.100 ## ── Initial Conditions ($inits): ── ## depot central peri eff ## 0 0 0 1 ## ── First part of data (object): ── ## # A tibble: 400 × 17 ## id time KA CL V2 Q V3 Kin Kout EC50 C2 C3 depot ## [h] ## 1 1 0 0.294 18.6 40.2 10.5 297 1 1 200 0 0 10000 ## 2 1 0.485 0.294 18.6 40.2 10.5 297 1 1 200 27.8 0.257 8671. ## 3 1 0.970 0.294 18.6 40.2 10.5 297 1 1 200 43.7 0.873 7519. ## 4 1 1.45 0.294 18.6 40.2 10.5 297 1 1 200 51.7 1.68 6520. ## 5 1 1.94 0.294 18.6 40.2 10.5 297 1 1 200 54.7 2.56 5654. ## 6 1 2.42 0.294 18.6 40.2 10.5 297 1 1 200 54.5 3.45 4903. ## # ℹ 394 more rows ## # ℹ 4 more variables: central , peri , eff , WT plot(r1, C2, log=\"y\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-covariates.html","id":"time-varying-covariates","dir":"Articles","previous_headings":"","what":"Time Varying Covariates","title":"rxode2 Covariates","text":"Covariates easy specify rxode2, can specify variable. Time-varying covariates, like clock time circadian rhythm model, can also used. Extending indirect response model already discussed, : Now covariate present event dataset, system can solved combining dataset model: solving ODE equations, solver may sample times outside data. happens, ODE solver can use linear interpolation covariate values. equivalent R’s approxfun method=\"linear\". Note linear approximation case leads kinks solved system 24-hours covariate linear interpolation near 24 near 0. linear seems reasonable, cases like clock time make interpolation methods attractive. rxode2 default covariate interpolation last observation carried forward (locf), constant approximation. equivalent R’s approxfun method=\"constant\". gives following plots: case, plots seem smoother. can also use NONMEM’s preferred interpolation style next observation carried backward (NOCB): gives following plots:","code":"library(rxode2) library(units) mod4 <- mod3 %>% model(d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff) %>% model(-Kin) %>% model(Kin <- TKin + amp *cos(2*pi*(ctime-Tz)/24), append=C2, cov=\"ctime\") ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=1) %>% et(0,48,length.out=100) ## Create data frame of 8 am dosing for the first dose This is done ## with base R but it can be done with dplyr or data.table ev$ctime <- (ev$time+set_units(8,hr)) %% 24 ev$WT <- 70 r1 <- solve(mod4, ev, covsInterpolation=\"linear\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\") plot(r1,eff) + ylab(\"Effect\") + xlab(\"Time\") r1 <- solve(mod4, ev,covsInterpolation=\"locf\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\", xlab=\"Time\") plot(r1,eff, ylab=\"Effect\", xlab=\"Time\") r1 <- solve(mod4, ev,covsInterpolation=\"nocb\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\", xlab=\"Time\") plot(r1,eff, ylab=\"Effect\", xlab=\"Time\")"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"creating-an-interactive-data-frame","dir":"Articles","previous_headings":"Using rxode2 data frames","what":"Creating an interactive data frame","title":"rxode2 Data Frames","text":"rxode2 supports returning solved object modified data-frame. done predict(), solve(), rxSolve() methods.","code":"library(rxode2) library(units) ## Setup example model mod1 <- function() { ini({ # central KA <- 2.94E-01 CL <- 1.86E+01 # peripheral V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 # effects Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) } ## Seup parameters and initial conditions ## Setup dosing event information ev <- et(amountUnits=\"mg\", timeUnits = \"hours\") %>% et(amt=10000, addl=9, ii=12) %>% et(amt=20000, addl=4, time=120, ii=24) %>% et(0:240) ## Now solve x <- predict(mod1, ev) x #> -- Solved rxode2 object -- #> -- Parameters (x$params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions (x$inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 241 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # i 235 more rows"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"using-the-solved-object-as-a-simple-data-frame","dir":"Articles","previous_headings":"Using rxode2 data frames","what":"Using the solved object as a simple data frame","title":"rxode2 Data Frames","text":"solved object acts data.frame tbl can filtered dpylr. example filter easily.","code":"library(dplyr) ## You can drop units for comparisons and filtering x <- mod1 %>% solve(ev) %>% drop_units() %>% filter(time <= 3) %>% as_tibble() ## or keep them and compare with the proper units. x <- mod1 %>% solve(ev) %>% filter(time <= set_units(3, hr)) %>% as_tibble() x #> # A tibble: 4 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"updating-the-data-set-interactively","dir":"Articles","previous_headings":"","what":"Updating the data-set interactively","title":"rxode2 Data Frames","text":"However isn’t just simple data object. can use solved object update parameters fly, even change sampling time. First need recreate original solved system:","code":"x <- mod1 %>% solve(ev) print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 241 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # i 235 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"modifying-observation-times-for-rxode2","dir":"Articles","previous_headings":"Updating the data-set interactively","what":"Modifying observation times for rxode2","title":"rxode2 Data Frames","text":"Notice initial effect now 2. can also change sampling times easily method changing t time. example:","code":"x$t <- seq(0,5,length.out=20) print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 20 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 0.263 16.8 0.0817 9255. 677. 24.3 1.01 #> 3 0.526 29.5 0.299 8566. 1187. 88.7 1.03 #> 4 0.789 38.9 0.615 7929. 1562. 183. 1.06 #> 5 1.05 45.5 1.00 7338. 1830. 298. 1.09 #> 6 1.32 50.1 1.44 6792. 2013. 427. 1.12 #> # i 14 more rows plot(x)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"modifying-simulation-parameters","dir":"Articles","previous_headings":"Updating the data-set interactively","what":"Modifying simulation parameters","title":"rxode2 Data Frames","text":"can also access change parameters $ operator. example, accessing KA can done : may change assigning new value. can access/change parameters, initialization(s) events $params, $inits, $events accessor syntax, similar used . syntax makes easy update explore effect various parameters solved object.","code":"x$KA #> [1] 0.294 x$KA <- 1 print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 1.0 18.6 40.2 10.5 297.0 1.0 1.0 200.0 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 20 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 0.263 52.2 0.261 7686. 2098. 77.6 1.03 #> 3 0.526 83.3 0.900 5908. 3348. 267. 1.09 #> 4 0.789 99.8 1.75 4541. 4010. 519. 1.15 #> 5 1.05 106. 2.69 3490. 4273. 800. 1.21 #> 6 1.32 106. 3.66 2683. 4272. 1086. 1.26 #> # i 14 more rows plot(x)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"datasets-for-rxode2-nlmixr","dir":"Articles","previous_headings":"","what":"Datasets for rxode2 & nlmixr","title":"rxode2 Event Types","text":"Data input nlmixr type data input rxode2, similar data NONMEM (NONMEM-ready datasets can used directly nlmixr).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"subject-identification-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Subject Identification Columns","title":"rxode2 Event Types","text":"subject identification column separates subjects identification random effects. ID: subject identifier may integer, character, factor.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"observation-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Observation Columns","title":"rxode2 Event Types","text":"Observation columns used indicate dependent variable use measure . DV: numeric column measurement CENS: numeric column indication censoring, limit quantification assay. LIMIT: numeric column helping indicate type censoring, limit quantification assay. MDV: indicator missing DV values CMT: name number compartment DVID: dependent variable identifier EVID event identifier","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dosing-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Dosing Columns","title":"rxode2 Event Types","text":"AMT: amount dose CMT: name number compartment EVID: event identifier ADDL: number additional doses RATE DUR: rate duration dose","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"details-for-specific-dataset-columns","dir":"Articles","previous_headings":"","what":"Details for Specific Dataset Columns","title":"rxode2 Event Types","text":"details sorted alphabetically column name. grouping use, see documentation .","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"amt-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"AMT Column","title":"rxode2 Event Types","text":"AMT column defines amount dose. observation rows, 0 NA. dosing rows, amount dose administered CMT. dose zero-order rate (constant infusion), infusion may setup using RATE DUR column.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"censlimit-columns","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"CENS/LIMIT Columns","title":"rxode2 Event Types","text":"CENS column indicator column indicating censoring occurred. pharmacokinetic modeling, censoring typically sample limit quantification. Internally rxode2 saves values nlmixr can use likelihood calculations. CENS = 0 indicates value DV measured without censoring. CENS = 1 indicates value left censored (limit quantitation) value DV censoring/quantitation limit. CENS = -1 indicates value right censored (limit quantitation) value DV censoring/quantitation limit. LIMIT additional information censoring handled nlmixr stored rxode2’s data structure well. value left censored, like limit 1 may also believe value certain threshold, like zero. case, limit 0 indicates censored value 0 1. short : CENS = 0 LIMIT ignored observation censored CENS = 1 value censored (LIMIT, DV) CENS = -1 value censored (DV, LIMIT)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"cmt-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"CMT Column","title":"rxode2 Event Types","text":"CMT column indicates compartment event occurs. given character string factor (preferred method), matched name model. given integer, matched order compartments appear model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dur-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DUR Column","title":"rxode2 Event Types","text":"DUR column defines duration infusion. used set duration zero-order rate infusion.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dv-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DV Column","title":"rxode2 Event Types","text":"DV column indicates current measurement current compartment (see CMT) current measurement identifier (see DVID) may missing (see MDV) censored (see CENS).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dvid-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DVID Column","title":"rxode2 Event Types","text":"TODO","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"evid-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"EVID Column","title":"rxode2 Event Types","text":"EVID column event identifier row data. observation records, 0. normal dosing records, 1. Many EVID values detailed rxode2 Event Types Classic rxode2 Events vignettes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"id-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"ID Column","title":"rxode2 Event Types","text":"ID column subject identifier. column used separate one individual (usually single person animal) another. model, ID column used separate individuals. numerical integrator re-initializes new individual, new values random effects selected.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"rate-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"RATE Column","title":"rxode2 Event Types","text":"TODO","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"creating-rxode2s-event-tables","dir":"Articles","previous_headings":"","what":"Creating rxode2’s event tables","title":"Easy rxode2 Event Tables","text":"event table rxode2 specialized data frame acts container rxode2’s events observation times. create rxode2 event table may use code eventTable(), et(), even create data frame right event information contained . closely related types events rxode2 supports. event table can add sampling/observations doses piping direct access. short table two main functions create dosing Sampling times can added add.sampling( sampling times ) et( sampling times ). Dosing intervals sampling windows also supported. documentation using et() syntax, though supported. models, can illustrate using model shared rxode2 tutorial:","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(units) #> udunits database from /usr/share/xml/udunits/udunits2.xml (ev <- et()) #> -- EventTable with 0 records -- #> 0 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) (ev <- et()) #> -- EventTable with 0 records -- #> 0 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) ## Model from rxode2 tutorial m1 <-function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"adding-doses-to-the-event-table","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Adding doses to the event table","title":"Easy rxode2 Event Tables","text":"created can add dosing event table add.dosing(), et() functions. Using add.dosing() function : Notice units specified table. specified, units use units package keep track units convert needed. Additionally, ggforce uses label ggplot axes. set_units drop_units useful set drop rxode2 event table units. example, can see time axes labeled: familiar NONMEM/rxode2 event records, can also specify dosing using et dose elements directly: gives: shows easy creating event tables can .","code":"ev <- eventTable(amount.units=\"mg\", time.units=\"hr\") ## The methods ar attached to the event table, so you can use ## them directly ev$add.dosing(dose=10000, nbr.doses = 3)# loading doses ## Starts at time 0; Default dosing interval is 24 ## You can also pipe the event tables to these methods. ev <- ev %>% add.dosing(dose=5000, nbr.doses=14, dosing.interval=12)# maintenance ev #> -- EventTable with 2 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 2 x 5 #> time amt ii addl evid #> [h] [mg] [h] #> 1 0 10000 24 2 1:Dose (Add) #> 2 0 5000 12 13 1:Dose (Add) rxSolve(m1, ev) %>% plot(C2) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) # loading doses ev #> -- EventTable with 1 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 10000 12 6 1:Dose (Add) rxSolve(m1, ev) %>% plot(C2) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"adding-sampling-to-an-event-table","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Adding sampling to an event table","title":"Easy rxode2 Event Tables","text":"notice examples, rxode2 generated default sampling times since sampling times. wish control sampling time, add samples rxode2 event table add.sampling et gives: use et can simply add similar way add.sampling: gives following rxode2 solve: Note jagged nature plots since sample times.","code":"ev <- eventTable(amount.units=\"mg\", time.units=\"hr\") ## The methods ar attached to the event table, so you can use them ## directly ev$add.dosing(dose=10000, nbr.doses = 3)# loading doses ev$add.sampling(seq(0,24,by=4)) ev #> -- EventTable with 8 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 7 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 8 x 5 #> time amt ii addl evid #> [h] [mg] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 24 2 1:Dose (Add) #> 3 4 NA NA NA 0:Observation #> 4 8 NA NA NA 0:Observation #> 5 12 NA NA NA 0:Observation #> 6 16 NA NA NA 0:Observation #> 7 20 NA NA NA 0:Observation #> 8 24 NA NA NA 0:Observation solve(m1, ev) %>% plot(C2) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) %>% # loading doses et(seq(0,24,by=4)) ev #> -- EventTable with 8 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 7 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 8 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 6 1:Dose (Add) #> 3 4 NA NA NA 0:Observation #> 4 8 NA NA NA 0:Observation #> 5 12 NA NA NA 0:Observation #> 6 16 NA NA NA 0:Observation #> 7 20 NA NA NA 0:Observation #> 8 24 NA NA NA 0:Observation solve(m1, ev) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"expand-the-event-table-to-a-multi-subject-event-table-","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Expand the event table to a multi-subject event table.","title":"Easy rxode2 Event Tables","text":"thing needed expand event table list IDs want expand; can see following simulation 4 individuals solved :","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) %>% # loading doses et(seq(0,48,length.out=200)) %>% et(id=1:4) ev #> -- EventTable with 804 records -- #> 4 dosing records (see x$get.dosing(); add with add.dosing or et) #> 800 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 804 x 6 #> id time amt ii addl evid #> [h] [h] #> 1 1 0 NA NA NA 0:Observation #> 2 1 0 10000 12 6 1:Dose (Add) #> 3 1 0.241 NA NA NA 0:Observation #> 4 1 0.482 NA NA NA 0:Observation #> 5 1 0.724 NA NA NA 0:Observation #> 6 1 0.965 NA NA NA 0:Observation #> 7 1 1.21 NA NA NA 0:Observation #> 8 1 1.45 NA NA NA 0:Observation #> 9 1 1.69 NA NA NA 0:Observation #> 10 1 1.93 NA NA NA 0:Observation #> # i 794 more rows set.seed(42) rxSetSeed(42) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"add-doses-and-samples-within-a-sampling-window","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Add doses and samples within a sampling window","title":"Easy rxode2 Event Tables","text":"addition adding fixed doses fixed sampling times, can windows sample draw doses . dosing windows specify time ordered numerical vector lowest dosing time highest dosing time inside list. example, start dosing time 6 hour dosing window: can clearly see different dosing times following simulation: course reality dosing interval may 2 hours: sort thing can specified sampling times. specify sampling times terms sampling window, can create list sampling times. sampling time two element ordered numeric vector. shows flexibility dosing sampling rxode2 event tables allow.","code":"set.seed(42) rxSetSeed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,6)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) ev #> -- EventTable with 16 records -- #> 16 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 16 x 6 #> id low time high amt evid #> [h] [h] [h] #> 1 1 0 5.49 6 10000 1:Dose (Add) #> 2 1 12 17.0 18 10000 1:Dose (Add) #> 3 1 24 25.7 30 10000 1:Dose (Add) #> 4 1 36 41.6 42 10000 1:Dose (Add) #> 5 2 0 4.31 6 10000 1:Dose (Add) #> 6 2 12 14.7 18 10000 1:Dose (Add) #> 7 2 24 28.2 30 10000 1:Dose (Add) #> 8 2 36 39.9 42 10000 1:Dose (Add) #> 9 3 0 0.808 6 10000 1:Dose (Add) #> 10 3 12 16.4 18 10000 1:Dose (Add) #> 11 3 24 27.1 30 10000 1:Dose (Add) #> 12 3 36 39.9 42 10000 1:Dose (Add) #> 13 4 0 4.98 6 10000 1:Dose (Add) #> 14 4 12 13.7 18 10000 1:Dose (Add) #> 15 4 24 29.6 30 10000 1:Dose (Add) #> 16 4 36 41.5 42 10000 1:Dose (Add) ev <- ev %>% et(seq(0,48,length.out=200)) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) set.seed(42) rxSetSeed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,2)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) %>% et(seq(0,48,length.out=200)) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) rxSetSeed(42) set.seed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,2)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) ## Create 20 samples in the first 24 hours and 20 samples in the ## second 24 hours samples <- c(lapply(1:20, function(...){c(0,24)}), lapply(1:20, function(...){c(20,48)})) ## Add the random collection to the event table ev <- ev %>% et(samples) library(ggplot2) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) + geom_point()"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"combining-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Combining event tables","title":"Easy rxode2 Event Tables","text":"Since can create dosing records sampling records, can create complex dosing regimen wish. addition, rxode2 allows combine event tables c, seq, rep, rbind.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"sequencing-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Sequencing event tables","title":"Easy rxode2 Event Tables","text":"One way combine event table sequence c, seq etSeq. takes two dosing groups adds least one inter-dose interval : sequencing events, can also separate sequence period time; example wanted separate week, easily following sequence event tables: Note example time bid qd event tables exactly one week, 1 week plus 24 hours inter-dose interval. want behavior, can sequence using wait=\"+ii\". Also note, rxode2 assumes dosing want space event tables , clears sampling records combine event tables. true, can also use option samples=\"use\"","code":"## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) ## bid for 5 days followed by qd for 5 days et <- seq(bid,qd) %>% et(seq(0,11*24,length.out=100)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days followed by qd for 5 days et <- seq(bid,set_units(1, \"week\"), qd) %>% et(seq(0,18*24,length.out=100)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days followed by qd for 5 days et <- seq(bid,set_units(1, \"week\"), qd,wait=\"+ii\") %>% et(seq(0,18*24,length.out=100)); rxSolve(m1, et) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"repeating-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Repeating event tables","title":"Easy rxode2 Event Tables","text":"can event table can repeat etRep rep. example 4 rounds 2 weeks QD therapy 1 week therapy can simply specified: simplified way use sequence event tables. Therefore, many options still apply; samples cleared unless use samples=\"use\", time event tables least inter-dose interval. can adjust timing wait option.","code":"qd <-et(timeUnits = \"hr\") %>% et(amt=10000, ii=24, until=set_units(2, \"weeks\"), cmt=\"depot\") et <- rep(qd, times=4, wait=set_units(1,\"weeks\")) %>% add.sampling(set_units(seq(0, 12.5,by=0.005),weeks)) rxSolve(m1, et) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"combining-event-tables-with-rbind","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Combining event tables with rbind","title":"Easy rxode2 Event Tables","text":"may combine event tables rbind. consider event times combining event tables, keeps times. space event tables waiting period, also consider inter-dose interval. Using previous seq can clearly see difference. sequence: bind together rbind Still waiting period applies (consider inter-dose interval) can also bind tables together make ID event table unique; can good combine cohorts different expected dosing sampling times. requires id=\"unique\" option; Using first example shows different case:","code":"## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) et <- seq(bid,qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days et <- rbind(bid,qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) et <- rbind(bid,wait=set_units(10,days),qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days et <- etRbind(bid,qd, id=\"unique\") %>% et(seq(0,150,length.out=500)); library(ggplot2) rxSolve(m1, et) %>% plot(C2) + facet_wrap( ~ id)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"event-tables-in-rstudio-notebooks","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Event tables in Rstudio Notebooks","title":"Easy rxode2 Event Tables","text":"addition output console shown examples, Rstudio notebook output different can seen following screenshots; first screenshot shows event table looks evaluating Rstduio notebook simple dataframe allows page contents. click first box Rstudio notebook output, notes event table: ## Expanding events Event tables can expanded contain addl data item, like following example: can expand events addl items $expand() etExpand(ev): first, etExpand(ev) expands event table without modifying original data frame: can see addl events expanded, however original data frame remained intact: use ev$expand() modify ev object. similar object-oriented method:","code":"ev <- et() %>% et(dose=50, ii=8, until=48) ev #> -- EventTable with 1 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> #> 1 0 50 8 6 1:Dose (Add) etExpand(ev) #> -- EventTable with 7 records -- #> 7 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 7 x 4 #> time amt ii evid #> #> 1 0 50 0 1:Dose (Add) #> 2 8 50 0 1:Dose (Add) #> 3 16 50 0 1:Dose (Add) #> 4 24 50 0 1:Dose (Add) #> 5 32 50 0 1:Dose (Add) #> 6 40 50 0 1:Dose (Add) #> 7 48 50 0 1:Dose (Add) print(ev) #> -- EventTable with 1 records -- #> 1 dosing records (see $get.dosing(); add with add.dosing or et) #> 0 observation times (see $get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with $expand(); or etExpand() #> -- First part of : -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> #> 1 0 50 8 6 1:Dose (Add) ev$expand() ev #> -- EventTable with 7 records -- #> 7 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 7 x 4 #> time amt ii evid #> #> 1 0 50 0 1:Dose (Add) #> 2 8 50 0 1:Dose (Add) #> 3 16 50 0 1:Dose (Add) #> 4 24 50 0 1:Dose (Add) #> 5 32 50 0 1:Dose (Add) #> 6 40 50 0 1:Dose (Add) #> 7 48 50 0 1:Dose (Add)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"rxode2-event-tables","dir":"Articles","previous_headings":"","what":"rxode2 event tables","title":"rxode2 Event Types","text":"general, rxode2 event tables follow NONMEM dataset convention exceptions: may turn compartment negative compartment number “-cmt” cmt compartment name. compartment data item (cmt) can still number, number compartment defined appearance compartment name model. can tedious count, can specify compartment numbers easier using cmt(cmtName) beginning model. Bioavailability changes change rate infusion since dur/amt fixed input data. Similarly, specifying rate/amt infusion, bioavailability change infusion duration since rate/amt fixed input data. infrequent NONMEM columns supported: pcmt, call. evid=5 replace event; replaces value compartment value specified amt column. equivalent deSolve=replace. evid=6 multiply event; multiplies value compartment value specified amt column. equivalent deSolve=multiply. evid=7 transit compartment model/phantom event. puts dose dose() function calculates time since last dose tad() doesn’t actually put dose compartment. allows transit() function easily apply compartment. legal entries data table: notes: evid can classic RxODE (described ) NONMEM-style evid described . NONMEM’s DV required; rxode2 ODE solving framework. NONMEM’s MDV required, since captured EVID. Instead NONMEM-compatible data, can accept deSolve compatible data-frames. returning rxode2 solved data-set additional event ids (EVID) may see depending solving options: EVID = -1 modeled rate ends (corresponds rate = -1) EVID = -2 modeled duration ends (corresponds rate=-2) EVID = -10 rate specified zero-order infusion ends (corresponds rate > 0) EVID = -20 duration specified zero-order infusion ends (corresponds dur > 0) EVID = 101, 102, 103,... correspond 1, 2, 3, … modeled time (mtime). can accessed solving option combination addDosing=TRUE subsetNonmem=FALSE. want see classic EVID equivalents can use addDosing=NA. illustrate event types use model original rxode2 tutorial.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## Model from rxode2 tutorial m1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"bolusadditive-doses","dir":"Articles","previous_headings":"","what":"Bolus/Additive Doses","title":"rxode2 Event Types","text":"bolus dose default type dose rxode2 requires amt/dose. Note uses convenience function et() described rxode2 event tables","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 2 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev) %>% plot(C2) + xlab(\"Time\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"infusion-doses","dir":"Articles","previous_headings":"","what":"Infusion Doses","title":"rxode2 Event Types","text":"different type infusions rxode2 supports: Constant Rate Infusion (rate) Constant Duration Infusion (dur) Estimated Rate Infusion Estimated Duration Infusion","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"constant-infusion-in-terms-of-duration-and-rate","dir":"Articles","previous_headings":"Infusion Doses","what":"Constant Infusion (in terms of duration and rate)","title":"rxode2 Event Types","text":"next type event infusion; two ways specify infusion; first dur keyword. example : can also specified rate component: exception bioavailability changes infusion. case modeling rate, bioavailability decrease, decreases infusion duration, NONMEM. example: Similarly increasing bioavailability increases infusion duration. rationale behavior rate amt specified event table, thing can change bioavailability increase duration infusion. specify amt dur components event table, bioavailability changes affect rate infusion. can see side--side comparison bioavailability changes affecting rate instead duration records following plots:","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, dur=8) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt ii addl evid dur #> [h] [h] [h] #> 1 0 NA NA NA 0:Observation NA #> 2 0 10000 12 2 1:Dose (Add) 8 #> 3 0.242 NA NA NA 0:Observation NA #> 4 0.485 NA NA NA 0:Observation NA #> 5 0.727 NA NA NA 0:Observation NA #> 6 0.970 NA NA NA 0:Observation NA #> 7 1.21 NA NA NA 0:Observation NA #> 8 1.45 NA NA NA 0:Observation NA #> 9 1.70 NA NA NA 0:Observation NA #> 10 1.94 NA NA NA 0:Observation NA #> # i 91 more rows rxSolve(m1, ev) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=10000/8) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 1250 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev) %>% plot(depot, C2) + xlab(\"Time\") rxSolve(m1, ev, c(fdepot=0.25)) %>% plot(depot, C2) + xlab(\"Time\") rxSolve(m1, ev, c(fdepot=1.25)) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, dur=8) %>% et(seq(0, 24, length.out=100)) library(ggplot2) library(patchwork) p1 <- rxSolve(m1, ev, c(fdepot=1.25)) %>% plot(depot) + xlab(\"Time\") + ylim(0,5000) p2 <- rxSolve(m1, ev, c(fdepot=0.25)) %>% plot(depot) + xlab(\"Time\")+ ylim(0,5000) ## Use patchwork syntax to combine plots p1 * p2"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"modeled-rate-and-duration-of-infusion","dir":"Articles","previous_headings":"Infusion Doses","what":"Modeled Rate and Duration of Infusion","title":"rxode2 Event Types","text":"can model duration, equivalent NONMEM’s rate=-2. Similarly, may also model rate. equivalent NONMEM’s rate=-1 rxode2’s event table specifies data item well.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=-2) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 -2:dur 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev, c(durDepot=7)) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=-1) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 -1:rate 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev, c(rateDepot=10000/3)) %>% plot(depot, C2) + xlab(\"Time\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state","dir":"Articles","previous_headings":"","what":"Steady State","title":"rxode2 Event Types","text":"doses solved steady state reached constant inter-dose interval.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, ss=1) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 101 x 5 #> time amt ii evid ss #> [h] [h] #> 1 0 NA NA 0:Observation NA #> 2 0 10000 12 1:Dose (Add) 1 #> 3 0.242 NA NA 0:Observation NA #> 4 0.485 NA NA 0:Observation NA #> 5 0.727 NA NA 0:Observation NA #> 6 0.970 NA NA 0:Observation NA #> 7 1.21 NA NA 0:Observation NA #> 8 1.45 NA NA 0:Observation NA #> 9 1.70 NA NA 0:Observation NA #> 10 1.94 NA NA 0:Observation NA #> # i 91 more rows rxSolve(m1, ev) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state-for-complex-dosing","dir":"Articles","previous_headings":"Steady State","what":"Steady state for complex dosing","title":"rxode2 Event Types","text":"using ss=2 flag, can use super-positioning principle linear kinetics get steady state nonstandard dosing (.e. morning 100 mg vs evening 150 mg). done : Saving state values Resetting states solving system steady state Adding back prior state values can see takes full dose cycle reach true complex steady state dosing.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=24, ss=1) %>% et(time=12, amt=15000, ii=24, ss=2) %>% et(time=24, amt=10000, ii=24, addl=3) %>% et(time=36, amt=15000, ii=24, addl=3) %>% et(seq(0, 64, length.out=500)) library(ggplot2) rxSolve(m1, ev,maxsteps=10000) %>% plot(C2) + annotate(\"rect\", xmin=0, xmax=24, ymin=-Inf, ymax=Inf, alpha=0.2) + annotate(\"text\", x=12.5, y=7, label=\"Initial Steady State Period\") + annotate(\"text\", x=44, y=7, label=\"Steady State AM/PM dosing\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state-for-constant-infusion-or-zero-order-processes","dir":"Articles","previous_headings":"Steady State","what":"Steady state for constant infusion or zero order processes","title":"rxode2 Event Types","text":"last type steady state rxode2 supports steady-state constant infusion rate. can specified way NONMEM, : inter-dose interval ii=0 steady state dose, ie ss=1 Either positive rate (rate>0) estimated rate rate=-1. zero dose, ie amt=0 steady-state constant infusion achieved, infusion turned using record, just like NONMEM. Note rate=-2 model duration infusion doesn’t make much sense since solving infusion steady state. duration specified steady state solution. Also note bioavailability changes steady state infusion also make sense neither change rate duration steady state infusion. Hence modeled bioavailability type dosing event ignored. example: can used PK, can used steady-state disease processes.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=0, ss=1,rate=10000/8) p1 <- rxSolve(m1, ev) %>% plot(C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=200000, rate=10000/8) %>% et(0, 250, length.out=1000) p2 <- rxSolve(m1, ev) %>% plot(C2, eff) library(patchwork) p1 / p2"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"reset-events","dir":"Articles","previous_headings":"","what":"Reset Events","title":"rxode2 Event Types","text":"Reset events implemented evid=3 evid=reset, reset evid=4 reset dose. solving show happens system system reset 6 hours post-dose. can see compartments reset initial values. next dose start dosing cycle . case, whole system reset dose given","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, evid=reset) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 3 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, amt=10000, evid=4) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 3 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"turning-off-compartments","dir":"Articles","previous_headings":"","what":"Turning off compartments","title":"rxode2 Event Types","text":"may also turn compartment, similar reset event. Solving shows system: case, depot turned , depot compartment concentrations set initial values compartment concentrations/levels reset. another dose depot administered depot compartment turned back . Note dose compartment turns back compartment dosed. Hence turn effect compartment, continues another dose depot. turn back compartment, zero-dose compartment evid=2 compartment needed.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-depot\", evid=2) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 6 #> time cmt amt ii addl evid #> [h] [h] #> 1 0 (obs) NA NA NA 0:Observation #> 2 0 (default) 10000 12 3 1:Dose (Add) #> 3 0.242 (obs) NA NA NA 0:Observation #> 4 0.485 (obs) NA NA NA 0:Observation #> 5 0.727 (obs) NA NA NA 0:Observation #> 6 0.970 (obs) NA NA NA 0:Observation #> 7 1.21 (obs) NA NA NA 0:Observation #> 8 1.45 (obs) NA NA NA 0:Observation #> 9 1.70 (obs) NA NA NA 0:Observation #> 10 1.94 (obs) NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-eff\", evid=2) %>% et(seq(0, 24, length.out=100)) rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-eff\", evid=2) %>% et(time=12,cmt=\"eff\",evid=2) %>% et(seq(0, 24, length.out=100)) rxSolve(m1, ev) %>% plot(depot,C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"classic-rxode-evid-values","dir":"Articles","previous_headings":"","what":"Classic RxODE evid values","title":"Classic rxode2 Events","text":"Originally RxODE supported compound event IDs; rxode2 still supports parameters, often useful use normal NONMEM dataset standard used many modeling tools like NONMEM, Monolix nlmixr, described rxode2 types article. Classically, RxODE supported event coding single event id evid described following table. classic EVID concatenate numbers table, infusion compartment 1 10101 infusion compartment 199 119901. EVID = 0 (observations), EVID=2 (type event) EVID=3 supported. Internally EVID=9 non-observation event makes sure system initialized zero; EVID=9 manually set. EVID 10-99 represents modeled time interventions, similar NONMEM’s MTIME. along amount (amt) time columns specify events ODE system. infusions specified EVIDs > 100 amt column represents rate value. Infusion flags 1 2 +amt turn infusion specific compartment -amt turn infusion specific compartment. specify dose/duration place dosing records time duration starts stops. modeled rate/duration infusion flags infusion flag must followed infusion record. number concatenated together form full RxODE event ID, shown following examples:","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"bolus-dose-examples","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Bolus Dose Examples","title":"Classic rxode2 Events","text":"100 bolus dose compartment #1 time 0 100 bolus dose compartment #99 time 0 100 bolus dose compartment #199 time 0","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"infusion-event-examples","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Infusion Event Examples","title":"Classic rxode2 Events","text":"Bolus infusion rate 50 compartment 1 1.5 hr, (modeled bioavailability changes duration infusion) Bolus infusion rate 50 compartment 1 1.5 hr (modeled bioavailability changes rate infusion) Modeled rate amount 50 Modeled duration amount 50","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"steady-state-for-classic-rxode-evid-example","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Steady State for classic RxODE EVID example","title":"Classic rxode2 Events","text":"Steady state dose cmt 1 Steady State super-positioning principle 50 pm 100 dose","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"steady-state-with-lagged-dose-for-classic-rxode-evid","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Steady state with lagged dose for classic RxODE evid","title":"Classic rxode2 Events","text":"Steady state lagged dose bolus dose: time | evid | amt | ii | 0 | 109 | 100 | 24 | 0 | 101 | 100 | 0 | event 109 calculates trough amount steady state passed (ii-lag_time) event 101 applies next steady state dose. Steady state (=2) lagged bolus dose Steady state infusion lag time time | evid | amt | ii | 0 | 10109 | 5 | 24 | 0 | 10108 | -5 | 24 | 0 | 10101 | 5 | | 20 | 10101 | -5 | | case bolus, 10109 event calculates trough concentration ii=24, may (may ) still infusion running. infusion running 10108 event turn infusion appropriate time. infusion completed, 10108 event ignored. next 2 events 10101 represent event times (assuming bioavailability applied).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"turning-off-a-compartment-with-classic-rxode-evid","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Turning off a compartment with classic RxODE EVID","title":"Classic rxode2 Events","text":"Turn first compartment time 12 Event coding rxode2 encoded single event number evid. compartments 100, coded : event 0 observation events. 100*(Compartment Number) + 1 dose captured amt 10000 + 100*(Compartment Number) + 1 infusion rate captured amt column infusion turned subtracting amt evid stop infusion. compartments greater equal 100, 100s place digits transferred 100,000th place digit. doses 99th compartment evid bolus dose 9901 evid infusion 19901. bolus dose 199th compartment evid bolus dose 109901. infusion dosing record 199th compartment 119901.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Introduction to rxode2","text":"rxode2 R package facilitates simulation ODE models R. designed pharmacometrics models mind, can applied generally ODE model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"description-of-rxode2-illustrated-through-an-example","dir":"Articles","previous_headings":"","what":"Description of rxode2 illustrated through an example","title":"Introduction to rxode2","text":"model equations can specified text string, model file R expression. differential algebraic equations permitted. Differential equations specified d/dt(var_name) =. equation can separated semicolon. load rxode2 package compile model: Model parameters may specified ini({}) model block, initial conditions can specified within model cmt(0)= X, like model eff(0) <- 1. may also specify subject variability initial conditions residual error components just like nlmixr2. allows single interface nlmixr2/rxode2 models. Also note, classic rxode2 interface still works just like past (don’t worry breaking code time). fact, can get classic rxode2 model $simulationModel ui object:","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } mod1 <- mod1() # create the ui object (can also use `rxode2(mod1)`) mod1 summary(mod1$simulationModel)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"specify-dosing-and-sampling-in-rxode2","dir":"Articles","previous_headings":"Description of rxode2 illustrated through an example","what":"Specify Dosing and sampling in rxode2","title":"Introduction to rxode2","text":"rxode2 provides simple flexible way specify dosing sampling functions generate event table. First, empty event table generated “et()” function. interface similar NONMEM event tables: can see code, can dose compartment named rxode2 model. slight deviation NONMEM can reduce need compartment renumbering. events can also combined expanded (multi-subject events complex regimens) rbind, c, seq, rep. information creating complex dosing regimens using rxode2 see rxode2 events vignette.","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"solving-odes","dir":"Articles","previous_headings":"Description of rxode2 illustrated through an example","what":"Solving ODEs","title":"Introduction to rxode2","text":"ODE can now solved using rxSolve: returns modified data frame. can see compartment values plot : , Note labels automatically labeled units initial event table. rxode2 extracts units label plot (present).","code":"x <- mod1 %>% rxSolve(ev) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows library(ggplot2) plot(x,C2) + ylab(\"Central Concentration\") plot(x,eff) + ylab(\"Effect\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"prediction-only-models","dir":"Articles","previous_headings":"","what":"Prediction only models","title":"rxode2 additional model types","text":"Prediction models simple create. use rxode2 syntax without ODE systems . simple example one-compartment model. Solving rxode2 models saving simple ODE system, faster course.","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` mod <- function(){ model({ ipre <- 10 * exp(-ke * t) }) } et <- et(seq(0,24,length.out=50)) cmt1 <- rxSolve(mod,et,params=c(ke=0.5)) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ cmt1 ## -- Solved rxode2 object -- ## -- Parameters (x$params): -- ## ke ## 0.5 ## -- Initial Conditions (x$inits): -- ## named numeric(0) ## -- First part of data (object): -- ## # A tibble: 50 x 2 ## time ipre ## ## 1 0 10 ## 2 0.490 7.83 ## 3 0.980 6.13 ## 4 1.47 4.80 ## 5 1.96 3.75 ## 6 2.45 2.94 ## # i 44 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"solved-compartment-models","dir":"Articles","previous_headings":"","what":"Solved compartment models","title":"rxode2 additional model types","text":"Solved models also simple create. simply place linCmt() psuedo-function code. linCmt() function figures type model use based parameter names specified. often, pharmacometric models parameterized terms volume clearances. Clearances specified NONMEM-style names CL, Q, Q1, Q2, etc. distributional clearances CLD, CLD2. Volumes specified Central (VC V), Peripheral/Tissue (VP, VT). translations available, example translations : Another popular parameterization terms micro-constants. rxode2 assumes compartment 1 central compartment. elimination constant specified K, Ke Kel. example translations : last parameterization possible using alpha V //B/C. example translations : linCmt() sleuthing complete, 1, 2 3 compartment model solution used value linCmt(). compartments can dose linear solved system depot central linear absorption constant model ka. Without additional ODEs, compartments numbered depot=1 central=2. absorption constant ka missing, may dose central compartment. Without additional ODEs compartment number central=1. compartments take sort events ODE model can take, discussed rxode2 events vignette. acts ODE model; specify dose depot compartment solve system:","code":"mod <- function() { ini({ kel <- 0.5 V <- 1 }) model({ ipre <- linCmt(V, kel) }) } et <- et(amt=10,time=0,cmt=depot) %>% et(seq(0,24,length.out=50)) cmt1 <- rxSolve(mod,et) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ cmt1 ## -- Solved rxode2 object -- ## -- Parameters (x$params): -- ## kel V ## 0.5 1.0 ## -- Initial Conditions (x$inits): -- ## named numeric(0) ## -- First part of data (object): -- ## # A tibble: 50 x 2 ## time ipre ## ## 1 0 10 ## 2 0.490 7.83 ## 3 0.980 6.13 ## 4 1.47 4.80 ## 5 1.96 3.75 ## 6 2.45 2.94 ## # i 44 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"mixing-solved-systems-and-odes","dir":"Articles","previous_headings":"","what":"Mixing Solved Systems and ODEs","title":"rxode2 additional model types","text":"addition pure ODEs, may mix solved systems ODEs. prior 2-compartment indirect response model can simplified linCmt() function: allows indirect response model assign 2-compartment model C2 variable used indirect response model. mixing solved systems ODEs, solved system’s compartment always last compartment. solved system technically isn’t compartment solved. Adding dosing compartment end interfere actual ODE solved. Therefore,two-compartment indirect response model, effect compartment compartment #1 PK dosing compartment depot compartment #2. compartment model requires new event table since compartment number changed: can solved following command: Note solving require specifying effect compartment initial condition 1. Rather, already pre-specified eff(0)=1. can solved different initial conditions easily: rxode2 detective also require specify variables linCmt() function already defined block. Therefore, following function also work solve system. Note specify parameters solving system since built model, can override parameters:","code":"library(rxode2) ## Setup example model mod1 <-function() { model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff }) } ## Seup parameters and initial conditions theta <- c(KA=2.94E-01, CL=1.86E+01, V2=4.02E+01, # central Q=1.05E+01, V3=2.97E+02, # peripheral Kin=1, Kout=1, EC50=200) # effects inits <- c(eff=1) ## Setup dosing event information ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9, ii=12) %>% et(amt=20000, addl=4, time=120, ii=24) %>% add.sampling(0:240) ## Setup a mixed solved/ode system: mod2 <- function() { model({ ## the order of variables do not matter, the type of compartmental ## model is determined by the parameters specified. C2 = linCmt(KA, CL, V2, Q, V3); eff(0) = 1 ## This specifies that the effect compartment starts at 1. d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }) } ev <- et(amountUnits='mg', timeUnits='hours') %>% et(amt=10000, addl=9, ii=12, cmt=2) %>% et(amt=20000, addl=4, time=120, ii=24, cmt=2) %>% et(0:240) x <- mod2 %>% solve(theta, ev) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows x <- mod2 %>% solve(theta, ev,c(eff=2)) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 2 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 2 ## 2 1 121. 1.93 ## 3 2 60.3 1.67 ## 4 3 31.0 1.41 ## 5 4 17.0 1.23 ## 6 5 10.2 1.13 ## # i 235 more rows mod3 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ # Since the parameters are in the ini block, put them in linCmt so # that the model is detected correctly C2 <- linCmt(KA, CL, V2, Q, V3) eff(0) <- 1 ## This specifies that the effect compartment starts at 1. d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; }) } x <- mod3 %>% solve(ev) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows x <- mod3 %>% solve(c(KA=10),ev) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 10.0 18.6 40.2 10.5 297.0 1.0 1.0 200.0 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"nesting-in-rxode2","dir":"Articles","previous_headings":"","what":"Nesting in rxode2","title":"Nesting levels in rxode2","text":"one level nesting possible rxode2; example using following uncertainties sources variability:","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"event-table","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Event table","title":"Nesting levels in rxode2","text":"event table contains nesting variables: inv: investigator id id: subject id eye: eye id (left right) occ: occasion","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(seq(0, 240, by=4)) %>% # Assumes sampling when there is no dosing information et(seq(0, 240, by=4) + 0.1) %>% ## adds 0.1 for separate eye et(id=1:20) %>% ## Add an occasion per dose mutate(occ=cumsum(!is.na(amt))) %>% mutate(occ=ifelse(occ == 0, 1, occ)) %>% mutate(occ=2- occ %% 2) %>% mutate(eye=ifelse(round(time) == time, 1, 2)) %>% mutate(inv=ifelse(id < 10, 1, 2)) %>% as_tibble -> ev"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"rxode2-model","dir":"Articles","previous_headings":"Nesting in rxode2","what":"rxode2 model","title":"Nesting levels in rxode2","text":"creates rxode2 model multi-level nesting. Note variables inv.Cl, inv.Ka, eta.Cl etc; need one variable level nesting.","code":"mod <- rxode2({ ## Clearance with individuals eff(0) = 1 C2 = centr/V2*(1+prop.sd) C3 = peri/V3 CL = TCl*exp(eta.Cl + eye.Cl + iov.Cl + inv.Cl) KA = TKA * exp(eta.Ka + eye.Ka + iov.Cl + inv.Ka) d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff ef0 = eff + add.sd }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"uncertainty-in-model-parameters","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Uncertainty in Model parameters","title":"Nesting levels in rxode2","text":"","code":"theta <- c(\"TKA\"=0.294, \"TCl\"=18.6, \"V2\"=40.2, \"Q\"=10.5, \"V3\"=297, \"Kin\"=1, \"Kout\"=1, \"EC50\"=200) ## Creating covariance matrix tmp <- matrix(rnorm(8^2), 8, 8) tMat <- tcrossprod(tmp, tmp) / (8 ^ 2) dimnames(tMat) <- list(names(theta), names(theta)) tMat #> TKA TCl V2 Q V3 #> TKA 0.173571236 -0.1003204607 0.038185010 -0.004108928 -0.095032973 #> TCl -0.100320461 0.2195710868 -0.043849095 0.013295549 -0.007477895 #> V2 0.038185010 -0.0438490948 0.129784612 -0.017270432 -0.038004762 #> Q -0.004108928 0.0132955493 -0.017270432 0.022145634 0.020376451 #> V3 -0.095032973 -0.0074778948 -0.038004762 0.020376451 0.165568340 #> Kin -0.040867119 -0.0492597458 -0.003056722 -0.033468634 -0.003021883 #> Kout 0.035469225 0.0275087955 0.033725901 0.027668205 0.005497301 #> EC50 0.026158042 0.0009434711 0.039426946 -0.036283167 -0.093134292 #> Kin Kout EC50 #> TKA -0.040867119 0.035469225 0.0261580416 #> TCl -0.049259746 0.027508796 0.0009434711 #> V2 -0.003056722 0.033725901 0.0394269465 #> Q -0.033468634 0.027668205 -0.0362831667 #> V3 -0.003021883 0.005497301 -0.0931342922 #> Kin 0.226735493 -0.083447793 0.0659884544 #> Kout -0.083447793 0.117195570 -0.0291684598 #> EC50 0.065988454 -0.029168460 0.0928611407"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"nesting-variability","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Nesting Variability","title":"Nesting levels in rxode2","text":"specify multiple levels nesting, can specify nested lotri matrix; using approach use condition operator | specify variable nesting occurs ; Bayesian simulation need specify much information parameter; rxode2 nu parameter. case: - id, nu=100 model came 100 subjects - eye, nu=200 model came 200 eyes - occ, nu=200 model came 200 occasions - inv, nu=10 model came 10 investigators specify lotri can use | var(nu=X), :","code":"omega <- lotri(lotri(eta.Cl ~ 0.1, eta.Ka ~ 0.1) | id(nu=100), lotri(eye.Cl ~ 0.05, eye.Ka ~ 0.05) | eye(nu=200), lotri(iov.Cl ~ 0.01, iov.Ka ~ 0.01) | occ(nu=200), lotri(inv.Cl ~ 0.02, inv.Ka ~ 0.02) | inv(nu=10)) omega #> $id #> eta.Cl eta.Ka #> eta.Cl 0.1 0.0 #> eta.Ka 0.0 0.1 #> #> $eye #> eye.Cl eye.Ka #> eye.Cl 0.05 0.00 #> eye.Ka 0.00 0.05 #> #> $occ #> iov.Cl iov.Ka #> iov.Cl 0.01 0.00 #> iov.Ka 0.00 0.01 #> #> $inv #> inv.Cl inv.Ka #> inv.Cl 0.02 0.00 #> inv.Ka 0.00 0.02 #> #> Properties: nu"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"unexplained-variability","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Unexplained variability","title":"Nesting levels in rxode2","text":"last piece variability specify unexplained variability","code":"sigma <- lotri(prop.sd ~ .25, add.sd~ 0.125)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"solving-the-problem","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Solving the problem","title":"Nesting levels in rxode2","text":"multiple investigators study; investigator number individuals enrolled site. rxode2 automatically determines number investigators simulate effect investigator. output, inv.Cl(inv==1) inv.Cl investigator 1, inv.Cl(inv==2) inv.Cl investigator 2, etc. inv.Cl(inv==1), inv.Cl(inv==2), etc simulated study combined form investigator variability. equation form represent following: look simulated parameters can see inv.Cl(inv==1) inv.Cl(inv==2) s$params; study: eye variability occasion variability individual simulates number variables become eye occasion variability; case eye: look simulation variables (ie eye.Cl(eye==1), eye.Cl(eye==2), etc) change individual combined make eye variability occasion variability can seen pharamcometric models.","code":"s <- rxSolve(mod, theta, ev, thetaMat=tMat, omega=omega, sigma=sigma, sigmaDf=400, nStud=400) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> unhandled error message: EE:[lsoda] 70000 steps taken before reaching tout #> @(lsoda.c:754 #> Warning: some ID(s) could not solve the ODEs correctly; These values are #> replaced with 'NA' print(s) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> # A tibble: 8,000 x 24 #> sim.id id `inv.Cl(inv==1)` `inv.Cl(inv==2)` `inv.Ka(inv==1)` #> #> 1 1 1 0.00900 -0.117 0.312 #> 2 1 2 0.00900 -0.117 0.312 #> 3 1 3 0.00900 -0.117 0.312 #> 4 1 4 0.00900 -0.117 0.312 #> 5 1 5 0.00900 -0.117 0.312 #> 6 1 6 0.00900 -0.117 0.312 #> 7 1 7 0.00900 -0.117 0.312 #> 8 1 8 0.00900 -0.117 0.312 #> 9 1 9 0.00900 -0.117 0.312 #> 10 1 10 0.00900 -0.117 0.312 #> # i 7,990 more rows #> # i 19 more variables: `inv.Ka(inv==2)` , `eye.Cl(eye==1)` , #> # `eye.Cl(eye==2)` , `eye.Ka(eye==1)` , `eye.Ka(eye==2)` , #> # `iov.Cl(occ==1)` , `iov.Cl(occ==2)` , `iov.Ka(occ==1)` , #> # `iov.Ka(occ==2)` , V2 , V3 , TCl , eta.Cl , #> # TKA , eta.Ka , Q , Kin , Kout , EC50 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> #> Simulation with uncertainty in: #> * parameters ($thetaMat for changes) #> * omega matrix ($omegaList) #> #> -- First part of data (object): -- #> # A tibble: 976,000 x 21 #> sim.id id time inv.Cl inv.Ka eye.Cl eye.Ka iov.Cl iov.Ka C2 C3 #> [h] #> 1 1 1 0 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 0 0 #> 2 1 1 0.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 8.04 0.0108 #> 3 1 1 4 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 55.4 5.58 #> 4 1 1 4.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 23.2 5.69 #> 5 1 1 8 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 19.6 7.95 #> 6 1 1 8.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 20.0 7.97 #> # i 975,994 more rows #> # i 10 more variables: CL , KA , ef0 , depot , centr , #> # peri , eff , occ , eye , inv inv.Cl = (inv == 1) * `inv.Cl(inv==1)` + (inv == 2) * `inv.Cl(inv==2)` print(head(s$params)) #> sim.id id inv.Cl(inv==1) inv.Cl(inv==2) inv.Ka(inv==1) inv.Ka(inv==2) #> 1 1 1 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 2 1 2 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 3 1 3 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 4 1 4 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 5 1 5 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 6 1 6 0.008995575 -0.1165083 0.3118205 -0.001926179 #> eye.Cl(eye==1) eye.Cl(eye==2) eye.Ka(eye==1) eye.Ka(eye==2) iov.Cl(occ==1) #> 1 -0.33023666 0.079190835 -0.05471051 0.18487157 0.037021761 #> 2 -0.42211135 -0.006773841 -0.15399939 0.22463048 -0.007762485 #> 3 -0.05128596 0.123504458 0.18243012 0.13361259 -0.168921159 #> 4 -0.06360621 0.340443016 0.65606292 0.04807945 0.157027939 #> 5 0.08009126 -0.027627640 0.06662396 -0.05838949 -0.226341946 #> 6 -0.11937190 0.090540884 -0.17320340 0.02039840 -0.211648032 #> iov.Cl(occ==2) iov.Ka(occ==1) iov.Ka(occ==2) V2 V3 TCl #> 1 -0.19726803 0.13932112 0.088763868 40.26476 296.4748 19.25043 #> 2 0.04555116 0.07716277 0.049148937 40.26476 296.4748 19.25043 #> 3 0.17916513 0.08347085 -0.002990168 40.26476 296.4748 19.25043 #> 4 -0.13444417 0.24736740 -0.077647794 40.26476 296.4748 19.25043 #> 5 0.02049190 -0.09568733 0.054658457 40.26476 296.4748 19.25043 #> 6 0.12619350 -0.01547841 0.040206608 40.26476 296.4748 19.25043 #> eta.Cl TKA eta.Ka Q Kin Kout EC50 #> 1 0.09788109 0.2354877 -0.21526790 10.43157 0.9256189 1.044937 200.3679 #> 2 0.33302598 0.2354877 -0.01028112 10.43157 0.9256189 1.044937 200.3679 #> 3 0.08504325 0.2354877 0.37253705 10.43157 0.9256189 1.044937 200.3679 #> 4 0.16521678 0.2354877 -0.01859974 10.43157 0.9256189 1.044937 200.3679 #> 5 0.53131380 0.2354877 -0.37109644 10.43157 0.9256189 1.044937 200.3679 #> 6 -0.30786713 0.2354877 0.14897588 10.43157 0.9256189 1.044937 200.3679 print(head(s$params %>% filter(sim.id == 2))) #> sim.id id inv.Cl(inv==1) inv.Cl(inv==2) inv.Ka(inv==1) inv.Ka(inv==2) #> 1 2 1 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 2 2 2 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 3 2 3 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 4 2 4 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 5 2 5 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 6 2 6 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> eye.Cl(eye==1) eye.Cl(eye==2) eye.Ka(eye==1) eye.Ka(eye==2) iov.Cl(occ==1) #> 1 -0.25102634 0.1354374 -0.135230741 -0.01605664 0.081212198 #> 2 -0.24832622 0.2233348 -0.380770273 -0.37101991 0.207985292 #> 3 0.24081384 -0.3826770 0.133361609 -0.32496203 -0.099983807 #> 4 -0.11021791 0.3655308 0.009423897 0.08736599 -0.002580804 #> 5 0.21155058 0.3626918 0.194977611 -0.19452347 0.058392202 #> 6 0.03663028 -0.1003754 0.068047203 0.32368023 0.167658084 #> iov.Cl(occ==2) iov.Ka(occ==1) iov.Ka(occ==2) V2 V3 TCl #> 1 -0.06556217 -0.032678168 -0.061277262 40.21091 296.6424 18.86433 #> 2 -0.05016896 0.130258486 -0.103721118 40.21091 296.6424 18.86433 #> 3 0.06144127 -0.262726137 -0.104186144 40.21091 296.6424 18.86433 #> 4 0.03954265 -0.037289852 -0.021344468 40.21091 296.6424 18.86433 #> 5 0.12713682 -0.007530921 0.081238197 40.21091 296.6424 18.86433 #> 6 -0.02811353 0.026801132 -0.002702762 40.21091 296.6424 18.86433 #> eta.Cl TKA eta.Ka Q Kin Kout EC50 #> 1 0.19368101 0.5686675 0.26184170 10.54673 0.5434136 1.323825 200.09 #> 2 -0.16262369 0.5686675 0.12969487 10.54673 0.5434136 1.323825 200.09 #> 3 0.22164455 0.5686675 0.24501105 10.54673 0.5434136 1.323825 200.09 #> 4 0.05997662 0.5686675 0.03059399 10.54673 0.5434136 1.323825 200.09 #> 5 0.45691421 0.5686675 -0.20098716 10.54673 0.5434136 1.323825 200.09 #> 6 -0.19943300 0.5686675 -0.36846082 10.54673 0.5434136 1.323825 200.09 eye.Cl = (eye == 1) * `eye.Cl(eye==1)` + (eye == 2) * `eye.Cl(eye==2)`"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"setting-up-the-rxode2-model-for-the-pipeline","dir":"Articles","previous_headings":"","what":"Setting up the rxode2 model for the pipeline","title":"rxode2 in a pipeline","text":"example show use rxode2 simple pipeline. can start model can used different simulation workflows rxode2 can handle: tumor growth model described Ribba 2012. case, compiled model R object Ribba2012, though rxode2 simulation pipeline, assign compiled model object, though think makes sense.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` Ribba2012 <- function() { ini({ k = 100 tkde = 0.24 eta.tkde = 0 tkpq = 0.0295 eta.kpq = 0 tkqpp = 0.0031 eta.kqpp = 0 tlambdap = 0.121 eta.lambdap = 0 tgamma = 0.729 eta.gamma = 0 tdeltaqp = 0.00867 eta.deltaqp = 0 prop.sd <- 0 tpt0 = 7.13 eta.pt0 = 0 tq0 = 41.2 eta.q0 = 0 }) model({ kde ~ tkde*exp(eta.tkde) kpq ~ tkpq * exp(eta.kpq) kqpp ~ tkqpp * exp(eta.kqpp) lambdap ~ tlambdap*exp(eta.lambdap) gamma ~ tgamma*exp(eta.gamma) deltaqp ~ tdeltaqp*exp(eta.deltaqp) d/dt(c) = -kde * c d/dt(pt) = lambdap * pt *(1-pstar/k) + kqpp*qp - kpq*pt - gamma*c*kde*pt d/dt(q) = kpq*pt -gamma*c*kde*q d/dt(qp) = gamma*c*kde*q - kqpp*qp - deltaqp*qp ## initial conditions pt0 ~ tpt0*exp(eta.pt0) q0 ~ tq0*exp(eta.q0) pt(0) = pt0 q(0) = q0 pstar <- (pt+q+qp) pstar ~ prop(prop.sd) }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-one-event-table","dir":"Articles","previous_headings":"","what":"Simulating one event table","title":"rxode2 in a pipeline","text":"Simulating single event table quite simple: pipe rxode2 simulation object event table object et(). events completely specified, simply solve ODE system rxSolve(). case can pipe output plot() conveniently view results. pt (Proliferative Tissue), q (quiescent tissue) qp (DNA-Damaged quiescent tissue) pstar (total tumor tissue)","code":"Ribba2012 %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve() %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-with-between-subject-variability","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulating with between subject variability","title":"rxode2 in a pipeline","text":"next sort simulation may useful simulating multiple patients treatments. case, use omega matrix specified paper: information, easy simulate 3 subjects model-based parameters: Note two different things added simulation: - nSub specify many subjects model - omega specify subject variability.","code":"## Add CVs from paper for individual simulation ## Uses exact formula: lognCv = function(x){log((x/100)^2+1)} library(lotri) ## Now create omega matrix ## I'm using lotri to quickly specify names/diagonals omega <- lotri(eta.pt0 ~ lognCv(94), eta.q0 ~ lognCv(54), eta.lambdap ~ lognCv(72), eta.kqp ~ lognCv(76), eta.kqpp ~ lognCv(97), eta.deltaqp ~ lognCv(115), eta.tkde ~ lognCv(70)) omega #> eta.pt0 eta.q0 eta.lambdap eta.kqp eta.kqpp eta.deltaqp #> eta.pt0 0.6331848 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.q0 0.0000000 0.2558818 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.lambdap 0.0000000 0.0000000 0.4176571 0.0000000 0.0000000 0.0000000 #> eta.kqp 0.0000000 0.0000000 0.0000000 0.4559047 0.0000000 0.0000000 #> eta.kqpp 0.0000000 0.0000000 0.0000000 0.0000000 0.6631518 0.0000000 #> eta.deltaqp 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.8426442 #> eta.tkde 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.tkde #> eta.pt0 0.0000000 #> eta.q0 0.0000000 #> eta.lambdap 0.0000000 #> eta.kqp 0.0000000 #> eta.kqpp 0.0000000 #> eta.deltaqp 0.0000000 #> eta.tkde 0.3987761 set.seed(1089) rxSetSeed(1089) Ribba2012 %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, omega=omega) %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> Warning: multi-subject simulation without without 'omega'"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulation-with-unexplained-variability","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulation with unexplained variability","title":"rxode2 in a pipeline","text":"can even add unexplained variability quite easily: case added sigma matrix unexplained variability pstar total tumor tissue. can even simulate uncertainty theta omega sigma values wish.","code":"Ribba2012 %>% # Use rxode2 ini(prop.sd=0.05) %>% # change variability et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, omega=omega) %>% plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' # note that sim is the simulated pstar since this is simulated from the # model with a nlmixr2 endpoint"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulation-with-uncertainty-in-all-the-parameters-by-matrices","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulation with uncertainty in all the parameters (by matrices)","title":"rxode2 in a pipeline","text":"assume parameters came 95 subjects 8 observations apiece, degrees freedom omega matrix 95, degrees freedom sigma matrix 95*8=760 95 items informed omega matrix, 760 items informed sigma matrix. Often simulations full covariance matrix fixed effect parameters. case, matrix, specified thetaMat. full covariance matrix, can information diagonal elements covariance matrix model paper. can converted follows: Now thetaMat represent uncertainty theta matrix, well pieces simulation. Typically can put information simulation thetaMat matrix. large variability theta easy sample negative rate constant, make sense. example: correct problems simply need use truncated multivariate normal specify reasonable ranges parameters. theta specified thetaLower thetaUpper. Similar parameters matrices: omegaLower, omegaUpper, sigmaLower sigmaUpper. may named vectors, one numeric value, numeric vector matching number parameters specified thetaMat matrix. case simulation simply modified thetaLower=0 make sure rates positive:","code":"Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, nStud=3, omega=omega, dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' rseVar <- function(est, rse){ return(est*rse/100)^2 } thetaMat <- lotri(tpt0 ~ rseVar(7.13,25), tq0 ~ rseVar(41.2,7), tlambdap ~ rseVar(0.121, 16), tkqpp ~ rseVar(0.0031, 35), tdeltaqp ~ rseVar(0.00867, 21), tgamma ~ rseVar(0.729, 37), tkde ~ rseVar(0.24, 33) ) thetaMat #> tpt0 tq0 tlambdap tkqpp tdeltaqp tgamma tkde #> tpt0 1.7825 0.000 0.00000 0.000000 0.0000000 0.00000 0.0000 #> tq0 0.0000 2.884 0.00000 0.000000 0.0000000 0.00000 0.0000 #> tlambdap 0.0000 0.000 0.01936 0.000000 0.0000000 0.00000 0.0000 #> tkqpp 0.0000 0.000 0.00000 0.001085 0.0000000 0.00000 0.0000 #> tdeltaqp 0.0000 0.000 0.00000 0.000000 0.0018207 0.00000 0.0000 #> tgamma 0.0000 0.000 0.00000 0.000000 0.0000000 0.26973 0.0000 #> tkde 0.0000 0.000 0.00000 0.000000 0.0000000 0.00000 0.0792 Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=2, nStud=2, omega=omega, thetaMat=thetaMat, dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> unhandled error message: EE:[lsoda] 70000 steps taken before reaching tout #> @(lsoda.c:750 #> Warning message: #> In rxSolve_(object, .ctl, .nms, .xtra, params, events, inits, setupOnly = .setupOnly) : #> Some ID(s) could not solve the ODEs correctly; These values are replaced with NA. Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=2, nStud=2, omega=omega, thetaMat=thetaMat, thetaLower=0, # Make sure the rates are reasonable dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega'"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"summarizing-the-simulation-output","dir":"Articles","previous_headings":"","what":"Summarizing the simulation output","title":"rxode2 in a pipeline","text":"easy use dplyr data.table perform summary simulations, rxode2 also provides ability confint function.","code":"## This takes a little more time; Most of the time is the summary ## time. sim0 <- Ribba2012 %>% # Use rxode2 ini(prop.sd=0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=10, nStud=10, omega=omega, thetaMat=thetaMat, thetaLower=0, # Make sure the rates are reasonable dfSub=760, dfObs=95) %>% # Solve the simulation confint(c(\"pt\",\"q\",\"qp\",\"sim\"),level=0.90); # Create Simulation intervals #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done sim0 %>% plot() # Plot the simulation intervals"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-from-a-data-frame-of-parameters","dir":"Articles","previous_headings":"Summarizing the simulation output","what":"Simulating from a data-frame of parameters","title":"rxode2 in a pipeline","text":"simulation matrices can useful fast way simulate information, sometimes may want simulate complex scenarios. instance, may reason believe tkde needs tlambdap, therefore need simulated carefully. can generate data frame whatever way want. internal method simulating new parameters exported .","code":"library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union Ribba2012 <- Ribba2012() # Convert to classic rxode2 model with ini attached r <- Ribba2012$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ pars <- rxInits(r) pars <- pars[regexpr(\"(prop|eta)\",names(pars)) == -1] print(pars) #> k tkde tkpq tkqpp tlambdap tgamma #> 1.00e+02 2.40e-01 2.95e-02 3.10e-03 1.21e-01 7.29e-01 #> tdeltaqp tpt0 tq0 rxerr.pstar #> 8.67e-03 7.13e+00 4.12e+01 1.00e+00 ## This is the exported method for simulation of Theta/Omega internally in rxode2 df <- rxSimThetaOmega(params=pars, omega=omega,dfSub=760, thetaMat=thetaMat, thetaLower=0, nSub=60,nStud=60) %>% filter(tkde > tlambdap) %>% as_tibble() ## You could also simulate more and bind them together to a data frame. print(df) #> # A tibble: 2,040 × 17 #> k tkde tkpq tkqpp tlambdap tgamma tdeltaqp tpt0 tq0 rxerr.pstar #> #> 1 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 2 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 3 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 4 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 5 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 6 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 7 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 8 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 9 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 10 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> # ℹ 2,030 more rows #> # ℹ 7 more variables: eta.pt0 , eta.q0 , eta.lambdap , #> # eta.kqp , eta.kqpp , eta.deltaqp , eta.tkde ## Quick check to make sure that all the parameters are OK. all(df$tkde>df$tlambdap) #> [1] TRUE sim1 <- r %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(df) ## Note this information looses information about which ID is in a ## \"study\", so it summarizes the confidence intervals by dividing the ## subjects into sqrt(#subjects) subjects and then summarizes the ## confidence intervals sim2 <- sim1 %>% confint(c(\"pt\",\"q\",\"qp\",\"sim\"),level=0.90); # Create Simulation intervals #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done save(sim2, file = file.path(system.file(package = \"rxode2\"), \"pipeline-sim2.rds\"), version = 2) sim2 %>% plot()"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"setting-up-model-for-plotting-explanation","dir":"Articles","previous_headings":"Plotting in rxode2","what":"Setting up model for plotting explanation","title":"Plotting rxode2 models","text":"first step explain rxode2 model plots setup: rxode2 model event table solved object","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` ## Model from rxode2 tutorial m1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr / V2 C3 <- peri / V3 d/dt(depot) <- -KA * depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 d/dt(peri) <- Q * C2 - Q * C3 d/dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff eff(0) <- 1 }) } ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, ii = 12, until = 24) %>% et(seq(0, 24, length.out = 100)) s <- rxSolve(m1, ev)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"default-rxode2-plot","dir":"Articles","previous_headings":"Plotting in rxode2","what":"Default rxode2 plot","title":"Plotting rxode2 models","text":"default plot rxode2 plot time versus state calculated lhs values: Things note: First, plots actually ggplot2 plots can modified standard ggplot2 grammar graphics Also note plot method rxSolve objects can currently use arguments default plot method: log character string contains \"x\" x axis logarithmic, \"y\" y axis logarithmic \"xy\" \"yx\" axes logarithmic. available, use xgxr xgx_scale_x_log10() xgx_scale_y_log10() functions. xlab bit different simply supplying x-label ggplot2, retain unit information originally supplied event table. Also note, available, unit information used used meaningful ticks xgx_scale_x_time_units() ylab supplies y label following currently unsupported: . type b. xlim c. ylim d. main e. sub f. ann g. axes","code":"plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"subsetting-plots","dir":"Articles","previous_headings":"","what":"Subsetting plots","title":"Plotting rxode2 models","text":"interesting, often useful subset plots based values interested ; example, interesting plot eff C2. , simply specify interesting items plot function. instance:","code":"plot(s, C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"semi-log-plots","dir":"Articles","previous_headings":"","what":"Semi-log plots","title":"Plotting rxode2 models","text":"Semi-log plots PK concentrations common; simply need use log=\"y\" uses xgx_scale_y_log10() available clearly show semi-log nature plot.","code":"plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"plots-with-multi-subject-plots","dir":"Articles","previous_headings":"","what":"Plots with multi-subject plots","title":"Plotting rxode2 models","text":"multi-subject plots can easily plot applying principles . illustrate plot, lets expand event table include plot 4 subjects lognormal random variability subjects; complete, may plot method: Notice colored individual labeled legend. interested concentration, produces similar plot: Notice plot individual labeled attached id let know individual comes . done ggrepel available, otherwise legend retained.","code":"# Setup the new problem m2 <- function() { ini({ KA <- 2.94E-01 TCL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 eta.Cl ~ 0.4^2 }) model({ CL <- TCL * exp(eta.Cl) C2 <- centr / V2 C3 <- peri / V3 d/dt(depot) <- -KA * depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 d/dt(peri) <- Q * C2 - Q * C3 d/dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff eff(0) <- 1 }) } # Create the event table ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, until = units::set_units(3, days), ii = 12) %>% # loading doses et(seq(0, 48, length.out = 200)) %>% et(id = 1:4) s <- rxSolve(m2, ev) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ plot(s, C2, eff) plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"multi-subject-plots-with-large-number-of-subjects","dir":"Articles","previous_headings":"Plots with multi-subject plots","what":"Multi-subject plots with large number of subjects","title":"Plotting rxode2 models","text":"can get bit much many subjects solved (example lets simulate 100) case, individuals put plot transparent grayscale plot pane. allows places subjects present darker. number individuals plots switch legend grayscale controlled changing options rxode2.spaghetti. ie. options(rxode2.spaghetti=7). 7 individuals default value plotting changes individual grayscale spaghetti plots. can also create confidence interval simulations confint: plot plot","code":"ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, until = units::set_units(3, days), ii = 12) %>% # loading doses et(seq(0, 48, length.out = 200)) %>% et(id = 1:100) # 100 subjects s <- rxSolve(m2, ev) plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values. s2 <- confint(s, parm=\"C2\") ## ! in order to put confidence bands around the intervals, you need at least 2500 simulations ## summarizing data...done plot(s2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-prior-data.html","id":"using-prior-data-for-solving","dir":"Articles","previous_headings":"","what":"Using prior data for solving","title":"Using Prior Data for ODE solving","text":"rxode2 can use single subject multiple subjects single event table solve ODEs. Additionally, rxode2 can use arbitrary data frame individualized events. example using nlmixr, use theo_sd data frame","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(nlmixr2data) ## Load data from nlmixr d <- theo_sd ## Create rxode2 model theo <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v }) } ## Create parameter dataset library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union parsDf <- tribble( ~ eta.ka, ~ eta.cl, ~ eta.v, 0.105, -0.487, -0.080, 0.221, 0.144, 0.021, 0.368, 0.031, 0.058, -0.277, -0.015, -0.007, -0.046, -0.155, -0.142, -0.382, 0.367, 0.203, -0.791, 0.160, 0.047, -0.181, 0.168, 0.096, 1.420, 0.042, 0.012, -0.738, -0.391, -0.170, 0.790, 0.281, 0.146, -0.527, -0.126, -0.198) %>% mutate(tka = 0.451, tcl = 1.017, tv = 3.449) ## Now solve the dataset solveData <- rxSolve(theo, parsDf, d) #> ℹ parameter labels from comments will be replaced by 'label()' #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ plot(solveData, cp) print(solveData) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 12 × 7 #> id tka tcl tv eta.ka eta.cl eta.v #> #> 1 1 0.451 1.02 3.45 0.105 -0.487 -0.08 #> 2 2 0.451 1.02 3.45 0.221 0.144 0.021 #> 3 3 0.451 1.02 3.45 0.368 0.031 0.058 #> 4 4 0.451 1.02 3.45 -0.277 -0.015 -0.007 #> 5 5 0.451 1.02 3.45 -0.046 -0.155 -0.142 #> 6 6 0.451 1.02 3.45 -0.382 0.367 0.203 #> 7 7 0.451 1.02 3.45 -0.791 0.16 0.047 #> 8 8 0.451 1.02 3.45 -0.181 0.168 0.096 #> 9 9 0.451 1.02 3.45 1.42 0.042 0.012 #> 10 10 0.451 1.02 3.45 -0.738 -0.391 -0.17 #> 11 11 0.451 1.02 3.45 0.79 0.281 0.146 #> 12 12 0.451 1.02 3.45 -0.527 -0.126 -0.198 #> ── Initial Conditions ($inits): ── #> depot center #> 0 0 #> ── First part of data (object): ── #> # A tibble: 132 × 8 #> id time ka cl v cp depot center #> #> 1 1 0 1.74 1.70 29.0 0 320. 0 #> 2 1 0.25 1.74 1.70 29.0 3.86 207. 112. #> 3 1 0.57 1.74 1.70 29.0 6.81 118. 198. #> 4 1 1.12 1.74 1.70 29.0 9.06 45.4 263. #> 5 1 2.02 1.74 1.70 29.0 9.79 9.45 284. #> 6 1 3.82 1.74 1.70 29.0 9.10 0.410 264. #> # ℹ 126 more rows ## Of course the fasest way to solve if you don't care about the rxode2 extra parameters is solveData <- rxSolve(theo, parsDf, d, returnType=\"data.frame\") #> ℹ parameter labels from comments will be replaced by 'label()' #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## solved data dplyr::as_tibble(solveData) #> # A tibble: 132 × 8 #> id time ka cl v cp depot center #> #> 1 1 0 1.74 1.70 29.0 0 320. 0 #> 2 1 0.25 1.74 1.70 29.0 3.86 207. 112. #> 3 1 0.57 1.74 1.70 29.0 6.81 118. 198. #> 4 1 1.12 1.74 1.70 29.0 9.06 45.4 263. #> 5 1 2.02 1.74 1.70 29.0 9.79 9.45 284. #> 6 1 3.82 1.74 1.70 29.0 9.10 0.410 264. #> 7 1 5.1 1.74 1.70 29.0 8.46 0.0440 246. #> 8 1 7.03 1.74 1.70 29.0 7.56 0.00152 219. #> 9 1 9.05 1.74 1.70 29.0 6.71 0.0000449 195. #> 10 1 12.1 1.74 1.70 29.0 5.61 0.000000212 163. #> # ℹ 122 more rows data.table::data.table(solveData) #> id time ka cl v cp depot center #> #> 1: 1 0.00 1.7436838 1.698932 29.04946 0.000000 3.199920e+02 0.00000 #> 2: 1 0.25 1.7436838 1.698932 29.04946 3.861730 2.069289e+02 112.18117 #> 3: 1 0.57 1.7436838 1.698932 29.04946 6.805372 1.184389e+02 197.69240 #> 4: 1 1.12 1.7436838 1.698932 29.04946 9.058196 4.539354e+01 263.13572 #> 5: 1 2.02 1.7436838 1.698932 29.04946 9.791088 9.450361e+00 284.42585 #> --- #> 128: 12 5.07 0.9268162 2.437566 25.81614 8.442535 2.919432e+00 217.95370 #> 129: 12 7.07 0.9268162 2.437566 25.81614 7.074251 4.573778e-01 182.62989 #> 130: 12 9.03 0.9268162 2.437566 25.81614 5.892253 7.436222e-02 152.11524 #> 131: 12 12.05 0.9268162 2.437566 25.81614 4.432614 4.526550e-03 114.43300 #> 132: 12 24.15 0.9268162 2.437566 25.81614 1.414179 6.154773e-08 36.50865"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-rxUse.html","id":"using-pre-compiled-models-in-your-packages","dir":"Articles","previous_headings":"","what":"Using Pre-compiled models in your packages","title":"Compiled rxode2 models in Packages","text":"package like include pre-compiled rxode2 models package easy create package. simple make package rxPkg() command. : Add model package; can use package data idr package loads Add right package requirements DESCRIPTION file. want update describe package modify authors, license etc. Create skeleton model documentation files can add package documentation. case file idr-doc.R R directory Create configure configure.win script removes regenerates src directory based whatever version rxode2 compiled . modified plan compiled code, though suggested. can write R code package interacts rxode2 object can distribute shiny apps similar things package context. present can add models package rxUse(). Simply compile rxode2 model package add model rxUse() Now model idr model library. also create model-doc.R R directory can document model. can use devtools methods install/test model","code":"library(rxode2); ## Now Create a model idr <- rxode2({ C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }) ## You can specify as many models as you want to add rxPkg(idr, package=\"myPackage\"); ## Add the idr model to your package rxUse(model) devtools::load_all() # Load all the functions in the package devtools::document() # Create package documentation devtools::install() # Install package devtools::check() # Check the package devtools::build() # build the package so you can submit it to places like CRAN"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-rxUse.html","id":"using-models-in-a-already-present-package","dir":"Articles","previous_headings":"","what":"Using Models in a already present package","title":"Compiled rxode2 models in Packages","text":"illustrate, lets start blank package rxUse() : - Create rxode2 sources move package’s src/ directory. R source package, also finish directory library-init.c registers rxode2 models package use R. - Create stub R documentation models including package. able see R documentation loading package standard ? interface. still need : - Export least one function. function wish export, can add re-export rxode2 using roxygen follows: want use Suggests instead Depends package, way want export rxode2’s normal routines also need instruct R load model library models included model’s dll. done : R package rxode2 models intend add compiled sources (recommended), can add following configure scripts Depending check may need dummy autoconf script, want integrate sources Rcpp C/Fortan based packages, need include rxModels-compiled.h : - Add define macro compiledModelCall list registered .Call functions. - Register C interface allow model solving R_init0_rxModels_rxode2_models() (rxModels replaced package name). complete, can compile/document standard methods: load package new version rxode2, models recompiled used. However, want models recompiled recent version rxode2, simply need call rxUse() project directory followed standard methods install/create package. Note include rxode2 code required generate model regenerate rxode2 c-code src directory. rxode2 objects, summary show one way recreate model. example compiled models package can found rxModels repository.","code":"library(rxode2) library(usethis) pkgPath <- file.path(rxTempDir(),\"MyRxModel\") create_package(pkgPath); use_gpl3_license(\"Matt\") use_package(\"rxode2\", \"LinkingTo\") use_package(\"rxode2\", \"Depends\") ## library(rxode2) on load; Can use imports instead. use_roxygen_md() ##use_readme_md() library(rxode2); ## Now Create a model idr <- rxode2({ C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }); rxUse(idr); ## Add the idr model to your package rxUse(); # Update the compiled rxode2 sources for all of your packages ##' @importFrom rxode2 rxode2 ##' @export rxode2::rxode2 ##' @importFrom rxode2 rxode2 ##' @export rxode2::rxode2 ##' @importFrom rxode2 et ##' @export rxode2::et ##' @importFrom rxode2 etRep ##' @export rxode2::etRep ##' @importFrom rxode2 etSeq ##' @export rxode2::etSeq ##' @importFrom rxode2 as.et ##' @export rxode2::as.et ##' @importFrom rxode2 eventTable ##' @export rxode2::eventTable ##' @importFrom rxode2 add.dosing ##' @export rxode2::add.dosing ##' @importFrom rxode2 add.sampling ##' @export rxode2::add.sampling ##' @importFrom rxode2 rxSolve ##' @export rxode2::rxSolve ##' @importFrom rxode2 rxControl ##' @export rxode2::rxControl ##' @importFrom rxode2 rxClean ##' @export rxode2::rxClean ##' @importFrom rxode2 rxUse ##' @export rxode2::rxUse ##' @importFrom rxode2 rxShiny ##' @export rxode2::rxShiny ##' @importFrom rxode2 genShinyApp.template ##' @export rxode2::genShinyApp.template ##' @importFrom rxode2 cvPost ##' @export rxode2::cvPost # This is actually from `magrittr` but allows less imports ##' @importFrom rxode2 %>% ##' @export rxode2::`%>%` # In this case `rxModels` is the package name ##' @useDynLib rxModels, .registration=TRUE #!/bin/sh # This should be used for both configure and configure.win echo \"unlink('src', recursive=TRUE);rxode2::rxUse()\" > build.R ${R_HOME}/bin/Rscript build.R rm build.R ## dummy autoconf script ## It is saved to configure.ac devtools::load_all() devtools::document() devtools::install() devtools::load_all() devtools::document() devtools::install()"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-shiny.html","id":"facilities-for-generating-r-shiny-applications","dir":"Articles","previous_headings":"","what":"Facilities for generating R shiny applications","title":"rxode2 and Shiny","text":"example creating R shiny application interactively explore responses various complex dosing regimens available http://qsp.engr.uga.edu:3838/rxode2/RegimenSimulator. Shiny applications like one may programmatically created experimental function genShinyApp.template(). application includes widgets varying dose, dosing regimen, dose cycle, number cycles. Click go Shiny App","code":"genShinyApp.template(appDir = \"shinyExample\", verbose=TRUE) library(shiny) runApp(\"shinyExample\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-shiny.html","id":"exploring-parameter-fits-graphically-using-shiny","dir":"Articles","previous_headings":"","what":"Exploring parameter fits graphically using shiny","title":"rxode2 and Shiny","text":"rxode2 object can explored rxShiny(obj). rxShiny() also allow try new models see behave.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-variability-with-rxode2","dir":"Articles","previous_headings":"Population Simulations with rxode2","what":"Simulation of Variability with rxode2","title":"rxode2 Simulation","text":"pharmacometrics nonlinear-mixed effect modeling software (like nlmixr) characterizes -subject variability. subject variability can simulate new subjects. Assuming 2-compartment, indirect response model, can set create rxode2 model describing system :","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"setting-up-the-rxode2-model","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Setting up the rxode2 model","title":"rxode2 Simulation","text":"","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` set.seed(32) rxSetSeed(32) mod <- function() { ini({ KA <- 2.94E-01 TCl <- 1.86E+01 # between subject variability eta.Cl ~ 0.4^2 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 CL <- TCl*exp(eta.Cl) ## This is coded as a variable in the model d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulating","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulating","title":"rxode2 Simulation","text":"next step simulate create dosing regimen overall simulation: wish, can also add sampling times (though rxode2 can fill ): Note et takes similar arguments seq adding sampling times. methods adding sampling times events make complex dosing regimens (See event vignette). includes ways add variability sampling dosing times). complete can simulate using rxSolve routine: quickly look customize simulation use default plot routine. Since rxode2 object, create ggplot2 object can modify wish. extra parameter plot tells rxode2/R piece information interested plotting. case, interested looking derived parameter C2:","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=\"centr\") ev <- ev %>% et(0,48, length.out=100) sim <- rxSolve(mod, ev, nSub=100) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"checking-the-simulation-with-plot","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Checking the simulation with plot","title":"rxode2 Simulation","text":"course additional parameter also state value, like eff: even look two side--side: stack patchwork","code":"library(ggplot2) ## The plots from rxode2 are ggplots so they can be modified with ## standard ggplot commands. plot(sim, C2, log=\"y\") + ylab(\"Central Compartment\") ## They also takes many of the standard plot arguments; See ?plot plot(sim, eff, ylab=\"Effect\") plot(sim, C2, eff) library(patchwork) plot(sim, C2, log=\"y\") / plot(sim, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"processing-the-data-to-create-summary-plots","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Processing the data to create summary plots","title":"rxode2 Simulation","text":"Usually pharmacometric simulations enough simply simulate system. something easier digest, like look central extreme tendencies simulation. Since rxode2 solve object type data frame now straightforward perform calculations generate plots simulated data. can , 5th, 50th, 95th percentiles simulated data plotted. Note can see parameters simulated example","code":"confint(sim, \"C2\", level=0.95) %>% plot(ylab=\"Central Concentration\", log=\"y\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done confint(sim, \"eff\", level=0.95) %>% plot(ylab=\"Effect\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done head(sim$param) #> sim.id KA TCl V2 Q V3 Kin Kout EC50 eta.Cl #> 1 1 0.294 18.6 40.2 10.5 297 1 1 200 0.8067570 #> 2 2 0.294 18.6 40.2 10.5 297 1 1 200 0.0236961 #> 3 3 0.294 18.6 40.2 10.5 297 1 1 200 -0.3340697 #> 4 4 0.294 18.6 40.2 10.5 297 1 1 200 -0.1098197 #> 5 5 0.294 18.6 40.2 10.5 297 1 1 200 -0.2803752 #> 6 6 0.294 18.6 40.2 10.5 297 1 1 200 -0.2114090"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-unexplained-variability-sigma","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulation of unexplained variability (sigma)","title":"rxode2 Simulation","text":"addition conveniently simulating subject variability, can also easily simulate unexplained variability. One way create rxode2 model endpoints defined. Model piping can keeping model intact: can see dataset defined $multipleEndpoint: see endpoints defined eff C2: allows solve system: Since simulated model residual specification included multiple endpoint model, can summarize endpoint simply taking confidence interval \"sim\": want subset specific endpoint, like eff can create confidence interval endpoint using specification sim.eff, endpoint name separated sim dot:","code":"mod2 <- mod %>% model(eff ~ add(eff.sd), append=TRUE) %>% model(C2 ~ prop(prop.sd), append=TRUE) %>% ini(eff.sd=sqrt(0.1), prop.sd=sqrt(0.1)) #> ℹ add residual parameter `eff.sd` and set estimate to 1 #> ℹ add residual parameter `prop.sd` and set estimate to 1 #> ℹ change initial estimate of `eff.sd` to `0.316227766016838` #> ℹ change initial estimate of `prop.sd` to `0.316227766016838` mod2$multipleEndpoint #> variable cmt dvid* #> 1 eff ~ … cmt='eff' or cmt=4 dvid='eff' or dvid=1 #> 2 C2 ~ … cmt='C2' or cmt=5 dvid='C2' or dvid=2 ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=\"centr\") %>% et(seq(0,48, length.out=100), cmt=\"eff\") %>% et(seq(0,48, length.out=100), cmt=\"C2\") sim <- rxSolve(mod2, ev, nSub=100) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ s <- confint(sim, \"sim\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s) seff <- confint(sim, \"sim.eff\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(seff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-individuals","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulation of Individuals","title":"rxode2 Simulation","text":"Sometimes may want match dosing observations individuals clinical trial. create data.frame using rxode2 event specification well ID column indicate individual. rxode2 event vignette talks datasets created.","code":"library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union ev1 <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=2) %>% et(0,48,length.out=10) ev2 <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=5000, cmt=2) %>% et(0,48,length.out=8) dat <- rbind(data.frame(ID=1, ev1$get.EventTable()), data.frame(ID=2, ev2$get.EventTable())) ## Note the number of subject is not needed since it is determined by the data sim <- rxSolve(mod, dat) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ sim %>% select(id, time, eff, C2) #> id time eff C2 #> 1 1 0.000000 [h] 1.000000 248.7562189 #> 2 1 5.333333 [h] 1.168348 19.1658271 #> 3 1 10.666667 [h] 1.040652 7.1764936 #> 4 1 16.000000 [h] 1.030849 6.0167596 #> 5 1 21.333333 [h] 1.027742 5.4446478 #> 6 1 26.666667 [h] 1.025204 4.9484199 #> 7 1 32.000000 [h] 1.022911 4.4984868 #> 8 1 37.333333 [h] 1.020828 4.0895169 #> 9 1 42.666667 [h] 1.018933 3.7177314 #> 10 1 48.000000 [h] 1.017211 3.3797461 #> 11 2 0.000000 [h] 1.000000 124.3781095 #> 12 2 6.857143 [h] 1.016301 1.9290018 #> 13 2 13.714286 [h] 1.006648 1.2918078 #> 14 2 20.571429 [h] 1.005617 1.0964981 #> 15 2 27.428571 [h] 1.004772 0.9317005 #> 16 2 34.285714 [h] 1.004055 0.7916739 #> 17 2 41.142857 [h] 1.003446 0.6726918 #> 18 2 48.000000 [h] 1.002928 0.5715923"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-clinical-trials","dir":"Articles","previous_headings":"","what":"Simulation of Clinical Trials","title":"rxode2 Simulation","text":"either using simple single event table, data clinical trial described , complete clinical trial simulation can performed. Typically clinical trial simulations want account uncertainty fixed parameter estimates, even uncertainty subject variability well unexplained variability. rxode2 allows account uncertainties simulating multiple virtual “studies,” specified parameter nStud. studies samples realization fixed effect parameters covariance matrices subject variability(omega) unexplained variabilities (sigma). Depending information models, strategies simulating realization omega sigma matrices. first strategy occurs either standard errors standard deviations (related parameters), modeled correlation model simulating . case suggested strategy use inverse Wishart (parameterized scale conjugate prior)/scaled inverse chi distribution. approach uses single parameter inform variability covariance matrix sampled (degrees freedom). second strategy occurs standard errors variance/standard deviation modeled correlations covariance matrix. approach perform separate simulations standard deviations correlation matrix. First simulate variance/standard deviation components thetaMat multivariate normal simulation. simulation transformation standard deviations, correlation matrix simulated using degrees freedom covariance matrix. Combining simulated standard deviation simulated correlation matrix give simulated covariance matrix. smaller dimension covariance matrices (dimension < 10x10) recommended use lkj distribution simulate correlation matrix. higher dimension covariance matrices suggested use inverse wishart distribution (transformed correlation matrix) simulations. covariance/variance prior simulated rxode2s cvPost() function.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-from-inverse-wishart-correlations","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulation from inverse Wishart correlations","title":"rxode2 Simulation","text":"example simulation : wish can see omega sigma used virtual study accessing solved data object $omega.list $sigma.list: can also see parameter realizations $params data frame.","code":"## Creating covariance matrix tmp <- matrix(rnorm(8^2), 8, 8) tMat <- tcrossprod(tmp, tmp) / (8 ^ 2) dimnames(tMat) <- list(NULL, names(mod2$theta)[1:8]) sim <- rxSolve(mod2, ev, nSub=100, thetaMat=tMat, nStud=10, dfSub=10, dfObs=100) s <-sim %>% confint(\"sim\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s) head(sim$omegaList) #> [[1]] #> eta.Cl #> eta.Cl 0.1676778 #> #> [[2]] #> eta.Cl #> eta.Cl 0.2917085 #> #> [[3]] #> eta.Cl #> eta.Cl 0.1776813 #> #> [[4]] #> eta.Cl #> eta.Cl 0.1578682 #> #> [[5]] #> eta.Cl #> eta.Cl 0.1845614 #> #> [[6]] #> eta.Cl #> eta.Cl 0.3282268 head(sim$sigmaList) #> [[1]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.12416983 0.04197039 #> rxerr.C2 0.04197039 0.97293971 #> #> [[2]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.84311199 -0.06277998 #> rxerr.C2 -0.06277998 1.22140938 #> #> [[3]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.9834771 0.1060251 #> rxerr.C2 0.1060251 1.0024751 #> #> [[4]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.25556975 0.07690868 #> rxerr.C2 0.07690868 0.90991261 #> #> [[5]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.116261 -0.184748 #> rxerr.C2 -0.184748 1.320288 #> #> [[6]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.93539238 0.07270049 #> rxerr.C2 0.07270049 0.98648424"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulate-using-variancestandard-deviation-standard-errors","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulate using variance/standard deviation standard errors","title":"rxode2 Simulation","text":"Lets assume wish simulate nonmem run included xpose First setup model; Since taking nonmem like use free-form style classic rxode2 model start classic model: Next input estimated parameters: also covariances; , easiest way create named covariance matrix use lotri():","code":"rx1 <- rxode2({ cl <- tcl*(1+crcl.cl*(CLCR-65)) * exp(eta.cl) v <- tv * WT * exp(eta.v) ka <- tka * exp(eta.ka) ipred <- linCmt() obs <- ipred * (1 + prop.sd) + add.sd }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ theta <- c(tcl=2.63E+01, tv=1.35E+00, tka=4.20E+00, tlag=2.08E-01, prop.sd=2.05E-01, add.sd=1.06E-02, crcl.cl=7.17E-03, ## Note that since we are using the separation strategy the ETA variances are here too eta.cl=7.30E-02, eta.v=3.80E-02, eta.ka=1.91E+00) thetaMat <- lotri( tcl + tv + tka + tlag + prop.sd + add.sd + crcl.cl + eta.cl + eta.v + eta.ka ~ c(7.95E-01, 2.05E-02, 1.92E-03, 7.22E-02, -8.30E-03, 6.55E-01, -3.45E-03, -6.42E-05, 3.22E-03, 2.47E-04, 8.71E-04, 2.53E-04, -4.71E-03, -5.79E-05, 5.04E-04, 6.30E-04, -3.17E-06, -6.52E-04, -1.53E-05, -3.14E-05, 1.34E-05, -3.30E-04, 5.46E-06, -3.15E-04, 2.46E-06, 3.15E-06, -1.58E-06, 2.88E-06, -1.29E-03, -7.97E-05, 1.68E-03, -2.75E-05, -8.26E-05, 1.13E-05, -1.66E-06, 1.58E-04, -1.23E-03, -1.27E-05, -1.33E-03, -1.47E-05, -1.03E-04, 1.02E-05, 1.67E-06, 6.68E-05, 1.56E-04, 7.69E-02, -7.23E-03, 3.74E-01, 1.79E-03, -2.85E-03, 1.18E-05, -2.54E-04, 1.61E-03, -9.03E-04, 3.12E-01)) evw <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=100) %>% ## For this problem we will simulate with sampling windows et(list(c(0, 0.5), c(0.5, 1), c(1, 3), c(3, 6), c(6, 12))) %>% et(id=1:1000) ## From the run we know that: ## total number of observations is: 476 ## Total number of individuals: 74 sim <- rxSolve(rx1, theta, evw, nSub=100, nStud=10, thetaMat=thetaMat, ## Match boundaries of problem thetaLower=0, sigma=c(\"prop.sd\", \"add.sd\"), ## Sigmas are standard deviations sigmaXform=\"identity\", # default sigma xform=\"identity\" omega=c(\"eta.cl\", \"eta.v\", \"eta.ka\"), ## etas are variances omegaXform=\"variance\", # default omega xform=\"variance\" iCov=data.frame(WT=rnorm(1000, 70, 15), CLCR=rnorm(1000, 65, 25)), dfSub=74, dfObs=476); #> ℹ thetaMat has too many items, ignored: 'tlag' print(sim) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 10,000 × 9 #> sim.id id tcl crcl.cl eta.cl tv eta.v tka eta.ka #> #> 1 1 1 27.0 0.828 -0.884 1.73 0.531 5.38 0.114 #> 2 1 2 27.0 0.828 1.11 1.73 -0.906 5.38 -0.738 #> 3 1 3 27.0 0.828 -0.690 1.73 0.280 5.38 -0.365 #> 4 1 4 27.0 0.828 0.0751 1.73 -1.17 5.38 -0.575 #> 5 1 5 27.0 0.828 -0.299 1.73 -0.121 5.38 -0.601 #> 6 1 6 27.0 0.828 -0.638 1.73 -0.281 5.38 -0.309 #> 7 1 7 27.0 0.828 1.05 1.73 -0.0495 5.38 0.567 #> 8 1 8 27.0 0.828 -0.371 1.73 -0.372 5.38 -0.903 #> 9 1 9 27.0 0.828 -0.206 1.73 1.97 5.38 0.0203 #> 10 1 10 27.0 0.828 0.754 1.73 0.166 5.38 -1.73 #> # ℹ 9,990 more rows #> ── Initial Conditions ($inits): ── #> named numeric(0) #> #> Simulation with uncertainty in: #> • parameters ($thetaMat for changes) #> • omega matrix ($omegaList) #> • sigma matrix ($sigmaList) #> #> ── First part of data (object): ── #> # A tibble: 50,000 × 10 #> sim.id id time cl v ka ipred obs WT CLCR #> [h] #> 1 1 1 0.0155 50.4 183. 6.03 0.0487 3.56 62.2 69.3 #> 2 1 1 0.749 50.4 183. 6.03 0.460 -1.59 62.2 69.3 #> 3 1 1 1.02 50.4 183. 6.03 0.431 1.15 62.2 69.3 #> 4 1 1 3.41 50.4 183. 6.03 0.224 1.92 62.2 69.3 #> 5 1 1 7.81 50.4 183. 6.03 0.0666 0.731 62.2 69.3 #> 6 1 2 0.0833 2816. 24.9 2.57 0.0754 -1.20 35.7 105. #> # ℹ 49,994 more rows ## Notice that the simulation time-points change for the individual ## If you want the same sampling time-points you can do that as well: evw <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=100) %>% et(0, 24, length.out=50) %>% et(id=1:100) sim <- rxSolve(rx1, theta, evw, nSub=100, nStud=10, thetaMat=thetaMat, ## Match boundaries of problem thetaLower=0, sigma=c(\"prop.sd\", \"add.sd\"), ## Sigmas are standard deviations sigmaXform=\"identity\", # default sigma xform=\"identity\" omega=c(\"eta.cl\", \"eta.v\", \"eta.ka\"), ## etas are variances omegaXform=\"variance\", # default omega xform=\"variance\" iCov=data.frame(WT=rnorm(100, 70, 15), CLCR=rnorm(100, 65, 25)), dfSub=74, dfObs=476, resample=TRUE) #> ℹ thetaMat has too many items, ignored: 'tlag' s <-sim %>% confint(c(\"ipred\")) #> summarizing data... #> done plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulate-without-uncertainty-in-omega-or-sigma-parameters","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulate without uncertainty in omega or sigma parameters","title":"rxode2 Simulation","text":"wish sample prior distributions either omega sigma matrices, can turn feature specifying simVariability = FALSE option solving: Note since realizations omega sigma simulated, $omegaList $sigmaList return NULL.","code":"sim <- rxSolve(mod2, ev, nSub=100, thetaMat=tMat, nStud=10, simVariability=FALSE) s <-sim %>% confint(c(\"centr\", \"eff\")) #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-single-subject.html","id":"single-subject-solving","dir":"Articles","previous_headings":"","what":"Single Subject solving","title":"Single Subject ODE solving -- differences from multiple subject","text":"Originally, rxode2 created solve ODEs one individual. single system without changes individual parameters. course still supported, classic examples found rxode2 intro. article discusses differences multiple subject single subject solving. three differences: Single solving solve ID parallel Single solving lacks id column parameters($params) well actual dataset. Single solving allows parameter exploration easier parameter can modified. multiple subject solves, make sure update individual parameter. first obvious difference speed; multiple subjects can run subject ID parallel. information examples speed gains multiple subject solving see Speeding rxode2 vignette. next difference amount information output final data. Taking 2 compartment indirect response model originally tutorial: Now simple solve better see differences single solve, can solve 2 individuals observing two solves, can see: multiple subject solve contains id column data frame data frame parameters subject. last feature obvious, modifying individual parameters. single subject data, can modify rxode2 data frame changing initial conditions parameter values part data frame, described rxode2 Data Frames. multiple subject solving, feature still works, requires care supplying individual’s parameter value, otherwise may change solve drop parameter key individuals.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 Q=1.05E+01 V3=2.97E+02 Kin=1 Kout=1 EC50=200 }) model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) } et <- et(amount.units='mg', time.units='hours') %>% et(dose=10000, addl=9, ii=12) %>% et(amt=20000, nbr.doses=5, start.time=120, dosing.interval=24) %>% et(0:240) # sampling x <- rxSolve(mod1, et) x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows print(x) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions ($inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows plot(x, C2, eff) x2 <- rxSolve(mod1, et %>% et(id=1:2), params=data.frame(CL=c(18.6, 7.6))) print(x2) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 2 × 9 #> id KA CL V2 Q V3 Kin Kout EC50 #> #> 1 1 0.294 18.6 40.2 10.5 297 1 1 200 #> 2 2 0.294 7.6 40.2 10.5 297 1 1 200 #> ── Initial Conditions ($inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 482 × 8 #> id time C2 C3 depot centr peri eff #> [h] #> 1 1 0 0 0 10000 0 0 1 #> 2 1 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 1 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 1 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 1 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 1 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 476 more rows plot(x2, C2, eff)"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"a-note-about-the-speed-of-the-functional-form-for-rxode2","dir":"Articles","previous_headings":"","what":"A note about the speed of the functional form for rxode2","title":"Speeding up rxode2","text":"functional form benefit supported nlmixr2 therefore one interface solving estimating, takes computation time get underlying “classic” simulation code. models form : can also specify end-points simulation/estimation just like nlmixr2: every solve, compile (cached compile) underlying model. wish speed process can use two underlying rxode2 classic models. takes two steps: Parsing/evaluating model Creating simulation model first step can done rxode2(mod1) mod1() (second model ). second step create underlying “classic” rxode2 model, can done two different methods:$simulationModel $simulationIniModel. $simulationModel provide simulation code without initial conditions pre-pended, $simulationIniModel pre-pend values. endpoints specified, simulation code endpoint also output. can see differences : wish speed multiple simualtions rxode2 functions, need pre-calculate care steps : functions can act like normal ui model solved. can convert back UI .rxUi() function .function() needed. increase speed multiple simulations model use lower level simulation model (ie $simulationModel $simulationIniModel depending need)","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ KA <- 0.3 CL <- 7 V2 <- 40 Q <- 10 V3 <- 300 Kin <- 0.2 Kout <- 0.2 EC50 <- 8 }) model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) } mod2f <- function() { ini({ TKA <- 0.3 TCL <- 7 TV2 <- 40 TQ <- 10 TV3 <- 300 TKin <- 0.2 TKout <- 0.2 TEC50 <- 8 eta.cl + eta.v ~ c(0.09, 0.08, 0.25) c2.prop.sd <- 0.1 eff.add.sd <- 0.1 }) model({ KA <- TKA CL <- TCL*exp(eta.cl) V2 <- TV2*exp(eta.v) Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 C2 ~ prop(c2.prop.sd) eff ~ add(eff.add.sd) }) } mod1 <- mod1() mod2f <- rxode2(mod2f) summary(mod1$simulationModel) #> rxode2 2.1.3 model named rx_4e26e9d8f25df5e07a0521b7b177da87 model (✔ ready). #> DLL: /tmp/RtmpSPRppR/rxode2/rx_4e26e9d8f25df5e07a0521b7b177da87__.rxd/rx_4e26e9d8f25df5e07a0521b7b177da87_.so #> NULL #> #> Calculated Variables: #> [1] \"C2\" \"C3\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(KA, CL, V2, Q, V3, Kin, Kout, EC50) #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> }) summary(mod1$simulationIniModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_5c7a85ad8a3c6825cf7c3e1131132e2a model (✔ ready). #> DLL: /tmp/RtmpSPRppR/rxode2/rx_5c7a85ad8a3c6825cf7c3e1131132e2a__.rxd/rx_5c7a85ad8a3c6825cf7c3e1131132e2a_.so #> NULL #> #> Calculated Variables: #> [1] \"C2\" \"C3\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(KA, CL, V2, Q, V3, Kin, Kout, EC50) #> KA = 0.3 #> CL = 7 #> V2 = 40 #> Q = 10 #> V3 = 300 #> Kin = 0.2 #> Kout = 0.2 #> EC50 = 8 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> }) summary(mod2f$simulationModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_ea7cfb51903394d4a9db941ee311eca2 model (✔ ready). #> DLL: /tmp/RtmpSPRppR/rxode2/rx_ea7cfb51903394d4a9db941ee311eca2__.rxd/rx_ea7cfb51903394d4a9db941ee311eca2_.so #> NULL #> #> Calculated Variables: #> [1] \"KA\" \"CL\" \"V2\" \"Q\" \"V3\" \"Kin\" #> [7] \"Kout\" \"EC50\" \"C2\" \"C3\" \"ipredSim\" \"sim\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(TKA, TCL, TV2, TQ, TV3, TKin, TKout, TEC50, c2.prop.sd, #> eff.add.sd, eta.cl, eta.v) #> KA = TKA #> CL = TCL * exp(eta.cl) #> V2 = TV2 * exp(eta.v) #> Q = TQ #> V3 = TV3 #> Kin = TKin #> Kout = TKout #> EC50 = TEC50 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ C2 #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (rx_pred_f_ * c2.prop.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.C2, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ eff #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (eff.add.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.eff, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> cmt(C2) #> dvid(5, 4) #> }) summary(mod2f$simulationIniModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_d7291e04a9631f78bdda73dc6745fe46 model (✔ ready). #> DLL: /tmp/RtmpSPRppR/rxode2/rx_d7291e04a9631f78bdda73dc6745fe46__.rxd/rx_d7291e04a9631f78bdda73dc6745fe46_.so #> NULL #> #> Calculated Variables: #> [1] \"KA\" \"CL\" \"V2\" \"Q\" \"V3\" \"Kin\" #> [7] \"Kout\" \"EC50\" \"C2\" \"C3\" \"ipredSim\" \"sim\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(TKA, TCL, TV2, TQ, TV3, TKin, TKout, TEC50, c2.prop.sd, #> eff.add.sd, eta.cl, eta.v) #> rxerr.C2 = 1 #> rxerr.eff = 1 #> TKA = 0.3 #> TCL = 7 #> TV2 = 40 #> TQ = 10 #> TV3 = 300 #> TKin = 0.2 #> TKout = 0.2 #> TEC50 = 8 #> c2.prop.sd = 0.1 #> eff.add.sd = 0.1 #> eta.cl = 0 #> eta.v = 0 #> KA = TKA #> CL = TCL * exp(eta.cl) #> V2 = TV2 * exp(eta.v) #> Q = TQ #> V3 = TV3 #> Kin = TKin #> Kout = TKout #> EC50 = TEC50 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ C2 #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (rx_pred_f_ * c2.prop.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.C2, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ eff #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (eff.add.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.eff, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> cmt(C2) #> dvid(5, 4) #> }) mod1 <- mod1$simulationModel mod2 <- mod2f$simulationModel"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"increasing-rxode2-speed-by-multi-subject-parallel-solving","dir":"Articles","previous_headings":"","what":"Increasing rxode2 speed by multi-subject parallel solving","title":"Speeding up rxode2","text":"Using classic rxode2 model specification (can convert functional/ui model style) continue discussion rxode2 speed enhancements. rxode2 originally developed ODE solver allowed ODE solve single subject. flexibility still supported. original code rxode2 tutorial :","code":"library(rxode2) library(microbenchmark) library(ggplot2) mod1 <- rxode2({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## Create an event table ev <- et() %>% et(amt=10000, addl=9,ii=12) %>% et(time=120, amt=20000, addl=4, ii=24) %>% et(0:240) ## Add Sampling nsub <- 100 # 100 sub-problems sigma <- matrix(c(0.09,0.08,0.08,0.25),2,2) # IIV covariance matrix mv <- rxRmvn(n=nsub, rep(0,2), sigma) # Sample from covariance matrix CL <- 7*exp(mv[,1]) V2 <- 40*exp(mv[,2]) params.all <- cbind(KA=0.3, CL=CL, V2=V2, Q=10, V3=300, Kin=0.2, Kout=0.2, EC50=8)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"for-loop","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"For Loop","title":"Speeding up rxode2","text":"slowest way code use loop. example enclose function compare timing.","code":"runFor <- function(){ res <- NULL for (i in 1:nsub) { params <- params.all[i,] x <- mod1$solve(params, ev) ##Store results for effect compartment res <- cbind(res, x[, \"eff\"]) } return(res) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"running-with-apply","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Running with apply","title":"Speeding up rxode2","text":"general R, apply types functions perform better loop, tutorial also suggests speed enhancement","code":"runSapply <- function(){ res <- apply(params.all, 1, function(theta) mod1$run(theta, ev)[, \"eff\"]) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"run-using-a-single-threaded-solve","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Run using a single-threaded solve","title":"Speeding up rxode2","text":"can also rxode2 solve subject simultaneously without collecting results R, using single threaded solve. data output slightly different , still gives information:","code":"runSingleThread <- function(){ solve(mod1, params.all, ev, cores=1)[,c(\"sim.id\", \"time\", \"eff\")] }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"run-a-2-threaded-solve","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Run a 2 threaded solve","title":"Speeding up rxode2","text":"rxode2 supports multi-threaded solves, another option 2 threads (called cores solve options, can see options rxControl() rxSolve()).","code":"run2Thread <- function(){ solve(mod1, params.all, ev, cores=2)[,c(\"sim.id\", \"time\", \"eff\")] }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"compare-the-times-between-all-the-methods","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Compare the times between all the methods","title":"Speeding up rxode2","text":"Now moment truth, timings: clear largest jump performance using solve method providing parameters rxode2 solve without looping subject either sapply. number cores/threads applied solve also plays role solving. can explore number threads following code: can suite spot speed vs number cores. system type (mac, linux, windows /processor), complexity ODE solving number subjects may affect arbitrary number threads. 4 threads good number use without prior knowledge systems days least 4 threads (2 processors 4 threads).","code":"bench <- microbenchmark(runFor(), runSapply(), runSingleThread(),run2Thread()) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max #> runFor() 265.60642 270.91812 280.10508 273.27375 276.22522 390.10634 #> runSapply() 264.82305 271.37265 280.13567 273.25948 277.09826 440.15521 #> runSingleThread() 27.71541 27.86995 28.73338 27.96453 28.08604 48.11461 #> run2Thread() 16.31607 16.43347 17.25248 16.52140 16.67760 27.95446 #> neval #> 100 #> 100 #> 100 #> 100 autoplot(bench) runThread <- function(n){ solve(mod1, params.all, ev, cores=n)[,c(\"sim.id\", \"time\", \"eff\")] } bench <- eval(parse(text=sprintf(\"microbenchmark(%s)\", paste(paste0(\"runThread(\", seq(1, 2 * rxCores()),\")\"), collapse=\",\")))) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval #> runThread(1) 27.73454 27.90294 29.28469 28.52594 29.34674 48.13157 100 #> runThread(2) 16.29712 16.53740 18.44910 17.22503 17.44130 27.90322 100 #> runThread(3) 17.40113 19.47790 19.87893 19.73595 20.33017 25.56011 100 #> runThread(4) 15.93134 16.07433 18.29293 16.73419 16.86182 38.19777 100 autoplot(bench)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"increasing-speed-with-compiler-options","dir":"Articles","previous_headings":"","what":"Increasing speed with compiler options","title":"Speeding up rxode2","text":"One way allows faster ODE solving make approximations make math operators like exp() faster technically accurate enough follow IEEE standard math functions values (implications cover ). optimizations opt-Julia since compile everything session, CRAN conservative approach since individuals compile R function running . Still, rxode2 models can compiled option without disturbing CRAN policies. key set option. example: Note compiler settings can tricky setup system wide Makevars may interact setting. example use ccache compile may produced options since cached options. example, github runner (generates page), advantage \"fast\" compile. However, development laptop minimal speed increase. probably check using . disabled default since minimum increase speed.","code":"# Using the first example subset to PK mod2f <- function() { ini({ TKA <- 0.3 TCL <- 7 TV2 <- 40 TQ <- 10 TV3 <- 300 TKin <- 0.2 TKout <- 0.2 TEC50 <- 8 eta.cl + eta.v ~ c(0.09, 0.08, 0.25) c2.prop.sd <- 0.1 }) model({ KA <- TKA CL <- TCL*exp(eta.cl) V2 <- TV2*exp(eta.v) Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 C2 ~ prop(c2.prop.sd) }) } mod2f <- mod2f() mod2s <- mod2f$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling bench1 <- microbenchmark(standardCompile=rxSolve(mod2s, ev, nSub=1000)) # Now clear the cache of models so we can change the compile options for the same model rxClean() # Use withr to preserve the options withr::with_options(list(rxode2.compile.O=\"fast\"), { mod2s <- mod2f$simulationIniModel }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ bench2 <- microbenchmark(fastCompile=rxSolve(mod2s, ev, nSub=1000)) bench <- rbind(bench1, bench2) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval #> standardCompile 176.6202 183.5591 219.5272 191.7218 238.6262 350.7461 100 #> fastCompile 176.9396 183.0521 219.0194 187.1348 235.6830 351.4314 100 autoplot(bench)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"a-real-life-example","dir":"Articles","previous_headings":"","what":"A real life example","title":"Speeding up rxode2","text":"cBefore parallel solving implemented, fastest way run rxode2 lapply. Rik Schoemaker created data-set nlmixr comparisons, reduced run faster automatic building pkgdown website. applying new parallel solving concepts can simply run simulation less code faster: can see striking time difference two methods; things keep mind: rxode2 use thread-safe sitmo threefry routines simulation eta values. Therefore results expected different (also random samples taken different order different) prior simulation run R 3.5, different random number generator results simulation different actual nlmixr comparison using slower simulation. speed comparison used data.table. rxode2 uses data.table internally (available) try speed sorting, different installations data.table installed. can force rxode2 use order() sorting using forderForceBase(TRUE). case little difference two, though examples data.table’s presence leads speed increase (less likely lead slowdown).","code":"library(rxode2) library(data.table) #Define the rxode2 model ode1 <- \" d/dt(abs) = -KA*abs; d/dt(centr) = KA*abs-(CL/V)*centr; C2=centr/V; \" #Create the rxode2 simulation object mod1 <- rxode2(model = ode1) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #Population parameter values on log-scale paramsl <- c(CL = log(4), V = log(70), KA = log(1)) #make 10,000 subjects to sample from: nsubg <- 300 # subjects per dose doses <- c(10, 30, 60, 120) nsub <- nsubg * length(doses) #IIV of 30% for each parameter omega <- diag(c(0.09, 0.09, 0.09))# IIV covariance matrix sigma <- 0.2 #Sample from the multivariate normal set.seed(98176247) rxSetSeed(98176247) library(MASS) mv <- mvrnorm(nsub, rep(0, dim(omega)[1]), omega) # Sample from covariance matrix #Combine population parameters with IIV params.all <- data.table( \"ID\" = seq(1:nsub), \"CL\" = exp(paramsl['CL'] + mv[, 1]), \"V\" = exp(paramsl['V'] + mv[, 2]), \"KA\" = exp(paramsl['KA'] + mv[, 3]) ) #set the doses (looping through the 4 doses) params.all[, AMT := rep(100 * doses,nsubg)] Startlapply <- Sys.time() #Run the simulations using lapply for speed s = lapply(1:nsub, function(i) { #selects the parameters associated with the subject to be simulated params <- params.all[i] #creates an eventTable with 7 doses every 24 hours ev <- eventTable() ev$add.dosing( dose = params$AMT, nbr.doses = 1, dosing.to = 1, rate = NULL, start.time = 0 ) #generates 4 random samples in a 24 hour period ev$add.sampling(c(0, sort(round(sample(runif(600, 0, 1440), 4) / 60, 2)))) #runs the rxode2 simulation x <- as.data.table(mod1$run(params, ev)) #merges the parameters and ID number to the simulation output x[, names(params) := params] }) #runs the entire sequence of 100 subjects and binds the results to the object res res = as.data.table(do.call(\"rbind\", s)) Stoplapply <- Sys.time() print(Stoplapply - Startlapply) #> Time difference of 11.31994 secs rx <- rxode2({ CL = log(4) V = log(70) KA = log(1) CL = exp(CL + eta.CL) V = exp(V + eta.V) KA = exp(KA + eta.KA) d/dt(abs) = -KA*abs; d/dt(centr) = KA*abs-(CL/V)*centr; C2=centr/V; }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ omega <- lotri(eta.CL ~ 0.09, eta.V ~ 0.09, eta.KA ~ 0.09) doses <- c(10, 30, 60, 120) startParallel <- Sys.time() ev <- do.call(\"rbind\", lapply(seq_along(doses), function(i){ et() %>% et(amt=doses[i]) %>% # Add single dose et(0) %>% # Add 0 observation ## Generate 4 samples in 24 hour period et(lapply(1:4, function(...){c(0, 24)})) %>% et(id=seq(1, nsubg) + (i - 1) * nsubg) %>% ## Convert to data frame to skip sorting the data ## When binding the data together as.data.frame })) ## To better compare, use the same output, that is data.table res <- rxSolve(rx, ev, omega=omega, returnType=\"data.table\") endParallel <- Sys.time() print(endParallel - startParallel) #> Time difference of 0.1070809 secs"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"want-more-ways-to-run-multi-subject-simulations","dir":"Articles","previous_headings":"A real life example","what":"Want more ways to run multi-subject simulations","title":"Speeding up rxode2","text":"version since tutorial even ways run multi-subject simulations, including adding variability sampling dosing times et() (see rxode2 events information), ability supply omega sigma matrix well adding thetaMat R simulate uncertainty omega, sigma theta matrices; see rxode2 simulation vignette.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"session-information","dir":"Articles","previous_headings":"A real life example","what":"Session Information","title":"Speeding up rxode2","text":"session information:","code":"sessionInfo() #> R version 4.4.0 (2024-04-24) #> Platform: x86_64-pc-linux-gnu #> Running under: Ubuntu 22.04.4 LTS #> #> Matrix products: default #> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 #> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 #> #> locale: #> [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 #> [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 #> [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C #> [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C #> #> time zone: UTC #> tzcode source: system (glibc) #> #> attached base packages: #> [1] stats graphics grDevices utils datasets methods base #> #> other attached packages: #> [1] MASS_7.3-60.2 data.table_1.15.4 ggplot2_3.5.1 #> [4] microbenchmark_1.4.10 rxode2_2.1.3 #> #> loaded via a namespace (and not attached): #> [1] gtable_0.3.5 xfun_0.44 bslib_0.7.0 #> [4] htmlwidgets_1.6.4 RApiSerialize_0.1.3 lattice_0.22-6 #> [7] vctrs_0.6.5 tools_4.4.0 generics_0.1.3 #> [10] tibble_3.2.1 symengine_0.2.6 fansi_1.0.6 #> [13] highr_0.11 pkgconfig_2.0.3 checkmate_2.3.1 #> [16] desc_1.4.3 RcppParallel_5.1.7 lifecycle_1.0.4 #> [19] compiler_4.4.0 farver_2.1.2 textshaping_0.4.0 #> [22] munsell_0.5.1 qs_0.26.3 htmltools_0.5.8.1 #> [25] sys_3.4.2 sass_0.4.9 yaml_2.3.8 #> [28] lazyeval_0.2.2 pillar_1.9.0 pkgdown_2.0.9 #> [31] crayon_1.5.2 jquerylib_0.1.4 cachem_1.1.0 #> [34] nlme_3.1-164 tidyselect_1.2.1 digest_0.6.35 #> [37] lotri_0.4.4 dplyr_1.1.4 purrr_1.0.2 #> [40] labeling_0.4.3 rxode2ll_2.0.11.9000 fastmap_1.2.0 #> [43] grid_4.4.0 colorspace_2.1-0 rxode2parse_2.0.19 #> [46] cli_3.6.2 dparser_1.3.1-11 magrittr_2.0.3 #> [49] utf8_1.2.4 withr_3.0.0 scales_1.3.0 #> [52] backports_1.5.0 rmarkdown_2.27 ragg_1.3.2 #> [55] stringfish_0.16.0 memoise_2.0.1 evaluate_0.23 #> [58] knitr_1.46 rex_1.2.1 rxode2et_2.0.13 #> [61] rxode2random_2.1.1 PreciseSums_0.6 rlang_1.1.3 #> [64] Rcpp_1.0.12 glue_1.7.0 jsonlite_1.8.8 #> [67] R6_2.5.1 systemfonts_1.1.0 fs_1.6.4 #> [70] units_0.8-5"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-stiff.html","id":"stiff-odes-with-jacobian-specification","dir":"Articles","previous_headings":"","what":"Stiff ODEs with Jacobian Specification","title":"rxode2 Jacobian specification and Stiff Systems","text":"Occasionally, may come across stiff differential equation, differential equation numerically unstable small variations parameters cause different solutions ODEs. One way tackle choose stiff-solver, hybrid stiff solver (like default LSODA). Typically enough. However exact Jacobian solutions may increase stability ODE. (Note Jacobian derivative ODE specification respect variable). rxode2 can specify Jacobian df(state)/dy(variable)= statement. classic ODE stiff properties various conditions Van der Pol differential equations. rxode2 can specified following: stiff mu=1, mu=1000 stiff system easy enough , bit tedious. rxode2 setup appropriately, can use computer algebra system sympy calculate Jacobian automatically. done rxode2 option calcJac option:","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` Vtpol2 <- function() { ini({ mu <- 1 ## nonstiff; 10 moderately stiff; 1000 stiff }) model({ d/dt(y) <- dy d/dt(dy) <- mu*(1-y^2)*dy - y ## Jacobian df(y)/dy(dy) <- 1 df(dy)/dy(y) <- -2*dy*mu*y - 1 df(dy)/dy(dy) <- mu*(1-y^2) ## Initial conditions y(0) <- 2 dy(0) <- 0 }) } et <- et(0, 10, length.out=200) %>% et(amt=0) s1 <- Vtpol2 %>% solve(et, method=\"lsoda\") ## i parameter labels from comments will be replaced by 'label()' ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(s1) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## mu ## 1 ## -- Initial Conditions ($inits): -- ## y dy ## 2 0 ## -- First part of data (object): -- ## # A tibble: 200 x 3 ## time y dy ## ## 1 0 2 0 ## 2 0.0503 2.00 -0.0933 ## 3 0.101 1.99 -0.173 ## 4 0.151 1.98 -0.242 ## 5 0.201 1.97 -0.302 ## 6 0.251 1.95 -0.353 ## # i 194 more rows s2 <- Vtpol2 %>% solve(c(mu=1000), et) ## i parameter labels from comments will be replaced by 'label()' ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(s2) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## mu ## 1000 ## -- Initial Conditions ($inits): -- ## y dy ## 2 0 ## -- First part of data (object): -- ## # A tibble: 200 x 3 ## time y dy ## ## 1 0 2 0 ## 2 0.0503 2.00 -0.000667 ## 3 0.101 2.00 -0.000667 ## 4 0.151 2.00 -0.000667 ## 5 0.201 2.00 -0.000667 ## 6 0.251 2.00 -0.000667 ## # i 194 more rows Vtpol <- function() { ini({ mu <- 1 ## nonstiff; 10 moderately stiff; 1000 stiff }) model({ d/dt(y) <- dy d/dt(dy) <- mu*(1-y^2)*dy - y y(0) <- 2 dy(0) <- 0 }) } Vtpol <- Vtpol() # you can also use $symengineModelPrune if there is if/else blocks # that need to be converted: Vtpol <- rxode2(Vtpol$symengineModelNoPrune, calcJac=TRUE) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## > pruning branches (`if`/`else`)... ## v done ## > loading into symengine environment... ## v done ## > calculate jacobian ## [====|====|====|====|====|====|====|====|====|====] 0:00:00 ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ summary(Vtpol) ## rxode2 2.1.3 model named rx_cc493e863ffdb1841288028f0470c2e6 model (ready). ## DLL: /tmp/RtmpSPRppR/rxode2/rx_cc493e863ffdb1841288028f0470c2e6__.rxd/rx_cc493e863ffdb1841288028f0470c2e6_.so ## NULL ## -- rxode2 Model Syntax -- ## rxode2({ ## cmt(y) ## cmt(dy) ## d/dt(y) = dy ## d/dt(dy) = -y + mu * dy * (1 - Rx_pow_di(y, 2)) ## y(0) = 2 ## dy(0) = 0 ## df(y)/dy(y) = 0 ## df(dy)/dy(y) = -1 - 2 * y * mu * dy ## df(y)/dy(dy) = 1 ## df(dy)/dy(dy) = mu * (1 - Rx_pow_di(y, 2)) ## df(y)/dy(mu) = 0 ## df(dy)/dy(mu) = dy * (1 - Rx_pow_di(y, 2)) ## })"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"rxode2 ODE solving syntax","text":"briefly describes syntax used define models rxode2 translate R-callable compiled code. also describes communication variables R rxode2 modeling specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"creating-rxode2-models","dir":"Articles","previous_headings":"","what":"Creating rxode2 models","title":"rxode2 ODE solving syntax","text":"ODE-based model specification may coded inside four places: Inside rxode2({}) block statements: Inside rxode2(\"\") string statement: file name loaded rxode2: model function can parsed rxode2: block statement, character string text file internal rxode2 compilation manager translates ODE system C, compiles loads R session. call rxode2 produces object class rxode2 consists list-like structure (environment) various member functions. last type model (model function), call rxode2 creates parsed rxode2 ui can translated rxode2 compilation model. type function required nlmixr2 estimation can extended modified model piping. reason focused documentation.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod <- rxode2({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ mod <- rxode2(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \") #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ writeLines(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \", \"modelFile.rxode2\") mod <- rxode2(filename='modelFile.rxode2') unlink(\"modelFile.rxode2\") mod <- function() { model({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) } mod <- rxode2(mod) # or simply mod() if the model is at the end of the function # These model functions often have residual components and initial # (`ini({})`) conditions attached as well. For example the # theophylline model can be written as: one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # after parsing the model mod <- one.compartment() mod$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_b794dde852cc7c8fe9aebc3eea58fddc model (✔ ready). #> x$state: depot, center #> x$stateExtra: cp #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp #> x$lhs: ka, cl, v, cp, ipredSim, sim # or mod$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_a9629bdbda112e498cbaf24cafcccfe9 model (✔ ready). #> x$state: depot, center #> x$stateExtra: cp #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp #> x$lhs: ka, cl, v, cp, ipredSim, sim"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"syntax","dir":"Articles","previous_headings":"","what":"Syntax","title":"rxode2 ODE solving syntax","text":"basic model specification consists one statements optionally terminated semi-colons ; optional comments (comments delimited # end--line). block statements set statements delimited curly braces, { ... }. Statements can either assignments, conditional /else /else, loops (can exited break), special statements, printing statements (debugging/testing). Assignment statements can : simple assignments, left hand identifier (.e., variable) special time-derivative assignments, left hand specifies change amount corresponding state variable (compartment) respect time e.g., d/dt(depot): special initial-condition assignments left hand specifies compartment initial condition specified, e.g. depot(0) = 0 special model event changes including bioavailability (f(depot)=1), lag time (alag(depot)=0), modeled rate (rate(depot)=2) modeled duration (dur(depot)=2). example model features event specification modeled infusions rxode2 data specification found rxode2 events vignette. special change point syntax, model times. model times specified mtime(var)=time special Jacobian-derivative assignments, left hand specifies change compartment ode respect variable. example, d/dt(y) = dy, Jacobian compartment can specified df(y)/dy(dy) = 1. may advantage obtaining solution specifying Jacobian stiff ODE systems. However, stiff systems tried LSODA, actually slightly slowed solving. Note assignment can done =, <- ~. assigning ~ operator, simple assignments time-derivative assignments output. Note rxode2 model functions assignment ~ can also overloaded residual distribution specification. Special statements can : Compartment declaration statements, can change default dosing compartment assumed compartment number(s) well add extra compartment names end (useful multiple-endpoint nlmixr models); specified cmt(compartmentName) Parameter declaration statements, can make sure input parameters certain order instead ordering parameters order parsed. useful keeping parameter order using 2 different ODE models. specified param(par1, par2,...) example model shown : Expressions assignment statements can numeric logical. Numeric expressions can include following numeric operators +, -, *, /, ^ mathematical functions defined C R math libraries (e.g., fabs, exp, log, sin, abs). may also access R’s functions R math libraries, like lgammafn log gamma function. rxode2 syntax case-sensitive, .e., ABC different abc, Abc, ABc, etc.","code":"# simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3;"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"identifiers","dir":"Articles","previous_headings":"Syntax","what":"Identifiers","title":"rxode2 ODE solving syntax","text":"Like R, Identifiers (variable names) may consist one alphanumeric, underscore _ period . characters, first character digit underscore _. Identifiers model specification can refer : State variables dynamic system (e.g., compartments pharmacokinetics model). Implied input variable, t (time), tlast (last time point), podo (oral dose, undocumented case absorption transit models). Special constants like pi R’s predefined constants. Model parameters (e.g., ka rate absorption, CL clearance, etc.) Others, created assignments part model specification; referred LHS (left-hand side) variable. Currently, rxode2 modeling language recognizes system state variables “parameters”, thus, values need passed R ODE model (e.g., age) either passed params argument integrator function rxSolve() supplied event data-set. certain variable names rxode2 event tables. avoid confusion, following event table-related items assigned, used state can accessed rxode2 code: cmt dvid addl ss rate id However following variables used model specification: evid ii Sometimes rxode2 generates variables fed back rxode2. Similarly, nlmixr2 generates variables used nlmixr estimation simulation. variables start either rx nlmixr prefixes. avoid problems, suggested use variables starting either rx nlmixr prefixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"logical-operators","dir":"Articles","previous_headings":"","what":"Logical Operators","title":"rxode2 ODE solving syntax","text":"Logical operators support standard R operators ==, != >= <= > <. Like R can () () statements, ifelse() expressions. Additionally can standard assignment. instance, following valid: Notice can also use character expressions comparisons. convenience comes cost since character comparisons slower numeric expressions. Unlike R, .numeric .integer logical statements needed, cause syntax error try use function.","code":"cov1 = covm*(sexf == \"female\") + covm*(sexf != \"female\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"supported-functions","dir":"Articles","previous_headings":"","what":"Supported functions","title":"rxode2 ODE solving syntax","text":"supported functions rxode2 can seen rxSupportedFuns(). brief description built-functions following table: Note lag(cmt) = equivalent alag(cmt) = = lag(wt)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"reserved-keywords","dir":"Articles","previous_headings":"","what":"Reserved keywords","title":"rxode2 ODE solving syntax","text":"reserved keywords rxode2 model. following table: Note rxFlag always output 11 calc_lhs since final variables calculated, though can tweak test certain parts rxode2 using flag.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"residual-functions-when-using-rxode2-functions","dir":"Articles","previous_headings":"","what":"Residual functions when using rxode2 functions","title":"rxode2 ODE solving syntax","text":"addition ~ hiding output certain types output, also used specify residual output endpoint input rxode2 model function (includes residual model({}) block). specifications form: Indicating variable var variable represents individual central tendencies model also represents compartment specification data-set. can also change compartment name using | syntax, : case var represents central tendency cmt represents compartment dvid specification.","code":"var ~ add(add.sd) var ~ add(add.sd) | cmt"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"transformations","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Transformations","title":"rxode2 ODE solving syntax","text":"normal related distributions, can apply transformation sides using keywords/functions apply transformations. default likelihood transformations calculated untransformed scale. bounded variables like logit-normal probit-normal low high values defaulted 0 1 missing. models wish proportional model one transformation can replace standard deviation NA allow transformations, lnorm(), probitNorm() logitNorm() can combined variance stabilizing yeoJohnson() transformation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"normal-and-t-related-distributions","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Normal and t-related distributions","title":"rxode2 ODE solving syntax","text":"normal t-related distributions, wanted keep ability use skewed distributions additive proportional t/cauchy-space, distributions specified differently comparison supported distributions within nlmixr2: Note normal t-related distributions nlmixr2 calculate cwres npde normal assumption help assess goodness fit model. Also note +dnorm() mostly testing purposes slow estimation procedure nlmixr2. suggest adding (except explicit testing). multiple endpoint models mix non-normal normal distributions, whole problem shifted log-likelihood method estimation nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"notes-on-additive-proportional-models","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Notes on additive + proportional models","title":"rxode2 ODE solving syntax","text":"two different ways specify additive proportional models, call combined1 combined2, way Monolix calls two distributions (avoid software differences naming). first, combined1, assumes additive proportional differences standard deviation scale, : y=f+(+b* f^c)*err second, combined2, assumes additive proportional differences combined variance scale: y=f+\\[sqrt(^2+b^2 *f^(2c))\\]*err default nlmixr2/rxode2 otherwise specified combined2 since mirrors adding 2 normal distributions statistics add variances (standard deviations). However, combined1 can describe data possibly even better combined2 possible options rxode2/nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"distributions-of-known-likelihoods","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Distributions of known likelihoods","title":"rxode2 ODE solving syntax","text":"residuals related normal, t-distribution cauchy, often residual specification form: compartment specification left handed side specification. generalized likelihood can specify:","code":"cmt ~ dbeta(alpha, beta) ll(cmt) ~ llik specification"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"ordinal-likelihoods","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Ordinal likelihoods","title":"rxode2 ODE solving syntax","text":"Finally, ordinal likelihoods/simulations can specified 2 ways. first : err represents compartment p0 probability specific category: model ensure sum p values less 1. Additionally can write arbitrary number categories ordinal model described . seems little p0 probability category 1 sometimes scores non-whole numbers. can modeled follows: numeric categories specified explicitly, probabilities remain :","code":"err ~ c(p0, p1, p2) err ~ c(p0=0, p1=1, p2=2, 3)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"general-table-of-supported-residual-distributions","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"General table of supported residual distributions","title":"rxode2 ODE solving syntax","text":"general supported following table (available rxode2::rxResidualError)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"bugs-andor-deficiencies","dir":"Articles","previous_headings":"","what":"Bugs and/or deficiencies","title":"rxode2 ODE solving syntax","text":"modulo operator %% currently unsupported.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"note","dir":"Articles","previous_headings":"","what":"Note","title":"rxode2 ODE solving syntax","text":"ODE specification mini-language parsed help open source tool , Plevyak (2015).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"example-model","dir":"Articles","previous_headings":"","what":"Example model","title":"rxode2 ODE solving syntax","text":"commented example quickly show capabilities rxode2 syntax.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"example","dir":"Articles","previous_headings":"","what":"Example","title":"rxode2 ODE solving syntax","text":"","code":"f <- function() { ini({ }) model({ # An rxode2 model specification (this line is a comment). if(comed==0) { # concomitant medication (con-med)? F <- 1.0 # full bioavailability w.o. con-med } else { F <- 0.80 # 20% reduced bioavailability } C2 <- centr/V2 # concentration in the central compartment C3 <- peri/V3 # concentration in the peripheral compartment # ODE describing the PK and PD d/dt(depot) <- -KA*depot d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"interface-and-data-handling-between-r-and-the-generated-c-code","dir":"Articles","previous_headings":"","what":"Interface and data handling between R and the generated C code","title":"rxode2 ODE solving syntax","text":"Users specify variables dynamic system’s state variables via d/dt(identifier) operator part model specification, model parameters via params= argument rxode2 solve() method: values variables pre-specified time points saved model fitting/integration returned part fitted values (see function et(), define set time points capture values variables) returned part modeling output. ODE specification mini-language parsed help open source tool DParser, Plevyak (2015).","code":"m1 <- rxode2(model = ode, modName = \"m1\") # model parameters -- a named vector is required theta <- c(KA=0.29, CL=18.6, V2=40.2, Q=10.5, V3=297, Kin=1, Kout=1, EC50=200) # state variables and their amounts at time 0 (the use of names is # encouraged, but not required) inits <- c(depot=0, centr=0, peri=0, eff=1) # qd1 is an eventTable specification with a set of dosing and sampling # records (code not shown here) solve(theta, event = qd1, inits = inits)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-tutorials.html","id":"interactive-tutorials","dir":"Articles","previous_headings":"","what":"Interactive tutorials","title":"Interactive Tutorials","text":"rxode2 comes interactive tutorials can run R session; built Rstudio 1.3 can run R session :","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## rxode2 Syntax learnr::run_tutorial(\"rxode2-00-syntax\", \"rxode2\") ## rxode2 event tables learnr::run_tutorial(\"rxode2-00-events\", \"rxode2\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"creating-a-2-compartment-model-in-rxode2","dir":"Articles","previous_headings":"","what":"Creating a 2-compartment model in rxode2","title":"Weight Based Dosing in rxode2","text":"","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## Note the time covariate is not included in the simulation m1 <- function() { model({ CL ~ (1-0.2*SEX)*(0.807+0.00514*(CRCL-91.2))*exp(eta.cl) V1 ~ 4.8*exp(eta.v1) Q ~ (3.46+0.0593*(WT-75.1))*exp(eta.q); V2 ~ 1.93*(3.13+0.0458*(WT-75.1))*exp(eta.v2) A1 ~ centr; A2 ~ peri; d/dt(centr) <- - A1*(CL/V1 + Q/V1) + A2*Q/V2; d/dt(peri) <- A1*Q/V1 - A2*Q/V2; DV = centr / V1 * (1 + prop.err) }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"simulating-covariates","dir":"Articles","previous_headings":"","what":"Simulating Covariates","title":"Weight Based Dosing in rxode2","text":"simulation correlates age, sex, weight. Since using weight based dosing, needs simulated first","code":"set.seed(42) rxSetSeed(42) library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union nsub=30 # Simulate Weight based on age and gender AGE<-round(runif(nsub,min=18,max=70)) SEX<-round(runif(nsub,min=0,max=1)) HTm<-round(rnorm(nsub,176.3,0.17*sqrt(4482)),digits=1) HTf<-round(rnorm(nsub,162.2,0.16*sqrt(4857)),digits=1) WTm<-round(exp(3.28+1.92*log(HTm/100))*exp(rnorm(nsub,0,0.14)),digits=1) WTf<-round(exp(3.49+1.45*log(HTf/100))*exp(rnorm(nsub,0,0.17)),digits=1) WT<-ifelse(SEX==1,WTf,WTm) CRCL<-round(runif(nsub,30,140)) ## id is in lower case to match the event table cov.df <- tibble(id=seq_along(AGE), AGE=AGE, SEX=SEX, WT=WT, CRCL=CRCL) print(cov.df) #> # A tibble: 30 x 5 #> id AGE SEX WT CRCL #> #> 1 1 66 1 49.4 83 #> 2 2 67 1 52.5 79 #> 3 3 33 0 97.9 37 #> 4 4 61 1 63.8 66 #> 5 5 51 0 71.8 127 #> 6 6 45 1 69.6 132 #> 7 7 56 0 61 73 #> 8 8 25 0 57.7 47 #> 9 9 52 1 58.7 65 #> 10 10 55 1 73.1 64 #> # i 20 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"creating-weight-based-event-table","dir":"Articles","previous_headings":"","what":"Creating weight based event table","title":"Weight Based Dosing in rxode2","text":"","code":"s<-c(0,0.25,0.5,0.75,1,1.5,seq(2,24,by=1)) s <- lapply(s, function(x){.x <- 0.1 * x; c(x - .x, x + .x)}) e <- et() %>% ## Specify the id and weight based dosing from covariate data.frame ## This requires rxode2 XXX et(id=cov.df$id, amt=6*cov.df$WT, rate=6 * cov.df$WT) %>% ## Sampling is added for each ID et(s) %>% as.data.frame %>% ## Merge the event table with the covarite information merge(cov.df, by=\"id\") %>% as_tibble e #> # A tibble: 900 x 12 #> id low time high cmt amt rate evid AGE SEX WT CRCL #> #> 1 1 0 0 0 (obs) NA NA 0 66 1 49.4 83 #> 2 1 NA 0 NA (default) 296. 296. 1 66 1 49.4 83 #> 3 1 0.225 0.246 0.275 (obs) NA NA 0 66 1 49.4 83 #> 4 1 0.45 0.516 0.55 (obs) NA NA 0 66 1 49.4 83 #> 5 1 0.675 0.729 0.825 (obs) NA NA 0 66 1 49.4 83 #> 6 1 0.9 0.921 1.1 (obs) NA NA 0 66 1 49.4 83 #> 7 1 1.35 1.42 1.65 (obs) NA NA 0 66 1 49.4 83 #> 8 1 1.8 1.82 2.2 (obs) NA NA 0 66 1 49.4 83 #> 9 1 2.7 2.97 3.3 (obs) NA NA 0 66 1 49.4 83 #> 10 1 3.6 3.87 4.4 (obs) NA NA 0 66 1 49.4 83 #> # i 890 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"solving-daptomycin-simulation","dir":"Articles","previous_headings":"","what":"Solving Daptomycin simulation","title":"Weight Based Dosing in rxode2","text":"","code":"data <- rxSolve(m1, e, ## Lotri uses lower-triangular matrix rep. for named matrix omega=lotri(eta.cl ~ .306, eta.q ~0.0652, eta.v1 ~.567, eta.v2 ~ .191), sigma=lotri(prop.err ~ 0.15), addDosing = TRUE, addCov = TRUE) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(data) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> # A tibble: 30 x 5 #> id eta.cl eta.v1 eta.q eta.v2 #> #> 1 1 0.343 -1.25 -0.0936 -0.253 #> 2 2 0.444 -0.0581 0.187 0.233 #> 3 3 0.142 0.203 0.0617 1.03 #> 4 4 0.274 -0.733 -0.0000116 -0.321 #> 5 5 0.505 -0.104 -0.406 -0.518 #> 6 6 0.472 1.48 -0.537 0.210 #> 7 7 0.156 -0.0295 0.112 -0.226 #> 8 8 -0.747 0.519 -0.347 0.476 #> 9 9 0.326 -0.373 0.340 0.470 #> 10 10 0.428 -1.28 0.131 -0.0240 #> # i 20 more rows #> -- Initial Conditions ($inits): -- #> centr peri #> 0 0 #> -- First part of data (object): -- #> # A tibble: 900 x 12 #> id evid cmt amt rate time DV centr peri SEX WT CRCL #> #> 1 1 1 1 296. 296. 0 0 0 0 1 49.4 83 #> 2 1 0 NA NA NA 0 0 0 0 1 49.4 83 #> 3 1 0 NA NA NA 0.246 41.3 58.7 9.45 1 49.4 83 #> 4 1 0 NA NA NA 0.516 31.0 100. 34.0 1 49.4 83 #> 5 1 0 NA NA NA 0.729 72.2 124. 58.9 1 49.4 83 #> 6 1 0 NA NA NA 0.921 82.0 140. 83.1 1 49.4 83 #> # i 894 more rows plot(data, log=\"y\") #> Warning in transformation$transform(x): NaNs produced #> Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = #> minor_breaks, : log-10 transformation introduced infinite #> values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"daptomycin-reference","dir":"Articles","previous_headings":"","what":"Daptomycin Reference","title":"Weight Based Dosing in rxode2","text":"weight-based simulation adapted Daptomycin article : Dvorchik B, Arbeit RD, Chung J, Liu S, Knebel W, Kastrissios H. Population pharmacokinetics daptomycin. Antimicrob Agents Che mother 2004; 48: 2799-2807. doi:(10.1128/AAC.48.8.2799-2807.2004)[https://dx.doi.org/10.1128%2FAAC.48.8.2799-2807.2004] simulation example made available work Sherwin Sy modifications Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors","text":"Matthew L. Fidler (core team/developer/manual) Melissa Hallow (tutorial writer) Wenping Wang (core team/developer)","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":"contributors","dir":"","previous_headings":"","what":"Contributors","title":"Authors","text":"Zufar Mulyukov – Wrote initial version rxShiny() modifications Matthew Fidler Alan Hindmarsh – Lsoda author Awad H. Al-Mohy – Al-Mohy matrix exponential author Ernst Hairer – dop853 author Gerhard Wanner – dop853 author Goro Fuji – Timsort author Hadley Wickham – Author original findLhs RxODE, also original author .s3register (used permission anyone, changed Matthew Fidler) Jack Dongarra – LApack author Linda Petzold – LSODA Martin Maechler – expm author, used routines inductive linearization Morwenn – Timsort author Nicholas J. Higham – Author Al-mohy matrix exponential Roger B. Sidje – expokit matrix exponential author Simon Frost – thread safe C implementation liblsoda Kevin Ushey – Original author fast factor, modified Matthew Filder Yu Feng – thread safe liblsoda Cleve Moler – LApack author David Cooley – Author fast_factor modified now used RxODE quickly create factors IDs without sorting like R Drew Schmidt – Drew Schmidt author edits exponential matrix utility taken R package expm Matt Dowle & Arun Srinivasan – data.table authors openMp framework based upon","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":"rxode-acknowledgments","dir":"","previous_headings":"","what":"RxODE acknowledgments:","title":"Authors","text":"Sherwin Sy – Weight based dosing example Justin Wilkins – Documentation updates, logo testing Emma Schwager – R IJK distribution author J Coligne – dop853 fortran author Bill Denney – Documentation updates, manual minor bug fixes Tim Waterhouse – Fixed one bug mac working directories Richard Upton – Helped solving ADVAN linCmt() solutions Dirk Eddelbuettel – Made fixes Rcpp changes require R strict headers Ross Ihaka – R author Robert Gentleman – R author R core team – R authors","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 R package solving simulating ode-based models. models convert rxode2 mini-language C create compiled dll fast solving. ODE solving using rxode2 key parts: rxode2() creates C code fast ODE solving based simple syntax related Leibnitz notation. NONMEM deSolve compatible data frame, created et() eventTable() easy simulation events data frame can augmented adding time-varying adding individual covariates (iCov= needed) multiple subject data, may parallelized. single subject output data frame adaptive Covariances metrics uncertanty can used simulate solving","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Facilities for Simulating from ODE-Based Models","text":"can install released version rxode2 CRAN : fastest way install development version rxode2 use r-universe service. service compiles binaries development version MacOS Windows don’t wait package compilation: doesn’t work install development version rxode2 build models rxode2, need working c compiler. use parallel threaded solving rxode2, c compiler needs support open-mp. can check see R working c compiler can check : toolchain, can set described platform information :","code":"install.packages(\"rxode2\") install.packages(c(\"dparser\", \"rxode2ll\", \"rxode2parse\", \"rxode2random\", \"rxode2et\", \"rxode2\"), repos=c(nlmixr2=\"https://nlmixr2.r-universe.dev\", CRAN=\"https://cloud.r-project.org\")) devtools::install_github(\"nlmixr2/rxode2parse\") devtools::install_github(\"nlmixr2/rxode2random\") devtools::install_github(\"nlmixr2/rxode2et\") devtools::install_github(\"nlmixr2/rxode2ll\") devtools::install_github(\"nlmixr2/rxode2\") ## install.packages(\"pkgbuild\") pkgbuild::has_build_tools(debug = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"windows","dir":"","previous_headings":"Installation","what":"Windows","title":"Facilities for Simulating from ODE-Based Models","text":"windows may simply use installr install rtools: Alternatively can download install rtools directly.","code":"install.packages(\"installr\") library(installr) install.rtools()"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"mac-osx","dir":"","previous_headings":"Installation","what":"Mac OSX","title":"Facilities for Simulating from ODE-Based Models","text":"get speed need OpenMP enabled compile rxode2 compiler. various options date discussion likely data.table installation FAQ MacOS. last thing keep mind rxode2 uses code similar original lsoda requires gfortran compiler setup well OpenMP compilers. going using rxode2 nlmixr together older mac computer, suggest trying following: crashes R session binary work Mac machine. able run nlmixr, need compile package manually. proceed assuming homebrew installed system. system terminal need install dependencies compile symengine: installing dependencies, need re-install symengine:","code":"library(symengine) brew install cmake gmp mpfr libmpc install.packages(\"symengine\", type=\"source\") library(symengine)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"linux","dir":"","previous_headings":"Installation","what":"Linux","title":"Facilities for Simulating from ODE-Based Models","text":"install linux make sure install gcc (openmp support) gfortran using distribution’s package manager. also install system dependencies like udunits symengine dependencies complete installation work linux. also done system packages package manager add appropriate repositories. point r2u project.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"r-versions-40-and-41","dir":"","previous_headings":"Installation","what":"R versions 4.0 and 4.1","title":"Facilities for Simulating from ODE-Based Models","text":"installation R versions 4.0.x 4.1.x, please see instructions install symengine nlmixr2 installation instructions: https://github.com/nlmixr2/nlmixr2#r-package-installation","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"development-version","dir":"","previous_headings":"","what":"Development version","title":"Facilities for Simulating from ODE-Based Models","text":"Since development version rxode2 uses StanHeaders, need make sure compiler setup support C++14, described rstan setup page. R 4.0, believe requires modifying windows toolchain longer (much easier setup). C++ toolchain setup appropriately, can install development version GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"nlmixr2/rxode2parse\") devtools::install_github(\"nlmixr2/rxode2random\") devtools::install_github(\"nlmixr2/rxode2et\") devtools::install_github(\"nlmixr2/rxode2ll\") devtools::install_github(\"nlmixr2/rxode2\")"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"illustrated-example","dir":"","previous_headings":"","what":"Illustrated Example","title":"Facilities for Simulating from ODE-Based Models","text":"model equations can specified text string, model file R expression. differential algebraic equations permitted. Differential equations specified d/dt(var_name) =. equation can separated semicolon. load rxode2 package compile model: Model parameters may specified ini({}) model block, initial conditions can specified within model cmt(0)= X, like model eff(0) <- 1. may also specify subject variability initial conditions residual error components just like nlmixr2. allows single interface nlmixr2/rxode2 models. Also note, classic rxode2 interface still works just like past (don’t worry breaking code time). fact, can get classic rxode2 model $simulationModel ui object:","code":"library(rxode2) #> rxode2 2.1.2.9000 using 8 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } mod1 <- mod1() # create the ui object (can also use `rxode2(mod1)`) mod1 summary(mod1$simulationModel)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"specify-dosing-and-sampling-in-rxode2","dir":"","previous_headings":"","what":"Specify Dosing and sampling in rxode2","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 provides simple flexible way specify dosing sampling functions generate event table. First, empty event table generated “et()” function. interface similar NONMEM event tables: can see code, can dose compartment named rxode2 model. slight deviation NONMEM can reduce need compartment renumbering. events can also combined expanded (multi-subject events complex regimens) rbind, c, seq, rep. information creating complex dosing regimens using rxode2 see rxode2 events vignette.","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"solving-odes","dir":"","previous_headings":"","what":"Solving ODEs","title":"Facilities for Simulating from ODE-Based Models","text":"ODE can now solved using rxSolve: returns modified data frame. can see compartment values plot : , Note labels automatically labeled units initial event table. rxode2 extracts units label plot (present).","code":"x <- mod1 %>% rxSolve(ev) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> In file included from /usr/share/R/include/R.h:71, #> from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, #> from /tmp/RtmpMKFh3q/temp_libpath2b2b3c8645df/rxode2/include/rxode2.h:9, #> from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, #> from rx_f5e1c8d22ddcc3e6890ad688a5f37e59_.c:117: #> /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] #> 80 | }; #> | ^ x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows library(ggplot2) plot(x,C2) + ylab(\"Central Concentration\") plot(x,eff) + ylab(\"Effect\")"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"ode-solving","dir":"","previous_headings":"","what":"ODE solving","title":"Facilities for Simulating from ODE-Based Models","text":"brief comparison pharmacometric ODE solving R packages rxode2. several R packages differential equations. popular deSolve. However pharmacometrics-specific ODE solving, 2 packages rxode2 released CRAN. uses compiled code faster ODE solving. mrgsolve, uses C++ lsoda solver solve ODE systems. user required write hybrid R/C++ code create mrgsolve model translated C++ solving. contrast, rxode2 R-like mini-language parsed C code solves ODE system. Unlike rxode2, mrgsolve currently support symbolic manipulation ODE systems, like automatic Jacobian calculation forward sensitivity calculation (rxode2 currently supports basis nlmixr2’s FOCEi algorithm) dMod, uses unique syntax create “reactions”. reactions create underlying ODEs created c code compiled deSolve model. contrast rxode2 defines ODE systems lower level. rxode2’s parsing mini-language comes C, whereas dMod’s parsing comes R. Like rxode2, dMod supports symbolic manipulation ODE systems calculates forward sensitivities adjoint sensitivities systems. Unlike rxode2, dMod thread-safe since deSolve yet thread-safe. PKPDsim defines models R-like syntax converts system compiled code. Like mrgsolve, PKPDsim currently support symbolic manipulation ODE systems. PKPDsim thread-safe. open pharmacometrics open source community fairly friendly, rxode2 maintainers positive interactions ODE-solving pharmacometric projects listed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"pk-solved-systems","dir":"","previous_headings":"","what":"PK Solved systems","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 supports 1-3 compartment models gradients (using stan math’s auto-differentiation). currently uses equations PKADVAN allow time-varying covariates. rxode2 can mix ODEs solved systems.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"the-following-packages-for-solved-pk-systems-are-on-cran","dir":"","previous_headings":"PK Solved systems","what":"The following packages for solved PK systems are on CRAN","title":"Facilities for Simulating from ODE-Based Models","text":"mrgsolve currently 1-2 compartment (poly-exponential models) models built-. solved systems ODEs currently mixed. pmxTools currently 1-3 compartment (super-positioning) models built-. R-implementation. PKPDsim uses 1-3 “ADVAN” solutions using non-superpositioning. PKPDmodels one-compartment model gradients.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"non-cran-libraries","dir":"","previous_headings":"PK Solved systems","what":"Non-CRAN libraries:","title":"Facilities for Simulating from ODE-Based Models","text":"PKADVAN Provides 1-3 compartment models using non-superpositioning. allows time-varying covariates.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":null,"dir":"Reference","previous_headings":"","what":"Turn into an ini block for initialization — as.ini","title":"Turn into an ini block for initialization — as.ini","text":"Turn ini block initialization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Turn into an ini block for initialization — as.ini","text":"","code":"as.ini(x) # S3 method for character as.ini(x) # S3 method for data.frame as.ini(x) # S3 method for call as.ini(x) # S3 method for lotriFix as.ini(x) # S3 method for matrix as.ini(x) # S3 method for default as.ini(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Turn into an ini block for initialization — as.ini","text":"x Item convert rxode2/nlmixr2 ui ini expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Turn into an ini block for initialization — as.ini","text":"rxode2 ini expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Turn into an ini block for initialization — as.ini","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Turn into an ini block for initialization — as.ini","text":"","code":"ini <- quote(ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 })) as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) l <- quote(lotri({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 })) as.ini(l) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) m <- lotri({ eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 }) as.ini(m) #> ini({ #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) one.compartment <- function() { ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } as.ini(one.compartment) #> #> #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ui <- one.compartment() as.ini(ui) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ui$iniDf #> ntheta neta1 neta2 name lower est upper fix label backTransform #> 1 1 NA NA tka -Inf 0.4510756 Inf FALSE #> 2 2 NA NA tcl -Inf 1.0006319 Inf FALSE #> 3 3 NA NA tv -Inf 3.4499875 Inf FALSE #> 4 4 NA NA add.sd 0 0.7000000 Inf FALSE #> 5 NA 1 1 eta.ka -Inf 0.6000000 Inf FALSE #> 6 NA 2 2 eta.cl -Inf 0.3000000 Inf FALSE #> 7 NA 3 3 eta.v -Inf 0.1000000 Inf FALSE #> condition err #> 1 #> 2 #> 3 #> 4 cp add #> 5 id #> 6 id #> 7 id as.ini(ui$iniDf) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ini <- c(\"ini({\", \"tka <- log(1.57)\", \"tcl <- log(2.72)\", \"tv <- log(31.5)\", \"eta.ka ~ 0.6\", \"eta.cl ~ 0.3\", \"eta.v ~ 0.1\", \"add.sd <- 0.7\", \"})\") as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ini <- paste(ini, collapse=\"\\n\") as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> })"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":null,"dir":"Reference","previous_headings":"","what":"Turn into a model expression — as.model","title":"Turn into a model expression — as.model","text":"Turn model expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Turn into a model expression — as.model","text":"","code":"as.model(x) # S3 method for character as.model(x) # S3 method for call as.model(x) # S3 method for list as.model(x) # S3 method for default as.model(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Turn into a model expression — as.model","text":"x item convert model({}) expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Turn into a model expression — as.model","text":"model expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Turn into a model expression — as.model","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Turn into a model expression — as.model","text":"","code":"model <- quote(model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) })) as.model(model) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) one.compartment <- function() { ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } as.model(one.compartment) #> #> #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) ui <- one.compartment() as.model(ui) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) model <- c(\"model({\", \"ka <- exp(tka + eta.ka)\", \"cl <- exp(tcl + eta.cl)\", \"v <- exp(tv + eta.v)\", \"d/dt(depot) = -ka * depot\", \"d/dt(center) = ka * depot - cl / v * center\", \"cp = center / v\", \"cp ~ add(add.sd)\", \"})\") as.model(model) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) model <- paste(model, collapse=\"\\n\") as.model(model) #> model({ #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> })"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"As rxode2 ui — as.rxUi","title":"As rxode2 ui — as.rxUi","text":"rxode2 ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"As rxode2 ui — as.rxUi","text":"","code":"as.rxUi(x) # S3 method for rxode2 as.rxUi(x) # S3 method for rxode2tos as.rxUi(x) # S3 method for rxModelVars as.rxUi(x) # S3 method for `function` as.rxUi(x) # S3 method for rxUi as.rxUi(x) # S3 method for default as.rxUi(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"As rxode2 ui — as.rxUi","text":"x Object convert rxUi object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"As rxode2 ui — as.rxUi","text":"rxUi object (error converted)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"As rxode2 ui — as.rxUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"As rxode2 ui — as.rxUi","text":"","code":"mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } as.rxUi(mod1) #> #> #> ── rxode2-based free-form 4-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 centr #> 3 3 peri #> 4 4 eff #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> KA <- 0.294 #> CL <- 18.6 #> V2 <- 40.2 #> Q <- 10.5 #> V3 <- 297 #> Kin <- 1 #> Kout <- 1 #> EC50 <- 200 #> }) #> model({ #> C2 <- centr/V2 #> C3 <- peri/V3 #> d/dt(depot) <- -KA * depot #> d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) <- Q * C2 - Q * C3 #> eff(0) <- 1 #> d/dt(eff) <- Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"Assert properties of the rxUi models — assertRxUi","title":"Assert properties of the rxUi models — assertRxUi","text":"Assert properties rxUi models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assert properties of the rxUi models — assertRxUi","text":"","code":"assertRxUi(model, extra = \"\", .var.name = .vname(model)) assertRxUiPrediction(model, extra = \"\", .var.name = .vname(model)) assertRxUiSingleEndpoint(model, extra = \"\", .var.name = .vname(model)) assertRxUiTransformNormal(model, extra = \"\", .var.name = .vname(model)) assertRxUiNormal(model, extra = \"\", .var.name = .vname(model)) assertRxUiMuRefOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiEstimatedResiduals(model, extra = \"\", .var.name = .vname(model)) assertRxUiPopulationOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiMixedOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiRandomOnIdOnly(model, extra = \"\", .var.name = .vname(model))"},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assert properties of the rxUi models — assertRxUi","text":"model Model check extra Extra text append error message (like \"focei\") .var.name [character(1)] Name checked object print assertions. Defaults heuristic implemented vname.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assert properties of the rxUi models — assertRxUi","text":"rxUi model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assert properties of the rxUi models — assertRxUi","text":"functions different types assertions assertRxUi -- Make sure proper rxode2 model (throw error) assertRxUiSingleEndpoint -- Make sure rxode2 model single endpoint model (throw error) assertRxUiTransformNormal -- Make sure model residual distribution normal transformably normal assertRxUiNormal -- Make sure model residual distribution normal assertRxUiEstimatedResiduals -- Make sure residual error parameters estimated (modeled). assertRxUiPopulationOnly -- Make sure model population model (mixed effects) assertRxUiMixedOnly -- Make sure model mixed effect model (population effect, ) assertRxUiPrediction -- Make sure model predictions assertRxUiMuRefOnly -- Make sure parameters mu-referenced assertRxUiRandomOnIdOnly -- Make sure random effects ID level","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assert properties of the rxUi models — assertRxUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assert properties of the rxUi models — assertRxUi","text":"","code":"# \\donttest{ one.cmt <- function() { ini({ tka <- 0.45; label(\"Ka\") tcl <- log(c(0, 2.7, 100)); label(\"Cl\") tv <- 3.45; label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) }) } assertRxUi(one.cmt) #> #> # assertRxUi(rnorm) # will fail assertRxUiSingleEndpoint(one.cmt) #> #> # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"meant perform way quantile() can drop replacement code using quantile() using distributional assumptions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"","code":"binomProbs(x, ...) # S3 method for default binomProbs( x, probs = c(0.025, 0.05, 0.5, 0.95, 0.975), na.rm = FALSE, names = TRUE, onlyProbs = TRUE, n = 0L, m = 0L, pred = FALSE, piMethod = c(\"lim\"), M = 5e+05, tol = .Machine$double.eps^0.25, ciMethod = c(\"wilson\", \"wilsonCorrect\", \"agrestiCoull\", \"wald\", \"wc\", \"ac\"), ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"x numeric vector whose mean probability based confidence values wanted, NA NaN values allowed numeric vectors unless na.rm TRUE. ... Arguments passed default method, allows many different methods applied. probs numeric vector probabilities values interval 0 1, inclusive. 0, represents maximum observed, 1, represents maximum observed. 0.5 represents expected probability (mean). na.rm logical; true, NA NaN's removed x quantiles computed. names logical; true, result names attribute. onlyProbs logical; true, return probability based confidence interval/prediction interval estimates, otherwise return extra statistics. n integer/integerish; n used calculate prediction confidence interval. n=0 (default) use number non-NA observations. calculating prediction interval, represents number observations used input (\"true\") distribution. m integer. using prediction interval represents number samples observed future prediction interval. pred Use prediction interval instead confidence interval. default FALSE. piMethod gives prediction interval method (currently lim) Lu 2020 M number simulations run LIM PI. tol tolerance root finding LIM prediction interval ciMethod gives method calculating confidence interval. Can : \"argestiCoull\" \"ac\" -- Agresti-Coull method. 95\\ interval, method use concept \"adding 2 successes 2 failures,\" rather uses formulas explicitly described following link: https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Agresti-Coull_Interval. \"wilson\" -- Wilson Method \"wilsonCorrect\" \"wc\" -- Wilson method continuity correction \"wald\" -- Wald confidence interval standard z approximation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"default return probabilities names (named) points expected distribution located given sampling mean standard deviation. onlyProbs=FALSE prepend mean, variance, standard deviation, minimum, maximum number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"used confidence intervals rxode2 solved objects using confint(mean=\"binom\")","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"Newcombe, R. G. (1998). \"Two-sided confidence intervals single proportion: comparison seven methods\". Statistics Medicine. 17 (8): 857–872. doi:10.1002/(SICI)1097-0258(19980430)17:8<857::AID-SIM777>3.0.CO;2-E. PMID 9595616. Hezhi Lu, Hua Jin, new prediction interval binomial random variable based inferential models, Journal Statistical Planning Inference, Volume 205, 2020, Pages 156-174, ISSN 0378-3758, https://doi.org/10.1016/j.jspi.2019.07.001.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"","code":"x<- rbinom(7001, p=0.375, size=1) binomProbs(x) #> 2.5% 5% 50% 95% 97.5% #> 0.3716257 0.3734362 0.3829453 0.3925448 0.3943933 # you can also use the prediction interval # \\donttest{ binomProbs(x, pred=TRUE) #> 2.5% 5% 50% 95% 97.5% #> 0.3668047 0.3695186 0.3829453 0.3965148 0.3990858 # } # Can get some extra statistics if you request onlyProbs=FALSE binomProbs(x, onlyProbs=FALSE) #> mean var sd n 2.5% 5% #> 0.3829453 0.2362982 0.4861051 7001.0000000 0.3716257 0.3734362 #> 50% 95% 97.5% #> 0.3829453 0.3925448 0.3943933 x[2] <- NA_real_ binomProbs(x, onlyProbs=FALSE) #> mean var sd n 2.5% 5% 50% 95% 97.5% #> NA NA NA NA NA NA NA NA NA binomProbs(x, na.rm=TRUE) #> 2.5% 5% 50% 95% 97.5% #> 0.3715373 0.3733478 0.3828571 0.3924570 0.3943055"},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the rxode2 coefficients — coef.rxode2","title":"Return the rxode2 coefficients — coef.rxode2","text":"returns parameters , state variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the rxode2 coefficients — coef.rxode2","text":"","code":"# S3 method for rxode2 coef(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the rxode2 coefficients — coef.rxode2","text":"object rxode2 object ... ignored arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the rxode2 coefficients — coef.rxode2","text":"rxCoef object following params list strings parameters rxode2 object state list strings names state rxode2 object. ini model specified default values parameters. rxode2 referring rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the rxode2 coefficients — coef.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":null,"dir":"Reference","previous_headings":"","what":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"returns new expression, old expression, new variable old variable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"","code":".assertRenameErrorModelLine(line, vars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"line quoted call information line vars Variables contained within mdel","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"list(new, old, newChar, oldChar)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":null,"dir":"Reference","previous_headings":"","what":"This copies the rxode2 UI object so it can be modified — .copyUi","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"copies rxode2 UI object can modified","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"","code":".copyUi(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"ui Original UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"Copied UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"Handle single error normal t distributions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"","code":".handleSingleErrTypeNormOrTFoceiBase( env, pred1, errNum = 1L, rxPredLlik = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"env Environment parsed model pred1 data.frame current error errNum number error specification nlmixr2 model rxPredLlik boolean indicating log likelihood calculated non-normal distributions. default TRUE.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"list lines added. lines contain rx_yj_ integer corresponds transformation type. rx_lambda_ transformation lambda rx_low_ lower boundary transformation rx_hi_ upper boundary transformation rx_pred_f_ prediction function rx_pred_ transformed prediction function rx_r_ transformed variance","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":null,"dir":"Reference","previous_headings":"","what":"This gets the append arg for the ini() piping — .iniGetAppendArg","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"gets append arg ini() piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"","code":".iniGetAppendArg(f, s)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"f try(force(append)) argument, s .character(substitute(append)) argument","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"corrected ini piping argument exported creating new ini methods requirements piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder rows in iniDf — .iniHandleAppend","title":"Reorder rows in iniDf — .iniHandleAppend","text":"Reorder rows iniDf","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder rows in iniDf — .iniHandleAppend","text":"","code":".iniHandleAppend(expr, rxui, envir, append)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder rows in iniDf — .iniHandleAppend","text":"expr Expression parsing rxui User interface function envir Environment parsing append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reorder rows in iniDf — .iniHandleAppend","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":null,"dir":"Reference","previous_headings":"","what":"Update the iniDf of a model — .iniHandleLine","title":"Update the iniDf of a model — .iniHandleLine","text":"Update iniDf model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update the iniDf of a model — .iniHandleLine","text":"","code":".iniHandleLine(expr, rxui, envir = parent.frame(), append = NULL) .iniHandleFixOrUnfix(expr, rxui, envir = parent.frame(), append = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update the iniDf of a model — .iniHandleLine","text":"expr Expression parsing rxui User interface function envir Environment parsing append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update the iniDf of a model — .iniHandleLine","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Update the iniDf of a model — .iniHandleLine","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if a language object matches a template language object — .matchesLangTemplate","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"template == str2lang(\".\"), match anything. template == str2lang(\".name\"), match name. template == str2lang(\".call()\"), match call.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"","code":".matchesLangTemplate(x, template)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"x object check template template object match","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"TRUE matches, FALSE, otherwise","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"","code":".matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/dt(.name)\")) #> [1] TRUE .matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/foo(.name)\")) #> [1] FALSE .matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/.\")) #> [1] TRUE"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal messaging statements — .minfo","title":"Internal messaging statements — .minfo","text":"Internal messaging statements","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal messaging statements — .minfo","text":"","code":".minfo(text, ..., .envir = parent.frame()) .malert(text, ..., .envir = parent.frame()) .mwarn(text, ..., .envir = parent.frame()) .msuccess(text, ..., .envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal messaging statements — .minfo","text":"text Text ... arguments .envir Environment evaluate ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal messaging statements — .minfo","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal messaging statements — .minfo","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle model lines — .modelHandleModelLines","title":"Handle model lines — .modelHandleModelLines","text":"Handle model lines","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle model lines — .modelHandleModelLines","text":"","code":".modelHandleModelLines( modelLines, rxui, modifyIni = FALSE, append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir )"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle model lines — .modelHandleModelLines","text":"modelLines model lines considered rxui rxode2 UI object modifyIni ini() considered append boolean determine lines appended piping. possible values : TRUE lines appended model instead replaced FALSE lines replaced model (default) NA lines pre-pended model instead replaced lhs expression, append lines last observed line expression lhs auto boolean tells piping automatically selects parameters characterized population parameter, subject variability, covariate. TRUE automatic selection occurs. FALSE automatic selection turned everything added covariate (can promoted parameter ini statement). default TRUE, can changed options(rxode2.autoVarPiping=FALSE). cov character vector variables assumed covariates. override automatic promotion population parameter estimate (eta) envir Environment evaluation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Handle model lines — .modelHandleModelLines","text":"New UI","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Handle model lines — .modelHandleModelLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns quoted call information — .quoteCallInfoLines","title":"Returns quoted call information — .quoteCallInfoLines","text":"Returns quoted call information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns quoted call information — .quoteCallInfoLines","text":"","code":".quoteCallInfoLines(callInfo, envir = parent.frame(), iniDf = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns quoted call information — .quoteCallInfoLines","text":"callInfo Call information envir Environment evaluation (needed) iniDf parent model iniDf piping ini block (NULL otherwise)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Returns quoted call information — .quoteCallInfoLines","text":"Quote call information. name=expression, change name<-expression quoted call list. expressions within brackets ie {}, unlist brackets called one single sequence.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Returns quoted call information — .quoteCallInfoLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Print out a table in the documentation — .rxDocTable","title":"Print out a table in the documentation — .rxDocTable","text":"Print table documentation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print out a table in the documentation — .rxDocTable","text":"","code":".rxDocTable(table, caption = \"none\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print out a table in the documentation — .rxDocTable","text":"table data frame caption character vector representing caption latex table","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print out a table in the documentation — .rxDocTable","text":"based knitr context: output kableExtra::kbl latex output output DT::datatable html output otherwise output knitr::kable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print out a table in the documentation — .rxDocTable","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print out a table in the documentation — .rxDocTable","text":"","code":".rxDocTable(rxReservedKeywords) #> #> #> |Reserved Name |Meaning |Alias | #> |:--------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------| #> |time |solver time |t | #> |podo |In Transit compartment models, last dose amount | | #> |tlast |Time of Last dose | | #> |M_E |Exp(1) | | #> |M_LOG2E |log2(e) | | #> |M_LOG10E |log10(e) | | #> |M_LN2 |log(2) | | #> |M_LN10 |log(10) | | #> |M_PI |pi | | #> |M_PI_2 |pi/2 | | #> |M_PI_4 |pi/4 | | #> |M_1_PI |1/pi | | #> |M_2_PI |2/pi | | #> |M_2_SQRTPI |2/sqrt(pi) | | #> |M_SQRT2 |sqrt(2) | | #> |M_SQRT1_2 |1/sqrt(2) | | #> |M_SQRT_3 |sqrt(3) | | #> |M_SQRT_32 |sqrt(32) | | #> |M_LOG10_2 |Log10(2) | | #> |M_2PI |2*pi | | #> |M_SQRT_PI |sqrt(pi) | | #> |M_1_SQRT_2PI |1/(sqrt(2*pi)) | | #> |M_LN_SQRT_PI |log(sqrt(pi)) | | #> |M_LN_SQRT_2PI |log(sqrt(2*pi)) | | #> |M_LN_SQRT_PId2 |log(sqrt(pi/2)) | | #> |pi |pi | | #> |NA |R's NA value | | #> |NaN |Not a Number Value | | #> |Inf |Infinite Value | | #> |newind |1: First record of individual; 2: Subsequent record of individual |NEWIND | #> |rxFlag |Flag for what part of the rxode2 model is being run; 1: ddt; 2: jac; 3: ini; 4: F; 5: lag; 6: rate; 7: dur; 8: mtime; 9: matrix exponential; 10: inductive linearization; 11: lhs | |"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Get upper boundary condition transformation ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"","code":".rxGetHiBoundaryPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Upper Boundary","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Get lambda value based pred information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"","code":".rxGetLambdaFromPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"env Environment environment pred1 Single error data frame","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Lambda expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Get lower boundary condition transformation requires ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"","code":".rxGetLowBoundaryPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Lower Boundary","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Observation transformation — .rxGetPredictionDVTransform","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"Get Observation transformation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"","code":".rxGetPredictionDVTransform(env, pred1, yj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"env Environment parsed model pred1 data.frame current error yj transformation number current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"transformation expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the prediction name — .rxGetPredictionF","title":"Get the prediction name — .rxGetPredictionF","text":"Get prediction name","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the prediction name — .rxGetPredictionF","text":"","code":".rxGetPredictionF(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the prediction name — .rxGetPredictionF","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the prediction name — .rxGetPredictionF","text":"prediction symbol","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the prediction name — .rxGetPredictionF","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the prediction transformation — .rxGetPredictionFTransform","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"Get prediction transformation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"","code":".rxGetPredictionFTransform(env, pred1, yj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"env Environment parsed model pred1 data.frame current error yj transformation number current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"transformation expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Variance for error type — .rxGetVarianceForErrorType","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Get Variance error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"","code":".rxGetVarianceForErrorType(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"env Environment pred1 Pred one end-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Variance error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"Internal function tell linCmt() model variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"","code":".rxIsLinCmt()"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"0 1","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function for calculating the Jacobian — .rxJacobian","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Internal function calculating Jacobian","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"","code":".rxJacobian(model, vars = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"model symengine environment vars Variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Jacobian information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Internal function generate model variables linCmt() model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"","code":".rxLinCmtGen(lenState, vars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"lenState Length state vars Variables model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Model variables expanded linCmt model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal Pruning function — .rxPrune","title":"Internal Pruning function — .rxPrune","text":"Internal Pruning function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal Pruning function — .rxPrune","text":"","code":".rxPrune(x, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal Pruning function — .rxPrune","text":"x List quoted lines envir Environment information stored","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal Pruning function — .rxPrune","text":"Pruned model code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal Pruning function — .rxPrune","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":null,"dir":"Reference","previous_headings":"","what":"Sensitivity for model — .rxSens","title":"Sensitivity for model — .rxSens","text":"Sensitivity model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sensitivity for model — .rxSens","text":"","code":".rxSens(model, vars, vars2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sensitivity for model — .rxSens","text":"model symengine model environment vars Variables single sensitivity vars2 present, 2 parameter sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sensitivity for model — .rxSens","text":"Sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Sensitivity for model — .rxSens","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":null,"dir":"Reference","previous_headings":"","what":"Temporarily set options then restore them while running code — .rxWithOptions","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"Temporarily set options restore running code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"","code":".rxWithOptions(ops, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"ops list options temporarily set code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"value code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"","code":".rxWithOptions(list(digits = 21), { print(pi) }) #> [1] 3.141592653589793116 print(pi) #> [1] 3.141593"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":null,"dir":"Reference","previous_headings":"","what":"With one sink, then release — .rxWithSink","title":"With one sink, then release — .rxWithSink","text":"one sink, release","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"With one sink, then release — .rxWithSink","text":"","code":".rxWithSink(file, code) .rxWithSinkBoth(file, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"With one sink, then release — .rxWithSink","text":"file path file sink running code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"With one sink, then release — .rxWithSink","text":"return results code section","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"With one sink, then release — .rxWithSink","text":".rxWithSink captures output cat .rxWithSinkBoth captures output cat message","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"With one sink, then release — .rxWithSink","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"With one sink, then release — .rxWithSink","text":"","code":"t <- tempfile() .rxWithSink(t, cat(\"message\\n\")) cat(\"cat2\\n\") # now you can see the cat2 #> cat2 lines <- readLines(t) unlink(t)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":null,"dir":"Reference","previous_headings":"","what":"Temporarily set options then restore them while running code — .rxWithWd","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"Temporarily set options restore running code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"","code":".rxWithWd(wd, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"wd working directory temporarily set system evaluating code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"value code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"","code":".rxWithWd(tempdir(), { getwd() }) #> [1] \"/tmp/RtmpSPRppR\" getwd() #> [1] \"/home/runner/work/rxode2/rxode2/docs/reference\""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to figure out if this session supports Unicode — .useUtf","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"Internal function figure session supports Unicode","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"","code":".useUtf()"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"boolean indicating session supports Unicode","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Error function — erf","title":"Error function — erf","text":"Error function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Error function — erf","text":"","code":"erf(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Error function — erf","text":"x vector real values","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Error function — erf","text":"erf x","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Error function — erf","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Error function — erf","text":"","code":"erf(1.0) #> [1] 0.8427008"},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":null,"dir":"Reference","previous_headings":"","what":"Event translation for rxode2 — etTrans","title":"Event translation for rxode2 — etTrans","text":"Event translation rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Event translation for rxode2 — etTrans","text":"","code":"etTrans( inData, obj, addCmt = FALSE, dropUnits = FALSE, allTimeVar = FALSE, keepDosingOnly = FALSE, combineDvid = NULL, keep = character(0), addlKeepsCov = FALSE, addlDropSs = TRUE, ssAtDoseTime = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Event translation for rxode2 — etTrans","text":"inData Data frame translate obj Model translate data addCmt Add compartment data frame (default FALSE). dropUnits Boolean drop units (default FALSE). allTimeVar Treat covariates time-varying keepDosingOnly keep individuals dosing records trailing dosing records last observation. combineDvid boolean indicating rxode2 use DVID observation records change cmt value; Useful multiple-endpoint nlmixr models. default determined option(\"rxode2.combine.dvid\") option set, TRUE. typically affect rxode2 simulations. keep named vector items want keep final rxode2 dataset. added rxode2 event records (seen), last observation carried forward used. addlKeepsCov determines additional dosing items repeats dose (FALSE) keeps covariates record dose (TRUE) addlDropSs steady state doses addl specification steady state flag dropped repeated doses (TRUE) retained (FALSE) ssAtDoseTime Boolean TRUE back calculates steady concentration actual time dose, otherwise FALSE doses shifted","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Event translation for rxode2 — etTrans","text":"Object solving rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the assignments in R expression — findLhs","title":"Find the assignments in R expression — findLhs","text":"Find assignments R expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the assignments in R expression — findLhs","text":"","code":"findLhs(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the assignments in R expression — findLhs","text":"x R expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the assignments in R expression — findLhs","text":"list assigned parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Find the assignments in R expression — findLhs","text":"Hadley Wickham Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":null,"dir":"Reference","previous_headings":"","what":"Gammap: normalized lower incomplete gamma function — gammap","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gamma_p boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"","code":"gammap(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"numeric '' parameter normalized lower incomplete gamma z numeric 'z' parameter normalized lower incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gammap results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gamma p function given : gammap = lowergamma(, z)/gamma()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"","code":"gammap(1, 3) #> [1] 0.9502129 gammap(1:3, 3) #> [1] 0.9502129 0.8008517 0.5768099 gammap(1, 1:3) #> [1] 0.6321206 0.8646647 0.9502129"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":null,"dir":"Reference","previous_headings":"","what":"gammapDer: derivative of gammap — gammapDer","title":"gammapDer: derivative of gammap — gammapDer","text":"gamma_p_derivative boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammapDer: derivative of gammap — gammapDer","text":"","code":"gammapDer(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammapDer: derivative of gammap — gammapDer","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammapDer: derivative of gammap — gammapDer","text":"lowergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammapDer: derivative of gammap — gammapDer","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammapDer: derivative of gammap — gammapDer","text":"","code":"gammapDer(1:3, 3) #> [1] 0.04978707 0.14936121 0.22404181 gammapDer(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":null,"dir":"Reference","previous_headings":"","what":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"gammapInv gammapInva: Inverses normalized gammap function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"","code":"gammapInv(a, p) gammapInva(x, p)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"numeric '' parameter upper incomplete gamma p numeric 'p' parameter upper incomplete gamma x numeric 'x' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"inverse gammap results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"equation: p = gammap(, x) 'gammapInv' function returns value 'x' satisfies equation 'gammapInva' function returns value 'q' satisfies equation NOTE: gammapInva slow","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"","code":"gammapInv(1:3, 0.5) #> [1] 0.6931472 1.6783470 2.6740603 gammapInv(1, 1:3 / 3.1) #> [1] 0.3894648 1.0360919 3.4339872 gammapInv(1:3, 1:3 / 3.1) #> [1] 0.3894648 2.1988984 6.8872929 gammapInva(1:3, 1:3 / 3.1) #> [1] 0.3894648 2.1988984 6.8872929"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":null,"dir":"Reference","previous_headings":"","what":"Gammaq: normalized upper incomplete gamma function — gammaq","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gamma_q boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"","code":"gammaq(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"numeric '' parameter normalized upper incomplete gamma z numeric 'z' parameter normalized upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gammaq results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gamma q function given : gammaq = uppergamma(, z)/gamma()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"","code":"gammaq(1, 3) #> [1] 0.04978707 gammaq(1:3, 3) #> [1] 0.04978707 0.19914827 0.42319008 gammaq(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":null,"dir":"Reference","previous_headings":"","what":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"gammaqInv gammaqInva: Inverses normalized gammaq function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"","code":"gammaqInv(a, q) gammaqInva(x, q)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"numeric '' parameter upper incomplete gamma q numeric 'q' parameter upper incomplete gamma x numeric 'x' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"inverse gammaq results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"equation: q = gammaq(, x) 'gammaqInv' function returns value 'x' satisfies equation 'gammaqInva' function returns value '' satisfies equation NOTE: gammaqInva slow","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"","code":"gammaqInv(1:3, 0.5) #> [1] 0.6931472 1.6783470 2.6740603 gammaqInv(1, 1:3 / 3) #> [1] 1.0986123 0.4054651 0.0000000 gammaqInv(1:3, 1:3 / 3.1) #> [1] 1.131402 1.248533 0.684289 gammaqInva(1:3, 1:3 / 3.1) #> [1] 1.131402 1.248533 0.684289"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"Create complete shiny application exploring dosing regimens given (hardcoded) PK/PD model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"","code":"genShinyApp.template( appDir = \"shinyExample\", verbose = TRUE, ODE.config = list(ode = \"model\", params = c(KA = 0.294), inits = c(eff = 1), method = \"lsoda\", atol = 1e-08, rtol = 1e-06) ) write.template.server(appDir) write.template.ui(appDir, statevars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"appDir string directory store shiny app, default \"shinyExample\". directory appDir created exist. verbose logical specifying whether write messages shiny app generated. Defaults TRUE. ODE.config model name compiled list parameters sent rxSolve(). statevars List statevars passed write.template.ui() function. usually called directly. PK/PD model defined using rxode2(), set parameters initial values defined. appropriate R scripts shiny's user interface ui.R server logic server.R created directory appDir. function evaluates following PK/PD model default: can changed ODE.config parameter. launch shiny app, simply issue runApp(appDir) R command.","code":"C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff;"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"None, functions used side effects.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"functions create simple, working example dosing regimen simulation web application. Users may want modify code experiment creating shiny applications specific rxode2 models.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"","code":"# \\donttest{ # remove myapp when the example is complete on.exit(unlink(\"myapp\", recursive = TRUE, force = TRUE)) # create the shiny app example (template) genShinyApp.template(appDir = \"myapp\") #> #> Generating an example (template) for a dosing regimen shiny app #> #> Using the following PK/PD model: #> C2 = centr/V2; #> C3 = peri/V3; #> d/dt(depot) =-KA*depot; #> d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; #> d/dt(peri) = Q*C2 - Q*C3; #> d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; #> #> Translating the PK/PD ODE model into C, compiling, etc. #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> #> Parameters and their values: #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> Initial values in each compartment: #> depot centr pari eff #> 0 0 0 1 #> #> Warning: 2 arguments not used by format ' #> # #> # Dosing regimen template generated by rxode2::genShinyApp.template() #> # #> #> debug = TRUE #> #wd = sprintf(\"%%s/../\", getwd()) #> #setwd(wd) #> #> # Server inputs: Dose, dosing regimen, dosing frequency, #> # dosing cycle definition, number of dosing cycles #> #> library(shiny) #> library(rxode2) #> #> # read objects from \"rx_shiny_data.rda\" in the AppDir folder, #> # objects include, mod1, params, inits, method, atol, rtol.] #> #> load(\"./rx_shiny_data.rda\") #> if (!rxDynLoad(mod1)) mod1 <- rxode2(mod1, modName=\"mod1\") #> # Define server logic #> shinyServer(function(input, output) { #> #> get.cp <- reactive({ #> ds <- input$Dose #> reg <- switch(input$regimen, \"QD\"=1, \"BID\"=2) #> cyc <- switch(input$cycle, #> \"continous\"=c(7,0), #> \"1wkon 1wkoff\"=c(7,7), #> \"2wkon 1wkoff\"=c(14,7), #> \"3wkon 1wkoff\"=c(21,7) #> ) #> cyc <- [... truncated] #> Shiny files (ui.R, server.R) plus R data saved. #> #> To launch the Shiny app, type the following two R commands: #> #> \tlibrary(shiny) #> \trunApp(\"myapp\") #> # run the shiny app if (requireNamespace(\"shiny\", quietly=TRUE)) { library(shiny) # runApp(\"myapp\") # Won't launch in environments without browsers } # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Get base simulation model simulation inis underlying rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"","code":"getBaseIniSimModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"obj Fit Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Simulation object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the base simulation model for simulation — getBaseSimModel","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Get base simulation model simulation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the base simulation model for simulation — getBaseSimModel","text":"","code":"getBaseSimModel(obj) # S3 method for default getBaseSimModel(obj) # S3 method for default getBaseIniSimModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the base simulation model for simulation — getBaseSimModel","text":"obj Fit Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Simulation object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Get symengine loading symengine rxS()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"","code":"getBaseSymengineModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"obj Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Simulation model ready load symeng","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":null,"dir":"Reference","previous_headings":"","what":"Get/Set the number of threads that rxode2 uses — getRxThreads","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"Get/Set number threads rxode2 uses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"","code":"getRxThreads(verbose = FALSE) setRxThreads(threads = NULL, percent = NULL, throttle = NULL) rxCores(verbose = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"verbose Display value relevant OpenMP settings threads NULL (default) rereads environment variables. 0 means use logical CPUs available. Otherwise number >= 1 percent provided number 2 100; percentage logical CPUs use. default startup, 50 percent. throttle 2 (default) means , roughly speaking, single thread used number subjects solved <=2, 2 threads number points <=4, etc. throttle speed small data tasks (especially repeated many times) incurring overhead managing multiple threads. throttle also suppress sorting ID solved first (nsubject solved)*throttle <= nthreads. rxode2 sorting occurs minimize time waiting another thread finish. last item solved long solving time, solving wait last costly solving occur. items likely take time solved first, wait less likely impact overall solving time. rxode2 IDs sorted individual number solving points (largest first). also C interface allows IDs resorted total time spent solving equation. allows packages like nlmixr sort solving time needed. Overall number threads throttled (restricted) small tasks sorting IDs suppressed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"number threads rxode2 uses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":null,"dir":"Reference","previous_headings":"","what":"Empty Guide — guide_none","title":"Empty Guide — guide_none","text":"empty guide draws nothing; included rxode2 compatibility ggplot 3.2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Empty Guide — guide_none","text":"","code":"guide_none(title = waiver(), position = waiver())"},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Empty Guide — guide_none","text":"title character string expression indicating title guide. NULL, title shown. default (waiver()), name scale object name specified labs() used title. position guide drawn: one top, bottom, left, right.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Empty Guide — guide_none","text":"nothing, simply included compatible ggplot 3.2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign the ini block in the rxode2 related object — ini<-","title":"Assign the ini block in the rxode2 related object — ini<-","text":"Assign ini block rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign the ini block in the rxode2 related object — ini<-","text":"","code":"ini(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign the ini block in the rxode2 related object — ini<-","text":"x rxode2 related object envir Environment assignment occurs value Value object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign the ini block in the rxode2 related object — ini<-","text":"rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign the ini block in the rxode2 related object — ini<-","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":null,"dir":"Reference","previous_headings":"","what":"Ini block for rxode2/nlmixr models — ini.rxUi","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini block controls initial conditions 'theta' (fixed effects), 'omega' (random effects), 'sigma' (residual error) elements model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"","code":"# S3 method for rxUi ini(x, ..., envir = parent.frame(), append = NULL) # S3 method for default ini(x, ..., envir = parent.frame(), append = NULL) ini(x, ..., envir = parent.frame(), append = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"x expression ... expressions ini() function envir environment unevaluated model expressions evaluated. May also NULL, list, data frame, pairlist integer specified sys.call. append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini block","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini() function used two different ways. main way used set initial conditions associated attributes (described ) model. way used updating initial conditions model, often using pipe operator. 'theta' 'sigma' can set using either <- = tvCL <- 1 equivalently tvCL = 1. 'omega' can set ~ etaCL ~ 0.1. Parameters can named unnamed (though named parameters preferred). named parameter set using name left assignment unnamed parameters set without assignment operator. tvCL <- 1 set named parameter tvCL 1. Unnamed parameters set using just value, 1. estimation methods, lower upper bounds can set 'theta' 'sigma' values. set lower /upper bound, use vector values. vector c(lower, estimate, upper). vector may given just estimate (estimate), lower bound estimate (c(lower, estimate)), three (c(lower, estimate, upper)). set estimate upper bound without lower bound, set lower bound -Inf, c(-Inf, estimate, upper). estimation method support bounds, bounds ignored warning. 'omega' values can set single value values lower-triangular matrix. values may set either variance-covariance matrix (default) correlation matrix -diagonals standard deviations diagonals. Names may set left side ~. set variance-covariance matrix variance values 2 3 covariance -2.5 use ~c(2, 2.5, 3). set matrix names iivKa iivCL, use iivKa + iivCL~c(2, 2.5, 3). set correlation matrix standard deviations diagonal, use cor() like iivKa + iivCL~cor(2, -0.5, 3). Values may fixed (therefore estimated) using either name fixed end assignment calling fixed() function value fix. 'theta' 'sigma', either estimate full definition (including lower upper bounds) may included fixed setting. example, following effectively equivalent set 'theta' 'sigma' fixed value (lower upper bounds ignored fixed value): tvCL <- fixed(1), tvCL <- fixed(0, 1), tvCL <- fixed(0, 1, 2), tvCL <- c(0, fixed(1), 2), tvCL <- c(0, 1, fixed). 'omega' assignment, full block none block must set fixed. Examples setting 'omega' value fixed : iivKa~fixed(1), iivKa + iivCL~fixed(1, 2, 3), iivKa + iivCL~c(1, 2, 3, fixed). Anywhere fixed used, FIX, FIXED, fix may used equivalently. value, standard mathematical operators functions may used define value. example, log(2) 24*30 may used define value anywhere number can used (e.g. lower bound, estimate, upper bound, variance, etc.). Values may labeled using label() function assignment. Labels used make reporting easier giving human-readable description parameter, labels effect estimation. typical way set label parameter tvCL label \"Typical Value Clearance (L/hr)\" tvCL <- 1; label(\"Typical Value Clearance (L/hr)\"). rxode2/nlmixr2 attempt determine back-transformations user. example, CL <- exp(tvCL) detect tvCL must back-transformed exp() easier interpretation. want control back-transformation, can specify back-transformation using backTransform() assignment. example, set back-transformation exp(), can use tvCL <- 1; backTransform(exp()).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"","code":"# Set the ini() block in a model one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # Use piping to update initial conditions one.compartment %>% ini(tka <- log(2)) #> #> #> ℹ change initial estimate of `tka` to `0.693147180559945` #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.6931472 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.693147180559945 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } one.compartment %>% ini(tka <- label(\"Absorption rate, Ka (1/hr)\")) #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.4510756 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.451075619360217 #> label(\"Absorption rate, Ka (1/hr)\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # Move the tka parameter to be just below the tv parameter (affects parameter # summary table, only) one.compartment %>% ini(tka <- label(\"Absorption rate, Ka (1/hr)\"), append = \"tv\") #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tcl tv tka add.sd #> 1.0006319 3.4499875 0.4510756 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> tka <- 0.451075619360217 #> label(\"Absorption rate, Ka (1/hr)\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # When programming with rxode2/nlmixr2, it may be easier to pass strings in # to modify the ini one.compartment %>% ini(\"tka <- log(2)\") #> #> #> ℹ change initial estimate of `tka` to `0.693147180559945` #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.6931472 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.693147180559945 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Check to see if this is an rxSolve object. — is.rxSolve","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"Check see rxSolve object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"","code":"is.rxSolve(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"x object check see rxSolve rxSolve object expired strip rxSolve information.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"boolean indicating rxSolve object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"Calculate log likelihood binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"","code":"llikBeta(x, shape1, shape2, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"x Observation shape1, shape2 non-negative parameters Beta distribution. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"data frame fx log pdf value dShape1 dShape2 derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"rxode2() model, can use llikBeta() use arguments. can also get derivative shape1 shape2 llikBetaDshape1() llikBetaDshape2().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"","code":"# \\donttest{ x <- seq(1e-4, 1 - 1e-4, length.out = 21) llikBeta(x, 0.5, 0.5) #> fx dShape1 dShape2 #> 1 3.46049030 -7.82404601 1.38619436 #> 2 0.37793108 -1.60763953 1.33490633 #> 3 0.05888752 -0.91549105 1.28084495 #> 4 -0.11510253 -0.51035907 1.22369308 #> 5 -0.22855163 -0.22284360 1.16307581 #> 6 -0.30780832 0.00019998 1.09854562 #> 7 -0.36444410 0.18245488 1.02956227 #> 8 -0.40444714 0.33655795 0.95546529 #> 9 -0.43118004 0.47005363 0.87543540 #> 10 -0.44655956 0.58780889 0.78843918 #> 11 -0.45158271 0.69314718 0.69314718 #> 12 -0.44655956 0.78843918 0.58780889 #> 13 -0.43118004 0.87543540 0.47005363 #> 14 -0.40444714 0.95546529 0.33655795 #> 15 -0.36444410 1.02956227 0.18245488 #> 16 -0.30780832 1.09854562 0.00019998 #> 17 -0.22855163 1.16307581 -0.22284360 #> 18 -0.11510253 1.22369308 -0.51035907 #> 19 0.05888752 1.28084495 -0.91549105 #> 20 0.37793108 1.33490633 -1.60763953 #> 21 3.46049030 1.38619436 -7.82404601 llikBeta(x, 1, 3, TRUE) #> x shape1 shape2 fx dShape1 dShape2 #> 1 0.00010 1 3 1.09841228 -7.37700704 0.33323333 #> 2 0.05009 1 3 0.99583622 -1.16060056 0.28194530 #> 3 0.10008 1 3 0.88771347 -0.46845208 0.22788392 #> 4 0.15007 1 3 0.77340972 -0.06332009 0.17073205 #> 5 0.20006 1 3 0.65217518 0.22419538 0.11011478 #> 6 0.25005 1 3 0.52311481 0.44723895 0.04558459 #> 7 0.30004 1 3 0.38514811 0.62949385 -0.02339876 #> 8 0.35003 1 3 0.23695415 0.78359692 -0.09749574 #> 9 0.40002 1 3 0.07689437 0.91709260 -0.17752562 #> 10 0.45001 1 3 -0.09709808 1.03484786 -0.26452185 #> 11 0.50000 1 3 -0.28768207 1.14018615 -0.35981385 #> 12 0.54999 1 3 -0.49835866 1.23547815 -0.46515214 #> 13 0.59998 1 3 -0.73386918 1.32247438 -0.58290740 #> 14 0.64997 1 3 -1.00086054 1.40250426 -0.71640308 #> 15 0.69996 1 3 -1.30906667 1.47660124 -0.87050615 #> 16 0.74995 1 3 -1.67357647 1.54558459 -1.05276105 #> 17 0.79994 1 3 -2.11966363 1.61011478 -1.27580462 #> 18 0.84993 1 3 -2.69469457 1.67073205 -1.56332009 #> 19 0.89992 1 3 -3.50495854 1.72788392 -1.96845208 #> 20 0.94991 1 3 -4.88925549 1.78194530 -2.66060056 #> 21 0.99990 1 3 -17.32206846 1.83323333 -8.87700704 et <- et(seq(1e-4, 1-1e-4, length.out=21)) et$shape1 <- 0.5 et$shape2 <- 1.5 model <- function() { model({ fx <- llikBeta(time, shape1, shape2) dShape1 <- llikBetaDshape1(time, shape1, shape2) dShape2 <- llikBetaDshape2(time, shape1, shape2) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 21 × 6 #> time fx dShape1 dShape2 shape1 shape2 #> #> 1 0.0001 4.15 -6.82 0.386 0.5 1.5 #> 2 0.0501 1.02 -0.608 0.335 0.5 1.5 #> 3 0.100 0.647 0.0845 0.281 0.5 1.5 #> 4 0.150 0.415 0.490 0.224 0.5 1.5 #> 5 0.200 0.241 0.777 0.163 0.5 1.5 #> 6 0.250 0.0976 1.00 0.0985 0.5 1.5 #> # ℹ 15 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"Calculate log likelihood binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"","code":"llikBinom(x, size, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"x Number successes size Size trial prob probability success full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"rxode2() model, can use llikBinom() use arguments. can also get derivative prob llikBinomDprob()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"","code":"# \\donttest{ llikBinom(46:54, 100, 0.5) #> fx dProb #> 1 -2.848030 -16 #> 2 -2.709193 -12 #> 3 -2.610102 -8 #> 4 -2.550679 -4 #> 5 -2.530876 0 #> 6 -2.550679 4 #> 7 -2.610102 8 #> 8 -2.709193 12 #> 9 -2.848030 16 llikBinom(46:54, 100, 0.5, TRUE) #> x size prob fx dProb #> 1 46 100 0.5 -2.848030 -16 #> 2 47 100 0.5 -2.709193 -12 #> 3 48 100 0.5 -2.610102 -8 #> 4 49 100 0.5 -2.550679 -4 #> 5 50 100 0.5 -2.530876 0 #> 6 51 100 0.5 -2.550679 4 #> 7 52 100 0.5 -2.610102 8 #> 8 53 100 0.5 -2.709193 12 #> 9 54 100 0.5 -2.848030 16 # In rxode2 you can use: et <- et(46:54) et$size <- 100 et$prob <-0.5 model <- function() { model({ fx <- llikBinom(time, size, prob) dProb <- llikBinomDprob(time, size, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size prob #> #> 1 46 -2.85 -16 100 0.5 #> 2 47 -2.71 -12 100 0.5 #> 3 48 -2.61 -8 100 0.5 #> 4 49 -2.55 -4 100 0.5 #> 5 50 -2.53 0 100 0.5 #> 6 51 -2.55 4 100 0.5 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"log likelihood Cauchy distribution derivatives (stan)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"","code":"llikCauchy(x, location = 0, scale = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"x Observation location, scale location scale parameters. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"data frame fx log pdf value dLocation dScale derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"rxode2() model, can use llikCauchy() use arguments. can also get derivative location scale llikCauchyDlocation() llikCauchyDscale().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"","code":"# \\donttest{ x <- seq(-3, 3, length.out = 21) llikCauchy(x, 0, 1) #> fx dLocation dScale #> 1 -3.447315 -0.6000000 0.8000000 #> 2 -3.259780 -0.6513872 0.7587455 #> 3 -3.055753 -0.7100592 0.7041420 #> 4 -2.832979 -0.7763401 0.6303142 #> 5 -2.589293 -0.8490566 0.5283019 #> 6 -2.323385 -0.9230769 0.3846154 #> 7 -2.036728 -0.9836066 0.1803279 #> 8 -1.738057 -0.9944751 -0.1049724 #> 9 -1.452215 -0.8823529 -0.4705882 #> 10 -1.230908 -0.5504587 -0.8348624 #> 11 -1.144730 0.0000000 -1.0000000 #> 12 -1.230908 0.5504587 -0.8348624 #> 13 -1.452215 0.8823529 -0.4705882 #> 14 -1.738057 0.9944751 -0.1049724 #> 15 -2.036728 0.9836066 0.1803279 #> 16 -2.323385 0.9230769 0.3846154 #> 17 -2.589293 0.8490566 0.5283019 #> 18 -2.832979 0.7763401 0.6303142 #> 19 -3.055753 0.7100592 0.7041420 #> 20 -3.259780 0.6513872 0.7587455 #> 21 -3.447315 0.6000000 0.8000000 llikCauchy(x, 3, 1, full=TRUE) #> x location scale fx dLocation dScale #> 1 -3.0 3 1 -4.755648 -0.3243243 0.9459459 #> 2 -2.7 3 1 -4.655977 -0.3404001 0.9402807 #> 3 -2.4 3 1 -4.551246 -0.3580902 0.9336870 #> 4 -2.1 3 1 -4.440937 -0.3776379 0.9259534 #> 5 -1.8 3 1 -4.324449 -0.3993344 0.9168053 #> 6 -1.5 3 1 -4.201087 -0.4235294 0.9058824 #> 7 -1.2 3 1 -4.070040 -0.4506438 0.8927039 #> 8 -0.9 3 1 -3.930358 -0.4811845 0.8766194 #> 9 -0.6 3 1 -3.780926 -0.5157593 0.8567335 #> 10 -0.3 3 1 -3.620428 -0.5550883 0.8317914 #> 11 0.0 3 1 -3.447315 -0.6000000 0.8000000 #> 12 0.3 3 1 -3.259780 -0.6513872 0.7587455 #> 13 0.6 3 1 -3.055753 -0.7100592 0.7041420 #> 14 0.9 3 1 -2.832979 -0.7763401 0.6303142 #> 15 1.2 3 1 -2.589293 -0.8490566 0.5283019 #> 16 1.5 3 1 -2.323385 -0.9230769 0.3846154 #> 17 1.8 3 1 -2.036728 -0.9836066 0.1803279 #> 18 2.1 3 1 -1.738057 -0.9944751 -0.1049724 #> 19 2.4 3 1 -1.452215 -0.8823529 -0.4705882 #> 20 2.7 3 1 -1.230908 -0.5504587 -0.8348624 #> 21 3.0 3 1 -1.144730 0.0000000 -1.0000000 et <- et(-3, 3, length.out=10) et$location <- 0 et$scale <- 1 model <- function() { model({ fx <- llikCauchy(time, location, scale) dLocation <- llikCauchyDlocation(time, location, scale) dScale <- llikCauchyDscale(time, location, scale) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> Warning: #> with negative times, compartments initialize at first negative observed time #> with positive times, compartments initialize at time zero #> use 'rxSetIni0(FALSE)' to initialize at first observed time #> this warning is displayed once per session #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dLocation dScale location scale #> #> 1 -3 -3.45 -0.6 0.8 0 1 #> 2 -2.33 -3.01 -0.724 0.690 0 1 #> 3 -1.67 -2.47 -0.882 0.471 0 1 #> 4 -1 -1.84 -1 0 0 1 #> 5 -0.333 -1.25 -0.6 -0.8 0 1 #> 6 0.333 -1.25 0.600 -0.8 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for chi-squared distribution — llikChisq","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"log likelihood derivatives chi-squared distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"","code":"llikChisq(x, df, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"x variable distributed chi-squared distribution df degrees freedom (non-negative, can non-integer). full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"data frame fx log pdf value dDf derivatives respect df parameter observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"rxode2() model, can use llikChisq() use x df arguments. can also get derivative df llikChisqDdf().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"","code":"# \\donttest{ llikChisq(1, df = 1:3, full=TRUE) #> x df fx dDf #> 1 1 1 -1.418939 0.63518142 #> 2 1 2 -1.193147 -0.05796576 #> 3 1 3 -1.418939 -0.36481858 llikChisq(1, df = 6:9) #> fx dDf #> 1 -3.272589 -0.8079658 #> 2 -4.126989 -0.8981519 #> 3 -5.064348 -0.9746324 #> 4 -6.072899 -1.0410091 et <- et(1:3) et$x <- 1 model <- function() { model({ fx <- llikChisq(x, time) dDf <- llikChisqDdf(x, time) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 3 × 4 #> time fx dDf x #> #> 1 1 -1.42 0.635 1 #> 2 2 -1.19 -0.0580 1 #> 3 3 -1.42 -0.365 1 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for exponential distribution — llikExp","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"log likelihood derivatives exponential distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"","code":"llikExp(x, rate, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"x variable distributed exponential distribution rate vector rates. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"data frame fx log pdf value dRate derivatives respect rate parameter observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"rxode2() model, can use llikExp() use x rate arguments. can also get derivative rate llikExpDrate().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"","code":"# \\donttest{ llikExp(1, 1:3) #> fx dRate #> 1 -1.000000 0.0000000 #> 2 -1.306853 -0.5000000 #> 3 -1.901388 -0.6666667 llikExp(1, 1:3, full=TRUE) #> x rate fx dRate #> 1 1 1 -1.000000 0.0000000 #> 2 1 2 -1.306853 -0.5000000 #> 3 1 3 -1.901388 -0.6666667 # You can use rxode2 for these too: et <- et(1:3) et$x <- 1 model <- function() { model({ fx <- llikExp(x, time) dRate <- llikExpDrate(x, time) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 3 × 4 #> time fx dRate x #> #> 1 1 -1 0 1 #> 2 2 -1.31 -0.5 1 #> 3 3 -1.90 -0.667 1 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for F distribution — llikF","title":"log likelihood and derivatives for F distribution — llikF","text":"log likelihood derivatives F distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for F distribution — llikF","text":"","code":"llikF(x, df1, df2, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for F distribution — llikF","text":"x variable distributed f distribution df1, df2 degrees freedom. Inf allowed. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for F distribution — llikF","text":"data frame fx log pdf value dDf1 dDf2 derivatives respect df1/df2 parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for F distribution — llikF","text":"rxode2() model, can use llikF() use x rate arguments. can also get derivative df1 df2 llikFDdf1() llikFDdf2().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for F distribution — llikF","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for F distribution — llikF","text":"","code":"# \\donttest{ x <- seq(0.001, 5, length.out = 100) llikF(x^2, 1, 5) #> fx dDf1 dDf2 #> 1 5.939135090 -5.769327755 0.0098138672 #> 2 1.996061339 -1.829698617 0.0098667834 #> 3 1.308027230 -1.151720596 0.0100203751 #> 4 0.898151814 -0.758467992 0.0102713542 #> 5 0.601410048 -0.484842238 0.0106143384 #> 6 0.365567397 -0.278507461 0.0110419510 #> 7 0.167275143 -0.115987118 0.0115449567 #> 8 -0.005928407 0.015333168 0.0121124287 #> 9 -0.161467803 0.123053577 0.0127319420 #> 10 -0.304110944 0.212138450 0.0133897879 #> 11 -0.437089645 0.286034532 0.0140712037 #> 12 -0.562684604 0.347253504 0.0147606108 #> 13 -0.682555520 0.397699568 0.0154418570 #> 14 -0.797939098 0.438864917 0.0160984557 #> 15 -0.909773848 0.471951996 0.0167138175 #> 16 -1.018782007 0.497952966 0.0172714700 #> 17 -1.125525217 0.517703019 0.0177552614 #> 18 -1.230443500 0.531917117 0.0181495454 #> 19 -1.333883243 0.541215913 0.0184393449 #> 20 -1.436117763 0.546144408 0.0186104926 #> 21 -1.537362702 0.547185650 0.0186497493 #> 22 -1.637787764 0.544770962 0.0185448973 #> 23 -1.737525805 0.539287723 0.0182848126 #> 24 -1.836679954 0.531085385 0.0178595139 #> 25 -1.935329266 0.520480216 0.0172601925 #> 26 -2.033533263 0.507759100 0.0164792220 #> 27 -2.131335592 0.493182655 0.0155101530 #> 28 -2.228767013 0.476987816 0.0143476919 #> 29 -2.325847849 0.459390036 0.0129876676 #> 30 -2.422589998 0.440585182 0.0114269877 #> 31 -2.518998603 0.420751193 0.0096635860 #> 32 -2.615073425 0.400049565 0.0076963639 #> 33 -2.710810000 0.378626673 0.0055251263 #> 34 -2.806200581 0.356614982 0.0031505147 #> 35 -2.901234940 0.334134152 0.0005739382 #> 36 -2.995901017 0.311292055 -0.0022024960 #> 37 -3.090185467 0.288185720 -0.0051760516 #> 38 -3.184074111 0.264902202 -0.0083434311 #> 39 -3.277552304 0.241519400 -0.0117008417 #> 40 -3.370605236 0.218106810 -0.0152440579 #> 41 -3.463218177 0.194726229 -0.0189684823 #> 42 -3.555376677 0.171432411 -0.0228692014 #> 43 -3.647066718 0.148273673 -0.0269410395 #> 44 -3.738274839 0.125292465 -0.0311786073 #> 45 -3.828988227 0.102525891 -0.0355763478 #> 46 -3.919194789 0.080006197 -0.0401285781 #> 47 -4.008883199 0.057761220 -0.0448295271 #> 48 -4.098042931 0.035814802 -0.0496733702 #> 49 -4.186664276 0.014187176 -0.0546542601 #> 50 -4.274738350 -0.007104684 -0.0597663547 #> 51 -4.362257091 -0.028046739 -0.0650038410 #> 52 -4.449213248 -0.048627585 -0.0703609577 #> 53 -4.535600366 -0.068838184 -0.0758320130 #> 54 -4.621412763 -0.088671614 -0.0814114015 #> 55 -4.706645505 -0.108122840 -0.0870936184 #> 56 -4.791294380 -0.127188508 -0.0928732707 #> 57 -4.875355868 -0.145866755 -0.0987450876 #> 58 -4.958827105 -0.164157039 -0.1047039284 #> 59 -5.041705859 -0.182059980 -0.1107447891 #> 60 -5.123990491 -0.199577223 -0.1168628074 #> 61 -5.205679923 -0.216711307 -0.1230532668 #> 62 -5.286773611 -0.233465550 -0.1293115988 #> 63 -5.367271506 -0.249843943 -0.1356333846 #> 64 -5.447174028 -0.265851061 -0.1420143563 #> 65 -5.526482033 -0.281491973 -0.1484503963 #> 66 -5.605196787 -0.296772169 -0.1549375368 #> 67 -5.683319932 -0.311697491 -0.1614719584 #> 68 -5.760853464 -0.326274073 -0.1680499885 #> 69 -5.837799706 -0.340508283 -0.1746680988 #> 70 -5.914161282 -0.354406680 -0.1813229026 #> 71 -5.989941093 -0.367975967 -0.1880111521 #> 72 -6.065142296 -0.381222952 -0.1947297352 #> 73 -6.139768282 -0.394154517 -0.2014756717 #> 74 -6.213822655 -0.406777586 -0.2082461105 #> 75 -6.287309215 -0.419099097 -0.2150383254 #> 76 -6.360231938 -0.431125983 -0.2218497115 #> 77 -6.432594959 -0.442865149 -0.2286777813 #> 78 -6.504402560 -0.454323453 -0.2355201612 #> 79 -6.575659147 -0.465507693 -0.2423745875 #> 80 -6.646369247 -0.476424593 -0.2492389023 #> 81 -6.716537483 -0.487080791 -0.2561110501 #> 82 -6.786168572 -0.497482830 -0.2629890742 #> 83 -6.855267306 -0.507637151 -0.2698711122 #> 84 -6.923838547 -0.517550083 -0.2767553934 #> 85 -6.991887212 -0.527227840 -0.2836402345 #> 86 -7.059418267 -0.536676516 -0.2905240366 #> 87 -7.126436719 -0.545902081 -0.2974052813 #> 88 -7.192947604 -0.554910380 -0.3042825282 #> 89 -7.258955983 -0.563707126 -0.3111544109 #> 90 -7.324466935 -0.572297907 -0.3180196342 #> 91 -7.389485548 -0.580688177 -0.3248769714 #> 92 -7.454016916 -0.588883261 -0.3317252608 #> 93 -7.518066132 -0.596888352 -0.3385634034 #> 94 -7.581638284 -0.604708517 -0.3453903600 #> 95 -7.644738447 -0.612348689 -0.3522051484 #> 96 -7.707371685 -0.619813679 -0.3590068413 #> 97 -7.769543041 -0.627108167 -0.3657945633 #> 98 -7.831257537 -0.634236713 -0.3725674892 #> 99 -7.892520171 -0.641203751 -0.3793248413 #> 100 -7.953335909 -0.648013598 -0.3860658874 model <- function(){ model({ fx <- llikF(time, df1, df2) dMean <- llikFDdf1(time, df1, df2) dSd <- llikFDdf2(time, df1, df2) }) } et <- et(x) et$df1 <- 1 et$df2 <- 5 rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 100 × 6 #> time fx dMean dSd df1 df2 #> #> 1 0.001 2.48 -2.32 0.00983 1 5 #> 2 0.0515 0.484 -0.380 0.0108 1 5 #> 3 0.102 0.112 -0.0731 0.0117 1 5 #> 4 0.152 -0.118 0.0943 0.0125 1 5 #> 5 0.203 -0.291 0.204 0.0133 1 5 #> 6 0.253 -0.431 0.283 0.0140 1 5 #> # ℹ 94 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Gamma distribution — llikGamma","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"log likelihood derivatives Gamma distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"","code":"llikGamma(x, shape, rate, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"x variable distributed gamma distribution shape distribution's shape parameter. Must positive. rate distribution's rate parameters. Must positive. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"rxode2() model, can use llikGamma() use x rate arguments. can also get derivative shape rate llikGammaDshape() llikGammaDrate().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"","code":"# \\donttest{ llikGamma(1, 1, 10) #> fx dShape dRate #> 1 -7.697415 2.879801 -0.9 # You can use this in `rxode2` too: et <- et(seq(0.001, 1, length.out=10)) et$shape <- 1 et$rate <- 10 model <- function() { model({ fx <- llikGamma(time, shape, rate) dShape<- llikGammaDshape(time, shape, rate) dRate <- llikGammaDrate(time, shape, rate) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dShape dRate rate shape #> #> 1 0.001 2.29 -4.03 0.099 10 1 #> 2 0.112 1.18 0.691 -0.012 10 1 #> 3 0.223 0.0726 1.38 -0.123 10 1 #> 4 0.334 -1.04 1.78 -0.234 10 1 #> 5 0.445 -2.15 2.07 -0.345 10 1 #> 6 0.556 -3.26 2.29 -0.456 10 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Geom distribution — llikGeom","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"log likelihood derivatives Geom distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"","code":"llikGeom(x, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"x variable distributed geom distribution prob probability success trial. 0 < prob <= 1. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"rxode2() model, can use llikGeom() use x rate arguments. can also get derivative prob llikGeomDprob().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"","code":"# \\donttest{ llikGeom(1:10, 0.2) #> fx dProb #> 1 -1.832581 3.75 #> 2 -2.055725 2.50 #> 3 -2.278869 1.25 #> 4 -2.502012 0.00 #> 5 -2.725156 -1.25 #> 6 -2.948299 -2.50 #> 7 -3.171443 -3.75 #> 8 -3.394586 -5.00 #> 9 -3.617730 -6.25 #> 10 -3.840873 -7.50 et <- et(1:10) et$prob <- 0.2 model <- function() { model({ fx <- llikGeom(time, prob) dProb <- llikGeomDprob(time, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time fx dProb prob #> #> 1 1 -1.83 3.75 0.2 #> 2 2 -2.06 2.5 0.2 #> 3 3 -2.28 1.25 0.2 #> 4 4 -2.50 0 0.2 #> 5 5 -2.73 -1.25 0.2 #> 6 6 -2.95 -2.5 0.2 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"Calculate log likelihood negative binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"","code":"llikNbinom(x, size, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"x Number successes size Size trial prob probability success full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"rxode2() model, can use llikNbinom() use arguments. can also get derivative prob llikNbinomDprob()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"","code":"# \\donttest{ llikNbinom(46:54, 100, 0.5) #> fx dProb #> 1 -13.25200 108 #> 2 -12.81168 106 #> 3 -12.38560 104 #> 4 -11.97335 102 #> 5 -11.57458 100 #> 6 -11.18892 98 #> 7 -10.81603 96 #> 8 -10.45559 94 #> 9 -10.10728 92 llikNbinom(46:54, 100, 0.5, TRUE) #> x size prob fx dProb #> 1 46 100 0.5 -13.25200 108 #> 2 47 100 0.5 -12.81168 106 #> 3 48 100 0.5 -12.38560 104 #> 4 49 100 0.5 -11.97335 102 #> 5 50 100 0.5 -11.57458 100 #> 6 51 100 0.5 -11.18892 98 #> 7 52 100 0.5 -10.81603 96 #> 8 53 100 0.5 -10.45559 94 #> 9 54 100 0.5 -10.10728 92 # In rxode2 you can use: et <- et(46:54) et$size <- 100 et$prob <-0.5 model <- function() { model({ fx <- llikNbinom(time, size, prob) dProb <- llikNbinomDprob(time, size, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size prob #> #> 1 46 -13.3 108 100 0.5 #> 2 47 -12.8 106 100 0.5 #> 3 48 -12.4 104 100 0.5 #> 4 49 -12.0 102 100 0.5 #> 5 50 -11.6 100 100 0.5 #> 6 51 -11.2 98 100 0.5 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"Calculate log likelihood negative binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"","code":"llikNbinomMu(x, size, mu, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"x Number successes size Size trial mu mu parameter negative binomial full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"rxode2() model, can use llikNbinomMu() use arguments. can also get derivative mu llikNbinomMuDmu()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"","code":"# \\donttest{ llikNbinomMu(46:54, 100, 40) #> fx dMu #> 1 -3.326828 0.1071429 #> 2 -3.446132 0.1250000 #> 3 -3.579663 0.1428571 #> 4 -3.727034 0.1607143 #> 5 -3.887874 0.1785714 #> 6 -4.061827 0.1964286 #> 7 -4.248554 0.2142857 #> 8 -4.447728 0.2321429 #> 9 -4.659037 0.2500000 llikNbinomMu(46:54, 100, 40, TRUE) #> x size mu fx dMu #> 1 46 100 40 -3.326828 0.1071429 #> 2 47 100 40 -3.446132 0.1250000 #> 3 48 100 40 -3.579663 0.1428571 #> 4 49 100 40 -3.727034 0.1607143 #> 5 50 100 40 -3.887874 0.1785714 #> 6 51 100 40 -4.061827 0.1964286 #> 7 52 100 40 -4.248554 0.2142857 #> 8 53 100 40 -4.447728 0.2321429 #> 9 54 100 40 -4.659037 0.2500000 et <- et(46:54) et$size <- 100 et$mu <- 40 model <- function() { model({ fx <- llikNbinomMu(time, size, mu) dProb <- llikNbinomMuDmu(time, size, mu) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size mu #> #> 1 46 -3.33 0.107 100 40 #> 2 47 -3.45 0.125 100 40 #> 3 48 -3.58 0.143 100 40 #> 4 49 -3.73 0.161 100 40 #> 5 50 -3.89 0.179 100 40 #> 6 51 -4.06 0.196 100 40 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":null,"dir":"Reference","previous_headings":"","what":"Log likelihood for normal distribution — llikNorm","title":"Log likelihood for normal distribution — llikNorm","text":"Log likelihood normal distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log likelihood for normal distribution — llikNorm","text":"","code":"llikNorm(x, mean = 0, sd = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log likelihood for normal distribution — llikNorm","text":"x Observation mean Mean likelihood sd Standard deviation likelihood full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log likelihood for normal distribution — llikNorm","text":"data frame fx pdf value dMean dSd derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log likelihood for normal distribution — llikNorm","text":"rxode2() model, can use llikNorm() use arguments. can also get derivatives llikNormDmean() llikNormDsd()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Log likelihood for normal distribution — llikNorm","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Log likelihood for normal distribution — llikNorm","text":"","code":"# \\donttest{ llikNorm(0) #> fx dMean dSd #> 1 -0.9189385 0 -1 llikNorm(seq(-2,2,length.out=10), full=TRUE) #> x mean sd fx dMean dSd #> 1 -2.0000000 0 1 -2.9189385 -2.0000000 3.0000000 #> 2 -1.5555556 0 1 -2.1288151 -1.5555556 1.4197531 #> 3 -1.1111111 0 1 -1.5362225 -1.1111111 0.2345679 #> 4 -0.6666667 0 1 -1.1411608 -0.6666667 -0.5555556 #> 5 -0.2222222 0 1 -0.9436299 -0.2222222 -0.9506173 #> 6 0.2222222 0 1 -0.9436299 0.2222222 -0.9506173 #> 7 0.6666667 0 1 -1.1411608 0.6666667 -0.5555556 #> 8 1.1111111 0 1 -1.5362225 1.1111111 0.2345679 #> 9 1.5555556 0 1 -2.1288151 1.5555556 1.4197531 #> 10 2.0000000 0 1 -2.9189385 2.0000000 3.0000000 # With rxode2 you can use: et <- et(-3, 3, length.out=10) et$mu <- 0 et$sigma <- 1 model <- function(){ model({ fx <- llikNorm(time, mu, sigma) dMean <- llikNormDmean(time, mu, sigma) dSd <- llikNormDsd(time, mu, sigma) }) } ret <- rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ret #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dMean dSd mu sigma #> #> 1 -3 -5.42 -3 8 0 1 #> 2 -2.33 -3.64 -2.33 4.44 0 1 #> 3 -1.67 -2.31 -1.67 1.78 0 1 #> 4 -1 -1.42 -1 0 0 1 #> 5 -0.333 -0.974 -0.333 -0.889 0 1 #> 6 0.333 -0.974 0.333 -0.889 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":null,"dir":"Reference","previous_headings":"","what":"log-likelihood for the Poisson distribution — llikPois","title":"log-likelihood for the Poisson distribution — llikPois","text":"log-likelihood Poisson distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log-likelihood for the Poisson distribution — llikPois","text":"","code":"llikPois(x, lambda, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log-likelihood for the Poisson distribution — llikPois","text":"x non negative integers lambda non-negative means full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log-likelihood for the Poisson distribution — llikPois","text":"data frame fx pdf value dLambda derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log-likelihood for the Poisson distribution — llikPois","text":"rxode2() model, can use llikPois() use arguments. can also get derivatives llikPoisDlambda()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log-likelihood for the Poisson distribution — llikPois","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log-likelihood for the Poisson distribution — llikPois","text":"","code":"# \\donttest{ llikPois(0:7, lambda = 1) #> fx dLambda #> 1 -1.000000 -1 #> 2 -1.000000 0 #> 3 -1.693147 1 #> 4 -2.791759 2 #> 5 -4.178054 3 #> 6 -5.787492 4 #> 7 -7.579251 5 #> 8 -9.525161 6 llikPois(0:7, lambda = 4, full=TRUE) #> x lambda fx dLambda #> 1 0 4 -4.000000 -1.00 #> 2 1 4 -2.613706 -0.75 #> 3 2 4 -1.920558 -0.50 #> 4 3 4 -1.632876 -0.25 #> 5 4 4 -1.632876 0.00 #> 6 5 4 -1.856020 0.25 #> 7 6 4 -2.261485 0.50 #> 8 7 4 -2.821101 0.75 # In rxode2 you can use: et <- et(0:10) et$lambda <- 0.5 model <- function() { model({ fx <- llikPois(time, lambda) dLambda <- llikPoisDlambda(time, lambda) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 11 × 4 #> time fx dLambda lambda #> #> 1 0 -0.5 -1 0.5 #> 2 1 -1.19 1 0.5 #> 3 2 -2.58 3 0.5 #> 4 3 -4.37 5 0.5 #> 5 4 -6.45 7 0.5 #> 6 5 -8.75 9 0.5 #> # ℹ 5 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":null,"dir":"Reference","previous_headings":"","what":"Log likelihood of T and it's derivatives (from stan) — llikT","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"Log likelihood T derivatives (stan)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"","code":"llikT(x, df, mean = 0, sd = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"x Observation df degrees freedom (\\(> 0\\), maybe non-integer). df = Inf allowed. mean Mean likelihood sd Standard deviation likelihood full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"data frame fx log pdf value dDf dMean dSd derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"rxode2() model, can use llikT() use arguments. can also get derivative df, mean sd llikTDdf(), llikTDmean() llikTDsd().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"","code":"# \\donttest{ x <- seq(-3, 3, length.out = 21) llikT(x, 7, 0, 1) #> fx dDf dMean dSd #> 1 -4.2612484 -0.086858773 -1.5000000 3.5000000 #> 2 -3.8091335 -0.060260433 -1.5115465 3.0811756 #> 3 -3.3561547 -0.037201674 -1.5047022 2.6112853 #> 4 -2.9088542 -0.018379169 -1.4723926 2.0920245 #> 5 -2.4761000 -0.004340221 -1.4062500 1.5312500 #> 6 -2.0693878 0.004691380 -1.2972973 0.9459459 #> 7 -1.7028228 0.009010785 -1.1374408 0.3649289 #> 8 -1.3925134 0.009569214 -0.9218950 -0.1702945 #> 9 -1.1551333 0.007927361 -0.6521739 -0.6086957 #> 10 -1.0056349 0.005918024 -0.3385049 -0.8984485 #> 11 -0.9545342 0.005051942 0.0000000 -1.0000000 #> 12 -1.0056349 0.005918024 0.3385049 -0.8984485 #> 13 -1.1551333 0.007927361 0.6521739 -0.6086957 #> 14 -1.3925134 0.009569214 0.9218950 -0.1702945 #> 15 -1.7028228 0.009010785 1.1374408 0.3649289 #> 16 -2.0693878 0.004691380 1.2972973 0.9459459 #> 17 -2.4761000 -0.004340221 1.4062500 1.5312500 #> 18 -2.9088542 -0.018379169 1.4723926 2.0920245 #> 19 -3.3561547 -0.037201674 1.5047022 2.6112853 #> 20 -3.8091335 -0.060260433 1.5115465 3.0811756 #> 21 -4.2612484 -0.086858773 1.5000000 3.5000000 llikT(x, 15, 0, 1, full=TRUE) #> fx dDf dMean dSd #> 1 -4.6956220 -0.0338931511 -2.0000000 5.0000000 #> 2 -4.1042965 -0.0225073150 -1.9380888 4.2328398 #> 3 -3.5354158 -0.0134033865 -1.8497110 3.4393064 #> 4 -2.9974985 -0.0065857823 -1.7310665 2.6352396 #> 5 -2.5001272 -0.0019378861 -1.5789474 1.8421053 #> 6 -2.0536885 0.0007929097 -1.3913043 1.0869565 #> 7 -1.6689304 0.0019903977 -1.1678832 0.4014599 #> 8 -1.3563325 0.0021369166 -0.9108159 -0.1802657 #> 9 -1.1253251 0.0017504002 -0.6250000 -0.6250000 #> 10 -0.9834495 0.0012985422 -0.3180915 -0.9045726 #> 11 -0.9355929 0.0011086635 0.0000000 -1.0000000 #> 12 -0.9834495 0.0012985422 0.3180915 -0.9045726 #> 13 -1.1253251 0.0017504002 0.6250000 -0.6250000 #> 14 -1.3563325 0.0021369166 0.9108159 -0.1802657 #> 15 -1.6689304 0.0019903977 1.1678832 0.4014599 #> 16 -2.0536885 0.0007929097 1.3913043 1.0869565 #> 17 -2.5001272 -0.0019378861 1.5789474 1.8421053 #> 18 -2.9974985 -0.0065857823 1.7310665 2.6352396 #> 19 -3.5354158 -0.0134033865 1.8497110 3.4393064 #> 20 -4.1042965 -0.0225073150 1.9380888 4.2328398 #> 21 -4.6956220 -0.0338931511 2.0000000 5.0000000 et <- et(-3, 3, length.out=10) et$nu <- 7 et$mean <- 0 et$sd <- 1 model <- function() { model({ fx <- llikT(time, nu, mean, sd) dDf <- llikTDdf(time, nu, mean, sd) dMean <- llikTDmean(time, nu, mean, sd) dSd <- llikTDsd(time, nu, mean, sd) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 8 #> time fx dDf dMean dSd nu mean sd #> #> 1 -3 -4.26 -0.0869 -1.5 3.5 7 0 1 #> 2 -2.33 -3.26 -0.0326 -1.5 2.5 7 0 1 #> 3 -1.67 -2.29 0.000289 -1.36 1.27 7 0 1 #> 4 -1 -1.49 0.00971 -1 0 7 0 1 #> 5 -0.333 -1.02 0.00611 -0.375 -0.875 7 0 1 #> 6 0.333 -1.02 0.00611 0.375 -0.875 7 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Unif distribution — llikUnif","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"log likelihood derivatives Unif distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"","code":"llikUnif(x, alpha, beta, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"x variable distributed uniform distribution alpha lower limit uniform distribution beta upper limit distribution full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"rxode2() model, can use llikUnif() use x rate arguments. can also get derivative alpha beta llikUnifDalpha() llikUnifDbeta().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"","code":"# \\donttest{ llikUnif(1, -2, 2) #> fx dAlpha dBeta #> 1 -1.386294 0.25 -0.25 et <- et(seq(1,1, length.out=4)) et$alpha <- -2 et$beta <- 2 model <- function() { model({ fx <- llikUnif(time, alpha, beta) dAlpha<- llikUnifDalpha(time, alpha, beta) dBeta <- llikUnifDbeta(time, alpha, beta) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 4 × 6 #> time fx dAlpha dBeta alpha beta #> #> 1 1 -1.39 0.25 -0.25 -2 2 #> 2 1 -1.39 0.25 -0.25 -2 2 #> 3 1 -1.39 0.25 -0.25 -2 2 #> 4 1 -1.39 0.25 -0.25 -2 2 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Weibull distribution — llikWeibull","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"log likelihood derivatives Weibull distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"","code":"llikWeibull(x, shape, scale, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"x variable distributed Weibull distribution shape, scale shape scale parameters, latter defaulting 1. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"rxode2() model, can use llikWeibull() use x rate arguments. can also get derivative shape scale llikWeibullDshape() llikWeibullDscale().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"","code":"# \\donttest{ llikWeibull(1, 1, 10) #> fx dShape dScale #> 1 -2.402585 -1.072327 -0.09 # rxode2 can use this too: et <- et(seq(0.001, 1, length.out=10)) et$shape <- 1 et$scale <- 10 model <- function() { model({ fx <- llikWeibull(time, shape, scale) dShape<- llikWeibullDshape(time, shape, scale) dScale <- llikWeibullDscale(time, shape, scale) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dShape dScale shape scale #> #> 1 0.001 -2.30 -8.21 -0.100 1 10 #> 2 0.112 -2.31 -3.44 -0.0989 1 10 #> 3 0.223 -2.32 -2.72 -0.0978 1 10 #> 4 0.334 -2.34 -2.29 -0.0967 1 10 #> 5 0.445 -2.35 -1.97 -0.0956 1 10 #> 6 0.556 -2.36 -1.73 -0.0944 1 10 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":null,"dir":"Reference","previous_headings":"","what":"logit and inverse logit (expit) functions — logit","title":"logit and inverse logit (expit) functions — logit","text":"logit inverse logit (expit) functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"logit and inverse logit (expit) functions — logit","text":"","code":"logit(x, low = 0, high = 1) expit(alpha, low = 0, high = 1) logitNormInfo(mean = 0, sd = 1, low = 0, high = 1, abs.tol = 1e-06, ...) probitNormInfo(mean = 0, sd = 1, low = 0, high = 1, abs.tol = 1e-06, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"logit and inverse logit (expit) functions — logit","text":"x Input value(s) range [low,high] translate -Inf Inf low Lowest value range high Highest value range alpha Infinite value(s) translate range [low, high] mean logit-scale mean sd logit-scale standard deviation abs.tol absolute accuracy requested. ... parameters passed integrate()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"logit and inverse logit (expit) functions — logit","text":"values logit expit","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"logit and inverse logit (expit) functions — logit","text":"logit given : logit(p) = -log(1/p-1) : p = x-low/high-low expit given : expit(p, low, high) = (high-low)/(1+exp(-alpha)) + low logitNormInfo() gives mean, variance coefficient variability untransformed scale.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"logit and inverse logit (expit) functions — logit","text":"","code":"logit(0.25) #> [1] -1.098612 expit(-1.09) #> [1] 0.2516183 logitNormInfo(logit(0.25), sd = 0.1) #> mean var cv #> 0.2504672899 0.0003515538 0.0748591440 logitNormInfo(logit(1, 0, 10), sd = 1, low = 0, high = 10) #> mean var cv #> 1.3386966 1.2662276 0.8405697"},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":null,"dir":"Reference","previous_headings":"","what":"lowergamma: upper incomplete gamma function — lowergamma","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"tgamma_lower boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"","code":"lowergamma(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"lowergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"lowergamma function given : $$lowergamma(, z) = \\int_{0}^{z}t^{-1}\\cdot e^{-t} dt$$","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"","code":"lowergamma(1, 3) #> [1] 0.9502129 lowergamma(1:3, 3) #> [1] 0.9502129 0.8008517 1.1536198 lowergamma(1, 1:3) #> [1] 0.6321206 0.8646647 0.9502129"},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"generic function meanProbs produces expected confidence bands either t distribution normal sampling distribution. uses qnorm() qt() mean standard deviation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"","code":"meanProbs(x, ...) # S3 method for default meanProbs( x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE, useT = TRUE, onlyProbs = TRUE, pred = FALSE, n = 0L, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"x numeric vector whose mean probability based confidence values wanted, NA NaN values allowed numeric vectors unless ‘na.rm’ ‘TRUE’. ... Arguments passed default method, allows many different methods applied. probs numeric vector probabilities values interval 0 1 . na.rm logical; true, NA NaN's removed x quantiles computed. names logical; true, result names attribute. useT logical; true, use t-distribution calculate confidence-based estimates. false use normal distribution calculate confidence based estimates. onlyProbs logical; true, return probability based confidence interval estimates, otherwise return pred logical; true use prediction interval instead confidence interval n integer/integerish; n used calculate prediction confidence interval. n=0 (default) use number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"default return probabilities names (named) points expected distribution located given sampling mean standard deviation. onlyProbs=FALSE prepend mean, variance, standard deviation, minimum, maximum number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"single probability, p, uses either: mean + qt(p, df=n)*sd/sqrt(n) mean + qnorm(p)*sd/sqrt(n) smallest observation corresponds probability 0 largest probability 1 mean corresponds 0.5. mean standard deviation sample calculated based Welford's method single pass. meant perform way quantile() can drop replacement code using quantile() using distributional assumptions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"","code":"quantile(x<- rnorm(1001)) #> 0% 25% 50% 75% 100% #> -3.403225585 -0.642325341 -0.001837139 0.656154718 2.780013343 meanProbs(x) #> 0% 25% 50% 75% 100% #> -3.403225585 -0.023025596 -0.002431956 0.018161685 2.780013343 # Can get some extra statistics if you request onlyProbs=FALSE meanProbs(x, onlyProbs=FALSE) #> mean var sd min max #> -2.431956e-03 9.324674e-01 9.656435e-01 -3.403226e+00 2.780013e+00 #> n 0% 25% 50% 75% #> 1.001000e+03 -3.403226e+00 -2.302560e-02 -2.431956e-03 1.816168e-02 #> 100% #> 2.780013e+00 x[2] <- NA_real_ meanProbs(x, onlyProbs=FALSE) #> mean var sd min max n 0% 25% 50% 75% 100% #> NA NA NA NA NA NA NA NA NA NA NA quantile(x<- rnorm(42)) #> 0% 25% 50% 75% 100% #> -2.1838542 -0.8532155 0.1476959 0.8088171 1.5847511 meanProbs(x) #> 0% 25% 50% 75% 100% #> -2.18385418 -0.18647291 -0.07532481 0.03582330 1.58475107 meanProbs(x, useT=FALSE) #> 0% 25% 50% 75% 100% #> -2.18385418 -0.18548788 -0.07532481 0.03483827 1.58475107"},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign the model block in the rxode2 related object — model<-","title":"Assign the model block in the rxode2 related object — model<-","text":"Assign model block rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign the model block in the rxode2 related object — model<-","text":"","code":"model(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign the model block in the rxode2 related object — model<-","text":"x rxode2 related object envir Environment assignment occurs value Value object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign the model block in the rxode2 related object — model<-","text":"rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign the model block in the rxode2 related object — model<-","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":null,"dir":"Reference","previous_headings":"","what":"Model block for rxode2/nlmixr models — model.function","title":"Model block for rxode2/nlmixr models — model.function","text":"Model block rxode2/nlmixr models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Model block for rxode2/nlmixr models — model.function","text":"","code":"# S3 method for `function` model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxUi model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxode2 model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxModelVars model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) model( x, ..., append = FALSE, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for default model(x, ..., append = FALSE, cov = NULL, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Model block for rxode2/nlmixr models — model.function","text":"x model expression ... arguments append boolean determine lines appended piping. possible values : TRUE lines appended model instead replaced FALSE lines replaced model (default) NA lines pre-pended model instead replaced lhs expression, append lines last observed line expression lhs auto boolean tells piping automatically selects parameters characterized population parameter, subject variability, covariate. TRUE automatic selection occurs. FALSE automatic selection turned everything added covariate (can promoted parameter ini statement). default TRUE, can changed options(rxode2.autoVarPiping=FALSE). cov character vector variables assumed covariates. override automatic promotion population parameter estimate (eta) envir environment unevaluated model expressions evaluated. May also NULL, list, data frame, pairlist integer specified sys.call.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Model block for rxode2/nlmixr models — model.function","text":"Model block ini information included. ini must called model block","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Model block for rxode2/nlmixr models — model.function","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract model lines from a rxui model — modelExtract","title":"Extract model lines from a rxui model — modelExtract","text":"Extract model lines rxui model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract model lines from a rxui model — modelExtract","text":"","code":"modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for `function` modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxUi modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxode2 modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxModelVars modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for default modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract model lines from a rxui model — modelExtract","text":"x model extract lines ... variables extract. missing, extract entire model (conditioned endpoint option ) expression return expressions (TRUE) strings (FALSE) endpoint include endpoint. can : NA -- Missing means include endpoint non-endpoint lines TRUE -- include endpoint lines FALSE -- include non-endpoint lines lines boolean. TRUE add lines attribute output value ie attr(, \"lines\") envir Environment evaluating variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract model lines from a rxui model — modelExtract","text":"expressions strings extracted lines. Note duplicated lhs expression line, return lines","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract model lines from a rxui model — modelExtract","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract model lines from a rxui model — modelExtract","text":"","code":"one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } f <- one.compartment() modelExtract(f, cp) #> [1] \"cp <- center/v\" modelExtract(one.compartment, d/dt(depot)) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> [1] \"d/dt(depot) <- -ka * depot\" # from variable var <- \"d/dt(depot)\" modelExtract(one.compartment, var) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> [1] \"d/dt(depot) <- -ka * depot\" modelExtract(f, endpoint=NA, lines=TRUE, expression=TRUE) #> [[1]] #> ka <- exp(tka + eta.ka) #> #> [[2]] #> cl <- exp(tcl + eta.cl) #> #> [[3]] #> v <- exp(tv + eta.v) #> #> [[4]] #> d/dt(depot) <- -ka * depot #> #> [[5]] #> d/dt(center) <- ka * depot - cl/v * center #> #> [[6]] #> cp <- center/v #> #> [[7]] #> cp ~ add(add.sd) #> #> attr(,\"lines\") #> [1] 1 2 3 4 5 6 7"},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":null,"dir":"Reference","previous_headings":"","what":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"NULL given method, choices returned named vector.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"","code":"odeMethodToInt(method = c(\"liblsoda\", \"lsoda\", \"dop853\", \"indLin\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"method method solving ODEs. Currently supports: \"liblsoda\" thread safe lsoda. supports parallel thread-based solving, ignores user Jacobian specification. \"lsoda\" -- LSODA solver. support parallel thread-based solving, allows user Jacobian specification. \"dop853\" -- DOP853 solver. support parallel thread-based solving user Jacobian specification \"indLin\" -- Solving inductive linearization. rxode2 dll must setup specially use solving routine.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"integer method (unless input NULL, case, see details)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot rxode2 objects — plot.rxSolve","title":"Plot rxode2 objects — plot.rxSolve","text":"Plot rxode2 objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot rxode2 objects — plot.rxSolve","text":"","code":"# S3 method for rxSolve plot(x, y, ..., log = \"\", xlab = \"Time\", ylab = \"\") # S3 method for rxSolveConfint1 plot(x, y, ..., xlab = \"Time\", ylab = \"\", log = \"\") # S3 method for rxSolveConfint2 plot(x, y, ..., xlab = \"Time\", ylab = \"\", log = \"\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot rxode2 objects — plot.rxSolve","text":"x rxode2 object plot y Compartments left-hand-side values plot either bare name character vector ... Ignored log \"\" (neither x y), \"x\", \"y\", \"xy\" (\"yx\") log-scale? xlab, ylab x y axis labels","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot rxode2 objects — plot.rxSolve","text":"ggplot2 object","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Update Solved object with '+' — +.rxSolve","title":"Update Solved object with '+' — +.rxSolve","text":"Update Solved object '+'","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update Solved object with '+' — +.rxSolve","text":"","code":"# S3 method for rxSolve +(solved, new)"},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update Solved object with '+' — +.rxSolve","text":"solved Solved object new New information added table.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update Solved object with '+' — +.rxSolve","text":"new solved object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Update Solved object with '+' — +.rxSolve","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":null,"dir":"Reference","previous_headings":"","what":"Print the rxCoef object — print.rxCoef","title":"Print the rxCoef object — print.rxCoef","text":"prints user supplied arguments rxCoef object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print the rxCoef object — print.rxCoef","text":"","code":"# S3 method for rxCoef print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print the rxCoef object — print.rxCoef","text":"x rxCoef object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print the rxCoef object — print.rxCoef","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print the rxCoef object — print.rxCoef","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Print rxDll object — print.rxDll","title":"Print rxDll object — print.rxDll","text":"tells rxDll loaded, ready /deleted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print rxDll object — print.rxDll","text":"","code":"# S3 method for rxDll print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print rxDll object — print.rxDll","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print rxDll object — print.rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Print information about the rxode2 object. — print.rxode2","title":"Print information about the rxode2 object. — print.rxode2","text":"prints model name status able solved","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print information about the rxode2 object. — print.rxode2","text":"","code":"# S3 method for rxode2 print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print information about the rxode2 object. — print.rxode2","text":"x rxode2 object ... Ignored parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print information about the rxode2 object. — print.rxode2","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print information about the rxode2 object. — print.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":null,"dir":"Reference","previous_headings":"","what":"probit and inverse probit functions — probit","title":"probit and inverse probit functions — probit","text":"probit inverse probit functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"probit and inverse probit functions — probit","text":"","code":"probit(x, low = 0, high = 1) probitInv(x, low = 0, high = 1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"probit and inverse probit functions — probit","text":"x Input value(s) range [low,high] translate -Inf Inf low Lowest value range high Highest value range","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"probit and inverse probit functions — probit","text":"values probit, probitInv probitNormInfo","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"probit and inverse probit functions — probit","text":"","code":"probit(0.25) #> [1] -0.6744898 probitInv(-0.674) #> [1] 0.2501557 probitNormInfo(probit(0.25), sd = 0.1) #> mean var cv #> 0.25106491 0.00100658 0.12636827 probitNormInfo(probit(1, 0, 10), sd = 1, low = 0, high = 10) #> mean var cv #> 1.824166 4.307824 1.137796"},{"path":"https://nlmixr2.github.io/rxode2/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"Objects exported from other packages — reexports","title":"Objects exported from other packages — reexports","text":"objects imported packages. Follow links see documentation. ggplot2 aes, expand_limits, facet_wrap, geom_line, ggplot, label_both, label_context, label_context, label_value, label_wrap_gen, scale_type, scale_x_continuous, scale_x_date, scale_x_discrete, scale_y_continuous, scale_y_date, scale_y_discrete, waiver, xlab, ylab lotri lotri magrittr %>% rxode2et .clearPipe, .collectWarnings, .s3register, add.dosing, add.sampling, .et, .rxEvid, .rxRateDur, et, etExpand, etRbind, etRep, etSeq, eventTable, rxCbindStudyIndividual, rxEtDispatchSolve, rxEvid, rxRateDur, rxReq, rxStack, toTrialDuration rxode2parse .getLastIdLvl, forderForceBase, rxDerived, rxSetIni0 rxode2random .cbindOme, .expandPars, .vecDf, cvPost, invWR1d, phi, rinvchisq, rLKJ1, rxGetSeed, rxGetSeed, rxRmvn, rxSeedEng, rxSetSeed, rxSetSeed, rxSetSeed, rxWithPreserveSeed, rxWithSeed, rxWithSeed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/reexports.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Objects exported from other packages — reexports","text":"Inherited parent routine","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":null,"dir":"Reference","previous_headings":"","what":"Allow unloading of dlls — rxAllowUnload","title":"Allow unloading of dlls — rxAllowUnload","text":"Allow unloading dlls","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Allow unloading of dlls — rxAllowUnload","text":"","code":"rxAllowUnload(allow)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Allow unloading of dlls — rxAllowUnload","text":"allow boolean indicating garbage collection unload rxode2 dlls.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Allow unloading of dlls — rxAllowUnload","text":"Boolean allow; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Allow unloading of dlls — rxAllowUnload","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Allow unloading of dlls — rxAllowUnload","text":"","code":"# Garbage collection will not unload un-used rxode2 dlls rxAllowUnload(FALSE); #> [1] FALSE # Garbage collection will unload unused rxode2 dlls rxAllowUnload(TRUE); #> [1] TRUE"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Append two rxui models together — rxAppendModel","title":"Append two rxui models together — rxAppendModel","text":"Append two rxui models together","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Append two rxui models together — rxAppendModel","text":"","code":"rxAppendModel(..., common = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Append two rxui models together — rxAppendModel","text":"... models append together common boolean determines need common value bind","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Append two rxui models together — rxAppendModel","text":"New model models appended together","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Append two rxui models together — rxAppendModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Append two rxui models together — rxAppendModel","text":"","code":"# \\donttest{ ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl tv <- exp(3.45); # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } idr <- function() { ini({ tkin <- log(1) tkout <- log(1) tic50 <- log(10) gamma <- fix(1) idr.sd <- 1 }) model({ kin <- exp(tkin) kout <- exp(tkout) ic50 <- exp(tic50) d/dt(eff) <- kin - kout*(1-ceff^gamma/(ic50^gamma+ceff^gamma)) eff ~ add(idr.sd) }) } rxAppendModel(ocmt %>% model(ceff=cp,append=TRUE), idr) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> #> #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=4 dvid='cp' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> ceff <- cp #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> } # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Control Variable — rxAssignControlValue","title":"Assign Control Variable — rxAssignControlValue","text":"Assign Control Variable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Control Variable — rxAssignControlValue","text":"","code":"rxAssignControlValue(ui, option, value)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Control Variable — rxAssignControlValue","text":"ui rxode2 ui function option Option name control modify value Value control modify","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Control Variable — rxAssignControlValue","text":"Nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign Control Variable — rxAssignControlValue","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign pointer based on model variables — rxAssignPtr","title":"Assign pointer based on model variables — rxAssignPtr","text":"Assign pointer based model variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign pointer based on model variables — rxAssignPtr","text":"","code":"rxAssignPtr(object = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign pointer based on model variables — rxAssignPtr","text":"object rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign pointer based on model variables — rxAssignPtr","text":"nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a logical matrix for block matrixes. — rxBlockZeros","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"Creates logical matrix block matrixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"","code":"rxBlockZeros(mat, i)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"mat Matrix Row/column block matrix setup.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"logical matrix returning elements zero.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the C file associated with the rxode2 object — rxC","title":"Return the C file associated with the rxode2 object — rxC","text":"return C code generating rxode2 DLL.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the C file associated with the rxode2 object — rxC","text":"","code":"rxC(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the C file associated with the rxode2 object — rxC","text":"obj rxode2 family objects character string model specification location file model specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the C file associated with the rxode2 object — rxC","text":"path library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the C file associated with the rxode2 object — rxC","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":null,"dir":"Reference","previous_headings":"","what":"Use cat when rxode2.verbose is TRUE — rxCat","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"Use cat rxode2.verbose TRUE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"","code":"rxCat(a, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"... Parameters sent cat","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":null,"dir":"Reference","previous_headings":"","what":"rxChain Chain or add item to solved system of equations — rxChain","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"Add item solved system equations","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"","code":"rxChain(obj1, obj2) # S3 method for solveRxDll +(obj1, obj2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"obj1 Solved object. obj2 New object added/piped/chained solved object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"newObject event table, return new solved object new event table.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":null,"dir":"Reference","previous_headings":"","what":"Second command in chaining commands — rxChain2","title":"Second command in chaining commands — rxChain2","text":"s3 method called internally + \\%>\\% operators.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Second command in chaining commands — rxChain2","text":"","code":"rxChain2(obj, solvedObject) # S3 method for default rxChain2(obj, solvedObject) # S3 method for EventTable rxChain2(obj, solvedObject)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Second command in chaining commands — rxChain2","text":"obj object added/chained/piped solved object solvedObject solved object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Second command in chaining commands — rxChain2","text":"chained operation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Second command in chaining commands — rxChain2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":null,"dir":"Reference","previous_headings":"","what":"Cleanup anonymous DLLs by unloading them — rxClean","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"cleans rxode2 loaded DLLs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"","code":"rxClean(wd)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"wd directory cleaned; (DEPRECIATED), longer anything. unloads rxode2 anonymous dlls.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"TRUE successful","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"Combine Error Lines create rxode2 expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"","code":"rxCombineErrorLines( uiModel, errLines = NULL, prefixLines = NULL, paramsLine = NULL, modelVars = FALSE, cmtLines = TRUE, dvidLine = TRUE, lstExpr = NULL, useIf = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"uiModel UI model errLines Error lines; missing, get error lines rxGetDistributionSimulationLines() prefixLines Prefix lines, param statement paramsLine Params line, present. modelVars Return model vars instead rxode2 statement cmtLines Include trailing cmt lines dvidLine Include trailing dvid() specification lstExpr list expressions model, NULL. NULL defaults model expressions accessible uiModel$lstExpr. useIf Use (CMT == X) endpoints","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"quoted expression can evaluated compiled rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"exported allow functions mangle error lines make types estimation methods (needed)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"","code":"# \\donttest{ one.cmt <- function() { ini({ ## You may label each parameter with a comment tka <- 0.45 # Log Ka tcl <- log(c(0, 2.7, 100)) # Log Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- 3.45; label(\"log V\") ## the label(\"Label name\") works with all models eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) }) } f <- rxode2(one.cmt) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' # You can get the simulation model easily by rxCombineErrorLines(f) #> rxode2({ #> params(tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v) #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ linCmt() #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (add.sd)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.rxLinCmt, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> cmt(rxLinCmt) #> dvid(1) #> }) # You can then get the compiled model by simply evaluting the model: r <- eval(rxCombineErrorLines(f)) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # This also works with multile endpoint models: pk.turnover.emax <- function() { ini({ tktr <- log(1) tka <- log(1) tcl <- log(0.1) tv <- log(10) ## eta.ktr ~ 1 eta.ka ~ 1 eta.cl ~ 2 eta.v ~ 1 prop.err <- 0.1 pkadd.err <- 0.1 ## temax <- logit(0.8) tec50 <- log(0.5) tkout <- log(0.05) te0 <- log(100) ## eta.emax ~ .5 eta.ec50 ~ .5 eta.kout ~ .5 eta.e0 ~ .5 ## pdadd.err <- 10 }) model({ ktr <- exp(tktr + eta.ktr) ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) ## emax=expit(temax+eta.emax) ec50 = exp(tec50 + eta.ec50) kout = exp(tkout + eta.kout) e0 = exp(te0 + eta.e0) ## DCP = center/v PD=1-emax*DCP/(ec50+DCP) ## effect(0) = e0 kin = e0*kout ## d/dt(depot) = -ktr * depot d/dt(gut) = ktr * depot -ka * gut d/dt(center) = ka * gut - cl / v * center d/dt(effect) = kin*PD -kout*effect ## cp = center / v cp ~ prop(prop.err) + add(pkadd.err) effect ~ add(pdadd.err) }) } f <- rxode2(pk.turnover.emax) #> #> rxCombineErrorLines(f) #> rxode2({ #> params(tktr, tka, tcl, tv, prop.err, pkadd.err, temax, tec50, #> tkout, te0, pdadd.err, eta.ktr, eta.ka, eta.cl, eta.v, #> eta.emax, eta.ec50, eta.kout, eta.e0) #> ktr <- exp(tktr + eta.ktr) #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> emax = expit(temax + eta.emax) #> ec50 = exp(tec50 + eta.ec50) #> kout = exp(tkout + eta.kout) #> e0 = exp(te0 + eta.e0) #> DCP = center/v #> PD = 1 - emax * DCP/(ec50 + DCP) #> effect(0) = e0 #> kin = e0 * kout #> d/dt(depot) = -ktr * depot #> d/dt(gut) = ktr * depot - ka * gut #> d/dt(center) = ka * gut - cl/v * center #> d/dt(effect) = kin * PD - kout * effect #> cp = center/v #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ cp #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (pkadd.err)^2 + (rx_pred_f_)^2 * (prop.err)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.cp, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ effect #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (pdadd.err)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.effect, #> rx_lambda_, rx_yj_, rx_low_, rx_hi_) #> } #> cmt(cp) #> dvid(5, 4) #> }) # Note that in the parsed form, you can also get the compiled rxode2 # model with $simulationModel f$simulationModel #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_be0b5dbb4a0767d8702ddb24bbc603bc model (✔ ready). #> $state: depot, gut, center, effect #> $stateExtra: cp #> $params: tktr, tka, tcl, tv, prop.err, pkadd.err, temax, tec50, tkout, te0, pdadd.err, eta.ktr, eta.ka, eta.cl, eta.v, eta.emax, eta.ec50, eta.kout, eta.e0, CMT, rxerr.cp, rxerr.effect #> $lhs: ktr, ka, cl, v, emax, ec50, kout, e0, DCP, PD, kin, cp, ipredSim, sim # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":null,"dir":"Reference","previous_headings":"","what":"Compile a model if needed — rxCompile","title":"Compile a model if needed — rxCompile","text":"compilation workhorse creating rxode2 model DLL files.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compile a model if needed — rxCompile","text":"","code":"rxCompile( model, dir, prefix, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for rxModelVars rxCompile( model, dir = NULL, prefix = NULL, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for character rxCompile( model, dir = NULL, prefix = NULL, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for rxDll rxCompile(model, ...) # S3 method for rxode2 rxCompile(model, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compile a model if needed — rxCompile","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . dir model directory C file stored compiling. prefix string indicating prefix use C based functions. missing, calculated based file name, md5 parsed model. force boolean stating (re)compile forced rxode2 detects models already generated. modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. package Package name pre-compiled binaries. ... arguments sent rxTrans() function.","code":"If unspecified, the C code is stored in a temporary directory, then the model is compiled and moved to the current directory. Afterwards the C code is removed. If specified, the C code is stored in the specified directory and then compiled in that directory. The C code is not removed after the DLL is created in the same directory. This can be useful to debug the c-code outputs."},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compile a model if needed — rxCompile","text":"rxDll object following components dll DLL path model model specification .c function call C code correct context DLL using .C() function. .call function call C code correct context DLL using .Call() function. args list arguments used create rxDll object.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compile a model if needed — rxCompile","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":null,"dir":"Reference","previous_headings":"","what":"Current Condition for rxode2 object — rxCondition","title":"Current Condition for rxode2 object — rxCondition","text":"Current Condition rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Current Condition for rxode2 object — rxCondition","text":"","code":"rxCondition(obj, condition = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Current Condition for rxode2 object — rxCondition","text":"obj rxode2 object condition specified one conditions rxode2 object (determined rxExpandIfElse()), assign rxode2 current condition parameter. condition one known condition, condition set NULL, implying conditioning currently used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Current Condition for rxode2 object — rxCondition","text":"Current condition rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Current Condition for rxode2 object — rxCondition","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":null,"dir":"Reference","previous_headings":"","what":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"assumes normal ODE equations first equations ODE expanded forward sensitivities type sensitivity (like adjoint)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"","code":"rxControlUpdateSens(rxControl, sensCmt = NULL, ncmt = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"rxControl Input list rxControl type list sensCmt Number sensitivity compartments ncmt Number compartments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"Updated rxControl $atol, $rtol, $ssAtol $ssRtol updated different sensitivities normal ODEs (first) different sensitivity larger compartments (sensitivities).","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"","code":"tmp <- rxControl() tmp2 <- rxControlUpdateSens(tmp, 3, 6) tmp2$atol #> [1] 1e-08 1e-08 1e-08 1e-08 1e-08 1e-08 tmp2$rtol #> [1] 1e-06 1e-06 1e-06 1e-06 1e-06 1e-06 tmp2$ssAtol #> [1] 1e-08 1e-08 1e-08 1e-08 1e-08 1e-08 tmp2$ssRtol #> [1] 1e-06 1e-06 1e-06 1e-06 1e-06 1e-06"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":null,"dir":"Reference","previous_headings":"","what":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"run, R_user_dir rxode2's cache present, create cache","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"","code":"rxCreateCache()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":null,"dir":"Reference","previous_headings":"","what":"Add to rxode2's derivative tables — rxD","title":"Add to rxode2's derivative tables — rxD","text":"Add rxode2's derivative tables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add to rxode2's derivative tables — rxD","text":"","code":"rxD(name, derivatives)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add to rxode2's derivative tables — rxD","text":"name Function Name derivatives list functions. function takes number arguments original function. first function construct derivative respect first argument; second function construct derivitive respect second argument, .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add to rxode2's derivative tables — rxD","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add to rxode2's derivative tables — rxD","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add to rxode2's derivative tables — rxD","text":"","code":"## Add an arbitrary list of derivative functions ## In this case the fun(x,y) is assumed to be 0.5*x^2+0.5*y^2 rxD(\"fun\", list( function(x, y) { return(x) }, function(x, y) { return(y) } ))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete the DLL for the model — rxDelete","title":"Delete the DLL for the model — rxDelete","text":"function deletes DLL, delete model information object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete the DLL for the model — rxDelete","text":"","code":"rxDelete(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete the DLL for the model — rxDelete","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete the DLL for the model — rxDelete","text":"boolean stating operation successful.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Delete the DLL for the model — rxDelete","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Demote the error type — rxDemoteAddErr","title":"Demote the error type — rxDemoteAddErr","text":"Demote error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Demote the error type — rxDemoteAddErr","text":"","code":"rxDemoteAddErr(errType)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Demote the error type — rxDemoteAddErr","text":"errType Error type factor","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Demote the error type — rxDemoteAddErr","text":"Demoted Error Type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Demote the error type — rxDemoteAddErr","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Demote the error type — rxDemoteAddErr","text":"","code":"rxErrTypeCombine(\"add\") %>% rxErrTypeCombine(\"prop\") #> $transform #> [1] untransformed #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add + prop #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] untransformed #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" # This removes the internal additive error rxErrTypeCombine(\"add\") %>% rxErrTypeCombine(\"prop\") %>% rxDemoteAddErr() #> $transform #> [1] untransformed #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] prop #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] untransformed #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" # This is used for logitNorm(NA), the additive portion is stripped"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":null,"dir":"Reference","previous_headings":"","what":"Jacobian and parameter derivatives — rxDfdy","title":"Jacobian and parameter derivatives — rxDfdy","text":"Return Jacobain parameter derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Jacobian and parameter derivatives — rxDfdy","text":"","code":"rxDfdy(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Jacobian and parameter derivatives — rxDfdy","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Jacobian and parameter derivatives — rxDfdy","text":"list jacobian parameters defined rxode2 object.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Jacobian and parameter derivatives — rxDfdy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the DLL associated with the rxode2 object — rxDll","title":"Return the DLL associated with the rxode2 object — rxDll","text":"return dynamic load library shared object used run C code rxode2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the DLL associated with the rxode2 object — rxDll","text":"","code":"rxDll(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the DLL associated with the rxode2 object — rxDll","text":"obj rxode2 family objects character string model specification location file model specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the DLL associated with the rxode2 object — rxDll","text":"path library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the DLL associated with the rxode2 object — rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":null,"dir":"Reference","previous_headings":"","what":"Load rxode2 object — rxDynLoad","title":"Load rxode2 object — rxDynLoad","text":"Load rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load rxode2 object — rxDynLoad","text":"","code":"rxDynLoad(obj) rxLoad(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load rxode2 object — rxDynLoad","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load rxode2 object — rxDynLoad","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Load rxode2 object — rxDynLoad","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":null,"dir":"Reference","previous_headings":"","what":"Unload rxode2 object — rxDynUnload","title":"Unload rxode2 object — rxDynUnload","text":"Unload rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unload rxode2 object — rxDynUnload","text":"","code":"rxDynUnload(obj) rxUnload(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Unload rxode2 object — rxDynUnload","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unload rxode2 object — rxDynUnload","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Unload rxode2 object — rxDynUnload","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine transformations and error structures — rxErrTypeCombine","title":"Combine transformations and error structures — rxErrTypeCombine","text":"Combine error information figure transformation applied current endpoint","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine transformations and error structures — rxErrTypeCombine","text":"","code":"rxErrTypeCombine(oldErrType, newErrType)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine transformations and error structures — rxErrTypeCombine","text":"oldErrType old transformation, default zero representing prior transformation. parameter first allow piping. parameter addTransform missing oldErrType character value, functions swaps oldErrType addTransform assigns oldErrType zero assuming prior distribution. newErrType new distribution \"added\" current transformation. assumes inputs preferred distribution name, determined rxPreferredDistributionName()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine transformations and error structures — rxErrTypeCombine","text":"new transformation factor","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine transformations and error structures — rxErrTypeCombine","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine transformations and error structures — rxErrTypeCombine","text":"","code":"rxErrTypeCombine(\"probitNorm\") #> $transform #> [1] probit #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] none #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" rxErrTypeCombine(\"probitNorm\") %>% rxErrTypeCombine(\"boxCox\") #> $transform #> [1] probit + boxCox #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] none #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand d(f)/d(eta) — rxExpandFEta_","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"Expand d(f)/d(eta)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"","code":"rxExpandFEta_(state, neta, pred, isTheta = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"state state expand neta number etas pred type prediction isTheta logical, expansion actually thetas instead etas","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"String symengine expressions evaluate calculate df/deta","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":null,"dir":"Reference","previous_headings":"","what":"Faster expand.grid — rxExpandGrid","title":"Faster expand.grid — rxExpandGrid","text":"support x y characters right now","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Faster expand.grid — rxExpandGrid","text":"","code":"rxExpandGrid(x, y, type = 0L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Faster expand.grid — rxExpandGrid","text":"x first element (must character) y second element (must character) type Internal type=0L traditional expand grid type=1L Jacobian expand grid (adds symbols)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Faster expand.grid — rxExpandGrid","text":"Expand grid","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Faster expand.grid — rxExpandGrid","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Faster expand.grid — rxExpandGrid","text":"","code":"## rxExpandGrid(letters, letters) #> Var1 Var2 #> 1 a a #> 2 b a #> 3 c a #> 4 d a #> 5 e a #> 6 f a #> 7 g a #> 8 h a #> 9 i a #> 10 j a #> 11 k a #> 12 l a #> 13 m a #> 14 n a #> 15 o a #> 16 p a #> 17 q a #> 18 r a #> 19 s a #> 20 t a #> 21 u a #> 22 v a #> 23 w a #> 24 x a #> 25 y a #> 26 z a #> 27 a b #> 28 b b #> 29 c b #> 30 d b #> 31 e b #> 32 f b #> 33 g b #> 34 h b #> 35 i b #> 36 j b #> 37 k b #> 38 l b #> 39 m b #> 40 n b #> 41 o b #> 42 p b #> 43 q b #> 44 r b #> 45 s b #> 46 t b #> 47 u b #> 48 v b #> 49 w b #> 50 x b #> 51 y b #> 52 z b #> 53 a c #> 54 b c #> 55 c c #> 56 d c #> 57 e c #> 58 f c #> 59 g c #> 60 h c #> 61 i c #> 62 j c #> 63 k c #> 64 l c #> 65 m c #> 66 n c #> 67 o c #> 68 p c #> 69 q c #> 70 r c #> 71 s c #> 72 t c #> 73 u c #> 74 v c #> 75 w c #> 76 x c #> 77 y c #> 78 z c #> 79 a d #> 80 b d #> 81 c d #> 82 d d #> 83 e d #> 84 f d #> 85 g d #> 86 h d #> 87 i d #> 88 j d #> 89 k d #> 90 l d #> 91 m d #> 92 n d #> 93 o d #> 94 p d #> 95 q d #> 96 r d #> 97 s d #> 98 t d #> 99 u d #> 100 v d #> 101 w d #> 102 x d #> 103 y d #> 104 z d #> 105 a e #> 106 b e #> 107 c e #> 108 d e #> 109 e e #> 110 f e #> 111 g e #> 112 h e #> 113 i e #> 114 j e #> 115 k e #> 116 l e #> 117 m e #> 118 n e #> 119 o e #> 120 p e #> 121 q e #> 122 r e #> 123 s e #> 124 t e #> 125 u e #> 126 v e #> 127 w e #> 128 x e #> 129 y e #> 130 z e #> 131 a f #> 132 b f #> 133 c f #> 134 d f #> 135 e f #> 136 f f #> 137 g f #> 138 h f #> 139 i f #> 140 j f #> 141 k f #> 142 l f #> 143 m f #> 144 n f #> 145 o f #> 146 p f #> 147 q f #> 148 r f #> 149 s f #> 150 t f #> 151 u f #> 152 v f #> 153 w f #> 154 x f #> 155 y f #> 156 z f #> 157 a g #> 158 b g #> 159 c g #> 160 d g #> 161 e g #> 162 f g #> 163 g g #> 164 h g #> 165 i g #> 166 j g #> 167 k g #> 168 l g #> 169 m g #> 170 n g #> 171 o g #> 172 p g #> 173 q g #> 174 r g #> 175 s g #> 176 t g #> 177 u g #> 178 v g #> 179 w g #> 180 x g #> 181 y g #> 182 z g #> 183 a h #> 184 b h #> 185 c h #> 186 d h #> 187 e h #> 188 f h #> 189 g h #> 190 h h #> 191 i h #> 192 j h #> 193 k h #> 194 l h #> 195 m h #> 196 n h #> 197 o h #> 198 p h #> 199 q h #> 200 r h #> 201 s h #> 202 t h #> 203 u h #> 204 v h #> 205 w h #> 206 x h #> 207 y h #> 208 z h #> 209 a i #> 210 b i #> 211 c i #> 212 d i #> 213 e i #> 214 f i #> 215 g i #> 216 h i #> 217 i i #> 218 j i #> 219 k i #> 220 l i #> 221 m i #> 222 n i #> 223 o i #> 224 p i #> 225 q i #> 226 r i #> 227 s i #> 228 t i #> 229 u i #> 230 v i #> 231 w i #> 232 x i #> 233 y i #> 234 z i #> 235 a j #> 236 b j #> 237 c j #> 238 d j #> 239 e j #> 240 f j #> 241 g j #> 242 h j #> 243 i j #> 244 j j #> 245 k j #> 246 l j #> 247 m j #> 248 n j #> 249 o j #> 250 p j #> 251 q j #> 252 r j #> 253 s j #> 254 t j #> 255 u j #> 256 v j #> 257 w j #> 258 x j #> 259 y j #> 260 z j #> 261 a k #> 262 b k #> 263 c k #> 264 d k #> 265 e k #> 266 f k #> 267 g k #> 268 h k #> 269 i k #> 270 j k #> 271 k k #> 272 l k #> 273 m k #> 274 n k #> 275 o k #> 276 p k #> 277 q k #> 278 r k #> 279 s k #> 280 t k #> 281 u k #> 282 v k #> 283 w k #> 284 x k #> 285 y k #> 286 z k #> 287 a l #> 288 b l #> 289 c l #> 290 d l #> 291 e l #> 292 f l #> 293 g l #> 294 h l #> 295 i l #> 296 j l #> 297 k l #> 298 l l #> 299 m l #> 300 n l #> 301 o l #> 302 p l #> 303 q l #> 304 r l #> 305 s l #> 306 t l #> 307 u l #> 308 v l #> 309 w l #> 310 x l #> 311 y l #> 312 z l #> 313 a m #> 314 b m #> 315 c m #> 316 d m #> 317 e m #> 318 f m #> 319 g m #> 320 h m #> 321 i m #> 322 j m #> 323 k m #> 324 l m #> 325 m m #> 326 n m #> 327 o m #> 328 p m #> 329 q m #> 330 r m #> 331 s m #> 332 t m #> 333 u m #> 334 v m #> 335 w m #> 336 x m #> 337 y m #> 338 z m #> 339 a n #> 340 b n #> 341 c n #> 342 d n #> 343 e n #> 344 f n #> 345 g n #> 346 h n #> 347 i n #> 348 j n #> 349 k n #> 350 l n #> 351 m n #> 352 n n #> 353 o n #> 354 p n #> 355 q n #> 356 r n #> 357 s n #> 358 t n #> 359 u n #> 360 v n #> 361 w n #> 362 x n #> 363 y n #> 364 z n #> 365 a o #> 366 b o #> 367 c o #> 368 d o #> 369 e o #> 370 f o #> 371 g o #> 372 h o #> 373 i o #> 374 j o #> 375 k o #> 376 l o #> 377 m o #> 378 n o #> 379 o o #> 380 p o #> 381 q o #> 382 r o #> 383 s o #> 384 t o #> 385 u o #> 386 v o #> 387 w o #> 388 x o #> 389 y o #> 390 z o #> 391 a p #> 392 b p #> 393 c p #> 394 d p #> 395 e p #> 396 f p #> 397 g p #> 398 h p #> 399 i p #> 400 j p #> 401 k p #> 402 l p #> 403 m p #> 404 n p #> 405 o p #> 406 p p #> 407 q p #> 408 r p #> 409 s p #> 410 t p #> 411 u p #> 412 v p #> 413 w p #> 414 x p #> 415 y p #> 416 z p #> 417 a q #> 418 b q #> 419 c q #> 420 d q #> 421 e q #> 422 f q #> 423 g q #> 424 h q #> 425 i q #> 426 j q #> 427 k q #> 428 l q #> 429 m q #> 430 n q #> 431 o q #> 432 p q #> 433 q q #> 434 r q #> 435 s q #> 436 t q #> 437 u q #> 438 v q #> 439 w q #> 440 x q #> 441 y q #> 442 z q #> 443 a r #> 444 b r #> 445 c r #> 446 d r #> 447 e r #> 448 f r #> 449 g r #> 450 h r #> 451 i r #> 452 j r #> 453 k r #> 454 l r #> 455 m r #> 456 n r #> 457 o r #> 458 p r #> 459 q r #> 460 r r #> 461 s r #> 462 t r #> 463 u r #> 464 v r #> 465 w r #> 466 x r #> 467 y r #> 468 z r #> 469 a s #> 470 b s #> 471 c s #> 472 d s #> 473 e s #> 474 f s #> 475 g s #> 476 h s #> 477 i s #> 478 j s #> 479 k s #> 480 l s #> 481 m s #> 482 n s #> 483 o s #> 484 p s #> 485 q s #> 486 r s #> 487 s s #> 488 t s #> 489 u s #> 490 v s #> 491 w s #> 492 x s #> 493 y s #> 494 z s #> 495 a t #> 496 b t #> 497 c t #> 498 d t #> 499 e t #> 500 f t #> 501 g t #> 502 h t #> 503 i t #> 504 j t #> 505 k t #> 506 l t #> 507 m t #> 508 n t #> 509 o t #> 510 p t #> 511 q t #> 512 r t #> 513 s t #> 514 t t #> 515 u t #> 516 v t #> 517 w t #> 518 x t #> 519 y t #> 520 z t #> 521 a u #> 522 b u #> 523 c u #> 524 d u #> 525 e u #> 526 f u #> 527 g u #> 528 h u #> 529 i u #> 530 j u #> 531 k u #> 532 l u #> 533 m u #> 534 n u #> 535 o u #> 536 p u #> 537 q u #> 538 r u #> 539 s u #> 540 t u #> 541 u u #> 542 v u #> 543 w u #> 544 x u #> 545 y u #> 546 z u #> 547 a v #> 548 b v #> 549 c v #> 550 d v #> 551 e v #> 552 f v #> 553 g v #> 554 h v #> 555 i v #> 556 j v #> 557 k v #> 558 l v #> 559 m v #> 560 n v #> 561 o v #> 562 p v #> 563 q v #> 564 r v #> 565 s v #> 566 t v #> 567 u v #> 568 v v #> 569 w v #> 570 x v #> 571 y v #> 572 z v #> 573 a w #> 574 b w #> 575 c w #> 576 d w #> 577 e w #> 578 f w #> 579 g w #> 580 h w #> 581 i w #> 582 j w #> 583 k w #> 584 l w #> 585 m w #> 586 n w #> 587 o w #> 588 p w #> 589 q w #> 590 r w #> 591 s w #> 592 t w #> 593 u w #> 594 v w #> 595 w w #> 596 x w #> 597 y w #> 598 z w #> 599 a x #> 600 b x #> 601 c x #> 602 d x #> 603 e x #> 604 f x #> 605 g x #> 606 h x #> 607 i x #> 608 j x #> 609 k x #> 610 l x #> 611 m x #> 612 n x #> 613 o x #> 614 p x #> 615 q x #> 616 r x #> 617 s x #> 618 t x #> 619 u x #> 620 v x #> 621 w x #> 622 x x #> 623 y x #> 624 z x #> 625 a y #> 626 b y #> 627 c y #> 628 d y #> 629 e y #> 630 f y #> 631 g y #> 632 h y #> 633 i y #> 634 j y #> 635 k y #> 636 l y #> 637 m y #> 638 n y #> 639 o y #> 640 p y #> 641 q y #> 642 r y #> 643 s y #> 644 t y #> 645 u y #> 646 v y #> 647 w y #> 648 x y #> 649 y y #> 650 z y #> 651 a z #> 652 b z #> 653 c z #> 654 d z #> 655 e z #> 656 f z #> 657 g z #> 658 h z #> 659 i z #> 660 j z #> 661 k z #> 662 l z #> 663 m z #> 664 n z #> 665 o z #> 666 p z #> 667 q z #> 668 r z #> 669 s z #> 670 t z #> 671 u z #> 672 v z #> 673 w z #> 674 x z #> 675 y z #> 676 z z ## Another fast method; See ## https://stackoverflow.com/questions/10405637/use-outer-instead-of-expand-grid expand.grid.jc <- function(seq1, seq2) { cbind( Var1 = rep.int(seq1, length(seq2)), Var2 = rep.int(seq2, rep.int(length(seq1), length(seq2))) ) } # \\donttest{ microbenchmark::microbenchmark(rxExpandGrid(letters, letters), expand.grid.jc(letters, letters)) #> Unit: microseconds #> expr min lq mean median uq #> rxExpandGrid(letters, letters) 10.80 11.1305 45.96206 11.3510 11.602 #> expand.grid.jc(letters, letters) 16.07 16.7410 193.97223 17.8285 18.640 #> max neval #> 3295.638 100 #> 4231.945 100 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand grid internal function — rxExpandGrid_","title":"Expand grid internal function — rxExpandGrid_","text":"Expand grid internal function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand grid internal function — rxExpandGrid_","text":"","code":"rxExpandGrid_(c1, c2, type)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand grid internal function — rxExpandGrid_","text":"c1 character vector items expanded c2 second character vector items expanded type 0 typical data frame, 1 symengine sensitivity expansion","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand grid internal function — rxExpandGrid_","text":"data frame (type = 0) symengine string (type=1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"Expand /else clauses multiple different types lines.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"","code":"rxExpandIfElse(model, removeInis = TRUE, removePrint = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"model Model can character, rxode2 model. needs normalized syntax, (...){} line. else statement must line closing bracket statement previous line. else statment must also contain opening bracket, like code else {} removeInis boolean indicating parameter initializations removed model. removePrint boolean indicating printing statements removed model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"named character vector. names vector logical conditions, values lines satisfy logical conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand second order sensitivity — rxExpandSens2_","title":"Expand second order sensitivity — rxExpandSens2_","text":"Expand second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand second order sensitivity — rxExpandSens2_","text":"","code":"rxExpandSens2_(state, s1, s2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand second order sensitivity — rxExpandSens2_","text":"state state expand s1 variables calculate sensitivity s2 variables calculate second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand second order sensitivity — rxExpandSens2_","text":"string symengine second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand sensitivity — rxExpandSens_","title":"Expand sensitivity — rxExpandSens_","text":"Expand sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand sensitivity — rxExpandSens_","text":"","code":"rxExpandSens_(state, calcSens)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand sensitivity — rxExpandSens_","text":"state state expand calcSens variables calculate sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand sensitivity — rxExpandSens_","text":"symengine string expanded sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":null,"dir":"Reference","previous_headings":"","what":"Apply the fixed population estimated parameters — rxFixPop","title":"Apply the fixed population estimated parameters — rxFixPop","text":"Apply fixed population estimated parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Apply the fixed population estimated parameters — rxFixPop","text":"","code":"rxFixPop(ui, returnNull = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Apply the fixed population estimated parameters — rxFixPop","text":"ui rxode2 ui function returnNull boolean unchanged values return original ui (FALSE) null (TRUE)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Apply the fixed population estimated parameters — rxFixPop","text":"returnNull TRUE, NULL nothing changed, changed model ui. returnNull FALSE, return ui matter changed .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Apply the fixed population estimated parameters — rxFixPop","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Apply the fixed population estimated parameters — rxFixPop","text":"","code":"One.comp.transit.allo <- function() { ini({ # Where initial conditions/variables are specified lktr <- log(1.15) #log k transit (/h) lcl <- log(0.15) #log Cl (L/hr) lv <- log(7) #log V (L) ALLC <- fix(0.75) #allometric exponent cl ALLV <- fix(1.00) #allometric exponent v prop.err <- 0.15 #proportional error (SD/mean) add.err <- 0.6 #additive error (mg/L) eta.ktr ~ 0.5 eta.cl ~ 0.1 eta.v ~ 0.1 }) model({ #Allometric scaling on weight cl <- exp(lcl + eta.cl + ALLC * logWT70) v <- exp(lv + eta.v + ALLV * logWT70) ktr <- exp(lktr + eta.ktr) # RxODE-style differential equations are supported d/dt(depot) = -ktr * depot d/dt(central) = ktr * trans - (cl/v) * central d/dt(trans) = ktr * depot - ktr * trans ## Concentration is calculated cp = central/v # And is assumed to follow proportional and additive error cp ~ prop(prop.err) + add(add.err) }) } m <- rxFixPop(One.comp.transit.allo) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' m #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> lktr lcl lv prop.err add.err #> 0.1397619 -1.8971200 1.9459101 0.1500000 0.6000000 #> #> Omega ($omega): #> eta.ktr eta.cl eta.v #> eta.ktr 0.5 0.0 0.0 #> eta.cl 0.0 0.1 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 central #> 3 3 trans #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 lcl eta.cl id #> 2 lv eta.v id #> 3 lktr eta.ktr id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> lktr <- 0.139761942375159 #> label(\"log k transit (/h)\") #> lcl <- -1.89711998488588 #> label(\"log Cl (L/hr)\") #> lv <- 1.94591014905531 #> label(\"log V (L)\") #> prop.err <- c(0, 0.15) #> label(\"proportional error (SD/mean)\") #> add.err <- c(0, 0.6) #> label(\"additive error (mg/L)\") #> eta.ktr ~ 0.5 #> eta.cl ~ 0.1 #> eta.v ~ 0.1 #> }) #> model({ #> cl <- exp(lcl + eta.cl + 0.75 * logWT70) #> v <- exp(lv + eta.v + 1 * logWT70) #> ktr <- exp(lktr + eta.ktr) #> d/dt(depot) = -ktr * depot #> d/dt(central) = ktr * trans - (cl/v) * central #> d/dt(trans) = ktr * depot - ktr * trans #> cp = central/v #> cp ~ prop(prop.err) + add(add.err) #> }) #> } # now everything is already fixed, so calling again will do nothing rxFixPop(m) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> lktr lcl lv prop.err add.err #> 0.1397619 -1.8971200 1.9459101 0.1500000 0.6000000 #> #> Omega ($omega): #> eta.ktr eta.cl eta.v #> eta.ktr 0.5 0.0 0.0 #> eta.cl 0.0 0.1 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 central #> 3 3 trans #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 lcl eta.cl id #> 2 lv eta.v id #> 3 lktr eta.ktr id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> lktr <- 0.139761942375159 #> label(\"log k transit (/h)\") #> lcl <- -1.89711998488588 #> label(\"log Cl (L/hr)\") #> lv <- 1.94591014905531 #> label(\"log V (L)\") #> prop.err <- c(0, 0.15) #> label(\"proportional error (SD/mean)\") #> add.err <- c(0, 0.6) #> label(\"additive error (mg/L)\") #> eta.ktr ~ 0.5 #> eta.cl ~ 0.1 #> eta.v ~ 0.1 #> }) #> model({ #> cl <- exp(lcl + eta.cl + 0.75 * logWT70) #> v <- exp(lv + eta.v + 1 * logWT70) #> ktr <- exp(lktr + eta.ktr) #> d/dt(depot) = -ktr * depot #> d/dt(central) = ktr * trans - (cl/v) * central #> d/dt(trans) = ktr * depot - ktr * trans #> cp = central/v #> cp ~ prop(prop.err) + add(add.err) #> }) #> } # if you call it with returnNull=TRUE when no changes have been # performed, the function will return NULL rxFixPop(m, returnNull=TRUE) #> NULL"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":null,"dir":"Reference","previous_headings":"","what":"Clear memoise cache for rxode2 — rxForget","title":"Clear memoise cache for rxode2 — rxForget","text":"Clear memoise cache rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Clear memoise cache for rxode2 — rxForget","text":"","code":"rxForget()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Clear memoise cache for rxode2 — rxForget","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Clear memoise cache for rxode2 — rxForget","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":null,"dir":"Reference","previous_headings":"","what":"Add/Create C functions for use in rxode2 — rxFun","title":"Add/Create C functions for use in rxode2 — rxFun","text":"Add/Create C functions use rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add/Create C functions for use in rxode2 — rxFun","text":"","code":"rxFun(name, args, cCode) rxRmFun(name)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add/Create C functions for use in rxode2 — rxFun","text":"name can either give name user function simple R function wish convert C. rxode2 convert R function C, name function match function name provided number arguments match R function provided. Hence, providing R function conversion C, rest arguments implied. args gives arguments user function cCode C-code new function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add/Create C functions for use in rxode2 — rxFun","text":"","code":"# \\donttest{ ## Right now rxode2 is not aware of the function fun ## Therefore it cannot translate it to symengine or ## Compile a model with it. try(rxode2(\"a=fun(a,b,c)\")) #> #> #> Error : syntax errors (see above) ## Note for this approach to work, it cannot interfere with C ## function names or reserved rxode2 special terms. Therefore ## f(x) would not work since f is an alias for bioavailability. fun <- \" double fun(double a, double b, double c) { return a*a+b*a+c; } \" ## C-code for function rxFun(\"fun\", c(\"a\", \"b\", \"c\"), fun) ## Added function ## Now rxode2 knows how to translate this function to symengine rxToSE(\"fun(a,b,c)\") #> [1] \"fun(a,b,c)\" ## And will take a central difference when calculating derivatives rxFromSE(\"Derivative(fun(a,b,c),a)\") #> [1] \"(fun((a)+6.05545445239334e-06,b,c)-fun(a,b,c))/6.05545445239334e-06\" ## Of course, you could specify the derivative table manually rxD(\"fun\", list( function(a, b, c) { paste0(\"2*\", a, \"+\", b) }, function(a, b, c) { return(a) }, function(a, b, c) { return(\"0.0\") } )) rxFromSE(\"Derivative(fun(a,b,c),a)\") #> [1] \"2*a+b\" # You can also remove the functions by `rxRmFun` rxRmFun(\"fun\") # you can also use R functions directly in rxode2 gg <- function(x, y) { x + y } f <- rxode2({ z = gg(x, y) }) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ e <- et(1:10) |> as.data.frame() e$x <- 1:10 e$y <- 21:30 rxSolve(f, e) #> Warning: not thread safe method, using 1 core #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows # Note that since it touches R, it can only run single-threaded. # There are also requirements for the function: # # 1. It accepts one value per argument (numeric) # # 2. It returns one numeric value # If it is a simple function (like gg) you can also convert it to C # using rxFun and load it into rxode2 rxFun(gg) #> → finding duplicate expressions in d(gg)/d(x)... #> → finding duplicate expressions in d(gg)/d(y)... #> converted R function 'gg' to C (will now use in rxode2) #> converted R function 'rx_gg_d_x' to C (will now use in rxode2) #> converted R function 'rx_gg_d_y' to C (will now use in rxode2) #> Added derivative table for 'gg' rxSolve(f, e) #> compiled with R user function 'gg'; now there is a clashing C user function #> triggered a recompile to use the C user function (they are always preferred) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows # to stop the recompile simply reassign the function f <- rxode2(f) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ rxSolve(f, e) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows rxRmFun(\"gg\") rm(gg) rm(f) # You can also automatically convert a R function to R code (and # calculate first derivatives) fun <- function(a, b, c) { a^2+b*a+c } rxFun(fun) #> → finding duplicate expressions in d(fun)/d(a)... #> → finding duplicate expressions in d(fun)/d(b)... #> → finding duplicate expressions in d(fun)/d(c)... #> converted R function 'fun' to C (will now use in rxode2) #> converted R function 'rx_fun_d_a' to C (will now use in rxode2) #> converted R function 'rx_fun_d_b' to C (will now use in rxode2) #> converted R function 'rx_fun_d_c' to C (will now use in rxode2) #> Added derivative table for 'fun' # You can see the R code if you want with rxC message(rxC(\"fun\")) #> double fun(double a, double b, double c) { #> double _lastValue=NA_REAL; #> _lastValue = R_pow_di(a,2)+b*a+c; #> return _lastValue; #> } # you can also remove both the function and the # derivatives with rxRmFun(\"fun\") rxRmFun(\"fun\") # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxGetControl option from ui — rxGetControl","title":"rxGetControl option from ui — rxGetControl","text":"rxGetControl option ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxGetControl option from ui — rxGetControl","text":"","code":"rxGetControl(ui, option, default)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxGetControl option from ui — rxGetControl","text":"ui rxode2 ui object option Option get default Default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxGetControl option from ui — rxGetControl","text":"Option (present) default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxGetControl option from ui — rxGetControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":null,"dir":"Reference","previous_headings":"","what":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"S3 method getting distribution lines rxode2 simulation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"","code":"rxGetDistributionSimulationLines(line) # S3 method for norm rxGetDistributionSimulationLines(line) # S3 method for dnorm rxGetDistributionSimulationLines(line) # S3 method for t rxGetDistributionSimulationLines(line) # S3 method for cauchy rxGetDistributionSimulationLines(line) # S3 method for ordinal rxGetDistributionSimulationLines(line) # S3 method for default rxGetDistributionSimulationLines(line) # S3 method for rxUi rxGetDistributionSimulationLines(line)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"line Parsed rxode2 model environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"Lines simulation ipred dv. based idea focei parameters defined","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the linear compartment model true function — rxGetLin","title":"Get the linear compartment model true function — rxGetLin","text":"Get linear compartment model true function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the linear compartment model true function — rxGetLin","text":"","code":"rxGetLin( model, linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), verbose = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the linear compartment model true function — rxGetLin","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . linCmtSens method calculate linCmt() solutions verbose TRUE verbose linear compartmental model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the linear compartment model true function — rxGetLin","text":"model linCmt() replaced linCmtA()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the linear compartment model true function — rxGetLin","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model properties without compiling it. — rxGetModel","title":"Get model properties without compiling it. — rxGetModel","text":"Get model properties without compiling .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model properties without compiling it. — rxGetModel","text":"","code":"rxGetModel( model, calcSens = NULL, calcJac = NULL, collapseModel = NULL, indLin = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model properties without compiling it. — rxGetModel","text":"model rxode2 specification calcSens boolean indicating rxode2 calculate sensitivities according specified ODEs. calcJac boolean indicating rxode2 calculate Jacobain according specified ODEs. collapseModel boolean indicating rxode2 remove LHS variables calculating sensitivities. indLin Calculate inductive linearization matrices compile inductive linearization support.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model properties without compiling it. — rxGetModel","text":"rxode2 trans list","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model properties without compiling it. — rxGetModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Get rxode2 model from object — rxGetrxode2","title":"Get rxode2 model from object — rxGetrxode2","text":"Get rxode2 model object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get rxode2 model from object — rxGetrxode2","text":"","code":"rxGetrxode2(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get rxode2 model from object — rxGetrxode2","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get rxode2 model from object — rxGetrxode2","text":"rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":null,"dir":"Reference","previous_headings":"","what":"Format rxSolve and related objects as html. — rxHtml","title":"Format rxSolve and related objects as html. — rxHtml","text":"Format rxSolve related objects html.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Format rxSolve and related objects as html. — rxHtml","text":"","code":"rxHtml(x, ...) # S3 method for rxSolve rxHtml(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Format rxSolve and related objects as html. — rxHtml","text":"x rxode2 object ... Extra arguments sent kable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Format rxSolve and related objects as html. — rxHtml","text":"html code rxSolve object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Format rxSolve and related objects as html. — rxHtml","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the preferred factoring by state — rxIndLinState","title":"Set the preferred factoring by state — rxIndLinState","text":"Set preferred factoring state","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the preferred factoring by state — rxIndLinState","text":"","code":"rxIndLinState(preferred = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the preferred factoring by state — rxIndLinState","text":"preferred list state's preferred factorization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the preferred factoring by state — rxIndLinState","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set the preferred factoring by state — rxIndLinState","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":null,"dir":"Reference","previous_headings":"","what":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"one state ODE separated specifies incorporated matrix exponential.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"","code":"rxIndLinStrategy(strategy = c(\"curState\", \"split\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"strategy strategy inductive linearization matrix building curState Prefer parameterizing terms current state, followed first state observed term. split Split parameterization states term dividing number states term adding matrix term state.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":null,"dir":"Reference","previous_headings":"","what":"Inductive linearization solver — rxIndLin_","title":"Inductive linearization solver — rxIndLin_","text":"Inductive linearization solver","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inductive linearization solver — rxIndLin_","text":"cSub = Current subject number op rxode2 solving options tp Prior time point/time zero yp Prior state; vector size = neq; Final state updated tf Final Time InfusionRate = Rates compartment; vector size = neq Indicator compartment \"\" cache 0 = Cache doIndLin == 0, cache > 0 = nInf-1 rxode2 matrix exponential function IndF rxode2 Inductive Linearization function F","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inductive linearization solver — rxIndLin_","text":"Returns status solving 1 = Successful solve -1 = Maximum number iterations reached inductive linearization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":null,"dir":"Reference","previous_headings":"","what":"Initial Values and State values for a rxode2 object — rxInits","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Returns initial values rxDll object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Initial Values and State values for a rxode2 object — rxInits","text":"","code":"rxInits( obj, vec = NULL, req = NULL, defaultValue = 0, noerror = FALSE, noini = FALSE, rxLines = FALSE ) rxInit( obj, vec = NULL, req = NULL, defaultValue = 0, noerror = FALSE, noini = FALSE, rxLines = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Initial Values and State values for a rxode2 object — rxInits","text":"obj rxDll, rxode2, named vector representing default initial arguments vec supplied, named vector model. req Required names, required order ODE solver defaultValue number NA representing default value parameters missing vec, required req. noerror boolean specifying error thrown missing parameter values default = NA","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Initial values rxDll object","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":null,"dir":"Reference","previous_headings":"","what":"Invert matrix using RcppArmadillo. — rxInv","title":"Invert matrix using RcppArmadillo. — rxInv","text":"Invert matrix using RcppArmadillo.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Invert matrix using RcppArmadillo. — rxInv","text":"","code":"rxInv(matrix)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Invert matrix using RcppArmadillo. — rxInv","text":"matrix matrix inverted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Invert matrix using RcppArmadillo. — rxInv","text":"inverse pseudo inverse matrix.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":null,"dir":"Reference","previous_headings":"","what":"Check the type of an object using Rcpp — rxIs","title":"Check the type of an object using Rcpp — rxIs","text":"Check type object using Rcpp","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check the type of an object using Rcpp — rxIs","text":"","code":"rxIs(obj, cls)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check the type of an object using Rcpp — rxIs","text":"obj Object check cls Type class. s3 classes lists/environments primitive classes checked. matrix types distinguished numeric.matrix, integer.matrix, logical.matrix, character.matrix well traditional matrix class. Additionally checks event.data.frame data.frame object time, evid amt. (UPPER, lower Title cases accepted)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check the type of an object using Rcpp — rxIs","text":"boolean indicating object member class.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check the type of an object using Rcpp — rxIs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":null,"dir":"Reference","previous_headings":"","what":"Checks if the rxode2 object was built with the current build — rxIsCurrent","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"Checks rxode2 object built current build","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"","code":"rxIsCurrent(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"boolean indicating built current rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Determine DLL associated rxode2 object loaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"","code":"rxIsLoaded(obj) rxDllLoaded(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":null,"dir":"Reference","previous_headings":"","what":"Left handed Variables — rxLhs","title":"Left handed Variables — rxLhs","text":"returns model calculated variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Left handed Variables — rxLhs","text":"","code":"rxLhs(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Left handed Variables — rxLhs","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Left handed Variables — rxLhs","text":"character vector listing calculated parameters","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Left handed Variables — rxLhs","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":null,"dir":"Reference","previous_headings":"","what":"Lock/unlocking of rxode2 dll file — rxLock","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"Lock/unlocking rxode2 dll file","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"","code":"rxLock(obj) rxUnlock(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the md5 of an rxode2 object or file — rxMd5","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"md5 based model possibly extra c code supplied model. addition md5 based syntax options, compiled rxode2 library md5, rxode2 version/repository.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"","code":"rxMd5(model, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . ... ignored arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"rxode2 object, return named list: file_md5 model's file's md5 parsed_md5 parsed model's file's md5. Otherwise return md5 based arguments provided","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":null,"dir":"Reference","previous_headings":"","what":"All model variables for a rxode2 object — rxModelVars","title":"All model variables for a rxode2 object — rxModelVars","text":"Return known model variables specified rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All model variables for a rxode2 object — rxModelVars","text":"","code":"rxModelVars(obj) rxModelVarsS3(obj) # S3 method for rxUi rxModelVarsS3(obj) # S3 method for default rxModelVarsS3(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All model variables for a rxode2 object — rxModelVars","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"All model variables for a rxode2 object — rxModelVars","text":"list rxode2 model properties including: params character vector names model parameters lhs character vector names model calculated parameters state character vector compartments rxode2 object trans named vector translated model properties including type jacobian specified, C function prefixes, well C functions names called compiled model. md5 named vector gives digest model (file_md5) parsed model (parsed_md5) model named vector giving input model (model), normalized model (comments standard syntax parsing, normModel), interim code used generate final C file parseModel","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"All model variables for a rxode2 object — rxModelVars","text":"items calculated compilation; built-rxode2 compiled DLL. allow extension, s3 hook added function rxModelVarsS3.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"All model variables for a rxode2 object — rxModelVars","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the rxModels information — rxModels_","title":"Get the rxModels information — rxModels_","text":"Get rxModels information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the rxModels information — rxModels_","text":"","code":"rxModels_(env = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the rxModels information — rxModels_","text":"env boolean returns environment models stored (TRUE), currently assigned rxode2 model variables (FALSE).","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the rxModels information — rxModels_","text":"internal rxModels information environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the normalized model — rxNorm","title":"Get the normalized model — rxNorm","text":"get syntax preferred model processing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the normalized model — rxNorm","text":"","code":"rxNorm(obj, condition = NULL, removeInis, removeJac, removeSens)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the normalized model — rxNorm","text":"obj rxode2 family objects condition Character string logical condition use subsetting normalized model. missing, condition set via rxCondition, return whole code conditional settings intact. condition set rxCondition, use condition. removeInis boolean indicating parameter initialization removed model removeJac boolean indicating Jacobians removed. removeSens boolean indicating sensitivities removed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the normalized model — rxNorm","text":"Normalized Normal syntax (comments)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the normalized model — rxNorm","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":null,"dir":"Reference","previous_headings":"","what":"Optimize rxode2 for computer evaluation — rxOptExpr","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"optimizes rxode2 code computer evaluation calculating redundant expressions .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"","code":"rxOptExpr(x, msg = \"model\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"x rxode2 model can accessed rxNorm msg name type object rxode2 optimizing message optimizing. example \"model\" produce following message optimizing model: finding duplicate expressions model...","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"Optimized rxode2 model text. order type lhs state variables maintained evaluation sped . parameters names maintained, order may modified.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":null,"dir":"Reference","previous_headings":"","what":"Parameters specified by the model — rxParams","title":"Parameters specified by the model — rxParams","text":"returns model's parameters required solve ODE system, can used pipe parameters rxode2 solve","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parameters specified by the model — rxParams","text":"","code":"rxParams(obj, ...) # S3 method for rxode2 rxParams( obj, constants = TRUE, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) # S3 method for rxSolve rxParams( obj, constants = TRUE, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) # S3 method for rxEt rxParams( obj, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) rxParam(obj, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parameters specified by the model — rxParams","text":"obj rxode2 family objects ... arguments including scaling factors compartment. includes S# = numeric scale compartment # dividing compartment amount scale factor, like NONMEM. constants boolean indicting constants included list parameters. Currently rxode2 parses constants variables case wish change without recompiling rxode2 model. params numeric named vector values every parameter ODE system; names must correspond parameter identifiers used ODE specification; inits vector initial values state variables (e.g., amounts compartment), order vector must state variables (e.g., PK/PD compartments); iCov data frame individual non-time varying covariates combine events dataset merge. keep Columns keep either input dataset iCov dataset. iCov dataset, column kept per line. input dataset, records added data LOCF (Last Observation Carried forward) imputation performed. thetaMat Named theta matrix. omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. nSub Number subject variabilities (ETAs) simulated every realization parameters. nStud Number virtual studies characterize uncertainty estimated parameters.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parameters specified by the model — rxParams","text":"extracting parameters rxode2 model, character vector listing parameters model.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Parameters specified by the model — rxParams","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Error function for inclusion in rxode2 — rxParseErr","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"Prepare Error function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"","code":"rxParseErr( x, baseTheta, ret = \"rx_r_\", init = NULL, addProp = c(\"combined2\", \"combined1\") )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"x error function baseTheta Base theta start numbering add(.) prop(.) . ret Internal return type. changed user... init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"rxode2 transformed text","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse PK function for inclusion in rxode2 — rxParsePk","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"Parse PK function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"","code":"rxParsePk(x, init = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"x PK function init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"rxode2 transformed text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Pred function for inclusion in rxode2 — rxParsePred","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"Prepare Pred function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"","code":"rxParsePred(x, init = NULL, err = NULL, addProp = c(\"combined2\", \"combined1\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"x pred function init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"rxode2 transformed text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a package from compiled rxode2 models — rxPkg","title":"Creates a package from compiled rxode2 models — rxPkg","text":"Creates package compiled rxode2 models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a package from compiled rxode2 models — rxPkg","text":"","code":"rxPkg( ..., package, wd = getwd(), action = c(\"install\", \"build\", \"binary\", \"create\"), license = c(\"gpl3\", \"lgpl\", \"mit\", \"agpl3\"), name = \"Firstname Lastname\", fields = list() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a package from compiled rxode2 models — rxPkg","text":"... Models build package package String package name create wd character string working directory create subdirectory according modName. specified, subdirectory named “modName.d” created populated C file, dynamic loading library, plus various working files. missing, files created (removed) temporary directory, rxode2 DLL model created current directory named rx_????_platform, example rx_129f8f97fb94a87ca49ca8dafe691e1e_i386.dll action Type action take package created license type license package. name Full name author fields named list fields add DESCRIPTION, potentially overriding default values. See use_description() can set personalized defaults using package options.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a package from compiled rxode2 models — rxPkg","text":"function returns nothing used side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates a package from compiled rxode2 models — rxPkg","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate a from a Poisson process — rxPp","title":"Simulate a from a Poisson process — rxPp","text":"Simulate Poisson process","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate a from a Poisson process — rxPp","text":"","code":"rxPp( n, lambda, gamma = 1, prob = NULL, t0 = 0, tmax = Inf, randomOrder = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate a from a Poisson process — rxPp","text":"n Number time points simulate Poisson process lambda Rate Poisson process gamma Asymmetry rate Poisson process. gamma=1.0, simulates homogenous Poisson process. gamma<1.0, Poisson process events early, gamma > 1.0, Poisson process events late process. gamma non-zero, tmax infinite indicate end Poisson process simulated. pharamcometric cases, end study. Internally uses rate : l(t) = lambdagamma(t/tmax)^(gamma-1) prob specified, probability function one argument, time, gives probability Poisson time t accepted rejection time. t0 starting time Poisson process tmax maximum time Poisson process randomOrder TRUE randomize order Poisson events. default (FALSE) returns Poisson process order events occurred.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate a from a Poisson process — rxPp","text":"returns vector Poisson process times; dropout >= tmax, rest times = tmax indicate dropout equal tmax.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate a from a Poisson process — rxPp","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate a from a Poisson process — rxPp","text":"","code":"## Sample homogenous Poisson process of rate 1/10 rxPp(10, 1 / 10) #> [1] 14.16159 22.43681 41.13405 48.71743 51.37508 54.60656 75.32184 84.62128 #> [9] 85.80475 96.63193 ## Sample inhomogenous Poisson rate of 1/10 rxPp(10, 1 / 10, gamma = 2, tmax = 100) #> [1] 37.13008 37.33395 38.19765 41.94718 50.45308 51.16211 65.45638 75.56937 #> [9] 76.00046 83.59277 ## Typically the Poisson process times are in a sequential order, ## using randomOrder gives the Poisson process in random order rxPp(10, 1 / 10, gamma = 2, tmax = 10, randomOrder = TRUE) #> [1] 10.000000 10.000000 10.000000 10.000000 6.028535 10.000000 10.000000 #> [8] 10.000000 10.000000 10.000000 ## This uses an arbitrary function to sample a non-homogenous Poisson process rxPp(10, 1 / 10, prob = function(x) { 1/(1+abs(x)) }) #> [1] 14.74011 38.01194 53.91062 235.31848 381.74524 397.80743 504.64689 #> [8] 721.10404 756.19022 889.86201"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":null,"dir":"Reference","previous_headings":"","what":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"determined internal preferred condition name list .errIdenticalDists","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"","code":"rxPreferredDistributionName(dist)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"dist input distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"Preferred distribution term","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"","code":"rxPreferredDistributionName(\"dt\") #> [1] \"t\" rxPreferredDistributionName(\"add\") #> [1] \"add\" # can be vectorized rxPreferredDistributionName(c(\"add\",\"dt\")) #> add dt #> \"add\" \"t\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":null,"dir":"Reference","previous_headings":"","what":"rxode2 progress bar functions — rxProgress","title":"rxode2 progress bar functions — rxProgress","text":"rxProgress sets progress bar","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxode2 progress bar functions — rxProgress","text":"","code":"rxProgress(num, core = 0L) rxTick() rxProgressStop(clear = TRUE) rxProgressAbort(error = \"Aborted calculation\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxode2 progress bar functions — rxProgress","text":"num Tot number operations track core Number cores show. 1, show number cores clear Boolean telling clear progress bar completion (displayed). default TRUE error rxProgressAbort error displayed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxode2 progress bar functions — rxProgress","text":"return NULL invisibly.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"rxode2 progress bar functions — rxProgress","text":"rxTick progress bar tick rxProgressStop stop progress bar rxProgressAbort shows abort rxProgressStop called.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxode2 progress bar functions — rxProgress","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"rxode2 progress bar functions — rxProgress","text":"","code":"f <- function() { on.exit({ rxProgressAbort() }) rxProgress(100) for (i in 1:100) { rxTick() Sys.sleep(1 / 100) } rxProgressStop() } # \\donttest{ f() # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":null,"dir":"Reference","previous_headings":"","what":"Prune branches (ie if/else) from rxode2 — rxPrune","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"prunes branches (ie /else) rxode2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"","code":"rxPrune(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"x rxode2 model can accessed rxNorm","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"Pruned rxode2 model text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":null,"dir":"Reference","previous_headings":"","what":"Reload rxode2 DLL — rxReload","title":"Reload rxode2 DLL — rxReload","text":"Can useful debugging","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reload rxode2 DLL — rxReload","text":"","code":"rxReload()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reload rxode2 DLL — rxReload","text":"boolean object reloaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Reload rxode2 DLL — rxReload","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxRemoveControl options for UI object — rxRemoveControl","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"rxRemoveControl options UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"","code":"rxRemoveControl(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"ui rxode2 ui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":null,"dir":"Reference","previous_headings":"","what":"Rename items inside of a rxode2 ui model — rxRename","title":"Rename items inside of a rxode2 ui model — rxRename","text":"rxRename() changes names individual variables, lhs, ode states using new_name = old_name syntax","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rename items inside of a rxode2 ui model — rxRename","text":"","code":"rxRename(.data, ..., envir = parent.frame()) .rxRename(.data, ..., envir = parent.frame()) rename.rxUi(.data, ...) rename.function(.data, ...) # S3 method for rxUi rxRename(.data, ...) # S3 method for `function` rxRename(.data, ...) # S3 method for default rxRename(.data, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rename items inside of a rxode2 ui model — rxRename","text":".data rxode2 ui function, named data consistent dplyr::rename() ... rename items envir Environment evaluation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rename items inside of a rxode2 ui model — rxRename","text":"New model items renamed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Rename items inside of a rxode2 ui model — rxRename","text":"similar dplyr's rename() function. dplyr loaded, s3 methods work ui objects. Note .rxRename() internal function called renaming likely need call unless writing extension function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Rename items inside of a rxode2 ui model — rxRename","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rename items inside of a rxode2 ui model — rxRename","text":"","code":"ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- exp(3.45) # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } ocmt %>% rxRename(cpParent=cp) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 1.568312 2.718282 31.500392 0.700000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cpParent = center/v #> cpParent ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":null,"dir":"Reference","previous_headings":"","what":"Rep R0 for foce — rxRepR0_","title":"Rep R0 for foce — rxRepR0_","text":"Rep R0 foce","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rep R0 for foce — rxRepR0_","text":"","code":"rxRepR0_(neta)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rep R0 for foce — rxRepR0_","text":"neta ETA substitute","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rep R0 for foce — rxRepR0_","text":"Returns string R code substitute rx_r expression symengine environment .s","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":null,"dir":"Reference","previous_headings":"","what":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"list description rxode2 supported reserved keywords","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"","code":"rxReservedKeywords"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"data frame 3 columns 31 rows Reserved Name Reserved Keyword Name Meaning Reserved Keyword Meaning Alias Keyword Alias","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":null,"dir":"Reference","previous_headings":"","what":"A description of Rode2 supported residual errors — rxResidualError","title":"A description of Rode2 supported residual errors — rxResidualError","text":"description Rode2 supported residual errors","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A description of Rode2 supported residual errors — rxResidualError","text":"","code":"rxResidualError"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A description of Rode2 supported residual errors — rxResidualError","text":"data frame 6 columns 181 rows Error model description type residual error Functional Form additive proportional functional form used Transformation type transformation done DV prediction code Example code residual error type addProp type add+prop residual error default equivalent lhs left handed side specification represents, either response variable, compartment specification","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":null,"dir":"Reference","previous_headings":"","what":"Load a model into a symengine environment — rxS","title":"Load a model into a symengine environment — rxS","text":"Load model symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load a model into a symengine environment — rxS","text":"","code":"rxS(x, doConst = TRUE, promoteLinSens = FALSE, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load a model into a symengine environment — rxS","text":"x rxode2 object doConst Load constants environment well. promoteLinSens Promote solved linear compartment systems sensitivity-based solutions. envir default NULL; Environment put symengine variables .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load a model into a symengine environment — rxS","text":"rxode2/symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Load a model into a symengine environment — rxS","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxSetControl options for UI object — rxSetControl","title":"rxSetControl options for UI object — rxSetControl","text":"rxSetControl options UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxSetControl options for UI object — rxSetControl","text":"","code":"rxSetControl(ui, control)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxSetControl options for UI object — rxSetControl","text":"ui rxode2 ui object control Default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxSetControl options for UI object — rxSetControl","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxSetControl options for UI object — rxSetControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign covariates for piping — rxSetCovariateNamesForPiping","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Assign covariates piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"","code":"rxSetCovariateNamesForPiping(covariates = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"covariates NULL (covariates), list covariates. nlmixr uses function set covariates pipe nlmixr fit.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"","code":"# First set the name of known covariates # Note this is case sensitive rxSetCovariateNamesForPiping(c(\"WT\",\"HT\", \"TC\")) one.compartment <- function() { ini({ tka <- 0.45 ; label(\"Log Ka\") tcl <- 1 ; label(\"Log Cl\") tv <- 3.45 ; label(\"Log V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.err <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d / dt(depot) <- -ka * depot d/dt(depot) <- -ka * depot d / dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.err) }) } # now TC is detected as a covariate instead of a population parameter one.compartment %>% model({ka <- exp(tka + eta.ka + TC * cov_C)}) #> #> #> ℹ add covariate `TC` (known covariate) #> ℹ add population parameter `cov_C` and set estimate to 1 #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.err cov_C #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tka eta.ka id TC*cov_C #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Log Ka\") #> tcl <- 1 #> label(\"Log Cl\") #> tv <- 3.45 #> label(\"Log V\") #> add.err <- c(0, 0.7) #> cov_C <- 1 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka + TC * cov_C) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.err) #> }) #> } # You can turn it off by simply adding it back rxSetCovariateNamesForPiping() one.compartment %>% model({ka <- exp(tka + eta.ka + TC * cov_C)}) #> #> #> ℹ add population parameter `TC` and set estimate to 1 #> ℹ add population parameter `cov_C` and set estimate to 1 #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.err TC cov_C #> 0.45 1.00 3.45 0.70 1.00 1.00 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Log Ka\") #> tcl <- 1 #> label(\"Log Cl\") #> tv <- 3.45 #> label(\"Log V\") #> add.err <- c(0, 0.7) #> TC <- 1 #> cov_C <- 1 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka + TC * cov_C) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.err) #> }) #> } # The covariates you set with `rxSetCovariateNamesForPiping()` # are turned off every time you solve (or fit in nlmixr)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Set variables model piping automatic covarite selection","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"","code":"rxSetPipingAuto( thetamodelVars = rex::rex(or(\"tv\", \"t\", \"pop\", \"POP\", \"Pop\", \"TV\", \"T\", \"cov\", \"err\", \"eff\")), covariateExceptions = rex::rex(start, or(\"wt\", \"sex\", \"crcl\", \"kout\"), end), etaParts = c(\"eta\", \"ETA\", \"Eta\", \"ppv\", \"PPV\", \"Ppv\", \"iiv\", \"Iiv\", \"bsv\", \"Bsv\", \"BSV\", \"bpv\", \"Bpv\", \"BPV\", \"psv\", \"PSV\", \"Psv\") )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"thetamodelVars prefixes theta model variables regular expression covariateExceptions regular expression covariates always covariates etaParts list eta prefixes/post-fixes identify variable subject variability","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"called startup set defaults, though can change wish piping can work differently individual setup","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":null,"dir":"Reference","previous_headings":"","what":"Defunct setting of product — rxSetProd","title":"Defunct setting of product — rxSetProd","text":"Defunct setting product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Defunct setting of product — rxSetProd","text":"","code":"rxSetProd(type = c(\"long double\", \"double\", \"logify\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Defunct setting of product — rxSetProd","text":"type used type product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Defunct setting of product — rxSetProd","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":null,"dir":"Reference","previous_headings":"","what":"Set timing for progress bar — rxSetProgressBar","title":"Set timing for progress bar — rxSetProgressBar","text":"Set timing progress bar","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set timing for progress bar — rxSetProgressBar","text":"","code":"rxSetProgressBar(seconds = 1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set timing for progress bar — rxSetProgressBar","text":"seconds sets number seconds need elapse drawing next segment progress bar. zero turns progress bar.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set timing for progress bar — rxSetProgressBar","text":"nothing, used side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set timing for progress bar — rxSetProgressBar","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"Silence rxode2's C/C++ messages","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"","code":"rxSetSilentErr(silent)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"silent can 0L \"noisy\" 1L \"silent\"","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"TRUE; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":null,"dir":"Reference","previous_headings":"","what":"Defunct setting of sum — rxSetSum","title":"Defunct setting of sum — rxSetSum","text":"Defunct setting sum","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Defunct setting of sum — rxSetSum","text":"","code":"rxSetSum(type = c(\"pairwise\", \"fsum\", \"kahan\", \"neumaier\", \"c\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Defunct setting of sum — rxSetSum","text":"type used type product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Defunct setting of sum — rxSetSum","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Setup the initial conditions. — rxSetupIni","title":"Setup the initial conditions. — rxSetupIni","text":"Setup initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Setup the initial conditions. — rxSetupIni","text":"","code":"rxSetupIni(obj, inits = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Setup the initial conditions. — rxSetupIni","text":"obj rxode2 object inits numeric vector initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Setup the initial conditions. — rxSetupIni","text":"initial conditions setup","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Setup the initial conditions. — rxSetupIni","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":null,"dir":"Reference","previous_headings":"","what":"Setup the initial conditions. — rxSetupScale","title":"Setup the initial conditions. — rxSetupScale","text":"Setup initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Setup the initial conditions. — rxSetupScale","text":"","code":"rxSetupScale(obj, scale = NULL, extraArgs = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Setup the initial conditions. — rxSetupScale","text":"obj rxode2 object scale numeric vector scales extraArgs list extra args parse initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Setup the initial conditions. — rxSetupScale","text":"setup scale changing compartment values","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Setup the initial conditions. — rxSetupScale","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":null,"dir":"Reference","previous_headings":"","what":"Use Shiny to help develop an rxode2 model — rxShiny","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Use Shiny help develop rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"","code":"rxShiny( object, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() ) # S3 method for rxSolve rxShiny( object, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() ) # S3 method for default rxShiny( object = NULL, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"object rxode2 family objects. supplied 2-compartment indirect effect model used. supplied, use model associated rxode2 object model exploration. params Initial parameters model events Event information (currently ignored) inits Initial estimates model ... arguments passed rxShiny. Currently anything. data data like plot. data time variable well compartment calculated variable matches rxode2 model, data added plot specific compartment calculated variable.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Nothing; Starts shiny server","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Zufar Mulyukov Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"Simulate Parameters Theta/Omega specification","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"","code":"rxSimThetaOmega( params = NULL, omega = NULL, omegaDf = NULL, omegaLower = as.numeric(c(R_NegInf)), omegaUpper = as.numeric(c(R_PosInf)), omegaIsChol = FALSE, omegaSeparation = \"auto\", omegaXform = 1L, nSub = 1L, thetaMat = NULL, thetaLower = as.numeric(c(R_NegInf)), thetaUpper = as.numeric(c(R_PosInf)), thetaDf = NULL, thetaIsChol = FALSE, nStud = 1L, sigma = NULL, sigmaLower = as.numeric(c(R_NegInf)), sigmaUpper = as.numeric(c(R_PosInf)), sigmaDf = NULL, sigmaIsChol = FALSE, sigmaSeparation = \"auto\", sigmaXform = 1L, nCoresRV = 1L, nObs = 1L, dfSub = 0, dfObs = 0, simSubjects = TRUE, simVariability = as.logical(c(NA_LOGICAL)) )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"params Named Vector rxode2 model parameters omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. omegaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. omegaLower Lower bounds simulated ETAs (default -Inf) omegaUpper Upper bounds simulated ETAs (default Inf) omegaIsChol Indicates omega supplied Cholesky decomposed matrix instead traditional symmetric matrix. omegaSeparation Omega separation strategy Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. omegaXform taking omega values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nSub Number subject variabilities (ETAs) simulated every realization parameters. thetaMat Named theta matrix. thetaLower Lower bounds simulated population parameter variability (default -Inf) thetaUpper Upper bounds simulated population unexplained variability (default Inf) thetaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. thetaIsChol Indicates theta supplied Cholesky decomposed matrix instead traditional symmetric matrix. nStud Number virtual studies characterize uncertainty estimated parameters. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. sigmaLower Lower bounds simulated unexplained variability (default -Inf) sigmaUpper Upper bounds simulated unexplained variability (default Inf) sigmaDf Degrees freedom sigma t-distribution. default equivalent Inf, normal distribution. sigmaIsChol Boolean indicating sigma Cholesky decomposition instead symmetric covariance sigmaSeparation separation strategy sigma; Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. sigmaXform taking sigma values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nCoresRV Number cores used simulation sigma variables. default 1. reproduce results need run platform number cores. reason set one, regardless number cores used threaded ODE solving. nObs Number observations simulate (sigma matrix) dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. simSubjects boolean indicated rxode2 simulate subjects studies (TRUE, default) studies (FALSE) simVariability determines variability simulated. NA (default) determined solver.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"data frame simulated subjects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Options, Solving & Simulation of an ODE/solved system — rxSolve","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"uses rxode2 family objects, file, model specification solve ODE system. many options solved rxode2 model, first required object, events -times optional params inits.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"","code":"rxSolve( object, params = NULL, events = NULL, inits = NULL, scale = NULL, method = c(\"liblsoda\", \"lsoda\", \"dop853\", \"indLin\"), sigdig = NULL, atol = 1e-08, rtol = 1e-06, maxsteps = 70000L, hmin = 0, hmax = NA_real_, hmaxSd = 0, hini = 0, maxordn = 12L, maxords = 5L, ..., cores, covsInterpolation = c(\"locf\", \"linear\", \"nocb\", \"midpoint\"), addCov = TRUE, sigma = NULL, sigmaDf = NULL, sigmaLower = -Inf, sigmaUpper = Inf, nCoresRV = 1L, sigmaIsChol = FALSE, sigmaSeparation = c(\"auto\", \"lkj\", \"separation\"), sigmaXform = c(\"identity\", \"variance\", \"log\", \"nlmixrSqrt\", \"nlmixrLog\", \"nlmixrIdentity\"), nDisplayProgress = 10000L, amountUnits = NA_character_, timeUnits = \"hours\", theta = NULL, thetaLower = -Inf, thetaUpper = Inf, eta = NULL, addDosing = FALSE, stateTrim = Inf, updateObject = FALSE, omega = NULL, omegaDf = NULL, omegaIsChol = FALSE, omegaSeparation = c(\"auto\", \"lkj\", \"separation\"), omegaXform = c(\"variance\", \"identity\", \"log\", \"nlmixrSqrt\", \"nlmixrLog\", \"nlmixrIdentity\"), omegaLower = -Inf, omegaUpper = Inf, nSub = 1L, thetaMat = NULL, thetaDf = NULL, thetaIsChol = FALSE, nStud = 1L, dfSub = 0, dfObs = 0, returnType = c(\"rxSolve\", \"matrix\", \"data.frame\", \"data.frame.TBS\", \"data.table\", \"tbl\", \"tibble\"), seed = NULL, nsim = NULL, minSS = 10L, maxSS = 1000L, infSSstep = 12, strictSS = TRUE, istateReset = TRUE, subsetNonmem = TRUE, maxAtolRtolFactor = 0.1, from = NULL, to = NULL, by = NULL, length.out = NULL, iCov = NULL, keep = NULL, indLinPhiTol = 1e-07, indLinPhiM = 0L, indLinMatExpType = c(\"expokit\", \"Al-Mohy\", \"arma\"), indLinMatExpOrder = 6L, drop = NULL, idFactor = TRUE, mxhnil = 0, hmxi = 0, warnIdSort = TRUE, warnDrop = TRUE, ssAtol = 1e-08, ssRtol = 1e-06, safeZero = TRUE, sumType = c(\"pairwise\", \"fsum\", \"kahan\", \"neumaier\", \"c\"), prodType = c(\"long double\", \"double\", \"logify\"), sensType = c(\"advan\", \"autodiff\", \"forward\", \"central\"), linDiff = c(tlag = 1.5e-05, f = 1.5e-05, rate = 1.5e-05, dur = 1.5e-05, tlag2 = 1.5e-05, f2 = 1.5e-05, rate2 = 1.5e-05, dur2 = 1.5e-05), linDiffCentral = c(tlag = TRUE, f = TRUE, rate = TRUE, dur = TRUE, tlag2 = TRUE, f2 = TRUE, rate2 = TRUE, dur2 = TRUE), resample = NULL, resampleID = TRUE, maxwhile = 1e+05, atolSens = 1e-08, rtolSens = 1e-06, ssAtolSens = 1e-08, ssRtolSens = 1e-06, simVariability = NA, nLlikAlloc = NULL, useStdPow = FALSE, naTimeHandle = c(\"ignore\", \"warn\", \"error\"), addlKeepsCov = FALSE, addlDropSs = TRUE, ssAtDoseTime = TRUE, ss2cancelAllPending = FALSE, envir = parent.frame() ) # S3 method for `function` rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxUi rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxode2tos rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for nlmixr2FitData rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for nlmixr2FitCore rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for default rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxSolve update(object, ...) # S3 method for rxode2 predict(object, ...) # S3 method for `function` predict(object, ...) # S3 method for rxUi predict(object, ...) # S3 method for rxSolve predict(object, ...) # S3 method for rxEt predict(object, ...) # S3 method for rxParams predict(object, ...) # S3 method for rxode2 simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxSolve simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxParams simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxSolve solve(a, b, ...) # S3 method for rxUi solve(a, b, ...) # S3 method for `function` solve(a, b, ...) # S3 method for rxode2 solve(a, b, ...) # S3 method for rxParams solve(a, b, ...) # S3 method for rxEt solve(a, b, ...) rxControl( ..., params = NULL, events = NULL, inits = NULL, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"object either rxode2 family objects, file-name rxode2 model specification, string rxode2 model specification. params numeric named vector values every parameter ODE system; names must correspond parameter identifiers used ODE specification; events eventTable object describing input (e.g., doses) dynamic system observation sampling time points (see eventTable()); inits vector initial values state variables (e.g., amounts compartment), order vector must state variables (e.g., PK/PD compartments); scale numeric named vector scaling ode parameters system. names must correspond parameter identifiers ODE specification. ODE variables divided scaling factor. example scale=c(center=2) divide center ODE variable 2. method method solving ODEs. Currently supports: \"liblsoda\" thread safe lsoda. supports parallel thread-based solving, ignores user Jacobian specification. \"lsoda\" -- LSODA solver. support parallel thread-based solving, allows user Jacobian specification. \"dop853\" -- DOP853 solver. support parallel thread-based solving user Jacobian specification \"indLin\" -- Solving inductive linearization. rxode2 dll must setup specially use solving routine. sigdig Specifies \"significant digits\" ode solving requests. specified controls relative absolute tolerances ODE solvers. default tolerance 0.5*10^(-sigdig-2) regular ODEs. sensitivity equations default 0.5*10\\^(-sigdig-1.5) (sensitivity changes applicable liblsoda). also controls atol/rtol steady state solutions. ssAtol/ssRtol 0.5*10\\^(-sigdig) sensitivities 0.5*10\\^(-sigdig+0.625). default unspecified (NULL) uses standard atol/rtol. atol numeric absolute tolerance (1e-8 default) used ODE solver determine good solution achieved; also used solved linear model check prior doses add anything solution. rtol numeric relative tolerance (1e-6 default) used ODE solver determine good solution achieved. also used solved linear model check prior doses add anything solution. maxsteps maximum number (internally defined) steps allowed one call solver. (5000 default) hmin minimum absolute step size allowed. default value 0. hmax maximum absolute step size allowed. hmax=NA (default), uses average difference + hmaxSd*sd times sampling events. hmaxSd user specified parameter defaults zero. hmax=NULL rxode2 uses maximum difference times sampling events. value 0 equivalent infinite maximum absolute step size. hmaxSd number standard deviations time difference add hmax. default 0 hini step size attempted first step. default value determined solver (hini = 0) maxordn maximum order allowed nonstiff (Adams) method. default 12. can 1 12. maxords maximum order allowed stiff (BDF) method. default value 5. can 1 5. ... arguments including scaling factors compartment. includes S# = numeric scale compartment # dividing compartment amount scale factor, like NONMEM. cores Number cores used parallel ODE solving. equivalent calling setRxThreads() covsInterpolation specifies interpolation method time-varying covariates. solving ODEs often samples times outside sampling time specified events. happens, time varying covariates interpolated. Currently can : \"linear\" interpolation, interpolates covariate solving line observed covariates extrapolating new covariate value. \"constant\" -- Last observation carried forward (default). \"NOCB\" -- Next Observation Carried Backward. method NONMEM uses. \"midpoint\" Last observation carried forward midpoint; Next observation carried backward midpoint. addCov boolean indicating covariates added output matrix data frame. default disabled. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. sigmaDf Degrees freedom sigma t-distribution. default equivalent Inf, normal distribution. sigmaLower Lower bounds simulated unexplained variability (default -Inf) sigmaUpper Upper bounds simulated unexplained variability (default Inf) nCoresRV Number cores used simulation sigma variables. default 1. reproduce results need run platform number cores. reason set one, regardless number cores used threaded ODE solving. sigmaIsChol Boolean indicating sigma Cholesky decomposition instead symmetric covariance sigmaSeparation separation strategy sigma; Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. sigmaXform taking sigma values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nDisplayProgress integer indicating minimum number c-based solves progress bar shown. default 10,000. amountUnits supplies dose units data frame supplied instead event table. importing data rxode2 event table. timeUnits supplies time units data frame supplied instead event table. importing data rxode2 event table. theta vector parameters named THETA\\[#\\] added parameters thetaLower Lower bounds simulated population parameter variability (default -Inf) thetaUpper Upper bounds simulated population unexplained variability (default Inf) eta vector parameters named ETA\\[#\\] added parameters addDosing Boolean indicating solve add rxode2 EVID related columns. also include dosing information estimates doses. default, rxode2 includes estimates observations. (default FALSE). addDosing NULL, include EVID=0 solve exclude model-times EVID=2. addDosing NA classic rxode2 EVID events returned. addDosing TRUE add event information NONMEM-style format; subsetNonmem=FALSE rxode2 also include extra event types (EVID) ending infusion modeled times: EVID=-1 modeled rate infusions turned (matches rate=-1) EVID=-2 modeled duration infusions turned (matches rate=-2) EVID=-10 specified rate infusions turned (matches rate>0) EVID=-20 specified dur infusions turned (matches dur>0) EVID=101,102,103,... Modeled time 101 first model time, 102 second etc. stateTrim amounts/concentrations one states value, trim value. default Inf. Also trims -stateTrim large negative amounts/concentrations. want trim range say c(0, 2000000) may specify 2 values lower upper range make sure state values reasonable range. updateObject internally used flag update rxode2 solved object (supplying rxode2 solved object) well returning new object. probably modify FALSE default unless willing unexpected results. omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. omegaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. omegaIsChol Indicates omega supplied Cholesky decomposed matrix instead traditional symmetric matrix. omegaSeparation Omega separation strategy Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. omegaXform taking omega values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. omegaLower Lower bounds simulated ETAs (default -Inf) omegaUpper Upper bounds simulated ETAs (default Inf) nSub Number subject variabilities (ETAs) simulated every realization parameters. thetaMat Named theta matrix. thetaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. thetaIsChol Indicates theta supplied Cholesky decomposed matrix instead traditional symmetric matrix. nStud Number virtual studies characterize uncertainty estimated parameters. dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. returnType tells type object returned. currently supported types : \"rxSolve\" (default) return reactive data frame can change easily change different pieces solve update data frame. currently standard solving method rxode2, used rxSolve(object, ...), solve(object,...), \"data.frame\" -- returns plain, non-reactive data frame; Currently slightly faster returnType=\"matrix\" \"matrix\" -- returns plain matrix column names attached solved object. used object$run well object$solve \"data.table\" -- returns data.table; data.table created reference (ie setDt()), fast. \"tbl\" \"tibble\" returns tibble format. seed object specifying random number generator initialized nsim represents number simulations. rxode2, supply single subject event tables (created [eventTable()]) minSS Minimum number iterations steady-state dose maxSS Maximum number iterations steady-state dose infSSstep Step size determining constant infusion reached steady state. default large value, 12. strictSS Boolean indicating strict steady-state required. strict steady-state (TRUE) required least minSS doses administered total number steady states doses continue maxSS reached, atol rtol every compartment reached. However, ODE solving problems occur minSS reached whole subject considered invalid solve. strictSS FALSE long minSS reached last good solve ODE solving problems occur considered steady state, even though either atol, rtol maxSS achieved. istateReset TRUE, reset ISTATE variable 1 lsoda liblsoda doses, like deSolve; FALSE, reset ISTATE variable doses. subsetNonmem subset NONMEM compatible EVIDs . default TRUE. maxAtolRtolFactor maximum atol/rtol FOCEi routines may adjust . default 0.1 observations event table, start observations value. default zero. observations event table, end observations value. default 24 + maximum dose time. observations event table, amount increment observations . length.number observations create observations event table. default 200. iCov data frame individual non-time varying covariates combine events dataset merge. keep Columns keep either input dataset iCov dataset. iCov dataset, column kept per line. input dataset, records added data LOCF (Last Observation Carried forward) imputation performed. indLinPhiTol requested accuracy tolerance exponential matrix. indLinPhiM maximum size Krylov basis indLinMatExpType matrix exponential type use rxode2. Currently following supported: Al-Mohy Uses exponential matrix method Al-Mohy Higham (2009) arma Use exponential matrix RcppArmadillo expokit Use exponential matrix Roger B. Sidje (1998) indLinMatExpOrder integer, order approximation used, Al-Mohy expokit values. best value depends machine precision (slightly matrix). use 6 default. drop Columns drop output idFactor boolean indicates original ID values maintained. changes default sequentially ordered ID factor original ID values original dataset. default enabled. mxhnil maximum number messages printed (per problem) warning T + H = T step (H = step size). must positive result non-default value. default value 0 (infinite). hmxi inverse maximum absolute value H used. hmxi = 0.0 allowed corresponds infinite hmax1 (default). hminandhmximay changed time, take effect next change ofHis considered. option considered withmethod=\"liblsoda\"`. warnIdSort Warn ID present rxode2 assumes order parameters/iCov order parameters input dataset. warnDrop Warn column(s) supposed dropped, present. ssAtol Steady state atol convergence factor. Can vector based state. ssRtol Steady state rtol convergence factor. Can vector based state. safeZero Use safe zero divide log routines. default turned may turn wish. sumType Sum type use sum() rxode2 code blocks. pairwise uses pairwise sum (fast, default) fsum uses PreciseSum package's fsum function (accurate) kahan uses Kahan correction neumaier uses Neumaier correction c uses correction: default/native summing prodType Product use prod() rxode2 blocks long double converts long double, performs multiplication converts back. double uses standard double scale multiplication. sensType Sensitivity type linCmt() model: advan Use direct advan solutions autodiff Use autodiff advan solutions forward Use forward difference solutions central Use central differences linDiff gives linear difference amount types linear compartment model parameters sensitivities calculated. named components numeric vector : \"lag\" Central compartment lag \"f\" Central compartment bioavailability \"rate\" Central compartment modeled rate \"dur\" Central compartment modeled duration \"lag2\" Depot compartment lag \"f2\" Depot compartment bioavailability \"rate2\" Depot compartment modeled rate \"dur2\" Depot compartment modeled duration linDiffCentral gives parameters use central differences linear compartment model parameters. components linDiff resample character vector model variables resample input dataset; sampling done replacement. NULL FALSE resampling done. TRUE resampling done covariates input dataset resampleID boolean representing resampling done individual basis TRUE (ie. whole patient selected) covariate resampled independent subject identifier FALSE. resampleID=TRUE correlations parameters retained, resampleID=FALSE ignores patient covariate correaltions. Hence default resampleID=TRUE. maxwhile represents maximum times loop evaluated exiting. default 100000 atolSens Sensitivity atol, can different atol liblsoda. allows less accurate solve gradients (desired) rtolSens Sensitivity rtol, can different rtol liblsoda. allows less accurate solve gradients (desired) ssAtolSens Sensitivity absolute tolerance (atol) calculating steady state achieved sensitivity compartments. ssRtolSens Sensitivity relative tolerance (rtol) calculating steady state achieved sensitivity compartments. simVariability determines variability simulated. NA (default) determined solver. nLlikAlloc number log likelihood endpoints used model. allows independent log likelihood per endpoint focei nlmixr2. likely set, though hurt anything (just may take memory larger allocations). useStdPow uses C's pow exponentiation instead R's R_pow R_pow_di. default FALSE naTimeHandle Determines time handling happens time becomes NA: current options : ignore ignores NA time input passes . warn (default) produce warning end solve, continues solving passing NA time error stop solve parallel solved ODE (otherwise stopping can crash R) addlKeepsCov determines additional dosing items repeats dose (FALSE) keeps covariates record dose (TRUE) addlDropSs steady state doses addl specification steady state flag dropped repeated doses (TRUE) retained (FALSE) ssAtDoseTime Boolean TRUE back calculates steady concentration actual time dose, otherwise FALSE doses shifted ss2cancelAllPending TRUE SS=2 event type cancels pending doses like SS=1. FALSE pending doses canceled SS=2 (infusions started SS=2 occurred canceled, though). envir environment look R user functions (defaults parent environment) using solve(), equivalent object argument. specify object later argument list overwrites parameter. b using solve(), equivalent params argument. specify params named argument, overwrites output","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"“rxSolve” solve object stores solved value special data.frame type determined returnType. default many rows sampled time points many columns system variables (defined ODEs additional assignments rxode2 model code). also stores information call allow dynamic updating solved object. operations object similar data-frame, expand $ [[\"\"]] access operators assignment operators resolve based different parameter values, initial conditions, solver parameters, events (updating time variable). can call eventTable() methods solved object update event table resolve system equations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"rest document focus different ODE solving methods, followed core solving method's options, rxode2 event handling options, rxode2's numerical stability options, rxode2's output options, finally internal rxode2 options compatibility options.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"\"New Scaling Squaring Algorithm Matrix Exponential\", Awad H. Al-Mohy Nicholas J. Higham, August 2009 Roger B. Sidje (1998). EXPOKIT: Software package computing matrix exponentials. ACM - Transactions Mathematical Software 24(1), 130-156. Hindmarsh, . C. ODEPACK, Systematized Collection ODE Solvers. Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pp. 55-64. Petzold, L. R. Automatic Selection Methods Solving Stiff Nonstiff Systems Ordinary Differential Equations. Siam J. Sci. Stat. Comput. 4 (1983), pp. 136-148. Hairer, E., Norsett, S. P., Wanner, G. Solving ordinary differential equations , nonstiff problems. 2nd edition, Springer Series Computational Mathematics, Springer-Verlag (1993).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"Matthew Fidler, Melissa Hallow Wenping Wang","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":null,"dir":"Reference","previous_headings":"","what":"Free the C solving/parsing information. — rxSolveFree","title":"Free the C solving/parsing information. — rxSolveFree","text":"Take ODE C system free .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Free the C solving/parsing information. — rxSolveFree","text":"","code":"rxSolveFree()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Free the C solving/parsing information. — rxSolveFree","text":"logical indicating memory successfully freed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":null,"dir":"Reference","previous_headings":"","what":"See if the memory is installed for a solve — rxSolveSetup","title":"See if the memory is installed for a solve — rxSolveSetup","text":"See memory installed solve","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"See if the memory is installed for a solve — rxSolveSetup","text":"","code":"rxSolveSetup()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"See if the memory is installed for a solve — rxSolveSetup","text":"boolean saying memnory currently free rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"See if the memory is installed for a solve — rxSolveSetup","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":null,"dir":"Reference","previous_headings":"","what":"This function splits a function based on + or - terms — rxSplitPlusQ","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"uses parser disturb terms within functions. example:","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"","code":"rxSplitPlusQ(x, level = 0, mult = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"x Quoted R expression splitting level Internal level parsing mult boolean split based * / expressions instead. default turned .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"character vector split expressions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"aexp(b+c)+dlog(e-f)-g*f return c(\"* exp(b + c)\", \"d * log(e - f)\", \"- g * f\")","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":null,"dir":"Reference","previous_headings":"","what":"State variables — rxState","title":"State variables — rxState","text":"returns model's compartments states.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"State variables — rxState","text":"","code":"rxState(obj = NULL, state = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"State variables — rxState","text":"obj rxode2 family objects state string indicating state compartment like lookup.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"State variables — rxState","text":"state missing, return character vector states. state string, return compartment number named state.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"State variables — rxState","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Recast model in terms of sum/prod — rxSumProdModel","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"Recast model terms sum/prod","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"","code":"rxSumProdModel(model, expand = FALSE, sum = TRUE, prod = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"model rxode2 model expand Boolean indicating expression expanded. sum Use sum(...) prod Use prod(...)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"model string prod(.) sum(.) operations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":null,"dir":"Reference","previous_headings":"","what":"Get list of supported functions — rxSupportedFuns","title":"Get list of supported functions — rxSupportedFuns","text":"Get list supported functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get list of supported functions — rxSupportedFuns","text":"","code":"rxSupportedFuns()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get list of supported functions — rxSupportedFuns","text":"list supported functions rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get list of supported functions — rxSupportedFuns","text":"","code":"rxSupportedFuns() #> [1] \"gammafn\" \"lgammafn\" \"lgamma\" #> [4] \"loggamma\" \"digamma\" \"trigamma\" #> [7] \"tetragamma\" \"pentagamma\" \"cospi\" #> [10] \"sinpi\" \"tanpi\" \"log1p\" #> [13] \"expm1\" \"factorial\" \"lfactorial\" #> [16] \"lgamma1p\" \"log10\" \"log2\" #> [19] \"log1pexp\" \"phi\" \"pnorm\" #> [22] \"normcdf\" \"qnorm\" \"fabs\" #> [25] \"pow\" \"R_pow\" \"R_pow_di\" #> [28] \"Rx_pow_di\" \"Rx_pow\" \"lbeta\" #> [31] \"abs\" \"acos\" \"acosh\" #> [34] \"asin\" \"asinh\" \"atan\" #> [37] \"atan2\" \"atanh\" \"beta\" #> [40] \"cos\" \"cosh\" \"erf\" #> [43] \"erfc\" \"exp\" \"gamma\" #> [46] \"linCmtA\" \"linCmtC\" \"linCmtB\" #> [49] \"log\" \"polygamma\" \"rxTBS\" #> [52] \"rxTBSi\" \"rxTBSd\" \"rxTBSd2\" #> [55] \"sin\" \"sinh\" \"sqrt\" #> [58] \"tan\" \"tanh\" \"gammap\" #> [61] \"floor\" \"round\" \"ceil\" #> [64] \"trunc\" \"bessel_i\" \"bessel_j\" #> [67] \"bessel_k\" \"bessel_y\" \"logspace_add\" #> [70] \"logspace_sub\" \"fmax2\" \"fmin2\" #> [73] \"sign\" \"fsign\" \"fprec\" #> [76] \"fround\" \"ftrunc\" \"transit\" #> [79] \"gammaq\" \"gammapDer\" \"gammapInv\" #> [82] \"gammapInva\" \"gammaqInv\" \"gammaqInva\" #> [85] \"lowergamma\" \"uppergamma\" \"max\" #> [88] \"min\" \"logit\" \"expit\" #> [91] \"probit\" \"probitInv\" \"tlast\" #> [94] \"tfirst\" \"lag\" \"lead\" #> [97] \"dose\" \"podo\" \"dabs\" #> [100] \"dabs2\" \"abs1\" \"dabs1\" #> [103] \"erfinv\" \"abs0\" \"dosenum\" #> [106] \"first\" \"last\" \"diff\" #> [109] \"is.nan\" \"is.na\" \"is.finite\" #> [112] \"is.infinite\" \"llikPois\" \"llikPoisDlambda\" #> [115] \"llikBinom\" \"llikBinomDprob\" \"llikNbinom\" #> [118] \"llikNbinomDprob\" \"llikNbinomMu\" \"llikNbinomMuDmu\" #> [121] \"llikBeta\" \"llikBetaDshape1\" \"llikBetaDshape2\" #> [124] \"llikT\" \"llikTDdf\" \"llikTDmean\" #> [127] \"llikTDsd\" \"llikChisq\" \"llikChisqDdf\" #> [130] \"llikExp\" \"llikExpDrate\" \"llikF\" #> [133] \"llikFDdf1\" \"llikFDdf2\" \"llikGeom\" #> [136] \"llikGeomDprob\" \"llikUnif\" \"llikUnifDalpha\" #> [139] \"llikUnifDbeta\" \"llikWeibull\" \"llikWeibullDshape\" #> [142] \"llikWeibullDscale\" \"llikGamma\" \"llikGammaDshape\" #> [145] \"llikGammaDrate\" \"llikCauchy\" \"llikCauchyDlocation\" #> [148] \"llikCauchyDscale\" \"llikNorm\" \"llikNormDmean\" #> [151] \"llikNormDsd\" \"llikXPois\" \"llikXPoisDlambda\" #> [154] \"llikXBinom\" \"llikXBinomDprob\" \"llikXNbinomMu\" #> [157] \"llikXNbinomMuDmu\" \"llikXNbinom\" \"llikXNbinomDprob\" #> [160] \"llikXBeta\" \"llikXBetaDshape1\" \"llikXBetaDshape2\" #> [163] \"llikXT\" \"llikXTDdf\" \"llikXTDmean\" #> [166] \"llikXTDsd\" \"llikXChisq\" \"llikXChisqDdf\" #> [169] \"llikXExp\" \"llikXExpDrate\" \"llikXF\" #> [172] \"llikXFDdf1\" \"llikXFDdf2\" \"llikXGeom\" #> [175] \"llikXGeomDprob\" \"llikXUnif\" \"llikXUnifDalpha\" #> [178] \"llikXUnifDbeta\" \"llikXWeibull\" \"llikXWeibullDshape\" #> [181] \"llikXWeibullDscale\" \"llikXGamma\" \"llikXGammaDshape\" #> [184] \"llikXGammaDrate\" \"llikXCauchy\" \"llikXCauchyDlocation\" #> [187] \"llikXCauchyDscale\" \"llikXNorm\" \"llikXNormDmean\" #> [190] \"llikXNormDsd\" \"linCmt\" \"rnorm\" #> [193] \"rxnorm\" \"rxbinom\" \"rbinom\" #> [196] \"rxcauchy\" \"rcauchy\" \"rchisq\" #> [199] \"rxchisq\" \"rexp\" \"rxexp\" #> [202] \"rbeta\" \"rxbeta\" \"rgeom\" #> [205] \"rxgeom\" \"rxpois\" \"rpois\" #> [208] \"rxt\" \"rt\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":null,"dir":"Reference","previous_headings":"","what":"Respect suppress messages — rxSuppressMsg","title":"Respect suppress messages — rxSuppressMsg","text":"turns silent REprintf C suppressMessages() turned . makes REprintf act like messages R, can suppressed suppressMessages()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Respect suppress messages — rxSuppressMsg","text":"","code":"rxSuppressMsg()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Respect suppress messages — rxSuppressMsg","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Respect suppress messages — rxSuppressMsg","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Respect suppress messages — rxSuppressMsg","text":"","code":"# rxSupressMsg() is called with rxode2() # Note the errors are output to the console try(rxode2(\"d/dt(matt)=/3\"), silent = TRUE) #> #> # When using suppressMessages, the output is suppressed suppressMessages(try(rxode2(\"d/dt(matt)=/3\"), silent = TRUE)) # In rxode2, we use REprintf so that interrupted threads do not crash R # if there is a user interrupt. This isn't captured by R's messages, but # This interface allows the `suppressMessages()` to suppress the C printing # as well # If you want to suppress messages from rxode2 in other packages, you can use # this function"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Omega^-1 and derivatives — rxSymInvChol","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Get Omega^-1 derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"","code":"rxSymInvChol( invObjOrMatrix, theta = NULL, type = \"cholOmegaInv\", thetaNumber = 0L )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"invObjOrMatrix Object inverse-type calculations. matrix, setup object inversion rxSymInvCholCreate() default arguments return reactive s3 object. Otherwise, use inversion object calculate requested derivative/inverse. theta Thetas used calculation. missing (NULL), special s3 class created returned access Omega^1 objects needed cache based theta used. type type object. Currently following types supported: cholOmegaInv gives Cholesky decomposition Omega Inverse matrix. omegaInv gives Omega Inverse matrix. d(omegaInv) gives d(Omega^-1) withe respect theta parameter specified thetaNumber. d(D) gives d(diagonal(Omega^-1)) respect theta parameter specified thetaNumber parameter thetaNumber types d(omegaInv) d(D), theta number derivative taken . must positive 1 number thetas defining Omega matrix.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Matrix based parameters environment matrixes calculated variables omega, omegaInv, dOmega, dOmegaInv.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"Creates object calculating Omega/Omega^-1 derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"","code":"rxSymInvCholCreate( mat, diag.xform = c(\"sqrt\", \"log\", \"identity\"), create.env = TRUE, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"mat Initial Omega matrix diag.xform transformation diagonal elements OMEGA. chol(Omega^-1) create.env -- Create environment calculate inverses. (default TRUE) envir -- Environment evaluate function, bu default parent frame.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"rxSymInv object rxSymInv environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"Return dimension built-derivatives/inverses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"","code":"rxSymInvCholN()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"dimension built-derivatives/inverses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":null,"dir":"Reference","previous_headings":"","what":"Sync options with rxode2 variables — rxSyncOptions","title":"Sync options with rxode2 variables — rxSyncOptions","text":"Accessing rxode2 options via getOption slows solving. allows options synced variables.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sync options with rxode2 variables — rxSyncOptions","text":"","code":"rxSyncOptions(setDefaults = c(\"none\", \"permissive\", \"strict\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sync options with rxode2 variables — rxSyncOptions","text":"setDefaults setup rxode2's default solving options following options: \"none\" leave options alone \"permissive\" permissive option set similar R language specifications. \"strict\" strict option set similar original rxode2(). requires semicolons end lines equals assignment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sync options with rxode2 variables — rxSyncOptions","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Sync options with rxode2 variables — rxSyncOptions","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":null,"dir":"Reference","previous_headings":"","what":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"list description Rode supported syntax functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"","code":"rxSyntaxFunctions"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"data frame 3 columns 98 rows Function Reserved function Name Description Description function Aliases Function Aliases","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the rxode2 temporary directory — rxTempDir","title":"Get the rxode2 temporary directory — rxTempDir","text":"Get rxode2 temporary directory","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the rxode2 temporary directory — rxTempDir","text":"","code":"rxTempDir()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the rxode2 temporary directory — rxTempDir","text":"rxode2 temporary directory.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":null,"dir":"Reference","previous_headings":"","what":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"rxTheme ggplot2 theme rxode2 plots","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"","code":"rxTheme( base_size = 11, base_family = \"\", base_line_size = base_size/22, base_rect_size = base_size/22, grid = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"base_size base font size, given pts. base_family base font family base_line_size base size line elements base_rect_size base size rect elements grid Boolean indicating grid (TRUE) (FALSE). also character indicating x y.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"ggplot2 theme used rxode2","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":null,"dir":"Reference","previous_headings":"","what":"rxode2 to symengine environment — rxToSE","title":"rxode2 to symengine environment — rxToSE","text":"rxode2 symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxode2 to symengine environment — rxToSE","text":"","code":"rxToSE( x, envir = NULL, progress = FALSE, promoteLinSens = TRUE, parent = parent.frame() ) .rxToSE(x, envir = NULL, progress = FALSE) rxFromSE( x, unknownDerivatives = c(\"forward\", \"central\", \"error\"), parent = parent.frame() ) .rxFromSE(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxode2 to symengine environment — rxToSE","text":"x expression envir default NULL; Environment put symengine variables . progress shows progress bar true. promoteLinSens Promote solved linear compartment systems sensitivity-based solutions. parent parent environment look R-based user functions unknownDerivatives handling derivatives unknown functions, translator translate different types numeric derivatives. currently supported methods :","code":"- `forward` for forward differences - `central` for central differences - `error` for throwing an error for unknown derivatives"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxode2 to symengine environment — rxToSE","text":"rxode2 symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxode2 to symengine environment — rxToSE","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":null,"dir":"Reference","previous_headings":"","what":"Translate the model to C code if needed — rxTrans","title":"Translate the model to C code if needed — rxTrans","text":"function translates model C code, needed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Translate the model to C code if needed — rxTrans","text":"","code":"rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... ) # S3 method for default rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... ) # S3 method for character rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Translate the model to C code if needed — rxTrans","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . modelPrefix Prefix model functions compiled make sure multiple rxode2 objects can coexist R session. md5 md5 model parsing, used embed md5 DLL, provide functions like rxModelVars(). modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. modVars returns model variables instead named vector translated properties. ... Ignored parameters.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Translate the model to C code if needed — rxTrans","text":"named vector translated model properties including type jacobian specified, C function prefixes, well C functions names called compiled model.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Translate the model to C code if needed — rxTrans","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":null,"dir":"Reference","previous_headings":"","what":"Compress/Decompress rxode2 ui — rxUiDecompress","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"Compress/Decompress rxode2 ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"","code":"rxUiDecompress(ui) rxUiCompress(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"ui rxode2 ui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"compressed decompressed rxui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"","code":"one.cmt <- function() { ini({ ## You may label each parameter with a comment tka <- 0.45 # Log Ka tcl <- log(c(0, 2.7, 100)) # Log Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- 3.45; label(\"log V\") ## the label(\"Label name\") works with all models eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) | tmp }) } f <- rxode2(one.cmt) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' print(class(f)) #> [1] \"rxUi\" \"raw\" print(is.environment(f)) #> [1] FALSE f <- rxUiDecompress(f) print(class(f)) #> [1] \"rxUi\" print(is.environment(f)) #> [1] TRUE f <- rxUiCompress(f) print(class(f)) #> [1] \"rxUi\" \"raw\" print(is.environment(f)) #> [1] FALSE"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":null,"dir":"Reference","previous_headings":"","what":"S3 for getting information from UI model — rxUiGet.cmtLines","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"S3 getting information UI model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"","code":"# S3 method for cmtLines rxUiGet(x, ...) # S3 method for dvidLine rxUiGet(x, ...) # S3 method for paramsLine rxUiGet(x, ...) # S3 method for simulationSigma rxUiGet(x, ...) # S3 method for simulationModel rxUiGet(x, ...) # S3 method for symengineModelNoPrune rxUiGet(x, ...) # S3 method for symengineModelPrune rxUiGet(x, ...) # S3 method for simulationIniModel rxUiGet(x, ...) rxUiGet(x, ...) # S3 method for params rxUiGet(x, ...) # S3 method for theta rxUiGet(x, ...) # S3 method for lstChr rxUiGet(x, ...) # S3 method for omega rxUiGet(x, ...) # S3 method for funTxt rxUiGet(x, ...) # S3 method for allCovs rxUiGet(x, ...) # S3 method for muRefTable rxUiGet(x, ...) # S3 method for multipleEndpoint rxUiGet(x, ...) # S3 method for funPrint rxUiGet(x, ...) # S3 method for fun rxUiGet(x, ...) # S3 method for md5 rxUiGet(x, ...) # S3 method for ini rxUiGet(x, ...) # S3 method for iniFun rxUiGet(x, ...) # S3 method for modelFun rxUiGet(x, ...) # S3 method for model rxUiGet(x, ...) # S3 method for modelDesc rxUiGet(x, ...) # S3 method for thetaLower rxUiGet(x, ...) # S3 method for thetaUpper rxUiGet(x, ...) # S3 method for lhsVar rxUiGet(x, ...) # S3 method for varLhs rxUiGet(x, ...) # S3 method for lhsEta rxUiGet(x, ...) # S3 method for lhsTheta rxUiGet(x, ...) # S3 method for lhsCov rxUiGet(x, ...) # S3 method for etaLhs rxUiGet(x, ...) # S3 method for thetaLhs rxUiGet(x, ...) # S3 method for covLhs rxUiGet(x, ...) # S3 method for default rxUiGet(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"x list (UIenvironment, exact). UI environment parsed function rxode2. exact boolean says exact match required. ... arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"value requested UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":null,"dir":"Reference","previous_headings":"","what":"Unloads all rxode2 compiled DLLs — rxUnloadAll","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"Unloads rxode2 compiled DLLs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"","code":"rxUnloadAll()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"List rxode2 dlls still loaded boolean rxode2 dlls unloaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"","code":"print(rxUnloadAll()) #> NULL"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":null,"dir":"Reference","previous_headings":"","what":"Use model object in your package — rxUse","title":"Use model object in your package — rxUse","text":"Use model object package","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use model object in your package — rxUse","text":"","code":"rxUse(obj, overwrite = TRUE, compress = \"bzip2\", internal = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use model object in your package — rxUse","text":"obj model save. overwrite default, use_data() overwrite existing files. really want , set TRUE. compress Choose type compression used save(). one \"gzip\", \"bzip2\", \"xz\". internal run internally. default FALSE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use model object in your package — rxUse","text":"Nothing; used side effects called user","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":null,"dir":"Reference","previous_headings":"","what":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"Validate rxode2 allows easy validation/qualification nlmixr running testing suite system.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"","code":"rxValidate(type = NULL, skipOnCran = TRUE) rxTest(type = NULL, skipOnCran = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"type Type test filter test type, expression, evaluate contents, respecting skipOnCran skipOnCran TRUE skip test CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Version and repository for this dparser package. — rxVersion","title":"Version and repository for this dparser package. — rxVersion","text":"Version repository dparser package.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Version and repository for this dparser package. — rxVersion","text":"","code":"rxVersion( extra = \"\", echo = FALSE, version = sessionInfo()$otherPkgs$rxode2$Version )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Version and repository for this dparser package. — rxVersion","text":"extra extra text display logo echo Boolean echo text logo, default FALSE version Version display/return","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Version and repository for this dparser package. — rxVersion","text":"character vector version repository.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Version and repository for this dparser package. — rxVersion","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate beta variable from threefry generator — rxbeta","title":"Simulate beta variable from threefry generator — rxbeta","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate beta variable from threefry generator — rxbeta","text":"","code":"rxbeta(shape1, shape2, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate beta variable from threefry generator — rxbeta","text":"shape1, shape2 non-negative parameters Beta distribution. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate beta variable from threefry generator — rxbeta","text":"beta random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate beta variable from threefry generator — rxbeta","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate beta variable from threefry generator — rxbeta","text":"","code":"# \\donttest{ ## Use threefry engine rxbeta(0.5, 0.5, n = 10) # with rxbeta you have to explicitly state n #> [1] 0.477852330 0.303485792 0.039549351 0.172127808 0.029142179 0.228528849 #> [7] 0.002045024 0.123955210 0.122974648 0.003892215 rxbeta(5, 1, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.9837921 0.9619446 0.9528713 0.8186334 0.8958941 0.9547040 0.9377216 #> [8] 0.8771444 0.9122368 0.9036474 rxbeta(1, 3) #> [1] 0.4918356 ## This example uses `rxbeta` directly in the model rx <- function() { model({ a <- rxbeta(2, 2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Binomial variable from threefry generator — rxbinom","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"","code":"rxbinom(size, prob, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"size number trials (zero ). prob probability success trial. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"binomial random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"","code":"# \\donttest{ ## Use threefry engine rxbinom(10, 0.9, n = 10) # with rxbinom you have to explicitly state n #> [1] 10 9 9 10 9 9 9 10 10 10 rxbinom(3, 0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0 3 0 2 2 1 2 1 1 3 rxbinom(4, 0.7) #> [1] 2 ## This example uses `rxbinom` directly in the model rx <- function() { model({ a <- rxbinom(1, 0.5) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Cauchy variable from threefry generator — rxcauchy","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"","code":"rxcauchy(location = 0, scale = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"location, scale location scale parameters. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Cauchy random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"","code":"# \\donttest{ ## Use threefry engine rxcauchy(0, 1, n = 10) # with rxcauchy you have to explicitly state n #> [1] -4.058532e-01 -3.735548e-01 2.292820e+00 1.715716e+01 -3.247341e+04 #> [6] -1.381140e+00 6.254309e-02 1.008986e+02 1.192805e+01 5.395418e-01 rxcauchy(0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 1.35507665 -0.09529856 0.15545628 0.52832597 2.91300334 0.67517336 #> [7] 2.74087058 0.92316592 1.35864663 -0.36322597 rxcauchy(3) #> [1] 6.705508 ## This example uses `rxcauchy` directly in the model rx <- function() { model({ a <- rxcauchy(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate chi-squared variable from threefry generator — rxchisq","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"","code":"rxchisq(df, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"df degrees freedom (non-negative, can non-integer). n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"chi squared random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"","code":"# \\donttest{ ## Use threefry engine rxchisq(0.5, n = 10) # with rxchisq you have to explicitly state n #> [1] 8.310255e-01 5.056546e-04 1.283680e-02 1.156829e-01 1.791516e-01 #> [6] 1.262242e+00 7.069398e-01 7.941145e-01 2.610348e-07 7.152674e+00 rxchisq(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 2.285712 4.831273 3.575691 8.457173 6.136148 4.831445 3.387999 1.390385 #> [9] 4.401743 4.226414 rxchisq(1) #> [1] 0.4391989 ## This example uses `rxchisq` directly in the model rx <- function() { model({ a <- rxchisq(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate exponential variable from threefry generator — rxexp","title":"Simulate exponential variable from threefry generator — rxexp","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate exponential variable from threefry generator — rxexp","text":"","code":"rxexp(rate, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate exponential variable from threefry generator — rxexp","text":"rate vector rates. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate exponential variable from threefry generator — rxexp","text":"exponential random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate exponential variable from threefry generator — rxexp","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate exponential variable from threefry generator — rxexp","text":"","code":"# \\donttest{ ## Use threefry engine rxexp(0.5, n = 10) # with rxexp you have to explicitly state n #> [1] 2.3809833 1.2842193 2.9579776 0.2992783 2.2362850 1.1166611 0.1232554 #> [8] 0.3223169 3.1258548 0.1552611 rxexp(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.18422563 0.04552514 0.03749666 0.07330912 0.13716012 0.77328162 #> [7] 0.40892297 0.07167627 0.24915418 0.04749041 rxexp(1) #> [1] 1.054455 ## This example uses `rxexp` directly in the model rx <- function() { model({ a <- rxexp(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate F variable from threefry generator — rxf","title":"Simulate F variable from threefry generator — rxf","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate F variable from threefry generator — rxf","text":"","code":"rxf(df1, df2, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate F variable from threefry generator — rxf","text":"df1, df2 degrees freedom. Inf allowed. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate F variable from threefry generator — rxf","text":"f random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate F variable from threefry generator — rxf","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate F variable from threefry generator — rxf","text":"","code":"# \\donttest{ ## Use threefry engine rxf(0.5, 0.5, n = 10) # with rxf you have to explicitly state n #> [1] 8.504451e+00 3.630793e+00 8.678236e-03 3.880547e+00 2.243042e+06 #> [6] 2.801723e-01 4.225989e-01 1.000520e-01 3.304096e-01 1.149793e+00 rxf(5, 1, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 2.2338907 11.2163069 0.1898719 4.8782950 2.2084744 7.4676924 #> [7] 1.2271939 7.7742898 0.1681263 4.3235439 rxf(1, 3) #> [1] 0.01338054 ## This example uses `rxf` directly in the model rx <- function() { model({ a <- rxf(2, 2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate gamma variable from threefry generator — rxgamma","title":"Simulate gamma variable from threefry generator — rxgamma","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate gamma variable from threefry generator — rxgamma","text":"","code":"rxgamma(shape, rate = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate gamma variable from threefry generator — rxgamma","text":"shape shape gamma random variable rate alternative way specify scale. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate gamma variable from threefry generator — rxgamma","text":"gamma random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate gamma variable from threefry generator — rxgamma","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate gamma variable from threefry generator — rxgamma","text":"","code":"# \\donttest{ ## Use threefry engine rxgamma(0.5, n = 10) # with rxgamma you have to explicitly state n #> [1] 1.355794e-06 1.184154e-01 9.402169e-03 2.871131e-01 5.795578e-01 #> [6] 1.362098e+00 2.274397e-01 2.389341e-01 2.283278e-02 2.453927e-01 rxgamma(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 6.081028 4.553699 4.216456 3.053786 2.837575 3.992559 2.974116 4.653716 #> [9] 5.765096 3.788091 rxgamma(1) #> [1] 0.4450636 ## This example uses `rxbeta` directly in the model rx <- function() { model({ a <- rxgamma(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate geometric variable from threefry generator — rxgeom","title":"Simulate geometric variable from threefry generator — rxgeom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate geometric variable from threefry generator — rxgeom","text":"","code":"rxgeom(prob, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate geometric variable from threefry generator — rxgeom","text":"prob probability success trial. 0 < prob <= 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate geometric variable from threefry generator — rxgeom","text":"geometric random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate geometric variable from threefry generator — rxgeom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate geometric variable from threefry generator — rxgeom","text":"","code":"# \\donttest{ ## Use threefry engine rxgeom(0.5, n = 10) # with rxgeom you have to explicitly state n #> [1] 1 1 0 0 0 1 3 2 0 0 rxgeom(0.25, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0 8 0 13 1 5 6 1 11 6 rxgeom(0.75) #> [1] 0 ## This example uses `rxgeom` directly in the model rx <- function() { model({ a <- rxgeom(0.24) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Binomial variable from threefry generator — rxnbinom","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"","code":"rxnbinom(size, prob, n = 1L, ncores = 1L) rxnbinomMu(size, mu, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"size target number successful trials, dispersion parameter (shape parameter gamma mixing distribution). Must strictly positive, need integer. prob probability success trial. 0 < prob <= 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks mu alternative parametrization via mean: see ‘Details’.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"negative binomial random deviates. Note rxbinom2 uses mu parameterization rxbinom uses prob parameterization (mu=size/(prob+size))","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"","code":"# \\donttest{ ## Use threefry engine rxnbinom(10, 0.9, n = 10) # with rxbinom you have to explicitly state n #> [1] 9 10 9 8 10 10 8 9 9 10 rxnbinom(3, 0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 3 2 1 3 3 1 3 3 2 2 rxnbinom(4, 0.7) #> [1] 4 # use mu parameter rxnbinomMu(40, 40, n=10) #> [1] 20 24 20 21 21 22 20 21 20 12 ## This example uses `rxbinom` directly in the model rx <- function() { model({ a <- rxnbinom(10, 0.5) }) } et <- et(1, id = 1:100) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ rx <- function() { model({ a <- rxnbinomMu(10, 40) }) } s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate random normal variable from threefry generator — rxnormV","title":"Simulate random normal variable from threefry generator — rxnormV","text":"Simulate random normal variable threefry generator","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate random normal variable from threefry generator — rxnormV","text":"","code":"rxnormV(mean = 0, sd = 1, n = 1L, ncores = 1L) rxnorm(mean = 0, sd = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate random normal variable from threefry generator — rxnormV","text":"mean vector means. sd vector standard deviations. n number observations ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate random normal variable from threefry generator — rxnormV","text":"normal random number deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate random normal variable from threefry generator — rxnormV","text":"","code":"# \\donttest{ ## Use threefry engine rxnorm(n = 10) # with rxnorm you have to explicitly state n #> [1] 0.37076053 -0.96034099 0.02749010 -0.82762453 0.58984915 -1.80511477 #> [7] 0.50379739 -0.67643890 1.45510439 0.04165521 rxnorm(n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] -0.51162593 -1.13782819 0.06566640 -0.12404287 1.79306612 0.83099897 #> [7] -0.44485847 0.06223717 1.88310497 0.22993201 rxnorm(2, 3) ## The first 2 arguments are the mean and standard deviation #> [1] -0.9022625 ## This example uses `rxnorm` directly in the model rx <- function() { model({ a <- rxnorm() }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"Set function body rxUi object retaining object information (like data)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"","code":"rxode2(x, envir = environment(x)) <- value # S3 method for `function` rxode2(x, envir = environment(x)) <- value # S3 method for default rxode2(x, envir = environment(x)) <- value rxode(x, envir = environment(x)) <- value RxODE(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"x rxUi object envir environment assignment ocurs value value assigned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"rxode2 ui/function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"","code":"one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } two.compartment <- function() { ini({ lka <- 0.45 ; label(\"Absorption rate (Ka)\") lcl <- 1 ; label(\"Clearance (CL)\") lvc <- 3 ; label(\"Central volume of distribution (V)\") lvp <- 5 ; label(\"Peripheral volume of distribution (Vp)\") lq <- 0.1 ; label(\"Intercompartmental clearance (Q)\") propSd <- 0.5 ; label(\"Proportional residual error (fraction)\") }) model({ ka <- exp(lka) cl <- exp(lcl) vc <- exp(lvc) vp <- exp(lvp) q <- exp(lq) kel <- cl/vc k12 <- q/vc k21 <- q/vp d/dt(depot) <- -ka*depot d/dt(central) <- ka*depot - kel*central - k12*central + k21*peripheral1 d/dt(peripheral1) <- k12*central - k21*peripheral1 cp <- central / vc cp ~ prop(propSd) }) } ui <- rxode2(one.compartment) #> #> rxode2(ui) <- two.compartment"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an ODE-based model specification — rxode2","title":"Create an ODE-based model specification — rxode2","text":"Create dynamic ODE-based model object suitably translation fast C code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an ODE-based model specification — rxode2","text":"","code":"rxode2( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() ) RxODE( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() ) rxode( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an ODE-based model specification — rxode2","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. wd character string working directory create subdirectory according modName. specified, subdirectory named “modName.d” created populated C file, dynamic loading library, plus various working files. missing, files created (removed) temporary directory, rxode2 DLL model created current directory named rx_????_platform, example rx_129f8f97fb94a87ca49ca8dafe691e1e_i386.dll filename file name connection object ODE-based model specification resides. one model filename may specified. extraC Extra c code include model. can useful specify functions model. C functions usually take double precision arguments, return double precision values. debug boolean indicating executable compiled verbose debugging information turned . calcJac boolean indicating rxode2 calculate Jacobain according specified ODEs. calcSens boolean indicating rxode2 calculate sensitivities according specified ODEs. collapseModel boolean indicating rxode2 remove LHS variables calculating sensitivities. package Package name pre-compiled binaries. ... ignored arguments. linCmtSens method calculate linCmt() solutions indLin Calculate inductive linearization matrices compile inductive linearization support. verbose TRUE verbose linear compartmental model fullPrint using printf within model, TRUE print every step (except /indLin), otherwise FALSE print calculating d/dt envir environment look R user functions (defaults parent environment)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an ODE-based model specification — rxode2","text":"object (environment) class rxode2 (see Chambers Temple Lang (2001)) consisting following list strings functions:","code":"* `model` a character string holding the source model specification. * `get.modelVars`a function that returns a list with 3 character vectors, `params`, `state`, and `lhs` of variable names used in the model specification. These will be output when the model is computed (i.e., the ODE solved by integration). * `solve`{this function solves (integrates) the ODE. This is done by passing the code to [rxSolve()]. This is as if you called `rxSolve(rxode2object, ...)`, but returns a matrix instead of a rxSolve object. `params`: a numeric named vector with values for every parameter in the ODE system; the names must correspond to the parameter identifiers used in the ODE specification; `events`: an `eventTable` object describing the input (e.g., doses) to the dynamic system and observation sampling time points (see [eventTable()]); `inits`: a vector of initial values of the state variables (e.g., amounts in each compartment), and the order in this vector must be the same as the state variables (e.g., PK/PD compartments); `stiff`: a logical (`TRUE` by default) indicating whether the ODE system is stiff or not. For stiff ODE systems (`stiff = TRUE`), `rxode2` uses the LSODA (Livermore Solver for Ordinary Differential Equations) Fortran package, which implements an automatic method switching for stiff and non-stiff problems along the integration interval, authored by Hindmarsh and Petzold (2003). For non-stiff systems (`stiff = FALSE`), `rxode2` uses `DOP853`, an explicit Runge-Kutta method of order 8(5, 3) of Dormand and Prince as implemented in C by Hairer and Wanner (1993). `trans_abs`: a logical (`FALSE` by default) indicating whether to fit a transit absorption term (TODO: need further documentation and example); `atol`: a numeric absolute tolerance (1e-08 by default); `rtol`: a numeric relative tolerance (1e-06 by default). The output of \\dQuote{solve} is a matrix with as many rows as there are sampled time points and as many columns as system variables (as defined by the ODEs and additional assignments in the rxode2 model code).} * `isValid` a function that (naively) checks for model validity, namely that the C object code reflects the latest model specification. * `version` a string with the version of the `rxode2` object (not the package). * `dynLoad` a function with one `force = FALSE` argument that dynamically loads the object code if needed. * `dynUnload` a function with no argument that unloads the model object code. * `delete` removes all created model files, including C and DLL files. The model object is no longer valid and should be removed, e.g., `rm(m1)`. * `run` deprecated, use `solve`. * `get.index` deprecated. * `getObj` internal (not user callable) function."},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create an ODE-based model specification — rxode2","text":"Rx name rxode2 meant suggest abbreviation Rx medical prescription, thus suggest package emphasis pharmacometrics modeling, including pharmacokinetics (PK), pharmacodynamics (PD), disease progression, drug-disease modeling, etc. ODE-based model specification may coded inside four places: Inside rxode2({}) block statements: Inside rxode2(\"\") string statement: file name loaded rxode2: model function can parsed rxode2: block statement, character string text file internal rxode2 compilation manager translates ODE system C, compiles loads R session. call rxode2 produces object class rxode2 consists list-like structure (environment) various member functions. last type model (model function), call rxode2 creates parsed rxode2 ui can translated rxode2 compilation model. type function required nlmixr2 estimation can extended modified model piping. reason focused documentation. basic model specification consists one statements optionally terminated semi-colons ; optional comments (comments delimited # end--line). block statements set statements delimited curly braces, { ... }. Statements can either assignments, conditional /else /else, loops (can exited break), special statements, printing statements (debugging/testing). Assignment statements can : simple assignments, left hand identifier (.e., variable) special time-derivative assignments, left hand specifies change amount corresponding state variable (compartment) respect time e.g., d/dt(depot): special initial-condition assignments left hand specifies compartment initial condition specified, e.g. depot(0) = 0 special model event changes including bioavailability (f(depot)=1), lag time (alag(depot)=0), modeled rate (rate(depot)=2) modeled duration (dur(depot)=2). example model features event specification modeled infusions rxode2 data specification found rxode2 events vignette. special change point syntax, model times. model times specified mtime(var)=time special Jacobian-derivative assignments, left hand specifies change compartment ode respect variable. example, d/dt(y) = dy, Jacobian compartment can specified df(y)/dy(dy) = 1. may advantage obtaining solution specifying Jacobian stiff ODE systems. However, stiff systems tried LSODA, actually slightly slowed solving. Note assignment can done =, <- ~. assigning ~ operator, simple assignments time-derivative assignments output. Note rxode2 model functions assignment ~ can also overloaded residual distribution specification. Special statements can : Compartment declaration statements, can change default dosing compartment assumed compartment number(s) well add extra compartment names end (useful multiple-endpoint nlmixr models); specified cmt(compartmentName) Parameter declaration statements, can make sure input parameters certain order instead ordering parameters order parsed. useful keeping parameter order using 2 different ODE models. specified param(par1, par2,...) example model shown : Expressions assignment statements can numeric logical. Numeric expressions can include following numeric operators +, -, *, /, ^ mathematical functions defined C R math libraries (e.g., fabs, exp, log, sin, abs). may also access R’s functions R math libraries, like lgammafn log gamma function. rxode2 syntax case-sensitive, .e., ABC different abc, Abc, ABc, etc.","code":"library(rxode2) mod <- rxode2({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_36fd6c4312c660ddf5390102e91a4bb3_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ mod <- rxode2(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \") ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_4fdd80e5dd5fd33d1951b83e06f7ad84_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ writeLines(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \", \"modelFile.rxode2\") mod <- rxode2(filename='modelFile.rxode2') unlink(\"modelFile.rxode2\") mod <- function() { model({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) } mod <- rxode2(mod) # or simply mod() if the model is at the end of the function # These model functions often have residual components and initial # (`ini({})`) conditions attached as well. For example the # theophylline model can be written as: one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # after parsing the model mod <- one.compartment() mod$simulationModel ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_bbee652505e8bddf28c7e688baef12d9_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ ## rxode2 2.1.2.9000 model named rx_bbee652505e8bddf28c7e688baef12d9 model (ready). ## x$state: depot, center ## x$stateExtra: cp ## x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp ## x$lhs: ka, cl, v, cp, ipredSim, sim # or mod$simulationIniModel ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_fe01e26500a95dd1ba4d8972bc71bc7a_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ ## rxode2 2.1.2.9000 model named rx_fe01e26500a95dd1ba4d8972bc71bc7a model (ready). ## x$state: depot, center ## x$stateExtra: cp ## x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp ## x$lhs: ka, cl, v, cp, ipredSim, sim # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3;"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"identifiers","dir":"Reference","previous_headings":"","what":"Identifiers","title":"Create an ODE-based model specification — rxode2","text":"Like R, Identifiers (variable names) may consist one alphanumeric, underscore _ period . characters, first character digit underscore _. Identifiers model specification can refer : State variables dynamic system (e.g., compartments pharmacokinetics model). Implied input variable, t (time), tlast (last time point), podo (oral dose, undocumented case absorption transit models). Special constants like pi R’s predefined constants. Model parameters (e.g., ka rate absorption, CL clearance, etc.) Others, created assignments part model specification; referred LHS (left-hand side) variable. Currently, rxode2 modeling language recognizes system state variables “parameters”, thus, values need passed R ODE model (e.g., age) either passed params argument integrator function rxSolve() supplied event data-set. certain variable names rxode2 event tables. avoid confusion, following event table-related items assigned, used state can accessed rxode2 code: cmt dvid addl ss rate id However following variables used model specification: evid ii Sometimes rxode2 generates variables fed back rxode2. Similarly, nlmixr2 generates variables used nlmixr estimation simulation. variables start either rx nlmixr prefixes. avoid problems, suggested use variables starting either rx nlmixr prefixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"logical-operators","dir":"Reference","previous_headings":"","what":"Logical Operators","title":"Create an ODE-based model specification — rxode2","text":"Logical operators support standard R operators ==, != >= <= > <. Like R can () () statements, ifelse() expressions. Additionally can standard assignment. instance, following valid: Notice can also use character expressions comparisons. convenience comes cost since character comparisons slower numeric expressions. Unlike R, .numeric .integer logical statements needed, cause syntax error try use function.","code":"cov1 = covm*(sexf == \"female\") + covm*(sexf != \"female\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"supported-functions","dir":"Reference","previous_headings":"","what":"Supported functions","title":"Create an ODE-based model specification — rxode2","text":"supported functions rxode2 can seen rxSupportedFuns(). brief description built-functions following table: Note lag(cmt) = equivalent alag(cmt) = = lag(wt)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"reserved-keywords","dir":"Reference","previous_headings":"","what":"Reserved keywords","title":"Create an ODE-based model specification — rxode2","text":"reserved keywords rxode2 model. following table: Note rxFlag always output 11 calc_lhs since final variables calculated, though can tweak test certain parts rxode2 using flag.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"residual-functions-when-using-rxode-functions","dir":"Reference","previous_headings":"","what":"Residual functions when using rxode2 functions","title":"Create an ODE-based model specification — rxode2","text":"addition ~ hiding output certain types output, also used specify residual output endpoint input rxode2 model function (includes residual model({}) block). specifications form: Indicating variable var variable represents individual central tendencies model also represents compartment specification data-set. can also change compartment name using | syntax, : case var represents central tendency cmt represents compartment dvid specification.","code":"var ~ add(add.sd) var ~ add(add.sd) | cmt"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"transformations","dir":"Reference","previous_headings":"","what":"Transformations","title":"Create an ODE-based model specification — rxode2","text":"normal related distributions, can apply transformation sides using keywords/functions apply transformations. default likelihood transformations calculated untransformed scale. bounded variables like logit-normal probit-normal low high values defaulted 0 1 missing. models wish proportional model one transformation can replace standard deviation NA allow transformations, lnorm(), probitNorm() logitNorm() can combined variance stabilizing yeoJohnson() transformation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"normal-and-t-related-distributions","dir":"Reference","previous_headings":"","what":"Normal and t-related distributions","title":"Create an ODE-based model specification — rxode2","text":"normal t-related distributions, wanted keep ability use skewed distributions additive proportional t/cauchy-space, distributions specified differently comparison supported distributions within nlmixr2: Note normal t-related distributions nlmixr2 calculate cwres npde normal assumption help assess goodness fit model. Also note +dnorm() mostly testing purposes slow estimation procedure nlmixr2. suggest adding (except explicit testing). multiple endpoint models mix non-normal normal distributions, whole problem shifted log-likelihood method estimation nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"notes-on-additive-proportional-models","dir":"Reference","previous_headings":"","what":"Notes on additive + proportional models","title":"Create an ODE-based model specification — rxode2","text":"two different ways specify additive proportional models, call combined1 combined2, way Monolix calls two distributions (avoid software differences naming). first, combined1, assumes additive proportional differences standard deviation scale, : y=f+(+b* f^c)*err second, combined2, assumes additive proportional differences combined variance scale: y=f+[sqrt(^2+b^2 *f^(2c))]*err default nlmixr2/rxode2 otherwise specified combined2 since mirrors adding 2 normal distributions statistics add variances (standard deviations). However, combined1 can describe data possibly even better combined2 possible options rxode2/nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"distributions-of-known-likelihoods","dir":"Reference","previous_headings":"","what":"Distributions of known likelihoods","title":"Create an ODE-based model specification — rxode2","text":"residuals related normal, t-distribution cauchy, often residual specification form: compartment specification left handed side specification. generalized likelihood can specify:","code":"cmt ~ dbeta(alpha, beta) ll(cmt) ~ llik specification"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ordinal-likelihoods","dir":"Reference","previous_headings":"","what":"Ordinal likelihoods","title":"Create an ODE-based model specification — rxode2","text":"Finally, ordinal likelihoods/simulations can specified 2 ways. first : err represents compartment p0 probability specific category: model ensure sum p values less 1. Additionally can write arbitrary number categories ordinal model described . seems little p0 probability category 1 sometimes scores non-whole numbers. can modeled follows: numeric categories specified explicitly, probabilities remain :","code":"err ~ c(p0, p1, p2) err ~ c(p0=0, p1=1, p2=2, 3)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"general-table-of-supported-residual-distributions","dir":"Reference","previous_headings":"","what":"General table of supported residual distributions","title":"Create an ODE-based model specification — rxode2","text":"general supported following table (available rxode2::rxResidualError)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"creating-rxode-models","dir":"Reference","previous_headings":"","what":"Creating rxode2 models","title":"Create an ODE-based model specification — rxode2","text":"NA","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create an ODE-based model specification — rxode2","text":"Chamber, J. M. Temple Lang, D. (2001) Object Oriented Programming R. R News, Vol. 1, . 3, September 2001. https://cran.r-project.org/doc/Rnews/Rnews_2001-3.pdf. Hindmarsh, . C. ODEPACK, Systematized Collection ODE Solvers. Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pp. 55-64. Petzold, L. R. Automatic Selection Methods Solving Stiff Nonstiff Systems Ordinary Differential Equations. Siam J. Sci. Stat. Comput. 4 (1983), pp. 136-148. Hairer, E., Norsett, S. P., Wanner, G. Solving ordinary differential equations , nonstiff problems. 2nd edition, Springer Series Computational Mathematics, Springer-Verlag (1993). Plevyak, J. dparser, https://dparser.sourceforge.net/. Web. 12 Oct. 2015.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create an ODE-based model specification — rxode2","text":"Melissa Hallow, Wenping Wang Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an ODE-based model specification — rxode2","text":"","code":"# \\donttest{ mod <- function() { ini({ KA <- .291 CL <- 18.6 V2 <- 40.2 Q <- 10.5 V3 <- 297.0 Kin <- 1.0 Kout <- 1.0 EC50 <- 200.0 }) model({ # A 4-compartment model, 3 PK and a PD (effect) compartment # (notice state variable names 'depot', 'centr', 'peri', 'eff') C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot; d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) <- Q*C2 - Q*C3; d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; eff(0) <- 1 }) } m1 <- rxode2(mod) #> #> print(m1) #> ── rxode2-based free-form 4-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> KA CL V2 Q V3 Kin Kout EC50 #> 0.291 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 centr #> 3 3 peri #> 4 4 eff #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> KA <- 0.291 #> CL <- 18.6 #> V2 <- 40.2 #> Q <- 10.5 #> V3 <- 297 #> Kin <- 1 #> Kout <- 1 #> EC50 <- 200 #> }) #> model({ #> C2 <- centr/V2 #> C3 <- peri/V3 #> d/dt(depot) <- -KA * depot #> d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) <- Q * C2 - Q * C3 #> d/dt(eff) <- Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) <- 1 #> }) #> } # Step 2 - Create the model input as an EventTable, # including dosing and observation (sampling) events # QD (once daily) dosing for 5 days. qd <- et(amountUnits = \"ug\", timeUnits = \"hours\") %>% et(amt = 10000, addl = 4, ii = 24) # Sample the system hourly during the first day, every 8 hours # then after qd <- qd %>% et(0:24) %>% et(from = 24 + 8, to = 5 * 24, by = 8) # Step 3 - solve the system qd.cp <- rxSolve(m1, qd) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ head(qd.cp) #> time C2 C3 depot centr peri eff #> 1 0 [h] 0.00000 0.0000000 10000.000 0.000 0.0000 1.000000 #> 2 1 [h] 43.99334 0.9113641 7475.157 1768.532 270.6751 1.083968 #> 3 2 [h] 54.50866 2.6510696 5587.797 2191.248 787.3677 1.179529 #> 4 3 [h] 51.65163 4.4243597 4176.966 2076.396 1314.0348 1.227523 #> 5 4 [h] 44.37513 5.9432612 3122.347 1783.880 1765.1486 1.233503 #> 6 5 [h] 36.46382 7.1389804 2334.004 1465.845 2120.2772 1.214084 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate ordinal value — rxord","title":"Simulate ordinal value — rxord","text":"Simulate ordinal value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate ordinal value — rxord","text":"","code":"rxord(...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate ordinal value — rxord","text":"... probabilities simulated. sum number one.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate ordinal value — rxord","text":"number 1 (number probabilities specified + 1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate ordinal value — rxord","text":"values entered 'rxord' simulation simulate probability falling group. falls outside specified probabilities, simulate group (number probabilities specified + 1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate ordinal value — rxord","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate ordinal value — rxord","text":"","code":"# This will give values 1, and 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 # This will give values 1, 2 and 3 rxord(0.3, 0.3) #> [1] 3 rxord(0.3, 0.3) #> [1] 3 rxord(0.3, 0.3) #> [1] 1"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate random Poisson variable from threefry generator — rxpois","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"","code":"rxpois(lambda, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"lambda vector (non-negative) means. n number random values return. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"poission random number deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"","code":"# \\donttest{ ## Use threefry engine rxpois(lambda = 3, n = 10) # with rxpois you have to explicitly state n #> [1] 3 2 3 3 4 4 2 1 5 3 rxpois(lambda = 3, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 5 5 4 5 3 4 2 4 4 4 rxpois(4) ## The first arguments are the lambda parameter #> [1] 5 ## This example uses `rxpois` directly in the model rx <- function() { model({ a <- rxpois(3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate student t variable from threefry generator — rxt","title":"Simulate student t variable from threefry generator — rxt","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate student t variable from threefry generator — rxt","text":"","code":"rxt(df, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate student t variable from threefry generator — rxt","text":"df degrees freedom (\\(> 0\\), maybe non-integer). df = Inf allowed. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate student t variable from threefry generator — rxt","text":"t-distribution random numbers","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate student t variable from threefry generator — rxt","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate student t variable from threefry generator — rxt","text":"","code":"# \\donttest{ ## Use threefry engine rxt(df = 3, n = 10) # with rxt you have to explicitly state n #> [1] 0.56020706 0.03692413 -0.14483694 -1.17839233 -0.07091994 0.59518023 #> [7] -0.86772970 -0.13114717 -0.82988663 -0.44191039 rxt(df = 3, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.03932487 -0.52306475 0.43368480 -0.34707505 0.95056248 -0.59519017 #> [7] 0.88227899 2.54392958 -0.24328189 -1.64972949 rxt(4) ## The first argument is the df parameter #> [1] 0.2307802 ## This example uses `rxt` directly in the model rx <- function() { model({ a <- rxt(3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate uniform variable from threefry generator — rxunif","title":"Simulate uniform variable from threefry generator — rxunif","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate uniform variable from threefry generator — rxunif","text":"","code":"rxunif(min = 0, max = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate uniform variable from threefry generator — rxunif","text":"min, max lower upper limits distribution. Must finite. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate uniform variable from threefry generator — rxunif","text":"uniform random numbers","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate uniform variable from threefry generator — rxunif","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate uniform variable from threefry generator — rxunif","text":"","code":"# \\donttest{ ## Use threefry engine rxunif(min = 0, max = 4, n = 10) # with rxunif you have to explicitly state n #> [1] 2.67123413 1.53680622 0.03693407 3.10817092 1.82090596 0.87096816 #> [7] 3.00018567 0.74465379 0.44367887 1.04829595 rxunif(min = 0, max = 4, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 1.3636154 2.2496600 2.1135472 3.6623704 2.0958273 3.2123092 1.1121945 #> [8] 3.2064501 0.7037566 3.7979522 rxunif() #> [1] 0.5753584 ## This example uses `rxunif` directly in the model rx <- function() { model({ a <- rxunif(0, 3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Weibull variable from threefry generator — rxweibull","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"","code":"rxweibull(shape, scale = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"shape, scale shape scale parameters, latter defaulting 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Weibull random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"","code":"# \\donttest{ ## Use threefry engine # with rxweibull you have to explicitly state n rxweibull(shape = 1, scale = 4, n = 10) #> [1] 6.44811941 9.31743179 3.71729577 3.93298872 1.93424653 0.50995473 #> [7] 0.08795812 3.51517749 3.87991413 1.65760268 # You can parallelize the simulation using openMP rxweibull(shape = 1, scale = 4, n = 10, ncores = 2) #> [1] 8.43975112 0.60066178 3.19996975 8.95933943 0.90401027 1.12725152 #> [7] 0.02614905 2.35284437 2.74451590 14.14117829 rxweibull(3) #> [1] 1.146769 ## This example uses `rxweibull` directly in the model rx <- function() { model({ a <- rxweibull(1, 3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":null,"dir":"Reference","previous_headings":"","what":"Dosing/Amt geom/stat — stat_amt","title":"Dosing/Amt geom/stat — stat_amt","text":"dosing geom shows vertical lines dose occurs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dosing/Amt geom/stat — stat_amt","text":"","code":"stat_amt( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, ... ) geom_amt( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dosing/Amt geom/stat — stat_amt","text":"mapping Set aesthetic mappings created aes(). specified inherit.aes = TRUE (default), combined default mapping top level plot. must supply mapping plot mapping. data data displayed layer. three options: NULL, default, data inherited plot data specified call ggplot(). data.frame, object, override plot data. objects fortified produce data frame. See fortify() variables created. function called single argument, plot data. return value must data.frame, used layer data. function can created formula (e.g. ~ head(.x, 10)). position Position adjustment, either string naming adjustment (e.g. \"jitter\" use position_jitter), result call position adjustment function. Use latter need change settings adjustment. show.legend logical. layer included legends? NA, default, includes aesthetics mapped. FALSE never includes, TRUE always includes. can also named logical vector finely select aesthetics display. inherit.aes FALSE, overrides default aesthetics, rather combining . useful helper functions define data aesthetics inherit behaviour default plot specification, e.g. borders(). ... arguments passed layer(). often aesthetics, used set aesthetic fixed value, like colour = \"red\" size = 3. may also parameters paired geom/stat.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Dosing/Amt geom/stat — stat_amt","text":"returns stat_amt context ggplot2 plot","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Dosing/Amt geom/stat — stat_amt","text":"Requires following aesthetics: x representing x values, usually time amt representing dosing values; missing zero dose given","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Dosing/Amt geom/stat — stat_amt","text":"","code":"# \\donttest{ library(rxode2) library(units) #> udunits database from /usr/share/xml/udunits/udunits2.xml ## Model from RxODE tutorial mod1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } ## These are making the more complex regimens of the rxode2 tutorial ## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) ## bid for 5 days followed by qd for 5 days et <- seq(bid,qd) %>% et(seq(0,11*24,length.out=100)) bidQd <- rxSolve(mod1, et, addDosing=TRUE) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # by default dotted and under-stated plot(bidQd, C2) + geom_amt(aes(amt=amt)) # of course you can make it a bit more visible plot(bidQd, C2) + geom_amt(aes(amt=amt), col=\"red\", lty=1, linewidth=1.2) # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":null,"dir":"Reference","previous_headings":"","what":"Censoring geom/stat — stat_cens","title":"Censoring geom/stat — stat_cens","text":"censoring geom shows left right censoring specified nlmixr input data-set fit","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Censoring geom/stat — stat_cens","text":"","code":"stat_cens( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, width = 0.01, ... ) geom_cens( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, width = 0.01, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Censoring geom/stat — stat_cens","text":"mapping Set aesthetic mappings created aes(). specified inherit.aes = TRUE (default), combined default mapping top level plot. must supply mapping plot mapping. data data displayed layer. three options: NULL, default, data inherited plot data specified call ggplot(). data.frame, object, override plot data. objects fortified produce data frame. See fortify() variables created. function called single argument, plot data. return value must data.frame, used layer data. function can created formula (e.g. ~ head(.x, 10)). position Position adjustment, either string naming adjustment (e.g. \"jitter\" use position_jitter), result call position adjustment function. Use latter need change settings adjustment. show.legend logical. layer included legends? NA, default, includes aesthetics mapped. FALSE never includes, TRUE always includes. can also named logical vector finely select aesthetics display. inherit.aes FALSE, overrides default aesthetics, rather combining . useful helper functions define data aesthetics inherit behaviour default plot specification, e.g. borders(). width represents width (\\ censoring box ... arguments passed layer(). often aesthetics, used set aesthetic fixed value, like colour = \"red\" size = 3. may also parameters paired geom/stat.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Censoring geom/stat — stat_cens","text":"returns ggplot2 stat","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Censoring geom/stat — stat_cens","text":"Requires following aesthetics: x Represents independent variable, often time scale y represents dependent variable CENS censoring information; (-1 right censored, 0 censoring 1 left censoring) LIMIT represents corresponding limit () add boxes representing areas fit censored.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of rxDll object — summary.rxDll","title":"Summary of rxDll object — summary.rxDll","text":"gives expanded information rxDll object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of rxDll object — summary.rxDll","text":"","code":"# S3 method for rxDll summary(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of rxDll object — summary.rxDll","text":"object RxDll object ... arguments. Includes noprint, logical telling object print rxDll object first. default FALSE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of rxDll object — summary.rxDll","text":"object returned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of rxDll object — summary.rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Print expanded information about the rxode2 object. — summary.rxode2","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"prints expanded information rxode2 object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"","code":"# S3 method for rxode2 summary(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"object rxode2 object ... Ignored parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"object returned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"Update for rxUi — update.rxUi","title":"Update for rxUi — update.rxUi","text":"Update rxUi","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update for rxUi — update.rxUi","text":"","code":"# S3 method for rxUi update(object, ..., envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update for rxUi — update.rxUi","text":"object rxode2 UI object ... Lines update envir Environment evaluating ini() style calls","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update for rxUi — update.rxUi","text":"new rxode2 updated UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":null,"dir":"Reference","previous_headings":"","what":"uppergamma: upper incomplete gamma function — uppergamma","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"tgamma boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"","code":"uppergamma(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"uppergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"uppergamma function given : \\(uppergamma(, z) = \\int_{z}^{\\infty}t^{-1}\\cdot e^{-t} dt\\)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"","code":"uppergamma(1, 3) #> [1] 0.04978707 uppergamma(1:3, 3) #> [1] 0.04978707 0.19914827 0.84638016 uppergamma(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":null,"dir":"Reference","previous_headings":"","what":"Set random effects and residual error to zero — zeroRe","title":"Set random effects and residual error to zero — zeroRe","text":"Set random effects residual error zero","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set random effects and residual error to zero — zeroRe","text":"","code":"zeroRe(object, which = c(\"omega\", \"sigma\"), fix = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set random effects and residual error to zero — zeroRe","text":"object model modify types parameters set zero fix parameters fixed zero value?","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set random effects and residual error to zero — zeroRe","text":"object parameters set zero","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set random effects and residual error to zero — zeroRe","text":"Bill Denney","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set random effects and residual error to zero — zeroRe","text":"","code":"one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } zeroRe(one.compartment) #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.4510756 1.0006319 3.4499875 0.0000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0 0 0 #> eta.cl 0 0 0 #> eta.v 0 0 0 #> attr(,\"lotriFix\") #> eta.ka eta.cl eta.v #> eta.ka TRUE FALSE FALSE #> eta.cl FALSE TRUE FALSE #> eta.v FALSE FALSE TRUE #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.451075619360217 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- fix(0, 0) #> eta.ka ~ fix(0) #> eta.cl ~ fix(0) #> eta.v ~ fix(0) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-1-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.1.3","text":"Make sure object uncompressed rxode2 ui solving rxSolve (See #661) Fix #670 using last simulated observation residual trailing doses.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-1-3","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.1.3","text":"Create function see rxode2 solve loaded memory (rxode2::rxSolveSetup()) Create new function fixes rxode2 population values model (drops initial estimates); rxFixPop()","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-changes-2-1-3","dir":"Changelog","previous_headings":"","what":"Other changes","title":"rxode2 2.1.3","text":"Pendantic -remap (requested CRAN)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-212","dir":"Changelog","previous_headings":"","what":"rxode2 2.1.2","title":"rxode2 2.1.2","text":"CRAN release: 2024-01-30","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-changes-2-1-2","dir":"Changelog","previous_headings":"","what":"Other changes","title":"rxode2 2.1.2","text":"rxUi compression now defaults fast compression Fixes String literal formatting issues identified CRAN (#643) Removes linear compartment solutions gradients intel c++ compiler (since crash compiler).","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-210","dir":"Changelog","previous_headings":"","what":"rxode2 2.1.0","title":"rxode2 2.1.0","text":"CRAN release: 2023-12-11","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"breaking-changes-2-1-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"rxode2 2.1.0","text":"Steady state lag times longer shifted lag time solved steady state default. addition steady state original time dosing also back-calculated. want old behavior can bring back option ssAtDoseTime=FALSE. “dop853” now uses hmax/h0 values rxControl() rxSolve(). may change ODE solving using “dop853” specified (xgxr available), x axis longer assumed hours","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.1.0","text":"User defined functions can now R functions. many R functions can converted C rxFun() (can see C code afterwards rxC(\"funName\")) Parallel solving models require sorting (like modeled lag times, modeled duration etc) now solve parallel instead downgrading single threaded solving Steady state infusions duration infusions greater inter-dose interval now supported. Added $symengineModelNoPrune $symengineModelPrune loading models rxode2 rxS() plotting creating confidence intervals multiple endpoint models simulated rxode2 ui model, can plot/summarize endpoint sim. (ie. confint(model, \"sim\") plot(model, sim)). want summarize subset endpoints, can focus endpoint pre-pending endpoint sim. example wanted plot/summarize endpoint eff use sim.eff. (ie confint(model, \"sim.eff\") plot(model, sim.eff)) Added model$simulationIniModel prepend initial conditions ini({}) block classic rxode2({}) model. Now model$simulationModel model$simulationIniModel save use initialization values compiled model, solve original ui model. Allow ini(model) <- NULL drop ini block .ini(NULL) gives ini({}) (Issue #523) Add function modelExtract() extract model lines allow modifying changing model piping simply assigning modified lines model(ui) <- newModifiedLines Add Algebraic mu-referencing detection (mu2) allows express mu-referenced covariates : Instead previously required (log.WT.div.70.5 calculated data) mu expressions. ui now information allow transformation data internally transformation old mu-referencing style run optimization. Allow steady state infusions duration infusion greater inter-dose interval solved. Solves now possibly print information issuing “solve system” error function rxSetPipingAuto() now exported change way affect piping individual setup Allow covariates specified model piping, mod %>% model(=var+3, cov=\"var\") add \"var\" covariate. calculating confidence intervals rxode2 simulated objects can now use stratify simulation summary. example can now stratify gender race : confint(sim, \"sim\", =c(\"race\", \"gender\")) calculating intervals rxode2 simulated objects can now use ci=FALSE calculates default intervals without bands percentiles; can also choose match secondary bands limits levels use ci=0.99 instance new function introduced meanProbs() calculates mean expected confidence bands either normal t distribution related new function introduced calculates mean confidence bands Bernoulli/Binomial distribution (binomProbs()) calculating intervals rxode2 simulated objects can also use mean=TRUE use mean first level confidence using meanProbs(). confidence interval can override n used confidence interval using n=#. can also change prediction interval instead using pred=TRUE. Also calculating intervals rxode2 simulated object can also use mean=\"binom\" use binomial distributional information (ci) first level confidence using binomProbs(). confidence interval can override n used confidence interval using n=#. can also change prediction interval instead using pred=TRUE. pred=TRUE can override number predicted samples m=# plotting confint derived intervals rxode2 simulation, can now subset based simulated value like plot(ci, Cc) plot variable Cc summarized even also summarized eff (instance). rxode2 ui compressed ui object, can modify ini block $ini <- modify model block $model <-. equivalent ini(model) <- model(model) <-, respectively. Otherwise, object added user defined components function (ie $meta). object uncompressed, simply assigns environment instead (just like ). printing meta information happens lotri compatible matrix, use lotri express instead default R expression. Allow character vectors converted expressions piping (#552) rxAppendModel() now take arbitrary number models append together; also better handling models duplicate parameters models without ini() blocks (#617 / #573 / #575). keep now also keep attributes input data (special handling levels); means broader variety classes kept carrying information (example ordered factors, data frame columns unit information, etc) Piping arguments append ini() model() aligned perform similarly. Therefore ini(append=) now can take expressions instead simply strings model(append=) can also take strings. Also model piping now can specify integer line number modified just like ini() . Also model(append=FALSE) changed model(append=NULL). behavior don’t specify argument, behavior changed align ini() piping. Hence model(append=TRUE) append model(append=FALSE) now pre-pend model. model(append=NULL) modify lines like behavior ini(append=NULL). default model(line) modifying line -place still applies. breaking change, code perform . Labels can now dropped ini(param=label(NULL)). Also parameters can dropped idiom model(param=NULL) ini(param=NULL) changes parameter covariate align idiom dropping parameters rxRename refactored run faster","code":"cl <- exp(tcl + eta.cl + wt_cl * log(WT/70.5)) cl <- exp(tcl + eta.cl + wt_cl * log.WT.div.70.5)"},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"Internal new features","title":"rxode2 2.1.0","text":"Add .model() list expressions, implies model(ui) <- ui$lstExpr assign model components. also robustly work character vectors Simulated objects rxSolve now can access model variables $rxModelVars Simulation models UI now use rxerr.endpoint instead err.endpoint sigma residual error. align convention internally generated variables start rx nlmixr Sorting uses timsort now, upgraded latest version Morwenn","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-1-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.1.0","text":"Simulating/solving functions/ui now prefers params omega sigma model (#632) Piping add constants initial estimates constants specified model({}) block (like k <- 1), ini block Bug fix geom_amt() aes transformation x Bug fix covariate updates may affect multiple compartment models (like issue #581)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"maintenance-fixes-2-1-0","dir":"Changelog","previous_headings":"","what":"Maintenance fixes","title":"rxode2 2.1.0","text":"Modify plot code work development xgxr","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2014","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.14","title":"rxode2 2.0.14","text":"CRAN release: 2023-10-07 CRAN requested FORTRAN kind changed portable; commented code, simply removed comment. Bug-fix geom_amt(); also now uses linewidth least ggplot2 3.4.0 documentation cleaned rxode2 2.0.13","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2013","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.13","title":"rxode2 2.0.13","text":"CRAN release: 2023-04-22","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-13","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.13","text":"bug fixed zeroRe() function works correlated omega values. bug fixed rename() function works initial conditions compartments (cmt(0))","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-13","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.13","text":"new function zeroRe() allows simple setting omega /sigma values zero model (#456) Diagonal zeros omega sigma matrices treated zeros model. corresponding omega sigma matrices drop columns/rows diagonals zero create new omega sigma matrix simulation. idiom NONMEM uses simulation matrices. Add ability pipe model estimates another model parentModel %>% ini(modelWithNewEsts) Add ability append model statements piping using %>% model(x=3, append=d/dt(depot)), still supports appending append=TRUE pre-pending append=NA (default replace lines append=FALSE) rxSolve’s keep argument now maintain character factor classes input data class (#190) Parameter labels may now modified via ini(param = label(\"text\")) (#351). Parameter order may modified via append argument ini() piping model. example, ini(param = 1, append = 0) ini(param = label(\"text\"), append = \"param2\") (#352).","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-changes-2-0-13","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"rxode2 2.0.13","text":"lower/upper bounds outside required bounds, adjustment displayed. initial values piped break model’s boundary condition reset boundary unbounded message boundary reset. Added .rxUi() function convert following objects rxUi objects: rxode2, rxModelVars, function. Converting nlmixr2 fits rxUi placed s3 method corresponding package. assertRxUi(x) now uses .rxUi() can extended outside rxode2/nlmixr2. rxode2 now supports addl ss doses Moved rxDerived rxode2parse (re-exported ). Added test transit compartment solving absence dosing transit compartment (fixed rxode2parse solving tested ) Using ini() without arguments rxode2 type function return ini() block. Also added method ini(mod) <- iniBlock modify ini block wish. iniBlock expression. Using model() without arguments rxode2 type function return model() block. Also added new method model(mod) <- modelBlock Added new method rxode2(mod) <- modFunction allows replacing function new function maintaining meta information ui (like information comes nonmem2rx models). modFunction body new function, new function, new rxode2 ui. rxode2 ui objects now $sticky item inside internal (compressed) environment. $sticky tells variables keep “significant” change ui piping sort model change. respected model piping, modifying model ini(mod)<-, model(mod)<-, rxode2(mod)<-. significant change change model block, change number estimates, change value estimates. Estimate bounds, weather estimate fixed estimate label changes considered significant. Added .ini() method convert various formats ini expression. used internally ini(mod)<-. want assign something new can convert ini expression, add method .ini(). Added .model() method convert various formats model expression. used internally model(mod)<-. want assign something new can convert model expression, add method .model().","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2011","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.11","title":"rxode2 2.0.11","text":"CRAN release: 2022-11-01 Give meaningful error ‘rxode2’ ui models error expressions Break ABI requirement roxde2() rxode2parse() new rxode2parse fix sprintf exclusion shown CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2010","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.10","title":"rxode2 2.0.10","text":"CRAN release: 2022-10-20 Time invariant covariates can now contain ‘NA’ values. column ‘NA’ entire id, now ‘rxode2’ warns id column instead just id. fix CRAN issues ‘nlmixr2est’, make version dependency explicit.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-209","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.9","title":"rxode2 2.0.9","text":"CRAN release: 2022-10-19 Remove log likelihoods ‘rxode2’ reduce compilation time increase maintainability ‘rxode2’. transferred ‘rxode2ll’ (requested CRAN). Remove parsing ‘rxode2’ solved linear compartment code move ‘rxode2parse’ reduce compilation time (requested CRAN). Remove random number generation ‘rxode2’ move ‘rxode2random’ reduce compilation time (requested CRAN). Remove event table translation generation ‘rxode2’ move ‘rxode2et’ reduce compilation time (requested CRAN). Change rxode2 ui object compressed, serialized object default. reduce C stack size problem occurs many environments R. Warn ignoring items simulations Export method change ‘rxode2’ solve methods internal integers Bug fix time invariant covariates identified time variant covariate individual’s time starts 0.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-208","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.8","title":"rxode2 2.0.8","text":"CRAN release: 2022-09-23","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"breaking-changes-2-0-8","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"rxode2 2.0.8","text":"rxgamma now allows rate input. aligns internal rxode2 version rxgamma clarifies used. also aligned llikGamma function used generalized likelihood estimation. ui cauchy simulations now follow ui normal t distributions, means can combine transformations. cauchy t distribution one degree freedom. ui dnorm() norm() longer equivalent add(). Now allows use loglik llikNorm() instead standard nlmixr2 style focei likelihood. done adding dnorm() end line. also means dnorm() now doesn’t take arguments. Vandercorput normal removed (non-random number generator)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-8","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.8","text":"Allow models nlmixr2 form without ini({}) block Allow model piping omega matrix f %>% ini(omegaMatrix) Standard models created rxode2() can piped model function Families log-likelihood added rxode2 mixed likelihood nonlinear mixed effects models may specified run. memory footprint rxode2 solving reduced Piping now allow named strings (issue #249)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-8","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.8","text":"rxode2’s symengine convert sqrt(2) M_SQRT_2 M_SQRT2. fixed; noticeable nlmixr2 log-likelihood estimation methods rxode2 treats DV non-covariate etTran (last time duplicate model). noticeable nlmixr2 log-likelihood estimation methods.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.8","text":"new flag (rxFlag) created tell rxode2 solving process . useful debugging. outputting variable always 11 calculating left handed equations. using conjunction printf() methods, double variable formatted \"%f\". additional option fullPrint added rxode2() allows rprintf() used almost rxode2() steps (inductive linearization matrix exponential exception ) instead just integration ddt step. defaults FALSE.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-207","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.7","title":"rxode2 2.0.7","text":"CRAN release: 2022-05-17 Removed accidental ^S news requested CRAN. Bug fix complicated mu-referencing. Change rxode2 md5 depend C/C++/Fortran code headers R files. way binary compatibility nlmixr2est rxode2, new version nlmixr2est need submitted CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-206","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.6","title":"rxode2 2.0.6","text":"CRAN release: 2022-05-09","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"solving-controls-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Solving controls","title":"rxode2 2.0.6","text":"options rxControl rxSolve strict. camelCase now always used. Old options like add.cov transit_abs longer supported, addCov supported. new option, sigdig added rxControl(), controls common significant figure options like atol, rtol, ssAtol, ssRtol, single option.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"simulations-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Simulations","title":"rxode2 2.0.6","text":"simulations, $simulationSigma now assumes diagonal matrix. sigma values assumed standard normal, uncorrelated endpoints. Simulation uncertainty still draw identity diagonal matrix Parallel solving now seeds simulation per individual based initial seed plus simulation id. makes simulation reproducible regardless number cores running simulation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-breaking-changes-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Other breaking changes","title":"rxode2 2.0.6","text":"Solved objects now access underlying rxode model $rxode2 instead $rxode Since change names, rxode2, rxode RxODE perform function. Options changed RxODE.syntax rxode2.syntax. Assigning states rxode2.syntax.assign.state (RxODE.syntax.assign.state) longer supported. Enforcing “pure” assignment syntax = syntax longer supported rxode2.syntax.assign longer supported (RxODE.syntax.assign). Since R supports ** exponentiation operator, pure syntax without ** can longer enabled. Hence rxode2.syntax.star.pow (RxODE.syntax.star.pow) longer effect. “pure” syntax requires semicolon can longer enabled. Therefore rxode2.syntax.require.semicolon (RxODE.syntax.require.semicolon) longer effect. syntax state(0) can longer turned . rxode2.syntax.allow.ini0 (RxODE.syntax.allow.ini0) removed. Variable dots variable state names like state.name works R. Therefore, “pure” syntax excluding . values variables enforced rxode2.syntax.allow.dots (RxODE.syntax.allow.dots). mnemonic et(rate=model) et(dur=model) mnemonics removed. rate needs set -1 -2 manually instead. function rxode2Test() removed favor using testthat directly. Transit compartments need use new evid, evid=7. said, transitAbs option longer supported. ID columns input parameter data frames sorted merged original dataset ; underlying assumption ID order now checked outside rxode2(). Note event data frame still sorted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"additional-features-2-0-6","dir":"Changelog","previous_headings":"","what":"Additional features","title":"rxode2 2.0.6","text":"UI functions nlmixr ported work rxode2 directly. rxModelVars({}) now supported. may now combine 2 models rxode2 rxAppendModel(). fact, long first value rxode2 evaluated ui model, can use c/rbind bind 2 models together. may now append model lines piping using %>% model(lines, append=TRUE) can also pre-pend lines %>% model(lines, append=NA) may now rename model variables, states defined parameters %>% rxRename(new=old) dplyr loaded: %>% rename(new=old) can fix parameters %>% ini(tcl=fix) %>% ini(fix(tcl)) well unfix parameters %>% ini(tcl=unfix) %>% ini(unfix(tcl))","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-changes-2-0-6","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"rxode2 2.0.6","text":"Strict R headers enforced places Since many changes incompatible, version renamed rxode2 rxode2() printout longer uses rules centered headings make display better larger variety systems.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-6","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.6","text":"tad() related time features reset start infusion (opposed starting beginning end infusion)","code":""}] +[{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"user-defined-functions","dir":"Articles","previous_headings":"","what":"User Defined Functions","title":"Integrating User Defined Functions into rxode2","text":"defining models may wished write small R function make function integrate rxode2 somehow. article discusses 2 ways : R-based user function can loaded simple function certain circumstances translated C run efficiently C function define integrate code","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()`"},{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"r-based-user-functions","dir":"Articles","previous_headings":"","what":"R based user functions","title":"Integrating User Defined Functions into rxode2","text":"R-based user function convenient include ODE, slower done written C , C++ compiled language. requested github appropriate example; However, use simple example simply illustrate concepts. Now ODE compiled R functions called solving ODE. Since calling R, forces parallization turned since R single-threaded. also takes time solve since shuttling back forth R C. Lets see simple function performs: terribly bad, even though shuffling R C. can make better converting functions C: C version almost twice fast R version. may noticed conversion also created C versions first derivative. done automatically gives just C versions function, C versions derivatives registers rxode2. allows C versions work rxode2 nlmixr2 models. function setup advance allow type conversion. general derivatives calculated return() statement user defined function. means simply let R return last value instead explictly calling return(). Many people prefer method coding. Even return function, function converted C. github issue, used function convert derivatives: still helpful functions early returns, nlmixr2 models requiring derivatives calculated non-optimized finite differences occurs. gets internals rxode2 nlmixr2 can see easily calculating derivatives: Whereas originally defined function newAbs() use new derivatives calculated well: circumstances, conversion C possible, though can still use R function. requirements R functions integrated rxode2 system: function must set number arguments, variable arguments like f(…) currently allowed. function given argument single number, function return single number requirements met can use R function rxode2. Additional requirements conversion C include: functions use within R function must understood available rxode2. Practically speaking fun2() refers fun1(), fun1() must changed C code available rxode2 changing function fun2() C. functions can include /else assignments simple return statements (either returning value value line ). Special R control structures functions (like lapply) present. function refer package functions mentioned, return() statement present, derivative C functions rxode2’s derivative table updated.","code":"newAbs <- function(x) { if (x < 0) { -x } else { x } } f <- rxode2({ a <- newAbs(time) }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ e <- et(-10, 10, length.out=40) mb1 <- microbenchmark::microbenchmark(withoutC=suppressWarnings(rxSolve(f,e))) library(ggplot2) autoplot(mb1) + rxTheme() # Create C functions automatically with `rxFun()` rxFun(newAbs) #> → finding duplicate expressions in d(newAbs)/d(x)... #> [====|====|====|====|====|====|====|====|====|====] 0:00:00 #> → optimizing duplicate expressions in d(newAbs)/d(x)... #> [====|====|====|====|====|====|====|====|====|====] 0:00:00 #> converted R function 'newAbs' to C (will now use in rxode2) #> converted R function 'rx_newAbs_d_x' to C (will now use in rxode2) #> Added derivative table for 'newAbs' # Recompile to use the C functions # Note it would recompile anyway if you didn't do this step, # it just makes sure that it doesn't recompile every step in # the benchmark f <- rxode2({ a <- newAbs(time) }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ mb2 <- microbenchmark::microbenchmark(withC=rxSolve(f,e, cores=1)) mb <- rbind(mb1, mb2) autoplot(mb) + rxTheme() + xgxr::xgx_scale_y_log10() #> Scale for y is already present. #> Adding another scale for y, which will replace the existing scale. print(mb) #> Unit: milliseconds #> expr min lq mean median uq max neval #> withoutC 6.867416 6.970227 7.706955 7.084244 7.519517 12.342958 100 #> withC 1.961846 2.025228 2.333243 2.122846 2.614116 6.562157 100 # Light f_R <- function(actRad, k_0, a_k) { photfac <- a_k * actRad + k_0 if (photfac > 1) { photfac = 1 } return(photfac) } rxFun(f_R) #> function contains return statement; derivatives not calculated #> converted R function 'f_R' to C (will now use in rxode2) rxFromSE(\"Derivative(f_R(actRad, k_0, a_k),k_0)\") #> [1] \"(f_R(actRad,(k_0)+6.05545445239334e-06,a_k)-f_R(actRad,k_0,a_k))/6.05545445239334e-06\" rxFromSE(\"Derivative(newAbs(x),x)\") #> [1] \"rx_newAbs_d_x(x)\""},{"path":"https://nlmixr2.github.io/rxode2/articles/Integrating-User-Defined-Functions-into-rxode2.html","id":"c-based-functions","dir":"Articles","previous_headings":"","what":"C based functions","title":"Integrating User Defined Functions into rxode2","text":"can add C functions directly rxode2 well using rxFun(): wanted also use C functions expressions derivatives using rxD() function: Removing function rxRmFun() also remove derivative table:","code":"fun <- \" double fun(double a, double b, double c) { return a*a+b*a+c; } \" ## C-code for function rxFun(\"fun\", c(\"a\", \"b\", \"c\"), fun) rxD(\"fun\", list( function(a, b, c) { # derivative of arg1: a paste0(\"2*\", a, \"+\", b) }, function(a, b, c) { # derivative of arg2: b return(a) }, function(a, b, c) { # derivative of arg3: c return(\"0.0\") } )) rxRmFun(\"fun\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-model","dir":"Articles","previous_headings":"","what":"Modifying model","title":"Modifying Models","text":"tasks might want overall model: Change line model Add line model Rename parameters model Combine different models Create functions add certain model features model go model piping functions can use modify models even add functions modify models. cover model modification functions nlmixr2lib","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-a-model-line","dir":"Articles","previous_headings":"Modifying model","what":"Modifying a model line","title":"Modifying Models","text":"opinion, modifying lines model likely common task modifying model. may wish modify model subject variability add covariate effects. begin course need base model modify. Let’s start simple PK example, using single-dose theophylline dataset generously provided Dr. Robert . Upton University California, San Francisco: believed enough absorption support subject variability can change line drop subject modifying single line. simply type line want model piping expression: expected, line modified. Also can notice initial estimate subject variability dropped since longer part model. reason wanted add back model can modify model add back: modification, eta.ka automatically assumed subject variability parameter. Also since eta.ka mu-referenced rxode2 points . automatic detection eta.ka name follows convention. Parameters starting ending following names assumed subject variability parameters: eta (NONMEM convention) ppv (per patient variability) psv (per subject variability) iiv (inter-individual variability) bsv (subject variability) bpv (patient variability) functioning correctly can change covariate can add type initial estimate later: seen , eta.ka model assumed data-input parameter covariate instead estimated parameter. can also note WT automatically recognized covariate covWt automatically recognized covariate parameter. general covariates typical/population parameters automatically converted estimated parameters based parameter name starting (ending ): tv (typical value) t (also typical value) pop (population parameter) err (error parameter) eff (effect parameter) cov (covariate parameters) notable exceptions parameters like (wt, sex crcl) assumed covariates. don’t want automatic variable conversion, can also use auto=FALSE: case additional parameters (eta.ka, WT, covWt) assumed parameters dataset.","code":"one.compartment <- function() { ini({ tka <- 0.45; label(\"Ka\") tcl <- 1; label(\"Cl\") tv <- 3.45; label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } mod <- one.compartment |> model(ka <- exp(tka)) #> ! remove between subject variability `eta.ka` print(mod) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod2 <- mod |> model(ka <- tka * exp(eta.ka)) #> ℹ add between subject variability `eta.ka` and set estimate to 1 print(mod2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v eta.ka #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.ka 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.ka ~ 1 #> }) #> model({ #> ka <- tka * exp(eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod2 <- mod |> model(ka <- tka * exp(eta.ka) + WT * covWt, cov=\"eta.ka\") #> ℹ add covariate `eta.ka` (as requested by cov option) #> ℹ add covariate `WT` #> ℹ add population parameter `covWt` and set estimate to 1 print(mod2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd covWt #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> covWt <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } mod3 <- mod |> model(ka <- tka * exp(eta.ka) + WT * covWt, auto=FALSE) #> ℹ add covariate `eta.ka` #> ℹ add covariate `WT` #> ℹ add covariate `covWt` print(mod3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"note-on-automatic-detection-of-variables","dir":"Articles","previous_headings":"Modifying model","what":"Note on automatic detection of variables","title":"Modifying Models","text":"automatic detection variables convenient many models may suit style; like can always change using options(): option disabled, variables assumed covariates promote population parameters ini block last example option enabled none variables starting t added model course use turn back : can use withr::with_options(list(rxode2.autoVarPiping=FALSE), ...) turn option temporarily. don’t like defaults changing variables change well rxSetPipingAuto() example wanted variables starting ending te can change : requested population parameters starting te added ini block. want reset defaults simply call rxSetPipingAuto() without arguments:","code":"options(rxode2.autoVarPiping=FALSE) mod7 <- mod3 |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) print(mod7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- tka * exp(eta.ka) + WT * covWt #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } options(rxode2.autoVarPiping=TRUE) mod8 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1 print(mod8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } rxSetPipingAuto(thetamodelVars = rex::rex(\"te\")) mod9 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 print(mod9) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } rxSetPipingAuto() mod10 <- mod |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"adding-model-lines","dir":"Articles","previous_headings":"Modifying model","what":"Adding model lines","title":"Modifying Models","text":"three ways insert lines rxode2/nlmixr2 model. can add lines end model, expression beginning model controlled append option. Let’s assume two different assays run compound noticed different variability. can modify model adding lines end model using append=TRUE: Perhaps instead may want add indirect response model addition concentrations, can choose add : append=lhsVar lhsVar left handed variable want insert new lines: last type insertion may wish add lines beginning model using append=FALSE:","code":"mod4 <- mod |> model({ cp2 <- cp cp2 ~ lnorm(lnorm.sd) }, append=TRUE) #> ℹ add residual parameter `lnorm.sd` and set estimate to 1 print(mod4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd lnorm.sd #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.cl eta.v #> eta.cl 0.3 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=3 dvid='cp' or dvid=1 #> 2 cp2 ~ … cmt='cp2' or cmt=4 dvid='cp2' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tcl eta.cl id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> lnorm.sd <- c(0, 1) #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> cp2 <- cp #> cp2 ~ lnorm(lnorm.sd) #> }) #> } mod5 <- mod |> model({ PD <- 1-emax*cp/(ec50+cp) ## effect(0) <- e0 kin <- e0*kout d/dt(effect) <- kin*PD -kout*effect }, append=d/dt(center)) mod6 <- mod5 |> model({ emax <- exp(temax) e0 <- exp(te0 + eta.e0) ec50 <- exp(tec50) kin <- exp(tkin) kout <- exp(tkout) }, append=FALSE) #> ℹ promote `temax` to population parameter with initial estimate 1 #> ℹ promote `te0` to population parameter with initial estimate 1 #> ℹ promote `eta.e0` to between subject variability with initial estimate 1 #> ℹ promote `tec50` to population parameter with initial estimate 1 #> ℹ promote `tkin` to population parameter with initial estimate 1 #> ℹ promote `tkout` to population parameter with initial estimate 1 print(mod6) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"remove-lines-in-the-model","dir":"Articles","previous_headings":"Modifying model","what":"Remove lines in the model","title":"Modifying Models","text":"lines model can removed one 2 ways either use -param param <- NULL model piping:","code":"mod7 <- mod6 |> model(-emax) #> ! remove population parameter `temax` print(mod7) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # Equivalently mod8 <- mod6 |> model(emax <- NULL) #> ! remove population parameter `temax` print(mod8) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd te0 tec50 tkin tkout #> 0.45 1.00 3.45 0.70 1.00 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 effect #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tkout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> PD <- 1 - emax * cp/(ec50 + cp) #> effect(0) <- e0 #> kin <- e0 * kout #> d/dt(effect) <- kin * PD - kout * effect #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"rename-parameters-in-a-model","dir":"Articles","previous_headings":"Modifying model","what":"Rename parameters in a model","title":"Modifying Models","text":"may want rename parameters model, easy rxRename(). dplyr loaded can even replace rename(). semantics similar two functions, assigning newVar=oldVar. example: can see every instance variable named model renamed inside model ini block. completeness can see dplyr verb (since S3 method):","code":"mod11 <- mod10 |> rxRename(drug1kout=kout, tv.drug1kout=tkout) print(mod11) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 #> 0.45 1.00 3.45 0.70 1.00 1.00 #> tec50 tkin tv.drug1kout #> 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tv.drug1kout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> drug1kout <- exp(tv.drug1kout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union mod12 <- mod10 |> rename(drug1kout=kout, tv.drug1kout=tkout) print(mod12) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd temax te0 #> 0.45 1.00 3.45 0.70 1.00 1.00 #> tec50 tkin tv.drug1kout #> 1.00 1.00 1.00 #> #> Omega ($omega): #> eta.cl eta.v eta.e0 #> eta.cl 0.3 0.0 0 #> eta.v 0.0 0.1 0 #> eta.e0 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 te0 eta.e0 id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Ka\") #> tcl <- 1 #> label(\"Cl\") #> tv <- 3.45 #> label(\"V\") #> add.sd <- c(0, 0.7) #> temax <- 1 #> te0 <- 1 #> tec50 <- 1 #> tkin <- 1 #> tv.drug1kout <- 1 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> eta.e0 ~ 1 #> }) #> model({ #> emax <- exp(temax) #> e0 <- exp(te0 + eta.e0) #> ec50 <- exp(tec50) #> kin <- exp(tkin) #> drug1kout <- exp(tv.drug1kout) #> ka <- exp(tka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"combine-different-models","dir":"Articles","previous_headings":"Modifying model","what":"Combine different models","title":"Modifying Models","text":"can also combine different models rxAppendModel(). general need variables common combine. generally want models link . example pk pd model done renaming cp first model ceff second model: get error try combine models without variables common: want combine models without respecting variables common, can use common=FALSE:","code":"ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl tv <- exp(3.45); # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } idr <- function() { ini({ tkin <- log(1) tkout <- log(1) tic50 <- log(10) gamma <- fix(1) idr.sd <- 1 }) model({ kin <- exp(tkin) kout <- exp(tkout) ic50 <- exp(tic50) d/dt(eff) <- kin - kout*(1-ceff^gamma/(ic50^gamma+ceff^gamma)) eff ~ add(idr.sd) }) } rxAppendModel(ocmt %>% rxRename(ceff=cp), idr) #> ℹ parameter labels from comments will be replaced by 'label()' #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 ceff ~ … cmt='ceff' or cmt=4 dvid='ceff' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> ceff <- center/v #> ceff ~ add(add.sd) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> } try(rxAppendModel(ocmt, idr)) #> ℹ parameter labels from comments will be replaced by 'label()' #> Error : not all the models have variables in common (use `common=FALSE` to allow this) mod2 <- rxAppendModel(ocmt, idr, common=FALSE) |> model(ceff=cp, append=ic50) # here we add the translation after the #> ℹ parameter labels from comments will be replaced by 'label()' # ic50 line to make it reasonable print(mod2) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=4 dvid='cp' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> ceff <- cp #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"creating-more-complex-model-modification-functions","dir":"Articles","previous_headings":"Modifying model","what":"Creating more complex model modification functions","title":"Modifying Models","text":"pretty flexible, may want even , helper functions help create functions . discuss extract model function update . Lets start model: Lets assume moment want remove eta cl. First probably want get model lines. can modelExtract(): Now want worry cl line, can subset : Now wish change line “cl <- exp(tcl+eta.cl)” Note functions modify ini({}) block. may modify ini block first make valid rxode2/nlmixr2 model. particular case, using model piping easier, simply demonstrates two different way extract model information way add information final model. methods can tricky using model parsed correctly. means make sure parameters endpoints follow correct rules","code":"f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v }) } totLines <- modelExtract(f, endpoint=NA) # endpoints should be included print(totLines) #> [1] \"ka <- exp(tka + eta.ka)\" #> [2] \"cl <- exp(tcl)\" #> [3] \"v <- exp(tv + eta.v)\" #> [4] \"d/dt(depot) <- -ka * depot\" #> [5] \"d/dt(center) <- ka * depot - cl/v * center\" #> [6] \"cp <- center/v\" clLine <- modelExtract(f, cl, lines=TRUE) line <- attr(clLine, \"lines\") totLines[line] <- \"cl <- exp(tcl+eta.cl)\" # For now lets remove the entire `ini` block (so you don't have to # worry about syncing parameters). # ini(f) <- NULL model(f) <- totLines #> ℹ parameter labels from comments are typically ignored in non-interactive mode #> ℹ Need to run with the source intact to parse comments print(f) #> function () #> { #> ini({ #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> }) #> } #> "},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"modifying-initial-estimates","dir":"Articles","previous_headings":"","what":"Modifying initial estimates","title":"Modifying Models","text":"common items want initial estimates : Fix/Unfix parameter Change initial condition values bounds Change initial condition type Change labels transformations Reorder parameters may wish create functions; discuss .","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"fixing-or-unfixing-a-parameter","dir":"Articles","previous_headings":"Modifying initial estimates","what":"Fixing or unfixing a parameter","title":"Modifying Models","text":"can fix model estimates two ways. first fix value whatever model function, done piping model parameter name (like tka) setting equal fix (%>% ini(tka=fix)). full example: can also fix parameter different value wish; similar can specify value fix inside fix pseudo-function follows: %>% ini(tka=fix(0.1)). fully worked example :","code":"f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 add.sd <- c(0, 0.7) eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v cp ~ add(add.sd) }) } f2 <- f |> ini(tka=fix) #> ℹ fix `tka` to `0.45` print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.45) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f <- function() { ini({ tka <- 0.45 tcl <- 1 tv <- 3.45 add.sd <- c(0, 0.7) eta.ka ~ 0.6 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl/v * center cp <- center/v cp ~ add(add.sd) }) } f2 <- f |> ini(tka=fix(0.1)) #> ℹ fix `tka` to `0.45` #> ℹ change initial estimate of `tka` to `0.1` print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"unfixing-parameters","dir":"Articles","previous_headings":"Modifying initial estimates","what":"Unfixing parameters","title":"Modifying Models","text":"unfix parameters similarly fixing. Instead using fix keyword, use unfix keyword. unfix parameter (keeping value) pipe model using (|> ini(tka=unfix)). Starting fixed model fully worked example : can also unfix change initial estimate ini(parameter=unfix(newEst)):","code":"print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f2 |> ini(tka=unfix) #> ℹ unfix `tka` keeping initial estimate `0.1` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } print(f2) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- fix(0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f2 |> ini(tka=unfix(10)) #> ℹ unfix `tka` keeping initial estimate `0.1` #> ℹ change initial estimate of `tka` to `10` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 10.00 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 10 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"multiple-parameter-assignment","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Multiple parameter assignment","title":"Modifying Models","text":"can also assign multiple parameters providing : vector/list multiple lines piped ini() block Using covariance matrix case vector can specify pipe model. example: can also added multiple lines commas separating estimates: also use matrix specify covariance:","code":"ini1 <- c(tka=0.1, tcl=1, tv=3) f4 <- f |> ini(ini1) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # or equivalently ini1 <- list(tka=0.1, tcl=1, tv=3) f4a <- f |> ini(ini1) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # commas separating values: f4 <- f |> ini(tka=0.1, tcl=1, tv=3) #> ℹ change initial estimate of `tka` to `0.1` #> ℹ change initial estimate of `tcl` to `1` #> ℹ change initial estimate of `tv` to `3` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.1 1.0 3.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # multiple lines in {} f4 <- f |> ini({ tka <- 0.2 tcl <- 2 tv <- 6 }) #> ℹ change initial estimate of `tka` to `0.2` #> ℹ change initial estimate of `tcl` to `2` #> ℹ change initial estimate of `tv` to `6` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.2 2.0 6.0 0.7 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.2 #> tcl <- 2 #> tv <- 6 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } ome <- lotri(eta.ka + eta.v ~ c(0.6, 0.01, 10.1)) f4 <- f |> ini(ome) #> ℹ change initial estimate of `eta.ka` to `0.6` #> ℹ add covariance between `eta.v` and `eta.ka` with initial estimate `0.01` #> ℹ change initial estimate of `eta.v` to `10.1` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.60 0.01 #> eta.v 0.01 10.10 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka + eta.v ~ c(0.6, 0.01, 10.1) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # or equavialtly use the lotri-type syntax for the omega: f4 <- f |> ini(eta.ka + eta.v ~ c(0.6, 0.01, 0.2)) #> ℹ change initial estimate of `eta.ka` to `0.6` #> ℹ add covariance between `eta.v` and `eta.ka` with initial estimate `0.01` #> ℹ change initial estimate of `eta.v` to `0.2` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.60 0.01 #> eta.v 0.01 0.20 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka + eta.v ~ c(0.6, 0.01, 0.2) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"single-parameter-assignment","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Single parameter assignment","title":"Modifying Models","text":"simplest way change initial parameter estimates simply use ini(parameter=newValue). can also use <- ~ change value: fully worked example showing three types initial value modification : can change bounds like model specification using numeric vector c(low, estimate) c(low, estimate, hi). worked example: Note changing parameters default values might show parameter printout:","code":"f3 <- f |> ini(tka <- 0.1) #> ℹ change initial estimate of `tka` to `0.1` f4 <- f |> ini(tka=0.1) #> ℹ change initial estimate of `tka` to `0.1` f5 <- f |> ini(tka ~ 0.1) #> ℹ change initial estimate of `tka` to `0.1` print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1, 0.2)) #> ℹ change initial estimate (0.1) and upper/lower bound (0 to 0.2) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1, 0.2) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1)) #> ℹ change initial estimate (0.1) and lower bound (0) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f3 <- f |> ini(tka <- c(0, 0.1, 0.2)) #> ℹ change initial estimate (0.1) and upper/lower bound (0 to 0.2) of `tka` print(f3) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- c(0, 0.1, 0.2) #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Now reassign f4 <- f3 |> ini(tka <- c(-Inf, 0.1, Inf)) #> ℹ change initial estimate (0.1) and upper/lower bound (-Inf to Inf) of `tka` print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.10 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.1 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-types","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter types","title":"Modifying Models","text":"can change parameter type two operators either using -par convert parameter covariate ~par toggle population individual parameters. example 3:","code":"# Switch population parameter to between subject variability parameter: f4 <- f |> ini( ~ tcl) #> ℹ convert 'tcl' from population parameter to between subject variability print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v tcl #> eta.ka 0.6 0.0 0 #> eta.v 0.0 0.1 0 #> tcl 0.0 0.0 1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> tcl ~ 1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Switch back to population parameter f5 <- f4 |> ini( ~ tcl) #> ℹ convert 'tcl' from between subject variability to population parameter print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd tcl #> 0.45 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> tcl <- 1 #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # Change the variable to a covariate parameter (ie it doesn't have an # initial estimate so remove it with the `-` operator): f6 <- f4 |> ini(-tcl) #> ℹ changing between subject variability parameter 'tcl' to covariate parameter print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # You can change the covariate or remove the parameter estimate by # `tcl <- NULL`: f6 <- f4 |> ini(tcl <- NULL) #> ℹ changing between subject variability parameter 'tcl' to covariate parameter print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } # to add it back as a between subject variability or population # parameter you can pipe it as follows: f7 <- f6 |> ini(tcl=4) #> ℹ promote `tcl` to population parameter with initial estimate 4 #> ℹ change initial estimate of `tcl` to `4` print(f7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd tcl #> 0.45 3.45 0.70 4.00 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> tcl <- 4 #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f8 <- f6 |> ini(tcl ~ 0.1) #> ℹ promote `tcl` to between subject variability with initial estimate 0.1 #> ℹ change initial estimate of `tcl` to `0.1` print(f8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tv add.sd #> 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v tcl #> eta.ka 0.6 0.0 0.0 #> eta.v 0.0 0.1 0.0 #> tcl 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> tcl ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-labels","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter labels","title":"Modifying Models","text":"want change/add parameter label assign parameter label(\"label add\"). example: can also change order performing operations: want remove labels can remove ini(par=label(NULL)); example:","code":"f4 <- f |> ini(tka=label(\"Typical Ka (1/hr)\")) print(f4) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Typical Ka (1/hr)\") #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f5 <- f |> ini(tka=label(\"Typical Ka (1/hr)\"), append=tcl) print(f5) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tcl tka tv add.sd #> 1.00 0.45 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tcl <- 1 #> tka <- 0.45 #> label(\"Typical Ka (1/hr)\") #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f6 <- f |> ini(tka=label(NULL)) print(f6) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"changing-parameter-transformations","dir":"Articles","previous_headings":"Modifying initial estimates > Changing the parameter values and possibly bounds","what":"Changing parameter transformations","title":"Modifying Models","text":"Back-transformations -ride back transformations nlmixr2 models. similar modification labels. use |> ini(tka=backTransform(exp)) add exponential back-transformation data: wish remove can also |> ini(tka=backTransform(NULL)):","code":"f7 <- f |> ini(tka=backTransform(exp)) print(f7) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> backTransform(\"exp\") #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> } f8 <- f |> ini(tka=backTransform(NULL)) print(f8) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.45 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/Modifying-Models.html","id":"more-granular-access-of-initial-conditions","dir":"Articles","previous_headings":"Modifying initial estimates","what":"More granular access of initial conditions","title":"Modifying Models","text":"Just like model() can modify underlying data frame represents ini() block. case simply change initial estimate first parameter (tka):","code":"f <- rxode2(f) ini <- f$iniDf print(ini) #> ntheta neta1 neta2 name lower est upper fix label backTransform #> 1 1 NA NA tka -Inf 0.45 Inf FALSE #> 2 2 NA NA tcl -Inf 1.00 Inf FALSE #> 3 3 NA NA tv -Inf 3.45 Inf FALSE #> 4 4 NA NA add.sd 0 0.70 Inf FALSE #> 5 NA 1 1 eta.ka -Inf 0.60 Inf FALSE #> 6 NA 2 2 eta.v -Inf 0.10 Inf FALSE #> condition err #> 1 #> 2 #> 3 #> 4 cp add #> 5 id #> 6 id ini$est[1] <- 7 ini(f) <- ini print(f) #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 7.00 1.00 3.45 0.70 #> #> Omega ($omega): #> eta.ka eta.v #> eta.ka 0.6 0.0 #> eta.v 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 7 #> tcl <- 1 #> tv <- 3.45 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"how-rxode2-assigns-compartment-numbers","dir":"Articles","previous_headings":"","what":"How rxode2 assigns compartment numbers","title":"Changing rxode2 compartment numbers","text":"rxode2 automatically assigns compartment numbers parsing. example, Mavoglurant PBPK model following model may used: look printout, can see rxode2 assigned compartment number(s) can also see classic rxode2 model. case use summary() function: case, Venous_Blood assigned compartment 15. Figuring can inconvenient also lead re-numbering compartment simulation estimation datasets. easy probably clearer specify compartment name, tools support compartment numbers. Therefore, way number compartment easily can lead less data modification multiple tools.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` pbpk <- function() { model({ KbBR = exp(lKbBR) KbMU = exp(lKbMU) KbAD = exp(lKbAD) CLint= exp(lCLint + eta.LClint) KbBO = exp(lKbBO) KbRB = exp(lKbRB) ## Regional blood flows # Cardiac output (L/h) from White et al (1968) CO = (187.00*WT^0.81)*60/1000 QHT = 4.0 *CO/100 QBR = 12.0*CO/100 QMU = 17.0*CO/100 QAD = 5.0 *CO/100 QSK = 5.0 *CO/100 QSP = 3.0 *CO/100 QPA = 1.0 *CO/100 QLI = 25.5*CO/100 QST = 1.0 *CO/100 QGU = 14.0*CO/100 # Hepatic artery blood flow QHA = QLI - (QSP + QPA + QST + QGU) QBO = 5.0 *CO/100 QKI = 19.0*CO/100 QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI) QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB ## Organs' volumes = organs' weights / organs' density VLU = (0.76 *WT/100)/1.051 VHT = (0.47 *WT/100)/1.030 VBR = (2.00 *WT/100)/1.036 VMU = (40.00*WT/100)/1.041 VAD = (21.42*WT/100)/0.916 VSK = (3.71 *WT/100)/1.116 VSP = (0.26 *WT/100)/1.054 VPA = (0.14 *WT/100)/1.045 VLI = (2.57 *WT/100)/1.040 VST = (0.21 *WT/100)/1.050 VGU = (1.44 *WT/100)/1.043 VBO = (14.29*WT/100)/1.990 VKI = (0.44 *WT/100)/1.050 VAB = (2.81 *WT/100)/1.040 VVB = (5.62 *WT/100)/1.040 VRB = (3.86 *WT/100)/1.040 ## Fixed parameters BP = 0.61 # Blood:plasma partition coefficient fup = 0.028 # Fraction unbound in plasma fub = fup/BP # Fraction unbound in blood KbLU = exp(0.8334) KbHT = exp(1.1205) KbSK = exp(-.5238) KbSP = exp(0.3224) KbPA = exp(0.3224) KbLI = exp(1.7604) KbST = exp(0.3224) KbGU = exp(1.2026) KbKI = exp(1.3171) ##----------------------------------------- S15 = VVB*BP/1000 C15 = Venous_Blood/S15 ##----------------------------------------- d/dt(Lungs) = QLU*(Venous_Blood/VVB - Lungs/KbLU/VLU) d/dt(Heart) = QHT*(Arterial_Blood/VAB - Heart/KbHT/VHT) d/dt(Brain) = QBR*(Arterial_Blood/VAB - Brain/KbBR/VBR) d/dt(Muscles) = QMU*(Arterial_Blood/VAB - Muscles/KbMU/VMU) d/dt(Adipose) = QAD*(Arterial_Blood/VAB - Adipose/KbAD/VAD) d/dt(Skin) = QSK*(Arterial_Blood/VAB - Skin/KbSK/VSK) d/dt(Spleen) = QSP*(Arterial_Blood/VAB - Spleen/KbSP/VSP) d/dt(Pancreas) = QPA*(Arterial_Blood/VAB - Pancreas/KbPA/VPA) d/dt(Liver) = QHA*Arterial_Blood/VAB + QSP*Spleen/KbSP/VSP + QPA*Pancreas/KbPA/VPA + QST*Stomach/KbST/VST + QGU*Gut/KbGU/VGU - CLint*fub*Liver/KbLI/VLI - QLI*Liver/KbLI/VLI d/dt(Stomach) = QST*(Arterial_Blood/VAB - Stomach/KbST/VST) d/dt(Gut) = QGU*(Arterial_Blood/VAB - Gut/KbGU/VGU) d/dt(Bones) = QBO*(Arterial_Blood/VAB - Bones/KbBO/VBO) d/dt(Kidneys) = QKI*(Arterial_Blood/VAB - Kidneys/KbKI/VKI) d/dt(Arterial_Blood) = QLU*(Lungs/KbLU/VLU - Arterial_Blood/VAB) d/dt(Venous_Blood) = QHT*Heart/KbHT/VHT + QBR*Brain/KbBR/VBR + QMU*Muscles/KbMU/VMU + QAD*Adipose/KbAD/VAD + QSK*Skin/KbSK/VSK + QLI*Liver/KbLI/VLI + QBO*Bones/KbBO/VBO + QKI*Kidneys/KbKI/VKI + QRB*Rest_of_Body/KbRB/VRB - QLU*Venous_Blood/VVB d/dt(Rest_of_Body) = QRB*(Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) }) } pbpk <- pbpk() print(pbpk) #> -- rxode2-based free-form 16-cmt ODE model ------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 Lungs #> 2 2 Heart #> 3 3 Brain #> 4 4 Muscles #> 5 5 Adipose #> 6 6 Skin #> 7 7 Spleen #> 8 8 Pancreas #> 9 9 Liver #> 10 10 Stomach #> 11 11 Gut #> 12 12 Bones #> 13 13 Kidneys #> 14 14 Arterial_Blood #> 15 15 Venous_Blood #> 16 16 Rest_of_Body #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + #> QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + #> QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + #> QGU * Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - #> QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + #> QSK * Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * #> Bones/KbBO/VBO + QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> }) #> } pbpk <- pbpk$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ summary(pbpk) #> rxode2 2.1.3 model named rx_0a5b43d0b1e7bff7f47de827bf0daaa5 model (ready). #> DLL: /tmp/RtmpPXkf2x/rxode2/rx_0a5b43d0b1e7bff7f47de827bf0daaa5__.rxd/rx_0a5b43d0b1e7bff7f47de827bf0daaa5_.so #> NULL #> #> Calculated Variables: #> [1] \"KbBR\" \"KbMU\" \"KbAD\" \"CLint\" \"KbBO\" \"KbRB\" \"CO\" \"QHT\" \"QBR\" #> [10] \"QMU\" \"QAD\" \"QSK\" \"QSP\" \"QPA\" \"QLI\" \"QST\" \"QGU\" \"QHA\" #> [19] \"QBO\" \"QKI\" \"QRB\" \"QLU\" \"VLU\" \"VHT\" \"VBR\" \"VMU\" \"VAD\" #> [28] \"VSK\" \"VSP\" \"VPA\" \"VLI\" \"VST\" \"VGU\" \"VBO\" \"VKI\" \"VAB\" #> [37] \"VVB\" \"VRB\" \"fub\" \"KbLU\" \"KbHT\" \"KbSK\" \"KbSP\" \"KbPA\" \"KbLI\" #> [46] \"KbST\" \"KbGU\" \"KbKI\" \"S15\" \"C15\" #> -- rxode2 Model Syntax -- #> rxode2({ #> param(lKbBR, lKbMU, lKbAD, lCLint, eta.LClint, lKbBO, lKbRB, #> WT) #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + QGU * #> Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + QSK * #> Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * Bones/KbBO/VBO + #> QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> })"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"changing-compartment-numbers-by-pre-declaring-the-compartments","dir":"Articles","previous_headings":"","what":"Changing compartment numbers by pre-declaring the compartments","title":"Changing rxode2 compartment numbers","text":"add compartments rxode2 model order desire simply need pre-declare compartments cmt. example specifying Venous_Blood Skin 1st 2nd compartments, respectively, simple: can see change simple printout first two compartments Venous_Blood followed Skin.","code":"pbpk2 <- function() { model({ ## Now this is the first compartment, ie cmt=1 cmt(Venous_Blood) ## Skin may be a compartment you wish to dose to as well, ## so it is now cmt=2 cmt(Skin) KbBR = exp(lKbBR) KbMU = exp(lKbMU) KbAD = exp(lKbAD) CLint= exp(lCLint + eta.LClint) KbBO = exp(lKbBO) KbRB = exp(lKbRB) ## Regional blood flows # Cardiac output (L/h) from White et al (1968)m CO = (187.00*WT^0.81)*60/1000; QHT = 4.0 *CO/100; QBR = 12.0*CO/100; QMU = 17.0*CO/100; QAD = 5.0 *CO/100; QSK = 5.0 *CO/100; QSP = 3.0 *CO/100; QPA = 1.0 *CO/100; QLI = 25.5*CO/100; QST = 1.0 *CO/100; QGU = 14.0*CO/100; QHA = QLI - (QSP + QPA + QST + QGU); # Hepatic artery blood flow QBO = 5.0 *CO/100; QKI = 19.0*CO/100; QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI); QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + QRB; ## Organs' volumes = organs' weights / organs' density VLU = (0.76 *WT/100)/1.051; VHT = (0.47 *WT/100)/1.030; VBR = (2.00 *WT/100)/1.036; VMU = (40.00*WT/100)/1.041; VAD = (21.42*WT/100)/0.916; VSK = (3.71 *WT/100)/1.116; VSP = (0.26 *WT/100)/1.054; VPA = (0.14 *WT/100)/1.045; VLI = (2.57 *WT/100)/1.040; VST = (0.21 *WT/100)/1.050; VGU = (1.44 *WT/100)/1.043; VBO = (14.29*WT/100)/1.990; VKI = (0.44 *WT/100)/1.050; VAB = (2.81 *WT/100)/1.040; VVB = (5.62 *WT/100)/1.040; VRB = (3.86 *WT/100)/1.040; ## Fixed parameters BP = 0.61; # Blood:plasma partition coefficient fup = 0.028; # Fraction unbound in plasma fub = fup/BP; # Fraction unbound in blood KbLU = exp(0.8334); KbHT = exp(1.1205); KbSK = exp(-.5238); KbSP = exp(0.3224); KbPA = exp(0.3224); KbLI = exp(1.7604); KbST = exp(0.3224); KbGU = exp(1.2026); KbKI = exp(1.3171); ##----------------------------------------- S15 = VVB*BP/1000; C15 = Venous_Blood/S15 ##----------------------------------------- d/dt(Lungs) = QLU*(Venous_Blood/VVB - Lungs/KbLU/VLU); d/dt(Heart) = QHT*(Arterial_Blood/VAB - Heart/KbHT/VHT); d/dt(Brain) = QBR*(Arterial_Blood/VAB - Brain/KbBR/VBR); d/dt(Muscles) = QMU*(Arterial_Blood/VAB - Muscles/KbMU/VMU); d/dt(Adipose) = QAD*(Arterial_Blood/VAB - Adipose/KbAD/VAD); d/dt(Skin) = QSK*(Arterial_Blood/VAB - Skin/KbSK/VSK); d/dt(Spleen) = QSP*(Arterial_Blood/VAB - Spleen/KbSP/VSP); d/dt(Pancreas) = QPA*(Arterial_Blood/VAB - Pancreas/KbPA/VPA); d/dt(Liver) = QHA*Arterial_Blood/VAB + QSP*Spleen/KbSP/VSP + QPA*Pancreas/KbPA/VPA + QST*Stomach/KbST/VST + QGU*Gut/KbGU/VGU - CLint*fub*Liver/KbLI/VLI - QLI*Liver/KbLI/VLI; d/dt(Stomach) = QST*(Arterial_Blood/VAB - Stomach/KbST/VST); d/dt(Gut) = QGU*(Arterial_Blood/VAB - Gut/KbGU/VGU); d/dt(Bones) = QBO*(Arterial_Blood/VAB - Bones/KbBO/VBO); d/dt(Kidneys) = QKI*(Arterial_Blood/VAB - Kidneys/KbKI/VKI); d/dt(Arterial_Blood) = QLU*(Lungs/KbLU/VLU - Arterial_Blood/VAB); d/dt(Venous_Blood) = QHT*Heart/KbHT/VHT + QBR*Brain/KbBR/VBR + QMU*Muscles/KbMU/VMU + QAD*Adipose/KbAD/VAD + QSK*Skin/KbSK/VSK + QLI*Liver/KbLI/VLI + QBO*Bones/KbBO/VBO + QKI*Kidneys/KbKI/VKI + QRB*Rest_of_Body/KbRB/VRB - QLU*Venous_Blood/VVB; d/dt(Rest_of_Body) = QRB*(Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB); }) } pbpk2 <- pbpk2() pbpk2 #> -- rxode2-based free-form 16-cmt ODE model ------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 Venous_Blood #> 2 2 Skin #> 3 3 Lungs #> 4 4 Heart #> 5 5 Brain #> 6 6 Muscles #> 7 7 Adipose #> 8 8 Spleen #> 9 9 Pancreas #> 10 10 Liver #> 11 11 Stomach #> 12 12 Gut #> 13 13 Bones #> 14 14 Kidneys #> 15 15 Arterial_Blood #> 16 16 Rest_of_Body #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> cmt(Venous_Blood) #> cmt(Skin) #> KbBR = exp(lKbBR) #> KbMU = exp(lKbMU) #> KbAD = exp(lKbAD) #> CLint = exp(lCLint + eta.LClint) #> KbBO = exp(lKbBO) #> KbRB = exp(lKbRB) #> CO = (187 * WT^0.81) * 60/1000 #> QHT = 4 * CO/100 #> QBR = 12 * CO/100 #> QMU = 17 * CO/100 #> QAD = 5 * CO/100 #> QSK = 5 * CO/100 #> QSP = 3 * CO/100 #> QPA = 1 * CO/100 #> QLI = 25.5 * CO/100 #> QST = 1 * CO/100 #> QGU = 14 * CO/100 #> QHA = QLI - (QSP + QPA + QST + QGU) #> QBO = 5 * CO/100 #> QKI = 19 * CO/100 #> QRB = CO - (QHT + QBR + QMU + QAD + QSK + QLI + QBO + #> QKI) #> QLU = QHT + QBR + QMU + QAD + QSK + QLI + QBO + QKI + #> QRB #> VLU = (0.76 * WT/100)/1.051 #> VHT = (0.47 * WT/100)/1.03 #> VBR = (2 * WT/100)/1.036 #> VMU = (40 * WT/100)/1.041 #> VAD = (21.42 * WT/100)/0.916 #> VSK = (3.71 * WT/100)/1.116 #> VSP = (0.26 * WT/100)/1.054 #> VPA = (0.14 * WT/100)/1.045 #> VLI = (2.57 * WT/100)/1.04 #> VST = (0.21 * WT/100)/1.05 #> VGU = (1.44 * WT/100)/1.043 #> VBO = (14.29 * WT/100)/1.99 #> VKI = (0.44 * WT/100)/1.05 #> VAB = (2.81 * WT/100)/1.04 #> VVB = (5.62 * WT/100)/1.04 #> VRB = (3.86 * WT/100)/1.04 #> BP = 0.61 #> fup = 0.028 #> fub = fup/BP #> KbLU = exp(0.8334) #> KbHT = exp(1.1205) #> KbSK = exp(-0.5238) #> KbSP = exp(0.3224) #> KbPA = exp(0.3224) #> KbLI = exp(1.7604) #> KbST = exp(0.3224) #> KbGU = exp(1.2026) #> KbKI = exp(1.3171) #> S15 = VVB * BP/1000 #> C15 = Venous_Blood/S15 #> d/dt(Lungs) = QLU * (Venous_Blood/VVB - Lungs/KbLU/VLU) #> d/dt(Heart) = QHT * (Arterial_Blood/VAB - Heart/KbHT/VHT) #> d/dt(Brain) = QBR * (Arterial_Blood/VAB - Brain/KbBR/VBR) #> d/dt(Muscles) = QMU * (Arterial_Blood/VAB - Muscles/KbMU/VMU) #> d/dt(Adipose) = QAD * (Arterial_Blood/VAB - Adipose/KbAD/VAD) #> d/dt(Skin) = QSK * (Arterial_Blood/VAB - Skin/KbSK/VSK) #> d/dt(Spleen) = QSP * (Arterial_Blood/VAB - Spleen/KbSP/VSP) #> d/dt(Pancreas) = QPA * (Arterial_Blood/VAB - Pancreas/KbPA/VPA) #> d/dt(Liver) = QHA * Arterial_Blood/VAB + QSP * Spleen/KbSP/VSP + #> QPA * Pancreas/KbPA/VPA + QST * Stomach/KbST/VST + #> QGU * Gut/KbGU/VGU - CLint * fub * Liver/KbLI/VLI - #> QLI * Liver/KbLI/VLI #> d/dt(Stomach) = QST * (Arterial_Blood/VAB - Stomach/KbST/VST) #> d/dt(Gut) = QGU * (Arterial_Blood/VAB - Gut/KbGU/VGU) #> d/dt(Bones) = QBO * (Arterial_Blood/VAB - Bones/KbBO/VBO) #> d/dt(Kidneys) = QKI * (Arterial_Blood/VAB - Kidneys/KbKI/VKI) #> d/dt(Arterial_Blood) = QLU * (Lungs/KbLU/VLU - Arterial_Blood/VAB) #> d/dt(Venous_Blood) = QHT * Heart/KbHT/VHT + QBR * Brain/KbBR/VBR + #> QMU * Muscles/KbMU/VMU + QAD * Adipose/KbAD/VAD + #> QSK * Skin/KbSK/VSK + QLI * Liver/KbLI/VLI + QBO * #> Bones/KbBO/VBO + QKI * Kidneys/KbKI/VKI + QRB * Rest_of_Body/KbRB/VRB - #> QLU * Venous_Blood/VVB #> d/dt(Rest_of_Body) = QRB * (Arterial_Blood/VAB - Rest_of_Body/KbRB/VRB) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-cmt.html","id":"appending-compartments-to-the-model","dir":"Articles","previous_headings":"","what":"Appending compartments to the model","title":"Changing rxode2 compartment numbers","text":"can also append “compartments” model. ODE solving internals, add fake compartments model differential equations defined. example legal: can see clearly underlying classic rxode2 model: compartments defined differential equations supported; model : give error:","code":"ode.1c.ka <- function(){ model({ C2 = center/V d / dt(depot) = -KA * depot d/dt(center) = KA * depot - CL*C2 cmt(eff) }) } ode.1c.ka <- ode.1c.ka() print(ode.1c.ka) #> -- rxode2-based free-form 2-cmt ODE model -------------------------------------- #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> -- Model (Normalized Syntax): -- #> function() { #> model({ #> C2 = center/V #> d/dt(depot) = -KA * depot #> d/dt(center) = KA * depot - CL * C2 #> cmt(eff) #> }) #> } ode.1c.ka$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_1e03154980d52540647eaa8bacb10b0f model (ready). #> x$state: depot, center #> x$stateExtra: eff #> x$params: V, KA, CL #> x$lhs: C2 ode.1c.ka <- rxode2({ cmt(eff) C2 = center/V; d / dt(depot) = -KA * depot d/dt(center) = KA * depot - CL*C2 }) Error in rxModelVars_(obj) : Evaluation error: Compartment 'eff' needs differential equations defined."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-covariates.html","id":"individual-covariates","dir":"Articles","previous_headings":"","what":"Individual Covariates","title":"rxode2 Covariates","text":"individual covariate wish solve may specify iCov dataset:","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` library(units) ## udunits database from /usr/share/xml/udunits/udunits2.xml library(xgxr) mod3 <- function() { ini({ TKA <- 2.94E-01 ## Clearance with individuals TCL <- 1.86E+01 TV2 <-4.02E+01 TQ <-1.05E+01 TV3 <-2.97E+02 TKin <- 1 TKout <- 1 TEC50 <-200 }) model({ KA <- TKA CL <- TCL * (WT / 70) ^ 0.75 V2 <- TV2 Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 Tz <- 8 amp <- 0.1 C2 <- central/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(central) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 ## This specifies that the effect compartment starts at 1. }) } ev <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=10000, cmt=1) %>% et(0,48,length.out=100) %>% et(id=1:4) set.seed(10) rxSetSeed(10) ## Now use iCov to simulate a 4-id sample r1 <- solve(mod3, ev, # Create individual covariate data-frame iCov=data.frame(id=1:4, WT=rnorm(4, 70, 10))) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(r1) ## ── Solved rxode2 object ── ## ── Parameters ($params): ── ## TKA TCL TV2 TQ TV3 TKin TKout TEC50 Tz amp ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 8.000 0.100 ## ── Initial Conditions ($inits): ── ## depot central peri eff ## 0 0 0 1 ## ── First part of data (object): ── ## # A tibble: 400 × 17 ## id time KA CL V2 Q V3 Kin Kout EC50 C2 C3 depot ## [h] ## 1 1 0 0.294 18.6 40.2 10.5 297 1 1 200 0 0 10000 ## 2 1 0.485 0.294 18.6 40.2 10.5 297 1 1 200 27.8 0.257 8671. ## 3 1 0.970 0.294 18.6 40.2 10.5 297 1 1 200 43.7 0.873 7519. ## 4 1 1.45 0.294 18.6 40.2 10.5 297 1 1 200 51.7 1.68 6520. ## 5 1 1.94 0.294 18.6 40.2 10.5 297 1 1 200 54.7 2.56 5654. ## 6 1 2.42 0.294 18.6 40.2 10.5 297 1 1 200 54.5 3.45 4903. ## # ℹ 394 more rows ## # ℹ 4 more variables: central , peri , eff , WT plot(r1, C2, log=\"y\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-covariates.html","id":"time-varying-covariates","dir":"Articles","previous_headings":"","what":"Time Varying Covariates","title":"rxode2 Covariates","text":"Covariates easy specify rxode2, can specify variable. Time-varying covariates, like clock time circadian rhythm model, can also used. Extending indirect response model already discussed, : Now covariate present event dataset, system can solved combining dataset model: solving ODE equations, solver may sample times outside data. happens, ODE solver can use linear interpolation covariate values. equivalent R’s approxfun method=\"linear\". Note linear approximation case leads kinks solved system 24-hours covariate linear interpolation near 24 near 0. linear seems reasonable, cases like clock time make interpolation methods attractive. rxode2 default covariate interpolation last observation carried forward (locf), constant approximation. equivalent R’s approxfun method=\"constant\". gives following plots: case, plots seem smoother. can also use NONMEM’s preferred interpolation style next observation carried backward (NOCB): gives following plots:","code":"library(rxode2) library(units) mod4 <- mod3 %>% model(d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff) %>% model(-Kin) %>% model(Kin <- TKin + amp *cos(2*pi*(ctime-Tz)/24), append=C2, cov=\"ctime\") ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=1) %>% et(0,48,length.out=100) ## Create data frame of 8 am dosing for the first dose This is done ## with base R but it can be done with dplyr or data.table ev$ctime <- (ev$time+set_units(8,hr)) %% 24 ev$WT <- 70 r1 <- solve(mod4, ev, covsInterpolation=\"linear\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\") plot(r1,eff) + ylab(\"Effect\") + xlab(\"Time\") r1 <- solve(mod4, ev,covsInterpolation=\"locf\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\", xlab=\"Time\") plot(r1,eff, ylab=\"Effect\", xlab=\"Time\") r1 <- solve(mod4, ev,covsInterpolation=\"nocb\") print(r1) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> TKA TCL TV2 TQ TV3 TKout TEC50 #> 0.294000 18.600000 40.200000 10.500000 297.000000 1.000000 200.000000 #> TKin Tz amp pi #> 1.000000 8.000000 0.100000 3.141593 #> ── Initial Conditions ($inits): ── #> depot central peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 100 × 17 #> time KA CL V2 Q V3 Kout EC50 C2 Kin C3 depot #> [h] #> 1 0 0.294 18.6 40.2 10.5 297 1 200 0 1.1 0 10000 #> 2 0.485 0.294 18.6 40.2 10.5 297 1 200 27.8 1.10 0.257 8671. #> 3 0.970 0.294 18.6 40.2 10.5 297 1 200 43.7 1.10 0.874 7519. #> 4 1.45 0.294 18.6 40.2 10.5 297 1 200 51.8 1.09 1.68 6520. #> 5 1.94 0.294 18.6 40.2 10.5 297 1 200 54.8 1.09 2.56 5654. #> 6 2.42 0.294 18.6 40.2 10.5 297 1 200 54.6 1.08 3.45 4903. #> # ℹ 94 more rows #> # ℹ 5 more variables: central , peri , eff , ctime [h], WT plot(r1,C2, ylab=\"Central Concentration\", xlab=\"Time\") plot(r1,eff, ylab=\"Effect\", xlab=\"Time\")"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"creating-an-interactive-data-frame","dir":"Articles","previous_headings":"Using rxode2 data frames","what":"Creating an interactive data frame","title":"rxode2 Data Frames","text":"rxode2 supports returning solved object modified data-frame. done predict(), solve(), rxSolve() methods.","code":"library(rxode2) library(units) ## Setup example model mod1 <- function() { ini({ # central KA <- 2.94E-01 CL <- 1.86E+01 # peripheral V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 # effects Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) } ## Seup parameters and initial conditions ## Setup dosing event information ev <- et(amountUnits=\"mg\", timeUnits = \"hours\") %>% et(amt=10000, addl=9, ii=12) %>% et(amt=20000, addl=4, time=120, ii=24) %>% et(0:240) ## Now solve x <- predict(mod1, ev) x #> -- Solved rxode2 object -- #> -- Parameters (x$params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions (x$inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 241 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # i 235 more rows"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"using-the-solved-object-as-a-simple-data-frame","dir":"Articles","previous_headings":"Using rxode2 data frames","what":"Using the solved object as a simple data frame","title":"rxode2 Data Frames","text":"solved object acts data.frame tbl can filtered dpylr. example filter easily.","code":"library(dplyr) ## You can drop units for comparisons and filtering x <- mod1 %>% solve(ev) %>% drop_units() %>% filter(time <= 3) %>% as_tibble() ## or keep them and compare with the proper units. x <- mod1 %>% solve(ev) %>% filter(time <= set_units(3, hr)) %>% as_tibble() x #> # A tibble: 4 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"updating-the-data-set-interactively","dir":"Articles","previous_headings":"","what":"Updating the data-set interactively","title":"rxode2 Data Frames","text":"However isn’t just simple data object. can use solved object update parameters fly, even change sampling time. First need recreate original solved system:","code":"x <- mod1 %>% solve(ev) print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 241 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # i 235 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"modifying-observation-times-for-rxode2","dir":"Articles","previous_headings":"Updating the data-set interactively","what":"Modifying observation times for rxode2","title":"rxode2 Data Frames","text":"Notice initial effect now 2. can also change sampling times easily method changing t time. example:","code":"x$t <- seq(0,5,length.out=20) print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 20 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 0.263 16.8 0.0817 9255. 677. 24.3 1.01 #> 3 0.526 29.5 0.299 8566. 1187. 88.7 1.03 #> 4 0.789 38.9 0.615 7929. 1562. 183. 1.06 #> 5 1.05 45.5 1.00 7338. 1830. 298. 1.09 #> 6 1.32 50.1 1.44 6792. 2013. 427. 1.12 #> # i 14 more rows plot(x)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-data-frame.html","id":"modifying-simulation-parameters","dir":"Articles","previous_headings":"Updating the data-set interactively","what":"Modifying simulation parameters","title":"rxode2 Data Frames","text":"can also access change parameters $ operator. example, accessing KA can done : may change assigning new value. can access/change parameters, initialization(s) events $params, $inits, $events accessor syntax, similar used . syntax makes easy update explore effect various parameters solved object.","code":"x$KA #> [1] 0.294 x$KA <- 1 print(x) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> KA CL V2 Q V3 Kin Kout EC50 #> 1.0 18.6 40.2 10.5 297.0 1.0 1.0 200.0 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> -- First part of data (object): -- #> # A tibble: 20 x 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 0.263 52.2 0.261 7686. 2098. 77.6 1.03 #> 3 0.526 83.3 0.900 5908. 3348. 267. 1.09 #> 4 0.789 99.8 1.75 4541. 4010. 519. 1.15 #> 5 1.05 106. 2.69 3490. 4273. 800. 1.21 #> 6 1.32 106. 3.66 2683. 4272. 1086. 1.26 #> # i 14 more rows plot(x)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"datasets-for-rxode2-nlmixr","dir":"Articles","previous_headings":"","what":"Datasets for rxode2 & nlmixr","title":"rxode2 Event Types","text":"Data input nlmixr type data input rxode2, similar data NONMEM (NONMEM-ready datasets can used directly nlmixr).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"subject-identification-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Subject Identification Columns","title":"rxode2 Event Types","text":"subject identification column separates subjects identification random effects. ID: subject identifier may integer, character, factor.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"observation-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Observation Columns","title":"rxode2 Event Types","text":"Observation columns used indicate dependent variable use measure . DV: numeric column measurement CENS: numeric column indication censoring, limit quantification assay. LIMIT: numeric column helping indicate type censoring, limit quantification assay. MDV: indicator missing DV values CMT: name number compartment DVID: dependent variable identifier EVID event identifier","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dosing-columns","dir":"Articles","previous_headings":"Columns Described by Type of Use","what":"Dosing Columns","title":"rxode2 Event Types","text":"AMT: amount dose CMT: name number compartment EVID: event identifier ADDL: number additional doses RATE DUR: rate duration dose","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"details-for-specific-dataset-columns","dir":"Articles","previous_headings":"","what":"Details for Specific Dataset Columns","title":"rxode2 Event Types","text":"details sorted alphabetically column name. grouping use, see documentation .","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"amt-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"AMT Column","title":"rxode2 Event Types","text":"AMT column defines amount dose. observation rows, 0 NA. dosing rows, amount dose administered CMT. dose zero-order rate (constant infusion), infusion may setup using RATE DUR column.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"censlimit-columns","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"CENS/LIMIT Columns","title":"rxode2 Event Types","text":"CENS column indicator column indicating censoring occurred. pharmacokinetic modeling, censoring typically sample limit quantification. Internally rxode2 saves values nlmixr can use likelihood calculations. CENS = 0 indicates value DV measured without censoring. CENS = 1 indicates value left censored (limit quantitation) value DV censoring/quantitation limit. CENS = -1 indicates value right censored (limit quantitation) value DV censoring/quantitation limit. LIMIT additional information censoring handled nlmixr stored rxode2’s data structure well. value left censored, like limit 1 may also believe value certain threshold, like zero. case, limit 0 indicates censored value 0 1. short : CENS = 0 LIMIT ignored observation censored CENS = 1 value censored (LIMIT, DV) CENS = -1 value censored (DV, LIMIT)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"cmt-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"CMT Column","title":"rxode2 Event Types","text":"CMT column indicates compartment event occurs. given character string factor (preferred method), matched name model. given integer, matched order compartments appear model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dur-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DUR Column","title":"rxode2 Event Types","text":"DUR column defines duration infusion. used set duration zero-order rate infusion.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dv-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DV Column","title":"rxode2 Event Types","text":"DV column indicates current measurement current compartment (see CMT) current measurement identifier (see DVID) may missing (see MDV) censored (see CENS).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"dvid-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"DVID Column","title":"rxode2 Event Types","text":"TODO","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"evid-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"EVID Column","title":"rxode2 Event Types","text":"EVID column event identifier row data. observation records, 0. normal dosing records, 1. Many EVID values detailed rxode2 Event Types Classic rxode2 Events vignettes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"id-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"ID Column","title":"rxode2 Event Types","text":"ID column subject identifier. column used separate one individual (usually single person animal) another. model, ID column used separate individuals. numerical integrator re-initializes new individual, new values random effects selected.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-datasets.html","id":"rate-column","dir":"Articles","previous_headings":"Details for Specific Dataset Columns","what":"RATE Column","title":"rxode2 Event Types","text":"TODO","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"creating-rxode2s-event-tables","dir":"Articles","previous_headings":"","what":"Creating rxode2’s event tables","title":"Easy rxode2 Event Tables","text":"event table rxode2 specialized data frame acts container rxode2’s events observation times. create rxode2 event table may use code eventTable(), et(), even create data frame right event information contained . closely related types events rxode2 supports. event table can add sampling/observations doses piping direct access. short table two main functions create dosing Sampling times can added add.sampling( sampling times ) et( sampling times ). Dosing intervals sampling windows also supported. documentation using et() syntax, though supported. models, can illustrate using model shared rxode2 tutorial:","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(units) #> udunits database from /usr/share/xml/udunits/udunits2.xml (ev <- et()) #> -- EventTable with 0 records -- #> 0 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) (ev <- et()) #> -- EventTable with 0 records -- #> 0 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) ## Model from rxode2 tutorial m1 <-function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"adding-doses-to-the-event-table","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Adding doses to the event table","title":"Easy rxode2 Event Tables","text":"created can add dosing event table add.dosing(), et() functions. Using add.dosing() function : Notice units specified table. specified, units use units package keep track units convert needed. Additionally, ggforce uses label ggplot axes. set_units drop_units useful set drop rxode2 event table units. example, can see time axes labeled: familiar NONMEM/rxode2 event records, can also specify dosing using et dose elements directly: gives: shows easy creating event tables can .","code":"ev <- eventTable(amount.units=\"mg\", time.units=\"hr\") ## The methods ar attached to the event table, so you can use ## them directly ev$add.dosing(dose=10000, nbr.doses = 3)# loading doses ## Starts at time 0; Default dosing interval is 24 ## You can also pipe the event tables to these methods. ev <- ev %>% add.dosing(dose=5000, nbr.doses=14, dosing.interval=12)# maintenance ev #> -- EventTable with 2 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 2 x 5 #> time amt ii addl evid #> [h] [mg] [h] #> 1 0 10000 24 2 1:Dose (Add) #> 2 0 5000 12 13 1:Dose (Add) rxSolve(m1, ev) %>% plot(C2) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) # loading doses ev #> -- EventTable with 1 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 10000 12 6 1:Dose (Add) rxSolve(m1, ev) %>% plot(C2) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"adding-sampling-to-an-event-table","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Adding sampling to an event table","title":"Easy rxode2 Event Tables","text":"notice examples, rxode2 generated default sampling times since sampling times. wish control sampling time, add samples rxode2 event table add.sampling et gives: use et can simply add similar way add.sampling: gives following rxode2 solve: Note jagged nature plots since sample times.","code":"ev <- eventTable(amount.units=\"mg\", time.units=\"hr\") ## The methods ar attached to the event table, so you can use them ## directly ev$add.dosing(dose=10000, nbr.doses = 3)# loading doses ev$add.sampling(seq(0,24,by=4)) ev #> -- EventTable with 8 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 7 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 8 x 5 #> time amt ii addl evid #> [h] [mg] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 24 2 1:Dose (Add) #> 3 4 NA NA NA 0:Observation #> 4 8 NA NA NA 0:Observation #> 5 12 NA NA NA 0:Observation #> 6 16 NA NA NA 0:Observation #> 7 20 NA NA NA 0:Observation #> 8 24 NA NA NA 0:Observation solve(m1, ev) %>% plot(C2) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) %>% # loading doses et(seq(0,24,by=4)) ev #> -- EventTable with 8 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 7 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 8 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 6 1:Dose (Add) #> 3 4 NA NA NA 0:Observation #> 4 8 NA NA NA 0:Observation #> 5 12 NA NA NA 0:Observation #> 6 16 NA NA NA 0:Observation #> 7 20 NA NA NA 0:Observation #> 8 24 NA NA NA 0:Observation solve(m1, ev) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"expand-the-event-table-to-a-multi-subject-event-table-","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Expand the event table to a multi-subject event table.","title":"Easy rxode2 Event Tables","text":"thing needed expand event table list IDs want expand; can see following simulation 4 individuals solved :","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, until = set_units(3, days), ii=12) %>% # loading doses et(seq(0,48,length.out=200)) %>% et(id=1:4) ev #> -- EventTable with 804 records -- #> 4 dosing records (see x$get.dosing(); add with add.dosing or et) #> 800 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 804 x 6 #> id time amt ii addl evid #> [h] [h] #> 1 1 0 NA NA NA 0:Observation #> 2 1 0 10000 12 6 1:Dose (Add) #> 3 1 0.241 NA NA NA 0:Observation #> 4 1 0.482 NA NA NA 0:Observation #> 5 1 0.724 NA NA NA 0:Observation #> 6 1 0.965 NA NA NA 0:Observation #> 7 1 1.21 NA NA NA 0:Observation #> 8 1 1.45 NA NA NA 0:Observation #> 9 1 1.69 NA NA NA 0:Observation #> 10 1 1.93 NA NA NA 0:Observation #> # i 794 more rows set.seed(42) rxSetSeed(42) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"add-doses-and-samples-within-a-sampling-window","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Add doses and samples within a sampling window","title":"Easy rxode2 Event Tables","text":"addition adding fixed doses fixed sampling times, can windows sample draw doses . dosing windows specify time ordered numerical vector lowest dosing time highest dosing time inside list. example, start dosing time 6 hour dosing window: can clearly see different dosing times following simulation: course reality dosing interval may 2 hours: sort thing can specified sampling times. specify sampling times terms sampling window, can create list sampling times. sampling time two element ordered numeric vector. shows flexibility dosing sampling rxode2 event tables allow.","code":"set.seed(42) rxSetSeed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,6)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) ev #> -- EventTable with 16 records -- #> 16 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 16 x 6 #> id low time high amt evid #> [h] [h] [h] #> 1 1 0 5.49 6 10000 1:Dose (Add) #> 2 1 12 17.0 18 10000 1:Dose (Add) #> 3 1 24 25.7 30 10000 1:Dose (Add) #> 4 1 36 41.6 42 10000 1:Dose (Add) #> 5 2 0 4.31 6 10000 1:Dose (Add) #> 6 2 12 14.7 18 10000 1:Dose (Add) #> 7 2 24 28.2 30 10000 1:Dose (Add) #> 8 2 36 39.9 42 10000 1:Dose (Add) #> 9 3 0 0.808 6 10000 1:Dose (Add) #> 10 3 12 16.4 18 10000 1:Dose (Add) #> 11 3 24 27.1 30 10000 1:Dose (Add) #> 12 3 36 39.9 42 10000 1:Dose (Add) #> 13 4 0 4.98 6 10000 1:Dose (Add) #> 14 4 12 13.7 18 10000 1:Dose (Add) #> 15 4 24 29.6 30 10000 1:Dose (Add) #> 16 4 36 41.5 42 10000 1:Dose (Add) ev <- ev %>% et(seq(0,48,length.out=200)) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) set.seed(42) rxSetSeed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,2)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) %>% et(seq(0,48,length.out=200)) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) rxSetSeed(42) set.seed(42) ev <- et(timeUnits=\"hr\") %>% et(time=list(c(0,2)), amt=10000, until = set_units(2, days), ii=12) %>% # loading doses et(id=1:4) ## Create 20 samples in the first 24 hours and 20 samples in the ## second 24 hours samples <- c(lapply(1:20, function(...){c(0,24)}), lapply(1:20, function(...){c(20,48)})) ## Add the random collection to the event table ev <- ev %>% et(samples) library(ggplot2) solve(m1, ev, params=data.frame(KA=0.294*exp(rnorm(4)), CL=18.6*exp(rnorm(4)))) %>% plot(C2) + geom_point()"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"combining-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Combining event tables","title":"Easy rxode2 Event Tables","text":"Since can create dosing records sampling records, can create complex dosing regimen wish. addition, rxode2 allows combine event tables c, seq, rep, rbind.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"sequencing-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Sequencing event tables","title":"Easy rxode2 Event Tables","text":"One way combine event table sequence c, seq etSeq. takes two dosing groups adds least one inter-dose interval : sequencing events, can also separate sequence period time; example wanted separate week, easily following sequence event tables: Note example time bid qd event tables exactly one week, 1 week plus 24 hours inter-dose interval. want behavior, can sequence using wait=\"+ii\". Also note, rxode2 assumes dosing want space event tables , clears sampling records combine event tables. true, can also use option samples=\"use\"","code":"## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) ## bid for 5 days followed by qd for 5 days et <- seq(bid,qd) %>% et(seq(0,11*24,length.out=100)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days followed by qd for 5 days et <- seq(bid,set_units(1, \"week\"), qd) %>% et(seq(0,18*24,length.out=100)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days followed by qd for 5 days et <- seq(bid,set_units(1, \"week\"), qd,wait=\"+ii\") %>% et(seq(0,18*24,length.out=100)); rxSolve(m1, et) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"repeating-event-tables","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Repeating event tables","title":"Easy rxode2 Event Tables","text":"can event table can repeat etRep rep. example 4 rounds 2 weeks QD therapy 1 week therapy can simply specified: simplified way use sequence event tables. Therefore, many options still apply; samples cleared unless use samples=\"use\", time event tables least inter-dose interval. can adjust timing wait option.","code":"qd <-et(timeUnits = \"hr\") %>% et(amt=10000, ii=24, until=set_units(2, \"weeks\"), cmt=\"depot\") et <- rep(qd, times=4, wait=set_units(1,\"weeks\")) %>% add.sampling(set_units(seq(0, 12.5,by=0.005),weeks)) rxSolve(m1, et) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"combining-event-tables-with-rbind","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Combining event tables with rbind","title":"Easy rxode2 Event Tables","text":"may combine event tables rbind. consider event times combining event tables, keeps times. space event tables waiting period, also consider inter-dose interval. Using previous seq can clearly see difference. sequence: bind together rbind Still waiting period applies (consider inter-dose interval) can also bind tables together make ID event table unique; can good combine cohorts different expected dosing sampling times. requires id=\"unique\" option; Using first example shows different case:","code":"## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) et <- seq(bid,qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days et <- rbind(bid,qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) et <- rbind(bid,wait=set_units(10,days),qd) %>% et(seq(0,18*24,length.out=500)); rxSolve(m1, et) %>% plot(C2) ## bid for 5 days et <- etRbind(bid,qd, id=\"unique\") %>% et(seq(0,150,length.out=500)); library(ggplot2) rxSolve(m1, et) %>% plot(C2) + facet_wrap( ~ id)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-table.html","id":"event-tables-in-rstudio-notebooks","dir":"Articles","previous_headings":"Creating rxode2’s event tables","what":"Event tables in Rstudio Notebooks","title":"Easy rxode2 Event Tables","text":"addition output console shown examples, Rstudio notebook output different can seen following screenshots; first screenshot shows event table looks evaluating Rstduio notebook simple dataframe allows page contents. click first box Rstudio notebook output, notes event table: ## Expanding events Event tables can expanded contain addl data item, like following example: can expand events addl items $expand() etExpand(ev): first, etExpand(ev) expands event table without modifying original data frame: can see addl events expanded, however original data frame remained intact: use ev$expand() modify ev object. similar object-oriented method:","code":"ev <- et() %>% et(dose=50, ii=8, until=48) ev #> -- EventTable with 1 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> #> 1 0 50 8 6 1:Dose (Add) etExpand(ev) #> -- EventTable with 7 records -- #> 7 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 7 x 4 #> time amt ii evid #> #> 1 0 50 0 1:Dose (Add) #> 2 8 50 0 1:Dose (Add) #> 3 16 50 0 1:Dose (Add) #> 4 24 50 0 1:Dose (Add) #> 5 32 50 0 1:Dose (Add) #> 6 40 50 0 1:Dose (Add) #> 7 48 50 0 1:Dose (Add) print(ev) #> -- EventTable with 1 records -- #> 1 dosing records (see $get.dosing(); add with add.dosing or et) #> 0 observation times (see $get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with $expand(); or etExpand() #> -- First part of : -- #> # A tibble: 1 x 5 #> time amt ii addl evid #> #> 1 0 50 8 6 1:Dose (Add) ev$expand() ev #> -- EventTable with 7 records -- #> 7 dosing records (see x$get.dosing(); add with add.dosing or et) #> 0 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 7 x 4 #> time amt ii evid #> #> 1 0 50 0 1:Dose (Add) #> 2 8 50 0 1:Dose (Add) #> 3 16 50 0 1:Dose (Add) #> 4 24 50 0 1:Dose (Add) #> 5 32 50 0 1:Dose (Add) #> 6 40 50 0 1:Dose (Add) #> 7 48 50 0 1:Dose (Add)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"rxode2-event-tables","dir":"Articles","previous_headings":"","what":"rxode2 event tables","title":"rxode2 Event Types","text":"general, rxode2 event tables follow NONMEM dataset convention exceptions: may turn compartment negative compartment number “-cmt” cmt compartment name. compartment data item (cmt) can still number, number compartment defined appearance compartment name model. can tedious count, can specify compartment numbers easier using cmt(cmtName) beginning model. Bioavailability changes change rate infusion since dur/amt fixed input data. Similarly, specifying rate/amt infusion, bioavailability change infusion duration since rate/amt fixed input data. infrequent NONMEM columns supported: pcmt, call. evid=5 replace event; replaces value compartment value specified amt column. equivalent deSolve=replace. evid=6 multiply event; multiplies value compartment value specified amt column. equivalent deSolve=multiply. evid=7 transit compartment model/phantom event. puts dose dose() function calculates time since last dose tad() doesn’t actually put dose compartment. allows transit() function easily apply compartment. legal entries data table: notes: evid can classic RxODE (described ) NONMEM-style evid described . NONMEM’s DV required; rxode2 ODE solving framework. NONMEM’s MDV required, since captured EVID. Instead NONMEM-compatible data, can accept deSolve compatible data-frames. returning rxode2 solved data-set additional event ids (EVID) may see depending solving options: EVID = -1 modeled rate ends (corresponds rate = -1) EVID = -2 modeled duration ends (corresponds rate=-2) EVID = -10 rate specified zero-order infusion ends (corresponds rate > 0) EVID = -20 duration specified zero-order infusion ends (corresponds dur > 0) EVID = 101, 102, 103,... correspond 1, 2, 3, … modeled time (mtime). can accessed solving option combination addDosing=TRUE subsetNonmem=FALSE. want see classic EVID equivalents can use addDosing=NA. illustrate event types use model original rxode2 tutorial.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## Model from rxode2 tutorial m1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"bolusadditive-doses","dir":"Articles","previous_headings":"","what":"Bolus/Additive Doses","title":"rxode2 Event Types","text":"bolus dose default type dose rxode2 requires amt/dose. Note uses convenience function et() described rxode2 event tables","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 2 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev) %>% plot(C2) + xlab(\"Time\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"infusion-doses","dir":"Articles","previous_headings":"","what":"Infusion Doses","title":"rxode2 Event Types","text":"different type infusions rxode2 supports: Constant Rate Infusion (rate) Constant Duration Infusion (dur) Estimated Rate Infusion Estimated Duration Infusion","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"constant-infusion-in-terms-of-duration-and-rate","dir":"Articles","previous_headings":"Infusion Doses","what":"Constant Infusion (in terms of duration and rate)","title":"rxode2 Event Types","text":"next type event infusion; two ways specify infusion; first dur keyword. example : can also specified rate component: exception bioavailability changes infusion. case modeling rate, bioavailability decrease, decreases infusion duration, NONMEM. example: Similarly increasing bioavailability increases infusion duration. rationale behavior rate amt specified event table, thing can change bioavailability increase duration infusion. specify amt dur components event table, bioavailability changes affect rate infusion. can see side--side comparison bioavailability changes affecting rate instead duration records following plots:","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, dur=8) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt ii addl evid dur #> [h] [h] [h] #> 1 0 NA NA NA 0:Observation NA #> 2 0 10000 12 2 1:Dose (Add) 8 #> 3 0.242 NA NA NA 0:Observation NA #> 4 0.485 NA NA NA 0:Observation NA #> 5 0.727 NA NA NA 0:Observation NA #> 6 0.970 NA NA NA 0:Observation NA #> 7 1.21 NA NA NA 0:Observation NA #> 8 1.45 NA NA NA 0:Observation NA #> 9 1.70 NA NA NA 0:Observation NA #> 10 1.94 NA NA NA 0:Observation NA #> # i 91 more rows rxSolve(m1, ev) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=10000/8) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 1250 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev) %>% plot(depot, C2) + xlab(\"Time\") rxSolve(m1, ev, c(fdepot=0.25)) %>% plot(depot, C2) + xlab(\"Time\") rxSolve(m1, ev, c(fdepot=1.25)) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, dur=8) %>% et(seq(0, 24, length.out=100)) library(ggplot2) library(patchwork) p1 <- rxSolve(m1, ev, c(fdepot=1.25)) %>% plot(depot) + xlab(\"Time\") + ylim(0,5000) p2 <- rxSolve(m1, ev, c(fdepot=0.25)) %>% plot(depot) + xlab(\"Time\")+ ylim(0,5000) ## Use patchwork syntax to combine plots p1 * p2"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"modeled-rate-and-duration-of-infusion","dir":"Articles","previous_headings":"Infusion Doses","what":"Modeled Rate and Duration of Infusion","title":"rxode2 Event Types","text":"can model duration, equivalent NONMEM’s rate=-2. Similarly, may also model rate. equivalent NONMEM’s rate=-1 rxode2’s event table specifies data item well.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=-2) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 -2:dur 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev, c(durDepot=7)) %>% plot(depot, C2) + xlab(\"Time\") ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12,until=24, rate=-1) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 101 x 6 #> time amt rate ii addl evid #> [h] [h] #> 1 0 NA NA NA NA 0:Observation #> 2 0 10000 -1:rate 12 2 1:Dose (Add) #> 3 0.242 NA NA NA NA 0:Observation #> 4 0.485 NA NA NA NA 0:Observation #> 5 0.727 NA NA NA NA 0:Observation #> 6 0.970 NA NA NA NA 0:Observation #> 7 1.21 NA NA NA NA 0:Observation #> 8 1.45 NA NA NA NA 0:Observation #> 9 1.70 NA NA NA NA 0:Observation #> 10 1.94 NA NA NA NA 0:Observation #> # i 91 more rows rxSolve(m1, ev, c(rateDepot=10000/3)) %>% plot(depot, C2) + xlab(\"Time\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state","dir":"Articles","previous_headings":"","what":"Steady State","title":"rxode2 Event Types","text":"doses solved steady state reached constant inter-dose interval.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, ss=1) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 101 records -- #> 1 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> -- First part of x: -- #> # A tibble: 101 x 5 #> time amt ii evid ss #> [h] [h] #> 1 0 NA NA 0:Observation NA #> 2 0 10000 12 1:Dose (Add) 1 #> 3 0.242 NA NA 0:Observation NA #> 4 0.485 NA NA 0:Observation NA #> 5 0.727 NA NA 0:Observation NA #> 6 0.970 NA NA 0:Observation NA #> 7 1.21 NA NA 0:Observation NA #> 8 1.45 NA NA 0:Observation NA #> 9 1.70 NA NA 0:Observation NA #> 10 1.94 NA NA 0:Observation NA #> # i 91 more rows rxSolve(m1, ev) %>% plot(C2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state-for-complex-dosing","dir":"Articles","previous_headings":"Steady State","what":"Steady state for complex dosing","title":"rxode2 Event Types","text":"using ss=2 flag, can use super-positioning principle linear kinetics get steady state nonstandard dosing (.e. morning 100 mg vs evening 150 mg). done : Saving state values Resetting states solving system steady state Adding back prior state values can see takes full dose cycle reach true complex steady state dosing.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=24, ss=1) %>% et(time=12, amt=15000, ii=24, ss=2) %>% et(time=24, amt=10000, ii=24, addl=3) %>% et(time=36, amt=15000, ii=24, addl=3) %>% et(seq(0, 64, length.out=500)) library(ggplot2) rxSolve(m1, ev,maxsteps=10000) %>% plot(C2) + annotate(\"rect\", xmin=0, xmax=24, ymin=-Inf, ymax=Inf, alpha=0.2) + annotate(\"text\", x=12.5, y=7, label=\"Initial Steady State Period\") + annotate(\"text\", x=44, y=7, label=\"Steady State AM/PM dosing\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"steady-state-for-constant-infusion-or-zero-order-processes","dir":"Articles","previous_headings":"Steady State","what":"Steady state for constant infusion or zero order processes","title":"rxode2 Event Types","text":"last type steady state rxode2 supports steady-state constant infusion rate. can specified way NONMEM, : inter-dose interval ii=0 steady state dose, ie ss=1 Either positive rate (rate>0) estimated rate rate=-1. zero dose, ie amt=0 steady-state constant infusion achieved, infusion turned using record, just like NONMEM. Note rate=-2 model duration infusion doesn’t make much sense since solving infusion steady state. duration specified steady state solution. Also note bioavailability changes steady state infusion also make sense neither change rate duration steady state infusion. Hence modeled bioavailability type dosing event ignored. example: can used PK, can used steady-state disease processes.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=0, ss=1,rate=10000/8) p1 <- rxSolve(m1, ev) %>% plot(C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=200000, rate=10000/8) %>% et(0, 250, length.out=1000) p2 <- rxSolve(m1, ev) %>% plot(C2, eff) library(patchwork) p1 / p2"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"reset-events","dir":"Articles","previous_headings":"","what":"Reset Events","title":"rxode2 Event Types","text":"Reset events implemented evid=3 evid=reset, reset evid=4 reset dose. solving show happens system system reset 6 hours post-dose. can see compartments reset initial values. next dose start dosing cycle . case, whole system reset dose given","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, evid=reset) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 3 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, amt=10000, evid=4) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 5 #> time amt ii addl evid #> [h] [h] #> 1 0 NA NA NA 0:Observation #> 2 0 10000 12 3 1:Dose (Add) #> 3 0.242 NA NA NA 0:Observation #> 4 0.485 NA NA NA 0:Observation #> 5 0.727 NA NA NA 0:Observation #> 6 0.970 NA NA NA 0:Observation #> 7 1.21 NA NA NA 0:Observation #> 8 1.45 NA NA NA 0:Observation #> 9 1.70 NA NA NA 0:Observation #> 10 1.94 NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-event-types.html","id":"turning-off-compartments","dir":"Articles","previous_headings":"","what":"Turning off compartments","title":"rxode2 Event Types","text":"may also turn compartment, similar reset event. Solving shows system: case, depot turned , depot compartment concentrations set initial values compartment concentrations/levels reset. another dose depot administered depot compartment turned back . Note dose compartment turns back compartment dosed. Hence turn effect compartment, continues another dose depot. turn back compartment, zero-dose compartment evid=2 compartment needed.","code":"ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-depot\", evid=2) %>% et(seq(0, 24, length.out=100)) ev #> -- EventTable with 102 records -- #> 2 dosing records (see x$get.dosing(); add with add.dosing or et) #> 100 observation times (see x$get.sampling(); add with add.sampling or et) #> multiple doses in `addl` columns, expand with x$expand(); or etExpand(x) #> -- First part of x: -- #> # A tibble: 102 x 6 #> time cmt amt ii addl evid #> [h] [h] #> 1 0 (obs) NA NA NA 0:Observation #> 2 0 (default) 10000 12 3 1:Dose (Add) #> 3 0.242 (obs) NA NA NA 0:Observation #> 4 0.485 (obs) NA NA NA 0:Observation #> 5 0.727 (obs) NA NA NA 0:Observation #> 6 0.970 (obs) NA NA NA 0:Observation #> 7 1.21 (obs) NA NA NA 0:Observation #> 8 1.45 (obs) NA NA NA 0:Observation #> 9 1.70 (obs) NA NA NA 0:Observation #> 10 1.94 (obs) NA NA NA 0:Observation #> # i 92 more rows rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-eff\", evid=2) %>% et(seq(0, 24, length.out=100)) rxSolve(m1, ev) %>% plot(depot,C2, eff) ev <- et(timeUnits=\"hr\") %>% et(amt=10000, ii=12, addl=3) %>% et(time=6, cmt=\"-eff\", evid=2) %>% et(time=12,cmt=\"eff\",evid=2) %>% et(seq(0, 24, length.out=100)) rxSolve(m1, ev) %>% plot(depot,C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"classic-rxode-evid-values","dir":"Articles","previous_headings":"","what":"Classic RxODE evid values","title":"Classic rxode2 Events","text":"Originally RxODE supported compound event IDs; rxode2 still supports parameters, often useful use normal NONMEM dataset standard used many modeling tools like NONMEM, Monolix nlmixr, described rxode2 types article. Classically, RxODE supported event coding single event id evid described following table. classic EVID concatenate numbers table, infusion compartment 1 10101 infusion compartment 199 119901. EVID = 0 (observations), EVID=2 (type event) EVID=3 supported. Internally EVID=9 non-observation event makes sure system initialized zero; EVID=9 manually set. EVID 10-99 represents modeled time interventions, similar NONMEM’s MTIME. along amount (amt) time columns specify events ODE system. infusions specified EVIDs > 100 amt column represents rate value. Infusion flags 1 2 +amt turn infusion specific compartment -amt turn infusion specific compartment. specify dose/duration place dosing records time duration starts stops. modeled rate/duration infusion flags infusion flag must followed infusion record. number concatenated together form full RxODE event ID, shown following examples:","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"bolus-dose-examples","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Bolus Dose Examples","title":"Classic rxode2 Events","text":"100 bolus dose compartment #1 time 0 100 bolus dose compartment #99 time 0 100 bolus dose compartment #199 time 0","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"infusion-event-examples","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Infusion Event Examples","title":"Classic rxode2 Events","text":"Bolus infusion rate 50 compartment 1 1.5 hr, (modeled bioavailability changes duration infusion) Bolus infusion rate 50 compartment 1 1.5 hr (modeled bioavailability changes rate infusion) Modeled rate amount 50 Modeled duration amount 50","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"steady-state-for-classic-rxode-evid-example","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Steady State for classic RxODE EVID example","title":"Classic rxode2 Events","text":"Steady state dose cmt 1 Steady State super-positioning principle 50 pm 100 dose","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"steady-state-with-lagged-dose-for-classic-rxode-evid","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Steady state with lagged dose for classic RxODE evid","title":"Classic rxode2 Events","text":"Steady state lagged dose bolus dose: time | evid | amt | ii | 0 | 109 | 100 | 24 | 0 | 101 | 100 | 0 | event 109 calculates trough amount steady state passed (ii-lag_time) event 101 applies next steady state dose. Steady state (=2) lagged bolus dose Steady state infusion lag time time | evid | amt | ii | 0 | 10109 | 5 | 24 | 0 | 10108 | -5 | 24 | 0 | 10101 | 5 | | 20 | 10101 | -5 | | case bolus, 10109 event calculates trough concentration ii=24, may (may ) still infusion running. infusion running 10108 event turn infusion appropriate time. infusion completed, 10108 event ignored. next 2 events 10101 represent event times (assuming bioavailability applied).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-events-classic.html","id":"turning-off-a-compartment-with-classic-rxode-evid","dir":"Articles","previous_headings":"Classic RxODE evid values","what":"Turning off a compartment with classic RxODE EVID","title":"Classic rxode2 Events","text":"Turn first compartment time 12 Event coding rxode2 encoded single event number evid. compartments 100, coded : event 0 observation events. 100*(Compartment Number) + 1 dose captured amt 10000 + 100*(Compartment Number) + 1 infusion rate captured amt column infusion turned subtracting amt evid stop infusion. compartments greater equal 100, 100s place digits transferred 100,000th place digit. doses 99th compartment evid bolus dose 9901 evid infusion 19901. bolus dose 199th compartment evid bolus dose 109901. infusion dosing record 199th compartment 119901.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Introduction to rxode2","text":"rxode2 R package facilitates simulation ODE models R. designed pharmacometrics models mind, can applied generally ODE model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"description-of-rxode2-illustrated-through-an-example","dir":"Articles","previous_headings":"","what":"Description of rxode2 illustrated through an example","title":"Introduction to rxode2","text":"model equations can specified text string, model file R expression. differential algebraic equations permitted. Differential equations specified d/dt(var_name) =. equation can separated semicolon. load rxode2 package compile model: Model parameters may specified ini({}) model block, initial conditions can specified within model cmt(0)= X, like model eff(0) <- 1. may also specify subject variability initial conditions residual error components just like nlmixr2. allows single interface nlmixr2/rxode2 models. Also note, classic rxode2 interface still works just like past (don’t worry breaking code time). fact, can get classic rxode2 model $simulationModel ui object:","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } mod1 <- mod1() # create the ui object (can also use `rxode2(mod1)`) mod1 summary(mod1$simulationModel)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"specify-dosing-and-sampling-in-rxode2","dir":"Articles","previous_headings":"Description of rxode2 illustrated through an example","what":"Specify Dosing and sampling in rxode2","title":"Introduction to rxode2","text":"rxode2 provides simple flexible way specify dosing sampling functions generate event table. First, empty event table generated “et()” function. interface similar NONMEM event tables: can see code, can dose compartment named rxode2 model. slight deviation NONMEM can reduce need compartment renumbering. events can also combined expanded (multi-subject events complex regimens) rbind, c, seq, rep. information creating complex dosing regimens using rxode2 see rxode2 events vignette.","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-intro.html","id":"solving-odes","dir":"Articles","previous_headings":"Description of rxode2 illustrated through an example","what":"Solving ODEs","title":"Introduction to rxode2","text":"ODE can now solved using rxSolve: returns modified data frame. can see compartment values plot : , Note labels automatically labeled units initial event table. rxode2 extracts units label plot (present).","code":"x <- mod1 %>% rxSolve(ev) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows library(ggplot2) plot(x,C2) + ylab(\"Central Concentration\") plot(x,eff) + ylab(\"Effect\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"prediction-only-models","dir":"Articles","previous_headings":"","what":"Prediction only models","title":"rxode2 additional model types","text":"Prediction models simple create. use rxode2 syntax without ODE systems . simple example one-compartment model. Solving rxode2 models saving simple ODE system, faster course.","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` mod <- function(){ model({ ipre <- 10 * exp(-ke * t) }) } et <- et(seq(0,24,length.out=50)) cmt1 <- rxSolve(mod,et,params=c(ke=0.5)) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ cmt1 ## -- Solved rxode2 object -- ## -- Parameters (x$params): -- ## ke ## 0.5 ## -- Initial Conditions (x$inits): -- ## named numeric(0) ## -- First part of data (object): -- ## # A tibble: 50 x 2 ## time ipre ## ## 1 0 10 ## 2 0.490 7.83 ## 3 0.980 6.13 ## 4 1.47 4.80 ## 5 1.96 3.75 ## 6 2.45 2.94 ## # i 44 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"solved-compartment-models","dir":"Articles","previous_headings":"","what":"Solved compartment models","title":"rxode2 additional model types","text":"Solved models also simple create. simply place linCmt() psuedo-function code. linCmt() function figures type model use based parameter names specified. often, pharmacometric models parameterized terms volume clearances. Clearances specified NONMEM-style names CL, Q, Q1, Q2, etc. distributional clearances CLD, CLD2. Volumes specified Central (VC V), Peripheral/Tissue (VP, VT). translations available, example translations : Another popular parameterization terms micro-constants. rxode2 assumes compartment 1 central compartment. elimination constant specified K, Ke Kel. example translations : last parameterization possible using alpha V //B/C. example translations : linCmt() sleuthing complete, 1, 2 3 compartment model solution used value linCmt(). compartments can dose linear solved system depot central linear absorption constant model ka. Without additional ODEs, compartments numbered depot=1 central=2. absorption constant ka missing, may dose central compartment. Without additional ODEs compartment number central=1. compartments take sort events ODE model can take, discussed rxode2 events vignette. acts ODE model; specify dose depot compartment solve system:","code":"mod <- function() { ini({ kel <- 0.5 V <- 1 }) model({ ipre <- linCmt(V, kel) }) } et <- et(amt=10,time=0,cmt=depot) %>% et(seq(0,24,length.out=50)) cmt1 <- rxSolve(mod,et) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ cmt1 ## -- Solved rxode2 object -- ## -- Parameters (x$params): -- ## kel V ## 0.5 1.0 ## -- Initial Conditions (x$inits): -- ## named numeric(0) ## -- First part of data (object): -- ## # A tibble: 50 x 2 ## time ipre ## ## 1 0 10 ## 2 0.490 7.83 ## 3 0.980 6.13 ## 4 1.47 4.80 ## 5 1.96 3.75 ## 6 2.45 2.94 ## # i 44 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-model-types.html","id":"mixing-solved-systems-and-odes","dir":"Articles","previous_headings":"","what":"Mixing Solved Systems and ODEs","title":"rxode2 additional model types","text":"addition pure ODEs, may mix solved systems ODEs. prior 2-compartment indirect response model can simplified linCmt() function: allows indirect response model assign 2-compartment model C2 variable used indirect response model. mixing solved systems ODEs, solved system’s compartment always last compartment. solved system technically isn’t compartment solved. Adding dosing compartment end interfere actual ODE solved. Therefore,two-compartment indirect response model, effect compartment compartment #1 PK dosing compartment depot compartment #2. compartment model requires new event table since compartment number changed: can solved following command: Note solving require specifying effect compartment initial condition 1. Rather, already pre-specified eff(0)=1. can solved different initial conditions easily: rxode2 detective also require specify variables linCmt() function already defined block. Therefore, following function also work solve system. Note specify parameters solving system since built model, can override parameters:","code":"library(rxode2) ## Setup example model mod1 <-function() { model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff }) } ## Seup parameters and initial conditions theta <- c(KA=2.94E-01, CL=1.86E+01, V2=4.02E+01, # central Q=1.05E+01, V3=2.97E+02, # peripheral Kin=1, Kout=1, EC50=200) # effects inits <- c(eff=1) ## Setup dosing event information ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9, ii=12) %>% et(amt=20000, addl=4, time=120, ii=24) %>% add.sampling(0:240) ## Setup a mixed solved/ode system: mod2 <- function() { model({ ## the order of variables do not matter, the type of compartmental ## model is determined by the parameters specified. C2 = linCmt(KA, CL, V2, Q, V3); eff(0) = 1 ## This specifies that the effect compartment starts at 1. d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }) } ev <- et(amountUnits='mg', timeUnits='hours') %>% et(amt=10000, addl=9, ii=12, cmt=2) %>% et(amt=20000, addl=4, time=120, ii=24, cmt=2) %>% et(0:240) x <- mod2 %>% solve(theta, ev) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows x <- mod2 %>% solve(theta, ev,c(eff=2)) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 2 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 2 ## 2 1 121. 1.93 ## 3 2 60.3 1.67 ## 4 3 31.0 1.41 ## 5 4 17.0 1.23 ## 6 5 10.2 1.13 ## # i 235 more rows mod3 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ # Since the parameters are in the ini block, put them in linCmt so # that the model is detected correctly C2 <- linCmt(KA, CL, V2, Q, V3) eff(0) <- 1 ## This specifies that the effect compartment starts at 1. d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; }) } x <- mod3 %>% solve(ev) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows x <- mod3 %>% solve(c(KA=10),ev) print(x) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## KA CL V2 Q V3 Kin Kout EC50 ## 10.0 18.6 40.2 10.5 297.0 1.0 1.0 200.0 ## -- Initial Conditions ($inits): -- ## eff ## 1 ## -- First part of data (object): -- ## # A tibble: 241 x 3 ## time C2 eff ## [h] ## 1 0 249. 1 ## 2 1 121. 1.35 ## 3 2 60.3 1.38 ## 4 3 31.0 1.28 ## 5 4 17.0 1.18 ## 6 5 10.2 1.11 ## # i 235 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"nesting-in-rxode2","dir":"Articles","previous_headings":"","what":"Nesting in rxode2","title":"Nesting levels in rxode2","text":"one level nesting possible rxode2; example using following uncertainties sources variability:","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"event-table","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Event table","title":"Nesting levels in rxode2","text":"event table contains nesting variables: inv: investigator id id: subject id eye: eye id (left right) occ: occasion","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(seq(0, 240, by=4)) %>% # Assumes sampling when there is no dosing information et(seq(0, 240, by=4) + 0.1) %>% ## adds 0.1 for separate eye et(id=1:20) %>% ## Add an occasion per dose mutate(occ=cumsum(!is.na(amt))) %>% mutate(occ=ifelse(occ == 0, 1, occ)) %>% mutate(occ=2- occ %% 2) %>% mutate(eye=ifelse(round(time) == time, 1, 2)) %>% mutate(inv=ifelse(id < 10, 1, 2)) %>% as_tibble -> ev"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"rxode2-model","dir":"Articles","previous_headings":"Nesting in rxode2","what":"rxode2 model","title":"Nesting levels in rxode2","text":"creates rxode2 model multi-level nesting. Note variables inv.Cl, inv.Ka, eta.Cl etc; need one variable level nesting.","code":"mod <- rxode2({ ## Clearance with individuals eff(0) = 1 C2 = centr/V2*(1+prop.sd) C3 = peri/V3 CL = TCl*exp(eta.Cl + eye.Cl + iov.Cl + inv.Cl) KA = TKA * exp(eta.Ka + eye.Ka + iov.Cl + inv.Ka) d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff ef0 = eff + add.sd }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"uncertainty-in-model-parameters","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Uncertainty in Model parameters","title":"Nesting levels in rxode2","text":"","code":"theta <- c(\"TKA\"=0.294, \"TCl\"=18.6, \"V2\"=40.2, \"Q\"=10.5, \"V3\"=297, \"Kin\"=1, \"Kout\"=1, \"EC50\"=200) ## Creating covariance matrix tmp <- matrix(rnorm(8^2), 8, 8) tMat <- tcrossprod(tmp, tmp) / (8 ^ 2) dimnames(tMat) <- list(names(theta), names(theta)) tMat #> TKA TCl V2 Q V3 #> TKA 0.173571236 -0.1003204607 0.038185010 -0.004108928 -0.095032973 #> TCl -0.100320461 0.2195710868 -0.043849095 0.013295549 -0.007477895 #> V2 0.038185010 -0.0438490948 0.129784612 -0.017270432 -0.038004762 #> Q -0.004108928 0.0132955493 -0.017270432 0.022145634 0.020376451 #> V3 -0.095032973 -0.0074778948 -0.038004762 0.020376451 0.165568340 #> Kin -0.040867119 -0.0492597458 -0.003056722 -0.033468634 -0.003021883 #> Kout 0.035469225 0.0275087955 0.033725901 0.027668205 0.005497301 #> EC50 0.026158042 0.0009434711 0.039426946 -0.036283167 -0.093134292 #> Kin Kout EC50 #> TKA -0.040867119 0.035469225 0.0261580416 #> TCl -0.049259746 0.027508796 0.0009434711 #> V2 -0.003056722 0.033725901 0.0394269465 #> Q -0.033468634 0.027668205 -0.0362831667 #> V3 -0.003021883 0.005497301 -0.0931342922 #> Kin 0.226735493 -0.083447793 0.0659884544 #> Kout -0.083447793 0.117195570 -0.0291684598 #> EC50 0.065988454 -0.029168460 0.0928611407"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"nesting-variability","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Nesting Variability","title":"Nesting levels in rxode2","text":"specify multiple levels nesting, can specify nested lotri matrix; using approach use condition operator | specify variable nesting occurs ; Bayesian simulation need specify much information parameter; rxode2 nu parameter. case: - id, nu=100 model came 100 subjects - eye, nu=200 model came 200 eyes - occ, nu=200 model came 200 occasions - inv, nu=10 model came 10 investigators specify lotri can use | var(nu=X), :","code":"omega <- lotri(lotri(eta.Cl ~ 0.1, eta.Ka ~ 0.1) | id(nu=100), lotri(eye.Cl ~ 0.05, eye.Ka ~ 0.05) | eye(nu=200), lotri(iov.Cl ~ 0.01, iov.Ka ~ 0.01) | occ(nu=200), lotri(inv.Cl ~ 0.02, inv.Ka ~ 0.02) | inv(nu=10)) omega #> $id #> eta.Cl eta.Ka #> eta.Cl 0.1 0.0 #> eta.Ka 0.0 0.1 #> #> $eye #> eye.Cl eye.Ka #> eye.Cl 0.05 0.00 #> eye.Ka 0.00 0.05 #> #> $occ #> iov.Cl iov.Ka #> iov.Cl 0.01 0.00 #> iov.Ka 0.00 0.01 #> #> $inv #> inv.Cl inv.Ka #> inv.Cl 0.02 0.00 #> inv.Ka 0.00 0.02 #> #> Properties: nu"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"unexplained-variability","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Unexplained variability","title":"Nesting levels in rxode2","text":"last piece variability specify unexplained variability","code":"sigma <- lotri(prop.sd ~ .25, add.sd~ 0.125)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-nesting.html","id":"solving-the-problem","dir":"Articles","previous_headings":"Nesting in rxode2","what":"Solving the problem","title":"Nesting levels in rxode2","text":"multiple investigators study; investigator number individuals enrolled site. rxode2 automatically determines number investigators simulate effect investigator. output, inv.Cl(inv==1) inv.Cl investigator 1, inv.Cl(inv==2) inv.Cl investigator 2, etc. inv.Cl(inv==1), inv.Cl(inv==2), etc simulated study combined form investigator variability. equation form represent following: look simulated parameters can see inv.Cl(inv==1) inv.Cl(inv==2) s$params; study: eye variability occasion variability individual simulates number variables become eye occasion variability; case eye: look simulation variables (ie eye.Cl(eye==1), eye.Cl(eye==2), etc) change individual combined make eye variability occasion variability can seen pharamcometric models.","code":"s <- rxSolve(mod, theta, ev, thetaMat=tMat, omega=omega, sigma=sigma, sigmaDf=400, nStud=400) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> unhandled error message: EE:[lsoda] 70000 steps taken before reaching tout #> @(lsoda.c:754 #> Warning: some ID(s) could not solve the ODEs correctly; These values are #> replaced with 'NA' print(s) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> # A tibble: 8,000 x 24 #> sim.id id `inv.Cl(inv==1)` `inv.Cl(inv==2)` `inv.Ka(inv==1)` #> #> 1 1 1 0.00900 -0.117 0.312 #> 2 1 2 0.00900 -0.117 0.312 #> 3 1 3 0.00900 -0.117 0.312 #> 4 1 4 0.00900 -0.117 0.312 #> 5 1 5 0.00900 -0.117 0.312 #> 6 1 6 0.00900 -0.117 0.312 #> 7 1 7 0.00900 -0.117 0.312 #> 8 1 8 0.00900 -0.117 0.312 #> 9 1 9 0.00900 -0.117 0.312 #> 10 1 10 0.00900 -0.117 0.312 #> # i 7,990 more rows #> # i 19 more variables: `inv.Ka(inv==2)` , `eye.Cl(eye==1)` , #> # `eye.Cl(eye==2)` , `eye.Ka(eye==1)` , `eye.Ka(eye==2)` , #> # `iov.Cl(occ==1)` , `iov.Cl(occ==2)` , `iov.Ka(occ==1)` , #> # `iov.Ka(occ==2)` , V2 , V3 , TCl , eta.Cl , #> # TKA , eta.Ka , Q , Kin , Kout , EC50 #> -- Initial Conditions ($inits): -- #> depot centr peri eff #> 0 0 0 1 #> #> Simulation with uncertainty in: #> * parameters ($thetaMat for changes) #> * omega matrix ($omegaList) #> #> -- First part of data (object): -- #> # A tibble: 976,000 x 21 #> sim.id id time inv.Cl inv.Ka eye.Cl eye.Ka iov.Cl iov.Ka C2 C3 #> [h] #> 1 1 1 0 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 0 0 #> 2 1 1 0.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 8.04 0.0108 #> 3 1 1 4 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 55.4 5.58 #> 4 1 1 4.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 23.2 5.69 #> 5 1 1 8 0.00900 0.312 -0.330 -0.0547 0.0370 0.139 19.6 7.95 #> 6 1 1 8.1 0.00900 0.312 0.0792 0.185 0.0370 0.139 20.0 7.97 #> # i 975,994 more rows #> # i 10 more variables: CL , KA , ef0 , depot , centr , #> # peri , eff , occ , eye , inv inv.Cl = (inv == 1) * `inv.Cl(inv==1)` + (inv == 2) * `inv.Cl(inv==2)` print(head(s$params)) #> sim.id id inv.Cl(inv==1) inv.Cl(inv==2) inv.Ka(inv==1) inv.Ka(inv==2) #> 1 1 1 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 2 1 2 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 3 1 3 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 4 1 4 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 5 1 5 0.008995575 -0.1165083 0.3118205 -0.001926179 #> 6 1 6 0.008995575 -0.1165083 0.3118205 -0.001926179 #> eye.Cl(eye==1) eye.Cl(eye==2) eye.Ka(eye==1) eye.Ka(eye==2) iov.Cl(occ==1) #> 1 -0.33023666 0.079190835 -0.05471051 0.18487157 0.037021761 #> 2 -0.42211135 -0.006773841 -0.15399939 0.22463048 -0.007762485 #> 3 -0.05128596 0.123504458 0.18243012 0.13361259 -0.168921159 #> 4 -0.06360621 0.340443016 0.65606292 0.04807945 0.157027939 #> 5 0.08009126 -0.027627640 0.06662396 -0.05838949 -0.226341946 #> 6 -0.11937190 0.090540884 -0.17320340 0.02039840 -0.211648032 #> iov.Cl(occ==2) iov.Ka(occ==1) iov.Ka(occ==2) V2 V3 TCl #> 1 -0.19726803 0.13932112 0.088763868 40.26476 296.4748 19.25043 #> 2 0.04555116 0.07716277 0.049148937 40.26476 296.4748 19.25043 #> 3 0.17916513 0.08347085 -0.002990168 40.26476 296.4748 19.25043 #> 4 -0.13444417 0.24736740 -0.077647794 40.26476 296.4748 19.25043 #> 5 0.02049190 -0.09568733 0.054658457 40.26476 296.4748 19.25043 #> 6 0.12619350 -0.01547841 0.040206608 40.26476 296.4748 19.25043 #> eta.Cl TKA eta.Ka Q Kin Kout EC50 #> 1 0.09788109 0.2354877 -0.21526790 10.43157 0.9256189 1.044937 200.3679 #> 2 0.33302598 0.2354877 -0.01028112 10.43157 0.9256189 1.044937 200.3679 #> 3 0.08504325 0.2354877 0.37253705 10.43157 0.9256189 1.044937 200.3679 #> 4 0.16521678 0.2354877 -0.01859974 10.43157 0.9256189 1.044937 200.3679 #> 5 0.53131380 0.2354877 -0.37109644 10.43157 0.9256189 1.044937 200.3679 #> 6 -0.30786713 0.2354877 0.14897588 10.43157 0.9256189 1.044937 200.3679 print(head(s$params %>% filter(sim.id == 2))) #> sim.id id inv.Cl(inv==1) inv.Cl(inv==2) inv.Ka(inv==1) inv.Ka(inv==2) #> 1 2 1 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 2 2 2 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 3 2 3 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 4 2 4 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 5 2 5 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> 6 2 6 -0.07227613 -0.01884171 0.07620864 -0.01962499 #> eye.Cl(eye==1) eye.Cl(eye==2) eye.Ka(eye==1) eye.Ka(eye==2) iov.Cl(occ==1) #> 1 -0.25102634 0.1354374 -0.135230741 -0.01605664 0.081212198 #> 2 -0.24832622 0.2233348 -0.380770273 -0.37101991 0.207985292 #> 3 0.24081384 -0.3826770 0.133361609 -0.32496203 -0.099983807 #> 4 -0.11021791 0.3655308 0.009423897 0.08736599 -0.002580804 #> 5 0.21155058 0.3626918 0.194977611 -0.19452347 0.058392202 #> 6 0.03663028 -0.1003754 0.068047203 0.32368023 0.167658084 #> iov.Cl(occ==2) iov.Ka(occ==1) iov.Ka(occ==2) V2 V3 TCl #> 1 -0.06556217 -0.032678168 -0.061277262 40.21091 296.6424 18.86433 #> 2 -0.05016896 0.130258486 -0.103721118 40.21091 296.6424 18.86433 #> 3 0.06144127 -0.262726137 -0.104186144 40.21091 296.6424 18.86433 #> 4 0.03954265 -0.037289852 -0.021344468 40.21091 296.6424 18.86433 #> 5 0.12713682 -0.007530921 0.081238197 40.21091 296.6424 18.86433 #> 6 -0.02811353 0.026801132 -0.002702762 40.21091 296.6424 18.86433 #> eta.Cl TKA eta.Ka Q Kin Kout EC50 #> 1 0.19368101 0.5686675 0.26184170 10.54673 0.5434136 1.323825 200.09 #> 2 -0.16262369 0.5686675 0.12969487 10.54673 0.5434136 1.323825 200.09 #> 3 0.22164455 0.5686675 0.24501105 10.54673 0.5434136 1.323825 200.09 #> 4 0.05997662 0.5686675 0.03059399 10.54673 0.5434136 1.323825 200.09 #> 5 0.45691421 0.5686675 -0.20098716 10.54673 0.5434136 1.323825 200.09 #> 6 -0.19943300 0.5686675 -0.36846082 10.54673 0.5434136 1.323825 200.09 eye.Cl = (eye == 1) * `eye.Cl(eye==1)` + (eye == 2) * `eye.Cl(eye==2)`"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"setting-up-the-rxode2-model-for-the-pipeline","dir":"Articles","previous_headings":"","what":"Setting up the rxode2 model for the pipeline","title":"rxode2 in a pipeline","text":"example show use rxode2 simple pipeline. can start model can used different simulation workflows rxode2 can handle: tumor growth model described Ribba 2012. case, compiled model R object Ribba2012, though rxode2 simulation pipeline, assign compiled model object, though think makes sense.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` Ribba2012 <- function() { ini({ k = 100 tkde = 0.24 eta.tkde = 0 tkpq = 0.0295 eta.kpq = 0 tkqpp = 0.0031 eta.kqpp = 0 tlambdap = 0.121 eta.lambdap = 0 tgamma = 0.729 eta.gamma = 0 tdeltaqp = 0.00867 eta.deltaqp = 0 prop.sd <- 0 tpt0 = 7.13 eta.pt0 = 0 tq0 = 41.2 eta.q0 = 0 }) model({ kde ~ tkde*exp(eta.tkde) kpq ~ tkpq * exp(eta.kpq) kqpp ~ tkqpp * exp(eta.kqpp) lambdap ~ tlambdap*exp(eta.lambdap) gamma ~ tgamma*exp(eta.gamma) deltaqp ~ tdeltaqp*exp(eta.deltaqp) d/dt(c) = -kde * c d/dt(pt) = lambdap * pt *(1-pstar/k) + kqpp*qp - kpq*pt - gamma*c*kde*pt d/dt(q) = kpq*pt -gamma*c*kde*q d/dt(qp) = gamma*c*kde*q - kqpp*qp - deltaqp*qp ## initial conditions pt0 ~ tpt0*exp(eta.pt0) q0 ~ tq0*exp(eta.q0) pt(0) = pt0 q(0) = q0 pstar <- (pt+q+qp) pstar ~ prop(prop.sd) }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-one-event-table","dir":"Articles","previous_headings":"","what":"Simulating one event table","title":"rxode2 in a pipeline","text":"Simulating single event table quite simple: pipe rxode2 simulation object event table object et(). events completely specified, simply solve ODE system rxSolve(). case can pipe output plot() conveniently view results. pt (Proliferative Tissue), q (quiescent tissue) qp (DNA-Damaged quiescent tissue) pstar (total tumor tissue)","code":"Ribba2012 %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve() %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-with-between-subject-variability","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulating with between subject variability","title":"rxode2 in a pipeline","text":"next sort simulation may useful simulating multiple patients treatments. case, use omega matrix specified paper: information, easy simulate 3 subjects model-based parameters: Note two different things added simulation: - nSub specify many subjects model - omega specify subject variability.","code":"## Add CVs from paper for individual simulation ## Uses exact formula: lognCv = function(x){log((x/100)^2+1)} library(lotri) ## Now create omega matrix ## I'm using lotri to quickly specify names/diagonals omega <- lotri(eta.pt0 ~ lognCv(94), eta.q0 ~ lognCv(54), eta.lambdap ~ lognCv(72), eta.kqp ~ lognCv(76), eta.kqpp ~ lognCv(97), eta.deltaqp ~ lognCv(115), eta.tkde ~ lognCv(70)) omega #> eta.pt0 eta.q0 eta.lambdap eta.kqp eta.kqpp eta.deltaqp #> eta.pt0 0.6331848 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.q0 0.0000000 0.2558818 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.lambdap 0.0000000 0.0000000 0.4176571 0.0000000 0.0000000 0.0000000 #> eta.kqp 0.0000000 0.0000000 0.0000000 0.4559047 0.0000000 0.0000000 #> eta.kqpp 0.0000000 0.0000000 0.0000000 0.0000000 0.6631518 0.0000000 #> eta.deltaqp 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.8426442 #> eta.tkde 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 #> eta.tkde #> eta.pt0 0.0000000 #> eta.q0 0.0000000 #> eta.lambdap 0.0000000 #> eta.kqp 0.0000000 #> eta.kqpp 0.0000000 #> eta.deltaqp 0.0000000 #> eta.tkde 0.3987761 set.seed(1089) rxSetSeed(1089) Ribba2012 %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, omega=omega) %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> Warning: multi-subject simulation without without 'omega'"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulation-with-unexplained-variability","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulation with unexplained variability","title":"rxode2 in a pipeline","text":"can even add unexplained variability quite easily: case added sigma matrix unexplained variability pstar total tumor tissue. can even simulate uncertainty theta omega sigma values wish.","code":"Ribba2012 %>% # Use rxode2 ini(prop.sd=0.05) %>% # change variability et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, omega=omega) %>% plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' # note that sim is the simulated pstar since this is simulated from the # model with a nlmixr2 endpoint"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulation-with-uncertainty-in-all-the-parameters-by-matrices","dir":"Articles","previous_headings":"Simulating multiple subjects from a single event table","what":"Simulation with uncertainty in all the parameters (by matrices)","title":"rxode2 in a pipeline","text":"assume parameters came 95 subjects 8 observations apiece, degrees freedom omega matrix 95, degrees freedom sigma matrix 95*8=760 95 items informed omega matrix, 760 items informed sigma matrix. Often simulations full covariance matrix fixed effect parameters. case, matrix, specified thetaMat. full covariance matrix, can information diagonal elements covariance matrix model paper. can converted follows: Now thetaMat represent uncertainty theta matrix, well pieces simulation. Typically can put information simulation thetaMat matrix. large variability theta easy sample negative rate constant, make sense. example: correct problems simply need use truncated multivariate normal specify reasonable ranges parameters. theta specified thetaLower thetaUpper. Similar parameters matrices: omegaLower, omegaUpper, sigmaLower sigmaUpper. may named vectors, one numeric value, numeric vector matching number parameters specified thetaMat matrix. case simulation simply modified thetaLower=0 make sure rates positive:","code":"Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=3, nStud=3, omega=omega, dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' rseVar <- function(est, rse){ return(est*rse/100)^2 } thetaMat <- lotri(tpt0 ~ rseVar(7.13,25), tq0 ~ rseVar(41.2,7), tlambdap ~ rseVar(0.121, 16), tkqpp ~ rseVar(0.0031, 35), tdeltaqp ~ rseVar(0.00867, 21), tgamma ~ rseVar(0.729, 37), tkde ~ rseVar(0.24, 33) ) thetaMat #> tpt0 tq0 tlambdap tkqpp tdeltaqp tgamma tkde #> tpt0 1.7825 0.000 0.00000 0.000000 0.0000000 0.00000 0.0000 #> tq0 0.0000 2.884 0.00000 0.000000 0.0000000 0.00000 0.0000 #> tlambdap 0.0000 0.000 0.01936 0.000000 0.0000000 0.00000 0.0000 #> tkqpp 0.0000 0.000 0.00000 0.001085 0.0000000 0.00000 0.0000 #> tdeltaqp 0.0000 0.000 0.00000 0.000000 0.0018207 0.00000 0.0000 #> tgamma 0.0000 0.000 0.00000 0.000000 0.0000000 0.26973 0.0000 #> tkde 0.0000 0.000 0.00000 0.000000 0.0000000 0.00000 0.0792 Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=2, nStud=2, omega=omega, thetaMat=thetaMat, dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, pstar) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> unhandled error message: EE:[lsoda] 70000 steps taken before reaching tout #> @(lsoda.c:750 #> Warning message: #> In rxSolve_(object, .ctl, .nms, .xtra, params, events, inits, setupOnly = .setupOnly) : #> Some ID(s) could not solve the ODEs correctly; These values are replaced with NA. Ribba2012 %>% # Use rxode2 ini(prop.sd = 0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=2, nStud=2, omega=omega, thetaMat=thetaMat, thetaLower=0, # Make sure the rates are reasonable dfSub=760, dfObs=95) %>% # Solve the simulation plot(pt, q, qp, sim) # Plot it, plotting the variables of interest #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega'"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"summarizing-the-simulation-output","dir":"Articles","previous_headings":"","what":"Summarizing the simulation output","title":"rxode2 in a pipeline","text":"easy use dplyr data.table perform summary simulations, rxode2 also provides ability confint function.","code":"## This takes a little more time; Most of the time is the summary ## time. sim0 <- Ribba2012 %>% # Use rxode2 ini(prop.sd=0.05) %>% et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(nSub=10, nStud=10, omega=omega, thetaMat=thetaMat, thetaLower=0, # Make sure the rates are reasonable dfSub=760, dfObs=95) %>% # Solve the simulation confint(c(\"pt\",\"q\",\"qp\",\"sim\"),level=0.90); # Create Simulation intervals #> ℹ change initial estimate of `prop.sd` to `0.05` #> Warning: multi-subject simulation without without 'omega' #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done sim0 %>% plot() # Plot the simulation intervals"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-pipeline.html","id":"simulating-from-a-data-frame-of-parameters","dir":"Articles","previous_headings":"Summarizing the simulation output","what":"Simulating from a data-frame of parameters","title":"rxode2 in a pipeline","text":"simulation matrices can useful fast way simulate information, sometimes may want simulate complex scenarios. instance, may reason believe tkde needs tlambdap, therefore need simulated carefully. can generate data frame whatever way want. internal method simulating new parameters exported .","code":"library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union Ribba2012 <- Ribba2012() # Convert to classic rxode2 model with ini attached r <- Ribba2012$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ pars <- rxInits(r) pars <- pars[regexpr(\"(prop|eta)\",names(pars)) == -1] print(pars) #> k tkde tkpq tkqpp tlambdap tgamma #> 1.00e+02 2.40e-01 2.95e-02 3.10e-03 1.21e-01 7.29e-01 #> tdeltaqp tpt0 tq0 rxerr.pstar #> 8.67e-03 7.13e+00 4.12e+01 1.00e+00 ## This is the exported method for simulation of Theta/Omega internally in rxode2 df <- rxSimThetaOmega(params=pars, omega=omega,dfSub=760, thetaMat=thetaMat, thetaLower=0, nSub=60,nStud=60) %>% filter(tkde > tlambdap) %>% as_tibble() ## You could also simulate more and bind them together to a data frame. print(df) #> # A tibble: 2,040 × 17 #> k tkde tkpq tkqpp tlambdap tgamma tdeltaqp tpt0 tq0 rxerr.pstar #> #> 1 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 2 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 3 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 4 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 5 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 6 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 7 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 8 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 9 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> 10 100 0.716 0.0295 0.529 0.161 0.887 0.412 7.82 41.9 1 #> # ℹ 2,030 more rows #> # ℹ 7 more variables: eta.pt0 , eta.q0 , eta.lambdap , #> # eta.kqp , eta.kqpp , eta.deltaqp , eta.tkde ## Quick check to make sure that all the parameters are OK. all(df$tkde>df$tlambdap) #> [1] TRUE sim1 <- r %>% # Use rxode2 et(time.units=\"months\") %>% # Pipe to a new event table et(amt=1, time=50, until=58, ii=1.5) %>% # Add dosing every 1.5 months et(0, 250, by=0.5) %>% # Add some sampling times (not required) rxSolve(df) ## Note this information looses information about which ID is in a ## \"study\", so it summarizes the confidence intervals by dividing the ## subjects into sqrt(#subjects) subjects and then summarizes the ## confidence intervals sim2 <- sim1 %>% confint(c(\"pt\",\"q\",\"qp\",\"sim\"),level=0.90); # Create Simulation intervals #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done save(sim2, file = file.path(system.file(package = \"rxode2\"), \"pipeline-sim2.rds\"), version = 2) sim2 %>% plot()"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"setting-up-model-for-plotting-explanation","dir":"Articles","previous_headings":"Plotting in rxode2","what":"Setting up model for plotting explanation","title":"Plotting rxode2 models","text":"first step explain rxode2 model plots setup: rxode2 model event table solved object","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` ## Model from rxode2 tutorial m1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 }) model({ C2 <- centr / V2 C3 <- peri / V3 d/dt(depot) <- -KA * depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 d/dt(peri) <- Q * C2 - Q * C3 d/dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff eff(0) <- 1 }) } ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, ii = 12, until = 24) %>% et(seq(0, 24, length.out = 100)) s <- rxSolve(m1, ev)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"default-rxode2-plot","dir":"Articles","previous_headings":"Plotting in rxode2","what":"Default rxode2 plot","title":"Plotting rxode2 models","text":"default plot rxode2 plot time versus state calculated lhs values: Things note: First, plots actually ggplot2 plots can modified standard ggplot2 grammar graphics Also note plot method rxSolve objects can currently use arguments default plot method: log character string contains \"x\" x axis logarithmic, \"y\" y axis logarithmic \"xy\" \"yx\" axes logarithmic. available, use xgxr xgx_scale_x_log10() xgx_scale_y_log10() functions. xlab bit different simply supplying x-label ggplot2, retain unit information originally supplied event table. Also note, available, unit information used used meaningful ticks xgx_scale_x_time_units() ylab supplies y label following currently unsupported: . type b. xlim c. ylim d. main e. sub f. ann g. axes","code":"plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"subsetting-plots","dir":"Articles","previous_headings":"","what":"Subsetting plots","title":"Plotting rxode2 models","text":"interesting, often useful subset plots based values interested ; example, interesting plot eff C2. , simply specify interesting items plot function. instance:","code":"plot(s, C2, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"semi-log-plots","dir":"Articles","previous_headings":"","what":"Semi-log plots","title":"Plotting rxode2 models","text":"Semi-log plots PK concentrations common; simply need use log=\"y\" uses xgx_scale_y_log10() available clearly show semi-log nature plot.","code":"plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"plots-with-multi-subject-plots","dir":"Articles","previous_headings":"","what":"Plots with multi-subject plots","title":"Plotting rxode2 models","text":"multi-subject plots can easily plot applying principles . illustrate plot, lets expand event table include plot 4 subjects lognormal random variability subjects; complete, may plot method: Notice colored individual labeled legend. interested concentration, produces similar plot: Notice plot individual labeled attached id let know individual comes . done ggrepel available, otherwise legend retained.","code":"# Setup the new problem m2 <- function() { ini({ KA <- 2.94E-01 TCL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 ## Added modeled bioavaiblity, duration and rate fdepot <- 1 durDepot <- 8 rateDepot <- 1250 eta.Cl ~ 0.4^2 }) model({ CL <- TCL * exp(eta.Cl) C2 <- centr / V2 C3 <- peri / V3 d/dt(depot) <- -KA * depot f(depot) <- fdepot dur(depot) <- durDepot rate(depot) <- rateDepot d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 d/dt(peri) <- Q * C2 - Q * C3 d/dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff eff(0) <- 1 }) } # Create the event table ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, until = units::set_units(3, days), ii = 12) %>% # loading doses et(seq(0, 48, length.out = 200)) %>% et(id = 1:4) s <- rxSolve(m2, ev) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ plot(s, C2, eff) plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-plot.html","id":"multi-subject-plots-with-large-number-of-subjects","dir":"Articles","previous_headings":"Plots with multi-subject plots","what":"Multi-subject plots with large number of subjects","title":"Plotting rxode2 models","text":"can get bit much many subjects solved (example lets simulate 100) case, individuals put plot transparent grayscale plot pane. allows places subjects present darker. number individuals plots switch legend grayscale controlled changing options rxode2.spaghetti. ie. options(rxode2.spaghetti=7). 7 individuals default value plotting changes individual grayscale spaghetti plots. can also create confidence interval simulations confint: plot plot","code":"ev <- et(timeUnits = \"hr\") %>% et(amt = 10000, until = units::set_units(3, days), ii = 12) %>% # loading doses et(seq(0, 48, length.out = 200)) %>% et(id = 1:100) # 100 subjects s <- rxSolve(m2, ev) plot(s, C2, log=\"y\", ylab=\"Concentration\") ## Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = ## minor_breaks, : log-10 transformation introduced infinite ## values. s2 <- confint(s, parm=\"C2\") ## ! in order to put confidence bands around the intervals, you need at least 2500 simulations ## summarizing data...done plot(s2)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-prior-data.html","id":"using-prior-data-for-solving","dir":"Articles","previous_headings":"","what":"Using prior data for solving","title":"Using Prior Data for ODE solving","text":"rxode2 can use single subject multiple subjects single event table solve ODEs. Additionally, rxode2 can use arbitrary data frame individualized events. example using nlmixr, use theo_sd data frame","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` library(nlmixr2data) ## Load data from nlmixr d <- theo_sd ## Create rxode2 model theo <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v }) } ## Create parameter dataset library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union parsDf <- tribble( ~ eta.ka, ~ eta.cl, ~ eta.v, 0.105, -0.487, -0.080, 0.221, 0.144, 0.021, 0.368, 0.031, 0.058, -0.277, -0.015, -0.007, -0.046, -0.155, -0.142, -0.382, 0.367, 0.203, -0.791, 0.160, 0.047, -0.181, 0.168, 0.096, 1.420, 0.042, 0.012, -0.738, -0.391, -0.170, 0.790, 0.281, 0.146, -0.527, -0.126, -0.198) %>% mutate(tka = 0.451, tcl = 1.017, tv = 3.449) ## Now solve the dataset solveData <- rxSolve(theo, parsDf, d) #> ℹ parameter labels from comments will be replaced by 'label()' #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ plot(solveData, cp) print(solveData) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 12 × 7 #> id tka tcl tv eta.ka eta.cl eta.v #> #> 1 1 0.451 1.02 3.45 0.105 -0.487 -0.08 #> 2 2 0.451 1.02 3.45 0.221 0.144 0.021 #> 3 3 0.451 1.02 3.45 0.368 0.031 0.058 #> 4 4 0.451 1.02 3.45 -0.277 -0.015 -0.007 #> 5 5 0.451 1.02 3.45 -0.046 -0.155 -0.142 #> 6 6 0.451 1.02 3.45 -0.382 0.367 0.203 #> 7 7 0.451 1.02 3.45 -0.791 0.16 0.047 #> 8 8 0.451 1.02 3.45 -0.181 0.168 0.096 #> 9 9 0.451 1.02 3.45 1.42 0.042 0.012 #> 10 10 0.451 1.02 3.45 -0.738 -0.391 -0.17 #> 11 11 0.451 1.02 3.45 0.79 0.281 0.146 #> 12 12 0.451 1.02 3.45 -0.527 -0.126 -0.198 #> ── Initial Conditions ($inits): ── #> depot center #> 0 0 #> ── First part of data (object): ── #> # A tibble: 132 × 8 #> id time ka cl v cp depot center #> #> 1 1 0 1.74 1.70 29.0 0 320. 0 #> 2 1 0.25 1.74 1.70 29.0 3.86 207. 112. #> 3 1 0.57 1.74 1.70 29.0 6.81 118. 198. #> 4 1 1.12 1.74 1.70 29.0 9.06 45.4 263. #> 5 1 2.02 1.74 1.70 29.0 9.79 9.45 284. #> 6 1 3.82 1.74 1.70 29.0 9.10 0.410 264. #> # ℹ 126 more rows ## Of course the fasest way to solve if you don't care about the rxode2 extra parameters is solveData <- rxSolve(theo, parsDf, d, returnType=\"data.frame\") #> ℹ parameter labels from comments will be replaced by 'label()' #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## solved data dplyr::as_tibble(solveData) #> # A tibble: 132 × 8 #> id time ka cl v cp depot center #> #> 1 1 0 1.74 1.70 29.0 0 320. 0 #> 2 1 0.25 1.74 1.70 29.0 3.86 207. 112. #> 3 1 0.57 1.74 1.70 29.0 6.81 118. 198. #> 4 1 1.12 1.74 1.70 29.0 9.06 45.4 263. #> 5 1 2.02 1.74 1.70 29.0 9.79 9.45 284. #> 6 1 3.82 1.74 1.70 29.0 9.10 0.410 264. #> 7 1 5.1 1.74 1.70 29.0 8.46 0.0440 246. #> 8 1 7.03 1.74 1.70 29.0 7.56 0.00152 219. #> 9 1 9.05 1.74 1.70 29.0 6.71 0.0000449 195. #> 10 1 12.1 1.74 1.70 29.0 5.61 0.000000212 163. #> # ℹ 122 more rows data.table::data.table(solveData) #> id time ka cl v cp depot center #> #> 1: 1 0.00 1.7436838 1.698932 29.04946 0.000000 3.199920e+02 0.00000 #> 2: 1 0.25 1.7436838 1.698932 29.04946 3.861730 2.069289e+02 112.18117 #> 3: 1 0.57 1.7436838 1.698932 29.04946 6.805372 1.184389e+02 197.69240 #> 4: 1 1.12 1.7436838 1.698932 29.04946 9.058196 4.539354e+01 263.13572 #> 5: 1 2.02 1.7436838 1.698932 29.04946 9.791088 9.450361e+00 284.42585 #> --- #> 128: 12 5.07 0.9268162 2.437566 25.81614 8.442535 2.919432e+00 217.95370 #> 129: 12 7.07 0.9268162 2.437566 25.81614 7.074251 4.573778e-01 182.62989 #> 130: 12 9.03 0.9268162 2.437566 25.81614 5.892253 7.436222e-02 152.11524 #> 131: 12 12.05 0.9268162 2.437566 25.81614 4.432614 4.526550e-03 114.43300 #> 132: 12 24.15 0.9268162 2.437566 25.81614 1.414179 6.154773e-08 36.50865"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-rxUse.html","id":"using-pre-compiled-models-in-your-packages","dir":"Articles","previous_headings":"","what":"Using Pre-compiled models in your packages","title":"Compiled rxode2 models in Packages","text":"package like include pre-compiled rxode2 models package easy create package. simple make package rxPkg() command. : Add model package; can use package data idr package loads Add right package requirements DESCRIPTION file. want update describe package modify authors, license etc. Create skeleton model documentation files can add package documentation. case file idr-doc.R R directory Create configure configure.win script removes regenerates src directory based whatever version rxode2 compiled . modified plan compiled code, though suggested. can write R code package interacts rxode2 object can distribute shiny apps similar things package context. present can add models package rxUse(). Simply compile rxode2 model package add model rxUse() Now model idr model library. also create model-doc.R R directory can document model. can use devtools methods install/test model","code":"library(rxode2); ## Now Create a model idr <- rxode2({ C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }) ## You can specify as many models as you want to add rxPkg(idr, package=\"myPackage\"); ## Add the idr model to your package rxUse(model) devtools::load_all() # Load all the functions in the package devtools::document() # Create package documentation devtools::install() # Install package devtools::check() # Check the package devtools::build() # build the package so you can submit it to places like CRAN"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-rxUse.html","id":"using-models-in-a-already-present-package","dir":"Articles","previous_headings":"","what":"Using Models in a already present package","title":"Compiled rxode2 models in Packages","text":"illustrate, lets start blank package rxUse() : - Create rxode2 sources move package’s src/ directory. R source package, also finish directory library-init.c registers rxode2 models package use R. - Create stub R documentation models including package. able see R documentation loading package standard ? interface. still need : - Export least one function. function wish export, can add re-export rxode2 using roxygen follows: want use Suggests instead Depends package, way want export rxode2’s normal routines also need instruct R load model library models included model’s dll. done : R package rxode2 models intend add compiled sources (recommended), can add following configure scripts Depending check may need dummy autoconf script, want integrate sources Rcpp C/Fortan based packages, need include rxModels-compiled.h : - Add define macro compiledModelCall list registered .Call functions. - Register C interface allow model solving R_init0_rxModels_rxode2_models() (rxModels replaced package name). complete, can compile/document standard methods: load package new version rxode2, models recompiled used. However, want models recompiled recent version rxode2, simply need call rxUse() project directory followed standard methods install/create package. Note include rxode2 code required generate model regenerate rxode2 c-code src directory. rxode2 objects, summary show one way recreate model. example compiled models package can found rxModels repository.","code":"library(rxode2) library(usethis) pkgPath <- file.path(rxTempDir(),\"MyRxModel\") create_package(pkgPath); use_gpl3_license(\"Matt\") use_package(\"rxode2\", \"LinkingTo\") use_package(\"rxode2\", \"Depends\") ## library(rxode2) on load; Can use imports instead. use_roxygen_md() ##use_readme_md() library(rxode2); ## Now Create a model idr <- rxode2({ C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; }); rxUse(idr); ## Add the idr model to your package rxUse(); # Update the compiled rxode2 sources for all of your packages ##' @importFrom rxode2 rxode2 ##' @export rxode2::rxode2 ##' @importFrom rxode2 rxode2 ##' @export rxode2::rxode2 ##' @importFrom rxode2 et ##' @export rxode2::et ##' @importFrom rxode2 etRep ##' @export rxode2::etRep ##' @importFrom rxode2 etSeq ##' @export rxode2::etSeq ##' @importFrom rxode2 as.et ##' @export rxode2::as.et ##' @importFrom rxode2 eventTable ##' @export rxode2::eventTable ##' @importFrom rxode2 add.dosing ##' @export rxode2::add.dosing ##' @importFrom rxode2 add.sampling ##' @export rxode2::add.sampling ##' @importFrom rxode2 rxSolve ##' @export rxode2::rxSolve ##' @importFrom rxode2 rxControl ##' @export rxode2::rxControl ##' @importFrom rxode2 rxClean ##' @export rxode2::rxClean ##' @importFrom rxode2 rxUse ##' @export rxode2::rxUse ##' @importFrom rxode2 rxShiny ##' @export rxode2::rxShiny ##' @importFrom rxode2 genShinyApp.template ##' @export rxode2::genShinyApp.template ##' @importFrom rxode2 cvPost ##' @export rxode2::cvPost # This is actually from `magrittr` but allows less imports ##' @importFrom rxode2 %>% ##' @export rxode2::`%>%` # In this case `rxModels` is the package name ##' @useDynLib rxModels, .registration=TRUE #!/bin/sh # This should be used for both configure and configure.win echo \"unlink('src', recursive=TRUE);rxode2::rxUse()\" > build.R ${R_HOME}/bin/Rscript build.R rm build.R ## dummy autoconf script ## It is saved to configure.ac devtools::load_all() devtools::document() devtools::install() devtools::load_all() devtools::document() devtools::install()"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-shiny.html","id":"facilities-for-generating-r-shiny-applications","dir":"Articles","previous_headings":"","what":"Facilities for generating R shiny applications","title":"rxode2 and Shiny","text":"example creating R shiny application interactively explore responses various complex dosing regimens available http://qsp.engr.uga.edu:3838/rxode2/RegimenSimulator. Shiny applications like one may programmatically created experimental function genShinyApp.template(). application includes widgets varying dose, dosing regimen, dose cycle, number cycles. Click go Shiny App","code":"genShinyApp.template(appDir = \"shinyExample\", verbose=TRUE) library(shiny) runApp(\"shinyExample\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-shiny.html","id":"exploring-parameter-fits-graphically-using-shiny","dir":"Articles","previous_headings":"","what":"Exploring parameter fits graphically using shiny","title":"rxode2 and Shiny","text":"rxode2 object can explored rxShiny(obj). rxShiny() also allow try new models see behave.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-variability-with-rxode2","dir":"Articles","previous_headings":"Population Simulations with rxode2","what":"Simulation of Variability with rxode2","title":"rxode2 Simulation","text":"pharmacometrics nonlinear-mixed effect modeling software (like nlmixr) characterizes -subject variability. subject variability can simulate new subjects. Assuming 2-compartment, indirect response model, can set create rxode2 model describing system :","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"setting-up-the-rxode2-model","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Setting up the rxode2 model","title":"rxode2 Simulation","text":"","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` set.seed(32) rxSetSeed(32) mod <- function() { ini({ KA <- 2.94E-01 TCl <- 1.86E+01 # between subject variability eta.Cl ~ 0.4^2 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 CL <- TCl*exp(eta.Cl) ## This is coded as a variable in the model d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulating","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulating","title":"rxode2 Simulation","text":"next step simulate create dosing regimen overall simulation: wish, can also add sampling times (though rxode2 can fill ): Note et takes similar arguments seq adding sampling times. methods adding sampling times events make complex dosing regimens (See event vignette). includes ways add variability sampling dosing times). complete can simulate using rxSolve routine: quickly look customize simulation use default plot routine. Since rxode2 object, create ggplot2 object can modify wish. extra parameter plot tells rxode2/R piece information interested plotting. case, interested looking derived parameter C2:","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=\"centr\") ev <- ev %>% et(0,48, length.out=100) sim <- rxSolve(mod, ev, nSub=100) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"checking-the-simulation-with-plot","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Checking the simulation with plot","title":"rxode2 Simulation","text":"course additional parameter also state value, like eff: even look two side--side: stack patchwork","code":"library(ggplot2) ## The plots from rxode2 are ggplots so they can be modified with ## standard ggplot commands. plot(sim, C2, log=\"y\") + ylab(\"Central Compartment\") ## They also takes many of the standard plot arguments; See ?plot plot(sim, eff, ylab=\"Effect\") plot(sim, C2, eff) library(patchwork) plot(sim, C2, log=\"y\") / plot(sim, eff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"processing-the-data-to-create-summary-plots","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Processing the data to create summary plots","title":"rxode2 Simulation","text":"Usually pharmacometric simulations enough simply simulate system. something easier digest, like look central extreme tendencies simulation. Since rxode2 solve object type data frame now straightforward perform calculations generate plots simulated data. can , 5th, 50th, 95th percentiles simulated data plotted. Note can see parameters simulated example","code":"confint(sim, \"C2\", level=0.95) %>% plot(ylab=\"Central Concentration\", log=\"y\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done confint(sim, \"eff\", level=0.95) %>% plot(ylab=\"Effect\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done head(sim$param) #> sim.id KA TCl V2 Q V3 Kin Kout EC50 eta.Cl #> 1 1 0.294 18.6 40.2 10.5 297 1 1 200 0.8067570 #> 2 2 0.294 18.6 40.2 10.5 297 1 1 200 0.0236961 #> 3 3 0.294 18.6 40.2 10.5 297 1 1 200 -0.3340697 #> 4 4 0.294 18.6 40.2 10.5 297 1 1 200 -0.1098197 #> 5 5 0.294 18.6 40.2 10.5 297 1 1 200 -0.2803752 #> 6 6 0.294 18.6 40.2 10.5 297 1 1 200 -0.2114090"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-unexplained-variability-sigma","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulation of unexplained variability (sigma)","title":"rxode2 Simulation","text":"addition conveniently simulating subject variability, can also easily simulate unexplained variability. One way create rxode2 model endpoints defined. Model piping can keeping model intact: can see dataset defined $multipleEndpoint: see endpoints defined eff C2: allows solve system: Since simulated model residual specification included multiple endpoint model, can summarize endpoint simply taking confidence interval \"sim\": want subset specific endpoint, like eff can create confidence interval endpoint using specification sim.eff, endpoint name separated sim dot:","code":"mod2 <- mod %>% model(eff ~ add(eff.sd), append=TRUE) %>% model(C2 ~ prop(prop.sd), append=TRUE) %>% ini(eff.sd=sqrt(0.1), prop.sd=sqrt(0.1)) #> ℹ add residual parameter `eff.sd` and set estimate to 1 #> ℹ add residual parameter `prop.sd` and set estimate to 1 #> ℹ change initial estimate of `eff.sd` to `0.316227766016838` #> ℹ change initial estimate of `prop.sd` to `0.316227766016838` mod2$multipleEndpoint #> variable cmt dvid* #> 1 eff ~ … cmt='eff' or cmt=4 dvid='eff' or dvid=1 #> 2 C2 ~ … cmt='C2' or cmt=5 dvid='C2' or dvid=2 ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=\"centr\") %>% et(seq(0,48, length.out=100), cmt=\"eff\") %>% et(seq(0,48, length.out=100), cmt=\"C2\") sim <- rxSolve(mod2, ev, nSub=100) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ s <- confint(sim, \"sim\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s) seff <- confint(sim, \"sim.eff\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(seff)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-individuals","dir":"Articles","previous_headings":"Population Simulations with rxode2 > Simulation of Variability with rxode2","what":"Simulation of Individuals","title":"rxode2 Simulation","text":"Sometimes may want match dosing observations individuals clinical trial. create data.frame using rxode2 event specification well ID column indicate individual. rxode2 event vignette talks datasets created.","code":"library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union ev1 <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, cmt=2) %>% et(0,48,length.out=10) ev2 <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=5000, cmt=2) %>% et(0,48,length.out=8) dat <- rbind(data.frame(ID=1, ev1$get.EventTable()), data.frame(ID=2, ev2$get.EventTable())) ## Note the number of subject is not needed since it is determined by the data sim <- rxSolve(mod, dat) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ sim %>% select(id, time, eff, C2) #> id time eff C2 #> 1 1 0.000000 [h] 1.000000 248.7562189 #> 2 1 5.333333 [h] 1.168348 19.1658271 #> 3 1 10.666667 [h] 1.040652 7.1764936 #> 4 1 16.000000 [h] 1.030849 6.0167596 #> 5 1 21.333333 [h] 1.027742 5.4446478 #> 6 1 26.666667 [h] 1.025204 4.9484199 #> 7 1 32.000000 [h] 1.022911 4.4984868 #> 8 1 37.333333 [h] 1.020828 4.0895169 #> 9 1 42.666667 [h] 1.018933 3.7177314 #> 10 1 48.000000 [h] 1.017211 3.3797461 #> 11 2 0.000000 [h] 1.000000 124.3781095 #> 12 2 6.857143 [h] 1.016301 1.9290018 #> 13 2 13.714286 [h] 1.006648 1.2918078 #> 14 2 20.571429 [h] 1.005617 1.0964981 #> 15 2 27.428571 [h] 1.004772 0.9317005 #> 16 2 34.285714 [h] 1.004055 0.7916739 #> 17 2 41.142857 [h] 1.003446 0.6726918 #> 18 2 48.000000 [h] 1.002928 0.5715923"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-of-clinical-trials","dir":"Articles","previous_headings":"","what":"Simulation of Clinical Trials","title":"rxode2 Simulation","text":"either using simple single event table, data clinical trial described , complete clinical trial simulation can performed. Typically clinical trial simulations want account uncertainty fixed parameter estimates, even uncertainty subject variability well unexplained variability. rxode2 allows account uncertainties simulating multiple virtual “studies,” specified parameter nStud. studies samples realization fixed effect parameters covariance matrices subject variability(omega) unexplained variabilities (sigma). Depending information models, strategies simulating realization omega sigma matrices. first strategy occurs either standard errors standard deviations (related parameters), modeled correlation model simulating . case suggested strategy use inverse Wishart (parameterized scale conjugate prior)/scaled inverse chi distribution. approach uses single parameter inform variability covariance matrix sampled (degrees freedom). second strategy occurs standard errors variance/standard deviation modeled correlations covariance matrix. approach perform separate simulations standard deviations correlation matrix. First simulate variance/standard deviation components thetaMat multivariate normal simulation. simulation transformation standard deviations, correlation matrix simulated using degrees freedom covariance matrix. Combining simulated standard deviation simulated correlation matrix give simulated covariance matrix. smaller dimension covariance matrices (dimension < 10x10) recommended use lkj distribution simulate correlation matrix. higher dimension covariance matrices suggested use inverse wishart distribution (transformed correlation matrix) simulations. covariance/variance prior simulated rxode2s cvPost() function.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulation-from-inverse-wishart-correlations","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulation from inverse Wishart correlations","title":"rxode2 Simulation","text":"example simulation : wish can see omega sigma used virtual study accessing solved data object $omega.list $sigma.list: can also see parameter realizations $params data frame.","code":"## Creating covariance matrix tmp <- matrix(rnorm(8^2), 8, 8) tMat <- tcrossprod(tmp, tmp) / (8 ^ 2) dimnames(tMat) <- list(NULL, names(mod2$theta)[1:8]) sim <- rxSolve(mod2, ev, nSub=100, thetaMat=tMat, nStud=10, dfSub=10, dfObs=100) s <-sim %>% confint(\"sim\") #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s) head(sim$omegaList) #> [[1]] #> eta.Cl #> eta.Cl 0.1676778 #> #> [[2]] #> eta.Cl #> eta.Cl 0.2917085 #> #> [[3]] #> eta.Cl #> eta.Cl 0.1776813 #> #> [[4]] #> eta.Cl #> eta.Cl 0.1578682 #> #> [[5]] #> eta.Cl #> eta.Cl 0.1845614 #> #> [[6]] #> eta.Cl #> eta.Cl 0.3282268 head(sim$sigmaList) #> [[1]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.12416983 0.04197039 #> rxerr.C2 0.04197039 0.97293971 #> #> [[2]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.84311199 -0.06277998 #> rxerr.C2 -0.06277998 1.22140938 #> #> [[3]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.9834771 0.1060251 #> rxerr.C2 0.1060251 1.0024751 #> #> [[4]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.25556975 0.07690868 #> rxerr.C2 0.07690868 0.90991261 #> #> [[5]] #> rxerr.eff rxerr.C2 #> rxerr.eff 1.116261 -0.184748 #> rxerr.C2 -0.184748 1.320288 #> #> [[6]] #> rxerr.eff rxerr.C2 #> rxerr.eff 0.93539238 0.07270049 #> rxerr.C2 0.07270049 0.98648424"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulate-using-variancestandard-deviation-standard-errors","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulate using variance/standard deviation standard errors","title":"rxode2 Simulation","text":"Lets assume wish simulate nonmem run included xpose First setup model; Since taking nonmem like use free-form style classic rxode2 model start classic model: Next input estimated parameters: also covariances; , easiest way create named covariance matrix use lotri():","code":"rx1 <- rxode2({ cl <- tcl*(1+crcl.cl*(CLCR-65)) * exp(eta.cl) v <- tv * WT * exp(eta.v) ka <- tka * exp(eta.ka) ipred <- linCmt() obs <- ipred * (1 + prop.sd) + add.sd }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ theta <- c(tcl=2.63E+01, tv=1.35E+00, tka=4.20E+00, tlag=2.08E-01, prop.sd=2.05E-01, add.sd=1.06E-02, crcl.cl=7.17E-03, ## Note that since we are using the separation strategy the ETA variances are here too eta.cl=7.30E-02, eta.v=3.80E-02, eta.ka=1.91E+00) thetaMat <- lotri( tcl + tv + tka + tlag + prop.sd + add.sd + crcl.cl + eta.cl + eta.v + eta.ka ~ c(7.95E-01, 2.05E-02, 1.92E-03, 7.22E-02, -8.30E-03, 6.55E-01, -3.45E-03, -6.42E-05, 3.22E-03, 2.47E-04, 8.71E-04, 2.53E-04, -4.71E-03, -5.79E-05, 5.04E-04, 6.30E-04, -3.17E-06, -6.52E-04, -1.53E-05, -3.14E-05, 1.34E-05, -3.30E-04, 5.46E-06, -3.15E-04, 2.46E-06, 3.15E-06, -1.58E-06, 2.88E-06, -1.29E-03, -7.97E-05, 1.68E-03, -2.75E-05, -8.26E-05, 1.13E-05, -1.66E-06, 1.58E-04, -1.23E-03, -1.27E-05, -1.33E-03, -1.47E-05, -1.03E-04, 1.02E-05, 1.67E-06, 6.68E-05, 1.56E-04, 7.69E-02, -7.23E-03, 3.74E-01, 1.79E-03, -2.85E-03, 1.18E-05, -2.54E-04, 1.61E-03, -9.03E-04, 3.12E-01)) evw <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=100) %>% ## For this problem we will simulate with sampling windows et(list(c(0, 0.5), c(0.5, 1), c(1, 3), c(3, 6), c(6, 12))) %>% et(id=1:1000) ## From the run we know that: ## total number of observations is: 476 ## Total number of individuals: 74 sim <- rxSolve(rx1, theta, evw, nSub=100, nStud=10, thetaMat=thetaMat, ## Match boundaries of problem thetaLower=0, sigma=c(\"prop.sd\", \"add.sd\"), ## Sigmas are standard deviations sigmaXform=\"identity\", # default sigma xform=\"identity\" omega=c(\"eta.cl\", \"eta.v\", \"eta.ka\"), ## etas are variances omegaXform=\"variance\", # default omega xform=\"variance\" iCov=data.frame(WT=rnorm(1000, 70, 15), CLCR=rnorm(1000, 65, 25)), dfSub=74, dfObs=476); #> ℹ thetaMat has too many items, ignored: 'tlag' print(sim) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 10,000 × 9 #> sim.id id tcl crcl.cl eta.cl tv eta.v tka eta.ka #> #> 1 1 1 27.0 0.828 -0.884 1.73 0.531 5.38 0.114 #> 2 1 2 27.0 0.828 1.11 1.73 -0.906 5.38 -0.738 #> 3 1 3 27.0 0.828 -0.690 1.73 0.280 5.38 -0.365 #> 4 1 4 27.0 0.828 0.0751 1.73 -1.17 5.38 -0.575 #> 5 1 5 27.0 0.828 -0.299 1.73 -0.121 5.38 -0.601 #> 6 1 6 27.0 0.828 -0.638 1.73 -0.281 5.38 -0.309 #> 7 1 7 27.0 0.828 1.05 1.73 -0.0495 5.38 0.567 #> 8 1 8 27.0 0.828 -0.371 1.73 -0.372 5.38 -0.903 #> 9 1 9 27.0 0.828 -0.206 1.73 1.97 5.38 0.0203 #> 10 1 10 27.0 0.828 0.754 1.73 0.166 5.38 -1.73 #> # ℹ 9,990 more rows #> ── Initial Conditions ($inits): ── #> named numeric(0) #> #> Simulation with uncertainty in: #> • parameters ($thetaMat for changes) #> • omega matrix ($omegaList) #> • sigma matrix ($sigmaList) #> #> ── First part of data (object): ── #> # A tibble: 50,000 × 10 #> sim.id id time cl v ka ipred obs WT CLCR #> [h] #> 1 1 1 0.0155 50.4 183. 6.03 0.0487 3.56 62.2 69.3 #> 2 1 1 0.749 50.4 183. 6.03 0.460 -1.59 62.2 69.3 #> 3 1 1 1.02 50.4 183. 6.03 0.431 1.15 62.2 69.3 #> 4 1 1 3.41 50.4 183. 6.03 0.224 1.92 62.2 69.3 #> 5 1 1 7.81 50.4 183. 6.03 0.0666 0.731 62.2 69.3 #> 6 1 2 0.0833 2816. 24.9 2.57 0.0754 -1.20 35.7 105. #> # ℹ 49,994 more rows ## Notice that the simulation time-points change for the individual ## If you want the same sampling time-points you can do that as well: evw <- et(amount.units=\"mg\", time.units=\"hours\") %>% et(amt=100) %>% et(0, 24, length.out=50) %>% et(id=1:100) sim <- rxSolve(rx1, theta, evw, nSub=100, nStud=10, thetaMat=thetaMat, ## Match boundaries of problem thetaLower=0, sigma=c(\"prop.sd\", \"add.sd\"), ## Sigmas are standard deviations sigmaXform=\"identity\", # default sigma xform=\"identity\" omega=c(\"eta.cl\", \"eta.v\", \"eta.ka\"), ## etas are variances omegaXform=\"variance\", # default omega xform=\"variance\" iCov=data.frame(WT=rnorm(100, 70, 15), CLCR=rnorm(100, 65, 25)), dfSub=74, dfObs=476, resample=TRUE) #> ℹ thetaMat has too many items, ignored: 'tlag' s <-sim %>% confint(c(\"ipred\")) #> summarizing data... #> done plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-sim-var.html","id":"simulate-without-uncertainty-in-omega-or-sigma-parameters","dir":"Articles","previous_headings":"Simulation of Clinical Trials","what":"Simulate without uncertainty in omega or sigma parameters","title":"rxode2 Simulation","text":"wish sample prior distributions either omega sigma matrices, can turn feature specifying simVariability = FALSE option solving: Note since realizations omega sigma simulated, $omegaList $sigmaList return NULL.","code":"sim <- rxSolve(mod2, ev, nSub=100, thetaMat=tMat, nStud=10, simVariability=FALSE) s <-sim %>% confint(c(\"centr\", \"eff\")) #> ! in order to put confidence bands around the intervals, you need at least 2500 simulations #> summarizing data...done plot(s)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-single-subject.html","id":"single-subject-solving","dir":"Articles","previous_headings":"","what":"Single Subject solving","title":"Single Subject ODE solving -- differences from multiple subject","text":"Originally, rxode2 created solve ODEs one individual. single system without changes individual parameters. course still supported, classic examples found rxode2 intro. article discusses differences multiple subject single subject solving. three differences: Single solving solve ID parallel Single solving lacks id column parameters($params) well actual dataset. Single solving allows parameter exploration easier parameter can modified. multiple subject solves, make sure update individual parameter. first obvious difference speed; multiple subjects can run subject ID parallel. information examples speed gains multiple subject solving see Speeding rxode2 vignette. next difference amount information output final data. Taking 2 compartment indirect response model originally tutorial: Now simple solve better see differences single solve, can solve 2 individuals observing two solves, can see: multiple subject solve contains id column data frame data frame parameters subject. last feature obvious, modifying individual parameters. single subject data, can modify rxode2 data frame changing initial conditions parameter values part data frame, described rxode2 Data Frames. multiple subject solving, feature still works, requires care supplying individual’s parameter value, otherwise may change solve drop parameter key individuals.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 Q=1.05E+01 V3=2.97E+02 Kin=1 Kout=1 EC50=200 }) model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) =-KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) } et <- et(amount.units='mg', time.units='hours') %>% et(dose=10000, addl=9, ii=12) %>% et(amt=20000, nbr.doses=5, start.time=120, dosing.interval=24) %>% et(0:240) # sampling x <- rxSolve(mod1, et) x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows print(x) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions ($inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows plot(x, C2, eff) x2 <- rxSolve(mod1, et %>% et(id=1:2), params=data.frame(CL=c(18.6, 7.6))) print(x2) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 2 × 9 #> id KA CL V2 Q V3 Kin Kout EC50 #> #> 1 1 0.294 18.6 40.2 10.5 297 1 1 200 #> 2 2 0.294 7.6 40.2 10.5 297 1 1 200 #> ── Initial Conditions ($inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 482 × 8 #> id time C2 C3 depot centr peri eff #> [h] #> 1 1 0 0 0 10000 0 0 1 #> 2 1 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 1 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 1 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 1 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 1 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 476 more rows plot(x2, C2, eff)"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"a-note-about-the-speed-of-the-functional-form-for-rxode2","dir":"Articles","previous_headings":"","what":"A note about the speed of the functional form for rxode2","title":"Speeding up rxode2","text":"functional form benefit supported nlmixr2 therefore one interface solving estimating, takes computation time get underlying “classic” simulation code. models form : can also specify end-points simulation/estimation just like nlmixr2: every solve, compile (cached compile) underlying model. wish speed process can use two underlying rxode2 classic models. takes two steps: Parsing/evaluating model Creating simulation model first step can done rxode2(mod1) mod1() (second model ). second step create underlying “classic” rxode2 model, can done two different methods:$simulationModel $simulationIniModel. $simulationModel provide simulation code without initial conditions pre-pended, $simulationIniModel pre-pend values. endpoints specified, simulation code endpoint also output. can see differences : wish speed multiple simualtions rxode2 functions, need pre-calculate care steps : functions can act like normal ui model solved. can convert back UI .rxUi() function .function() needed. increase speed multiple simulations model use lower level simulation model (ie $simulationModel $simulationIniModel depending need)","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ KA <- 0.3 CL <- 7 V2 <- 40 Q <- 10 V3 <- 300 Kin <- 0.2 Kout <- 0.2 EC50 <- 8 }) model({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) } mod2f <- function() { ini({ TKA <- 0.3 TCL <- 7 TV2 <- 40 TQ <- 10 TV3 <- 300 TKin <- 0.2 TKout <- 0.2 TEC50 <- 8 eta.cl + eta.v ~ c(0.09, 0.08, 0.25) c2.prop.sd <- 0.1 eff.add.sd <- 0.1 }) model({ KA <- TKA CL <- TCL*exp(eta.cl) V2 <- TV2*exp(eta.v) Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 C2 ~ prop(c2.prop.sd) eff ~ add(eff.add.sd) }) } mod1 <- mod1() mod2f <- rxode2(mod2f) summary(mod1$simulationModel) #> rxode2 2.1.3 model named rx_cb1fa822f5309328f76b6ae6134387bc model (✔ ready). #> DLL: /tmp/RtmpPXkf2x/rxode2/rx_cb1fa822f5309328f76b6ae6134387bc__.rxd/rx_cb1fa822f5309328f76b6ae6134387bc_.so #> NULL #> #> Calculated Variables: #> [1] \"C2\" \"C3\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(KA, CL, V2, Q, V3, Kin, Kout, EC50) #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> }) summary(mod1$simulationIniModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_f8478a8ad7138c076241f845fcf72d6c model (✔ ready). #> DLL: /tmp/RtmpPXkf2x/rxode2/rx_f8478a8ad7138c076241f845fcf72d6c__.rxd/rx_f8478a8ad7138c076241f845fcf72d6c_.so #> NULL #> #> Calculated Variables: #> [1] \"C2\" \"C3\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(KA, CL, V2, Q, V3, Kin, Kout, EC50) #> KA = 0.3 #> CL = 7 #> V2 = 40 #> Q = 10 #> V3 = 300 #> Kin = 0.2 #> Kout = 0.2 #> EC50 = 8 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> }) summary(mod2f$simulationModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_881bb97ef0dcf691ed7a5d08770c2985 model (✔ ready). #> DLL: /tmp/RtmpPXkf2x/rxode2/rx_881bb97ef0dcf691ed7a5d08770c2985__.rxd/rx_881bb97ef0dcf691ed7a5d08770c2985_.so #> NULL #> #> Calculated Variables: #> [1] \"KA\" \"CL\" \"V2\" \"Q\" \"V3\" \"Kin\" #> [7] \"Kout\" \"EC50\" \"C2\" \"C3\" \"ipredSim\" \"sim\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(TKA, TCL, TV2, TQ, TV3, TKin, TKout, TEC50, c2.prop.sd, #> eff.add.sd, eta.cl, eta.v) #> KA = TKA #> CL = TCL * exp(eta.cl) #> V2 = TV2 * exp(eta.v) #> Q = TQ #> V3 = TV3 #> Kin = TKin #> Kout = TKout #> EC50 = TEC50 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ C2 #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (rx_pred_f_ * c2.prop.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.C2, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ eff #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (eff.add.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.eff, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> cmt(C2) #> dvid(5, 4) #> }) summary(mod2f$simulationIniModel) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_a19506ad281e7f985f0efe169504bf02 model (✔ ready). #> DLL: /tmp/RtmpPXkf2x/rxode2/rx_a19506ad281e7f985f0efe169504bf02__.rxd/rx_a19506ad281e7f985f0efe169504bf02_.so #> NULL #> #> Calculated Variables: #> [1] \"KA\" \"CL\" \"V2\" \"Q\" \"V3\" \"Kin\" #> [7] \"Kout\" \"EC50\" \"C2\" \"C3\" \"ipredSim\" \"sim\" #> ── rxode2 Model Syntax ── #> rxode2({ #> param(TKA, TCL, TV2, TQ, TV3, TKin, TKout, TEC50, c2.prop.sd, #> eff.add.sd, eta.cl, eta.v) #> rxerr.C2 = 1 #> rxerr.eff = 1 #> TKA = 0.3 #> TCL = 7 #> TV2 = 40 #> TQ = 10 #> TV3 = 300 #> TKin = 0.2 #> TKout = 0.2 #> TEC50 = 8 #> c2.prop.sd = 0.1 #> eff.add.sd = 0.1 #> eta.cl = 0 #> eta.v = 0 #> KA = TKA #> CL = TCL * exp(eta.cl) #> V2 = TV2 * exp(eta.v) #> Q = TQ #> V3 = TV3 #> Kin = TKin #> Kout = TKout #> EC50 = TEC50 #> C2 = centr/V2 #> C3 = peri/V3 #> d/dt(depot) = -KA * depot #> d/dt(centr) = KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) = Q * C2 - Q * C3 #> d/dt(eff) = Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) = 1 #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ C2 #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (rx_pred_f_ * c2.prop.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.C2, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ eff #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (eff.add.sd)^2 #> ipredSim = rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim = rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.eff, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> cmt(C2) #> dvid(5, 4) #> }) mod1 <- mod1$simulationModel mod2 <- mod2f$simulationModel"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"increasing-rxode2-speed-by-multi-subject-parallel-solving","dir":"Articles","previous_headings":"","what":"Increasing rxode2 speed by multi-subject parallel solving","title":"Speeding up rxode2","text":"Using classic rxode2 model specification (can convert functional/ui model style) continue discussion rxode2 speed enhancements. rxode2 originally developed ODE solver allowed ODE solve single subject. flexibility still supported. original code rxode2 tutorial :","code":"library(rxode2) library(microbenchmark) library(ggplot2) mod1 <- rxode2({ C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) = 1 }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## Create an event table ev <- et() %>% et(amt=10000, addl=9,ii=12) %>% et(time=120, amt=20000, addl=4, ii=24) %>% et(0:240) ## Add Sampling nsub <- 100 # 100 sub-problems sigma <- matrix(c(0.09,0.08,0.08,0.25),2,2) # IIV covariance matrix mv <- rxRmvn(n=nsub, rep(0,2), sigma) # Sample from covariance matrix CL <- 7*exp(mv[,1]) V2 <- 40*exp(mv[,2]) params.all <- cbind(KA=0.3, CL=CL, V2=V2, Q=10, V3=300, Kin=0.2, Kout=0.2, EC50=8)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"for-loop","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"For Loop","title":"Speeding up rxode2","text":"slowest way code use loop. example enclose function compare timing.","code":"runFor <- function(){ res <- NULL for (i in 1:nsub) { params <- params.all[i,] x <- mod1$solve(params, ev) ##Store results for effect compartment res <- cbind(res, x[, \"eff\"]) } return(res) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"running-with-apply","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Running with apply","title":"Speeding up rxode2","text":"general R, apply types functions perform better loop, tutorial also suggests speed enhancement","code":"runSapply <- function(){ res <- apply(params.all, 1, function(theta) mod1$run(theta, ev)[, \"eff\"]) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"run-using-a-single-threaded-solve","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Run using a single-threaded solve","title":"Speeding up rxode2","text":"can also rxode2 solve subject simultaneously without collecting results R, using single threaded solve. data output slightly different , still gives information:","code":"runSingleThread <- function(){ solve(mod1, params.all, ev, cores=1)[,c(\"sim.id\", \"time\", \"eff\")] }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"run-a-2-threaded-solve","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Run a 2 threaded solve","title":"Speeding up rxode2","text":"rxode2 supports multi-threaded solves, another option 2 threads (called cores solve options, can see options rxControl() rxSolve()).","code":"run2Thread <- function(){ solve(mod1, params.all, ev, cores=2)[,c(\"sim.id\", \"time\", \"eff\")] }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"compare-the-times-between-all-the-methods","dir":"Articles","previous_headings":"Increasing rxode2 speed by multi-subject parallel solving","what":"Compare the times between all the methods","title":"Speeding up rxode2","text":"Now moment truth, timings: clear largest jump performance using solve method providing parameters rxode2 solve without looping subject either sapply. number cores/threads applied solve also plays role solving. can explore number threads following code: can suite spot speed vs number cores. system type (mac, linux, windows /processor), complexity ODE solving number subjects may affect arbitrary number threads. 4 threads good number use without prior knowledge systems days least 4 threads (2 processors 4 threads).","code":"bench <- microbenchmark(runFor(), runSapply(), runSingleThread(),run2Thread()) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max #> runFor() 263.75899 267.88252 276.54611 269.91252 273.66833 391.77390 #> runSapply() 262.40141 268.24234 276.38984 270.40109 272.75447 434.24999 #> runSingleThread() 27.45217 27.61226 27.94130 27.69391 27.96168 37.54928 #> run2Thread() 16.17052 16.32538 17.99204 16.45466 16.85388 27.76178 #> neval #> 100 #> 100 #> 100 #> 100 autoplot(bench) runThread <- function(n){ solve(mod1, params.all, ev, cores=n)[,c(\"sim.id\", \"time\", \"eff\")] } bench <- eval(parse(text=sprintf(\"microbenchmark(%s)\", paste(paste0(\"runThread(\", seq(1, 2 * rxCores()),\")\"), collapse=\",\")))) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval #> runThread(1) 27.45592 27.64329 29.31929 28.28103 29.36378 48.39516 100 #> runThread(2) 16.17788 16.39189 18.17140 17.07855 17.39019 28.93695 100 #> runThread(3) 17.42292 19.35593 20.04593 19.99469 20.21361 27.37969 100 #> runThread(4) 15.80004 16.03155 18.46875 16.62245 16.95347 40.09879 100 autoplot(bench)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"increasing-speed-with-compiler-options","dir":"Articles","previous_headings":"","what":"Increasing speed with compiler options","title":"Speeding up rxode2","text":"One way allows faster ODE solving make approximations make math operators like exp() faster technically accurate enough follow IEEE standard math functions values (implications cover ). optimizations opt-Julia since compile everything session, CRAN conservative approach since individuals compile R function running . Still, rxode2 models can compiled option without disturbing CRAN policies. key set option. example: Note compiler settings can tricky setup system wide Makevars may interact setting. example use ccache compile may produced options since cached options. example, github runner (generates page), advantage \"fast\" compile. However, development laptop minimal speed increase. probably check using . disabled default since minimum increase speed.","code":"# Using the first example subset to PK mod2f <- function() { ini({ TKA <- 0.3 TCL <- 7 TV2 <- 40 TQ <- 10 TV3 <- 300 TKin <- 0.2 TKout <- 0.2 TEC50 <- 8 eta.cl + eta.v ~ c(0.09, 0.08, 0.25) c2.prop.sd <- 0.1 }) model({ KA <- TKA CL <- TCL*exp(eta.cl) V2 <- TV2*exp(eta.v) Q <- TQ V3 <- TV3 Kin <- TKin Kout <- TKout EC50 <- TEC50 C2 = centr/V2 C3 = peri/V3 d/dt(depot) = -KA*depot d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) = Q*C2 - Q*C3 C2 ~ prop(c2.prop.sd) }) } mod2f <- mod2f() mod2s <- mod2f$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling bench1 <- microbenchmark(standardCompile=rxSolve(mod2s, ev, nSub=1000)) # Now clear the cache of models so we can change the compile options for the same model rxClean() # Use withr to preserve the options withr::with_options(list(rxode2.compile.O=\"fast\"), { mod2s <- mod2f$simulationIniModel }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ bench2 <- microbenchmark(fastCompile=rxSolve(mod2s, ev, nSub=1000)) bench <- rbind(bench1, bench2) print(bench) #> Unit: milliseconds #> expr min lq mean median uq max neval #> standardCompile 173.3969 181.5005 218.6953 188.4703 239.3224 375.4217 100 #> fastCompile 174.1782 179.6236 214.7402 182.9570 230.5892 352.4374 100 autoplot(bench)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"a-real-life-example","dir":"Articles","previous_headings":"","what":"A real life example","title":"Speeding up rxode2","text":"cBefore parallel solving implemented, fastest way run rxode2 lapply. Rik Schoemaker created data-set nlmixr comparisons, reduced run faster automatic building pkgdown website. applying new parallel solving concepts can simply run simulation less code faster: can see striking time difference two methods; things keep mind: rxode2 use thread-safe sitmo threefry routines simulation eta values. Therefore results expected different (also random samples taken different order different) prior simulation run R 3.5, different random number generator results simulation different actual nlmixr comparison using slower simulation. speed comparison used data.table. rxode2 uses data.table internally (available) try speed sorting, different installations data.table installed. can force rxode2 use order() sorting using forderForceBase(TRUE). case little difference two, though examples data.table’s presence leads speed increase (less likely lead slowdown).","code":"library(rxode2) library(data.table) #Define the rxode2 model ode1 <- \" d/dt(abs) = -KA*abs; d/dt(centr) = KA*abs-(CL/V)*centr; C2=centr/V; \" #Create the rxode2 simulation object mod1 <- rxode2(model = ode1) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #Population parameter values on log-scale paramsl <- c(CL = log(4), V = log(70), KA = log(1)) #make 10,000 subjects to sample from: nsubg <- 300 # subjects per dose doses <- c(10, 30, 60, 120) nsub <- nsubg * length(doses) #IIV of 30% for each parameter omega <- diag(c(0.09, 0.09, 0.09))# IIV covariance matrix sigma <- 0.2 #Sample from the multivariate normal set.seed(98176247) rxSetSeed(98176247) library(MASS) mv <- mvrnorm(nsub, rep(0, dim(omega)[1]), omega) # Sample from covariance matrix #Combine population parameters with IIV params.all <- data.table( \"ID\" = seq(1:nsub), \"CL\" = exp(paramsl['CL'] + mv[, 1]), \"V\" = exp(paramsl['V'] + mv[, 2]), \"KA\" = exp(paramsl['KA'] + mv[, 3]) ) #set the doses (looping through the 4 doses) params.all[, AMT := rep(100 * doses,nsubg)] Startlapply <- Sys.time() #Run the simulations using lapply for speed s = lapply(1:nsub, function(i) { #selects the parameters associated with the subject to be simulated params <- params.all[i] #creates an eventTable with 7 doses every 24 hours ev <- eventTable() ev$add.dosing( dose = params$AMT, nbr.doses = 1, dosing.to = 1, rate = NULL, start.time = 0 ) #generates 4 random samples in a 24 hour period ev$add.sampling(c(0, sort(round(sample(runif(600, 0, 1440), 4) / 60, 2)))) #runs the rxode2 simulation x <- as.data.table(mod1$run(params, ev)) #merges the parameters and ID number to the simulation output x[, names(params) := params] }) #runs the entire sequence of 100 subjects and binds the results to the object res res = as.data.table(do.call(\"rbind\", s)) Stoplapply <- Sys.time() print(Stoplapply - Startlapply) #> Time difference of 12.08713 secs rx <- rxode2({ CL = log(4) V = log(70) KA = log(1) CL = exp(CL + eta.CL) V = exp(V + eta.V) KA = exp(KA + eta.KA) d/dt(abs) = -KA*abs; d/dt(centr) = KA*abs-(CL/V)*centr; C2=centr/V; }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ omega <- lotri(eta.CL ~ 0.09, eta.V ~ 0.09, eta.KA ~ 0.09) doses <- c(10, 30, 60, 120) startParallel <- Sys.time() ev <- do.call(\"rbind\", lapply(seq_along(doses), function(i){ et() %>% et(amt=doses[i]) %>% # Add single dose et(0) %>% # Add 0 observation ## Generate 4 samples in 24 hour period et(lapply(1:4, function(...){c(0, 24)})) %>% et(id=seq(1, nsubg) + (i - 1) * nsubg) %>% ## Convert to data frame to skip sorting the data ## When binding the data together as.data.frame })) ## To better compare, use the same output, that is data.table res <- rxSolve(rx, ev, omega=omega, returnType=\"data.table\") endParallel <- Sys.time() print(endParallel - startParallel) #> Time difference of 0.1223662 secs"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"want-more-ways-to-run-multi-subject-simulations","dir":"Articles","previous_headings":"A real life example","what":"Want more ways to run multi-subject simulations","title":"Speeding up rxode2","text":"version since tutorial even ways run multi-subject simulations, including adding variability sampling dosing times et() (see rxode2 events information), ability supply omega sigma matrix well adding thetaMat R simulate uncertainty omega, sigma theta matrices; see rxode2 simulation vignette.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-speed.html","id":"session-information","dir":"Articles","previous_headings":"A real life example","what":"Session Information","title":"Speeding up rxode2","text":"session information:","code":"sessionInfo() #> R version 4.4.0 (2024-04-24) #> Platform: x86_64-pc-linux-gnu #> Running under: Ubuntu 22.04.4 LTS #> #> Matrix products: default #> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 #> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 #> #> locale: #> [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 #> [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 #> [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C #> [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C #> #> time zone: UTC #> tzcode source: system (glibc) #> #> attached base packages: #> [1] stats graphics grDevices utils datasets methods base #> #> other attached packages: #> [1] MASS_7.3-60.2 data.table_1.15.4 ggplot2_3.5.1 #> [4] microbenchmark_1.4.10 rxode2_2.1.3 #> #> loaded via a namespace (and not attached): #> [1] gtable_0.3.5 xfun_0.44 bslib_0.7.0 #> [4] htmlwidgets_1.6.4 RApiSerialize_0.1.3 lattice_0.22-6 #> [7] vctrs_0.6.5 tools_4.4.0 generics_0.1.3 #> [10] tibble_3.2.1 symengine_0.2.6 fansi_1.0.6 #> [13] highr_0.11 pkgconfig_2.0.3 checkmate_2.3.1 #> [16] desc_1.4.3 RcppParallel_5.1.7 lifecycle_1.0.4 #> [19] compiler_4.4.0 farver_2.1.2 textshaping_0.4.0 #> [22] munsell_0.5.1 qs_0.26.3 htmltools_0.5.8.1 #> [25] sys_3.4.2 sass_0.4.9 yaml_2.3.8 #> [28] lazyeval_0.2.2 pillar_1.9.0 pkgdown_2.0.9 #> [31] crayon_1.5.2 jquerylib_0.1.4 cachem_1.1.0 #> [34] nlme_3.1-164 tidyselect_1.2.1 digest_0.6.35 #> [37] lotri_0.4.4 dplyr_1.1.4 purrr_1.0.2 #> [40] labeling_0.4.3 rxode2ll_2.0.11.9000 fastmap_1.2.0 #> [43] grid_4.4.0 colorspace_2.1-0 rxode2parse_2.0.19 #> [46] cli_3.6.2 dparser_1.3.1-11 magrittr_2.0.3 #> [49] utf8_1.2.4 withr_3.0.0 scales_1.3.0 #> [52] backports_1.5.0 rmarkdown_2.27 ragg_1.3.2 #> [55] stringfish_0.16.0 memoise_2.0.1 evaluate_0.23 #> [58] knitr_1.46 rex_1.2.1 rxode2et_2.0.13 #> [61] rxode2random_2.1.1 PreciseSums_0.6 rlang_1.1.3 #> [64] Rcpp_1.0.12 glue_1.7.0 jsonlite_1.8.8 #> [67] R6_2.5.1 systemfonts_1.1.0 fs_1.6.4 #> [70] units_0.8-5"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-stiff.html","id":"stiff-odes-with-jacobian-specification","dir":"Articles","previous_headings":"","what":"Stiff ODEs with Jacobian Specification","title":"rxode2 Jacobian specification and Stiff Systems","text":"Occasionally, may come across stiff differential equation, differential equation numerically unstable small variations parameters cause different solutions ODEs. One way tackle choose stiff-solver, hybrid stiff solver (like default LSODA). Typically enough. However exact Jacobian solutions may increase stability ODE. (Note Jacobian derivative ODE specification respect variable). rxode2 can specify Jacobian df(state)/dy(variable)= statement. classic ODE stiff properties various conditions Van der Pol differential equations. rxode2 can specified following: stiff mu=1, mu=1000 stiff system easy enough , bit tedious. rxode2 setup appropriately, can use computer algebra system sympy calculate Jacobian automatically. done rxode2 option calcJac option:","code":"library(rxode2) ## rxode2 2.1.3 using 2 threads (see ?getRxThreads) ## no cache: create with `rxCreateCache()` Vtpol2 <- function() { ini({ mu <- 1 ## nonstiff; 10 moderately stiff; 1000 stiff }) model({ d/dt(y) <- dy d/dt(dy) <- mu*(1-y^2)*dy - y ## Jacobian df(y)/dy(dy) <- 1 df(dy)/dy(y) <- -2*dy*mu*y - 1 df(dy)/dy(dy) <- mu*(1-y^2) ## Initial conditions y(0) <- 2 dy(0) <- 0 }) } et <- et(0, 10, length.out=200) %>% et(amt=0) s1 <- Vtpol2 %>% solve(et, method=\"lsoda\") ## i parameter labels from comments will be replaced by 'label()' ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(s1) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## mu ## 1 ## -- Initial Conditions ($inits): -- ## y dy ## 2 0 ## -- First part of data (object): -- ## # A tibble: 200 x 3 ## time y dy ## ## 1 0 2 0 ## 2 0.0503 2.00 -0.0933 ## 3 0.101 1.99 -0.173 ## 4 0.151 1.98 -0.242 ## 5 0.201 1.97 -0.302 ## 6 0.251 1.95 -0.353 ## # i 194 more rows s2 <- Vtpol2 %>% solve(c(mu=1000), et) ## i parameter labels from comments will be replaced by 'label()' ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(s2) ## -- Solved rxode2 object -- ## -- Parameters ($params): -- ## mu ## 1000 ## -- Initial Conditions ($inits): -- ## y dy ## 2 0 ## -- First part of data (object): -- ## # A tibble: 200 x 3 ## time y dy ## ## 1 0 2 0 ## 2 0.0503 2.00 -0.000667 ## 3 0.101 2.00 -0.000667 ## 4 0.151 2.00 -0.000667 ## 5 0.201 2.00 -0.000667 ## 6 0.251 2.00 -0.000667 ## # i 194 more rows Vtpol <- function() { ini({ mu <- 1 ## nonstiff; 10 moderately stiff; 1000 stiff }) model({ d/dt(y) <- dy d/dt(dy) <- mu*(1-y^2)*dy - y y(0) <- 2 dy(0) <- 0 }) } Vtpol <- Vtpol() # you can also use $symengineModelPrune if there is if/else blocks # that need to be converted: Vtpol <- rxode2(Vtpol$symengineModelNoPrune, calcJac=TRUE) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## > pruning branches (`if`/`else`)... ## v done ## > loading into symengine environment... ## v done ## > calculate jacobian ## [====|====|====|====|====|====|====|====|====|====] 0:00:00 ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ summary(Vtpol) ## rxode2 2.1.3 model named rx_ebf53954066c14e2215d9e98d501de9f model (ready). ## DLL: /tmp/RtmpPXkf2x/rxode2/rx_ebf53954066c14e2215d9e98d501de9f__.rxd/rx_ebf53954066c14e2215d9e98d501de9f_.so ## NULL ## -- rxode2 Model Syntax -- ## rxode2({ ## cmt(y) ## cmt(dy) ## d/dt(y) = dy ## d/dt(dy) = -y + mu * dy * (1 - Rx_pow_di(y, 2)) ## y(0) = 2 ## dy(0) = 0 ## df(y)/dy(y) = 0 ## df(dy)/dy(y) = -1 - 2 * y * mu * dy ## df(y)/dy(dy) = 1 ## df(dy)/dy(dy) = mu * (1 - Rx_pow_di(y, 2)) ## df(y)/dy(mu) = 0 ## df(dy)/dy(mu) = dy * (1 - Rx_pow_di(y, 2)) ## })"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"rxode2 ODE solving syntax","text":"briefly describes syntax used define models rxode2 translate R-callable compiled code. also describes communication variables R rxode2 modeling specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"creating-rxode2-models","dir":"Articles","previous_headings":"","what":"Creating rxode2 models","title":"rxode2 ODE solving syntax","text":"ODE-based model specification may coded inside four places: Inside rxode2({}) block statements: Inside rxode2(\"\") string statement: file name loaded rxode2: model function can parsed rxode2: block statement, character string text file internal rxode2 compilation manager translates ODE system C, compiles loads R session. call rxode2 produces object class rxode2 consists list-like structure (environment) various member functions. last type model (model function), call rxode2 creates parsed rxode2 ui can translated rxode2 compilation model. type function required nlmixr2 estimation can extended modified model piping. reason focused documentation.","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod <- rxode2({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ mod <- rxode2(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \") #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ writeLines(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \", \"modelFile.rxode2\") mod <- rxode2(filename='modelFile.rxode2') unlink(\"modelFile.rxode2\") mod <- function() { model({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) } mod <- rxode2(mod) # or simply mod() if the model is at the end of the function # These model functions often have residual components and initial # (`ini({})`) conditions attached as well. For example the # theophylline model can be written as: one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # after parsing the model mod <- one.compartment() mod$simulationModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_0577787cc435460f1d0396f10467e345 model (✔ ready). #> x$state: depot, center #> x$stateExtra: cp #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp #> x$lhs: ka, cl, v, cp, ipredSim, sim # or mod$simulationIniModel #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_b3707fe11efa354614e6788ba8c23ed4 model (✔ ready). #> x$state: depot, center #> x$stateExtra: cp #> x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp #> x$lhs: ka, cl, v, cp, ipredSim, sim"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"syntax","dir":"Articles","previous_headings":"","what":"Syntax","title":"rxode2 ODE solving syntax","text":"basic model specification consists one statements optionally terminated semi-colons ; optional comments (comments delimited # end--line). block statements set statements delimited curly braces, { ... }. Statements can either assignments, conditional /else /else, loops (can exited break), special statements, printing statements (debugging/testing). Assignment statements can : simple assignments, left hand identifier (.e., variable) special time-derivative assignments, left hand specifies change amount corresponding state variable (compartment) respect time e.g., d/dt(depot): special initial-condition assignments left hand specifies compartment initial condition specified, e.g. depot(0) = 0 special model event changes including bioavailability (f(depot)=1), lag time (alag(depot)=0), modeled rate (rate(depot)=2) modeled duration (dur(depot)=2). example model features event specification modeled infusions rxode2 data specification found rxode2 events vignette. special change point syntax, model times. model times specified mtime(var)=time special Jacobian-derivative assignments, left hand specifies change compartment ode respect variable. example, d/dt(y) = dy, Jacobian compartment can specified df(y)/dy(dy) = 1. may advantage obtaining solution specifying Jacobian stiff ODE systems. However, stiff systems tried LSODA, actually slightly slowed solving. Note assignment can done =, <- ~. assigning ~ operator, simple assignments time-derivative assignments output. Note rxode2 model functions assignment ~ can also overloaded residual distribution specification. Special statements can : Compartment declaration statements, can change default dosing compartment assumed compartment number(s) well add extra compartment names end (useful multiple-endpoint nlmixr models); specified cmt(compartmentName) Parameter declaration statements, can make sure input parameters certain order instead ordering parameters order parsed. useful keeping parameter order using 2 different ODE models. specified param(par1, par2,...) example model shown : Expressions assignment statements can numeric logical. Numeric expressions can include following numeric operators +, -, *, /, ^ mathematical functions defined C R math libraries (e.g., fabs, exp, log, sin, abs). may also access R’s functions R math libraries, like lgammafn log gamma function. rxode2 syntax case-sensitive, .e., ABC different abc, Abc, ABc, etc.","code":"# simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3;"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"identifiers","dir":"Articles","previous_headings":"Syntax","what":"Identifiers","title":"rxode2 ODE solving syntax","text":"Like R, Identifiers (variable names) may consist one alphanumeric, underscore _ period . characters, first character digit underscore _. Identifiers model specification can refer : State variables dynamic system (e.g., compartments pharmacokinetics model). Implied input variable, t (time), tlast (last time point), podo (oral dose, undocumented case absorption transit models). Special constants like pi R’s predefined constants. Model parameters (e.g., ka rate absorption, CL clearance, etc.) Others, created assignments part model specification; referred LHS (left-hand side) variable. Currently, rxode2 modeling language recognizes system state variables “parameters”, thus, values need passed R ODE model (e.g., age) either passed params argument integrator function rxSolve() supplied event data-set. certain variable names rxode2 event tables. avoid confusion, following event table-related items assigned, used state can accessed rxode2 code: cmt dvid addl ss rate id However following variables used model specification: evid ii Sometimes rxode2 generates variables fed back rxode2. Similarly, nlmixr2 generates variables used nlmixr estimation simulation. variables start either rx nlmixr prefixes. avoid problems, suggested use variables starting either rx nlmixr prefixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"logical-operators","dir":"Articles","previous_headings":"","what":"Logical Operators","title":"rxode2 ODE solving syntax","text":"Logical operators support standard R operators ==, != >= <= > <. Like R can () () statements, ifelse() expressions. Additionally can standard assignment. instance, following valid: Notice can also use character expressions comparisons. convenience comes cost since character comparisons slower numeric expressions. Unlike R, .numeric .integer logical statements needed, cause syntax error try use function.","code":"cov1 = covm*(sexf == \"female\") + covm*(sexf != \"female\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"supported-functions","dir":"Articles","previous_headings":"","what":"Supported functions","title":"rxode2 ODE solving syntax","text":"supported functions rxode2 can seen rxSupportedFuns(). brief description built-functions following table: Note lag(cmt) = equivalent alag(cmt) = = lag(wt)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"reserved-keywords","dir":"Articles","previous_headings":"","what":"Reserved keywords","title":"rxode2 ODE solving syntax","text":"reserved keywords rxode2 model. following table: Note rxFlag always output 11 calc_lhs since final variables calculated, though can tweak test certain parts rxode2 using flag.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"residual-functions-when-using-rxode2-functions","dir":"Articles","previous_headings":"","what":"Residual functions when using rxode2 functions","title":"rxode2 ODE solving syntax","text":"addition ~ hiding output certain types output, also used specify residual output endpoint input rxode2 model function (includes residual model({}) block). specifications form: Indicating variable var variable represents individual central tendencies model also represents compartment specification data-set. can also change compartment name using | syntax, : case var represents central tendency cmt represents compartment dvid specification.","code":"var ~ add(add.sd) var ~ add(add.sd) | cmt"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"transformations","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Transformations","title":"rxode2 ODE solving syntax","text":"normal related distributions, can apply transformation sides using keywords/functions apply transformations. default likelihood transformations calculated untransformed scale. bounded variables like logit-normal probit-normal low high values defaulted 0 1 missing. models wish proportional model one transformation can replace standard deviation NA allow transformations, lnorm(), probitNorm() logitNorm() can combined variance stabilizing yeoJohnson() transformation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"normal-and-t-related-distributions","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Normal and t-related distributions","title":"rxode2 ODE solving syntax","text":"normal t-related distributions, wanted keep ability use skewed distributions additive proportional t/cauchy-space, distributions specified differently comparison supported distributions within nlmixr2: Note normal t-related distributions nlmixr2 calculate cwres npde normal assumption help assess goodness fit model. Also note +dnorm() mostly testing purposes slow estimation procedure nlmixr2. suggest adding (except explicit testing). multiple endpoint models mix non-normal normal distributions, whole problem shifted log-likelihood method estimation nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"notes-on-additive-proportional-models","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Notes on additive + proportional models","title":"rxode2 ODE solving syntax","text":"two different ways specify additive proportional models, call combined1 combined2, way Monolix calls two distributions (avoid software differences naming). first, combined1, assumes additive proportional differences standard deviation scale, : y=f+(+b* f^c)*err second, combined2, assumes additive proportional differences combined variance scale: y=f+\\[sqrt(^2+b^2 *f^(2c))\\]*err default nlmixr2/rxode2 otherwise specified combined2 since mirrors adding 2 normal distributions statistics add variances (standard deviations). However, combined1 can describe data possibly even better combined2 possible options rxode2/nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"distributions-of-known-likelihoods","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Distributions of known likelihoods","title":"rxode2 ODE solving syntax","text":"residuals related normal, t-distribution cauchy, often residual specification form: compartment specification left handed side specification. generalized likelihood can specify:","code":"cmt ~ dbeta(alpha, beta) ll(cmt) ~ llik specification"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"ordinal-likelihoods","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"Ordinal likelihoods","title":"rxode2 ODE solving syntax","text":"Finally, ordinal likelihoods/simulations can specified 2 ways. first : err represents compartment p0 probability specific category: model ensure sum p values less 1. Additionally can write arbitrary number categories ordinal model described . seems little p0 probability category 1 sometimes scores non-whole numbers. can modeled follows: numeric categories specified explicitly, probabilities remain :","code":"err ~ c(p0, p1, p2) err ~ c(p0=0, p1=1, p2=2, 3)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"general-table-of-supported-residual-distributions","dir":"Articles","previous_headings":"Residual functions when using rxode2 functions","what":"General table of supported residual distributions","title":"rxode2 ODE solving syntax","text":"general supported following table (available rxode2::rxResidualError)","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"bugs-andor-deficiencies","dir":"Articles","previous_headings":"","what":"Bugs and/or deficiencies","title":"rxode2 ODE solving syntax","text":"modulo operator %% currently unsupported.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"note","dir":"Articles","previous_headings":"","what":"Note","title":"rxode2 ODE solving syntax","text":"ODE specification mini-language parsed help open source tool , Plevyak (2015).","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"example-model","dir":"Articles","previous_headings":"","what":"Example model","title":"rxode2 ODE solving syntax","text":"commented example quickly show capabilities rxode2 syntax.","code":""},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"example","dir":"Articles","previous_headings":"","what":"Example","title":"rxode2 ODE solving syntax","text":"","code":"f <- function() { ini({ }) model({ # An rxode2 model specification (this line is a comment). if(comed==0) { # concomitant medication (con-med)? F <- 1.0 # full bioavailability w.o. con-med } else { F <- 0.80 # 20% reduced bioavailability } C2 <- centr/V2 # concentration in the central compartment C3 <- peri/V3 # concentration in the peripheral compartment # ODE describing the PK and PD d/dt(depot) <- -KA*depot d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff eff(0) <- 1 }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html","id":"interface-and-data-handling-between-r-and-the-generated-c-code","dir":"Articles","previous_headings":"","what":"Interface and data handling between R and the generated C code","title":"rxode2 ODE solving syntax","text":"Users specify variables dynamic system’s state variables via d/dt(identifier) operator part model specification, model parameters via params= argument rxode2 solve() method: values variables pre-specified time points saved model fitting/integration returned part fitted values (see function et(), define set time points capture values variables) returned part modeling output. ODE specification mini-language parsed help open source tool DParser, Plevyak (2015).","code":"m1 <- rxode2(model = ode, modName = \"m1\") # model parameters -- a named vector is required theta <- c(KA=0.29, CL=18.6, V2=40.2, Q=10.5, V3=297, Kin=1, Kout=1, EC50=200) # state variables and their amounts at time 0 (the use of names is # encouraged, but not required) inits <- c(depot=0, centr=0, peri=0, eff=1) # qd1 is an eventTable specification with a set of dosing and sampling # records (code not shown here) solve(theta, event = qd1, inits = inits)"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-tutorials.html","id":"interactive-tutorials","dir":"Articles","previous_headings":"","what":"Interactive tutorials","title":"Interactive Tutorials","text":"rxode2 comes interactive tutorials can run R session; built Rstudio 1.3 can run R session :","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## rxode2 Syntax learnr::run_tutorial(\"rxode2-00-syntax\", \"rxode2\") ## rxode2 event tables learnr::run_tutorial(\"rxode2-00-events\", \"rxode2\")"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"creating-a-2-compartment-model-in-rxode2","dir":"Articles","previous_headings":"","what":"Creating a 2-compartment model in rxode2","title":"Weight Based Dosing in rxode2","text":"","code":"library(rxode2) #> rxode2 2.1.3 using 2 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` ## Note the time covariate is not included in the simulation m1 <- function() { model({ CL ~ (1-0.2*SEX)*(0.807+0.00514*(CRCL-91.2))*exp(eta.cl) V1 ~ 4.8*exp(eta.v1) Q ~ (3.46+0.0593*(WT-75.1))*exp(eta.q); V2 ~ 1.93*(3.13+0.0458*(WT-75.1))*exp(eta.v2) A1 ~ centr; A2 ~ peri; d/dt(centr) <- - A1*(CL/V1 + Q/V1) + A2*Q/V2; d/dt(peri) <- A1*Q/V1 - A2*Q/V2; DV = centr / V1 * (1 + prop.err) }) }"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"simulating-covariates","dir":"Articles","previous_headings":"","what":"Simulating Covariates","title":"Weight Based Dosing in rxode2","text":"simulation correlates age, sex, weight. Since using weight based dosing, needs simulated first","code":"set.seed(42) rxSetSeed(42) library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union nsub=30 # Simulate Weight based on age and gender AGE<-round(runif(nsub,min=18,max=70)) SEX<-round(runif(nsub,min=0,max=1)) HTm<-round(rnorm(nsub,176.3,0.17*sqrt(4482)),digits=1) HTf<-round(rnorm(nsub,162.2,0.16*sqrt(4857)),digits=1) WTm<-round(exp(3.28+1.92*log(HTm/100))*exp(rnorm(nsub,0,0.14)),digits=1) WTf<-round(exp(3.49+1.45*log(HTf/100))*exp(rnorm(nsub,0,0.17)),digits=1) WT<-ifelse(SEX==1,WTf,WTm) CRCL<-round(runif(nsub,30,140)) ## id is in lower case to match the event table cov.df <- tibble(id=seq_along(AGE), AGE=AGE, SEX=SEX, WT=WT, CRCL=CRCL) print(cov.df) #> # A tibble: 30 x 5 #> id AGE SEX WT CRCL #> #> 1 1 66 1 49.4 83 #> 2 2 67 1 52.5 79 #> 3 3 33 0 97.9 37 #> 4 4 61 1 63.8 66 #> 5 5 51 0 71.8 127 #> 6 6 45 1 69.6 132 #> 7 7 56 0 61 73 #> 8 8 25 0 57.7 47 #> 9 9 52 1 58.7 65 #> 10 10 55 1 73.1 64 #> # i 20 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"creating-weight-based-event-table","dir":"Articles","previous_headings":"","what":"Creating weight based event table","title":"Weight Based Dosing in rxode2","text":"","code":"s<-c(0,0.25,0.5,0.75,1,1.5,seq(2,24,by=1)) s <- lapply(s, function(x){.x <- 0.1 * x; c(x - .x, x + .x)}) e <- et() %>% ## Specify the id and weight based dosing from covariate data.frame ## This requires rxode2 XXX et(id=cov.df$id, amt=6*cov.df$WT, rate=6 * cov.df$WT) %>% ## Sampling is added for each ID et(s) %>% as.data.frame %>% ## Merge the event table with the covarite information merge(cov.df, by=\"id\") %>% as_tibble e #> # A tibble: 900 x 12 #> id low time high cmt amt rate evid AGE SEX WT CRCL #> #> 1 1 0 0 0 (obs) NA NA 0 66 1 49.4 83 #> 2 1 NA 0 NA (default) 296. 296. 1 66 1 49.4 83 #> 3 1 0.225 0.246 0.275 (obs) NA NA 0 66 1 49.4 83 #> 4 1 0.45 0.516 0.55 (obs) NA NA 0 66 1 49.4 83 #> 5 1 0.675 0.729 0.825 (obs) NA NA 0 66 1 49.4 83 #> 6 1 0.9 0.921 1.1 (obs) NA NA 0 66 1 49.4 83 #> 7 1 1.35 1.42 1.65 (obs) NA NA 0 66 1 49.4 83 #> 8 1 1.8 1.82 2.2 (obs) NA NA 0 66 1 49.4 83 #> 9 1 2.7 2.97 3.3 (obs) NA NA 0 66 1 49.4 83 #> 10 1 3.6 3.87 4.4 (obs) NA NA 0 66 1 49.4 83 #> # i 890 more rows"},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"solving-daptomycin-simulation","dir":"Articles","previous_headings":"","what":"Solving Daptomycin simulation","title":"Weight Based Dosing in rxode2","text":"","code":"data <- rxSolve(m1, e, ## Lotri uses lower-triangular matrix rep. for named matrix omega=lotri(eta.cl ~ .306, eta.q ~0.0652, eta.v1 ~.567, eta.v2 ~ .191), sigma=lotri(prop.err ~ 0.15), addDosing = TRUE, addCov = TRUE) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ print(data) #> -- Solved rxode2 object -- #> -- Parameters ($params): -- #> # A tibble: 30 x 5 #> id eta.cl eta.v1 eta.q eta.v2 #> #> 1 1 0.343 -1.25 -0.0936 -0.253 #> 2 2 0.444 -0.0581 0.187 0.233 #> 3 3 0.142 0.203 0.0617 1.03 #> 4 4 0.274 -0.733 -0.0000116 -0.321 #> 5 5 0.505 -0.104 -0.406 -0.518 #> 6 6 0.472 1.48 -0.537 0.210 #> 7 7 0.156 -0.0295 0.112 -0.226 #> 8 8 -0.747 0.519 -0.347 0.476 #> 9 9 0.326 -0.373 0.340 0.470 #> 10 10 0.428 -1.28 0.131 -0.0240 #> # i 20 more rows #> -- Initial Conditions ($inits): -- #> centr peri #> 0 0 #> -- First part of data (object): -- #> # A tibble: 900 x 12 #> id evid cmt amt rate time DV centr peri SEX WT CRCL #> #> 1 1 1 1 296. 296. 0 0 0 0 1 49.4 83 #> 2 1 0 NA NA NA 0 0 0 0 1 49.4 83 #> 3 1 0 NA NA NA 0.246 41.3 58.7 9.45 1 49.4 83 #> 4 1 0 NA NA NA 0.516 31.0 100. 34.0 1 49.4 83 #> 5 1 0 NA NA NA 0.729 72.2 124. 58.9 1 49.4 83 #> 6 1 0 NA NA NA 0.921 82.0 140. 83.1 1 49.4 83 #> # i 894 more rows plot(data, log=\"y\") #> Warning in transformation$transform(x): NaNs produced #> Warning in ggplot2::scale_y_log10(..., breaks = breaks, minor_breaks = #> minor_breaks, : log-10 transformation introduced infinite #> values."},{"path":"https://nlmixr2.github.io/rxode2/articles/rxode2-wt.html","id":"daptomycin-reference","dir":"Articles","previous_headings":"","what":"Daptomycin Reference","title":"Weight Based Dosing in rxode2","text":"weight-based simulation adapted Daptomycin article : Dvorchik B, Arbeit RD, Chung J, Liu S, Knebel W, Kastrissios H. Population pharmacokinetics daptomycin. Antimicrob Agents Che mother 2004; 48: 2799-2807. doi:(10.1128/AAC.48.8.2799-2807.2004)[https://dx.doi.org/10.1128%2FAAC.48.8.2799-2807.2004] simulation example made available work Sherwin Sy modifications Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors","text":"Matthew L. Fidler (core team/developer/manual) Melissa Hallow (tutorial writer) Wenping Wang (core team/developer)","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":"contributors","dir":"","previous_headings":"","what":"Contributors","title":"Authors","text":"Zufar Mulyukov – Wrote initial version rxShiny() modifications Matthew Fidler Alan Hindmarsh – Lsoda author Awad H. Al-Mohy – Al-Mohy matrix exponential author Ernst Hairer – dop853 author Gerhard Wanner – dop853 author Goro Fuji – Timsort author Hadley Wickham – Author original findLhs RxODE, also original author .s3register (used permission anyone, changed Matthew Fidler) Jack Dongarra – LApack author Linda Petzold – LSODA Martin Maechler – expm author, used routines inductive linearization Morwenn – Timsort author Nicholas J. Higham – Author Al-mohy matrix exponential Roger B. Sidje – expokit matrix exponential author Simon Frost – thread safe C implementation liblsoda Kevin Ushey – Original author fast factor, modified Matthew Filder Yu Feng – thread safe liblsoda Cleve Moler – LApack author David Cooley – Author fast_factor modified now used RxODE quickly create factors IDs without sorting like R Drew Schmidt – Drew Schmidt author edits exponential matrix utility taken R package expm Matt Dowle & Arun Srinivasan – data.table authors openMp framework based upon","code":""},{"path":"https://nlmixr2.github.io/rxode2/authors.html","id":"rxode-acknowledgments","dir":"","previous_headings":"","what":"RxODE acknowledgments:","title":"Authors","text":"Sherwin Sy – Weight based dosing example Justin Wilkins – Documentation updates, logo testing Emma Schwager – R IJK distribution author J Coligne – dop853 fortran author Bill Denney – Documentation updates, manual minor bug fixes Tim Waterhouse – Fixed one bug mac working directories Richard Upton – Helped solving ADVAN linCmt() solutions Dirk Eddelbuettel – Made fixes Rcpp changes require R strict headers Ross Ihaka – R author Robert Gentleman – R author R core team – R authors","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 R package solving simulating ode-based models. models convert rxode2 mini-language C create compiled dll fast solving. ODE solving using rxode2 key parts: rxode2() creates C code fast ODE solving based simple syntax related Leibnitz notation. NONMEM deSolve compatible data frame, created et() eventTable() easy simulation events data frame can augmented adding time-varying adding individual covariates (iCov= needed) multiple subject data, may parallelized. single subject output data frame adaptive Covariances metrics uncertanty can used simulate solving","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Facilities for Simulating from ODE-Based Models","text":"can install released version rxode2 CRAN : fastest way install development version rxode2 use r-universe service. service compiles binaries development version MacOS Windows don’t wait package compilation: doesn’t work install development version rxode2 build models rxode2, need working c compiler. use parallel threaded solving rxode2, c compiler needs support open-mp. can check see R working c compiler can check : toolchain, can set described platform information :","code":"install.packages(\"rxode2\") install.packages(c(\"dparser\", \"rxode2ll\", \"rxode2parse\", \"rxode2random\", \"rxode2et\", \"rxode2\"), repos=c(nlmixr2=\"https://nlmixr2.r-universe.dev\", CRAN=\"https://cloud.r-project.org\")) devtools::install_github(\"nlmixr2/rxode2parse\") devtools::install_github(\"nlmixr2/rxode2random\") devtools::install_github(\"nlmixr2/rxode2et\") devtools::install_github(\"nlmixr2/rxode2ll\") devtools::install_github(\"nlmixr2/rxode2\") ## install.packages(\"pkgbuild\") pkgbuild::has_build_tools(debug = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"windows","dir":"","previous_headings":"Installation","what":"Windows","title":"Facilities for Simulating from ODE-Based Models","text":"windows may simply use installr install rtools: Alternatively can download install rtools directly.","code":"install.packages(\"installr\") library(installr) install.rtools()"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"mac-osx","dir":"","previous_headings":"Installation","what":"Mac OSX","title":"Facilities for Simulating from ODE-Based Models","text":"get speed need OpenMP enabled compile rxode2 compiler. various options date discussion likely data.table installation FAQ MacOS. last thing keep mind rxode2 uses code similar original lsoda requires gfortran compiler setup well OpenMP compilers. going using rxode2 nlmixr together older mac computer, suggest trying following: crashes R session binary work Mac machine. able run nlmixr, need compile package manually. proceed assuming homebrew installed system. system terminal need install dependencies compile symengine: installing dependencies, need re-install symengine:","code":"library(symengine) brew install cmake gmp mpfr libmpc install.packages(\"symengine\", type=\"source\") library(symengine)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"linux","dir":"","previous_headings":"Installation","what":"Linux","title":"Facilities for Simulating from ODE-Based Models","text":"install linux make sure install gcc (openmp support) gfortran using distribution’s package manager. also install system dependencies like udunits symengine dependencies complete installation work linux. also done system packages package manager add appropriate repositories. point r2u project.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"r-versions-40-and-41","dir":"","previous_headings":"Installation","what":"R versions 4.0 and 4.1","title":"Facilities for Simulating from ODE-Based Models","text":"installation R versions 4.0.x 4.1.x, please see instructions install symengine nlmixr2 installation instructions: https://github.com/nlmixr2/nlmixr2#r-package-installation","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"development-version","dir":"","previous_headings":"","what":"Development version","title":"Facilities for Simulating from ODE-Based Models","text":"Since development version rxode2 uses StanHeaders, need make sure compiler setup support C++14, described rstan setup page. R 4.0, believe requires modifying windows toolchain longer (much easier setup). C++ toolchain setup appropriately, can install development version GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"nlmixr2/rxode2parse\") devtools::install_github(\"nlmixr2/rxode2random\") devtools::install_github(\"nlmixr2/rxode2et\") devtools::install_github(\"nlmixr2/rxode2ll\") devtools::install_github(\"nlmixr2/rxode2\")"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"illustrated-example","dir":"","previous_headings":"","what":"Illustrated Example","title":"Facilities for Simulating from ODE-Based Models","text":"model equations can specified text string, model file R expression. differential algebraic equations permitted. Differential equations specified d/dt(var_name) =. equation can separated semicolon. load rxode2 package compile model: Model parameters may specified ini({}) model block, initial conditions can specified within model cmt(0)= X, like model eff(0) <- 1. may also specify subject variability initial conditions residual error components just like nlmixr2. allows single interface nlmixr2/rxode2 models. Also note, classic rxode2 interface still works just like past (don’t worry breaking code time). fact, can get classic rxode2 model $simulationModel ui object:","code":"library(rxode2) #> rxode2 2.1.2.9000 using 8 threads (see ?getRxThreads) #> no cache: create with `rxCreateCache()` mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } mod1 <- mod1() # create the ui object (can also use `rxode2(mod1)`) mod1 summary(mod1$simulationModel)"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"specify-dosing-and-sampling-in-rxode2","dir":"","previous_headings":"","what":"Specify Dosing and sampling in rxode2","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 provides simple flexible way specify dosing sampling functions generate event table. First, empty event table generated “et()” function. interface similar NONMEM event tables: can see code, can dose compartment named rxode2 model. slight deviation NONMEM can reduce need compartment renumbering. events can also combined expanded (multi-subject events complex regimens) rbind, c, seq, rep. information creating complex dosing regimens using rxode2 see rxode2 events vignette.","code":"ev <- et(amountUnits=\"mg\", timeUnits=\"hours\") %>% et(amt=10000, addl=9,ii=12,cmt=\"depot\") %>% et(time=120, amt=2000, addl=4, ii=14, cmt=\"depot\") %>% et(0:240) # Add sampling"},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"solving-odes","dir":"","previous_headings":"","what":"Solving ODEs","title":"Facilities for Simulating from ODE-Based Models","text":"ODE can now solved using rxSolve: returns modified data frame. can see compartment values plot : , Note labels automatically labeled units initial event table. rxode2 extracts units label plot (present).","code":"x <- mod1 %>% rxSolve(ev) #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> In file included from /usr/share/R/include/R.h:71, #> from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, #> from /tmp/RtmpMKFh3q/temp_libpath2b2b3c8645df/rxode2/include/rxode2.h:9, #> from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, #> from rx_f5e1c8d22ddcc3e6890ad688a5f37e59_.c:117: #> /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] #> 80 | }; #> | ^ x #> ── Solved rxode2 object ── #> ── Parameters (x$params): ── #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> ── Initial Conditions (x$inits): ── #> depot centr peri eff #> 0 0 0 1 #> ── First part of data (object): ── #> # A tibble: 241 × 7 #> time C2 C3 depot centr peri eff #> [h] #> 1 0 0 0 10000 0 0 1 #> 2 1 44.4 0.920 7453. 1784. 273. 1.08 #> 3 2 54.9 2.67 5554. 2206. 794. 1.18 #> 4 3 51.9 4.46 4140. 2087. 1324. 1.23 #> 5 4 44.5 5.98 3085. 1789. 1776. 1.23 #> 6 5 36.5 7.18 2299. 1467. 2132. 1.21 #> # ℹ 235 more rows library(ggplot2) plot(x,C2) + ylab(\"Central Concentration\") plot(x,eff) + ylab(\"Effect\")"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"ode-solving","dir":"","previous_headings":"","what":"ODE solving","title":"Facilities for Simulating from ODE-Based Models","text":"brief comparison pharmacometric ODE solving R packages rxode2. several R packages differential equations. popular deSolve. However pharmacometrics-specific ODE solving, 2 packages rxode2 released CRAN. uses compiled code faster ODE solving. mrgsolve, uses C++ lsoda solver solve ODE systems. user required write hybrid R/C++ code create mrgsolve model translated C++ solving. contrast, rxode2 R-like mini-language parsed C code solves ODE system. Unlike rxode2, mrgsolve currently support symbolic manipulation ODE systems, like automatic Jacobian calculation forward sensitivity calculation (rxode2 currently supports basis nlmixr2’s FOCEi algorithm) dMod, uses unique syntax create “reactions”. reactions create underlying ODEs created c code compiled deSolve model. contrast rxode2 defines ODE systems lower level. rxode2’s parsing mini-language comes C, whereas dMod’s parsing comes R. Like rxode2, dMod supports symbolic manipulation ODE systems calculates forward sensitivities adjoint sensitivities systems. Unlike rxode2, dMod thread-safe since deSolve yet thread-safe. PKPDsim defines models R-like syntax converts system compiled code. Like mrgsolve, PKPDsim currently support symbolic manipulation ODE systems. PKPDsim thread-safe. open pharmacometrics open source community fairly friendly, rxode2 maintainers positive interactions ODE-solving pharmacometric projects listed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"pk-solved-systems","dir":"","previous_headings":"","what":"PK Solved systems","title":"Facilities for Simulating from ODE-Based Models","text":"rxode2 supports 1-3 compartment models gradients (using stan math’s auto-differentiation). currently uses equations PKADVAN allow time-varying covariates. rxode2 can mix ODEs solved systems.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"the-following-packages-for-solved-pk-systems-are-on-cran","dir":"","previous_headings":"PK Solved systems","what":"The following packages for solved PK systems are on CRAN","title":"Facilities for Simulating from ODE-Based Models","text":"mrgsolve currently 1-2 compartment (poly-exponential models) models built-. solved systems ODEs currently mixed. pmxTools currently 1-3 compartment (super-positioning) models built-. R-implementation. PKPDsim uses 1-3 “ADVAN” solutions using non-superpositioning. PKPDmodels one-compartment model gradients.","code":""},{"path":"https://nlmixr2.github.io/rxode2/index.html","id":"non-cran-libraries","dir":"","previous_headings":"PK Solved systems","what":"Non-CRAN libraries:","title":"Facilities for Simulating from ODE-Based Models","text":"PKADVAN Provides 1-3 compartment models using non-superpositioning. allows time-varying covariates.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":null,"dir":"Reference","previous_headings":"","what":"Turn into an ini block for initialization — as.ini","title":"Turn into an ini block for initialization — as.ini","text":"Turn ini block initialization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Turn into an ini block for initialization — as.ini","text":"","code":"as.ini(x) # S3 method for character as.ini(x) # S3 method for data.frame as.ini(x) # S3 method for call as.ini(x) # S3 method for lotriFix as.ini(x) # S3 method for matrix as.ini(x) # S3 method for default as.ini(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Turn into an ini block for initialization — as.ini","text":"x Item convert rxode2/nlmixr2 ui ini expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Turn into an ini block for initialization — as.ini","text":"rxode2 ini expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Turn into an ini block for initialization — as.ini","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.ini.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Turn into an ini block for initialization — as.ini","text":"","code":"ini <- quote(ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 })) as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) l <- quote(lotri({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 })) as.ini(l) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) m <- lotri({ eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 }) as.ini(m) #> ini({ #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) one.compartment <- function() { ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } as.ini(one.compartment) #> #> #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ui <- one.compartment() as.ini(ui) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ui$iniDf #> ntheta neta1 neta2 name lower est upper fix label backTransform #> 1 1 NA NA tka -Inf 0.4510756 Inf FALSE #> 2 2 NA NA tcl -Inf 1.0006319 Inf FALSE #> 3 3 NA NA tv -Inf 3.4499875 Inf FALSE #> 4 4 NA NA add.sd 0 0.7000000 Inf FALSE #> 5 NA 1 1 eta.ka -Inf 0.6000000 Inf FALSE #> 6 NA 2 2 eta.cl -Inf 0.3000000 Inf FALSE #> 7 NA 3 3 eta.v -Inf 0.1000000 Inf FALSE #> condition err #> 1 #> 2 #> 3 #> 4 cp add #> 5 id #> 6 id #> 7 id as.ini(ui$iniDf) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ini <- c(\"ini({\", \"tka <- log(1.57)\", \"tcl <- log(2.72)\", \"tv <- log(31.5)\", \"eta.ka ~ 0.6\", \"eta.cl ~ 0.3\", \"eta.v ~ 0.1\", \"add.sd <- 0.7\", \"})\") as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) ini <- paste(ini, collapse=\"\\n\") as.ini(ini) #> ini({ #> tka <- 0.451075619360217 #> tcl <- 1.00063188030791 #> tv <- 3.44998754583159 #> add.sd <- 0.7 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> })"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":null,"dir":"Reference","previous_headings":"","what":"Turn into a model expression — as.model","title":"Turn into a model expression — as.model","text":"Turn model expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Turn into a model expression — as.model","text":"","code":"as.model(x) # S3 method for character as.model(x) # S3 method for call as.model(x) # S3 method for list as.model(x) # S3 method for default as.model(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Turn into a model expression — as.model","text":"x item convert model({}) expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Turn into a model expression — as.model","text":"model expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Turn into a model expression — as.model","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Turn into a model expression — as.model","text":"","code":"model <- quote(model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) })) as.model(model) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) one.compartment <- function() { ini({ tka <- log(1.57) tcl <- log(2.72) tv <- log(31.5) eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } as.model(one.compartment) #> #> #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) ui <- one.compartment() as.model(ui) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) model <- c(\"model({\", \"ka <- exp(tka + eta.ka)\", \"cl <- exp(tcl + eta.cl)\", \"v <- exp(tv + eta.v)\", \"d/dt(depot) = -ka * depot\", \"d/dt(center) = ka * depot - cl / v * center\", \"cp = center / v\", \"cp ~ add(add.sd)\", \"})\") as.model(model) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) model <- paste(model, collapse=\"\\n\") as.model(model) #> model({ #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> })"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"As rxode2 ui — as.rxUi","title":"As rxode2 ui — as.rxUi","text":"rxode2 ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"As rxode2 ui — as.rxUi","text":"","code":"as.rxUi(x) # S3 method for rxode2 as.rxUi(x) # S3 method for rxode2tos as.rxUi(x) # S3 method for rxModelVars as.rxUi(x) # S3 method for `function` as.rxUi(x) # S3 method for rxUi as.rxUi(x) # S3 method for default as.rxUi(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"As rxode2 ui — as.rxUi","text":"x Object convert rxUi object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"As rxode2 ui — as.rxUi","text":"rxUi object (error converted)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"As rxode2 ui — as.rxUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/as.rxUi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"As rxode2 ui — as.rxUi","text":"","code":"mod1 <- function() { ini({ # central KA=2.94E-01 CL=1.86E+01 V2=4.02E+01 # peripheral Q=1.05E+01 V3=2.97E+02 # effects Kin=1 Kout=1 EC50=200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 eff(0) <- 1 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } as.rxUi(mod1) #> #> #> ── rxode2-based free-form 4-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 centr #> 3 3 peri #> 4 4 eff #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> KA <- 0.294 #> CL <- 18.6 #> V2 <- 40.2 #> Q <- 10.5 #> V3 <- 297 #> Kin <- 1 #> Kout <- 1 #> EC50 <- 200 #> }) #> model({ #> C2 <- centr/V2 #> C3 <- peri/V3 #> d/dt(depot) <- -KA * depot #> d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) <- Q * C2 - Q * C3 #> eff(0) <- 1 #> d/dt(eff) <- Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"Assert properties of the rxUi models — assertRxUi","title":"Assert properties of the rxUi models — assertRxUi","text":"Assert properties rxUi models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assert properties of the rxUi models — assertRxUi","text":"","code":"assertRxUi(model, extra = \"\", .var.name = .vname(model)) assertRxUiPrediction(model, extra = \"\", .var.name = .vname(model)) assertRxUiSingleEndpoint(model, extra = \"\", .var.name = .vname(model)) assertRxUiTransformNormal(model, extra = \"\", .var.name = .vname(model)) assertRxUiNormal(model, extra = \"\", .var.name = .vname(model)) assertRxUiMuRefOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiEstimatedResiduals(model, extra = \"\", .var.name = .vname(model)) assertRxUiPopulationOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiMixedOnly(model, extra = \"\", .var.name = .vname(model)) assertRxUiRandomOnIdOnly(model, extra = \"\", .var.name = .vname(model))"},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assert properties of the rxUi models — assertRxUi","text":"model Model check extra Extra text append error message (like \"focei\") .var.name [character(1)] Name checked object print assertions. Defaults heuristic implemented vname.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assert properties of the rxUi models — assertRxUi","text":"rxUi model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assert properties of the rxUi models — assertRxUi","text":"functions different types assertions assertRxUi -- Make sure proper rxode2 model (throw error) assertRxUiSingleEndpoint -- Make sure rxode2 model single endpoint model (throw error) assertRxUiTransformNormal -- Make sure model residual distribution normal transformably normal assertRxUiNormal -- Make sure model residual distribution normal assertRxUiEstimatedResiduals -- Make sure residual error parameters estimated (modeled). assertRxUiPopulationOnly -- Make sure model population model (mixed effects) assertRxUiMixedOnly -- Make sure model mixed effect model (population effect, ) assertRxUiPrediction -- Make sure model predictions assertRxUiMuRefOnly -- Make sure parameters mu-referenced assertRxUiRandomOnIdOnly -- Make sure random effects ID level","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assert properties of the rxUi models — assertRxUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/assertRxUi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assert properties of the rxUi models — assertRxUi","text":"","code":"# \\donttest{ one.cmt <- function() { ini({ tka <- 0.45; label(\"Ka\") tcl <- log(c(0, 2.7, 100)); label(\"Cl\") tv <- 3.45; label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) }) } assertRxUi(one.cmt) #> #> # assertRxUi(rnorm) # will fail assertRxUiSingleEndpoint(one.cmt) #> #> # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"meant perform way quantile() can drop replacement code using quantile() using distributional assumptions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"","code":"binomProbs(x, ...) # S3 method for default binomProbs( x, probs = c(0.025, 0.05, 0.5, 0.95, 0.975), na.rm = FALSE, names = TRUE, onlyProbs = TRUE, n = 0L, m = 0L, pred = FALSE, piMethod = c(\"lim\"), M = 5e+05, tol = .Machine$double.eps^0.25, ciMethod = c(\"wilson\", \"wilsonCorrect\", \"agrestiCoull\", \"wald\", \"wc\", \"ac\"), ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"x numeric vector whose mean probability based confidence values wanted, NA NaN values allowed numeric vectors unless na.rm TRUE. ... Arguments passed default method, allows many different methods applied. probs numeric vector probabilities values interval 0 1, inclusive. 0, represents maximum observed, 1, represents maximum observed. 0.5 represents expected probability (mean). na.rm logical; true, NA NaN's removed x quantiles computed. names logical; true, result names attribute. onlyProbs logical; true, return probability based confidence interval/prediction interval estimates, otherwise return extra statistics. n integer/integerish; n used calculate prediction confidence interval. n=0 (default) use number non-NA observations. calculating prediction interval, represents number observations used input (\"true\") distribution. m integer. using prediction interval represents number samples observed future prediction interval. pred Use prediction interval instead confidence interval. default FALSE. piMethod gives prediction interval method (currently lim) Lu 2020 M number simulations run LIM PI. tol tolerance root finding LIM prediction interval ciMethod gives method calculating confidence interval. Can : \"argestiCoull\" \"ac\" -- Agresti-Coull method. 95\\ interval, method use concept \"adding 2 successes 2 failures,\" rather uses formulas explicitly described following link: https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Agresti-Coull_Interval. \"wilson\" -- Wilson Method \"wilsonCorrect\" \"wc\" -- Wilson method continuity correction \"wald\" -- Wald confidence interval standard z approximation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"default return probabilities names (named) points expected distribution located given sampling mean standard deviation. onlyProbs=FALSE prepend mean, variance, standard deviation, minimum, maximum number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"used confidence intervals rxode2 solved objects using confint(mean=\"binom\")","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"Newcombe, R. G. (1998). \"Two-sided confidence intervals single proportion: comparison seven methods\". Statistics Medicine. 17 (8): 857–872. doi:10.1002/(SICI)1097-0258(19980430)17:8<857::AID-SIM777>3.0.CO;2-E. PMID 9595616. Hezhi Lu, Hua Jin, new prediction interval binomial random variable based inferential models, Journal Statistical Planning Inference, Volume 205, 2020, Pages 156-174, ISSN 0378-3758, https://doi.org/10.1016/j.jspi.2019.07.001.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/binomProbs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate expected confidence bands with binomial sampling distribution — binomProbs","text":"","code":"x<- rbinom(7001, p=0.375, size=1) binomProbs(x) #> 2.5% 5% 50% 95% 97.5% #> 0.3716257 0.3734362 0.3829453 0.3925448 0.3943933 # you can also use the prediction interval # \\donttest{ binomProbs(x, pred=TRUE) #> 2.5% 5% 50% 95% 97.5% #> 0.3668047 0.3695186 0.3829453 0.3965148 0.3990858 # } # Can get some extra statistics if you request onlyProbs=FALSE binomProbs(x, onlyProbs=FALSE) #> mean var sd n 2.5% 5% #> 0.3829453 0.2362982 0.4861051 7001.0000000 0.3716257 0.3734362 #> 50% 95% 97.5% #> 0.3829453 0.3925448 0.3943933 x[2] <- NA_real_ binomProbs(x, onlyProbs=FALSE) #> mean var sd n 2.5% 5% 50% 95% 97.5% #> NA NA NA NA NA NA NA NA NA binomProbs(x, na.rm=TRUE) #> 2.5% 5% 50% 95% 97.5% #> 0.3715373 0.3733478 0.3828571 0.3924570 0.3943055"},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the rxode2 coefficients — coef.rxode2","title":"Return the rxode2 coefficients — coef.rxode2","text":"returns parameters , state variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the rxode2 coefficients — coef.rxode2","text":"","code":"# S3 method for rxode2 coef(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the rxode2 coefficients — coef.rxode2","text":"object rxode2 object ... ignored arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the rxode2 coefficients — coef.rxode2","text":"rxCoef object following params list strings parameters rxode2 object state list strings names state rxode2 object. ini model specified default values parameters. rxode2 referring rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/coef.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the rxode2 coefficients — coef.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":null,"dir":"Reference","previous_headings":"","what":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"returns new expression, old expression, new variable old variable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"","code":".assertRenameErrorModelLine(line, vars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"line quoted call information line vars Variables contained within mdel","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"list(new, old, newChar, oldChar)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-assertRenameErrorModelLine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This function asserts the requested rename makes sense — .assertRenameErrorModelLine","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":null,"dir":"Reference","previous_headings":"","what":"This copies the rxode2 UI object so it can be modified — .copyUi","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"copies rxode2 UI object can modified","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"","code":".copyUi(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"ui Original UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"Copied UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-copyUi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This copies the rxode2 UI object so it can be modified — .copyUi","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"Handle single error normal t distributions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"","code":".handleSingleErrTypeNormOrTFoceiBase( env, pred1, errNum = 1L, rxPredLlik = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"env Environment parsed model pred1 data.frame current error errNum number error specification nlmixr2 model rxPredLlik boolean indicating log likelihood calculated non-normal distributions. default TRUE.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"list lines added. lines contain rx_yj_ integer corresponds transformation type. rx_lambda_ transformation lambda rx_low_ lower boundary transformation rx_hi_ upper boundary transformation rx_pred_f_ prediction function rx_pred_ transformed prediction function rx_r_ transformed variance","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-handleSingleErrTypeNormOrTFoceiBase.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Handle the single error for normal or t distributions — .handleSingleErrTypeNormOrTFoceiBase","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":null,"dir":"Reference","previous_headings":"","what":"This gets the append arg for the ini() piping — .iniGetAppendArg","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"gets append arg ini() piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"","code":".iniGetAppendArg(f, s)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"f try(force(append)) argument, s .character(substitute(append)) argument","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"corrected ini piping argument exported creating new ini methods requirements piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniGetAppendArg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This gets the append arg for the ini() piping — .iniGetAppendArg","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder rows in iniDf — .iniHandleAppend","title":"Reorder rows in iniDf — .iniHandleAppend","text":"Reorder rows iniDf","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder rows in iniDf — .iniHandleAppend","text":"","code":".iniHandleAppend(expr, rxui, envir, append)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder rows in iniDf — .iniHandleAppend","text":"expr Expression parsing rxui User interface function envir Environment parsing append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleAppend.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reorder rows in iniDf — .iniHandleAppend","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":null,"dir":"Reference","previous_headings":"","what":"Update the iniDf of a model — .iniHandleLine","title":"Update the iniDf of a model — .iniHandleLine","text":"Update iniDf model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update the iniDf of a model — .iniHandleLine","text":"","code":".iniHandleLine(expr, rxui, envir = parent.frame(), append = NULL) .iniHandleFixOrUnfix(expr, rxui, envir = parent.frame(), append = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update the iniDf of a model — .iniHandleLine","text":"expr Expression parsing rxui User interface function envir Environment parsing append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update the iniDf of a model — .iniHandleLine","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-iniHandleLine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Update the iniDf of a model — .iniHandleLine","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if a language object matches a template language object — .matchesLangTemplate","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"template == str2lang(\".\"), match anything. template == str2lang(\".name\"), match name. template == str2lang(\".call()\"), match call.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"","code":".matchesLangTemplate(x, template)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"x object check template template object match","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"TRUE matches, FALSE, otherwise","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-matchesLangTemplate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check if a language object matches a template language object — .matchesLangTemplate","text":"","code":".matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/dt(.name)\")) #> [1] TRUE .matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/foo(.name)\")) #> [1] FALSE .matchesLangTemplate(str2lang(\"d/dt(foo)\"), str2lang(\"d/.\")) #> [1] TRUE"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal messaging statements — .minfo","title":"Internal messaging statements — .minfo","text":"Internal messaging statements","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal messaging statements — .minfo","text":"","code":".minfo(text, ..., .envir = parent.frame()) .malert(text, ..., .envir = parent.frame()) .mwarn(text, ..., .envir = parent.frame()) .msuccess(text, ..., .envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal messaging statements — .minfo","text":"text Text ... arguments .envir Environment evaluate ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal messaging statements — .minfo","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-minfo.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal messaging statements — .minfo","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle model lines — .modelHandleModelLines","title":"Handle model lines — .modelHandleModelLines","text":"Handle model lines","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle model lines — .modelHandleModelLines","text":"","code":".modelHandleModelLines( modelLines, rxui, modifyIni = FALSE, append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir )"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle model lines — .modelHandleModelLines","text":"modelLines model lines considered rxui rxode2 UI object modifyIni ini() considered append boolean determine lines appended piping. possible values : TRUE lines appended model instead replaced FALSE lines replaced model (default) NA lines pre-pended model instead replaced lhs expression, append lines last observed line expression lhs auto boolean tells piping automatically selects parameters characterized population parameter, subject variability, covariate. TRUE automatic selection occurs. FALSE automatic selection turned everything added covariate (can promoted parameter ini statement). default TRUE, can changed options(rxode2.autoVarPiping=FALSE). cov character vector variables assumed covariates. override automatic promotion population parameter estimate (eta) envir Environment evaluation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Handle model lines — .modelHandleModelLines","text":"New UI","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-modelHandleModelLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Handle model lines — .modelHandleModelLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns quoted call information — .quoteCallInfoLines","title":"Returns quoted call information — .quoteCallInfoLines","text":"Returns quoted call information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns quoted call information — .quoteCallInfoLines","text":"","code":".quoteCallInfoLines(callInfo, envir = parent.frame(), iniDf = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns quoted call information — .quoteCallInfoLines","text":"callInfo Call information envir Environment evaluation (needed) iniDf parent model iniDf piping ini block (NULL otherwise)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Returns quoted call information — .quoteCallInfoLines","text":"Quote call information. name=expression, change name<-expression quoted call list. expressions within brackets ie {}, unlist brackets called one single sequence.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-quoteCallInfoLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Returns quoted call information — .quoteCallInfoLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Print out a table in the documentation — .rxDocTable","title":"Print out a table in the documentation — .rxDocTable","text":"Print table documentation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print out a table in the documentation — .rxDocTable","text":"","code":".rxDocTable(table, caption = \"none\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print out a table in the documentation — .rxDocTable","text":"table data frame caption character vector representing caption latex table","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print out a table in the documentation — .rxDocTable","text":"based knitr context: output kableExtra::kbl latex output output DT::datatable html output otherwise output knitr::kable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print out a table in the documentation — .rxDocTable","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxDocTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print out a table in the documentation — .rxDocTable","text":"","code":".rxDocTable(rxReservedKeywords) #> #> #> |Reserved Name |Meaning |Alias | #> |:--------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------| #> |time |solver time |t | #> |podo |In Transit compartment models, last dose amount | | #> |tlast |Time of Last dose | | #> |M_E |Exp(1) | | #> |M_LOG2E |log2(e) | | #> |M_LOG10E |log10(e) | | #> |M_LN2 |log(2) | | #> |M_LN10 |log(10) | | #> |M_PI |pi | | #> |M_PI_2 |pi/2 | | #> |M_PI_4 |pi/4 | | #> |M_1_PI |1/pi | | #> |M_2_PI |2/pi | | #> |M_2_SQRTPI |2/sqrt(pi) | | #> |M_SQRT2 |sqrt(2) | | #> |M_SQRT1_2 |1/sqrt(2) | | #> |M_SQRT_3 |sqrt(3) | | #> |M_SQRT_32 |sqrt(32) | | #> |M_LOG10_2 |Log10(2) | | #> |M_2PI |2*pi | | #> |M_SQRT_PI |sqrt(pi) | | #> |M_1_SQRT_2PI |1/(sqrt(2*pi)) | | #> |M_LN_SQRT_PI |log(sqrt(pi)) | | #> |M_LN_SQRT_2PI |log(sqrt(2*pi)) | | #> |M_LN_SQRT_PId2 |log(sqrt(pi/2)) | | #> |pi |pi | | #> |NA |R's NA value | | #> |NaN |Not a Number Value | | #> |Inf |Infinite Value | | #> |newind |1: First record of individual; 2: Subsequent record of individual |NEWIND | #> |rxFlag |Flag for what part of the rxode2 model is being run; 1: ddt; 2: jac; 3: ini; 4: F; 5: lag; 6: rate; 7: dur; 8: mtime; 9: matrix exponential; 10: inductive linearization; 11: lhs | |"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Get upper boundary condition transformation ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"","code":".rxGetHiBoundaryPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Upper Boundary","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetHiBoundaryPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the upper boundary condition when the transformation it — .rxGetHiBoundaryPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Get lambda value based pred information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"","code":".rxGetLambdaFromPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"env Environment environment pred1 Single error data frame","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Lambda expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLambdaFromPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the lambda value based on the pred information — .rxGetLambdaFromPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Get lower boundary condition transformation requires ","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"","code":".rxGetLowBoundaryPred1AndIni(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Lower Boundary","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetLowBoundaryPred1AndIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the lower boundary condition when the transformation requires it — .rxGetLowBoundaryPred1AndIni","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Observation transformation — .rxGetPredictionDVTransform","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"Get Observation transformation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"","code":".rxGetPredictionDVTransform(env, pred1, yj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"env Environment parsed model pred1 data.frame current error yj transformation number current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"transformation expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionDVTransform.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the Observation transformation — .rxGetPredictionDVTransform","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the prediction name — .rxGetPredictionF","title":"Get the prediction name — .rxGetPredictionF","text":"Get prediction name","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the prediction name — .rxGetPredictionF","text":"","code":".rxGetPredictionF(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the prediction name — .rxGetPredictionF","text":"env Environment parsed model pred1 data.frame current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the prediction name — .rxGetPredictionF","text":"prediction symbol","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionF.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the prediction name — .rxGetPredictionF","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the prediction transformation — .rxGetPredictionFTransform","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"Get prediction transformation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"","code":".rxGetPredictionFTransform(env, pred1, yj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"env Environment parsed model pred1 data.frame current error yj transformation number current error","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"transformation expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetPredictionFTransform.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the prediction transformation — .rxGetPredictionFTransform","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Variance for error type — .rxGetVarianceForErrorType","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Get Variance error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"","code":".rxGetVarianceForErrorType(env, pred1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"env Environment pred1 Pred one end-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Variance error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxGetVarianceForErrorType.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get Variance for error type — .rxGetVarianceForErrorType","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"Internal function tell linCmt() model variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"","code":".rxIsLinCmt()"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"0 1","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxIsLinCmt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function to tell if the linCmt() is the model variables — .rxIsLinCmt","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function for calculating the Jacobian — .rxJacobian","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Internal function calculating Jacobian","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"","code":".rxJacobian(model, vars = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"model symengine environment vars Variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Jacobian information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxJacobian.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function for calculating the Jacobian — .rxJacobian","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Internal function generate model variables linCmt() model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"","code":".rxLinCmtGen(lenState, vars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"lenState Length state vars Variables model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Model variables expanded linCmt model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxLinCmtGen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal function to generate the model variables for a linCmt() model — .rxLinCmtGen","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal Pruning function — .rxPrune","title":"Internal Pruning function — .rxPrune","text":"Internal Pruning function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal Pruning function — .rxPrune","text":"","code":".rxPrune(x, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal Pruning function — .rxPrune","text":"x List quoted lines envir Environment information stored","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal Pruning function — .rxPrune","text":"Pruned model code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxPrune.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal Pruning function — .rxPrune","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":null,"dir":"Reference","previous_headings":"","what":"Sensitivity for model — .rxSens","title":"Sensitivity for model — .rxSens","text":"Sensitivity model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sensitivity for model — .rxSens","text":"","code":".rxSens(model, vars, vars2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sensitivity for model — .rxSens","text":"model symengine model environment vars Variables single sensitivity vars2 present, 2 parameter sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sensitivity for model — .rxSens","text":"Sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxSens.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Sensitivity for model — .rxSens","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":null,"dir":"Reference","previous_headings":"","what":"Temporarily set options then restore them while running code — .rxWithOptions","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"Temporarily set options restore running code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"","code":".rxWithOptions(ops, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"ops list options temporarily set code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"value code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithOptions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Temporarily set options then restore them while running code — .rxWithOptions","text":"","code":".rxWithOptions(list(digits = 21), { print(pi) }) #> [1] 3.141592653589793116 print(pi) #> [1] 3.141593"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":null,"dir":"Reference","previous_headings":"","what":"With one sink, then release — .rxWithSink","title":"With one sink, then release — .rxWithSink","text":"one sink, release","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"With one sink, then release — .rxWithSink","text":"","code":".rxWithSink(file, code) .rxWithSinkBoth(file, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"With one sink, then release — .rxWithSink","text":"file path file sink running code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"With one sink, then release — .rxWithSink","text":"return results code section","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"With one sink, then release — .rxWithSink","text":".rxWithSink captures output cat .rxWithSinkBoth captures output cat message","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"With one sink, then release — .rxWithSink","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithSink.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"With one sink, then release — .rxWithSink","text":"","code":"t <- tempfile() .rxWithSink(t, cat(\"message\\n\")) cat(\"cat2\\n\") # now you can see the cat2 #> cat2 lines <- readLines(t) unlink(t)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":null,"dir":"Reference","previous_headings":"","what":"Temporarily set options then restore them while running code — .rxWithWd","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"Temporarily set options restore running code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"","code":".rxWithWd(wd, code)"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"wd working directory temporarily set system evaluating code code code run sink","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"value code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-rxWithWd.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Temporarily set options then restore them while running code — .rxWithWd","text":"","code":".rxWithWd(tempdir(), { getwd() }) #> [1] \"/tmp/RtmpPXkf2x\" getwd() #> [1] \"/home/runner/work/rxode2/rxode2/docs/reference\""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to figure out if this session supports Unicode — .useUtf","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"Internal function figure session supports Unicode","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"","code":".useUtf()"},{"path":"https://nlmixr2.github.io/rxode2/reference/dot-useUtf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal function to figure out if this session supports Unicode — .useUtf","text":"boolean indicating session supports Unicode","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Error function — erf","title":"Error function — erf","text":"Error function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Error function — erf","text":"","code":"erf(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Error function — erf","text":"x vector real values","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Error function — erf","text":"erf x","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Error function — erf","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/erf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Error function — erf","text":"","code":"erf(1.0) #> [1] 0.8427008"},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":null,"dir":"Reference","previous_headings":"","what":"Event translation for rxode2 — etTrans","title":"Event translation for rxode2 — etTrans","text":"Event translation rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Event translation for rxode2 — etTrans","text":"","code":"etTrans( inData, obj, addCmt = FALSE, dropUnits = FALSE, allTimeVar = FALSE, keepDosingOnly = FALSE, combineDvid = NULL, keep = character(0), addlKeepsCov = FALSE, addlDropSs = TRUE, ssAtDoseTime = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Event translation for rxode2 — etTrans","text":"inData Data frame translate obj Model translate data addCmt Add compartment data frame (default FALSE). dropUnits Boolean drop units (default FALSE). allTimeVar Treat covariates time-varying keepDosingOnly keep individuals dosing records trailing dosing records last observation. combineDvid boolean indicating rxode2 use DVID observation records change cmt value; Useful multiple-endpoint nlmixr models. default determined option(\"rxode2.combine.dvid\") option set, TRUE. typically affect rxode2 simulations. keep named vector items want keep final rxode2 dataset. added rxode2 event records (seen), last observation carried forward used. addlKeepsCov determines additional dosing items repeats dose (FALSE) keeps covariates record dose (TRUE) addlDropSs steady state doses addl specification steady state flag dropped repeated doses (TRUE) retained (FALSE) ssAtDoseTime Boolean TRUE back calculates steady concentration actual time dose, otherwise FALSE doses shifted","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/etTrans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Event translation for rxode2 — etTrans","text":"Object solving rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the assignments in R expression — findLhs","title":"Find the assignments in R expression — findLhs","text":"Find assignments R expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the assignments in R expression — findLhs","text":"","code":"findLhs(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the assignments in R expression — findLhs","text":"x R expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the assignments in R expression — findLhs","text":"list assigned parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/findLhs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Find the assignments in R expression — findLhs","text":"Hadley Wickham Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":null,"dir":"Reference","previous_headings":"","what":"Gammap: normalized lower incomplete gamma function — gammap","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gamma_p boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"","code":"gammap(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"numeric '' parameter normalized lower incomplete gamma z numeric 'z' parameter normalized lower incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gammap results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"gamma p function given : gammap = lowergamma(, z)/gamma()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gammap: normalized lower incomplete gamma function — gammap","text":"","code":"gammap(1, 3) #> [1] 0.9502129 gammap(1:3, 3) #> [1] 0.9502129 0.8008517 0.5768099 gammap(1, 1:3) #> [1] 0.6321206 0.8646647 0.9502129"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":null,"dir":"Reference","previous_headings":"","what":"gammapDer: derivative of gammap — gammapDer","title":"gammapDer: derivative of gammap — gammapDer","text":"gamma_p_derivative boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammapDer: derivative of gammap — gammapDer","text":"","code":"gammapDer(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammapDer: derivative of gammap — gammapDer","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammapDer: derivative of gammap — gammapDer","text":"lowergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammapDer: derivative of gammap — gammapDer","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapDer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammapDer: derivative of gammap — gammapDer","text":"","code":"gammapDer(1:3, 3) #> [1] 0.04978707 0.14936121 0.22404181 gammapDer(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":null,"dir":"Reference","previous_headings":"","what":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"gammapInv gammapInva: Inverses normalized gammap function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"","code":"gammapInv(a, p) gammapInva(x, p)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"numeric '' parameter upper incomplete gamma p numeric 'p' parameter upper incomplete gamma x numeric 'x' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"inverse gammap results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"equation: p = gammap(, x) 'gammapInv' function returns value 'x' satisfies equation 'gammapInva' function returns value 'q' satisfies equation NOTE: gammapInva slow","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammapInv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammapInv and gammapInva: Inverses of normalized gammap function — gammapInv","text":"","code":"gammapInv(1:3, 0.5) #> [1] 0.6931472 1.6783470 2.6740603 gammapInv(1, 1:3 / 3.1) #> [1] 0.3894648 1.0360919 3.4339872 gammapInv(1:3, 1:3 / 3.1) #> [1] 0.3894648 2.1988984 6.8872929 gammapInva(1:3, 1:3 / 3.1) #> [1] 0.3894648 2.1988984 6.8872929"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":null,"dir":"Reference","previous_headings":"","what":"Gammaq: normalized upper incomplete gamma function — gammaq","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gamma_q boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"","code":"gammaq(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"numeric '' parameter normalized upper incomplete gamma z numeric 'z' parameter normalized upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gammaq results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"gamma q function given : gammaq = uppergamma(, z)/gamma()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gammaq: normalized upper incomplete gamma function — gammaq","text":"","code":"gammaq(1, 3) #> [1] 0.04978707 gammaq(1:3, 3) #> [1] 0.04978707 0.19914827 0.42319008 gammaq(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":null,"dir":"Reference","previous_headings":"","what":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"gammaqInv gammaqInva: Inverses normalized gammaq function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"","code":"gammaqInv(a, q) gammaqInva(x, q)"},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"numeric '' parameter upper incomplete gamma q numeric 'q' parameter upper incomplete gamma x numeric 'x' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"inverse gammaq results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"equation: q = gammaq(, x) 'gammaqInv' function returns value 'x' satisfies equation 'gammaqInva' function returns value '' satisfies equation NOTE: gammaqInva slow","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/gammaqInv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"gammaqInv and gammaqInva: Inverses of normalized gammaq function — gammaqInv","text":"","code":"gammaqInv(1:3, 0.5) #> [1] 0.6931472 1.6783470 2.6740603 gammaqInv(1, 1:3 / 3) #> [1] 1.0986123 0.4054651 0.0000000 gammaqInv(1:3, 1:3 / 3.1) #> [1] 1.131402 1.248533 0.684289 gammaqInva(1:3, 1:3 / 3.1) #> [1] 1.131402 1.248533 0.684289"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"Create complete shiny application exploring dosing regimens given (hardcoded) PK/PD model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"","code":"genShinyApp.template( appDir = \"shinyExample\", verbose = TRUE, ODE.config = list(ode = \"model\", params = c(KA = 0.294), inits = c(eff = 1), method = \"lsoda\", atol = 1e-08, rtol = 1e-06) ) write.template.server(appDir) write.template.ui(appDir, statevars)"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"appDir string directory store shiny app, default \"shinyExample\". directory appDir created exist. verbose logical specifying whether write messages shiny app generated. Defaults TRUE. ODE.config model name compiled list parameters sent rxSolve(). statevars List statevars passed write.template.ui() function. usually called directly. PK/PD model defined using rxode2(), set parameters initial values defined. appropriate R scripts shiny's user interface ui.R server logic server.R created directory appDir. function evaluates following PK/PD model default: can changed ODE.config parameter. launch shiny app, simply issue runApp(appDir) R command.","code":"C2 = centr/V2; C3 = peri/V3; d/dt(depot) =-KA*depot; d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) = Q*C2 - Q*C3; d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff;"},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"None, functions used side effects.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"functions create simple, working example dosing regimen simulation web application. Users may want modify code experiment creating shiny applications specific rxode2 models.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/genShinyApp.template.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate an example (template) of a dosing regimen shiny app — genShinyApp.template","text":"","code":"# \\donttest{ # remove myapp when the example is complete on.exit(unlink(\"myapp\", recursive = TRUE, force = TRUE)) # create the shiny app example (template) genShinyApp.template(appDir = \"myapp\") #> #> Generating an example (template) for a dosing regimen shiny app #> #> Using the following PK/PD model: #> C2 = centr/V2; #> C3 = peri/V3; #> d/dt(depot) =-KA*depot; #> d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3; #> d/dt(peri) = Q*C2 - Q*C3; #> d/dt(eff) = Kin - Kout*(1-C2/(EC50+C2))*eff; #> #> Translating the PK/PD ODE model into C, compiling, etc. #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> #> Parameters and their values: #> KA CL V2 Q V3 Kin Kout EC50 #> 0.294 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> Initial values in each compartment: #> depot centr pari eff #> 0 0 0 1 #> #> Warning: 2 arguments not used by format ' #> # #> # Dosing regimen template generated by rxode2::genShinyApp.template() #> # #> #> debug = TRUE #> #wd = sprintf(\"%%s/../\", getwd()) #> #setwd(wd) #> #> # Server inputs: Dose, dosing regimen, dosing frequency, #> # dosing cycle definition, number of dosing cycles #> #> library(shiny) #> library(rxode2) #> #> # read objects from \"rx_shiny_data.rda\" in the AppDir folder, #> # objects include, mod1, params, inits, method, atol, rtol.] #> #> load(\"./rx_shiny_data.rda\") #> if (!rxDynLoad(mod1)) mod1 <- rxode2(mod1, modName=\"mod1\") #> # Define server logic #> shinyServer(function(input, output) { #> #> get.cp <- reactive({ #> ds <- input$Dose #> reg <- switch(input$regimen, \"QD\"=1, \"BID\"=2) #> cyc <- switch(input$cycle, #> \"continous\"=c(7,0), #> \"1wkon 1wkoff\"=c(7,7), #> \"2wkon 1wkoff\"=c(14,7), #> \"3wkon 1wkoff\"=c(21,7) #> ) #> cyc <- [... truncated] #> Shiny files (ui.R, server.R) plus R data saved. #> #> To launch the Shiny app, type the following two R commands: #> #> \tlibrary(shiny) #> \trunApp(\"myapp\") #> # run the shiny app if (requireNamespace(\"shiny\", quietly=TRUE)) { library(shiny) # runApp(\"myapp\") # Won't launch in environments without browsers } # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Get base simulation model simulation inis underlying rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"","code":"getBaseIniSimModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"obj Fit Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Simulation object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseIniSimModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the base simulation model for simulation with inis in the underlying rxode2 model — getBaseIniSimModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the base simulation model for simulation — getBaseSimModel","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Get base simulation model simulation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the base simulation model for simulation — getBaseSimModel","text":"","code":"getBaseSimModel(obj) # S3 method for default getBaseSimModel(obj) # S3 method for default getBaseIniSimModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the base simulation model for simulation — getBaseSimModel","text":"obj Fit Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Simulation object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSimModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the base simulation model for simulation — getBaseSimModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Get symengine loading symengine rxS()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"","code":"getBaseSymengineModel(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"obj Object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Simulation model ready load symeng","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getBaseSymengineModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the symengine for loading into symengine with rxS() — getBaseSymengineModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":null,"dir":"Reference","previous_headings":"","what":"Get/Set the number of threads that rxode2 uses — getRxThreads","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"Get/Set number threads rxode2 uses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"","code":"getRxThreads(verbose = FALSE) setRxThreads(threads = NULL, percent = NULL, throttle = NULL) rxCores(verbose = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"verbose Display value relevant OpenMP settings threads NULL (default) rereads environment variables. 0 means use logical CPUs available. Otherwise number >= 1 percent provided number 2 100; percentage logical CPUs use. default startup, 50 percent. throttle 2 (default) means , roughly speaking, single thread used number subjects solved <=2, 2 threads number points <=4, etc. throttle speed small data tasks (especially repeated many times) incurring overhead managing multiple threads. throttle also suppress sorting ID solved first (nsubject solved)*throttle <= nthreads. rxode2 sorting occurs minimize time waiting another thread finish. last item solved long solving time, solving wait last costly solving occur. items likely take time solved first, wait less likely impact overall solving time. rxode2 IDs sorted individual number solving points (largest first). also C interface allows IDs resorted total time spent solving equation. allows packages like nlmixr sort solving time needed. Overall number threads throttled (restricted) small tasks sorting IDs suppressed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/getRxThreads.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get/Set the number of threads that rxode2 uses — getRxThreads","text":"number threads rxode2 uses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":null,"dir":"Reference","previous_headings":"","what":"Empty Guide — guide_none","title":"Empty Guide — guide_none","text":"empty guide draws nothing; included rxode2 compatibility ggplot 3.2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Empty Guide — guide_none","text":"","code":"guide_none(title = waiver(), position = waiver())"},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Empty Guide — guide_none","text":"title character string expression indicating title guide. NULL, title shown. default (waiver()), name scale object name specified labs() used title. position guide drawn: one top, bottom, left, right.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/guide_none.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Empty Guide — guide_none","text":"nothing, simply included compatible ggplot 3.2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign the ini block in the rxode2 related object — ini<-","title":"Assign the ini block in the rxode2 related object — ini<-","text":"Assign ini block rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign the ini block in the rxode2 related object — ini<-","text":"","code":"ini(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign the ini block in the rxode2 related object — ini<-","text":"x rxode2 related object envir Environment assignment occurs value Value object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign the ini block in the rxode2 related object — ini<-","text":"rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini-set.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign the ini block in the rxode2 related object — ini<-","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":null,"dir":"Reference","previous_headings":"","what":"Ini block for rxode2/nlmixr models — ini.rxUi","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini block controls initial conditions 'theta' (fixed effects), 'omega' (random effects), 'sigma' (residual error) elements model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"","code":"# S3 method for rxUi ini(x, ..., envir = parent.frame(), append = NULL) # S3 method for default ini(x, ..., envir = parent.frame(), append = NULL) ini(x, ..., envir = parent.frame(), append = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"x expression ... expressions ini() function envir environment unevaluated model expressions evaluated. May also NULL, list, data frame, pairlist integer specified sys.call. append Reorder theta parameters. NULL means change parameter order. parameter name (character string) means put new parameter named parameter. number less equal zero means put parameter beginning list. number greater last parameter number means put parameter end list.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini block","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"ini() function used two different ways. main way used set initial conditions associated attributes (described ) model. way used updating initial conditions model, often using pipe operator. 'theta' 'sigma' can set using either <- = tvCL <- 1 equivalently tvCL = 1. 'omega' can set ~ etaCL ~ 0.1. Parameters can named unnamed (though named parameters preferred). named parameter set using name left assignment unnamed parameters set without assignment operator. tvCL <- 1 set named parameter tvCL 1. Unnamed parameters set using just value, 1. estimation methods, lower upper bounds can set 'theta' 'sigma' values. set lower /upper bound, use vector values. vector c(lower, estimate, upper). vector may given just estimate (estimate), lower bound estimate (c(lower, estimate)), three (c(lower, estimate, upper)). set estimate upper bound without lower bound, set lower bound -Inf, c(-Inf, estimate, upper). estimation method support bounds, bounds ignored warning. 'omega' values can set single value values lower-triangular matrix. values may set either variance-covariance matrix (default) correlation matrix -diagonals standard deviations diagonals. Names may set left side ~. set variance-covariance matrix variance values 2 3 covariance -2.5 use ~c(2, 2.5, 3). set matrix names iivKa iivCL, use iivKa + iivCL~c(2, 2.5, 3). set correlation matrix standard deviations diagonal, use cor() like iivKa + iivCL~cor(2, -0.5, 3). Values may fixed (therefore estimated) using either name fixed end assignment calling fixed() function value fix. 'theta' 'sigma', either estimate full definition (including lower upper bounds) may included fixed setting. example, following effectively equivalent set 'theta' 'sigma' fixed value (lower upper bounds ignored fixed value): tvCL <- fixed(1), tvCL <- fixed(0, 1), tvCL <- fixed(0, 1, 2), tvCL <- c(0, fixed(1), 2), tvCL <- c(0, 1, fixed). 'omega' assignment, full block none block must set fixed. Examples setting 'omega' value fixed : iivKa~fixed(1), iivKa + iivCL~fixed(1, 2, 3), iivKa + iivCL~c(1, 2, 3, fixed). Anywhere fixed used, FIX, FIXED, fix may used equivalently. value, standard mathematical operators functions may used define value. example, log(2) 24*30 may used define value anywhere number can used (e.g. lower bound, estimate, upper bound, variance, etc.). Values may labeled using label() function assignment. Labels used make reporting easier giving human-readable description parameter, labels effect estimation. typical way set label parameter tvCL label \"Typical Value Clearance (L/hr)\" tvCL <- 1; label(\"Typical Value Clearance (L/hr)\"). rxode2/nlmixr2 attempt determine back-transformations user. example, CL <- exp(tvCL) detect tvCL must back-transformed exp() easier interpretation. want control back-transformation, can specify back-transformation using backTransform() assignment. example, set back-transformation exp(), can use tvCL <- 1; backTransform(exp()).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/ini.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Ini block for rxode2/nlmixr models — ini.rxUi","text":"","code":"# Set the ini() block in a model one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # Use piping to update initial conditions one.compartment %>% ini(tka <- log(2)) #> #> #> ℹ change initial estimate of `tka` to `0.693147180559945` #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.6931472 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.693147180559945 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } one.compartment %>% ini(tka <- label(\"Absorption rate, Ka (1/hr)\")) #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.4510756 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.451075619360217 #> label(\"Absorption rate, Ka (1/hr)\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # Move the tka parameter to be just below the tv parameter (affects parameter # summary table, only) one.compartment %>% ini(tka <- label(\"Absorption rate, Ka (1/hr)\"), append = \"tv\") #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tcl tv tka add.sd #> 1.0006319 3.4499875 0.4510756 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> tka <- 0.451075619360217 #> label(\"Absorption rate, Ka (1/hr)\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> } # When programming with rxode2/nlmixr2, it may be easier to pass strings in # to modify the ini one.compartment %>% ini(\"tka <- log(2)\") #> #> #> ℹ change initial estimate of `tka` to `0.693147180559945` #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.6931472 1.0006319 3.4499875 0.7000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.693147180559945 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- c(0, 0.7) #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Check to see if this is an rxSolve object. — is.rxSolve","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"Check see rxSolve object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"","code":"is.rxSolve(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"x object check see rxSolve rxSolve object expired strip rxSolve information.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"boolean indicating rxSolve object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/is.rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check to see if this is an rxSolve object. — is.rxSolve","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"Calculate log likelihood binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"","code":"llikBeta(x, shape1, shape2, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"x Observation shape1, shape2 non-negative parameters Beta distribution. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"data frame fx log pdf value dShape1 dShape2 derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"rxode2() model, can use llikBeta() use arguments. can also get derivative shape1 shape2 llikBetaDshape1() llikBetaDshape2().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBeta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBeta","text":"","code":"# \\donttest{ x <- seq(1e-4, 1 - 1e-4, length.out = 21) llikBeta(x, 0.5, 0.5) #> fx dShape1 dShape2 #> 1 3.46049030 -7.82404601 1.38619436 #> 2 0.37793108 -1.60763953 1.33490633 #> 3 0.05888752 -0.91549105 1.28084495 #> 4 -0.11510253 -0.51035907 1.22369308 #> 5 -0.22855163 -0.22284360 1.16307581 #> 6 -0.30780832 0.00019998 1.09854562 #> 7 -0.36444410 0.18245488 1.02956227 #> 8 -0.40444714 0.33655795 0.95546529 #> 9 -0.43118004 0.47005363 0.87543540 #> 10 -0.44655956 0.58780889 0.78843918 #> 11 -0.45158271 0.69314718 0.69314718 #> 12 -0.44655956 0.78843918 0.58780889 #> 13 -0.43118004 0.87543540 0.47005363 #> 14 -0.40444714 0.95546529 0.33655795 #> 15 -0.36444410 1.02956227 0.18245488 #> 16 -0.30780832 1.09854562 0.00019998 #> 17 -0.22855163 1.16307581 -0.22284360 #> 18 -0.11510253 1.22369308 -0.51035907 #> 19 0.05888752 1.28084495 -0.91549105 #> 20 0.37793108 1.33490633 -1.60763953 #> 21 3.46049030 1.38619436 -7.82404601 llikBeta(x, 1, 3, TRUE) #> x shape1 shape2 fx dShape1 dShape2 #> 1 0.00010 1 3 1.09841228 -7.37700704 0.33323333 #> 2 0.05009 1 3 0.99583622 -1.16060056 0.28194530 #> 3 0.10008 1 3 0.88771347 -0.46845208 0.22788392 #> 4 0.15007 1 3 0.77340972 -0.06332009 0.17073205 #> 5 0.20006 1 3 0.65217518 0.22419538 0.11011478 #> 6 0.25005 1 3 0.52311481 0.44723895 0.04558459 #> 7 0.30004 1 3 0.38514811 0.62949385 -0.02339876 #> 8 0.35003 1 3 0.23695415 0.78359692 -0.09749574 #> 9 0.40002 1 3 0.07689437 0.91709260 -0.17752562 #> 10 0.45001 1 3 -0.09709808 1.03484786 -0.26452185 #> 11 0.50000 1 3 -0.28768207 1.14018615 -0.35981385 #> 12 0.54999 1 3 -0.49835866 1.23547815 -0.46515214 #> 13 0.59998 1 3 -0.73386918 1.32247438 -0.58290740 #> 14 0.64997 1 3 -1.00086054 1.40250426 -0.71640308 #> 15 0.69996 1 3 -1.30906667 1.47660124 -0.87050615 #> 16 0.74995 1 3 -1.67357647 1.54558459 -1.05276105 #> 17 0.79994 1 3 -2.11966363 1.61011478 -1.27580462 #> 18 0.84993 1 3 -2.69469457 1.67073205 -1.56332009 #> 19 0.89992 1 3 -3.50495854 1.72788392 -1.96845208 #> 20 0.94991 1 3 -4.88925549 1.78194530 -2.66060056 #> 21 0.99990 1 3 -17.32206846 1.83323333 -8.87700704 et <- et(seq(1e-4, 1-1e-4, length.out=21)) et$shape1 <- 0.5 et$shape2 <- 1.5 model <- function() { model({ fx <- llikBeta(time, shape1, shape2) dShape1 <- llikBetaDshape1(time, shape1, shape2) dShape2 <- llikBetaDshape2(time, shape1, shape2) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 21 × 6 #> time fx dShape1 dShape2 shape1 shape2 #> #> 1 0.0001 4.15 -6.82 0.386 0.5 1.5 #> 2 0.0501 1.02 -0.608 0.335 0.5 1.5 #> 3 0.100 0.647 0.0845 0.281 0.5 1.5 #> 4 0.150 0.415 0.490 0.224 0.5 1.5 #> 5 0.200 0.241 0.777 0.163 0.5 1.5 #> 6 0.250 0.0976 1.00 0.0985 0.5 1.5 #> # ℹ 15 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"Calculate log likelihood binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"","code":"llikBinom(x, size, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"x Number successes size Size trial prob probability success full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"rxode2() model, can use llikBinom() use arguments. can also get derivative prob llikBinomDprob()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikBinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the binomial function (and its derivatives) — llikBinom","text":"","code":"# \\donttest{ llikBinom(46:54, 100, 0.5) #> fx dProb #> 1 -2.848030 -16 #> 2 -2.709193 -12 #> 3 -2.610102 -8 #> 4 -2.550679 -4 #> 5 -2.530876 0 #> 6 -2.550679 4 #> 7 -2.610102 8 #> 8 -2.709193 12 #> 9 -2.848030 16 llikBinom(46:54, 100, 0.5, TRUE) #> x size prob fx dProb #> 1 46 100 0.5 -2.848030 -16 #> 2 47 100 0.5 -2.709193 -12 #> 3 48 100 0.5 -2.610102 -8 #> 4 49 100 0.5 -2.550679 -4 #> 5 50 100 0.5 -2.530876 0 #> 6 51 100 0.5 -2.550679 4 #> 7 52 100 0.5 -2.610102 8 #> 8 53 100 0.5 -2.709193 12 #> 9 54 100 0.5 -2.848030 16 # In rxode2 you can use: et <- et(46:54) et$size <- 100 et$prob <-0.5 model <- function() { model({ fx <- llikBinom(time, size, prob) dProb <- llikBinomDprob(time, size, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size prob #> #> 1 46 -2.85 -16 100 0.5 #> 2 47 -2.71 -12 100 0.5 #> 3 48 -2.61 -8 100 0.5 #> 4 49 -2.55 -4 100 0.5 #> 5 50 -2.53 0 100 0.5 #> 6 51 -2.55 4 100 0.5 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"log likelihood Cauchy distribution derivatives (stan)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"","code":"llikCauchy(x, location = 0, scale = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"x Observation location, scale location scale parameters. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"data frame fx log pdf value dLocation dScale derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"rxode2() model, can use llikCauchy() use arguments. can also get derivative location scale llikCauchyDlocation() llikCauchyDscale().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikCauchy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood of Cauchy distribution and it's derivatives (from stan) — llikCauchy","text":"","code":"# \\donttest{ x <- seq(-3, 3, length.out = 21) llikCauchy(x, 0, 1) #> fx dLocation dScale #> 1 -3.447315 -0.6000000 0.8000000 #> 2 -3.259780 -0.6513872 0.7587455 #> 3 -3.055753 -0.7100592 0.7041420 #> 4 -2.832979 -0.7763401 0.6303142 #> 5 -2.589293 -0.8490566 0.5283019 #> 6 -2.323385 -0.9230769 0.3846154 #> 7 -2.036728 -0.9836066 0.1803279 #> 8 -1.738057 -0.9944751 -0.1049724 #> 9 -1.452215 -0.8823529 -0.4705882 #> 10 -1.230908 -0.5504587 -0.8348624 #> 11 -1.144730 0.0000000 -1.0000000 #> 12 -1.230908 0.5504587 -0.8348624 #> 13 -1.452215 0.8823529 -0.4705882 #> 14 -1.738057 0.9944751 -0.1049724 #> 15 -2.036728 0.9836066 0.1803279 #> 16 -2.323385 0.9230769 0.3846154 #> 17 -2.589293 0.8490566 0.5283019 #> 18 -2.832979 0.7763401 0.6303142 #> 19 -3.055753 0.7100592 0.7041420 #> 20 -3.259780 0.6513872 0.7587455 #> 21 -3.447315 0.6000000 0.8000000 llikCauchy(x, 3, 1, full=TRUE) #> x location scale fx dLocation dScale #> 1 -3.0 3 1 -4.755648 -0.3243243 0.9459459 #> 2 -2.7 3 1 -4.655977 -0.3404001 0.9402807 #> 3 -2.4 3 1 -4.551246 -0.3580902 0.9336870 #> 4 -2.1 3 1 -4.440937 -0.3776379 0.9259534 #> 5 -1.8 3 1 -4.324449 -0.3993344 0.9168053 #> 6 -1.5 3 1 -4.201087 -0.4235294 0.9058824 #> 7 -1.2 3 1 -4.070040 -0.4506438 0.8927039 #> 8 -0.9 3 1 -3.930358 -0.4811845 0.8766194 #> 9 -0.6 3 1 -3.780926 -0.5157593 0.8567335 #> 10 -0.3 3 1 -3.620428 -0.5550883 0.8317914 #> 11 0.0 3 1 -3.447315 -0.6000000 0.8000000 #> 12 0.3 3 1 -3.259780 -0.6513872 0.7587455 #> 13 0.6 3 1 -3.055753 -0.7100592 0.7041420 #> 14 0.9 3 1 -2.832979 -0.7763401 0.6303142 #> 15 1.2 3 1 -2.589293 -0.8490566 0.5283019 #> 16 1.5 3 1 -2.323385 -0.9230769 0.3846154 #> 17 1.8 3 1 -2.036728 -0.9836066 0.1803279 #> 18 2.1 3 1 -1.738057 -0.9944751 -0.1049724 #> 19 2.4 3 1 -1.452215 -0.8823529 -0.4705882 #> 20 2.7 3 1 -1.230908 -0.5504587 -0.8348624 #> 21 3.0 3 1 -1.144730 0.0000000 -1.0000000 et <- et(-3, 3, length.out=10) et$location <- 0 et$scale <- 1 model <- function() { model({ fx <- llikCauchy(time, location, scale) dLocation <- llikCauchyDlocation(time, location, scale) dScale <- llikCauchyDscale(time, location, scale) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> Warning: #> with negative times, compartments initialize at first negative observed time #> with positive times, compartments initialize at time zero #> use 'rxSetIni0(FALSE)' to initialize at first observed time #> this warning is displayed once per session #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dLocation dScale location scale #> #> 1 -3 -3.45 -0.6 0.8 0 1 #> 2 -2.33 -3.01 -0.724 0.690 0 1 #> 3 -1.67 -2.47 -0.882 0.471 0 1 #> 4 -1 -1.84 -1 0 0 1 #> 5 -0.333 -1.25 -0.6 -0.8 0 1 #> 6 0.333 -1.25 0.600 -0.8 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for chi-squared distribution — llikChisq","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"log likelihood derivatives chi-squared distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"","code":"llikChisq(x, df, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"x variable distributed chi-squared distribution df degrees freedom (non-negative, can non-integer). full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"data frame fx log pdf value dDf derivatives respect df parameter observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"rxode2() model, can use llikChisq() use x df arguments. can also get derivative df llikChisqDdf().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikChisq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for chi-squared distribution — llikChisq","text":"","code":"# \\donttest{ llikChisq(1, df = 1:3, full=TRUE) #> x df fx dDf #> 1 1 1 -1.418939 0.63518142 #> 2 1 2 -1.193147 -0.05796576 #> 3 1 3 -1.418939 -0.36481858 llikChisq(1, df = 6:9) #> fx dDf #> 1 -3.272589 -0.8079658 #> 2 -4.126989 -0.8981519 #> 3 -5.064348 -0.9746324 #> 4 -6.072899 -1.0410091 et <- et(1:3) et$x <- 1 model <- function() { model({ fx <- llikChisq(x, time) dDf <- llikChisqDdf(x, time) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 3 × 4 #> time fx dDf x #> #> 1 1 -1.42 0.635 1 #> 2 2 -1.19 -0.0580 1 #> 3 3 -1.42 -0.365 1 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for exponential distribution — llikExp","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"log likelihood derivatives exponential distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"","code":"llikExp(x, rate, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"x variable distributed exponential distribution rate vector rates. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"data frame fx log pdf value dRate derivatives respect rate parameter observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"rxode2() model, can use llikExp() use x rate arguments. can also get derivative rate llikExpDrate().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikExp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for exponential distribution — llikExp","text":"","code":"# \\donttest{ llikExp(1, 1:3) #> fx dRate #> 1 -1.000000 0.0000000 #> 2 -1.306853 -0.5000000 #> 3 -1.901388 -0.6666667 llikExp(1, 1:3, full=TRUE) #> x rate fx dRate #> 1 1 1 -1.000000 0.0000000 #> 2 1 2 -1.306853 -0.5000000 #> 3 1 3 -1.901388 -0.6666667 # You can use rxode2 for these too: et <- et(1:3) et$x <- 1 model <- function() { model({ fx <- llikExp(x, time) dRate <- llikExpDrate(x, time) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 3 × 4 #> time fx dRate x #> #> 1 1 -1 0 1 #> 2 2 -1.31 -0.5 1 #> 3 3 -1.90 -0.667 1 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for F distribution — llikF","title":"log likelihood and derivatives for F distribution — llikF","text":"log likelihood derivatives F distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for F distribution — llikF","text":"","code":"llikF(x, df1, df2, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for F distribution — llikF","text":"x variable distributed f distribution df1, df2 degrees freedom. Inf allowed. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for F distribution — llikF","text":"data frame fx log pdf value dDf1 dDf2 derivatives respect df1/df2 parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for F distribution — llikF","text":"rxode2() model, can use llikF() use x rate arguments. can also get derivative df1 df2 llikFDdf1() llikFDdf2().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for F distribution — llikF","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikF.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for F distribution — llikF","text":"","code":"# \\donttest{ x <- seq(0.001, 5, length.out = 100) llikF(x^2, 1, 5) #> fx dDf1 dDf2 #> 1 5.939135090 -5.769327755 0.0098138672 #> 2 1.996061339 -1.829698617 0.0098667834 #> 3 1.308027230 -1.151720596 0.0100203751 #> 4 0.898151814 -0.758467992 0.0102713542 #> 5 0.601410048 -0.484842238 0.0106143384 #> 6 0.365567397 -0.278507461 0.0110419510 #> 7 0.167275143 -0.115987118 0.0115449567 #> 8 -0.005928407 0.015333168 0.0121124287 #> 9 -0.161467803 0.123053577 0.0127319420 #> 10 -0.304110944 0.212138450 0.0133897879 #> 11 -0.437089645 0.286034532 0.0140712037 #> 12 -0.562684604 0.347253504 0.0147606108 #> 13 -0.682555520 0.397699568 0.0154418570 #> 14 -0.797939098 0.438864917 0.0160984557 #> 15 -0.909773848 0.471951996 0.0167138175 #> 16 -1.018782007 0.497952966 0.0172714700 #> 17 -1.125525217 0.517703019 0.0177552614 #> 18 -1.230443500 0.531917117 0.0181495454 #> 19 -1.333883243 0.541215913 0.0184393449 #> 20 -1.436117763 0.546144408 0.0186104926 #> 21 -1.537362702 0.547185650 0.0186497493 #> 22 -1.637787764 0.544770962 0.0185448973 #> 23 -1.737525805 0.539287723 0.0182848126 #> 24 -1.836679954 0.531085385 0.0178595139 #> 25 -1.935329266 0.520480216 0.0172601925 #> 26 -2.033533263 0.507759100 0.0164792220 #> 27 -2.131335592 0.493182655 0.0155101530 #> 28 -2.228767013 0.476987816 0.0143476919 #> 29 -2.325847849 0.459390036 0.0129876676 #> 30 -2.422589998 0.440585182 0.0114269877 #> 31 -2.518998603 0.420751193 0.0096635860 #> 32 -2.615073425 0.400049565 0.0076963639 #> 33 -2.710810000 0.378626673 0.0055251263 #> 34 -2.806200581 0.356614982 0.0031505147 #> 35 -2.901234940 0.334134152 0.0005739382 #> 36 -2.995901017 0.311292055 -0.0022024960 #> 37 -3.090185467 0.288185720 -0.0051760516 #> 38 -3.184074111 0.264902202 -0.0083434311 #> 39 -3.277552304 0.241519400 -0.0117008417 #> 40 -3.370605236 0.218106810 -0.0152440579 #> 41 -3.463218177 0.194726229 -0.0189684823 #> 42 -3.555376677 0.171432411 -0.0228692014 #> 43 -3.647066718 0.148273673 -0.0269410395 #> 44 -3.738274839 0.125292465 -0.0311786073 #> 45 -3.828988227 0.102525891 -0.0355763478 #> 46 -3.919194789 0.080006197 -0.0401285781 #> 47 -4.008883199 0.057761220 -0.0448295271 #> 48 -4.098042931 0.035814802 -0.0496733702 #> 49 -4.186664276 0.014187176 -0.0546542601 #> 50 -4.274738350 -0.007104684 -0.0597663547 #> 51 -4.362257091 -0.028046739 -0.0650038410 #> 52 -4.449213248 -0.048627585 -0.0703609577 #> 53 -4.535600366 -0.068838184 -0.0758320130 #> 54 -4.621412763 -0.088671614 -0.0814114015 #> 55 -4.706645505 -0.108122840 -0.0870936184 #> 56 -4.791294380 -0.127188508 -0.0928732707 #> 57 -4.875355868 -0.145866755 -0.0987450876 #> 58 -4.958827105 -0.164157039 -0.1047039284 #> 59 -5.041705859 -0.182059980 -0.1107447891 #> 60 -5.123990491 -0.199577223 -0.1168628074 #> 61 -5.205679923 -0.216711307 -0.1230532668 #> 62 -5.286773611 -0.233465550 -0.1293115988 #> 63 -5.367271506 -0.249843943 -0.1356333846 #> 64 -5.447174028 -0.265851061 -0.1420143563 #> 65 -5.526482033 -0.281491973 -0.1484503963 #> 66 -5.605196787 -0.296772169 -0.1549375368 #> 67 -5.683319932 -0.311697491 -0.1614719584 #> 68 -5.760853464 -0.326274073 -0.1680499885 #> 69 -5.837799706 -0.340508283 -0.1746680988 #> 70 -5.914161282 -0.354406680 -0.1813229026 #> 71 -5.989941093 -0.367975967 -0.1880111521 #> 72 -6.065142296 -0.381222952 -0.1947297352 #> 73 -6.139768282 -0.394154517 -0.2014756717 #> 74 -6.213822655 -0.406777586 -0.2082461105 #> 75 -6.287309215 -0.419099097 -0.2150383254 #> 76 -6.360231938 -0.431125983 -0.2218497115 #> 77 -6.432594959 -0.442865149 -0.2286777813 #> 78 -6.504402560 -0.454323453 -0.2355201612 #> 79 -6.575659147 -0.465507693 -0.2423745875 #> 80 -6.646369247 -0.476424593 -0.2492389023 #> 81 -6.716537483 -0.487080791 -0.2561110501 #> 82 -6.786168572 -0.497482830 -0.2629890742 #> 83 -6.855267306 -0.507637151 -0.2698711122 #> 84 -6.923838547 -0.517550083 -0.2767553934 #> 85 -6.991887212 -0.527227840 -0.2836402345 #> 86 -7.059418267 -0.536676516 -0.2905240366 #> 87 -7.126436719 -0.545902081 -0.2974052813 #> 88 -7.192947604 -0.554910380 -0.3042825282 #> 89 -7.258955983 -0.563707126 -0.3111544109 #> 90 -7.324466935 -0.572297907 -0.3180196342 #> 91 -7.389485548 -0.580688177 -0.3248769714 #> 92 -7.454016916 -0.588883261 -0.3317252608 #> 93 -7.518066132 -0.596888352 -0.3385634034 #> 94 -7.581638284 -0.604708517 -0.3453903600 #> 95 -7.644738447 -0.612348689 -0.3522051484 #> 96 -7.707371685 -0.619813679 -0.3590068413 #> 97 -7.769543041 -0.627108167 -0.3657945633 #> 98 -7.831257537 -0.634236713 -0.3725674892 #> 99 -7.892520171 -0.641203751 -0.3793248413 #> 100 -7.953335909 -0.648013598 -0.3860658874 model <- function(){ model({ fx <- llikF(time, df1, df2) dMean <- llikFDdf1(time, df1, df2) dSd <- llikFDdf2(time, df1, df2) }) } et <- et(x) et$df1 <- 1 et$df2 <- 5 rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 100 × 6 #> time fx dMean dSd df1 df2 #> #> 1 0.001 2.48 -2.32 0.00983 1 5 #> 2 0.0515 0.484 -0.380 0.0108 1 5 #> 3 0.102 0.112 -0.0731 0.0117 1 5 #> 4 0.152 -0.118 0.0943 0.0125 1 5 #> 5 0.203 -0.291 0.204 0.0133 1 5 #> 6 0.253 -0.431 0.283 0.0140 1 5 #> # ℹ 94 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Gamma distribution — llikGamma","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"log likelihood derivatives Gamma distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"","code":"llikGamma(x, shape, rate, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"x variable distributed gamma distribution shape distribution's shape parameter. Must positive. rate distribution's rate parameters. Must positive. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"rxode2() model, can use llikGamma() use x rate arguments. can also get derivative shape rate llikGammaDshape() llikGammaDrate().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Gamma distribution — llikGamma","text":"","code":"# \\donttest{ llikGamma(1, 1, 10) #> fx dShape dRate #> 1 -7.697415 2.879801 -0.9 # You can use this in `rxode2` too: et <- et(seq(0.001, 1, length.out=10)) et$shape <- 1 et$rate <- 10 model <- function() { model({ fx <- llikGamma(time, shape, rate) dShape<- llikGammaDshape(time, shape, rate) dRate <- llikGammaDrate(time, shape, rate) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dShape dRate rate shape #> #> 1 0.001 2.29 -4.03 0.099 10 1 #> 2 0.112 1.18 0.691 -0.012 10 1 #> 3 0.223 0.0726 1.38 -0.123 10 1 #> 4 0.334 -1.04 1.78 -0.234 10 1 #> 5 0.445 -2.15 2.07 -0.345 10 1 #> 6 0.556 -3.26 2.29 -0.456 10 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Geom distribution — llikGeom","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"log likelihood derivatives Geom distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"","code":"llikGeom(x, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"x variable distributed geom distribution prob probability success trial. 0 < prob <= 1. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"rxode2() model, can use llikGeom() use x rate arguments. can also get derivative prob llikGeomDprob().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikGeom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Geom distribution — llikGeom","text":"","code":"# \\donttest{ llikGeom(1:10, 0.2) #> fx dProb #> 1 -1.832581 3.75 #> 2 -2.055725 2.50 #> 3 -2.278869 1.25 #> 4 -2.502012 0.00 #> 5 -2.725156 -1.25 #> 6 -2.948299 -2.50 #> 7 -3.171443 -3.75 #> 8 -3.394586 -5.00 #> 9 -3.617730 -6.25 #> 10 -3.840873 -7.50 et <- et(1:10) et$prob <- 0.2 model <- function() { model({ fx <- llikGeom(time, prob) dProb <- llikGeomDprob(time, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time fx dProb prob #> #> 1 1 -1.83 3.75 0.2 #> 2 2 -2.06 2.5 0.2 #> 3 3 -2.28 1.25 0.2 #> 4 4 -2.50 0 0.2 #> 5 5 -2.73 -1.25 0.2 #> 6 6 -2.95 -2.5 0.2 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"Calculate log likelihood negative binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"","code":"llikNbinom(x, size, prob, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"x Number successes size Size trial prob probability success full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"rxode2() model, can use llikNbinom() use arguments. can also get derivative prob llikNbinomDprob()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinom","text":"","code":"# \\donttest{ llikNbinom(46:54, 100, 0.5) #> fx dProb #> 1 -13.25200 108 #> 2 -12.81168 106 #> 3 -12.38560 104 #> 4 -11.97335 102 #> 5 -11.57458 100 #> 6 -11.18892 98 #> 7 -10.81603 96 #> 8 -10.45559 94 #> 9 -10.10728 92 llikNbinom(46:54, 100, 0.5, TRUE) #> x size prob fx dProb #> 1 46 100 0.5 -13.25200 108 #> 2 47 100 0.5 -12.81168 106 #> 3 48 100 0.5 -12.38560 104 #> 4 49 100 0.5 -11.97335 102 #> 5 50 100 0.5 -11.57458 100 #> 6 51 100 0.5 -11.18892 98 #> 7 52 100 0.5 -10.81603 96 #> 8 53 100 0.5 -10.45559 94 #> 9 54 100 0.5 -10.10728 92 # In rxode2 you can use: et <- et(46:54) et$size <- 100 et$prob <-0.5 model <- function() { model({ fx <- llikNbinom(time, size, prob) dProb <- llikNbinomDprob(time, size, prob) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size prob #> #> 1 46 -13.3 108 100 0.5 #> 2 47 -12.8 106 100 0.5 #> 3 48 -12.4 104 100 0.5 #> 4 49 -12.0 102 100 0.5 #> 5 50 -11.6 100 100 0.5 #> 6 51 -11.2 98 100 0.5 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"Calculate log likelihood negative binomial function (derivatives)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"","code":"llikNbinomMu(x, size, mu, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"x Number successes size Size trial mu mu parameter negative binomial full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"data frame fx pdf value dProb derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"rxode2() model, can use llikNbinomMu() use arguments. can also get derivative mu llikNbinomMuDmu()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNbinomMu.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the log likelihood of the negative binomial function (and its derivatives) — llikNbinomMu","text":"","code":"# \\donttest{ llikNbinomMu(46:54, 100, 40) #> fx dMu #> 1 -3.326828 0.1071429 #> 2 -3.446132 0.1250000 #> 3 -3.579663 0.1428571 #> 4 -3.727034 0.1607143 #> 5 -3.887874 0.1785714 #> 6 -4.061827 0.1964286 #> 7 -4.248554 0.2142857 #> 8 -4.447728 0.2321429 #> 9 -4.659037 0.2500000 llikNbinomMu(46:54, 100, 40, TRUE) #> x size mu fx dMu #> 1 46 100 40 -3.326828 0.1071429 #> 2 47 100 40 -3.446132 0.1250000 #> 3 48 100 40 -3.579663 0.1428571 #> 4 49 100 40 -3.727034 0.1607143 #> 5 50 100 40 -3.887874 0.1785714 #> 6 51 100 40 -4.061827 0.1964286 #> 7 52 100 40 -4.248554 0.2142857 #> 8 53 100 40 -4.447728 0.2321429 #> 9 54 100 40 -4.659037 0.2500000 et <- et(46:54) et$size <- 100 et$mu <- 40 model <- function() { model({ fx <- llikNbinomMu(time, size, mu) dProb <- llikNbinomMuDmu(time, size, mu) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 9 × 5 #> time fx dProb size mu #> #> 1 46 -3.33 0.107 100 40 #> 2 47 -3.45 0.125 100 40 #> 3 48 -3.58 0.143 100 40 #> 4 49 -3.73 0.161 100 40 #> 5 50 -3.89 0.179 100 40 #> 6 51 -4.06 0.196 100 40 #> # ℹ 3 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":null,"dir":"Reference","previous_headings":"","what":"Log likelihood for normal distribution — llikNorm","title":"Log likelihood for normal distribution — llikNorm","text":"Log likelihood normal distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log likelihood for normal distribution — llikNorm","text":"","code":"llikNorm(x, mean = 0, sd = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log likelihood for normal distribution — llikNorm","text":"x Observation mean Mean likelihood sd Standard deviation likelihood full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log likelihood for normal distribution — llikNorm","text":"data frame fx pdf value dMean dSd derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log likelihood for normal distribution — llikNorm","text":"rxode2() model, can use llikNorm() use arguments. can also get derivatives llikNormDmean() llikNormDsd()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Log likelihood for normal distribution — llikNorm","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikNorm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Log likelihood for normal distribution — llikNorm","text":"","code":"# \\donttest{ llikNorm(0) #> fx dMean dSd #> 1 -0.9189385 0 -1 llikNorm(seq(-2,2,length.out=10), full=TRUE) #> x mean sd fx dMean dSd #> 1 -2.0000000 0 1 -2.9189385 -2.0000000 3.0000000 #> 2 -1.5555556 0 1 -2.1288151 -1.5555556 1.4197531 #> 3 -1.1111111 0 1 -1.5362225 -1.1111111 0.2345679 #> 4 -0.6666667 0 1 -1.1411608 -0.6666667 -0.5555556 #> 5 -0.2222222 0 1 -0.9436299 -0.2222222 -0.9506173 #> 6 0.2222222 0 1 -0.9436299 0.2222222 -0.9506173 #> 7 0.6666667 0 1 -1.1411608 0.6666667 -0.5555556 #> 8 1.1111111 0 1 -1.5362225 1.1111111 0.2345679 #> 9 1.5555556 0 1 -2.1288151 1.5555556 1.4197531 #> 10 2.0000000 0 1 -2.9189385 2.0000000 3.0000000 # With rxode2 you can use: et <- et(-3, 3, length.out=10) et$mu <- 0 et$sigma <- 1 model <- function(){ model({ fx <- llikNorm(time, mu, sigma) dMean <- llikNormDmean(time, mu, sigma) dSd <- llikNormDsd(time, mu, sigma) }) } ret <- rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ret #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dMean dSd mu sigma #> #> 1 -3 -5.42 -3 8 0 1 #> 2 -2.33 -3.64 -2.33 4.44 0 1 #> 3 -1.67 -2.31 -1.67 1.78 0 1 #> 4 -1 -1.42 -1 0 0 1 #> 5 -0.333 -0.974 -0.333 -0.889 0 1 #> 6 0.333 -0.974 0.333 -0.889 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":null,"dir":"Reference","previous_headings":"","what":"log-likelihood for the Poisson distribution — llikPois","title":"log-likelihood for the Poisson distribution — llikPois","text":"log-likelihood Poisson distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log-likelihood for the Poisson distribution — llikPois","text":"","code":"llikPois(x, lambda, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log-likelihood for the Poisson distribution — llikPois","text":"x non negative integers lambda non-negative means full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log-likelihood for the Poisson distribution — llikPois","text":"data frame fx pdf value dLambda derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log-likelihood for the Poisson distribution — llikPois","text":"rxode2() model, can use llikPois() use arguments. can also get derivatives llikPoisDlambda()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log-likelihood for the Poisson distribution — llikPois","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikPois.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log-likelihood for the Poisson distribution — llikPois","text":"","code":"# \\donttest{ llikPois(0:7, lambda = 1) #> fx dLambda #> 1 -1.000000 -1 #> 2 -1.000000 0 #> 3 -1.693147 1 #> 4 -2.791759 2 #> 5 -4.178054 3 #> 6 -5.787492 4 #> 7 -7.579251 5 #> 8 -9.525161 6 llikPois(0:7, lambda = 4, full=TRUE) #> x lambda fx dLambda #> 1 0 4 -4.000000 -1.00 #> 2 1 4 -2.613706 -0.75 #> 3 2 4 -1.920558 -0.50 #> 4 3 4 -1.632876 -0.25 #> 5 4 4 -1.632876 0.00 #> 6 5 4 -1.856020 0.25 #> 7 6 4 -2.261485 0.50 #> 8 7 4 -2.821101 0.75 # In rxode2 you can use: et <- et(0:10) et$lambda <- 0.5 model <- function() { model({ fx <- llikPois(time, lambda) dLambda <- llikPoisDlambda(time, lambda) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 11 × 4 #> time fx dLambda lambda #> #> 1 0 -0.5 -1 0.5 #> 2 1 -1.19 1 0.5 #> 3 2 -2.58 3 0.5 #> 4 3 -4.37 5 0.5 #> 5 4 -6.45 7 0.5 #> 6 5 -8.75 9 0.5 #> # ℹ 5 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":null,"dir":"Reference","previous_headings":"","what":"Log likelihood of T and it's derivatives (from stan) — llikT","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"Log likelihood T derivatives (stan)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"","code":"llikT(x, df, mean = 0, sd = 1, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"x Observation df degrees freedom (\\(> 0\\), maybe non-integer). df = Inf allowed. mean Mean likelihood sd Standard deviation likelihood full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"data frame fx log pdf value dDf dMean dSd derivatives respect parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"rxode2() model, can use llikT() use arguments. can also get derivative df, mean sd llikTDdf(), llikTDmean() llikTDsd().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikT.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Log likelihood of T and it's derivatives (from stan) — llikT","text":"","code":"# \\donttest{ x <- seq(-3, 3, length.out = 21) llikT(x, 7, 0, 1) #> fx dDf dMean dSd #> 1 -4.2612484 -0.086858773 -1.5000000 3.5000000 #> 2 -3.8091335 -0.060260433 -1.5115465 3.0811756 #> 3 -3.3561547 -0.037201674 -1.5047022 2.6112853 #> 4 -2.9088542 -0.018379169 -1.4723926 2.0920245 #> 5 -2.4761000 -0.004340221 -1.4062500 1.5312500 #> 6 -2.0693878 0.004691380 -1.2972973 0.9459459 #> 7 -1.7028228 0.009010785 -1.1374408 0.3649289 #> 8 -1.3925134 0.009569214 -0.9218950 -0.1702945 #> 9 -1.1551333 0.007927361 -0.6521739 -0.6086957 #> 10 -1.0056349 0.005918024 -0.3385049 -0.8984485 #> 11 -0.9545342 0.005051942 0.0000000 -1.0000000 #> 12 -1.0056349 0.005918024 0.3385049 -0.8984485 #> 13 -1.1551333 0.007927361 0.6521739 -0.6086957 #> 14 -1.3925134 0.009569214 0.9218950 -0.1702945 #> 15 -1.7028228 0.009010785 1.1374408 0.3649289 #> 16 -2.0693878 0.004691380 1.2972973 0.9459459 #> 17 -2.4761000 -0.004340221 1.4062500 1.5312500 #> 18 -2.9088542 -0.018379169 1.4723926 2.0920245 #> 19 -3.3561547 -0.037201674 1.5047022 2.6112853 #> 20 -3.8091335 -0.060260433 1.5115465 3.0811756 #> 21 -4.2612484 -0.086858773 1.5000000 3.5000000 llikT(x, 15, 0, 1, full=TRUE) #> fx dDf dMean dSd #> 1 -4.6956220 -0.0338931511 -2.0000000 5.0000000 #> 2 -4.1042965 -0.0225073150 -1.9380888 4.2328398 #> 3 -3.5354158 -0.0134033865 -1.8497110 3.4393064 #> 4 -2.9974985 -0.0065857823 -1.7310665 2.6352396 #> 5 -2.5001272 -0.0019378861 -1.5789474 1.8421053 #> 6 -2.0536885 0.0007929097 -1.3913043 1.0869565 #> 7 -1.6689304 0.0019903977 -1.1678832 0.4014599 #> 8 -1.3563325 0.0021369166 -0.9108159 -0.1802657 #> 9 -1.1253251 0.0017504002 -0.6250000 -0.6250000 #> 10 -0.9834495 0.0012985422 -0.3180915 -0.9045726 #> 11 -0.9355929 0.0011086635 0.0000000 -1.0000000 #> 12 -0.9834495 0.0012985422 0.3180915 -0.9045726 #> 13 -1.1253251 0.0017504002 0.6250000 -0.6250000 #> 14 -1.3563325 0.0021369166 0.9108159 -0.1802657 #> 15 -1.6689304 0.0019903977 1.1678832 0.4014599 #> 16 -2.0536885 0.0007929097 1.3913043 1.0869565 #> 17 -2.5001272 -0.0019378861 1.5789474 1.8421053 #> 18 -2.9974985 -0.0065857823 1.7310665 2.6352396 #> 19 -3.5354158 -0.0134033865 1.8497110 3.4393064 #> 20 -4.1042965 -0.0225073150 1.9380888 4.2328398 #> 21 -4.6956220 -0.0338931511 2.0000000 5.0000000 et <- et(-3, 3, length.out=10) et$nu <- 7 et$mean <- 0 et$sd <- 1 model <- function() { model({ fx <- llikT(time, nu, mean, sd) dDf <- llikTDdf(time, nu, mean, sd) dMean <- llikTDmean(time, nu, mean, sd) dSd <- llikTDsd(time, nu, mean, sd) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 8 #> time fx dDf dMean dSd nu mean sd #> #> 1 -3 -4.26 -0.0869 -1.5 3.5 7 0 1 #> 2 -2.33 -3.26 -0.0326 -1.5 2.5 7 0 1 #> 3 -1.67 -2.29 0.000289 -1.36 1.27 7 0 1 #> 4 -1 -1.49 0.00971 -1 0 7 0 1 #> 5 -0.333 -1.02 0.00611 -0.375 -0.875 7 0 1 #> 6 0.333 -1.02 0.00611 0.375 -0.875 7 0 1 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Unif distribution — llikUnif","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"log likelihood derivatives Unif distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"","code":"llikUnif(x, alpha, beta, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"x variable distributed uniform distribution alpha lower limit uniform distribution beta upper limit distribution full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"rxode2() model, can use llikUnif() use x rate arguments. can also get derivative alpha beta llikUnifDalpha() llikUnifDbeta().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikUnif.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Unif distribution — llikUnif","text":"","code":"# \\donttest{ llikUnif(1, -2, 2) #> fx dAlpha dBeta #> 1 -1.386294 0.25 -0.25 et <- et(seq(1,1, length.out=4)) et$alpha <- -2 et$beta <- 2 model <- function() { model({ fx <- llikUnif(time, alpha, beta) dAlpha<- llikUnifDalpha(time, alpha, beta) dBeta <- llikUnifDbeta(time, alpha, beta) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 4 × 6 #> time fx dAlpha dBeta alpha beta #> #> 1 1 -1.39 0.25 -0.25 -2 2 #> 2 1 -1.39 0.25 -0.25 -2 2 #> 3 1 -1.39 0.25 -0.25 -2 2 #> 4 1 -1.39 0.25 -0.25 -2 2 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":null,"dir":"Reference","previous_headings":"","what":"log likelihood and derivatives for Weibull distribution — llikWeibull","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"log likelihood derivatives Weibull distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"","code":"llikWeibull(x, shape, scale, full = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"x variable distributed Weibull distribution shape, scale shape scale parameters, latter defaulting 1. full Add data frame showing x, mean, sd well fx derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"data frame fx log pdf value dProb derivatives respect prob parameters observation time-point","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"rxode2() model, can use llikWeibull() use x rate arguments. can also get derivative shape scale llikWeibullDshape() llikWeibullDscale().","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/llikWeibull.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"log likelihood and derivatives for Weibull distribution — llikWeibull","text":"","code":"# \\donttest{ llikWeibull(1, 1, 10) #> fx dShape dScale #> 1 -2.402585 -1.072327 -0.09 # rxode2 can use this too: et <- et(seq(0.001, 1, length.out=10)) et$shape <- 1 et$scale <- 10 model <- function() { model({ fx <- llikWeibull(time, shape, scale) dShape<- llikWeibullDshape(time, shape, scale) dScale <- llikWeibullDscale(time, shape, scale) }) } rxSolve(model, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 6 #> time fx dShape dScale shape scale #> #> 1 0.001 -2.30 -8.21 -0.100 1 10 #> 2 0.112 -2.31 -3.44 -0.0989 1 10 #> 3 0.223 -2.32 -2.72 -0.0978 1 10 #> 4 0.334 -2.34 -2.29 -0.0967 1 10 #> 5 0.445 -2.35 -1.97 -0.0956 1 10 #> 6 0.556 -2.36 -1.73 -0.0944 1 10 #> # ℹ 4 more rows # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":null,"dir":"Reference","previous_headings":"","what":"logit and inverse logit (expit) functions — logit","title":"logit and inverse logit (expit) functions — logit","text":"logit inverse logit (expit) functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"logit and inverse logit (expit) functions — logit","text":"","code":"logit(x, low = 0, high = 1) expit(alpha, low = 0, high = 1) logitNormInfo(mean = 0, sd = 1, low = 0, high = 1, abs.tol = 1e-06, ...) probitNormInfo(mean = 0, sd = 1, low = 0, high = 1, abs.tol = 1e-06, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"logit and inverse logit (expit) functions — logit","text":"x Input value(s) range [low,high] translate -Inf Inf low Lowest value range high Highest value range alpha Infinite value(s) translate range [low, high] mean logit-scale mean sd logit-scale standard deviation abs.tol absolute accuracy requested. ... parameters passed integrate()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"logit and inverse logit (expit) functions — logit","text":"values logit expit","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"logit and inverse logit (expit) functions — logit","text":"logit given : logit(p) = -log(1/p-1) : p = x-low/high-low expit given : expit(p, low, high) = (high-low)/(1+exp(-alpha)) + low logitNormInfo() gives mean, variance coefficient variability untransformed scale.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/logit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"logit and inverse logit (expit) functions — logit","text":"","code":"logit(0.25) #> [1] -1.098612 expit(-1.09) #> [1] 0.2516183 logitNormInfo(logit(0.25), sd = 0.1) #> mean var cv #> 0.2504672899 0.0003515538 0.0748591440 logitNormInfo(logit(1, 0, 10), sd = 1, low = 0, high = 10) #> mean var cv #> 1.3386966 1.2662276 0.8405697"},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":null,"dir":"Reference","previous_headings":"","what":"lowergamma: upper incomplete gamma function — lowergamma","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"tgamma_lower boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"","code":"lowergamma(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"lowergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"lowergamma function given : $$lowergamma(, z) = \\int_{0}^{z}t^{-1}\\cdot e^{-t} dt$$","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/lowergamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"lowergamma: upper incomplete gamma function — lowergamma","text":"","code":"lowergamma(1, 3) #> [1] 0.9502129 lowergamma(1:3, 3) #> [1] 0.9502129 0.8008517 1.1536198 lowergamma(1, 1:3) #> [1] 0.6321206 0.8646647 0.9502129"},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"generic function meanProbs produces expected confidence bands either t distribution normal sampling distribution. uses qnorm() qt() mean standard deviation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"","code":"meanProbs(x, ...) # S3 method for default meanProbs( x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE, useT = TRUE, onlyProbs = TRUE, pred = FALSE, n = 0L, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"x numeric vector whose mean probability based confidence values wanted, NA NaN values allowed numeric vectors unless ‘na.rm’ ‘TRUE’. ... Arguments passed default method, allows many different methods applied. probs numeric vector probabilities values interval 0 1 . na.rm logical; true, NA NaN's removed x quantiles computed. names logical; true, result names attribute. useT logical; true, use t-distribution calculate confidence-based estimates. false use normal distribution calculate confidence based estimates. onlyProbs logical; true, return probability based confidence interval estimates, otherwise return pred logical; true use prediction interval instead confidence interval n integer/integerish; n used calculate prediction confidence interval. n=0 (default) use number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"default return probabilities names (named) points expected distribution located given sampling mean standard deviation. onlyProbs=FALSE prepend mean, variance, standard deviation, minimum, maximum number non-NA observations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"single probability, p, uses either: mean + qt(p, df=n)*sd/sqrt(n) mean + qnorm(p)*sd/sqrt(n) smallest observation corresponds probability 0 largest probability 1 mean corresponds 0.5. mean standard deviation sample calculated based Welford's method single pass. meant perform way quantile() can drop replacement code using quantile() using distributional assumptions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/meanProbs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate expected confidence bands or prediction intreval with normal or t sampling distribution — meanProbs","text":"","code":"quantile(x<- rnorm(1001)) #> 0% 25% 50% 75% 100% #> -3.403225585 -0.642325341 -0.001837139 0.656154718 2.780013343 meanProbs(x) #> 0% 25% 50% 75% 100% #> -3.403225585 -0.023025596 -0.002431956 0.018161685 2.780013343 # Can get some extra statistics if you request onlyProbs=FALSE meanProbs(x, onlyProbs=FALSE) #> mean var sd min max #> -2.431956e-03 9.324674e-01 9.656435e-01 -3.403226e+00 2.780013e+00 #> n 0% 25% 50% 75% #> 1.001000e+03 -3.403226e+00 -2.302560e-02 -2.431956e-03 1.816168e-02 #> 100% #> 2.780013e+00 x[2] <- NA_real_ meanProbs(x, onlyProbs=FALSE) #> mean var sd min max n 0% 25% 50% 75% 100% #> NA NA NA NA NA NA NA NA NA NA NA quantile(x<- rnorm(42)) #> 0% 25% 50% 75% 100% #> -2.1838542 -0.8532155 0.1476959 0.8088171 1.5847511 meanProbs(x) #> 0% 25% 50% 75% 100% #> -2.18385418 -0.18647291 -0.07532481 0.03582330 1.58475107 meanProbs(x, useT=FALSE) #> 0% 25% 50% 75% 100% #> -2.18385418 -0.18548788 -0.07532481 0.03483827 1.58475107"},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign the model block in the rxode2 related object — model<-","title":"Assign the model block in the rxode2 related object — model<-","text":"Assign model block rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign the model block in the rxode2 related object — model<-","text":"","code":"model(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign the model block in the rxode2 related object — model<-","text":"x rxode2 related object envir Environment assignment occurs value Value object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign the model block in the rxode2 related object — model<-","text":"rxode2 related object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model-set.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign the model block in the rxode2 related object — model<-","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":null,"dir":"Reference","previous_headings":"","what":"Model block for rxode2/nlmixr models — model.function","title":"Model block for rxode2/nlmixr models — model.function","text":"Model block rxode2/nlmixr models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Model block for rxode2/nlmixr models — model.function","text":"","code":"# S3 method for `function` model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxUi model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxode2 model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for rxModelVars model( x, ..., append = NULL, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) model( x, ..., append = FALSE, auto = getOption(\"rxode2.autoVarPiping\", TRUE), cov = NULL, envir = parent.frame() ) # S3 method for default model(x, ..., append = FALSE, cov = NULL, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Model block for rxode2/nlmixr models — model.function","text":"x model expression ... arguments append boolean determine lines appended piping. possible values : TRUE lines appended model instead replaced FALSE lines replaced model (default) NA lines pre-pended model instead replaced lhs expression, append lines last observed line expression lhs auto boolean tells piping automatically selects parameters characterized population parameter, subject variability, covariate. TRUE automatic selection occurs. FALSE automatic selection turned everything added covariate (can promoted parameter ini statement). default TRUE, can changed options(rxode2.autoVarPiping=FALSE). cov character vector variables assumed covariates. override automatic promotion population parameter estimate (eta) envir environment unevaluated model expressions evaluated. May also NULL, list, data frame, pairlist integer specified sys.call.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Model block for rxode2/nlmixr models — model.function","text":"Model block ini information included. ini must called model block","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Model block for rxode2/nlmixr models — model.function","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract model lines from a rxui model — modelExtract","title":"Extract model lines from a rxui model — modelExtract","text":"Extract model lines rxui model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract model lines from a rxui model — modelExtract","text":"","code":"modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for `function` modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxUi modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxode2 modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for rxModelVars modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() ) # S3 method for default modelExtract( x, ..., expression = FALSE, endpoint = FALSE, lines = FALSE, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract model lines from a rxui model — modelExtract","text":"x model extract lines ... variables extract. missing, extract entire model (conditioned endpoint option ) expression return expressions (TRUE) strings (FALSE) endpoint include endpoint. can : NA -- Missing means include endpoint non-endpoint lines TRUE -- include endpoint lines FALSE -- include non-endpoint lines lines boolean. TRUE add lines attribute output value ie attr(, \"lines\") envir Environment evaluating variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract model lines from a rxui model — modelExtract","text":"expressions strings extracted lines. Note duplicated lhs expression line, return lines","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract model lines from a rxui model — modelExtract","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/modelExtract.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract model lines from a rxui model — modelExtract","text":"","code":"one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } f <- one.compartment() modelExtract(f, cp) #> [1] \"cp <- center/v\" modelExtract(one.compartment, d/dt(depot)) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> [1] \"d/dt(depot) <- -ka * depot\" # from variable var <- \"d/dt(depot)\" modelExtract(one.compartment, var) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> [1] \"d/dt(depot) <- -ka * depot\" modelExtract(f, endpoint=NA, lines=TRUE, expression=TRUE) #> [[1]] #> ka <- exp(tka + eta.ka) #> #> [[2]] #> cl <- exp(tcl + eta.cl) #> #> [[3]] #> v <- exp(tv + eta.v) #> #> [[4]] #> d/dt(depot) <- -ka * depot #> #> [[5]] #> d/dt(center) <- ka * depot - cl/v * center #> #> [[6]] #> cp <- center/v #> #> [[7]] #> cp ~ add(add.sd) #> #> attr(,\"lines\") #> [1] 1 2 3 4 5 6 7"},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":null,"dir":"Reference","previous_headings":"","what":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"NULL given method, choices returned named vector.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"","code":"odeMethodToInt(method = c(\"liblsoda\", \"lsoda\", \"dop853\", \"indLin\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"method method solving ODEs. Currently supports: \"liblsoda\" thread safe lsoda. supports parallel thread-based solving, ignores user Jacobian specification. \"lsoda\" -- LSODA solver. support parallel thread-based solving, allows user Jacobian specification. \"dop853\" -- DOP853 solver. support parallel thread-based solving user Jacobian specification \"indLin\" -- Solving inductive linearization. rxode2 dll must setup specially use solving routine.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/odeMethodToInt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Conversion between character and integer ODE integration methods for rxode2 — odeMethodToInt","text":"integer method (unless input NULL, case, see details)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot rxode2 objects — plot.rxSolve","title":"Plot rxode2 objects — plot.rxSolve","text":"Plot rxode2 objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot rxode2 objects — plot.rxSolve","text":"","code":"# S3 method for rxSolve plot(x, y, ..., log = \"\", xlab = \"Time\", ylab = \"\") # S3 method for rxSolveConfint1 plot(x, y, ..., xlab = \"Time\", ylab = \"\", log = \"\") # S3 method for rxSolveConfint2 plot(x, y, ..., xlab = \"Time\", ylab = \"\", log = \"\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot rxode2 objects — plot.rxSolve","text":"x rxode2 object plot y Compartments left-hand-side values plot either bare name character vector ... Ignored log \"\" (neither x y), \"x\", \"y\", \"xy\" (\"yx\") log-scale? xlab, ylab x y axis labels","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plot.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot rxode2 objects — plot.rxSolve","text":"ggplot2 object","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Update Solved object with '+' — +.rxSolve","title":"Update Solved object with '+' — +.rxSolve","text":"Update Solved object '+'","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update Solved object with '+' — +.rxSolve","text":"","code":"# S3 method for rxSolve +(solved, new)"},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update Solved object with '+' — +.rxSolve","text":"solved Solved object new New information added table.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update Solved object with '+' — +.rxSolve","text":"new solved object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/plus-.rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Update Solved object with '+' — +.rxSolve","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":null,"dir":"Reference","previous_headings":"","what":"Print the rxCoef object — print.rxCoef","title":"Print the rxCoef object — print.rxCoef","text":"prints user supplied arguments rxCoef object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print the rxCoef object — print.rxCoef","text":"","code":"# S3 method for rxCoef print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print the rxCoef object — print.rxCoef","text":"x rxCoef object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print the rxCoef object — print.rxCoef","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxCoef.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print the rxCoef object — print.rxCoef","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Print rxDll object — print.rxDll","title":"Print rxDll object — print.rxDll","text":"tells rxDll loaded, ready /deleted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print rxDll object — print.rxDll","text":"","code":"# S3 method for rxDll print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print rxDll object — print.rxDll","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print rxDll object — print.rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Print information about the rxode2 object. — print.rxode2","title":"Print information about the rxode2 object. — print.rxode2","text":"prints model name status able solved","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print information about the rxode2 object. — print.rxode2","text":"","code":"# S3 method for rxode2 print(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print information about the rxode2 object. — print.rxode2","text":"x rxode2 object ... Ignored parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print information about the rxode2 object. — print.rxode2","text":"original object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/print.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print information about the rxode2 object. — print.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":null,"dir":"Reference","previous_headings":"","what":"probit and inverse probit functions — probit","title":"probit and inverse probit functions — probit","text":"probit inverse probit functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"probit and inverse probit functions — probit","text":"","code":"probit(x, low = 0, high = 1) probitInv(x, low = 0, high = 1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"probit and inverse probit functions — probit","text":"x Input value(s) range [low,high] translate -Inf Inf low Lowest value range high Highest value range","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"probit and inverse probit functions — probit","text":"values probit, probitInv probitNormInfo","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/probit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"probit and inverse probit functions — probit","text":"","code":"probit(0.25) #> [1] -0.6744898 probitInv(-0.674) #> [1] 0.2501557 probitNormInfo(probit(0.25), sd = 0.1) #> mean var cv #> 0.25106491 0.00100658 0.12636827 probitNormInfo(probit(1, 0, 10), sd = 1, low = 0, high = 10) #> mean var cv #> 1.824166 4.307824 1.137796"},{"path":"https://nlmixr2.github.io/rxode2/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"Objects exported from other packages — reexports","title":"Objects exported from other packages — reexports","text":"objects imported packages. Follow links see documentation. ggplot2 aes, expand_limits, facet_wrap, geom_line, ggplot, label_both, label_context, label_context, label_value, label_wrap_gen, scale_type, scale_x_continuous, scale_x_date, scale_x_discrete, scale_y_continuous, scale_y_date, scale_y_discrete, waiver, xlab, ylab lotri lotri magrittr %>% rxode2et .clearPipe, .collectWarnings, .s3register, add.dosing, add.sampling, .et, .rxEvid, .rxRateDur, et, etExpand, etRbind, etRep, etSeq, eventTable, rxCbindStudyIndividual, rxEtDispatchSolve, rxEvid, rxRateDur, rxReq, rxStack, toTrialDuration rxode2parse .getLastIdLvl, forderForceBase, rxDerived, rxSetIni0 rxode2random .cbindOme, .expandPars, .vecDf, cvPost, invWR1d, phi, rinvchisq, rLKJ1, rxGetSeed, rxGetSeed, rxRmvn, rxSeedEng, rxSetSeed, rxSetSeed, rxSetSeed, rxWithPreserveSeed, rxWithSeed, rxWithSeed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/reexports.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Objects exported from other packages — reexports","text":"Inherited parent routine","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":null,"dir":"Reference","previous_headings":"","what":"Allow unloading of dlls — rxAllowUnload","title":"Allow unloading of dlls — rxAllowUnload","text":"Allow unloading dlls","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Allow unloading of dlls — rxAllowUnload","text":"","code":"rxAllowUnload(allow)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Allow unloading of dlls — rxAllowUnload","text":"allow boolean indicating garbage collection unload rxode2 dlls.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Allow unloading of dlls — rxAllowUnload","text":"Boolean allow; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Allow unloading of dlls — rxAllowUnload","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAllowUnload.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Allow unloading of dlls — rxAllowUnload","text":"","code":"# Garbage collection will not unload un-used rxode2 dlls rxAllowUnload(FALSE); #> [1] FALSE # Garbage collection will unload unused rxode2 dlls rxAllowUnload(TRUE); #> [1] TRUE"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Append two rxui models together — rxAppendModel","title":"Append two rxui models together — rxAppendModel","text":"Append two rxui models together","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Append two rxui models together — rxAppendModel","text":"","code":"rxAppendModel(..., common = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Append two rxui models together — rxAppendModel","text":"... models append together common boolean determines need common value bind","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Append two rxui models together — rxAppendModel","text":"New model models appended together","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Append two rxui models together — rxAppendModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAppendModel.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Append two rxui models together — rxAppendModel","text":"","code":"# \\donttest{ ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl tv <- exp(3.45); # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) <- -ka * depot d/dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.sd) }) } idr <- function() { ini({ tkin <- log(1) tkout <- log(1) tic50 <- log(10) gamma <- fix(1) idr.sd <- 1 }) model({ kin <- exp(tkin) kout <- exp(tkout) ic50 <- exp(tic50) d/dt(eff) <- kin - kout*(1-ceff^gamma/(ic50^gamma+ceff^gamma)) eff ~ add(idr.sd) }) } rxAppendModel(ocmt %>% model(ceff=cp,append=TRUE), idr) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> #> #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd tkin tkout tic50 gamma #> 1.568312 2.718282 31.500392 0.700000 0.000000 0.000000 2.302585 1.000000 #> idr.sd #> 1.000000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> 3 3 eff #> ── Multiple Endpoint Model ($multipleEndpoint): ── #> variable cmt dvid* #> 1 cp ~ … cmt='cp' or cmt=4 dvid='cp' or dvid=1 #> 2 eff ~ … cmt='eff' or cmt=3 dvid='eff' or dvid=2 #> * If dvids are outside this range, all dvids are re-numered sequentially, ie 1,7, 10 becomes 1,2,3 etc #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> tkin <- 0 #> tkout <- 0 #> tic50 <- 2.30258509299405 #> gamma <- fix(1) #> idr.sd <- c(0, 1) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.sd) #> ceff <- cp #> kin <- exp(tkin) #> kout <- exp(tkout) #> ic50 <- exp(tic50) #> d/dt(eff) <- kin - kout * (1 - ceff^gamma/(ic50^gamma + #> ceff^gamma)) #> eff ~ add(idr.sd) #> }) #> } # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Control Variable — rxAssignControlValue","title":"Assign Control Variable — rxAssignControlValue","text":"Assign Control Variable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Control Variable — rxAssignControlValue","text":"","code":"rxAssignControlValue(ui, option, value)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Control Variable — rxAssignControlValue","text":"ui rxode2 ui function option Option name control modify value Value control modify","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Control Variable — rxAssignControlValue","text":"Nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignControlValue.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign Control Variable — rxAssignControlValue","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign pointer based on model variables — rxAssignPtr","title":"Assign pointer based on model variables — rxAssignPtr","text":"Assign pointer based model variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign pointer based on model variables — rxAssignPtr","text":"","code":"rxAssignPtr(object = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign pointer based on model variables — rxAssignPtr","text":"object rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxAssignPtr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign pointer based on model variables — rxAssignPtr","text":"nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a logical matrix for block matrixes. — rxBlockZeros","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"Creates logical matrix block matrixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"","code":"rxBlockZeros(mat, i)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"mat Matrix Row/column block matrix setup.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxBlockZeros.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a logical matrix for block matrixes. — rxBlockZeros","text":"logical matrix returning elements zero.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the C file associated with the rxode2 object — rxC","title":"Return the C file associated with the rxode2 object — rxC","text":"return C code generating rxode2 DLL.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the C file associated with the rxode2 object — rxC","text":"","code":"rxC(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the C file associated with the rxode2 object — rxC","text":"obj rxode2 family objects character string model specification location file model specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the C file associated with the rxode2 object — rxC","text":"path library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxC.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the C file associated with the rxode2 object — rxC","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":null,"dir":"Reference","previous_headings":"","what":"Use cat when rxode2.verbose is TRUE — rxCat","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"Use cat rxode2.verbose TRUE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"","code":"rxCat(a, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"... Parameters sent cat","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Use cat when rxode2.verbose is TRUE — rxCat","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":null,"dir":"Reference","previous_headings":"","what":"rxChain Chain or add item to solved system of equations — rxChain","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"Add item solved system equations","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"","code":"rxChain(obj1, obj2) # S3 method for solveRxDll +(obj1, obj2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"obj1 Solved object. obj2 New object added/piped/chained solved object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"newObject event table, return new solved object new event table.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxChain Chain or add item to solved system of equations — rxChain","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":null,"dir":"Reference","previous_headings":"","what":"Second command in chaining commands — rxChain2","title":"Second command in chaining commands — rxChain2","text":"s3 method called internally + \\%>\\% operators.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Second command in chaining commands — rxChain2","text":"","code":"rxChain2(obj, solvedObject) # S3 method for default rxChain2(obj, solvedObject) # S3 method for EventTable rxChain2(obj, solvedObject)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Second command in chaining commands — rxChain2","text":"obj object added/chained/piped solved object solvedObject solved object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Second command in chaining commands — rxChain2","text":"chained operation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxChain2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Second command in chaining commands — rxChain2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":null,"dir":"Reference","previous_headings":"","what":"Cleanup anonymous DLLs by unloading them — rxClean","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"cleans rxode2 loaded DLLs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"","code":"rxClean(wd)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"wd directory cleaned; (DEPRECIATED), longer anything. unloads rxode2 anonymous dlls.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"TRUE successful","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxClean.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cleanup anonymous DLLs by unloading them — rxClean","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"Combine Error Lines create rxode2 expression","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"","code":"rxCombineErrorLines( uiModel, errLines = NULL, prefixLines = NULL, paramsLine = NULL, modelVars = FALSE, cmtLines = TRUE, dvidLine = TRUE, lstExpr = NULL, useIf = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"uiModel UI model errLines Error lines; missing, get error lines rxGetDistributionSimulationLines() prefixLines Prefix lines, param statement paramsLine Params line, present. modelVars Return model vars instead rxode2 statement cmtLines Include trailing cmt lines dvidLine Include trailing dvid() specification lstExpr list expressions model, NULL. NULL defaults model expressions accessible uiModel$lstExpr. useIf Use (CMT == X) endpoints","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"quoted expression can evaluated compiled rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"exported allow functions mangle error lines make types estimation methods (needed)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCombineErrorLines.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine Error Lines and create rxode2 expression — rxCombineErrorLines","text":"","code":"# \\donttest{ one.cmt <- function() { ini({ ## You may label each parameter with a comment tka <- 0.45 # Log Ka tcl <- log(c(0, 2.7, 100)) # Log Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- 3.45; label(\"log V\") ## the label(\"Label name\") works with all models eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) }) } f <- rxode2(one.cmt) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' # You can get the simulation model easily by rxCombineErrorLines(f) #> rxode2({ #> params(tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v) #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ linCmt() #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (add.sd)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.rxLinCmt, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> cmt(rxLinCmt) #> dvid(1) #> }) # You can then get the compiled model by simply evaluting the model: r <- eval(rxCombineErrorLines(f)) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # This also works with multile endpoint models: pk.turnover.emax <- function() { ini({ tktr <- log(1) tka <- log(1) tcl <- log(0.1) tv <- log(10) ## eta.ktr ~ 1 eta.ka ~ 1 eta.cl ~ 2 eta.v ~ 1 prop.err <- 0.1 pkadd.err <- 0.1 ## temax <- logit(0.8) tec50 <- log(0.5) tkout <- log(0.05) te0 <- log(100) ## eta.emax ~ .5 eta.ec50 ~ .5 eta.kout ~ .5 eta.e0 ~ .5 ## pdadd.err <- 10 }) model({ ktr <- exp(tktr + eta.ktr) ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) ## emax=expit(temax+eta.emax) ec50 = exp(tec50 + eta.ec50) kout = exp(tkout + eta.kout) e0 = exp(te0 + eta.e0) ## DCP = center/v PD=1-emax*DCP/(ec50+DCP) ## effect(0) = e0 kin = e0*kout ## d/dt(depot) = -ktr * depot d/dt(gut) = ktr * depot -ka * gut d/dt(center) = ka * gut - cl / v * center d/dt(effect) = kin*PD -kout*effect ## cp = center / v cp ~ prop(prop.err) + add(pkadd.err) effect ~ add(pdadd.err) }) } f <- rxode2(pk.turnover.emax) #> #> rxCombineErrorLines(f) #> rxode2({ #> params(tktr, tka, tcl, tv, prop.err, pkadd.err, temax, tec50, #> tkout, te0, pdadd.err, eta.ktr, eta.ka, eta.cl, eta.v, #> eta.emax, eta.ec50, eta.kout, eta.e0) #> ktr <- exp(tktr + eta.ktr) #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> emax = expit(temax + eta.emax) #> ec50 = exp(tec50 + eta.ec50) #> kout = exp(tkout + eta.kout) #> e0 = exp(te0 + eta.e0) #> DCP = center/v #> PD = 1 - emax * DCP/(ec50 + DCP) #> effect(0) = e0 #> kin = e0 * kout #> d/dt(depot) = -ktr * depot #> d/dt(gut) = ktr * depot - ka * gut #> d/dt(center) = ka * gut - cl/v * center #> d/dt(effect) = kin * PD - kout * effect #> cp = center/v #> if (CMT == 5) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ cp #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (pkadd.err)^2 + (rx_pred_f_)^2 * (prop.err)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.cp, rx_lambda_, #> rx_yj_, rx_low_, rx_hi_) #> } #> if (CMT == 4) { #> rx_yj_ ~ 2 #> rx_lambda_ ~ 1 #> rx_low_ ~ 0 #> rx_hi_ ~ 1 #> rx_pred_f_ ~ effect #> rx_pred_ ~ rx_pred_f_ #> rx_r_ ~ (pdadd.err)^2 #> ipredSim <- rxTBSi(rx_pred_, rx_lambda_, rx_yj_, rx_low_, #> rx_hi_) #> sim <- rxTBSi(rx_pred_ + sqrt(rx_r_) * rxerr.effect, #> rx_lambda_, rx_yj_, rx_low_, rx_hi_) #> } #> cmt(cp) #> dvid(5, 4) #> }) # Note that in the parsed form, you can also get the compiled rxode2 # model with $simulationModel f$simulationModel #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> rxode2 2.1.3 model named rx_8d950c43531f6895b2b69a6751925bb9 model (✔ ready). #> $state: depot, gut, center, effect #> $stateExtra: cp #> $params: tktr, tka, tcl, tv, prop.err, pkadd.err, temax, tec50, tkout, te0, pdadd.err, eta.ktr, eta.ka, eta.cl, eta.v, eta.emax, eta.ec50, eta.kout, eta.e0, CMT, rxerr.cp, rxerr.effect #> $lhs: ktr, ka, cl, v, emax, ec50, kout, e0, DCP, PD, kin, cp, ipredSim, sim # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":null,"dir":"Reference","previous_headings":"","what":"Compile a model if needed — rxCompile","title":"Compile a model if needed — rxCompile","text":"compilation workhorse creating rxode2 model DLL files.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compile a model if needed — rxCompile","text":"","code":"rxCompile( model, dir, prefix, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for rxModelVars rxCompile( model, dir = NULL, prefix = NULL, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for character rxCompile( model, dir = NULL, prefix = NULL, force = FALSE, modName = NULL, package = NULL, ... ) # S3 method for rxDll rxCompile(model, ...) # S3 method for rxode2 rxCompile(model, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compile a model if needed — rxCompile","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . dir model directory C file stored compiling. prefix string indicating prefix use C based functions. missing, calculated based file name, md5 parsed model. force boolean stating (re)compile forced rxode2 detects models already generated. modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. package Package name pre-compiled binaries. ... arguments sent rxTrans() function.","code":"If unspecified, the C code is stored in a temporary directory, then the model is compiled and moved to the current directory. Afterwards the C code is removed. If specified, the C code is stored in the specified directory and then compiled in that directory. The C code is not removed after the DLL is created in the same directory. This can be useful to debug the c-code outputs."},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compile a model if needed — rxCompile","text":"rxDll object following components dll DLL path model model specification .c function call C code correct context DLL using .C() function. .call function call C code correct context DLL using .Call() function. args list arguments used create rxDll object.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCompile.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compile a model if needed — rxCompile","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":null,"dir":"Reference","previous_headings":"","what":"Current Condition for rxode2 object — rxCondition","title":"Current Condition for rxode2 object — rxCondition","text":"Current Condition rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Current Condition for rxode2 object — rxCondition","text":"","code":"rxCondition(obj, condition = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Current Condition for rxode2 object — rxCondition","text":"obj rxode2 object condition specified one conditions rxode2 object (determined rxExpandIfElse()), assign rxode2 current condition parameter. condition one known condition, condition set NULL, implying conditioning currently used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Current Condition for rxode2 object — rxCondition","text":"Current condition rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCondition.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Current Condition for rxode2 object — rxCondition","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":null,"dir":"Reference","previous_headings":"","what":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"assumes normal ODE equations first equations ODE expanded forward sensitivities type sensitivity (like adjoint)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"","code":"rxControlUpdateSens(rxControl, sensCmt = NULL, ncmt = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"rxControl Input list rxControl type list sensCmt Number sensitivity compartments ncmt Number compartments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"Updated rxControl $atol, $rtol, $ssAtol $ssRtol updated different sensitivities normal ODEs (first) different sensitivity larger compartments (sensitivities).","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxControlUpdateSens.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"This updates the tolerances based on the sensitivity equations — rxControlUpdateSens","text":"","code":"tmp <- rxControl() tmp2 <- rxControlUpdateSens(tmp, 3, 6) tmp2$atol #> [1] 1e-08 1e-08 1e-08 1e-08 1e-08 1e-08 tmp2$rtol #> [1] 1e-06 1e-06 1e-06 1e-06 1e-06 1e-06 tmp2$ssAtol #> [1] 1e-08 1e-08 1e-08 1e-08 1e-08 1e-08 tmp2$ssRtol #> [1] 1e-06 1e-06 1e-06 1e-06 1e-06 1e-06"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":null,"dir":"Reference","previous_headings":"","what":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"run, R_user_dir rxode2's cache present, create cache","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"","code":"rxCreateCache()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxCreateCache.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This will create the cache directory for rxode2 to save between sessions — rxCreateCache","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":null,"dir":"Reference","previous_headings":"","what":"Add to rxode2's derivative tables — rxD","title":"Add to rxode2's derivative tables — rxD","text":"Add rxode2's derivative tables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add to rxode2's derivative tables — rxD","text":"","code":"rxD(name, derivatives)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add to rxode2's derivative tables — rxD","text":"name Function Name derivatives list functions. function takes number arguments original function. first function construct derivative respect first argument; second function construct derivitive respect second argument, .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add to rxode2's derivative tables — rxD","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add to rxode2's derivative tables — rxD","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxD.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add to rxode2's derivative tables — rxD","text":"","code":"## Add an arbitrary list of derivative functions ## In this case the fun(x,y) is assumed to be 0.5*x^2+0.5*y^2 rxD(\"fun\", list( function(x, y) { return(x) }, function(x, y) { return(y) } ))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete the DLL for the model — rxDelete","title":"Delete the DLL for the model — rxDelete","text":"function deletes DLL, delete model information object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete the DLL for the model — rxDelete","text":"","code":"rxDelete(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete the DLL for the model — rxDelete","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete the DLL for the model — rxDelete","text":"boolean stating operation successful.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDelete.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Delete the DLL for the model — rxDelete","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Demote the error type — rxDemoteAddErr","title":"Demote the error type — rxDemoteAddErr","text":"Demote error type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Demote the error type — rxDemoteAddErr","text":"","code":"rxDemoteAddErr(errType)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Demote the error type — rxDemoteAddErr","text":"errType Error type factor","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Demote the error type — rxDemoteAddErr","text":"Demoted Error Type","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Demote the error type — rxDemoteAddErr","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDemoteAddErr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Demote the error type — rxDemoteAddErr","text":"","code":"rxErrTypeCombine(\"add\") %>% rxErrTypeCombine(\"prop\") #> $transform #> [1] untransformed #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add + prop #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] untransformed #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" # This removes the internal additive error rxErrTypeCombine(\"add\") %>% rxErrTypeCombine(\"prop\") %>% rxDemoteAddErr() #> $transform #> [1] untransformed #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] prop #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] untransformed #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" # This is used for logitNorm(NA), the additive portion is stripped"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":null,"dir":"Reference","previous_headings":"","what":"Jacobian and parameter derivatives — rxDfdy","title":"Jacobian and parameter derivatives — rxDfdy","text":"Return Jacobain parameter derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Jacobian and parameter derivatives — rxDfdy","text":"","code":"rxDfdy(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Jacobian and parameter derivatives — rxDfdy","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Jacobian and parameter derivatives — rxDfdy","text":"list jacobian parameters defined rxode2 object.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDfdy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Jacobian and parameter derivatives — rxDfdy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the DLL associated with the rxode2 object — rxDll","title":"Return the DLL associated with the rxode2 object — rxDll","text":"return dynamic load library shared object used run C code rxode2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the DLL associated with the rxode2 object — rxDll","text":"","code":"rxDll(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the DLL associated with the rxode2 object — rxDll","text":"obj rxode2 family objects character string model specification location file model specification.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the DLL associated with the rxode2 object — rxDll","text":"path library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the DLL associated with the rxode2 object — rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":null,"dir":"Reference","previous_headings":"","what":"Load rxode2 object — rxDynLoad","title":"Load rxode2 object — rxDynLoad","text":"Load rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load rxode2 object — rxDynLoad","text":"","code":"rxDynLoad(obj) rxLoad(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load rxode2 object — rxDynLoad","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load rxode2 object — rxDynLoad","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynLoad.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Load rxode2 object — rxDynLoad","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":null,"dir":"Reference","previous_headings":"","what":"Unload rxode2 object — rxDynUnload","title":"Unload rxode2 object — rxDynUnload","text":"Unload rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unload rxode2 object — rxDynUnload","text":"","code":"rxDynUnload(obj) rxUnload(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Unload rxode2 object — rxDynUnload","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unload rxode2 object — rxDynUnload","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxDynUnload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Unload rxode2 object — rxDynUnload","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine transformations and error structures — rxErrTypeCombine","title":"Combine transformations and error structures — rxErrTypeCombine","text":"Combine error information figure transformation applied current endpoint","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine transformations and error structures — rxErrTypeCombine","text":"","code":"rxErrTypeCombine(oldErrType, newErrType)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine transformations and error structures — rxErrTypeCombine","text":"oldErrType old transformation, default zero representing prior transformation. parameter first allow piping. parameter addTransform missing oldErrType character value, functions swaps oldErrType addTransform assigns oldErrType zero assuming prior distribution. newErrType new distribution \"added\" current transformation. assumes inputs preferred distribution name, determined rxPreferredDistributionName()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine transformations and error structures — rxErrTypeCombine","text":"new transformation factor","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine transformations and error structures — rxErrTypeCombine","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxErrTypeCombine.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine transformations and error structures — rxErrTypeCombine","text":"","code":"rxErrTypeCombine(\"probitNorm\") #> $transform #> [1] probit #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] none #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\" rxErrTypeCombine(\"probitNorm\") %>% rxErrTypeCombine(\"boxCox\") #> $transform #> [1] probit + boxCox #> 10 Levels: boxCox yeoJohnson untransformed lnorm logit ... probit + boxCox #> #> $errType #> [1] add #> Levels: add prop pow add + prop add + pow none #> #> $errTypeF #> [1] none #> Levels: untransformed transformed f none #> #> $addProp #> [1] default #> Levels: combined1 combined2 default #> #> attr(,\"class\") #> [1] \"rxCombinedErrorList\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand d(f)/d(eta) — rxExpandFEta_","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"Expand d(f)/d(eta)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"","code":"rxExpandFEta_(state, neta, pred, isTheta = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"state state expand neta number etas pred type prediction isTheta logical, expansion actually thetas instead etas","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandFEta_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand d(f)/d(eta) — rxExpandFEta_","text":"String symengine expressions evaluate calculate df/deta","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":null,"dir":"Reference","previous_headings":"","what":"Faster expand.grid — rxExpandGrid","title":"Faster expand.grid — rxExpandGrid","text":"support x y characters right now","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Faster expand.grid — rxExpandGrid","text":"","code":"rxExpandGrid(x, y, type = 0L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Faster expand.grid — rxExpandGrid","text":"x first element (must character) y second element (must character) type Internal type=0L traditional expand grid type=1L Jacobian expand grid (adds symbols)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Faster expand.grid — rxExpandGrid","text":"Expand grid","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Faster expand.grid — rxExpandGrid","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Faster expand.grid — rxExpandGrid","text":"","code":"## rxExpandGrid(letters, letters) #> Var1 Var2 #> 1 a a #> 2 b a #> 3 c a #> 4 d a #> 5 e a #> 6 f a #> 7 g a #> 8 h a #> 9 i a #> 10 j a #> 11 k a #> 12 l a #> 13 m a #> 14 n a #> 15 o a #> 16 p a #> 17 q a #> 18 r a #> 19 s a #> 20 t a #> 21 u a #> 22 v a #> 23 w a #> 24 x a #> 25 y a #> 26 z a #> 27 a b #> 28 b b #> 29 c b #> 30 d b #> 31 e b #> 32 f b #> 33 g b #> 34 h b #> 35 i b #> 36 j b #> 37 k b #> 38 l b #> 39 m b #> 40 n b #> 41 o b #> 42 p b #> 43 q b #> 44 r b #> 45 s b #> 46 t b #> 47 u b #> 48 v b #> 49 w b #> 50 x b #> 51 y b #> 52 z b #> 53 a c #> 54 b c #> 55 c c #> 56 d c #> 57 e c #> 58 f c #> 59 g c #> 60 h c #> 61 i c #> 62 j c #> 63 k c #> 64 l c #> 65 m c #> 66 n c #> 67 o c #> 68 p c #> 69 q c #> 70 r c #> 71 s c #> 72 t c #> 73 u c #> 74 v c #> 75 w c #> 76 x c #> 77 y c #> 78 z c #> 79 a d #> 80 b d #> 81 c d #> 82 d d #> 83 e d #> 84 f d #> 85 g d #> 86 h d #> 87 i d #> 88 j d #> 89 k d #> 90 l d #> 91 m d #> 92 n d #> 93 o d #> 94 p d #> 95 q d #> 96 r d #> 97 s d #> 98 t d #> 99 u d #> 100 v d #> 101 w d #> 102 x d #> 103 y d #> 104 z d #> 105 a e #> 106 b e #> 107 c e #> 108 d e #> 109 e e #> 110 f e #> 111 g e #> 112 h e #> 113 i e #> 114 j e #> 115 k e #> 116 l e #> 117 m e #> 118 n e #> 119 o e #> 120 p e #> 121 q e #> 122 r e #> 123 s e #> 124 t e #> 125 u e #> 126 v e #> 127 w e #> 128 x e #> 129 y e #> 130 z e #> 131 a f #> 132 b f #> 133 c f #> 134 d f #> 135 e f #> 136 f f #> 137 g f #> 138 h f #> 139 i f #> 140 j f #> 141 k f #> 142 l f #> 143 m f #> 144 n f #> 145 o f #> 146 p f #> 147 q f #> 148 r f #> 149 s f #> 150 t f #> 151 u f #> 152 v f #> 153 w f #> 154 x f #> 155 y f #> 156 z f #> 157 a g #> 158 b g #> 159 c g #> 160 d g #> 161 e g #> 162 f g #> 163 g g #> 164 h g #> 165 i g #> 166 j g #> 167 k g #> 168 l g #> 169 m g #> 170 n g #> 171 o g #> 172 p g #> 173 q g #> 174 r g #> 175 s g #> 176 t g #> 177 u g #> 178 v g #> 179 w g #> 180 x g #> 181 y g #> 182 z g #> 183 a h #> 184 b h #> 185 c h #> 186 d h #> 187 e h #> 188 f h #> 189 g h #> 190 h h #> 191 i h #> 192 j h #> 193 k h #> 194 l h #> 195 m h #> 196 n h #> 197 o h #> 198 p h #> 199 q h #> 200 r h #> 201 s h #> 202 t h #> 203 u h #> 204 v h #> 205 w h #> 206 x h #> 207 y h #> 208 z h #> 209 a i #> 210 b i #> 211 c i #> 212 d i #> 213 e i #> 214 f i #> 215 g i #> 216 h i #> 217 i i #> 218 j i #> 219 k i #> 220 l i #> 221 m i #> 222 n i #> 223 o i #> 224 p i #> 225 q i #> 226 r i #> 227 s i #> 228 t i #> 229 u i #> 230 v i #> 231 w i #> 232 x i #> 233 y i #> 234 z i #> 235 a j #> 236 b j #> 237 c j #> 238 d j #> 239 e j #> 240 f j #> 241 g j #> 242 h j #> 243 i j #> 244 j j #> 245 k j #> 246 l j #> 247 m j #> 248 n j #> 249 o j #> 250 p j #> 251 q j #> 252 r j #> 253 s j #> 254 t j #> 255 u j #> 256 v j #> 257 w j #> 258 x j #> 259 y j #> 260 z j #> 261 a k #> 262 b k #> 263 c k #> 264 d k #> 265 e k #> 266 f k #> 267 g k #> 268 h k #> 269 i k #> 270 j k #> 271 k k #> 272 l k #> 273 m k #> 274 n k #> 275 o k #> 276 p k #> 277 q k #> 278 r k #> 279 s k #> 280 t k #> 281 u k #> 282 v k #> 283 w k #> 284 x k #> 285 y k #> 286 z k #> 287 a l #> 288 b l #> 289 c l #> 290 d l #> 291 e l #> 292 f l #> 293 g l #> 294 h l #> 295 i l #> 296 j l #> 297 k l #> 298 l l #> 299 m l #> 300 n l #> 301 o l #> 302 p l #> 303 q l #> 304 r l #> 305 s l #> 306 t l #> 307 u l #> 308 v l #> 309 w l #> 310 x l #> 311 y l #> 312 z l #> 313 a m #> 314 b m #> 315 c m #> 316 d m #> 317 e m #> 318 f m #> 319 g m #> 320 h m #> 321 i m #> 322 j m #> 323 k m #> 324 l m #> 325 m m #> 326 n m #> 327 o m #> 328 p m #> 329 q m #> 330 r m #> 331 s m #> 332 t m #> 333 u m #> 334 v m #> 335 w m #> 336 x m #> 337 y m #> 338 z m #> 339 a n #> 340 b n #> 341 c n #> 342 d n #> 343 e n #> 344 f n #> 345 g n #> 346 h n #> 347 i n #> 348 j n #> 349 k n #> 350 l n #> 351 m n #> 352 n n #> 353 o n #> 354 p n #> 355 q n #> 356 r n #> 357 s n #> 358 t n #> 359 u n #> 360 v n #> 361 w n #> 362 x n #> 363 y n #> 364 z n #> 365 a o #> 366 b o #> 367 c o #> 368 d o #> 369 e o #> 370 f o #> 371 g o #> 372 h o #> 373 i o #> 374 j o #> 375 k o #> 376 l o #> 377 m o #> 378 n o #> 379 o o #> 380 p o #> 381 q o #> 382 r o #> 383 s o #> 384 t o #> 385 u o #> 386 v o #> 387 w o #> 388 x o #> 389 y o #> 390 z o #> 391 a p #> 392 b p #> 393 c p #> 394 d p #> 395 e p #> 396 f p #> 397 g p #> 398 h p #> 399 i p #> 400 j p #> 401 k p #> 402 l p #> 403 m p #> 404 n p #> 405 o p #> 406 p p #> 407 q p #> 408 r p #> 409 s p #> 410 t p #> 411 u p #> 412 v p #> 413 w p #> 414 x p #> 415 y p #> 416 z p #> 417 a q #> 418 b q #> 419 c q #> 420 d q #> 421 e q #> 422 f q #> 423 g q #> 424 h q #> 425 i q #> 426 j q #> 427 k q #> 428 l q #> 429 m q #> 430 n q #> 431 o q #> 432 p q #> 433 q q #> 434 r q #> 435 s q #> 436 t q #> 437 u q #> 438 v q #> 439 w q #> 440 x q #> 441 y q #> 442 z q #> 443 a r #> 444 b r #> 445 c r #> 446 d r #> 447 e r #> 448 f r #> 449 g r #> 450 h r #> 451 i r #> 452 j r #> 453 k r #> 454 l r #> 455 m r #> 456 n r #> 457 o r #> 458 p r #> 459 q r #> 460 r r #> 461 s r #> 462 t r #> 463 u r #> 464 v r #> 465 w r #> 466 x r #> 467 y r #> 468 z r #> 469 a s #> 470 b s #> 471 c s #> 472 d s #> 473 e s #> 474 f s #> 475 g s #> 476 h s #> 477 i s #> 478 j s #> 479 k s #> 480 l s #> 481 m s #> 482 n s #> 483 o s #> 484 p s #> 485 q s #> 486 r s #> 487 s s #> 488 t s #> 489 u s #> 490 v s #> 491 w s #> 492 x s #> 493 y s #> 494 z s #> 495 a t #> 496 b t #> 497 c t #> 498 d t #> 499 e t #> 500 f t #> 501 g t #> 502 h t #> 503 i t #> 504 j t #> 505 k t #> 506 l t #> 507 m t #> 508 n t #> 509 o t #> 510 p t #> 511 q t #> 512 r t #> 513 s t #> 514 t t #> 515 u t #> 516 v t #> 517 w t #> 518 x t #> 519 y t #> 520 z t #> 521 a u #> 522 b u #> 523 c u #> 524 d u #> 525 e u #> 526 f u #> 527 g u #> 528 h u #> 529 i u #> 530 j u #> 531 k u #> 532 l u #> 533 m u #> 534 n u #> 535 o u #> 536 p u #> 537 q u #> 538 r u #> 539 s u #> 540 t u #> 541 u u #> 542 v u #> 543 w u #> 544 x u #> 545 y u #> 546 z u #> 547 a v #> 548 b v #> 549 c v #> 550 d v #> 551 e v #> 552 f v #> 553 g v #> 554 h v #> 555 i v #> 556 j v #> 557 k v #> 558 l v #> 559 m v #> 560 n v #> 561 o v #> 562 p v #> 563 q v #> 564 r v #> 565 s v #> 566 t v #> 567 u v #> 568 v v #> 569 w v #> 570 x v #> 571 y v #> 572 z v #> 573 a w #> 574 b w #> 575 c w #> 576 d w #> 577 e w #> 578 f w #> 579 g w #> 580 h w #> 581 i w #> 582 j w #> 583 k w #> 584 l w #> 585 m w #> 586 n w #> 587 o w #> 588 p w #> 589 q w #> 590 r w #> 591 s w #> 592 t w #> 593 u w #> 594 v w #> 595 w w #> 596 x w #> 597 y w #> 598 z w #> 599 a x #> 600 b x #> 601 c x #> 602 d x #> 603 e x #> 604 f x #> 605 g x #> 606 h x #> 607 i x #> 608 j x #> 609 k x #> 610 l x #> 611 m x #> 612 n x #> 613 o x #> 614 p x #> 615 q x #> 616 r x #> 617 s x #> 618 t x #> 619 u x #> 620 v x #> 621 w x #> 622 x x #> 623 y x #> 624 z x #> 625 a y #> 626 b y #> 627 c y #> 628 d y #> 629 e y #> 630 f y #> 631 g y #> 632 h y #> 633 i y #> 634 j y #> 635 k y #> 636 l y #> 637 m y #> 638 n y #> 639 o y #> 640 p y #> 641 q y #> 642 r y #> 643 s y #> 644 t y #> 645 u y #> 646 v y #> 647 w y #> 648 x y #> 649 y y #> 650 z y #> 651 a z #> 652 b z #> 653 c z #> 654 d z #> 655 e z #> 656 f z #> 657 g z #> 658 h z #> 659 i z #> 660 j z #> 661 k z #> 662 l z #> 663 m z #> 664 n z #> 665 o z #> 666 p z #> 667 q z #> 668 r z #> 669 s z #> 670 t z #> 671 u z #> 672 v z #> 673 w z #> 674 x z #> 675 y z #> 676 z z ## Another fast method; See ## https://stackoverflow.com/questions/10405637/use-outer-instead-of-expand-grid expand.grid.jc <- function(seq1, seq2) { cbind( Var1 = rep.int(seq1, length(seq2)), Var2 = rep.int(seq2, rep.int(length(seq1), length(seq2))) ) } # \\donttest{ microbenchmark::microbenchmark(rxExpandGrid(letters, letters), expand.grid.jc(letters, letters)) #> Unit: microseconds #> expr min lq mean median uq max #> rxExpandGrid(letters, letters) 10.61 11.121 30.09082 11.412 11.772 1713.883 #> expand.grid.jc(letters, letters) 16.37 17.312 210.03084 17.994 18.740 5885.897 #> neval #> 100 #> 100 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand grid internal function — rxExpandGrid_","title":"Expand grid internal function — rxExpandGrid_","text":"Expand grid internal function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand grid internal function — rxExpandGrid_","text":"","code":"rxExpandGrid_(c1, c2, type)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand grid internal function — rxExpandGrid_","text":"c1 character vector items expanded c2 second character vector items expanded type 0 typical data frame, 1 symengine sensitivity expansion","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandGrid_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand grid internal function — rxExpandGrid_","text":"data frame (type = 0) symengine string (type=1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"Expand /else clauses multiple different types lines.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"","code":"rxExpandIfElse(model, removeInis = TRUE, removePrint = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"model Model can character, rxode2 model. needs normalized syntax, (...){} line. else statement must line closing bracket statement previous line. else statment must also contain opening bracket, like code else {} removeInis boolean indicating parameter initializations removed model. removePrint boolean indicating printing statements removed model.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"named character vector. names vector logical conditions, values lines satisfy logical conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandIfElse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Expand if/else clauses into multiple different types of lines. — rxExpandIfElse","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand second order sensitivity — rxExpandSens2_","title":"Expand second order sensitivity — rxExpandSens2_","text":"Expand second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand second order sensitivity — rxExpandSens2_","text":"","code":"rxExpandSens2_(state, s1, s2)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand second order sensitivity — rxExpandSens2_","text":"state state expand s1 variables calculate sensitivity s2 variables calculate second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens2_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand second order sensitivity — rxExpandSens2_","text":"string symengine second order sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":null,"dir":"Reference","previous_headings":"","what":"Expand sensitivity — rxExpandSens_","title":"Expand sensitivity — rxExpandSens_","text":"Expand sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Expand sensitivity — rxExpandSens_","text":"","code":"rxExpandSens_(state, calcSens)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Expand sensitivity — rxExpandSens_","text":"state state expand calcSens variables calculate sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxExpandSens_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Expand sensitivity — rxExpandSens_","text":"symengine string expanded sensitivity","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":null,"dir":"Reference","previous_headings":"","what":"Apply the fixed population estimated parameters — rxFixPop","title":"Apply the fixed population estimated parameters — rxFixPop","text":"Apply fixed population estimated parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Apply the fixed population estimated parameters — rxFixPop","text":"","code":"rxFixPop(ui, returnNull = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Apply the fixed population estimated parameters — rxFixPop","text":"ui rxode2 ui function returnNull boolean unchanged values return original ui (FALSE) null (TRUE)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Apply the fixed population estimated parameters — rxFixPop","text":"returnNull TRUE, NULL nothing changed, changed model ui. returnNull FALSE, return ui matter changed .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Apply the fixed population estimated parameters — rxFixPop","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFixPop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Apply the fixed population estimated parameters — rxFixPop","text":"","code":"One.comp.transit.allo <- function() { ini({ # Where initial conditions/variables are specified lktr <- log(1.15) #log k transit (/h) lcl <- log(0.15) #log Cl (L/hr) lv <- log(7) #log V (L) ALLC <- fix(0.75) #allometric exponent cl ALLV <- fix(1.00) #allometric exponent v prop.err <- 0.15 #proportional error (SD/mean) add.err <- 0.6 #additive error (mg/L) eta.ktr ~ 0.5 eta.cl ~ 0.1 eta.v ~ 0.1 }) model({ #Allometric scaling on weight cl <- exp(lcl + eta.cl + ALLC * logWT70) v <- exp(lv + eta.v + ALLV * logWT70) ktr <- exp(lktr + eta.ktr) # RxODE-style differential equations are supported d/dt(depot) = -ktr * depot d/dt(central) = ktr * trans - (cl/v) * central d/dt(trans) = ktr * depot - ktr * trans ## Concentration is calculated cp = central/v # And is assumed to follow proportional and additive error cp ~ prop(prop.err) + add(add.err) }) } m <- rxFixPop(One.comp.transit.allo) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' m #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> lktr lcl lv prop.err add.err #> 0.1397619 -1.8971200 1.9459101 0.1500000 0.6000000 #> #> Omega ($omega): #> eta.ktr eta.cl eta.v #> eta.ktr 0.5 0.0 0.0 #> eta.cl 0.0 0.1 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 central #> 3 3 trans #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 lcl eta.cl id #> 2 lv eta.v id #> 3 lktr eta.ktr id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> lktr <- 0.139761942375159 #> label(\"log k transit (/h)\") #> lcl <- -1.89711998488588 #> label(\"log Cl (L/hr)\") #> lv <- 1.94591014905531 #> label(\"log V (L)\") #> prop.err <- c(0, 0.15) #> label(\"proportional error (SD/mean)\") #> add.err <- c(0, 0.6) #> label(\"additive error (mg/L)\") #> eta.ktr ~ 0.5 #> eta.cl ~ 0.1 #> eta.v ~ 0.1 #> }) #> model({ #> cl <- exp(lcl + eta.cl + 0.75 * logWT70) #> v <- exp(lv + eta.v + 1 * logWT70) #> ktr <- exp(lktr + eta.ktr) #> d/dt(depot) = -ktr * depot #> d/dt(central) = ktr * trans - (cl/v) * central #> d/dt(trans) = ktr * depot - ktr * trans #> cp = central/v #> cp ~ prop(prop.err) + add(add.err) #> }) #> } # now everything is already fixed, so calling again will do nothing rxFixPop(m) #> ── rxode2-based free-form 3-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> lktr lcl lv prop.err add.err #> 0.1397619 -1.8971200 1.9459101 0.1500000 0.6000000 #> #> Omega ($omega): #> eta.ktr eta.cl eta.v #> eta.ktr 0.5 0.0 0.0 #> eta.cl 0.0 0.1 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 central #> 3 3 trans #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 lcl eta.cl id #> 2 lv eta.v id #> 3 lktr eta.ktr id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> lktr <- 0.139761942375159 #> label(\"log k transit (/h)\") #> lcl <- -1.89711998488588 #> label(\"log Cl (L/hr)\") #> lv <- 1.94591014905531 #> label(\"log V (L)\") #> prop.err <- c(0, 0.15) #> label(\"proportional error (SD/mean)\") #> add.err <- c(0, 0.6) #> label(\"additive error (mg/L)\") #> eta.ktr ~ 0.5 #> eta.cl ~ 0.1 #> eta.v ~ 0.1 #> }) #> model({ #> cl <- exp(lcl + eta.cl + 0.75 * logWT70) #> v <- exp(lv + eta.v + 1 * logWT70) #> ktr <- exp(lktr + eta.ktr) #> d/dt(depot) = -ktr * depot #> d/dt(central) = ktr * trans - (cl/v) * central #> d/dt(trans) = ktr * depot - ktr * trans #> cp = central/v #> cp ~ prop(prop.err) + add(add.err) #> }) #> } # if you call it with returnNull=TRUE when no changes have been # performed, the function will return NULL rxFixPop(m, returnNull=TRUE) #> NULL"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":null,"dir":"Reference","previous_headings":"","what":"Clear memoise cache for rxode2 — rxForget","title":"Clear memoise cache for rxode2 — rxForget","text":"Clear memoise cache rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Clear memoise cache for rxode2 — rxForget","text":"","code":"rxForget()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Clear memoise cache for rxode2 — rxForget","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxForget.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Clear memoise cache for rxode2 — rxForget","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":null,"dir":"Reference","previous_headings":"","what":"Add/Create C functions for use in rxode2 — rxFun","title":"Add/Create C functions for use in rxode2 — rxFun","text":"Add/Create C functions use rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add/Create C functions for use in rxode2 — rxFun","text":"","code":"rxFun(name, args, cCode) rxRmFun(name)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add/Create C functions for use in rxode2 — rxFun","text":"name can either give name user function simple R function wish convert C. rxode2 convert R function C, name function match function name provided number arguments match R function provided. Hence, providing R function conversion C, rest arguments implied. args gives arguments user function cCode C-code new function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxFun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add/Create C functions for use in rxode2 — rxFun","text":"","code":"# \\donttest{ ## Right now rxode2 is not aware of the function fun ## Therefore it cannot translate it to symengine or ## Compile a model with it. try(rxode2(\"a=fun(a,b,c)\")) #> #> #> Error : syntax errors (see above) ## Note for this approach to work, it cannot interfere with C ## function names or reserved rxode2 special terms. Therefore ## f(x) would not work since f is an alias for bioavailability. fun <- \" double fun(double a, double b, double c) { return a*a+b*a+c; } \" ## C-code for function rxFun(\"fun\", c(\"a\", \"b\", \"c\"), fun) ## Added function ## Now rxode2 knows how to translate this function to symengine rxToSE(\"fun(a,b,c)\") #> [1] \"fun(a,b,c)\" ## And will take a central difference when calculating derivatives rxFromSE(\"Derivative(fun(a,b,c),a)\") #> [1] \"(fun((a)+6.05545445239334e-06,b,c)-fun(a,b,c))/6.05545445239334e-06\" ## Of course, you could specify the derivative table manually rxD(\"fun\", list( function(a, b, c) { paste0(\"2*\", a, \"+\", b) }, function(a, b, c) { return(a) }, function(a, b, c) { return(\"0.0\") } )) rxFromSE(\"Derivative(fun(a,b,c),a)\") #> [1] \"2*a+b\" # You can also remove the functions by `rxRmFun` rxRmFun(\"fun\") # you can also use R functions directly in rxode2 gg <- function(x, y) { x + y } f <- rxode2({ z = gg(x, y) }) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ e <- et(1:10) |> as.data.frame() e$x <- 1:10 e$y <- 21:30 rxSolve(f, e) #> Warning: not thread safe method, using 1 core #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows # Note that since it touches R, it can only run single-threaded. # There are also requirements for the function: # # 1. It accepts one value per argument (numeric) # # 2. It returns one numeric value # If it is a simple function (like gg) you can also convert it to C # using rxFun and load it into rxode2 rxFun(gg) #> → finding duplicate expressions in d(gg)/d(x)... #> → finding duplicate expressions in d(gg)/d(y)... #> converted R function 'gg' to C (will now use in rxode2) #> converted R function 'rx_gg_d_x' to C (will now use in rxode2) #> converted R function 'rx_gg_d_y' to C (will now use in rxode2) #> Added derivative table for 'gg' rxSolve(f, e) #> compiled with R user function 'gg'; now there is a clashing C user function #> triggered a recompile to use the C user function (they are always preferred) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows # to stop the recompile simply reassign the function f <- rxode2(f) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ rxSolve(f, e) #> ── Solved rxode2 object ── #> ── Parameters ($params): ── #> # A tibble: 1 × 0 #> ── Initial Conditions ($inits): ── #> named numeric(0) #> ── First part of data (object): ── #> # A tibble: 10 × 4 #> time z x y #> #> 1 1 22 1 21 #> 2 2 24 2 22 #> 3 3 26 3 23 #> 4 4 28 4 24 #> 5 5 30 5 25 #> 6 6 32 6 26 #> # ℹ 4 more rows rxRmFun(\"gg\") rm(gg) rm(f) # You can also automatically convert a R function to R code (and # calculate first derivatives) fun <- function(a, b, c) { a^2+b*a+c } rxFun(fun) #> → finding duplicate expressions in d(fun)/d(a)... #> → finding duplicate expressions in d(fun)/d(b)... #> → finding duplicate expressions in d(fun)/d(c)... #> converted R function 'fun' to C (will now use in rxode2) #> converted R function 'rx_fun_d_a' to C (will now use in rxode2) #> converted R function 'rx_fun_d_b' to C (will now use in rxode2) #> converted R function 'rx_fun_d_c' to C (will now use in rxode2) #> Added derivative table for 'fun' # You can see the R code if you want with rxC message(rxC(\"fun\")) #> double fun(double a, double b, double c) { #> double _lastValue=NA_REAL; #> _lastValue = R_pow_di(a,2)+b*a+c; #> return _lastValue; #> } # you can also remove both the function and the # derivatives with rxRmFun(\"fun\") rxRmFun(\"fun\") # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxGetControl option from ui — rxGetControl","title":"rxGetControl option from ui — rxGetControl","text":"rxGetControl option ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxGetControl option from ui — rxGetControl","text":"","code":"rxGetControl(ui, option, default)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxGetControl option from ui — rxGetControl","text":"ui rxode2 ui object option Option get default Default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxGetControl option from ui — rxGetControl","text":"Option (present) default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxGetControl option from ui — rxGetControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":null,"dir":"Reference","previous_headings":"","what":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"S3 method getting distribution lines rxode2 simulation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"","code":"rxGetDistributionSimulationLines(line) # S3 method for norm rxGetDistributionSimulationLines(line) # S3 method for dnorm rxGetDistributionSimulationLines(line) # S3 method for t rxGetDistributionSimulationLines(line) # S3 method for cauchy rxGetDistributionSimulationLines(line) # S3 method for ordinal rxGetDistributionSimulationLines(line) # S3 method for default rxGetDistributionSimulationLines(line) # S3 method for rxUi rxGetDistributionSimulationLines(line)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"line Parsed rxode2 model environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"Lines simulation ipred dv. based idea focei parameters defined","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetDistributionSimulationLines.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This is a S3 method for getting the distribution lines for a rxode2 simulation — rxGetDistributionSimulationLines","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the linear compartment model true function — rxGetLin","title":"Get the linear compartment model true function — rxGetLin","text":"Get linear compartment model true function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the linear compartment model true function — rxGetLin","text":"","code":"rxGetLin( model, linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), verbose = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the linear compartment model true function — rxGetLin","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . linCmtSens method calculate linCmt() solutions verbose TRUE verbose linear compartmental model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the linear compartment model true function — rxGetLin","text":"model linCmt() replaced linCmtA()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetLin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the linear compartment model true function — rxGetLin","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model properties without compiling it. — rxGetModel","title":"Get model properties without compiling it. — rxGetModel","text":"Get model properties without compiling .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model properties without compiling it. — rxGetModel","text":"","code":"rxGetModel( model, calcSens = NULL, calcJac = NULL, collapseModel = NULL, indLin = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model properties without compiling it. — rxGetModel","text":"model rxode2 specification calcSens boolean indicating rxode2 calculate sensitivities according specified ODEs. calcJac boolean indicating rxode2 calculate Jacobain according specified ODEs. collapseModel boolean indicating rxode2 remove LHS variables calculating sensitivities. indLin Calculate inductive linearization matrices compile inductive linearization support.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model properties without compiling it. — rxGetModel","text":"rxode2 trans list","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model properties without compiling it. — rxGetModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Get rxode2 model from object — rxGetrxode2","title":"Get rxode2 model from object — rxGetrxode2","text":"Get rxode2 model object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get rxode2 model from object — rxGetrxode2","text":"","code":"rxGetrxode2(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get rxode2 model from object — rxGetrxode2","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxGetrxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get rxode2 model from object — rxGetrxode2","text":"rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":null,"dir":"Reference","previous_headings":"","what":"Format rxSolve and related objects as html. — rxHtml","title":"Format rxSolve and related objects as html. — rxHtml","text":"Format rxSolve related objects html.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Format rxSolve and related objects as html. — rxHtml","text":"","code":"rxHtml(x, ...) # S3 method for rxSolve rxHtml(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Format rxSolve and related objects as html. — rxHtml","text":"x rxode2 object ... Extra arguments sent kable","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Format rxSolve and related objects as html. — rxHtml","text":"html code rxSolve object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxHtml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Format rxSolve and related objects as html. — rxHtml","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the preferred factoring by state — rxIndLinState","title":"Set the preferred factoring by state — rxIndLinState","text":"Set preferred factoring state","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the preferred factoring by state — rxIndLinState","text":"","code":"rxIndLinState(preferred = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the preferred factoring by state — rxIndLinState","text":"preferred list state's preferred factorization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the preferred factoring by state — rxIndLinState","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinState.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set the preferred factoring by state — rxIndLinState","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":null,"dir":"Reference","previous_headings":"","what":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"one state ODE separated specifies incorporated matrix exponential.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"","code":"rxIndLinStrategy(strategy = c(\"curState\", \"split\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"strategy strategy inductive linearization matrix building curState Prefer parameterizing terms current state, followed first state observed term. split Split parameterization states term dividing number states term adding matrix term state.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLinStrategy.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This sets the inductive linearization strategy for matrix building — rxIndLinStrategy","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":null,"dir":"Reference","previous_headings":"","what":"Inductive linearization solver — rxIndLin_","title":"Inductive linearization solver — rxIndLin_","text":"Inductive linearization solver","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inductive linearization solver — rxIndLin_","text":"cSub = Current subject number op rxode2 solving options tp Prior time point/time zero yp Prior state; vector size = neq; Final state updated tf Final Time InfusionRate = Rates compartment; vector size = neq Indicator compartment \"\" cache 0 = Cache doIndLin == 0, cache > 0 = nInf-1 rxode2 matrix exponential function IndF rxode2 Inductive Linearization function F","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIndLin_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inductive linearization solver — rxIndLin_","text":"Returns status solving 1 = Successful solve -1 = Maximum number iterations reached inductive linearization","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":null,"dir":"Reference","previous_headings":"","what":"Initial Values and State values for a rxode2 object — rxInits","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Returns initial values rxDll object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Initial Values and State values for a rxode2 object — rxInits","text":"","code":"rxInits( obj, vec = NULL, req = NULL, defaultValue = 0, noerror = FALSE, noini = FALSE, rxLines = FALSE ) rxInit( obj, vec = NULL, req = NULL, defaultValue = 0, noerror = FALSE, noini = FALSE, rxLines = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Initial Values and State values for a rxode2 object — rxInits","text":"obj rxDll, rxode2, named vector representing default initial arguments vec supplied, named vector model. req Required names, required order ODE solver defaultValue number NA representing default value parameters missing vec, required req. noerror boolean specifying error thrown missing parameter values default = NA","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Initial values rxDll object","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInits.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Initial Values and State values for a rxode2 object — rxInits","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":null,"dir":"Reference","previous_headings":"","what":"Invert matrix using RcppArmadillo. — rxInv","title":"Invert matrix using RcppArmadillo. — rxInv","text":"Invert matrix using RcppArmadillo.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Invert matrix using RcppArmadillo. — rxInv","text":"","code":"rxInv(matrix)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Invert matrix using RcppArmadillo. — rxInv","text":"matrix matrix inverted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxInv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Invert matrix using RcppArmadillo. — rxInv","text":"inverse pseudo inverse matrix.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":null,"dir":"Reference","previous_headings":"","what":"Check the type of an object using Rcpp — rxIs","title":"Check the type of an object using Rcpp — rxIs","text":"Check type object using Rcpp","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check the type of an object using Rcpp — rxIs","text":"","code":"rxIs(obj, cls)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check the type of an object using Rcpp — rxIs","text":"obj Object check cls Type class. s3 classes lists/environments primitive classes checked. matrix types distinguished numeric.matrix, integer.matrix, logical.matrix, character.matrix well traditional matrix class. Additionally checks event.data.frame data.frame object time, evid amt. (UPPER, lower Title cases accepted)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check the type of an object using Rcpp — rxIs","text":"boolean indicating object member class.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check the type of an object using Rcpp — rxIs","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":null,"dir":"Reference","previous_headings":"","what":"Checks if the rxode2 object was built with the current build — rxIsCurrent","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"Checks rxode2 object built current build","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"","code":"rxIsCurrent(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsCurrent.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Checks if the rxode2 object was built with the current build — rxIsCurrent","text":"boolean indicating built current rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Determine DLL associated rxode2 object loaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"","code":"rxIsLoaded(obj) rxDllLoaded(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Boolean returning rxode2 library loaded.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxIsLoaded.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Determine if the DLL associated with the rxode2 object is loaded — rxIsLoaded","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":null,"dir":"Reference","previous_headings":"","what":"Left handed Variables — rxLhs","title":"Left handed Variables — rxLhs","text":"returns model calculated variables","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Left handed Variables — rxLhs","text":"","code":"rxLhs(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Left handed Variables — rxLhs","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Left handed Variables — rxLhs","text":"character vector listing calculated parameters","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLhs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Left handed Variables — rxLhs","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":null,"dir":"Reference","previous_headings":"","what":"Lock/unlocking of rxode2 dll file — rxLock","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"Lock/unlocking rxode2 dll file","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"","code":"rxLock(obj) rxUnlock(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxLock.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Lock/unlocking of rxode2 dll file — rxLock","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the md5 of an rxode2 object or file — rxMd5","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"md5 based model possibly extra c code supplied model. addition md5 based syntax options, compiled rxode2 library md5, rxode2 version/repository.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"","code":"rxMd5(model, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . ... ignored arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"rxode2 object, return named list: file_md5 model's file's md5 parsed_md5 parsed model's file's md5. Otherwise return md5 based arguments provided","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxMd5.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Return the md5 of an rxode2 object or file — rxMd5","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":null,"dir":"Reference","previous_headings":"","what":"All model variables for a rxode2 object — rxModelVars","title":"All model variables for a rxode2 object — rxModelVars","text":"Return known model variables specified rxode2 object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All model variables for a rxode2 object — rxModelVars","text":"","code":"rxModelVars(obj) rxModelVarsS3(obj) # S3 method for rxUi rxModelVarsS3(obj) # S3 method for default rxModelVarsS3(obj)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All model variables for a rxode2 object — rxModelVars","text":"obj rxode2 family objects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"All model variables for a rxode2 object — rxModelVars","text":"list rxode2 model properties including: params character vector names model parameters lhs character vector names model calculated parameters state character vector compartments rxode2 object trans named vector translated model properties including type jacobian specified, C function prefixes, well C functions names called compiled model. md5 named vector gives digest model (file_md5) parsed model (parsed_md5) model named vector giving input model (model), normalized model (comments standard syntax parsing, normModel), interim code used generate final C file parseModel","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"All model variables for a rxode2 object — rxModelVars","text":"items calculated compilation; built-rxode2 compiled DLL. allow extension, s3 hook added function rxModelVarsS3.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModelVars.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"All model variables for a rxode2 object — rxModelVars","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the rxModels information — rxModels_","title":"Get the rxModels information — rxModels_","text":"Get rxModels information","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the rxModels information — rxModels_","text":"","code":"rxModels_(env = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the rxModels information — rxModels_","text":"env boolean returns environment models stored (TRUE), currently assigned rxode2 model variables (FALSE).","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxModels_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the rxModels information — rxModels_","text":"internal rxModels information environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the normalized model — rxNorm","title":"Get the normalized model — rxNorm","text":"get syntax preferred model processing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the normalized model — rxNorm","text":"","code":"rxNorm(obj, condition = NULL, removeInis, removeJac, removeSens)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the normalized model — rxNorm","text":"obj rxode2 family objects condition Character string logical condition use subsetting normalized model. missing, condition set via rxCondition, return whole code conditional settings intact. condition set rxCondition, use condition. removeInis boolean indicating parameter initialization removed model removeJac boolean indicating Jacobians removed. removeSens boolean indicating sensitivities removed.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the normalized model — rxNorm","text":"Normalized Normal syntax (comments)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxNorm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the normalized model — rxNorm","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":null,"dir":"Reference","previous_headings":"","what":"Optimize rxode2 for computer evaluation — rxOptExpr","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"optimizes rxode2 code computer evaluation calculating redundant expressions .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"","code":"rxOptExpr(x, msg = \"model\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"x rxode2 model can accessed rxNorm msg name type object rxode2 optimizing message optimizing. example \"model\" produce following message optimizing model: finding duplicate expressions model...","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"Optimized rxode2 model text. order type lhs state variables maintained evaluation sped . parameters names maintained, order may modified.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxOptExpr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Optimize rxode2 for computer evaluation — rxOptExpr","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":null,"dir":"Reference","previous_headings":"","what":"Parameters specified by the model — rxParams","title":"Parameters specified by the model — rxParams","text":"returns model's parameters required solve ODE system, can used pipe parameters rxode2 solve","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parameters specified by the model — rxParams","text":"","code":"rxParams(obj, ...) # S3 method for rxode2 rxParams( obj, constants = TRUE, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) # S3 method for rxSolve rxParams( obj, constants = TRUE, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) # S3 method for rxEt rxParams( obj, ..., params = NULL, inits = NULL, iCov = NULL, keep = NULL, thetaMat = NULL, omega = NULL, dfSub = NULL, sigma = NULL, dfObs = NULL, nSub = NULL, nStud = NULL ) rxParam(obj, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parameters specified by the model — rxParams","text":"obj rxode2 family objects ... arguments including scaling factors compartment. includes S# = numeric scale compartment # dividing compartment amount scale factor, like NONMEM. constants boolean indicting constants included list parameters. Currently rxode2 parses constants variables case wish change without recompiling rxode2 model. params numeric named vector values every parameter ODE system; names must correspond parameter identifiers used ODE specification; inits vector initial values state variables (e.g., amounts compartment), order vector must state variables (e.g., PK/PD compartments); iCov data frame individual non-time varying covariates combine events dataset merge. keep Columns keep either input dataset iCov dataset. iCov dataset, column kept per line. input dataset, records added data LOCF (Last Observation Carried forward) imputation performed. thetaMat Named theta matrix. omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. nSub Number subject variabilities (ETAs) simulated every realization parameters. nStud Number virtual studies characterize uncertainty estimated parameters.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parameters specified by the model — rxParams","text":"extracting parameters rxode2 model, character vector listing parameters model.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParams.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Parameters specified by the model — rxParams","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Error function for inclusion in rxode2 — rxParseErr","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"Prepare Error function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"","code":"rxParseErr( x, baseTheta, ret = \"rx_r_\", init = NULL, addProp = c(\"combined2\", \"combined1\") )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"x error function baseTheta Base theta start numbering add(.) prop(.) . ret Internal return type. changed user... init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"rxode2 transformed text","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParseErr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prepare Error function for inclusion in rxode2 — rxParseErr","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse PK function for inclusion in rxode2 — rxParsePk","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"Parse PK function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"","code":"rxParsePk(x, init = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"x PK function init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"rxode2 transformed text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePk.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Parse PK function for inclusion in rxode2 — rxParsePk","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Pred function for inclusion in rxode2 — rxParsePred","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"Prepare Pred function inclusion rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"","code":"rxParsePred(x, init = NULL, err = NULL, addProp = c(\"combined2\", \"combined1\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"x pred function init Initialization vector","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"rxode2 transformed text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxParsePred.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prepare Pred function for inclusion in rxode2 — rxParsePred","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a package from compiled rxode2 models — rxPkg","title":"Creates a package from compiled rxode2 models — rxPkg","text":"Creates package compiled rxode2 models","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a package from compiled rxode2 models — rxPkg","text":"","code":"rxPkg( ..., package, wd = getwd(), action = c(\"install\", \"build\", \"binary\", \"create\"), license = c(\"gpl3\", \"lgpl\", \"mit\", \"agpl3\"), name = \"Firstname Lastname\", fields = list() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a package from compiled rxode2 models — rxPkg","text":"... Models build package package String package name create wd character string working directory create subdirectory according modName. specified, subdirectory named “modName.d” created populated C file, dynamic loading library, plus various working files. missing, files created (removed) temporary directory, rxode2 DLL model created current directory named rx_????_platform, example rx_129f8f97fb94a87ca49ca8dafe691e1e_i386.dll action Type action take package created license type license package. name Full name author fields named list fields add DESCRIPTION, potentially overriding default values. See use_description() can set personalized defaults using package options.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a package from compiled rxode2 models — rxPkg","text":"function returns nothing used side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPkg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates a package from compiled rxode2 models — rxPkg","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate a from a Poisson process — rxPp","title":"Simulate a from a Poisson process — rxPp","text":"Simulate Poisson process","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate a from a Poisson process — rxPp","text":"","code":"rxPp( n, lambda, gamma = 1, prob = NULL, t0 = 0, tmax = Inf, randomOrder = FALSE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate a from a Poisson process — rxPp","text":"n Number time points simulate Poisson process lambda Rate Poisson process gamma Asymmetry rate Poisson process. gamma=1.0, simulates homogenous Poisson process. gamma<1.0, Poisson process events early, gamma > 1.0, Poisson process events late process. gamma non-zero, tmax infinite indicate end Poisson process simulated. pharamcometric cases, end study. Internally uses rate : l(t) = lambdagamma(t/tmax)^(gamma-1) prob specified, probability function one argument, time, gives probability Poisson time t accepted rejection time. t0 starting time Poisson process tmax maximum time Poisson process randomOrder TRUE randomize order Poisson events. default (FALSE) returns Poisson process order events occurred.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate a from a Poisson process — rxPp","text":"returns vector Poisson process times; dropout >= tmax, rest times = tmax indicate dropout equal tmax.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate a from a Poisson process — rxPp","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate a from a Poisson process — rxPp","text":"","code":"## Sample homogenous Poisson process of rate 1/10 rxPp(10, 1 / 10) #> [1] 14.16159 22.43681 41.13405 48.71743 51.37508 54.60656 75.32184 84.62128 #> [9] 85.80475 96.63193 ## Sample inhomogenous Poisson rate of 1/10 rxPp(10, 1 / 10, gamma = 2, tmax = 100) #> [1] 37.13008 37.33395 38.19765 41.94718 50.45308 51.16211 65.45638 75.56937 #> [9] 76.00046 83.59277 ## Typically the Poisson process times are in a sequential order, ## using randomOrder gives the Poisson process in random order rxPp(10, 1 / 10, gamma = 2, tmax = 10, randomOrder = TRUE) #> [1] 10.000000 10.000000 10.000000 10.000000 6.028535 10.000000 10.000000 #> [8] 10.000000 10.000000 10.000000 ## This uses an arbitrary function to sample a non-homogenous Poisson process rxPp(10, 1 / 10, prob = function(x) { 1/(1+abs(x)) }) #> [1] 14.74011 38.01194 53.91062 235.31848 381.74524 397.80743 504.64689 #> [8] 721.10404 756.19022 889.86201"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":null,"dir":"Reference","previous_headings":"","what":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"determined internal preferred condition name list .errIdenticalDists","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"","code":"rxPreferredDistributionName(dist)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"dist input distribution","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"Preferred distribution term","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPreferredDistributionName.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Change distribution name to the preferred distribution name term — rxPreferredDistributionName","text":"","code":"rxPreferredDistributionName(\"dt\") #> [1] \"t\" rxPreferredDistributionName(\"add\") #> [1] \"add\" # can be vectorized rxPreferredDistributionName(c(\"add\",\"dt\")) #> add dt #> \"add\" \"t\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":null,"dir":"Reference","previous_headings":"","what":"rxode2 progress bar functions — rxProgress","title":"rxode2 progress bar functions — rxProgress","text":"rxProgress sets progress bar","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxode2 progress bar functions — rxProgress","text":"","code":"rxProgress(num, core = 0L) rxTick() rxProgressStop(clear = TRUE) rxProgressAbort(error = \"Aborted calculation\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxode2 progress bar functions — rxProgress","text":"num Tot number operations track core Number cores show. 1, show number cores clear Boolean telling clear progress bar completion (displayed). default TRUE error rxProgressAbort error displayed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxode2 progress bar functions — rxProgress","text":"return NULL invisibly.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"rxode2 progress bar functions — rxProgress","text":"rxTick progress bar tick rxProgressStop stop progress bar rxProgressAbort shows abort rxProgressStop called.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxode2 progress bar functions — rxProgress","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxProgress.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"rxode2 progress bar functions — rxProgress","text":"","code":"f <- function() { on.exit({ rxProgressAbort() }) rxProgress(100) for (i in 1:100) { rxTick() Sys.sleep(1 / 100) } rxProgressStop() } # \\donttest{ f() # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":null,"dir":"Reference","previous_headings":"","what":"Prune branches (ie if/else) from rxode2 — rxPrune","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"prunes branches (ie /else) rxode2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"","code":"rxPrune(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"x rxode2 model can accessed rxNorm","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"Pruned rxode2 model text.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxPrune.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prune branches (ie if/else) from rxode2 — rxPrune","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":null,"dir":"Reference","previous_headings":"","what":"Reload rxode2 DLL — rxReload","title":"Reload rxode2 DLL — rxReload","text":"Can useful debugging","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reload rxode2 DLL — rxReload","text":"","code":"rxReload()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reload rxode2 DLL — rxReload","text":"boolean object reloaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReload.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Reload rxode2 DLL — rxReload","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxRemoveControl options for UI object — rxRemoveControl","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"rxRemoveControl options UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"","code":"rxRemoveControl(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"ui rxode2 ui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRemoveControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxRemoveControl options for UI object — rxRemoveControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":null,"dir":"Reference","previous_headings":"","what":"Rename items inside of a rxode2 ui model — rxRename","title":"Rename items inside of a rxode2 ui model — rxRename","text":"rxRename() changes names individual variables, lhs, ode states using new_name = old_name syntax","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rename items inside of a rxode2 ui model — rxRename","text":"","code":"rxRename(.data, ..., envir = parent.frame()) .rxRename(.data, ..., envir = parent.frame()) rename.rxUi(.data, ...) rename.function(.data, ...) # S3 method for rxUi rxRename(.data, ...) # S3 method for `function` rxRename(.data, ...) # S3 method for default rxRename(.data, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rename items inside of a rxode2 ui model — rxRename","text":".data rxode2 ui function, named data consistent dplyr::rename() ... rename items envir Environment evaluation","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rename items inside of a rxode2 ui model — rxRename","text":"New model items renamed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Rename items inside of a rxode2 ui model — rxRename","text":"similar dplyr's rename() function. dplyr loaded, s3 methods work ui objects. Note .rxRename() internal function called renaming likely need call unless writing extension function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Rename items inside of a rxode2 ui model — rxRename","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRename.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rename items inside of a rxode2 ui model — rxRename","text":"","code":"ocmt <- function() { ini({ tka <- exp(0.45) # Ka tcl <- exp(1) # Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- exp(3.45) # log V ## the label(\"Label name\") works with all models add.sd <- 0.7 }) model({ ka <- tka cl <- tcl v <- tv d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } ocmt %>% rxRename(cpParent=cp) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 1.568312 2.718282 31.500392 0.700000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 1.56831218549017 #> label(\"Ka\") #> tcl <- 2.71828182845905 #> label(\"Cl\") #> tv <- 31.5003923087479 #> label(\"log V\") #> add.sd <- c(0, 0.7) #> }) #> model({ #> ka <- tka #> cl <- tcl #> v <- tv #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cpParent = center/v #> cpParent ~ add(add.sd) #> }) #> }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":null,"dir":"Reference","previous_headings":"","what":"Rep R0 for foce — rxRepR0_","title":"Rep R0 for foce — rxRepR0_","text":"Rep R0 foce","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rep R0 for foce — rxRepR0_","text":"","code":"rxRepR0_(neta)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rep R0 for foce — rxRepR0_","text":"neta ETA substitute","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxRepR0_.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rep R0 for foce — rxRepR0_","text":"Returns string R code substitute rx_r expression symengine environment .s","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":null,"dir":"Reference","previous_headings":"","what":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"list description rxode2 supported reserved keywords","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"","code":"rxReservedKeywords"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxReservedKeywords.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A list and description of rxode2 supported reserved keywords — rxReservedKeywords","text":"data frame 3 columns 31 rows Reserved Name Reserved Keyword Name Meaning Reserved Keyword Meaning Alias Keyword Alias","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":null,"dir":"Reference","previous_headings":"","what":"A description of Rode2 supported residual errors — rxResidualError","title":"A description of Rode2 supported residual errors — rxResidualError","text":"description Rode2 supported residual errors","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A description of Rode2 supported residual errors — rxResidualError","text":"","code":"rxResidualError"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxResidualError.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A description of Rode2 supported residual errors — rxResidualError","text":"data frame 6 columns 181 rows Error model description type residual error Functional Form additive proportional functional form used Transformation type transformation done DV prediction code Example code residual error type addProp type add+prop residual error default equivalent lhs left handed side specification represents, either response variable, compartment specification","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":null,"dir":"Reference","previous_headings":"","what":"Load a model into a symengine environment — rxS","title":"Load a model into a symengine environment — rxS","text":"Load model symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load a model into a symengine environment — rxS","text":"","code":"rxS(x, doConst = TRUE, promoteLinSens = FALSE, envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load a model into a symengine environment — rxS","text":"x rxode2 object doConst Load constants environment well. promoteLinSens Promote solved linear compartment systems sensitivity-based solutions. envir default NULL; Environment put symengine variables .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load a model into a symengine environment — rxS","text":"rxode2/symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxS.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Load a model into a symengine environment — rxS","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":null,"dir":"Reference","previous_headings":"","what":"rxSetControl options for UI object — rxSetControl","title":"rxSetControl options for UI object — rxSetControl","text":"rxSetControl options UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxSetControl options for UI object — rxSetControl","text":"","code":"rxSetControl(ui, control)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxSetControl options for UI object — rxSetControl","text":"ui rxode2 ui object control Default value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxSetControl options for UI object — rxSetControl","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetControl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxSetControl options for UI object — rxSetControl","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign covariates for piping — rxSetCovariateNamesForPiping","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Assign covariates piping","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"","code":"rxSetCovariateNamesForPiping(covariates = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"covariates NULL (covariates), list covariates. nlmixr uses function set covariates pipe nlmixr fit.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetCovariateNamesForPiping.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign covariates for piping — rxSetCovariateNamesForPiping","text":"","code":"# First set the name of known covariates # Note this is case sensitive rxSetCovariateNamesForPiping(c(\"WT\",\"HT\", \"TC\")) one.compartment <- function() { ini({ tka <- 0.45 ; label(\"Log Ka\") tcl <- 1 ; label(\"Log Cl\") tv <- 3.45 ; label(\"Log V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.err <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d / dt(depot) <- -ka * depot d/dt(depot) <- -ka * depot d / dt(center) <- ka * depot - cl / v * center cp <- center / v cp ~ add(add.err) }) } # now TC is detected as a covariate instead of a population parameter one.compartment %>% model({ka <- exp(tka + eta.ka + TC * cov_C)}) #> #> #> ℹ add covariate `TC` (known covariate) #> ℹ add population parameter `cov_C` and set estimate to 1 #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.err cov_C #> 0.45 1.00 3.45 0.70 1.00 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level covariates #> 1 tka eta.ka id TC*cov_C #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Log Ka\") #> tcl <- 1 #> label(\"Log Cl\") #> tv <- 3.45 #> label(\"Log V\") #> add.err <- c(0, 0.7) #> cov_C <- 1 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka + TC * cov_C) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.err) #> }) #> } # You can turn it off by simply adding it back rxSetCovariateNamesForPiping() one.compartment %>% model({ka <- exp(tka + eta.ka + TC * cov_C)}) #> #> #> ℹ add population parameter `TC` and set estimate to 1 #> ℹ add population parameter `cov_C` and set estimate to 1 #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.err TC cov_C #> 0.45 1.00 3.45 0.70 1.00 1.00 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0.6 0.0 0.0 #> eta.cl 0.0 0.3 0.0 #> eta.v 0.0 0.0 0.1 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.45 #> label(\"Log Ka\") #> tcl <- 1 #> label(\"Log Cl\") #> tv <- 3.45 #> label(\"Log V\") #> add.err <- c(0, 0.7) #> TC <- 1 #> cov_C <- 1 #> eta.ka ~ 0.6 #> eta.cl ~ 0.3 #> eta.v ~ 0.1 #> }) #> model({ #> ka <- exp(tka + eta.ka + TC * cov_C) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) <- -ka * depot #> d/dt(depot) <- -ka * depot #> d/dt(center) <- ka * depot - cl/v * center #> cp <- center/v #> cp ~ add(add.err) #> }) #> } # The covariates you set with `rxSetCovariateNamesForPiping()` # are turned off every time you solve (or fit in nlmixr)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Set variables model piping automatic covarite selection","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"","code":"rxSetPipingAuto( thetamodelVars = rex::rex(or(\"tv\", \"t\", \"pop\", \"POP\", \"Pop\", \"TV\", \"T\", \"cov\", \"err\", \"eff\")), covariateExceptions = rex::rex(start, or(\"wt\", \"sex\", \"crcl\", \"kout\"), end), etaParts = c(\"eta\", \"ETA\", \"Eta\", \"ppv\", \"PPV\", \"Ppv\", \"iiv\", \"Iiv\", \"bsv\", \"Bsv\", \"BSV\", \"bpv\", \"Bpv\", \"BPV\", \"psv\", \"PSV\", \"Psv\") )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"thetamodelVars prefixes theta model variables regular expression covariateExceptions regular expression covariates always covariates etaParts list eta prefixes/post-fixes identify variable subject variability","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Nothing, called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"called startup set defaults, though can change wish piping can work differently individual setup","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetPipingAuto.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set the variables for the model piping automatic covarite selection — rxSetPipingAuto","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":null,"dir":"Reference","previous_headings":"","what":"Defunct setting of product — rxSetProd","title":"Defunct setting of product — rxSetProd","text":"Defunct setting product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Defunct setting of product — rxSetProd","text":"","code":"rxSetProd(type = c(\"long double\", \"double\", \"logify\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Defunct setting of product — rxSetProd","text":"type used type product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Defunct setting of product — rxSetProd","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":null,"dir":"Reference","previous_headings":"","what":"Set timing for progress bar — rxSetProgressBar","title":"Set timing for progress bar — rxSetProgressBar","text":"Set timing progress bar","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set timing for progress bar — rxSetProgressBar","text":"","code":"rxSetProgressBar(seconds = 1)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set timing for progress bar — rxSetProgressBar","text":"seconds sets number seconds need elapse drawing next segment progress bar. zero turns progress bar.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set timing for progress bar — rxSetProgressBar","text":"nothing, used side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetProgressBar.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set timing for progress bar — rxSetProgressBar","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":null,"dir":"Reference","previous_headings":"","what":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"Silence rxode2's C/C++ messages","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"","code":"rxSetSilentErr(silent)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"silent can 0L \"noisy\" 1L \"silent\"","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSilentErr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Silence some of rxode2's C/C++ messages — rxSetSilentErr","text":"TRUE; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":null,"dir":"Reference","previous_headings":"","what":"Defunct setting of sum — rxSetSum","title":"Defunct setting of sum — rxSetSum","text":"Defunct setting sum","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Defunct setting of sum — rxSetSum","text":"","code":"rxSetSum(type = c(\"pairwise\", \"fsum\", \"kahan\", \"neumaier\", \"c\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Defunct setting of sum — rxSetSum","text":"type used type product","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetSum.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Defunct setting of sum — rxSetSum","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":null,"dir":"Reference","previous_headings":"","what":"Setup the initial conditions. — rxSetupIni","title":"Setup the initial conditions. — rxSetupIni","text":"Setup initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Setup the initial conditions. — rxSetupIni","text":"","code":"rxSetupIni(obj, inits = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Setup the initial conditions. — rxSetupIni","text":"obj rxode2 object inits numeric vector initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Setup the initial conditions. — rxSetupIni","text":"initial conditions setup","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupIni.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Setup the initial conditions. — rxSetupIni","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":null,"dir":"Reference","previous_headings":"","what":"Setup the initial conditions. — rxSetupScale","title":"Setup the initial conditions. — rxSetupScale","text":"Setup initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Setup the initial conditions. — rxSetupScale","text":"","code":"rxSetupScale(obj, scale = NULL, extraArgs = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Setup the initial conditions. — rxSetupScale","text":"obj rxode2 object scale numeric vector scales extraArgs list extra args parse initial conditions.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Setup the initial conditions. — rxSetupScale","text":"setup scale changing compartment values","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSetupScale.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Setup the initial conditions. — rxSetupScale","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":null,"dir":"Reference","previous_headings":"","what":"Use Shiny to help develop an rxode2 model — rxShiny","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Use Shiny help develop rxode2 model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"","code":"rxShiny( object, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() ) # S3 method for rxSolve rxShiny( object, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() ) # S3 method for default rxShiny( object = NULL, params = NULL, events = NULL, inits = NULL, ..., data = data.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"object rxode2 family objects. supplied 2-compartment indirect effect model used. supplied, use model associated rxode2 object model exploration. params Initial parameters model events Event information (currently ignored) inits Initial estimates model ... arguments passed rxShiny. Currently anything. data data like plot. data time variable well compartment calculated variable matches rxode2 model, data added plot specific compartment calculated variable.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Nothing; Starts shiny server","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxShiny.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Use Shiny to help develop an rxode2 model — rxShiny","text":"Zufar Mulyukov Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"Simulate Parameters Theta/Omega specification","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"","code":"rxSimThetaOmega( params = NULL, omega = NULL, omegaDf = NULL, omegaLower = as.numeric(c(R_NegInf)), omegaUpper = as.numeric(c(R_PosInf)), omegaIsChol = FALSE, omegaSeparation = \"auto\", omegaXform = 1L, nSub = 1L, thetaMat = NULL, thetaLower = as.numeric(c(R_NegInf)), thetaUpper = as.numeric(c(R_PosInf)), thetaDf = NULL, thetaIsChol = FALSE, nStud = 1L, sigma = NULL, sigmaLower = as.numeric(c(R_NegInf)), sigmaUpper = as.numeric(c(R_PosInf)), sigmaDf = NULL, sigmaIsChol = FALSE, sigmaSeparation = \"auto\", sigmaXform = 1L, nCoresRV = 1L, nObs = 1L, dfSub = 0, dfObs = 0, simSubjects = TRUE, simVariability = as.logical(c(NA_LOGICAL)) )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"params Named Vector rxode2 model parameters omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. omegaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. omegaLower Lower bounds simulated ETAs (default -Inf) omegaUpper Upper bounds simulated ETAs (default Inf) omegaIsChol Indicates omega supplied Cholesky decomposed matrix instead traditional symmetric matrix. omegaSeparation Omega separation strategy Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. omegaXform taking omega values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nSub Number subject variabilities (ETAs) simulated every realization parameters. thetaMat Named theta matrix. thetaLower Lower bounds simulated population parameter variability (default -Inf) thetaUpper Upper bounds simulated population unexplained variability (default Inf) thetaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. thetaIsChol Indicates theta supplied Cholesky decomposed matrix instead traditional symmetric matrix. nStud Number virtual studies characterize uncertainty estimated parameters. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. sigmaLower Lower bounds simulated unexplained variability (default -Inf) sigmaUpper Upper bounds simulated unexplained variability (default Inf) sigmaDf Degrees freedom sigma t-distribution. default equivalent Inf, normal distribution. sigmaIsChol Boolean indicating sigma Cholesky decomposition instead symmetric covariance sigmaSeparation separation strategy sigma; Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. sigmaXform taking sigma values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nCoresRV Number cores used simulation sigma variables. default 1. reproduce results need run platform number cores. reason set one, regardless number cores used threaded ODE solving. nObs Number observations simulate (sigma matrix) dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. simSubjects boolean indicated rxode2 simulate subjects studies (TRUE, default) studies (FALSE) simVariability determines variability simulated. NA (default) determined solver.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"data frame simulated subjects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSimThetaOmega.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate Parameters from a Theta/Omega specification — rxSimThetaOmega","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":null,"dir":"Reference","previous_headings":"","what":"Options, Solving & Simulation of an ODE/solved system — rxSolve","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"uses rxode2 family objects, file, model specification solve ODE system. many options solved rxode2 model, first required object, events -times optional params inits.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"","code":"rxSolve( object, params = NULL, events = NULL, inits = NULL, scale = NULL, method = c(\"liblsoda\", \"lsoda\", \"dop853\", \"indLin\"), sigdig = NULL, atol = 1e-08, rtol = 1e-06, maxsteps = 70000L, hmin = 0, hmax = NA_real_, hmaxSd = 0, hini = 0, maxordn = 12L, maxords = 5L, ..., cores, covsInterpolation = c(\"locf\", \"linear\", \"nocb\", \"midpoint\"), addCov = TRUE, sigma = NULL, sigmaDf = NULL, sigmaLower = -Inf, sigmaUpper = Inf, nCoresRV = 1L, sigmaIsChol = FALSE, sigmaSeparation = c(\"auto\", \"lkj\", \"separation\"), sigmaXform = c(\"identity\", \"variance\", \"log\", \"nlmixrSqrt\", \"nlmixrLog\", \"nlmixrIdentity\"), nDisplayProgress = 10000L, amountUnits = NA_character_, timeUnits = \"hours\", theta = NULL, thetaLower = -Inf, thetaUpper = Inf, eta = NULL, addDosing = FALSE, stateTrim = Inf, updateObject = FALSE, omega = NULL, omegaDf = NULL, omegaIsChol = FALSE, omegaSeparation = c(\"auto\", \"lkj\", \"separation\"), omegaXform = c(\"variance\", \"identity\", \"log\", \"nlmixrSqrt\", \"nlmixrLog\", \"nlmixrIdentity\"), omegaLower = -Inf, omegaUpper = Inf, nSub = 1L, thetaMat = NULL, thetaDf = NULL, thetaIsChol = FALSE, nStud = 1L, dfSub = 0, dfObs = 0, returnType = c(\"rxSolve\", \"matrix\", \"data.frame\", \"data.frame.TBS\", \"data.table\", \"tbl\", \"tibble\"), seed = NULL, nsim = NULL, minSS = 10L, maxSS = 1000L, infSSstep = 12, strictSS = TRUE, istateReset = TRUE, subsetNonmem = TRUE, maxAtolRtolFactor = 0.1, from = NULL, to = NULL, by = NULL, length.out = NULL, iCov = NULL, keep = NULL, indLinPhiTol = 1e-07, indLinPhiM = 0L, indLinMatExpType = c(\"expokit\", \"Al-Mohy\", \"arma\"), indLinMatExpOrder = 6L, drop = NULL, idFactor = TRUE, mxhnil = 0, hmxi = 0, warnIdSort = TRUE, warnDrop = TRUE, ssAtol = 1e-08, ssRtol = 1e-06, safeZero = TRUE, sumType = c(\"pairwise\", \"fsum\", \"kahan\", \"neumaier\", \"c\"), prodType = c(\"long double\", \"double\", \"logify\"), sensType = c(\"advan\", \"autodiff\", \"forward\", \"central\"), linDiff = c(tlag = 1.5e-05, f = 1.5e-05, rate = 1.5e-05, dur = 1.5e-05, tlag2 = 1.5e-05, f2 = 1.5e-05, rate2 = 1.5e-05, dur2 = 1.5e-05), linDiffCentral = c(tlag = TRUE, f = TRUE, rate = TRUE, dur = TRUE, tlag2 = TRUE, f2 = TRUE, rate2 = TRUE, dur2 = TRUE), resample = NULL, resampleID = TRUE, maxwhile = 1e+05, atolSens = 1e-08, rtolSens = 1e-06, ssAtolSens = 1e-08, ssRtolSens = 1e-06, simVariability = NA, nLlikAlloc = NULL, useStdPow = FALSE, naTimeHandle = c(\"ignore\", \"warn\", \"error\"), addlKeepsCov = FALSE, addlDropSs = TRUE, ssAtDoseTime = TRUE, ss2cancelAllPending = FALSE, envir = parent.frame() ) # S3 method for `function` rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxUi rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxode2tos rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for nlmixr2FitData rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for nlmixr2FitCore rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for default rxSolve( object, params = NULL, events = NULL, inits = NULL, ..., theta = NULL, eta = NULL, envir = parent.frame() ) # S3 method for rxSolve update(object, ...) # S3 method for rxode2 predict(object, ...) # S3 method for `function` predict(object, ...) # S3 method for rxUi predict(object, ...) # S3 method for rxSolve predict(object, ...) # S3 method for rxEt predict(object, ...) # S3 method for rxParams predict(object, ...) # S3 method for rxode2 simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxSolve simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxParams simulate(object, nsim = 1L, seed = NULL, ...) # S3 method for rxSolve solve(a, b, ...) # S3 method for rxUi solve(a, b, ...) # S3 method for `function` solve(a, b, ...) # S3 method for rxode2 solve(a, b, ...) # S3 method for rxParams solve(a, b, ...) # S3 method for rxEt solve(a, b, ...) rxControl( ..., params = NULL, events = NULL, inits = NULL, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"object either rxode2 family objects, file-name rxode2 model specification, string rxode2 model specification. params numeric named vector values every parameter ODE system; names must correspond parameter identifiers used ODE specification; events eventTable object describing input (e.g., doses) dynamic system observation sampling time points (see eventTable()); inits vector initial values state variables (e.g., amounts compartment), order vector must state variables (e.g., PK/PD compartments); scale numeric named vector scaling ode parameters system. names must correspond parameter identifiers ODE specification. ODE variables divided scaling factor. example scale=c(center=2) divide center ODE variable 2. method method solving ODEs. Currently supports: \"liblsoda\" thread safe lsoda. supports parallel thread-based solving, ignores user Jacobian specification. \"lsoda\" -- LSODA solver. support parallel thread-based solving, allows user Jacobian specification. \"dop853\" -- DOP853 solver. support parallel thread-based solving user Jacobian specification \"indLin\" -- Solving inductive linearization. rxode2 dll must setup specially use solving routine. sigdig Specifies \"significant digits\" ode solving requests. specified controls relative absolute tolerances ODE solvers. default tolerance 0.5*10^(-sigdig-2) regular ODEs. sensitivity equations default 0.5*10\\^(-sigdig-1.5) (sensitivity changes applicable liblsoda). also controls atol/rtol steady state solutions. ssAtol/ssRtol 0.5*10\\^(-sigdig) sensitivities 0.5*10\\^(-sigdig+0.625). default unspecified (NULL) uses standard atol/rtol. atol numeric absolute tolerance (1e-8 default) used ODE solver determine good solution achieved; also used solved linear model check prior doses add anything solution. rtol numeric relative tolerance (1e-6 default) used ODE solver determine good solution achieved. also used solved linear model check prior doses add anything solution. maxsteps maximum number (internally defined) steps allowed one call solver. (5000 default) hmin minimum absolute step size allowed. default value 0. hmax maximum absolute step size allowed. hmax=NA (default), uses average difference + hmaxSd*sd times sampling events. hmaxSd user specified parameter defaults zero. hmax=NULL rxode2 uses maximum difference times sampling events. value 0 equivalent infinite maximum absolute step size. hmaxSd number standard deviations time difference add hmax. default 0 hini step size attempted first step. default value determined solver (hini = 0) maxordn maximum order allowed nonstiff (Adams) method. default 12. can 1 12. maxords maximum order allowed stiff (BDF) method. default value 5. can 1 5. ... arguments including scaling factors compartment. includes S# = numeric scale compartment # dividing compartment amount scale factor, like NONMEM. cores Number cores used parallel ODE solving. equivalent calling setRxThreads() covsInterpolation specifies interpolation method time-varying covariates. solving ODEs often samples times outside sampling time specified events. happens, time varying covariates interpolated. Currently can : \"linear\" interpolation, interpolates covariate solving line observed covariates extrapolating new covariate value. \"constant\" -- Last observation carried forward (default). \"NOCB\" -- Next Observation Carried Backward. method NONMEM uses. \"midpoint\" Last observation carried forward midpoint; Next observation carried backward midpoint. addCov boolean indicating covariates added output matrix data frame. default disabled. sigma Named sigma covariance Cholesky decomposition covariance matrix. names columns indicate parameters simulated. simulated every observation solved system. sigma NA using rxode2 ui model, unexplained variability described sigma matrix set zero. sigmaDf Degrees freedom sigma t-distribution. default equivalent Inf, normal distribution. sigmaLower Lower bounds simulated unexplained variability (default -Inf) sigmaUpper Upper bounds simulated unexplained variability (default Inf) nCoresRV Number cores used simulation sigma variables. default 1. reproduce results need run platform number cores. reason set one, regardless number cores used threaded ODE solving. sigmaIsChol Boolean indicating sigma Cholesky decomposition instead symmetric covariance sigmaSeparation separation strategy sigma; Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. sigmaXform taking sigma values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. nDisplayProgress integer indicating minimum number c-based solves progress bar shown. default 10,000. amountUnits supplies dose units data frame supplied instead event table. importing data rxode2 event table. timeUnits supplies time units data frame supplied instead event table. importing data rxode2 event table. theta vector parameters named THETA\\[#\\] added parameters thetaLower Lower bounds simulated population parameter variability (default -Inf) thetaUpper Upper bounds simulated population unexplained variability (default Inf) eta vector parameters named ETA\\[#\\] added parameters addDosing Boolean indicating solve add rxode2 EVID related columns. also include dosing information estimates doses. default, rxode2 includes estimates observations. (default FALSE). addDosing NULL, include EVID=0 solve exclude model-times EVID=2. addDosing NA classic rxode2 EVID events returned. addDosing TRUE add event information NONMEM-style format; subsetNonmem=FALSE rxode2 also include extra event types (EVID) ending infusion modeled times: EVID=-1 modeled rate infusions turned (matches rate=-1) EVID=-2 modeled duration infusions turned (matches rate=-2) EVID=-10 specified rate infusions turned (matches rate>0) EVID=-20 specified dur infusions turned (matches dur>0) EVID=101,102,103,... Modeled time 101 first model time, 102 second etc. stateTrim amounts/concentrations one states value, trim value. default Inf. Also trims -stateTrim large negative amounts/concentrations. want trim range say c(0, 2000000) may specify 2 values lower upper range make sure state values reasonable range. updateObject internally used flag update rxode2 solved object (supplying rxode2 solved object) well returning new object. probably modify FALSE default unless willing unexpected results. omega Estimate Covariance matrix. omega list, assume block matrix convert full matrix simulations. omega NA using rxode2 ui model, subject variability described omega matrix set zero. omegaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. omegaIsChol Indicates omega supplied Cholesky decomposed matrix instead traditional symmetric matrix. omegaSeparation Omega separation strategy Tells type separation strategy simulating covariance parameter uncertainty standard deviations modeled thetaMat matrix. \"lkj\" simulates correlation matrix rLKJ1 matrix distribution parameter eta equal degrees freedom nu (nu-1)/2 \"separation\" simulates identity inverse Wishart covariance matrix nu degrees freedom. converted covariance matrix augmented modeled standard deviations. computationally complex \"lkj\" prior, performs better covariance matrix size greater equal 10 \"auto\" chooses \"lkj\" dimension matrix less 10 \"separation\" greater equal 10. omegaXform taking omega values thetaMat simulations (using separation strategy covariance simulation), thetaMat values turned int standard deviation values: identity standard deviation values directly modeled params thetaMat matrix variance params thetaMat simulates variance directly modeled thetaMat matrix log params thetaMat simulates log(sd) nlmixrSqrt params thetaMat simulates inverse cholesky decomposed matrix x\\^2 modeled along diagonal. works diagonal matrix. nlmixrLog params thetaMat simulates inverse cholesky decomposed matrix exp(x\\^2) along diagonal. works diagonal matrix. nlmixrIdentity params thetaMat simulates inverse cholesky decomposed matrix. works diagonal matrix. omegaLower Lower bounds simulated ETAs (default -Inf) omegaUpper Upper bounds simulated ETAs (default Inf) nSub Number subject variabilities (ETAs) simulated every realization parameters. thetaMat Named theta matrix. thetaDf degrees freedom t-distribution simulation. default NULL equivalent Inf degrees, simulate normal distribution instead t-distribution. thetaIsChol Indicates theta supplied Cholesky decomposed matrix instead traditional symmetric matrix. nStud Number virtual studies characterize uncertainty estimated parameters. dfSub Degrees freedom sample subject variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. dfObs Degrees freedom sample unexplained variability matrix inverse Wishart distribution (scaled) scaled inverse chi squared distribution. returnType tells type object returned. currently supported types : \"rxSolve\" (default) return reactive data frame can change easily change different pieces solve update data frame. currently standard solving method rxode2, used rxSolve(object, ...), solve(object,...), \"data.frame\" -- returns plain, non-reactive data frame; Currently slightly faster returnType=\"matrix\" \"matrix\" -- returns plain matrix column names attached solved object. used object$run well object$solve \"data.table\" -- returns data.table; data.table created reference (ie setDt()), fast. \"tbl\" \"tibble\" returns tibble format. seed object specifying random number generator initialized nsim represents number simulations. rxode2, supply single subject event tables (created [eventTable()]) minSS Minimum number iterations steady-state dose maxSS Maximum number iterations steady-state dose infSSstep Step size determining constant infusion reached steady state. default large value, 12. strictSS Boolean indicating strict steady-state required. strict steady-state (TRUE) required least minSS doses administered total number steady states doses continue maxSS reached, atol rtol every compartment reached. However, ODE solving problems occur minSS reached whole subject considered invalid solve. strictSS FALSE long minSS reached last good solve ODE solving problems occur considered steady state, even though either atol, rtol maxSS achieved. istateReset TRUE, reset ISTATE variable 1 lsoda liblsoda doses, like deSolve; FALSE, reset ISTATE variable doses. subsetNonmem subset NONMEM compatible EVIDs . default TRUE. maxAtolRtolFactor maximum atol/rtol FOCEi routines may adjust . default 0.1 observations event table, start observations value. default zero. observations event table, end observations value. default 24 + maximum dose time. observations event table, amount increment observations . length.number observations create observations event table. default 200. iCov data frame individual non-time varying covariates combine events dataset merge. keep Columns keep either input dataset iCov dataset. iCov dataset, column kept per line. input dataset, records added data LOCF (Last Observation Carried forward) imputation performed. indLinPhiTol requested accuracy tolerance exponential matrix. indLinPhiM maximum size Krylov basis indLinMatExpType matrix exponential type use rxode2. Currently following supported: Al-Mohy Uses exponential matrix method Al-Mohy Higham (2009) arma Use exponential matrix RcppArmadillo expokit Use exponential matrix Roger B. Sidje (1998) indLinMatExpOrder integer, order approximation used, Al-Mohy expokit values. best value depends machine precision (slightly matrix). use 6 default. drop Columns drop output idFactor boolean indicates original ID values maintained. changes default sequentially ordered ID factor original ID values original dataset. default enabled. mxhnil maximum number messages printed (per problem) warning T + H = T step (H = step size). must positive result non-default value. default value 0 (infinite). hmxi inverse maximum absolute value H used. hmxi = 0.0 allowed corresponds infinite hmax1 (default). hminandhmximay changed time, take effect next change ofHis considered. option considered withmethod=\"liblsoda\"`. warnIdSort Warn ID present rxode2 assumes order parameters/iCov order parameters input dataset. warnDrop Warn column(s) supposed dropped, present. ssAtol Steady state atol convergence factor. Can vector based state. ssRtol Steady state rtol convergence factor. Can vector based state. safeZero Use safe zero divide log routines. default turned may turn wish. sumType Sum type use sum() rxode2 code blocks. pairwise uses pairwise sum (fast, default) fsum uses PreciseSum package's fsum function (accurate) kahan uses Kahan correction neumaier uses Neumaier correction c uses correction: default/native summing prodType Product use prod() rxode2 blocks long double converts long double, performs multiplication converts back. double uses standard double scale multiplication. sensType Sensitivity type linCmt() model: advan Use direct advan solutions autodiff Use autodiff advan solutions forward Use forward difference solutions central Use central differences linDiff gives linear difference amount types linear compartment model parameters sensitivities calculated. named components numeric vector : \"lag\" Central compartment lag \"f\" Central compartment bioavailability \"rate\" Central compartment modeled rate \"dur\" Central compartment modeled duration \"lag2\" Depot compartment lag \"f2\" Depot compartment bioavailability \"rate2\" Depot compartment modeled rate \"dur2\" Depot compartment modeled duration linDiffCentral gives parameters use central differences linear compartment model parameters. components linDiff resample character vector model variables resample input dataset; sampling done replacement. NULL FALSE resampling done. TRUE resampling done covariates input dataset resampleID boolean representing resampling done individual basis TRUE (ie. whole patient selected) covariate resampled independent subject identifier FALSE. resampleID=TRUE correlations parameters retained, resampleID=FALSE ignores patient covariate correaltions. Hence default resampleID=TRUE. maxwhile represents maximum times loop evaluated exiting. default 100000 atolSens Sensitivity atol, can different atol liblsoda. allows less accurate solve gradients (desired) rtolSens Sensitivity rtol, can different rtol liblsoda. allows less accurate solve gradients (desired) ssAtolSens Sensitivity absolute tolerance (atol) calculating steady state achieved sensitivity compartments. ssRtolSens Sensitivity relative tolerance (rtol) calculating steady state achieved sensitivity compartments. simVariability determines variability simulated. NA (default) determined solver. nLlikAlloc number log likelihood endpoints used model. allows independent log likelihood per endpoint focei nlmixr2. likely set, though hurt anything (just may take memory larger allocations). useStdPow uses C's pow exponentiation instead R's R_pow R_pow_di. default FALSE naTimeHandle Determines time handling happens time becomes NA: current options : ignore ignores NA time input passes . warn (default) produce warning end solve, continues solving passing NA time error stop solve parallel solved ODE (otherwise stopping can crash R) addlKeepsCov determines additional dosing items repeats dose (FALSE) keeps covariates record dose (TRUE) addlDropSs steady state doses addl specification steady state flag dropped repeated doses (TRUE) retained (FALSE) ssAtDoseTime Boolean TRUE back calculates steady concentration actual time dose, otherwise FALSE doses shifted ss2cancelAllPending TRUE SS=2 event type cancels pending doses like SS=1. FALSE pending doses canceled SS=2 (infusions started SS=2 occurred canceled, though). envir environment look R user functions (defaults parent environment) using solve(), equivalent object argument. specify object later argument list overwrites parameter. b using solve(), equivalent params argument. specify params named argument, overwrites output","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"“rxSolve” solve object stores solved value special data.frame type determined returnType. default many rows sampled time points many columns system variables (defined ODEs additional assignments rxode2 model code). also stores information call allow dynamic updating solved object. operations object similar data-frame, expand $ [[\"\"]] access operators assignment operators resolve based different parameter values, initial conditions, solver parameters, events (updating time variable). can call eventTable() methods solved object update event table resolve system equations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"rest document focus different ODE solving methods, followed core solving method's options, rxode2 event handling options, rxode2's numerical stability options, rxode2's output options, finally internal rxode2 options compatibility options.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"\"New Scaling Squaring Algorithm Matrix Exponential\", Awad H. Al-Mohy Nicholas J. Higham, August 2009 Roger B. Sidje (1998). EXPOKIT: Software package computing matrix exponentials. ACM - Transactions Mathematical Software 24(1), 130-156. Hindmarsh, . C. ODEPACK, Systematized Collection ODE Solvers. Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pp. 55-64. Petzold, L. R. Automatic Selection Methods Solving Stiff Nonstiff Systems Ordinary Differential Equations. Siam J. Sci. Stat. Comput. 4 (1983), pp. 136-148. Hairer, E., Norsett, S. P., Wanner, G. Solving ordinary differential equations , nonstiff problems. 2nd edition, Springer Series Computational Mathematics, Springer-Verlag (1993).","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Options, Solving & Simulation of an ODE/solved system — rxSolve","text":"Matthew Fidler, Melissa Hallow Wenping Wang","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":null,"dir":"Reference","previous_headings":"","what":"Free the C solving/parsing information. — rxSolveFree","title":"Free the C solving/parsing information. — rxSolveFree","text":"Take ODE C system free .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Free the C solving/parsing information. — rxSolveFree","text":"","code":"rxSolveFree()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveFree.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Free the C solving/parsing information. — rxSolveFree","text":"logical indicating memory successfully freed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":null,"dir":"Reference","previous_headings":"","what":"See if the memory is installed for a solve — rxSolveSetup","title":"See if the memory is installed for a solve — rxSolveSetup","text":"See memory installed solve","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"See if the memory is installed for a solve — rxSolveSetup","text":"","code":"rxSolveSetup()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"See if the memory is installed for a solve — rxSolveSetup","text":"boolean saying memnory currently free rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSolveSetup.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"See if the memory is installed for a solve — rxSolveSetup","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":null,"dir":"Reference","previous_headings":"","what":"This function splits a function based on + or - terms — rxSplitPlusQ","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"uses parser disturb terms within functions. example:","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"","code":"rxSplitPlusQ(x, level = 0, mult = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"x Quoted R expression splitting level Internal level parsing mult boolean split based * / expressions instead. default turned .","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"character vector split expressions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"aexp(b+c)+dlog(e-f)-g*f return c(\"* exp(b + c)\", \"d * log(e - f)\", \"- g * f\")","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSplitPlusQ.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This function splits a function based on + or - terms — rxSplitPlusQ","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":null,"dir":"Reference","previous_headings":"","what":"State variables — rxState","title":"State variables — rxState","text":"returns model's compartments states.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"State variables — rxState","text":"","code":"rxState(obj = NULL, state = NULL)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"State variables — rxState","text":"obj rxode2 family objects state string indicating state compartment like lookup.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"State variables — rxState","text":"state missing, return character vector states. state string, return compartment number named state.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxState.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"State variables — rxState","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":null,"dir":"Reference","previous_headings":"","what":"Recast model in terms of sum/prod — rxSumProdModel","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"Recast model terms sum/prod","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"","code":"rxSumProdModel(model, expand = FALSE, sum = TRUE, prod = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"model rxode2 model expand Boolean indicating expression expanded. sum Use sum(...) prod Use prod(...)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"model string prod(.) sum(.) operations.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSumProdModel.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Recast model in terms of sum/prod — rxSumProdModel","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":null,"dir":"Reference","previous_headings":"","what":"Get list of supported functions — rxSupportedFuns","title":"Get list of supported functions — rxSupportedFuns","text":"Get list supported functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get list of supported functions — rxSupportedFuns","text":"","code":"rxSupportedFuns()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get list of supported functions — rxSupportedFuns","text":"list supported functions rxode2","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSupportedFuns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get list of supported functions — rxSupportedFuns","text":"","code":"rxSupportedFuns() #> [1] \"gammafn\" \"lgammafn\" \"lgamma\" #> [4] \"loggamma\" \"digamma\" \"trigamma\" #> [7] \"tetragamma\" \"pentagamma\" \"cospi\" #> [10] \"sinpi\" \"tanpi\" \"log1p\" #> [13] \"expm1\" \"factorial\" \"lfactorial\" #> [16] \"lgamma1p\" \"log10\" \"log2\" #> [19] \"log1pexp\" \"phi\" \"pnorm\" #> [22] \"normcdf\" \"qnorm\" \"fabs\" #> [25] \"pow\" \"R_pow\" \"R_pow_di\" #> [28] \"Rx_pow_di\" \"Rx_pow\" \"lbeta\" #> [31] \"abs\" \"acos\" \"acosh\" #> [34] \"asin\" \"asinh\" \"atan\" #> [37] \"atan2\" \"atanh\" \"beta\" #> [40] \"cos\" \"cosh\" \"erf\" #> [43] \"erfc\" \"exp\" \"gamma\" #> [46] \"linCmtA\" \"linCmtC\" \"linCmtB\" #> [49] \"log\" \"polygamma\" \"rxTBS\" #> [52] \"rxTBSi\" \"rxTBSd\" \"rxTBSd2\" #> [55] \"sin\" \"sinh\" \"sqrt\" #> [58] \"tan\" \"tanh\" \"gammap\" #> [61] \"floor\" \"round\" \"ceil\" #> [64] \"trunc\" \"bessel_i\" \"bessel_j\" #> [67] \"bessel_k\" \"bessel_y\" \"logspace_add\" #> [70] \"logspace_sub\" \"fmax2\" \"fmin2\" #> [73] \"sign\" \"fsign\" \"fprec\" #> [76] \"fround\" \"ftrunc\" \"transit\" #> [79] \"gammaq\" \"gammapDer\" \"gammapInv\" #> [82] \"gammapInva\" \"gammaqInv\" \"gammaqInva\" #> [85] \"lowergamma\" \"uppergamma\" \"max\" #> [88] \"min\" \"logit\" \"expit\" #> [91] \"probit\" \"probitInv\" \"tlast\" #> [94] \"tfirst\" \"lag\" \"lead\" #> [97] \"dose\" \"podo\" \"dabs\" #> [100] \"dabs2\" \"abs1\" \"dabs1\" #> [103] \"erfinv\" \"abs0\" \"dosenum\" #> [106] \"first\" \"last\" \"diff\" #> [109] \"is.nan\" \"is.na\" \"is.finite\" #> [112] \"is.infinite\" \"llikPois\" \"llikPoisDlambda\" #> [115] \"llikBinom\" \"llikBinomDprob\" \"llikNbinom\" #> [118] \"llikNbinomDprob\" \"llikNbinomMu\" \"llikNbinomMuDmu\" #> [121] \"llikBeta\" \"llikBetaDshape1\" \"llikBetaDshape2\" #> [124] \"llikT\" \"llikTDdf\" \"llikTDmean\" #> [127] \"llikTDsd\" \"llikChisq\" \"llikChisqDdf\" #> [130] \"llikExp\" \"llikExpDrate\" \"llikF\" #> [133] \"llikFDdf1\" \"llikFDdf2\" \"llikGeom\" #> [136] \"llikGeomDprob\" \"llikUnif\" \"llikUnifDalpha\" #> [139] \"llikUnifDbeta\" \"llikWeibull\" \"llikWeibullDshape\" #> [142] \"llikWeibullDscale\" \"llikGamma\" \"llikGammaDshape\" #> [145] \"llikGammaDrate\" \"llikCauchy\" \"llikCauchyDlocation\" #> [148] \"llikCauchyDscale\" \"llikNorm\" \"llikNormDmean\" #> [151] \"llikNormDsd\" \"llikXPois\" \"llikXPoisDlambda\" #> [154] \"llikXBinom\" \"llikXBinomDprob\" \"llikXNbinomMu\" #> [157] \"llikXNbinomMuDmu\" \"llikXNbinom\" \"llikXNbinomDprob\" #> [160] \"llikXBeta\" \"llikXBetaDshape1\" \"llikXBetaDshape2\" #> [163] \"llikXT\" \"llikXTDdf\" \"llikXTDmean\" #> [166] \"llikXTDsd\" \"llikXChisq\" \"llikXChisqDdf\" #> [169] \"llikXExp\" \"llikXExpDrate\" \"llikXF\" #> [172] \"llikXFDdf1\" \"llikXFDdf2\" \"llikXGeom\" #> [175] \"llikXGeomDprob\" \"llikXUnif\" \"llikXUnifDalpha\" #> [178] \"llikXUnifDbeta\" \"llikXWeibull\" \"llikXWeibullDshape\" #> [181] \"llikXWeibullDscale\" \"llikXGamma\" \"llikXGammaDshape\" #> [184] \"llikXGammaDrate\" \"llikXCauchy\" \"llikXCauchyDlocation\" #> [187] \"llikXCauchyDscale\" \"llikXNorm\" \"llikXNormDmean\" #> [190] \"llikXNormDsd\" \"linCmt\" \"rnorm\" #> [193] \"rxnorm\" \"rxbinom\" \"rbinom\" #> [196] \"rxcauchy\" \"rcauchy\" \"rchisq\" #> [199] \"rxchisq\" \"rexp\" \"rxexp\" #> [202] \"rbeta\" \"rxbeta\" \"rgeom\" #> [205] \"rxgeom\" \"rxpois\" \"rpois\" #> [208] \"rxt\" \"rt\""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":null,"dir":"Reference","previous_headings":"","what":"Respect suppress messages — rxSuppressMsg","title":"Respect suppress messages — rxSuppressMsg","text":"turns silent REprintf C suppressMessages() turned . makes REprintf act like messages R, can suppressed suppressMessages()","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Respect suppress messages — rxSuppressMsg","text":"","code":"rxSuppressMsg()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Respect suppress messages — rxSuppressMsg","text":"Nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Respect suppress messages — rxSuppressMsg","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSuppressMsg.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Respect suppress messages — rxSuppressMsg","text":"","code":"# rxSupressMsg() is called with rxode2() # Note the errors are output to the console try(rxode2(\"d/dt(matt)=/3\"), silent = TRUE) #> #> # When using suppressMessages, the output is suppressed suppressMessages(try(rxode2(\"d/dt(matt)=/3\"), silent = TRUE)) # In rxode2, we use REprintf so that interrupted threads do not crash R # if there is a user interrupt. This isn't captured by R's messages, but # This interface allows the `suppressMessages()` to suppress the C printing # as well # If you want to suppress messages from rxode2 in other packages, you can use # this function"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Omega^-1 and derivatives — rxSymInvChol","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Get Omega^-1 derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"","code":"rxSymInvChol( invObjOrMatrix, theta = NULL, type = \"cholOmegaInv\", thetaNumber = 0L )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"invObjOrMatrix Object inverse-type calculations. matrix, setup object inversion rxSymInvCholCreate() default arguments return reactive s3 object. Otherwise, use inversion object calculate requested derivative/inverse. theta Thetas used calculation. missing (NULL), special s3 class created returned access Omega^1 objects needed cache based theta used. type type object. Currently following types supported: cholOmegaInv gives Cholesky decomposition Omega Inverse matrix. omegaInv gives Omega Inverse matrix. d(omegaInv) gives d(Omega^-1) withe respect theta parameter specified thetaNumber. d(D) gives d(diagonal(Omega^-1)) respect theta parameter specified thetaNumber parameter thetaNumber types d(omegaInv) d(D), theta number derivative taken . must positive 1 number thetas defining Omega matrix.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Matrix based parameters environment matrixes calculated variables omega, omegaInv, dOmega, dOmegaInv.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvChol.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get Omega^-1 and derivatives — rxSymInvChol","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"Creates object calculating Omega/Omega^-1 derivatives","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"","code":"rxSymInvCholCreate( mat, diag.xform = c(\"sqrt\", \"log\", \"identity\"), create.env = TRUE, envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"mat Initial Omega matrix diag.xform transformation diagonal elements OMEGA. chol(Omega^-1) create.env -- Create environment calculate inverses. (default TRUE) envir -- Environment evaluate function, bu default parent frame.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"rxSymInv object rxSymInv environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholCreate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates an object for calculating Omega/Omega^-1 and derivatives — rxSymInvCholCreate","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"Return dimension built-derivatives/inverses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"","code":"rxSymInvCholN()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSymInvCholN.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the dimension of the built-in derivatives/inverses — rxSymInvCholN","text":"dimension built-derivatives/inverses","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":null,"dir":"Reference","previous_headings":"","what":"Sync options with rxode2 variables — rxSyncOptions","title":"Sync options with rxode2 variables — rxSyncOptions","text":"Accessing rxode2 options via getOption slows solving. allows options synced variables.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sync options with rxode2 variables — rxSyncOptions","text":"","code":"rxSyncOptions(setDefaults = c(\"none\", \"permissive\", \"strict\"))"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sync options with rxode2 variables — rxSyncOptions","text":"setDefaults setup rxode2's default solving options following options: \"none\" leave options alone \"permissive\" permissive option set similar R language specifications. \"strict\" strict option set similar original rxode2(). requires semicolons end lines equals assignment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sync options with rxode2 variables — rxSyncOptions","text":"nothing; called side effects","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyncOptions.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Sync options with rxode2 variables — rxSyncOptions","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":null,"dir":"Reference","previous_headings":"","what":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"list description Rode supported syntax functions","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"","code":"rxSyntaxFunctions"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxSyntaxFunctions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"A list and description of Rode supported syntax functions — rxSyntaxFunctions","text":"data frame 3 columns 98 rows Function Reserved function Name Description Description function Aliases Function Aliases","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the rxode2 temporary directory — rxTempDir","title":"Get the rxode2 temporary directory — rxTempDir","text":"Get rxode2 temporary directory","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the rxode2 temporary directory — rxTempDir","text":"","code":"rxTempDir()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTempDir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the rxode2 temporary directory — rxTempDir","text":"rxode2 temporary directory.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":null,"dir":"Reference","previous_headings":"","what":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"rxTheme ggplot2 theme rxode2 plots","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"","code":"rxTheme( base_size = 11, base_family = \"\", base_line_size = base_size/22, base_rect_size = base_size/22, grid = TRUE )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"base_size base font size, given pts. base_family base font family base_line_size base size line elements base_rect_size base size rect elements grid Boolean indicating grid (TRUE) (FALSE). also character indicating x y.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTheme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxTheme is the ggplot2 theme for rxode2 plots — rxTheme","text":"ggplot2 theme used rxode2","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":null,"dir":"Reference","previous_headings":"","what":"rxode2 to symengine environment — rxToSE","title":"rxode2 to symengine environment — rxToSE","text":"rxode2 symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rxode2 to symengine environment — rxToSE","text":"","code":"rxToSE( x, envir = NULL, progress = FALSE, promoteLinSens = TRUE, parent = parent.frame() ) .rxToSE(x, envir = NULL, progress = FALSE) rxFromSE( x, unknownDerivatives = c(\"forward\", \"central\", \"error\"), parent = parent.frame() ) .rxFromSE(x)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rxode2 to symengine environment — rxToSE","text":"x expression envir default NULL; Environment put symengine variables . progress shows progress bar true. promoteLinSens Promote solved linear compartment systems sensitivity-based solutions. parent parent environment look R-based user functions unknownDerivatives handling derivatives unknown functions, translator translate different types numeric derivatives. currently supported methods :","code":"- `forward` for forward differences - `central` for central differences - `error` for throwing an error for unknown derivatives"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rxode2 to symengine environment — rxToSE","text":"rxode2 symengine environment","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxToSE.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rxode2 to symengine environment — rxToSE","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":null,"dir":"Reference","previous_headings":"","what":"Translate the model to C code if needed — rxTrans","title":"Translate the model to C code if needed — rxTrans","text":"function translates model C code, needed","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Translate the model to C code if needed — rxTrans","text":"","code":"rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... ) # S3 method for default rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... ) # S3 method for character rxTrans( model, modelPrefix = \"\", md5 = \"\", modName = NULL, modVars = FALSE, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Translate the model to C code if needed — rxTrans","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . modelPrefix Prefix model functions compiled make sure multiple rxode2 objects can coexist R session. md5 md5 model parsing, used embed md5 DLL, provide functions like rxModelVars(). modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. modVars returns model variables instead named vector translated properties. ... Ignored parameters.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Translate the model to C code if needed — rxTrans","text":"named vector translated model properties including type jacobian specified, C function prefixes, well C functions names called compiled model.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxTrans.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Translate the model to C code if needed — rxTrans","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":null,"dir":"Reference","previous_headings":"","what":"Compress/Decompress rxode2 ui — rxUiDecompress","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"Compress/Decompress rxode2 ui","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"","code":"rxUiDecompress(ui) rxUiCompress(ui)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"ui rxode2 ui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"compressed decompressed rxui object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiDecompress.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compress/Decompress rxode2 ui — rxUiDecompress","text":"","code":"one.cmt <- function() { ini({ ## You may label each parameter with a comment tka <- 0.45 # Log Ka tcl <- log(c(0, 2.7, 100)) # Log Cl ## This works with interactive models ## You may also label the preceding line with label(\"label text\") tv <- 3.45; label(\"log V\") ## the label(\"Label name\") works with all models eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) linCmt() ~ add(add.sd) | tmp }) } f <- rxode2(one.cmt) #> #> #> ℹ parameter labels from comments will be replaced by 'label()' print(class(f)) #> [1] \"rxUi\" \"raw\" print(is.environment(f)) #> [1] FALSE f <- rxUiDecompress(f) print(class(f)) #> [1] \"rxUi\" print(is.environment(f)) #> [1] TRUE f <- rxUiCompress(f) print(class(f)) #> [1] \"rxUi\" \"raw\" print(is.environment(f)) #> [1] FALSE"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":null,"dir":"Reference","previous_headings":"","what":"S3 for getting information from UI model — rxUiGet.cmtLines","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"S3 getting information UI model","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"","code":"# S3 method for cmtLines rxUiGet(x, ...) # S3 method for dvidLine rxUiGet(x, ...) # S3 method for paramsLine rxUiGet(x, ...) # S3 method for simulationSigma rxUiGet(x, ...) # S3 method for simulationModel rxUiGet(x, ...) # S3 method for symengineModelNoPrune rxUiGet(x, ...) # S3 method for symengineModelPrune rxUiGet(x, ...) # S3 method for simulationIniModel rxUiGet(x, ...) rxUiGet(x, ...) # S3 method for params rxUiGet(x, ...) # S3 method for theta rxUiGet(x, ...) # S3 method for lstChr rxUiGet(x, ...) # S3 method for omega rxUiGet(x, ...) # S3 method for funTxt rxUiGet(x, ...) # S3 method for allCovs rxUiGet(x, ...) # S3 method for muRefTable rxUiGet(x, ...) # S3 method for multipleEndpoint rxUiGet(x, ...) # S3 method for funPrint rxUiGet(x, ...) # S3 method for fun rxUiGet(x, ...) # S3 method for md5 rxUiGet(x, ...) # S3 method for ini rxUiGet(x, ...) # S3 method for iniFun rxUiGet(x, ...) # S3 method for modelFun rxUiGet(x, ...) # S3 method for model rxUiGet(x, ...) # S3 method for modelDesc rxUiGet(x, ...) # S3 method for thetaLower rxUiGet(x, ...) # S3 method for thetaUpper rxUiGet(x, ...) # S3 method for lhsVar rxUiGet(x, ...) # S3 method for varLhs rxUiGet(x, ...) # S3 method for lhsEta rxUiGet(x, ...) # S3 method for lhsTheta rxUiGet(x, ...) # S3 method for lhsCov rxUiGet(x, ...) # S3 method for etaLhs rxUiGet(x, ...) # S3 method for thetaLhs rxUiGet(x, ...) # S3 method for covLhs rxUiGet(x, ...) # S3 method for default rxUiGet(x, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"x list (UIenvironment, exact). UI environment parsed function rxode2. exact boolean says exact match required. ... arguments","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"value requested UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUiGet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"S3 for getting information from UI model — rxUiGet.cmtLines","text":"Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":null,"dir":"Reference","previous_headings":"","what":"Unloads all rxode2 compiled DLLs — rxUnloadAll","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"Unloads rxode2 compiled DLLs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"","code":"rxUnloadAll()"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"List rxode2 dlls still loaded boolean rxode2 dlls unloaded","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUnloadAll.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Unloads all rxode2 compiled DLLs — rxUnloadAll","text":"","code":"print(rxUnloadAll()) #> NULL"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":null,"dir":"Reference","previous_headings":"","what":"Use model object in your package — rxUse","title":"Use model object in your package — rxUse","text":"Use model object package","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use model object in your package — rxUse","text":"","code":"rxUse(obj, overwrite = TRUE, compress = \"bzip2\", internal = FALSE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use model object in your package — rxUse","text":"obj model save. overwrite default, use_data() overwrite existing files. really want , set TRUE. compress Choose type compression used save(). one \"gzip\", \"bzip2\", \"xz\". internal run internally. default FALSE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxUse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Use model object in your package — rxUse","text":"Nothing; used side effects called user","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":null,"dir":"Reference","previous_headings":"","what":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"Validate rxode2 allows easy validation/qualification nlmixr running testing suite system.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"","code":"rxValidate(type = NULL, skipOnCran = TRUE) rxTest(type = NULL, skipOnCran = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"type Type test filter test type, expression, evaluate contents, respecting skipOnCran skipOnCran TRUE skip test CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"nothing","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxValidate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Validate rxode2 This allows easy validation/qualification of nlmixr by running the testing suite on your system. — rxValidate","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Version and repository for this dparser package. — rxVersion","title":"Version and repository for this dparser package. — rxVersion","text":"Version repository dparser package.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Version and repository for this dparser package. — rxVersion","text":"","code":"rxVersion( extra = \"\", echo = FALSE, version = sessionInfo()$otherPkgs$rxode2$Version )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Version and repository for this dparser package. — rxVersion","text":"extra extra text display logo echo Boolean echo text logo, default FALSE version Version display/return","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Version and repository for this dparser package. — rxVersion","text":"character vector version repository.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxVersion.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Version and repository for this dparser package. — rxVersion","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate beta variable from threefry generator — rxbeta","title":"Simulate beta variable from threefry generator — rxbeta","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate beta variable from threefry generator — rxbeta","text":"","code":"rxbeta(shape1, shape2, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate beta variable from threefry generator — rxbeta","text":"shape1, shape2 non-negative parameters Beta distribution. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate beta variable from threefry generator — rxbeta","text":"beta random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate beta variable from threefry generator — rxbeta","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbeta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate beta variable from threefry generator — rxbeta","text":"","code":"# \\donttest{ ## Use threefry engine rxbeta(0.5, 0.5, n = 10) # with rxbeta you have to explicitly state n #> [1] 0.477852330 0.303485792 0.039549351 0.172127808 0.029142179 0.228528849 #> [7] 0.002045024 0.123955210 0.122974648 0.003892215 rxbeta(5, 1, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.9837921 0.9619446 0.9528713 0.8186334 0.8958941 0.9547040 0.9377216 #> [8] 0.8771444 0.9122368 0.9036474 rxbeta(1, 3) #> [1] 0.4918356 ## This example uses `rxbeta` directly in the model rx <- function() { model({ a <- rxbeta(2, 2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Binomial variable from threefry generator — rxbinom","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"","code":"rxbinom(size, prob, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"size number trials (zero ). prob probability success trial. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"binomial random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Binomial variable from threefry generator — rxbinom","text":"","code":"# \\donttest{ ## Use threefry engine rxbinom(10, 0.9, n = 10) # with rxbinom you have to explicitly state n #> [1] 10 9 9 10 9 9 9 10 10 10 rxbinom(3, 0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0 3 0 2 2 1 2 1 1 3 rxbinom(4, 0.7) #> [1] 2 ## This example uses `rxbinom` directly in the model rx <- function() { model({ a <- rxbinom(1, 0.5) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Cauchy variable from threefry generator — rxcauchy","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"","code":"rxcauchy(location = 0, scale = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"location, scale location scale parameters. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Cauchy random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxcauchy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Cauchy variable from threefry generator — rxcauchy","text":"","code":"# \\donttest{ ## Use threefry engine rxcauchy(0, 1, n = 10) # with rxcauchy you have to explicitly state n #> [1] -4.058532e-01 -3.735548e-01 2.292820e+00 1.715716e+01 -3.247341e+04 #> [6] -1.381140e+00 6.254309e-02 1.008986e+02 1.192805e+01 5.395418e-01 rxcauchy(0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 1.35507665 -0.09529856 0.15545628 0.52832597 2.91300334 0.67517336 #> [7] 2.74087058 0.92316592 1.35864663 -0.36322597 rxcauchy(3) #> [1] 6.705508 ## This example uses `rxcauchy` directly in the model rx <- function() { model({ a <- rxcauchy(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate chi-squared variable from threefry generator — rxchisq","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"","code":"rxchisq(df, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"df degrees freedom (non-negative, can non-integer). n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"chi squared random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxchisq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate chi-squared variable from threefry generator — rxchisq","text":"","code":"# \\donttest{ ## Use threefry engine rxchisq(0.5, n = 10) # with rxchisq you have to explicitly state n #> [1] 8.310255e-01 5.056546e-04 1.283680e-02 1.156829e-01 1.791516e-01 #> [6] 1.262242e+00 7.069398e-01 7.941145e-01 2.610348e-07 7.152674e+00 rxchisq(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 2.285712 4.831273 3.575691 8.457173 6.136148 4.831445 3.387999 1.390385 #> [9] 4.401743 4.226414 rxchisq(1) #> [1] 0.4391989 ## This example uses `rxchisq` directly in the model rx <- function() { model({ a <- rxchisq(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate exponential variable from threefry generator — rxexp","title":"Simulate exponential variable from threefry generator — rxexp","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate exponential variable from threefry generator — rxexp","text":"","code":"rxexp(rate, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate exponential variable from threefry generator — rxexp","text":"rate vector rates. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate exponential variable from threefry generator — rxexp","text":"exponential random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate exponential variable from threefry generator — rxexp","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxexp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate exponential variable from threefry generator — rxexp","text":"","code":"# \\donttest{ ## Use threefry engine rxexp(0.5, n = 10) # with rxexp you have to explicitly state n #> [1] 2.3809833 1.2842193 2.9579776 0.2992783 2.2362850 1.1166611 0.1232554 #> [8] 0.3223169 3.1258548 0.1552611 rxexp(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.18422563 0.04552514 0.03749666 0.07330912 0.13716012 0.77328162 #> [7] 0.40892297 0.07167627 0.24915418 0.04749041 rxexp(1) #> [1] 1.054455 ## This example uses `rxexp` directly in the model rx <- function() { model({ a <- rxexp(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate F variable from threefry generator — rxf","title":"Simulate F variable from threefry generator — rxf","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate F variable from threefry generator — rxf","text":"","code":"rxf(df1, df2, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate F variable from threefry generator — rxf","text":"df1, df2 degrees freedom. Inf allowed. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate F variable from threefry generator — rxf","text":"f random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate F variable from threefry generator — rxf","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate F variable from threefry generator — rxf","text":"","code":"# \\donttest{ ## Use threefry engine rxf(0.5, 0.5, n = 10) # with rxf you have to explicitly state n #> [1] 8.504451e+00 3.630793e+00 8.678236e-03 3.880547e+00 2.243042e+06 #> [6] 2.801723e-01 4.225989e-01 1.000520e-01 3.304096e-01 1.149793e+00 rxf(5, 1, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 2.2338907 11.2163069 0.1898719 4.8782950 2.2084744 7.4676924 #> [7] 1.2271939 7.7742898 0.1681263 4.3235439 rxf(1, 3) #> [1] 0.01338054 ## This example uses `rxf` directly in the model rx <- function() { model({ a <- rxf(2, 2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate gamma variable from threefry generator — rxgamma","title":"Simulate gamma variable from threefry generator — rxgamma","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate gamma variable from threefry generator — rxgamma","text":"","code":"rxgamma(shape, rate = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate gamma variable from threefry generator — rxgamma","text":"shape shape gamma random variable rate alternative way specify scale. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate gamma variable from threefry generator — rxgamma","text":"gamma random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate gamma variable from threefry generator — rxgamma","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate gamma variable from threefry generator — rxgamma","text":"","code":"# \\donttest{ ## Use threefry engine rxgamma(0.5, n = 10) # with rxgamma you have to explicitly state n #> [1] 1.355794e-06 1.184154e-01 9.402169e-03 2.871131e-01 5.795578e-01 #> [6] 1.362098e+00 2.274397e-01 2.389341e-01 2.283278e-02 2.453927e-01 rxgamma(5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 6.081028 4.553699 4.216456 3.053786 2.837575 3.992559 2.974116 4.653716 #> [9] 5.765096 3.788091 rxgamma(1) #> [1] 0.4450636 ## This example uses `rxbeta` directly in the model rx <- function() { model({ a <- rxgamma(2) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate geometric variable from threefry generator — rxgeom","title":"Simulate geometric variable from threefry generator — rxgeom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate geometric variable from threefry generator — rxgeom","text":"","code":"rxgeom(prob, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate geometric variable from threefry generator — rxgeom","text":"prob probability success trial. 0 < prob <= 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate geometric variable from threefry generator — rxgeom","text":"geometric random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate geometric variable from threefry generator — rxgeom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxgeom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate geometric variable from threefry generator — rxgeom","text":"","code":"# \\donttest{ ## Use threefry engine rxgeom(0.5, n = 10) # with rxgeom you have to explicitly state n #> [1] 1 1 0 0 0 1 3 2 0 0 rxgeom(0.25, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0 8 0 13 1 5 6 1 11 6 rxgeom(0.75) #> [1] 0 ## This example uses `rxgeom` directly in the model rx <- function() { model({ a <- rxgeom(0.24) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Binomial variable from threefry generator — rxnbinom","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"","code":"rxnbinom(size, prob, n = 1L, ncores = 1L) rxnbinomMu(size, mu, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"size target number successful trials, dispersion parameter (shape parameter gamma mixing distribution). Must strictly positive, need integer. prob probability success trial. 0 < prob <= 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks mu alternative parametrization via mean: see ‘Details’.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"negative binomial random deviates. Note rxbinom2 uses mu parameterization rxbinom uses prob parameterization (mu=size/(prob+size))","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnbinom.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Binomial variable from threefry generator — rxnbinom","text":"","code":"# \\donttest{ ## Use threefry engine rxnbinom(10, 0.9, n = 10) # with rxbinom you have to explicitly state n #> [1] 9 10 9 8 10 10 8 9 9 10 rxnbinom(3, 0.5, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 3 2 1 3 3 1 3 3 2 2 rxnbinom(4, 0.7) #> [1] 4 # use mu parameter rxnbinomMu(40, 40, n=10) #> [1] 20 24 20 21 21 22 20 21 20 12 ## This example uses `rxbinom` directly in the model rx <- function() { model({ a <- rxnbinom(10, 0.5) }) } et <- et(1, id = 1:100) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ rx <- function() { model({ a <- rxnbinomMu(10, 40) }) } s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate random normal variable from threefry generator — rxnormV","title":"Simulate random normal variable from threefry generator — rxnormV","text":"Simulate random normal variable threefry generator","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate random normal variable from threefry generator — rxnormV","text":"","code":"rxnormV(mean = 0, sd = 1, n = 1L, ncores = 1L) rxnorm(mean = 0, sd = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate random normal variable from threefry generator — rxnormV","text":"mean vector means. sd vector standard deviations. n number observations ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate random normal variable from threefry generator — rxnormV","text":"normal random number deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxnormV.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate random normal variable from threefry generator — rxnormV","text":"","code":"# \\donttest{ ## Use threefry engine rxnorm(n = 10) # with rxnorm you have to explicitly state n #> [1] 0.37076053 -0.96034099 0.02749010 -0.82762453 0.58984915 -1.80511477 #> [7] 0.50379739 -0.67643890 1.45510439 0.04165521 rxnorm(n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] -0.51162593 -1.13782819 0.06566640 -0.12404287 1.79306612 0.83099897 #> [7] -0.44485847 0.06223717 1.88310497 0.22993201 rxnorm(2, 3) ## The first 2 arguments are the mean and standard deviation #> [1] -0.9022625 ## This example uses `rxnorm` directly in the model rx <- function() { model({ a <- rxnorm() }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"Set function body rxUi object retaining object information (like data)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"","code":"rxode2(x, envir = environment(x)) <- value # S3 method for `function` rxode2(x, envir = environment(x)) <- value # S3 method for default rxode2(x, envir = environment(x)) <- value rxode(x, envir = environment(x)) <- value RxODE(x, envir = environment(x)) <- value"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"x rxUi object envir environment assignment ocurs value value assigned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"rxode2 ui/function","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2-set.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set the function body of an rxUi object while retaining other object information (like data) — rxode2<-","text":"","code":"one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } two.compartment <- function() { ini({ lka <- 0.45 ; label(\"Absorption rate (Ka)\") lcl <- 1 ; label(\"Clearance (CL)\") lvc <- 3 ; label(\"Central volume of distribution (V)\") lvp <- 5 ; label(\"Peripheral volume of distribution (Vp)\") lq <- 0.1 ; label(\"Intercompartmental clearance (Q)\") propSd <- 0.5 ; label(\"Proportional residual error (fraction)\") }) model({ ka <- exp(lka) cl <- exp(lcl) vc <- exp(lvc) vp <- exp(lvp) q <- exp(lq) kel <- cl/vc k12 <- q/vc k21 <- q/vp d/dt(depot) <- -ka*depot d/dt(central) <- ka*depot - kel*central - k12*central + k21*peripheral1 d/dt(peripheral1) <- k12*central - k21*peripheral1 cp <- central / vc cp ~ prop(propSd) }) } ui <- rxode2(one.compartment) #> #> rxode2(ui) <- two.compartment"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an ODE-based model specification — rxode2","title":"Create an ODE-based model specification — rxode2","text":"Create dynamic ODE-based model object suitably translation fast C code","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an ODE-based model specification — rxode2","text":"","code":"rxode2( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() ) RxODE( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() ) rxode( model, modName = basename(wd), wd = getwd(), filename = NULL, extraC = NULL, debug = FALSE, calcJac = NULL, calcSens = NULL, collapseModel = FALSE, package = NULL, ..., linCmtSens = c(\"linCmtA\", \"linCmtB\", \"linCmtC\"), indLin = FALSE, verbose = FALSE, fullPrint = getOption(\"rxode2.fullPrint\", FALSE), envir = parent.frame() )"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an ODE-based model specification — rxode2","text":"model ODE model specification. can : string containing set ordinary differential equations (ODE) expressions defining changes dynamic system. file name ODE system equation contained ODE expression enclosed \\{\\} (see also filename argument). details, see sections “Details” rxode2 Syntax . modName string used model name. string used naming various aspects computations, including generating C symbol names, dynamic libraries, etc. Therefore, necessary modName consists simple ASCII alphanumeric characters starting letter. wd character string working directory create subdirectory according modName. specified, subdirectory named “modName.d” created populated C file, dynamic loading library, plus various working files. missing, files created (removed) temporary directory, rxode2 DLL model created current directory named rx_????_platform, example rx_129f8f97fb94a87ca49ca8dafe691e1e_i386.dll filename file name connection object ODE-based model specification resides. one model filename may specified. extraC Extra c code include model. can useful specify functions model. C functions usually take double precision arguments, return double precision values. debug boolean indicating executable compiled verbose debugging information turned . calcJac boolean indicating rxode2 calculate Jacobain according specified ODEs. calcSens boolean indicating rxode2 calculate sensitivities according specified ODEs. collapseModel boolean indicating rxode2 remove LHS variables calculating sensitivities. package Package name pre-compiled binaries. ... ignored arguments. linCmtSens method calculate linCmt() solutions indLin Calculate inductive linearization matrices compile inductive linearization support. verbose TRUE verbose linear compartmental model fullPrint using printf within model, TRUE print every step (except /indLin), otherwise FALSE print calculating d/dt envir environment look R user functions (defaults parent environment)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an ODE-based model specification — rxode2","text":"object (environment) class rxode2 (see Chambers Temple Lang (2001)) consisting following list strings functions:","code":"* `model` a character string holding the source model specification. * `get.modelVars`a function that returns a list with 3 character vectors, `params`, `state`, and `lhs` of variable names used in the model specification. These will be output when the model is computed (i.e., the ODE solved by integration). * `solve`{this function solves (integrates) the ODE. This is done by passing the code to [rxSolve()]. This is as if you called `rxSolve(rxode2object, ...)`, but returns a matrix instead of a rxSolve object. `params`: a numeric named vector with values for every parameter in the ODE system; the names must correspond to the parameter identifiers used in the ODE specification; `events`: an `eventTable` object describing the input (e.g., doses) to the dynamic system and observation sampling time points (see [eventTable()]); `inits`: a vector of initial values of the state variables (e.g., amounts in each compartment), and the order in this vector must be the same as the state variables (e.g., PK/PD compartments); `stiff`: a logical (`TRUE` by default) indicating whether the ODE system is stiff or not. For stiff ODE systems (`stiff = TRUE`), `rxode2` uses the LSODA (Livermore Solver for Ordinary Differential Equations) Fortran package, which implements an automatic method switching for stiff and non-stiff problems along the integration interval, authored by Hindmarsh and Petzold (2003). For non-stiff systems (`stiff = FALSE`), `rxode2` uses `DOP853`, an explicit Runge-Kutta method of order 8(5, 3) of Dormand and Prince as implemented in C by Hairer and Wanner (1993). `trans_abs`: a logical (`FALSE` by default) indicating whether to fit a transit absorption term (TODO: need further documentation and example); `atol`: a numeric absolute tolerance (1e-08 by default); `rtol`: a numeric relative tolerance (1e-06 by default). The output of \\dQuote{solve} is a matrix with as many rows as there are sampled time points and as many columns as system variables (as defined by the ODEs and additional assignments in the rxode2 model code).} * `isValid` a function that (naively) checks for model validity, namely that the C object code reflects the latest model specification. * `version` a string with the version of the `rxode2` object (not the package). * `dynLoad` a function with one `force = FALSE` argument that dynamically loads the object code if needed. * `dynUnload` a function with no argument that unloads the model object code. * `delete` removes all created model files, including C and DLL files. The model object is no longer valid and should be removed, e.g., `rm(m1)`. * `run` deprecated, use `solve`. * `get.index` deprecated. * `getObj` internal (not user callable) function."},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create an ODE-based model specification — rxode2","text":"Rx name rxode2 meant suggest abbreviation Rx medical prescription, thus suggest package emphasis pharmacometrics modeling, including pharmacokinetics (PK), pharmacodynamics (PD), disease progression, drug-disease modeling, etc. ODE-based model specification may coded inside four places: Inside rxode2({}) block statements: Inside rxode2(\"\") string statement: file name loaded rxode2: model function can parsed rxode2: block statement, character string text file internal rxode2 compilation manager translates ODE system C, compiles loads R session. call rxode2 produces object class rxode2 consists list-like structure (environment) various member functions. last type model (model function), call rxode2 creates parsed rxode2 ui can translated rxode2 compilation model. type function required nlmixr2 estimation can extended modified model piping. reason focused documentation. basic model specification consists one statements optionally terminated semi-colons ; optional comments (comments delimited # end--line). block statements set statements delimited curly braces, { ... }. Statements can either assignments, conditional /else /else, loops (can exited break), special statements, printing statements (debugging/testing). Assignment statements can : simple assignments, left hand identifier (.e., variable) special time-derivative assignments, left hand specifies change amount corresponding state variable (compartment) respect time e.g., d/dt(depot): special initial-condition assignments left hand specifies compartment initial condition specified, e.g. depot(0) = 0 special model event changes including bioavailability (f(depot)=1), lag time (alag(depot)=0), modeled rate (rate(depot)=2) modeled duration (dur(depot)=2). example model features event specification modeled infusions rxode2 data specification found rxode2 events vignette. special change point syntax, model times. model times specified mtime(var)=time special Jacobian-derivative assignments, left hand specifies change compartment ode respect variable. example, d/dt(y) = dy, Jacobian compartment can specified df(y)/dy(dy) = 1. may advantage obtaining solution specifying Jacobian stiff ODE systems. However, stiff systems tried LSODA, actually slightly slowed solving. Note assignment can done =, <- ~. assigning ~ operator, simple assignments time-derivative assignments output. Note rxode2 model functions assignment ~ can also overloaded residual distribution specification. Special statements can : Compartment declaration statements, can change default dosing compartment assumed compartment number(s) well add extra compartment names end (useful multiple-endpoint nlmixr models); specified cmt(compartmentName) Parameter declaration statements, can make sure input parameters certain order instead ordering parameters order parsed. useful keeping parameter order using 2 different ODE models. specified param(par1, par2,...) example model shown : Expressions assignment statements can numeric logical. Numeric expressions can include following numeric operators +, -, *, /, ^ mathematical functions defined C R math libraries (e.g., fabs, exp, log, sin, abs). may also access R’s functions R math libraries, like lgammafn log gamma function. rxode2 syntax case-sensitive, .e., ABC different abc, Abc, ABc, etc.","code":"library(rxode2) mod <- rxode2({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_36fd6c4312c660ddf5390102e91a4bb3_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ mod <- rxode2(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \") ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_4fdd80e5dd5fd33d1951b83e06f7ad84_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ writeLines(\" # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; \", \"modelFile.rxode2\") mod <- rxode2(filename='modelFile.rxode2') unlink(\"modelFile.rxode2\") mod <- function() { model({ # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3; }) } mod <- rxode2(mod) # or simply mod() if the model is at the end of the function # These model functions often have residual components and initial # (`ini({})`) conditions attached as well. For example the # theophylline model can be written as: one.compartment <- function() { ini({ tka <- 0.45 # Log Ka tcl <- 1 # Log Cl tv <- 3.45 # Log V eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } # after parsing the model mod <- one.compartment() mod$simulationModel ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_bbee652505e8bddf28c7e688baef12d9_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ ## rxode2 2.1.2.9000 model named rx_bbee652505e8bddf28c7e688baef12d9 model (ready). ## x$state: depot, center ## x$stateExtra: cp ## x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp ## x$lhs: ka, cl, v, cp, ipredSim, sim # or mod$simulationIniModel ## using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ ## In file included from /usr/share/R/include/R.h:71, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2parse.h:33, ## from /home/matt/src/rxode2/inst/include/rxode2.h:9, ## from /home/matt/R/x86_64-pc-linux-gnu-library/4.3/rxode2parse/include/rxode2_model_shared.h:3, ## from rx_fe01e26500a95dd1ba4d8972bc71bc7a_.c:117: ## /usr/share/R/include/R_ext/Complex.h:80:6: warning: ISO C99 doesn’t support unnamed structs/unions [-Wpedantic] ## 80 | }; ## | ^ ## rxode2 2.1.2.9000 model named rx_fe01e26500a95dd1ba4d8972bc71bc7a model (ready). ## x$state: depot, center ## x$stateExtra: cp ## x$params: tka, tcl, tv, add.sd, eta.ka, eta.cl, eta.v, rxerr.cp ## x$lhs: ka, cl, v, cp, ipredSim, sim # simple assignment C2 <- centr/V2 # time-derivative assignment d/dt(centr) <- F*KA*depot - CL*C2 - Q*C2 + Q*C3;"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"identifiers","dir":"Reference","previous_headings":"","what":"Identifiers","title":"Create an ODE-based model specification — rxode2","text":"Like R, Identifiers (variable names) may consist one alphanumeric, underscore _ period . characters, first character digit underscore _. Identifiers model specification can refer : State variables dynamic system (e.g., compartments pharmacokinetics model). Implied input variable, t (time), tlast (last time point), podo (oral dose, undocumented case absorption transit models). Special constants like pi R’s predefined constants. Model parameters (e.g., ka rate absorption, CL clearance, etc.) Others, created assignments part model specification; referred LHS (left-hand side) variable. Currently, rxode2 modeling language recognizes system state variables “parameters”, thus, values need passed R ODE model (e.g., age) either passed params argument integrator function rxSolve() supplied event data-set. certain variable names rxode2 event tables. avoid confusion, following event table-related items assigned, used state can accessed rxode2 code: cmt dvid addl ss rate id However following variables used model specification: evid ii Sometimes rxode2 generates variables fed back rxode2. Similarly, nlmixr2 generates variables used nlmixr estimation simulation. variables start either rx nlmixr prefixes. avoid problems, suggested use variables starting either rx nlmixr prefixes.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"logical-operators","dir":"Reference","previous_headings":"","what":"Logical Operators","title":"Create an ODE-based model specification — rxode2","text":"Logical operators support standard R operators ==, != >= <= > <. Like R can () () statements, ifelse() expressions. Additionally can standard assignment. instance, following valid: Notice can also use character expressions comparisons. convenience comes cost since character comparisons slower numeric expressions. Unlike R, .numeric .integer logical statements needed, cause syntax error try use function.","code":"cov1 = covm*(sexf == \"female\") + covm*(sexf != \"female\")"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"supported-functions","dir":"Reference","previous_headings":"","what":"Supported functions","title":"Create an ODE-based model specification — rxode2","text":"supported functions rxode2 can seen rxSupportedFuns(). brief description built-functions following table: Note lag(cmt) = equivalent alag(cmt) = = lag(wt)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"reserved-keywords","dir":"Reference","previous_headings":"","what":"Reserved keywords","title":"Create an ODE-based model specification — rxode2","text":"reserved keywords rxode2 model. following table: Note rxFlag always output 11 calc_lhs since final variables calculated, though can tweak test certain parts rxode2 using flag.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"residual-functions-when-using-rxode-functions","dir":"Reference","previous_headings":"","what":"Residual functions when using rxode2 functions","title":"Create an ODE-based model specification — rxode2","text":"addition ~ hiding output certain types output, also used specify residual output endpoint input rxode2 model function (includes residual model({}) block). specifications form: Indicating variable var variable represents individual central tendencies model also represents compartment specification data-set. can also change compartment name using | syntax, : case var represents central tendency cmt represents compartment dvid specification.","code":"var ~ add(add.sd) var ~ add(add.sd) | cmt"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"transformations","dir":"Reference","previous_headings":"","what":"Transformations","title":"Create an ODE-based model specification — rxode2","text":"normal related distributions, can apply transformation sides using keywords/functions apply transformations. default likelihood transformations calculated untransformed scale. bounded variables like logit-normal probit-normal low high values defaulted 0 1 missing. models wish proportional model one transformation can replace standard deviation NA allow transformations, lnorm(), probitNorm() logitNorm() can combined variance stabilizing yeoJohnson() transformation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"normal-and-t-related-distributions","dir":"Reference","previous_headings":"","what":"Normal and t-related distributions","title":"Create an ODE-based model specification — rxode2","text":"normal t-related distributions, wanted keep ability use skewed distributions additive proportional t/cauchy-space, distributions specified differently comparison supported distributions within nlmixr2: Note normal t-related distributions nlmixr2 calculate cwres npde normal assumption help assess goodness fit model. Also note +dnorm() mostly testing purposes slow estimation procedure nlmixr2. suggest adding (except explicit testing). multiple endpoint models mix non-normal normal distributions, whole problem shifted log-likelihood method estimation nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"notes-on-additive-proportional-models","dir":"Reference","previous_headings":"","what":"Notes on additive + proportional models","title":"Create an ODE-based model specification — rxode2","text":"two different ways specify additive proportional models, call combined1 combined2, way Monolix calls two distributions (avoid software differences naming). first, combined1, assumes additive proportional differences standard deviation scale, : y=f+(+b* f^c)*err second, combined2, assumes additive proportional differences combined variance scale: y=f+[sqrt(^2+b^2 *f^(2c))]*err default nlmixr2/rxode2 otherwise specified combined2 since mirrors adding 2 normal distributions statistics add variances (standard deviations). However, combined1 can describe data possibly even better combined2 possible options rxode2/nlmixr2.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"distributions-of-known-likelihoods","dir":"Reference","previous_headings":"","what":"Distributions of known likelihoods","title":"Create an ODE-based model specification — rxode2","text":"residuals related normal, t-distribution cauchy, often residual specification form: compartment specification left handed side specification. generalized likelihood can specify:","code":"cmt ~ dbeta(alpha, beta) ll(cmt) ~ llik specification"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ordinal-likelihoods","dir":"Reference","previous_headings":"","what":"Ordinal likelihoods","title":"Create an ODE-based model specification — rxode2","text":"Finally, ordinal likelihoods/simulations can specified 2 ways. first : err represents compartment p0 probability specific category: model ensure sum p values less 1. Additionally can write arbitrary number categories ordinal model described . seems little p0 probability category 1 sometimes scores non-whole numbers. can modeled follows: numeric categories specified explicitly, probabilities remain :","code":"err ~ c(p0, p1, p2) err ~ c(p0=0, p1=1, p2=2, 3)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"general-table-of-supported-residual-distributions","dir":"Reference","previous_headings":"","what":"General table of supported residual distributions","title":"Create an ODE-based model specification — rxode2","text":"general supported following table (available rxode2::rxResidualError)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"creating-rxode-models","dir":"Reference","previous_headings":"","what":"Creating rxode2 models","title":"Create an ODE-based model specification — rxode2","text":"NA","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create an ODE-based model specification — rxode2","text":"Chamber, J. M. Temple Lang, D. (2001) Object Oriented Programming R. R News, Vol. 1, . 3, September 2001. https://cran.r-project.org/doc/Rnews/Rnews_2001-3.pdf. Hindmarsh, . C. ODEPACK, Systematized Collection ODE Solvers. Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pp. 55-64. Petzold, L. R. Automatic Selection Methods Solving Stiff Nonstiff Systems Ordinary Differential Equations. Siam J. Sci. Stat. Comput. 4 (1983), pp. 136-148. Hairer, E., Norsett, S. P., Wanner, G. Solving ordinary differential equations , nonstiff problems. 2nd edition, Springer Series Computational Mathematics, Springer-Verlag (1993). Plevyak, J. dparser, https://dparser.sourceforge.net/. Web. 12 Oct. 2015.","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create an ODE-based model specification — rxode2","text":"Melissa Hallow, Wenping Wang Matthew Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxode2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an ODE-based model specification — rxode2","text":"","code":"# \\donttest{ mod <- function() { ini({ KA <- .291 CL <- 18.6 V2 <- 40.2 Q <- 10.5 V3 <- 297.0 Kin <- 1.0 Kout <- 1.0 EC50 <- 200.0 }) model({ # A 4-compartment model, 3 PK and a PD (effect) compartment # (notice state variable names 'depot', 'centr', 'peri', 'eff') C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot; d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3; d/dt(peri) <- Q*C2 - Q*C3; d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff; eff(0) <- 1 }) } m1 <- rxode2(mod) #> #> print(m1) #> ── rxode2-based free-form 4-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> KA CL V2 Q V3 Kin Kout EC50 #> 0.291 18.600 40.200 10.500 297.000 1.000 1.000 200.000 #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 centr #> 3 3 peri #> 4 4 eff #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> KA <- 0.291 #> CL <- 18.6 #> V2 <- 40.2 #> Q <- 10.5 #> V3 <- 297 #> Kin <- 1 #> Kout <- 1 #> EC50 <- 200 #> }) #> model({ #> C2 <- centr/V2 #> C3 <- peri/V3 #> d/dt(depot) <- -KA * depot #> d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 #> d/dt(peri) <- Q * C2 - Q * C3 #> d/dt(eff) <- Kin - Kout * (1 - C2/(EC50 + C2)) * eff #> eff(0) <- 1 #> }) #> } # Step 2 - Create the model input as an EventTable, # including dosing and observation (sampling) events # QD (once daily) dosing for 5 days. qd <- et(amountUnits = \"ug\", timeUnits = \"hours\") %>% et(amt = 10000, addl = 4, ii = 24) # Sample the system hourly during the first day, every 8 hours # then after qd <- qd %>% et(0:24) %>% et(from = 24 + 8, to = 5 * 24, by = 8) # Step 3 - solve the system qd.cp <- rxSolve(m1, qd) #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ head(qd.cp) #> time C2 C3 depot centr peri eff #> 1 0 [h] 0.00000 0.0000000 10000.000 0.000 0.0000 1.000000 #> 2 1 [h] 43.99334 0.9113641 7475.157 1768.532 270.6751 1.083968 #> 3 2 [h] 54.50866 2.6510696 5587.797 2191.248 787.3677 1.179529 #> 4 3 [h] 51.65163 4.4243597 4176.966 2076.396 1314.0348 1.227523 #> 5 4 [h] 44.37513 5.9432612 3122.347 1783.880 1765.1486 1.233503 #> 6 5 [h] 36.46382 7.1389804 2334.004 1465.845 2120.2772 1.214084 # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate ordinal value — rxord","title":"Simulate ordinal value — rxord","text":"Simulate ordinal value","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate ordinal value — rxord","text":"","code":"rxord(...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate ordinal value — rxord","text":"... probabilities simulated. sum number one.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate ordinal value — rxord","text":"number 1 (number probabilities specified + 1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate ordinal value — rxord","text":"values entered 'rxord' simulation simulate probability falling group. falls outside specified probabilities, simulate group (number probabilities specified + 1)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate ordinal value — rxord","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxord.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate ordinal value — rxord","text":"","code":"# This will give values 1, and 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 rxord(0.5) #> [1] 2 # This will give values 1, 2 and 3 rxord(0.3, 0.3) #> [1] 3 rxord(0.3, 0.3) #> [1] 3 rxord(0.3, 0.3) #> [1] 1"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate random Poisson variable from threefry generator — rxpois","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"","code":"rxpois(lambda, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"lambda vector (non-negative) means. n number random values return. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"poission random number deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxpois.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate random Poisson variable from threefry generator — rxpois","text":"","code":"# \\donttest{ ## Use threefry engine rxpois(lambda = 3, n = 10) # with rxpois you have to explicitly state n #> [1] 3 2 3 3 4 4 2 1 5 3 rxpois(lambda = 3, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 5 5 4 5 3 4 2 4 4 4 rxpois(4) ## The first arguments are the lambda parameter #> [1] 5 ## This example uses `rxpois` directly in the model rx <- function() { model({ a <- rxpois(3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate student t variable from threefry generator — rxt","title":"Simulate student t variable from threefry generator — rxt","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate student t variable from threefry generator — rxt","text":"","code":"rxt(df, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate student t variable from threefry generator — rxt","text":"df degrees freedom (\\(> 0\\), maybe non-integer). df = Inf allowed. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate student t variable from threefry generator — rxt","text":"t-distribution random numbers","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate student t variable from threefry generator — rxt","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate student t variable from threefry generator — rxt","text":"","code":"# \\donttest{ ## Use threefry engine rxt(df = 3, n = 10) # with rxt you have to explicitly state n #> [1] 0.56020706 0.03692413 -0.14483694 -1.17839233 -0.07091994 0.59518023 #> [7] -0.86772970 -0.13114717 -0.82988663 -0.44191039 rxt(df = 3, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 0.03932487 -0.52306475 0.43368480 -0.34707505 0.95056248 -0.59519017 #> [7] 0.88227899 2.54392958 -0.24328189 -1.64972949 rxt(4) ## The first argument is the df parameter #> [1] 0.2307802 ## This example uses `rxt` directly in the model rx <- function() { model({ a <- rxt(3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate uniform variable from threefry generator — rxunif","title":"Simulate uniform variable from threefry generator — rxunif","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate uniform variable from threefry generator — rxunif","text":"","code":"rxunif(min = 0, max = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate uniform variable from threefry generator — rxunif","text":"min, max lower upper limits distribution. Must finite. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate uniform variable from threefry generator — rxunif","text":"uniform random numbers","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate uniform variable from threefry generator — rxunif","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxunif.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate uniform variable from threefry generator — rxunif","text":"","code":"# \\donttest{ ## Use threefry engine rxunif(min = 0, max = 4, n = 10) # with rxunif you have to explicitly state n #> [1] 2.67123413 1.53680622 0.03693407 3.10817092 1.82090596 0.87096816 #> [7] 3.00018567 0.74465379 0.44367887 1.04829595 rxunif(min = 0, max = 4, n = 10, ncores = 2) # You can parallelize the simulation using openMP #> [1] 1.3636154 2.2496600 2.1135472 3.6623704 2.0958273 3.2123092 1.1121945 #> [8] 3.2064501 0.7037566 3.7979522 rxunif() #> [1] 0.5753584 ## This example uses `rxunif` directly in the model rx <- function() { model({ a <- rxunif(0, 3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate Weibull variable from threefry generator — rxweibull","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Care taken method encounter birthday problem, described https://www.johndcook.com/blog/2016/01/29/random-number-generator-seed-mistakes/. Since sitmo threefry, currently generates one random deviate uniform distribution seed engine threefry run code.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"","code":"rxweibull(shape, scale = 1, n = 1L, ncores = 1L)"},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"shape, scale shape scale parameters, latter defaulting 1. n number observations. length(n) > 1, length taken number required. ncores Number cores simulation rxnorm simulates using threefry sitmo generator. rxnormV used simulate vandercorput simulator, since satisfy normal properties changed simple alias rxnorm. longer supported rxode2({}) blocks","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Weibull random deviates","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"Therefore, simple call random number generated followed second call random number generated may identical seeds. number random number generator calls increased probability birthday problem increase. key avoid problem either run simulations rxode2 environment (therefore one seed series seeds whole simulation), pre-generate random variables used simulation, seed rxode2 engine rxSetSeed() Internally ID seeded unique number results depend number cores used.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/rxweibull.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate Weibull variable from threefry generator — rxweibull","text":"","code":"# \\donttest{ ## Use threefry engine # with rxweibull you have to explicitly state n rxweibull(shape = 1, scale = 4, n = 10) #> [1] 6.44811941 9.31743179 3.71729577 3.93298872 1.93424653 0.50995473 #> [7] 0.08795812 3.51517749 3.87991413 1.65760268 # You can parallelize the simulation using openMP rxweibull(shape = 1, scale = 4, n = 10, ncores = 2) #> [1] 8.43975112 0.60066178 3.19996975 8.95933943 0.90401027 1.12725152 #> [7] 0.02614905 2.35284437 2.74451590 14.14117829 rxweibull(3) #> [1] 1.146769 ## This example uses `rxweibull` directly in the model rx <- function() { model({ a <- rxweibull(1, 3) }) } et <- et(1, id = 1:2) s <- rxSolve(rx, et) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":null,"dir":"Reference","previous_headings":"","what":"Dosing/Amt geom/stat — stat_amt","title":"Dosing/Amt geom/stat — stat_amt","text":"dosing geom shows vertical lines dose occurs","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dosing/Amt geom/stat — stat_amt","text":"","code":"stat_amt( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, ... ) geom_amt( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dosing/Amt geom/stat — stat_amt","text":"mapping Set aesthetic mappings created aes(). specified inherit.aes = TRUE (default), combined default mapping top level plot. must supply mapping plot mapping. data data displayed layer. three options: NULL, default, data inherited plot data specified call ggplot(). data.frame, object, override plot data. objects fortified produce data frame. See fortify() variables created. function called single argument, plot data. return value must data.frame, used layer data. function can created formula (e.g. ~ head(.x, 10)). position Position adjustment, either string naming adjustment (e.g. \"jitter\" use position_jitter), result call position adjustment function. Use latter need change settings adjustment. show.legend logical. layer included legends? NA, default, includes aesthetics mapped. FALSE never includes, TRUE always includes. can also named logical vector finely select aesthetics display. inherit.aes FALSE, overrides default aesthetics, rather combining . useful helper functions define data aesthetics inherit behaviour default plot specification, e.g. borders(). ... arguments passed layer(). often aesthetics, used set aesthetic fixed value, like colour = \"red\" size = 3. may also parameters paired geom/stat.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Dosing/Amt geom/stat — stat_amt","text":"returns stat_amt context ggplot2 plot","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Dosing/Amt geom/stat — stat_amt","text":"Requires following aesthetics: x representing x values, usually time amt representing dosing values; missing zero dose given","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_amt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Dosing/Amt geom/stat — stat_amt","text":"","code":"# \\donttest{ library(rxode2) library(units) #> udunits database from /usr/share/xml/udunits/udunits2.xml ## Model from RxODE tutorial mod1 <- function() { ini({ KA <- 2.94E-01 CL <- 1.86E+01 V2 <- 4.02E+01 Q <- 1.05E+01 V3 <- 2.97E+02 Kin <- 1 Kout <- 1 EC50 <- 200 }) model({ C2 <- centr/V2 C3 <- peri/V3 d/dt(depot) <- -KA*depot d/dt(centr) <- KA*depot - CL*C2 - Q*C2 + Q*C3 d/dt(peri) <- Q*C2 - Q*C3 d/dt(eff) <- Kin - Kout*(1-C2/(EC50+C2))*eff }) } ## These are making the more complex regimens of the rxode2 tutorial ## bid for 5 days bid <- et(timeUnits=\"hr\") %>% et(amt=10000,ii=12,until=set_units(5, \"days\")) ## qd for 5 days qd <- et(timeUnits=\"hr\") %>% et(amt=20000,ii=24,until=set_units(5, \"days\")) ## bid for 5 days followed by qd for 5 days et <- seq(bid,qd) %>% et(seq(0,11*24,length.out=100)) bidQd <- rxSolve(mod1, et, addDosing=TRUE) #> #> #> #> #> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’ # by default dotted and under-stated plot(bidQd, C2) + geom_amt(aes(amt=amt)) # of course you can make it a bit more visible plot(bidQd, C2) + geom_amt(aes(amt=amt), col=\"red\", lty=1, linewidth=1.2) # }"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":null,"dir":"Reference","previous_headings":"","what":"Censoring geom/stat — stat_cens","title":"Censoring geom/stat — stat_cens","text":"censoring geom shows left right censoring specified nlmixr input data-set fit","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Censoring geom/stat — stat_cens","text":"","code":"stat_cens( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, width = 0.01, ... ) geom_cens( mapping = NULL, data = NULL, position = \"identity\", show.legend = NA, inherit.aes = TRUE, width = 0.01, ... )"},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Censoring geom/stat — stat_cens","text":"mapping Set aesthetic mappings created aes(). specified inherit.aes = TRUE (default), combined default mapping top level plot. must supply mapping plot mapping. data data displayed layer. three options: NULL, default, data inherited plot data specified call ggplot(). data.frame, object, override plot data. objects fortified produce data frame. See fortify() variables created. function called single argument, plot data. return value must data.frame, used layer data. function can created formula (e.g. ~ head(.x, 10)). position Position adjustment, either string naming adjustment (e.g. \"jitter\" use position_jitter), result call position adjustment function. Use latter need change settings adjustment. show.legend logical. layer included legends? NA, default, includes aesthetics mapped. FALSE never includes, TRUE always includes. can also named logical vector finely select aesthetics display. inherit.aes FALSE, overrides default aesthetics, rather combining . useful helper functions define data aesthetics inherit behaviour default plot specification, e.g. borders(). width represents width (\\ censoring box ... arguments passed layer(). often aesthetics, used set aesthetic fixed value, like colour = \"red\" size = 3. may also parameters paired geom/stat.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Censoring geom/stat — stat_cens","text":"returns ggplot2 stat","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/stat_cens.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Censoring geom/stat — stat_cens","text":"Requires following aesthetics: x Represents independent variable, often time scale y represents dependent variable CENS censoring information; (-1 right censored, 0 censoring 1 left censoring) LIMIT represents corresponding limit () add boxes representing areas fit censored.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of rxDll object — summary.rxDll","title":"Summary of rxDll object — summary.rxDll","text":"gives expanded information rxDll object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of rxDll object — summary.rxDll","text":"","code":"# S3 method for rxDll summary(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of rxDll object — summary.rxDll","text":"object RxDll object ... arguments. Includes noprint, logical telling object print rxDll object first. default FALSE","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of rxDll object — summary.rxDll","text":"object returned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxDll.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of rxDll object — summary.rxDll","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":null,"dir":"Reference","previous_headings":"","what":"Print expanded information about the rxode2 object. — summary.rxode2","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"prints expanded information rxode2 object.","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"","code":"# S3 method for rxode2 summary(object, ...)"},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"object rxode2 object ... Ignored parameters","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"object returned","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/summary.rxode2.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print expanded information about the rxode2 object. — summary.rxode2","text":"Matthew L.Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":null,"dir":"Reference","previous_headings":"","what":"Update for rxUi — update.rxUi","title":"Update for rxUi — update.rxUi","text":"Update rxUi","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update for rxUi — update.rxUi","text":"","code":"# S3 method for rxUi update(object, ..., envir = parent.frame())"},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update for rxUi — update.rxUi","text":"object rxode2 UI object ... Lines update envir Environment evaluating ini() style calls","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/update.rxUi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update for rxUi — update.rxUi","text":"new rxode2 updated UI object","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":null,"dir":"Reference","previous_headings":"","what":"uppergamma: upper incomplete gamma function — uppergamma","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"tgamma boost library","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"","code":"uppergamma(a, z)"},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"numeric '' parameter upper incomplete gamma z numeric 'z' parameter upper incomplete gamma","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"uppergamma results","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"uppergamma function given : \\(uppergamma(, z) = \\int_{z}^{\\infty}t^{-1}\\cdot e^{-t} dt\\)","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"Matthew L. Fidler","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/uppergamma.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"uppergamma: upper incomplete gamma function — uppergamma","text":"","code":"uppergamma(1, 3) #> [1] 0.04978707 uppergamma(1:3, 3) #> [1] 0.04978707 0.19914827 0.84638016 uppergamma(1, 1:3) #> [1] 0.36787944 0.13533528 0.04978707"},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":null,"dir":"Reference","previous_headings":"","what":"Set random effects and residual error to zero — zeroRe","title":"Set random effects and residual error to zero — zeroRe","text":"Set random effects residual error zero","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set random effects and residual error to zero — zeroRe","text":"","code":"zeroRe(object, which = c(\"omega\", \"sigma\"), fix = TRUE)"},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set random effects and residual error to zero — zeroRe","text":"object model modify types parameters set zero fix parameters fixed zero value?","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set random effects and residual error to zero — zeroRe","text":"object parameters set zero","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set random effects and residual error to zero — zeroRe","text":"Bill Denney","code":""},{"path":"https://nlmixr2.github.io/rxode2/reference/zeroRe.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set random effects and residual error to zero — zeroRe","text":"","code":"one.compartment <- function() { ini({ tka <- log(1.57); label(\"Ka\") tcl <- log(2.72); label(\"Cl\") tv <- log(31.5); label(\"V\") eta.ka ~ 0.6 eta.cl ~ 0.3 eta.v ~ 0.1 add.sd <- 0.7 }) model({ ka <- exp(tka + eta.ka) cl <- exp(tcl + eta.cl) v <- exp(tv + eta.v) d/dt(depot) = -ka * depot d/dt(center) = ka * depot - cl / v * center cp = center / v cp ~ add(add.sd) }) } zeroRe(one.compartment) #> #> #> ── rxode2-based free-form 2-cmt ODE model ────────────────────────────────────── #> ── Initalization: ── #> Fixed Effects ($theta): #> tka tcl tv add.sd #> 0.4510756 1.0006319 3.4499875 0.0000000 #> #> Omega ($omega): #> eta.ka eta.cl eta.v #> eta.ka 0 0 0 #> eta.cl 0 0 0 #> eta.v 0 0 0 #> attr(,\"lotriFix\") #> eta.ka eta.cl eta.v #> eta.ka TRUE FALSE FALSE #> eta.cl FALSE TRUE FALSE #> eta.v FALSE FALSE TRUE #> #> States ($state or $stateDf): #> Compartment Number Compartment Name #> 1 1 depot #> 2 2 center #> ── μ-referencing ($muRefTable): ── #> theta eta level #> 1 tka eta.ka id #> 2 tcl eta.cl id #> 3 tv eta.v id #> #> ── Model (Normalized Syntax): ── #> function() { #> ini({ #> tka <- 0.451075619360217 #> label(\"Ka\") #> tcl <- 1.00063188030791 #> label(\"Cl\") #> tv <- 3.44998754583159 #> label(\"V\") #> add.sd <- fix(0, 0) #> eta.ka ~ fix(0) #> eta.cl ~ fix(0) #> eta.v ~ fix(0) #> }) #> model({ #> ka <- exp(tka + eta.ka) #> cl <- exp(tcl + eta.cl) #> v <- exp(tv + eta.v) #> d/dt(depot) = -ka * depot #> d/dt(center) = ka * depot - cl/v * center #> cp = center/v #> cp ~ add(add.sd) #> }) #> }"},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-1-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.1.3","text":"Make sure object uncompressed rxode2 ui solving rxSolve (See #661) Fix #670 using last simulated observation residual trailing doses.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-1-3","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.1.3","text":"Create function see rxode2 solve loaded memory (rxode2::rxSolveSetup()) Create new function fixes rxode2 population values model (drops initial estimates); rxFixPop()","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-changes-2-1-3","dir":"Changelog","previous_headings":"","what":"Other changes","title":"rxode2 2.1.3","text":"Pendantic -remap (requested CRAN)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-212","dir":"Changelog","previous_headings":"","what":"rxode2 2.1.2","title":"rxode2 2.1.2","text":"CRAN release: 2024-01-30","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-changes-2-1-2","dir":"Changelog","previous_headings":"","what":"Other changes","title":"rxode2 2.1.2","text":"rxUi compression now defaults fast compression Fixes String literal formatting issues identified CRAN (#643) Removes linear compartment solutions gradients intel c++ compiler (since crash compiler).","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-210","dir":"Changelog","previous_headings":"","what":"rxode2 2.1.0","title":"rxode2 2.1.0","text":"CRAN release: 2023-12-11","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"breaking-changes-2-1-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"rxode2 2.1.0","text":"Steady state lag times longer shifted lag time solved steady state default. addition steady state original time dosing also back-calculated. want old behavior can bring back option ssAtDoseTime=FALSE. “dop853” now uses hmax/h0 values rxControl() rxSolve(). may change ODE solving using “dop853” specified (xgxr available), x axis longer assumed hours","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.1.0","text":"User defined functions can now R functions. many R functions can converted C rxFun() (can see C code afterwards rxC(\"funName\")) Parallel solving models require sorting (like modeled lag times, modeled duration etc) now solve parallel instead downgrading single threaded solving Steady state infusions duration infusions greater inter-dose interval now supported. Added $symengineModelNoPrune $symengineModelPrune loading models rxode2 rxS() plotting creating confidence intervals multiple endpoint models simulated rxode2 ui model, can plot/summarize endpoint sim. (ie. confint(model, \"sim\") plot(model, sim)). want summarize subset endpoints, can focus endpoint pre-pending endpoint sim. example wanted plot/summarize endpoint eff use sim.eff. (ie confint(model, \"sim.eff\") plot(model, sim.eff)) Added model$simulationIniModel prepend initial conditions ini({}) block classic rxode2({}) model. Now model$simulationModel model$simulationIniModel save use initialization values compiled model, solve original ui model. Allow ini(model) <- NULL drop ini block .ini(NULL) gives ini({}) (Issue #523) Add function modelExtract() extract model lines allow modifying changing model piping simply assigning modified lines model(ui) <- newModifiedLines Add Algebraic mu-referencing detection (mu2) allows express mu-referenced covariates : Instead previously required (log.WT.div.70.5 calculated data) mu expressions. ui now information allow transformation data internally transformation old mu-referencing style run optimization. Allow steady state infusions duration infusion greater inter-dose interval solved. Solves now possibly print information issuing “solve system” error function rxSetPipingAuto() now exported change way affect piping individual setup Allow covariates specified model piping, mod %>% model(=var+3, cov=\"var\") add \"var\" covariate. calculating confidence intervals rxode2 simulated objects can now use stratify simulation summary. example can now stratify gender race : confint(sim, \"sim\", =c(\"race\", \"gender\")) calculating intervals rxode2 simulated objects can now use ci=FALSE calculates default intervals without bands percentiles; can also choose match secondary bands limits levels use ci=0.99 instance new function introduced meanProbs() calculates mean expected confidence bands either normal t distribution related new function introduced calculates mean confidence bands Bernoulli/Binomial distribution (binomProbs()) calculating intervals rxode2 simulated objects can also use mean=TRUE use mean first level confidence using meanProbs(). confidence interval can override n used confidence interval using n=#. can also change prediction interval instead using pred=TRUE. Also calculating intervals rxode2 simulated object can also use mean=\"binom\" use binomial distributional information (ci) first level confidence using binomProbs(). confidence interval can override n used confidence interval using n=#. can also change prediction interval instead using pred=TRUE. pred=TRUE can override number predicted samples m=# plotting confint derived intervals rxode2 simulation, can now subset based simulated value like plot(ci, Cc) plot variable Cc summarized even also summarized eff (instance). rxode2 ui compressed ui object, can modify ini block $ini <- modify model block $model <-. equivalent ini(model) <- model(model) <-, respectively. Otherwise, object added user defined components function (ie $meta). object uncompressed, simply assigns environment instead (just like ). printing meta information happens lotri compatible matrix, use lotri express instead default R expression. Allow character vectors converted expressions piping (#552) rxAppendModel() now take arbitrary number models append together; also better handling models duplicate parameters models without ini() blocks (#617 / #573 / #575). keep now also keep attributes input data (special handling levels); means broader variety classes kept carrying information (example ordered factors, data frame columns unit information, etc) Piping arguments append ini() model() aligned perform similarly. Therefore ini(append=) now can take expressions instead simply strings model(append=) can also take strings. Also model piping now can specify integer line number modified just like ini() . Also model(append=FALSE) changed model(append=NULL). behavior don’t specify argument, behavior changed align ini() piping. Hence model(append=TRUE) append model(append=FALSE) now pre-pend model. model(append=NULL) modify lines like behavior ini(append=NULL). default model(line) modifying line -place still applies. breaking change, code perform . Labels can now dropped ini(param=label(NULL)). Also parameters can dropped idiom model(param=NULL) ini(param=NULL) changes parameter covariate align idiom dropping parameters rxRename refactored run faster","code":"cl <- exp(tcl + eta.cl + wt_cl * log(WT/70.5)) cl <- exp(tcl + eta.cl + wt_cl * log.WT.div.70.5)"},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"Internal new features","title":"rxode2 2.1.0","text":"Add .model() list expressions, implies model(ui) <- ui$lstExpr assign model components. also robustly work character vectors Simulated objects rxSolve now can access model variables $rxModelVars Simulation models UI now use rxerr.endpoint instead err.endpoint sigma residual error. align convention internally generated variables start rx nlmixr Sorting uses timsort now, upgraded latest version Morwenn","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-1-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.1.0","text":"Simulating/solving functions/ui now prefers params omega sigma model (#632) Piping add constants initial estimates constants specified model({}) block (like k <- 1), ini block Bug fix geom_amt() aes transformation x Bug fix covariate updates may affect multiple compartment models (like issue #581)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"maintenance-fixes-2-1-0","dir":"Changelog","previous_headings":"","what":"Maintenance fixes","title":"rxode2 2.1.0","text":"Modify plot code work development xgxr","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2014","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.14","title":"rxode2 2.0.14","text":"CRAN release: 2023-10-07 CRAN requested FORTRAN kind changed portable; commented code, simply removed comment. Bug-fix geom_amt(); also now uses linewidth least ggplot2 3.4.0 documentation cleaned rxode2 2.0.13","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2013","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.13","title":"rxode2 2.0.13","text":"CRAN release: 2023-04-22","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-13","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.13","text":"bug fixed zeroRe() function works correlated omega values. bug fixed rename() function works initial conditions compartments (cmt(0))","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-13","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.13","text":"new function zeroRe() allows simple setting omega /sigma values zero model (#456) Diagonal zeros omega sigma matrices treated zeros model. corresponding omega sigma matrices drop columns/rows diagonals zero create new omega sigma matrix simulation. idiom NONMEM uses simulation matrices. Add ability pipe model estimates another model parentModel %>% ini(modelWithNewEsts) Add ability append model statements piping using %>% model(x=3, append=d/dt(depot)), still supports appending append=TRUE pre-pending append=NA (default replace lines append=FALSE) rxSolve’s keep argument now maintain character factor classes input data class (#190) Parameter labels may now modified via ini(param = label(\"text\")) (#351). Parameter order may modified via append argument ini() piping model. example, ini(param = 1, append = 0) ini(param = label(\"text\"), append = \"param2\") (#352).","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-changes-2-0-13","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"rxode2 2.0.13","text":"lower/upper bounds outside required bounds, adjustment displayed. initial values piped break model’s boundary condition reset boundary unbounded message boundary reset. Added .rxUi() function convert following objects rxUi objects: rxode2, rxModelVars, function. Converting nlmixr2 fits rxUi placed s3 method corresponding package. assertRxUi(x) now uses .rxUi() can extended outside rxode2/nlmixr2. rxode2 now supports addl ss doses Moved rxDerived rxode2parse (re-exported ). Added test transit compartment solving absence dosing transit compartment (fixed rxode2parse solving tested ) Using ini() without arguments rxode2 type function return ini() block. Also added method ini(mod) <- iniBlock modify ini block wish. iniBlock expression. Using model() without arguments rxode2 type function return model() block. Also added new method model(mod) <- modelBlock Added new method rxode2(mod) <- modFunction allows replacing function new function maintaining meta information ui (like information comes nonmem2rx models). modFunction body new function, new function, new rxode2 ui. rxode2 ui objects now $sticky item inside internal (compressed) environment. $sticky tells variables keep “significant” change ui piping sort model change. respected model piping, modifying model ini(mod)<-, model(mod)<-, rxode2(mod)<-. significant change change model block, change number estimates, change value estimates. Estimate bounds, weather estimate fixed estimate label changes considered significant. Added .ini() method convert various formats ini expression. used internally ini(mod)<-. want assign something new can convert ini expression, add method .ini(). Added .model() method convert various formats model expression. used internally model(mod)<-. want assign something new can convert model expression, add method .model().","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2011","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.11","title":"rxode2 2.0.11","text":"CRAN release: 2022-11-01 Give meaningful error ‘rxode2’ ui models error expressions Break ABI requirement roxde2() rxode2parse() new rxode2parse fix sprintf exclusion shown CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-2010","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.10","title":"rxode2 2.0.10","text":"CRAN release: 2022-10-20 Time invariant covariates can now contain ‘NA’ values. column ‘NA’ entire id, now ‘rxode2’ warns id column instead just id. fix CRAN issues ‘nlmixr2est’, make version dependency explicit.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-209","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.9","title":"rxode2 2.0.9","text":"CRAN release: 2022-10-19 Remove log likelihoods ‘rxode2’ reduce compilation time increase maintainability ‘rxode2’. transferred ‘rxode2ll’ (requested CRAN). Remove parsing ‘rxode2’ solved linear compartment code move ‘rxode2parse’ reduce compilation time (requested CRAN). Remove random number generation ‘rxode2’ move ‘rxode2random’ reduce compilation time (requested CRAN). Remove event table translation generation ‘rxode2’ move ‘rxode2et’ reduce compilation time (requested CRAN). Change rxode2 ui object compressed, serialized object default. reduce C stack size problem occurs many environments R. Warn ignoring items simulations Export method change ‘rxode2’ solve methods internal integers Bug fix time invariant covariates identified time variant covariate individual’s time starts 0.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-208","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.8","title":"rxode2 2.0.8","text":"CRAN release: 2022-09-23","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"breaking-changes-2-0-8","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"rxode2 2.0.8","text":"rxgamma now allows rate input. aligns internal rxode2 version rxgamma clarifies used. also aligned llikGamma function used generalized likelihood estimation. ui cauchy simulations now follow ui normal t distributions, means can combine transformations. cauchy t distribution one degree freedom. ui dnorm() norm() longer equivalent add(). Now allows use loglik llikNorm() instead standard nlmixr2 style focei likelihood. done adding dnorm() end line. also means dnorm() now doesn’t take arguments. Vandercorput normal removed (non-random number generator)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-8","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.8","text":"Allow models nlmixr2 form without ini({}) block Allow model piping omega matrix f %>% ini(omegaMatrix) Standard models created rxode2() can piped model function Families log-likelihood added rxode2 mixed likelihood nonlinear mixed effects models may specified run. memory footprint rxode2 solving reduced Piping now allow named strings (issue #249)","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-8","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.8","text":"rxode2’s symengine convert sqrt(2) M_SQRT_2 M_SQRT2. fixed; noticeable nlmixr2 log-likelihood estimation methods rxode2 treats DV non-covariate etTran (last time duplicate model). noticeable nlmixr2 log-likelihood estimation methods.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"new-features-2-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"rxode2 2.0.8","text":"new flag (rxFlag) created tell rxode2 solving process . useful debugging. outputting variable always 11 calculating left handed equations. using conjunction printf() methods, double variable formatted \"%f\". additional option fullPrint added rxode2() allows rprintf() used almost rxode2() steps (inductive linearization matrix exponential exception ) instead just integration ddt step. defaults FALSE.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-207","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.7","title":"rxode2 2.0.7","text":"CRAN release: 2022-05-17 Removed accidental ^S news requested CRAN. Bug fix complicated mu-referencing. Change rxode2 md5 depend C/C++/Fortran code headers R files. way binary compatibility nlmixr2est rxode2, new version nlmixr2est need submitted CRAN.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"rxode2-206","dir":"Changelog","previous_headings":"","what":"rxode2 2.0.6","title":"rxode2 2.0.6","text":"CRAN release: 2022-05-09","code":""},{"path":[]},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"solving-controls-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Solving controls","title":"rxode2 2.0.6","text":"options rxControl rxSolve strict. camelCase now always used. Old options like add.cov transit_abs longer supported, addCov supported. new option, sigdig added rxControl(), controls common significant figure options like atol, rtol, ssAtol, ssRtol, single option.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"simulations-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Simulations","title":"rxode2 2.0.6","text":"simulations, $simulationSigma now assumes diagonal matrix. sigma values assumed standard normal, uncorrelated endpoints. Simulation uncertainty still draw identity diagonal matrix Parallel solving now seeds simulation per individual based initial seed plus simulation id. makes simulation reproducible regardless number cores running simulation.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"other-breaking-changes-2-0-6","dir":"Changelog","previous_headings":"Breaking changes","what":"Other breaking changes","title":"rxode2 2.0.6","text":"Solved objects now access underlying rxode model $rxode2 instead $rxode Since change names, rxode2, rxode RxODE perform function. Options changed RxODE.syntax rxode2.syntax. Assigning states rxode2.syntax.assign.state (RxODE.syntax.assign.state) longer supported. Enforcing “pure” assignment syntax = syntax longer supported rxode2.syntax.assign longer supported (RxODE.syntax.assign). Since R supports ** exponentiation operator, pure syntax without ** can longer enabled. Hence rxode2.syntax.star.pow (RxODE.syntax.star.pow) longer effect. “pure” syntax requires semicolon can longer enabled. Therefore rxode2.syntax.require.semicolon (RxODE.syntax.require.semicolon) longer effect. syntax state(0) can longer turned . rxode2.syntax.allow.ini0 (RxODE.syntax.allow.ini0) removed. Variable dots variable state names like state.name works R. Therefore, “pure” syntax excluding . values variables enforced rxode2.syntax.allow.dots (RxODE.syntax.allow.dots). mnemonic et(rate=model) et(dur=model) mnemonics removed. rate needs set -1 -2 manually instead. function rxode2Test() removed favor using testthat directly. Transit compartments need use new evid, evid=7. said, transitAbs option longer supported. ID columns input parameter data frames sorted merged original dataset ; underlying assumption ID order now checked outside rxode2(). Note event data frame still sorted.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"additional-features-2-0-6","dir":"Changelog","previous_headings":"","what":"Additional features","title":"rxode2 2.0.6","text":"UI functions nlmixr ported work rxode2 directly. rxModelVars({}) now supported. may now combine 2 models rxode2 rxAppendModel(). fact, long first value rxode2 evaluated ui model, can use c/rbind bind 2 models together. may now append model lines piping using %>% model(lines, append=TRUE) can also pre-pend lines %>% model(lines, append=NA) may now rename model variables, states defined parameters %>% rxRename(new=old) dplyr loaded: %>% rename(new=old) can fix parameters %>% ini(tcl=fix) %>% ini(fix(tcl)) well unfix parameters %>% ini(tcl=unfix) %>% ini(unfix(tcl))","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"internal-changes-2-0-6","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"rxode2 2.0.6","text":"Strict R headers enforced places Since many changes incompatible, version renamed rxode2 rxode2() printout longer uses rules centered headings make display better larger variety systems.","code":""},{"path":"https://nlmixr2.github.io/rxode2/news/index.html","id":"bug-fixes-2-0-6","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"rxode2 2.0.6","text":"tad() related time features reset start infusion (opposed starting beginning end infusion)","code":""}]