From b0e91a4bc7efc02f62f1f50a574f016904c1653e Mon Sep 17 00:00:00 2001 From: gavinsimpson Date: Mon, 25 Nov 2024 14:30:48 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20gavinsim?= =?UTF-8?q?pson/gratia@6f8dabd3204c81a0b9fcc1db332b8556ed352bb1=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- articles/posterior-simulation.html | 15 ++++++++------- .../figure-html/unnamed-chunk-7-1.png | Bin 308785 -> 253157 bytes pkgdown.yml | 2 +- reference/draw.smooth_samples-2.png | Bin 170409 -> 177624 bytes reference/link.html | 4 ++-- search.json | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/articles/posterior-simulation.html b/articles/posterior-simulation.html index f5f50271..40dce5be 100644 --- a/articles/posterior-simulation.html +++ b/articles/posterior-simulation.html @@ -479,11 +479,12 @@

Distributional GAMsgeom_point(aes(y = accel, colour = type, alpha = .alpha)) + plt_labs + scale_colour_okabe_ito(order = c(6, 5)) + - scale_alpha_identity() -

The resulting plot is shown below in the left-hand panel of the -figure below. There is clearly a problem here; the simulated data don’t -look much like the observations in the 15ms immediately after the impact -and again at ~45ms after impact. This is due to the model we fitted only + scale_alpha_identity() + + theme(legend.position = "bottom") +

The resulting plot is shown in the left-hand panel of the figure +below. There is clearly a problem here; the simulated data don’t look +much like the observations in the 15ms immediately after the impact and +again at ~45ms after impact. This is due to the model we fitted only being for the conditional mean of accel.

Instead, we model both the conditional mean and the conditional variance of the data, through linear predictors for both @@ -517,8 +518,8 @@

Distributional GAMsplt_gau + plt_gaulss + plot_annotation(tag_levels = "a") + plot_layout(guides = "collect", ncol = 2) -

-The plot of the simulated response data for the distributional GAM is +

+

The plot of the simulated response data for the distributional GAM is shown in the right hand panel of the plot. Now, there is much less disagreement between the observed data and that which we can produce from the fitted mdoel.

diff --git a/articles/posterior-simulation_files/figure-html/unnamed-chunk-7-1.png b/articles/posterior-simulation_files/figure-html/unnamed-chunk-7-1.png index 8623f77926a57982044e1ee99a160ea35a527d62..301eba413c00442fc091722903c81d54b2476a47 100644 GIT binary patch literal 253157 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%0D3k zV&wXj<^2aE^>4^P^-G5OOfKwBE@j1fiD7EjLAcK80aM{fwwcY#&9h*W+|Jo~5 ztw*|yj`qn>to70|v83fZ@ZIM0<61pzuQ|S%Q%pf3nu)M(e?C{o<&0MHC;GE=k@V0_ z4d!Z|$Q*pEV2sFyCP4X*=+*r#x1p173falF=*G~i0G+k>s9Su_cutMz`KLv`R%FSAr==;+{Vc++;}mBbv45a(pvtdzkq$|LpN=^ zyBw+%7pvoe{h5uuav5*cVWqN?I`Pe|xv@{jBu#MAns<%bZmLze6ye9X@KJmCq?|>mzV#tpVpdc>Moy-d#1m@d^U*&qsJn~l(>`O z14ESHvDFmbhU2toy>Hc3G*CpF(E9&)`s%1CqxEY+knS!4>F!2aU}z8l0cmN0p{2Vd zhi;ITZji2_TWX}cyYqX!_x`@K)~v-p%o><;&ig!j?`Q9?GuDcw!v;%Ht5T(kztHNd zkF4t_HPF-)G#S5D=P-6D$;-<-MGg=z{}AX9$@(|l)PBbOjwgf&BrEIcC}z{A%dyc5`^~aI|vr@Xc_COB{&hSLqebwlGN%fO#2 zUn&opIBivV;U(Xv(WflVSiN4UyGvE1cN>@UzAOTBc(MKD0%C=4t*zm9KtjF#IfRUF z`VtFB*jHO`SlHM=#q1XwI79&54+)?7?bT9&M~9a0ArKSjW2m zPmdq1noPk5vM~5clEaKjMhyi{X2ttdw+Dl?Qg99d#EKX{?dT6#&&bScyUbFjVcT=} zPuZG(o}XKYUmhrbuMc}UA16K*CAVQk<+0E_%U~OXD#g^~(%`QV?PDJHx=)B?Rt@A)ANwqrmyHM@ewEvEMUr-|c&(TmSX9Ag zUv;YZ*{d)y>!f?d^vK&V&wbSWQJqu%)wFDKwwn9=MgmC$ry7FJ zjWJd|A7<4bF&#)PQX(seJ@r6AJ7yz!5~V{N=2j4{-y0EJB<&Qv*5*;PnpHGEZQF@@cta@I7a6^L@S$f4MjijE}eoe=W)RO<6qK zgDN~><4=y+x3bS<1i)++ta!CoW$Y|7gQKzl7%jd*d7~T*&LG+LI={tyIXR+0Hn(}<1}j9f;4 znGq7A#^N6F-m;@Yh*GQO<3f-E=a5V(SNH}rrfAj63?b#cvf3H=6g4@VbaN?~9F_7o zdZK@XA1B565i1r=z+mQr{)k3rXCUfp0vRmscNv*$KEil<>2x#!AjBxBY!~MLyV?*e zEZ~esU$8b=9x2zzv#vG~iJ(pew0}C3$r%(`584x|e0hrj7u(jOGSwXvPEBOsX{D%i z3%q;>a?4;*`-bcMq@((RImdf4-?wh5!}o*7KkkN;+tSI*P3#Pd^AZFir$c_cSy7d_ zO4@zgMT)yxrlZVD|KYWD^@2nXRHi2dU_cnklaTm){7IwSfwJpkHW}O*?}2TGK#+^zY(HXmHx&=yiJpWc1eo&7sH+(0a+@}9 zE&IwP9J4ihitU*D9A2E{eX_m1Izrim+9)=f_Qfp(rCS_~@WaCck=B5(-I7c$ek9tc z;0>-;xgZq^9hj<0C;yb-5N*`Ywaii$t^kaF4w1BDtP`+0kb!v64n{%OPwIp4d5dIQ zrckh>1!H+l!m-t`R>uO_j)mvfw?biy&41P_0x=9cs`@C9(wsN^%B?=Qe)#X|yV?|@ z{6Z=09QH5ZsdZ1;e!bu4u;2a2#&G!Y@$o8ac24vnD%JoOa7fyvjX9Wbv5tuM)}ge? z51P_R5?&SsWQu!|(frX`Wv=y}nNDTVd=_tn3_oW({5FiW9#&GGRFr}*vHTElG~#ID zDOE_Zl;)=FDi!;AC$OPYBwmlh=qrBO|N%4-(_#?`PYVronM+Totg}9RAt+Rw7?JWZ!GZ)b*x;o z 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%0D4zX)DW7yXRn+uAB-X_z*}w7T~xB^X4X! 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 Syhjo;GK{AFrL2p8Joq6q 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

Lx_S^~CugN)#MOQ(%!?eUH$OiOO{97< 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%0AD+ z;P@OQt6;#;wO$SISdWoD4J-6fh@FQLetF4;4ttHrv<#!Fz6Dj zrSQ?4dQ%>e$ecs)8qTs2E1Jw!WXGO}Nj&3DW)JXHE0=UX24NQP-wQP`A39Jxx%XK4COr!`QsbeqjO9^-wiEoNJW8Qwa+*a?*!M#mD0 z)}sOCBy#qr$k<@vFV@2+{ql?$|k~8ajOqmtrG@I{P-i#@=itb~Feo6@% zNk?w28BN2+@xzO5>cUF_Q;+-qm~(OWJ|Ziz;Jn5+>5rPLb43w@AHxe5y3Oe8%;KYW)pgaBL#Ul3j+!!&Ac+P((l`FX!k|{A%SCWgcJ>y7gk`9tN4zAW=Xgf zsrb$jN2!_>Jo!c1*0q^ZHugkQK&g(Y&v;5kUDh~&!qU&^Da9QBpNX81%+akwmdltI zLuo}J%fSqa8GaptqrjY)2?keXZiwq}>EWnuDvO@D53}?JtV~Hosf}b5@Tlu11#vJz z_ExbBqOtnslB9n-)fMAknpY1b6^&=fS@tz^G)pom#3c?2U}z)$Xc$2iu{Jgm+8wRq zz9pqnh=r}KG>A;J*)C?5rSs><$kV3gJAyty4zW4lD+?4!vs#d5R!M^y!#V@ zbR-k@cVC;j#*=9n_7rZ=$QaMC44ghfv&C%s_sF>fX(<8TIcq=qYFRFKa<>zCtyCQ~ zXRF^YB$8+hS8#nB@_WNU<%F zP``|QkWikIL{t=#u^FQ4W|C>5K9C_t#r!!NWl88(KvphI*F*}%^rvHZ+k^C6^)9wz zK!(F|QzL?=t3lk+H^ut$JFb z107W}Zp~4IO&5m590_K$v)?9)f5mCe(jQkUX#H`O@64FJn)Z%}vvMd6M}6)2J%0Qv z*z9}!^uH+SDWLkmY&Kg$x5*EOxN0skoTNqDvM_r#7dy$MzFpEyJ#4_C$vU?Z z{)2Cm!54XV@OxX ze2udmlsQ(pIFGPu)S{%&SGiS{XpU*vRY(~5)S7M5uaS^&PYGNKTNNjdkyS<)A(p`!g5N=6U zac?jynry!01}Z=7^p`uEQVRk8%b3gyGC%)Z>Jm6&@h0k8*RDU?9B8gCX5q98CmAQT zzbq@e(#E*&1|jgd7}{VJH@GErBq+t<(aFqQ;u8F7&N&SCq!cC7`qJ?Ju9CEY@}8_T zBMA<}zKUwcPfqE~hD!8hFI7jsj9%$o2t`gkHeU95t}B%NqPDlUlV^VAGsQ{;$NTP5 z(1N_Kvo|O7H=ncwr_J2mQ{w$j%uNzYZdfdkKH z1@6pF%9T=1t&}$<*G`ROHqgyWOr7tUknKBi8;*-Ps|lYO4r;$2?GeHol)w(a;)4FV zjK_npXrWG3lnJ;HqPk}bHCHk|xSN_;Tk4u>)wa?clQM~d6E(`X8abh*;nT1UOVDmC zsDAyZ|I3eVb_x>$Z2>KomfGJ~p`T&{VoMWN~Ycs6sJG|+TmvmAclL3L&ea6W=g-sX&o|QjEd|pfmi`{&T8t_IRy{+^x z7gIXvK;?*m=Q`9gWn9gTU;eCO8Oml*cb?UWWb?Elg&)Xi$GwZ3F&W9N67@^6F2@~? zdU-VusmvB8v27NTsscakH0<2WD?u`2-Pz(KmkjHXMshPTYyDx`S`km3^W|^#k(Sdo zg6(B}$xRU;*!Wk7g9jMXcRCcNzL_+;NfrN2L6Q?wQb5BUk#16E(i#d!C~^)ZEmZ}T z($ZztuO+5q(6=Y^sLYbx7+q^9wXU

F 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%0A+CeA0p=5HkOd@&5r9YuN2b2M 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 Jxxf7SzX08i;GqBj diff --git a/reference/link.html b/reference/link.html index 9bd0f3c8..06f8f0bb 100644 --- a/reference/link.html +++ b/reference/link.html @@ -174,11 +174,11 @@

Exampleslink(mod, parameter = "scale") #> function (mu) #> log(1/mu - 0.01) -#> <environment: 0x56401dd37dd0> +#> <environment: 0x563ac474a800> inv_link(mod, parameter = "scale") #> function (eta) #> 1/(exp(eta) + 0.01) -#> <environment: 0x56401dd37dd0> +#> <environment: 0x563ac474a800> ## Works with `family` objects too link(shash(), parameter = "skewness") diff --git a/search.json b/search.json index 8b94bff7..f828b857 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported package maintainer, Gavin Simpson (see email address CRAN package page) . complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"something-isnt-working-right-or-generating-an-error","dir":"","previous_headings":"","what":"Something isn’t working right or generating an error","title":"Contributing","text":"something isn’t working, either might expect/want contrary documentation, probably bug missing feature. ’re getting error running {gratia}, ’s also likely bug, opportunity catch use-case wasn’t expecting. First, check issue hasn’t already fixed -development version Github. Install current development version {gratia} R-universe using issue remains, please file issue via Issues page. ’s OK report issue even ’re sure ’s problem, problem better described question, use Discussions page (see ). Feature requests welcome! problem {gratia} hit top TODO list quickly cen provide reproducible example demonstrating problem.","code":"install.packages(\"gratia\", repos = c( \"https://gavinsimpson.r-universe.dev\", \"https://cloud.r-project.org\" ))"},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"got-a-question-want-to-show-how-to-do-something-with-gratia","dir":"","previous_headings":"","what":"Got a question? Want to show how to do something with {gratia}?","title":"Contributing","text":"issue best described question, want know something {gratia}, cool example using {gratia} want share , please consider using Discussions page. ’re sure, can always ask issue Question (Use Q&category) , really bug, can easily create Issue discussion.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"Contributing","text":"Code contributions form Pull Requests always appreciated. suitable workflow: Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//gratia.git Make sure track progress upstream (.e., version gratis gavinsimpson/gratia) git remote add upstream https://github.com/gavinsimpson/gratia.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new feature branch) Push account Submit pull request home base gavinsimpson/gratia","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"development-tools--paradigm--ethos","dir":"","previous_headings":"Code contributions","what":"Development tools / paradigm / ethos","title":"Contributing","text":"Please note following contributing code: {gratia} tightly aligned tidyverse use {dplyr} related packages lot internally developing package. plan replacing code lower-level code using {vctrs}, right now development focus filling functionality package premature optimisation. original aim {gratia} provide {ggplot2} plotting smooths; please stick principle use plotting paradigm. aim {mgcv}-feature complete; {mgcv} can something terms plotting smooths, handling specialists smooths, etc, principle {gratia} support . aim general compatibility {mgcv}; {gratia} deviates {mgcv} things, needs good justification; example {gratia} deviates multivariate isotropic smooths fitted s() plotted, Dave Miller (@dill) argued convincingly way. Don’t add dependencies! Unless accompanied strong justification, want reduce dependencies increase number. ’m using {styler} style code, using 2 spaces indent. code written change, however. Respect 80 character line length limit. contribute functionality fix bug, please add test using {testthat} framework insure new things works correctly bug stays fixed. contributions must result new NOTES, WARNINGS, ERRORS running R CMD check ---cran; please check contributions Winbuilder example.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"email","dir":"","previous_headings":"","what":"Email","title":"Contributing","text":"hate email! can email GMail address — ’s like can stop :-) — unless capture attention immediately label message {gratia}-related, quickly get swamped never seen . Even label , ’s guarantee ever get round replying; usually happens ’ll forget don’t remember check gratia label often. end result email , get response , tardy. infinitely better use Discussions Issues pages Github ask questions package report problems. Please don’t email work (academic) address (email address might find ) {gratia}. question GAMs, much better ask CrossValidated StackOverflow depending whether question statistical programming related. relates {gratia} can use Discussions page. Asking question public allows others reply public, contributes body knowledge easily available others. circumstances send email multiple addresses; quickest way get message trash.","code":""},{"path":"https://gavinsimpson.github.io/gratia/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"The MIT License (MIT)","title":"The MIT License (MIT)","text":"Copyright (c) 2013-2024 Gavin L. Simpson Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Customizing plots","text":"draw() function {gratia} envisaged ggplot-based alternative mgcv:::plot.gam(). , never intended allow sorts customization possible ggplot() packages use ggplot() plotting layer. largely due decision produce multiple separate ggplot() plots GAMs multiple smooths, subsequently combined single figure device, initially using {cowplot} recently {patchwork}. things way evident consider might represent smooths 3 4 variables (common might think; consider space-time models via te(x, y, time, d = c(2,1)) space-depth-time models [think ocean atmospheric data space depth (height), observed time] via te(x, y, depth, time, d = c(2, 1, 1))), require facets top produce small multiples, means can’t use facets plot separate smooths. Additional complications arise consider complex smooth types, splines sphere, might want us different coordinate systems geoms best represent underlying smooth. gone root combining multiple ggplot objects single figure, problem customizing plots quickly rears head. vignette presents solutions problem modifying adding plots produced draw() culminating example illustrating use {gratia}’s utility functions produce plots lower-lever components.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"adding-layers-to-plots-with-the-operator","dir":"Articles","previous_headings":"","what":"Adding layers to plots with the & operator","title":"Customizing plots","text":"start simulating data fitting GAM four smooth functions default plot produced draw() want change theme plots, can’t append theme() layer p affects last plot patchwork1 One way apply theme plots patchwork & operator.","code":"library(\"gratia\") library(\"mgcv\") #> Loading required package: nlme #> This is mgcv 1.9-1. For overview type 'help(\"mgcv-package\")'. library(\"ggplot2\") library(\"dplyr\") #> #> Attaching package: 'dplyr' #> The following object is masked from 'package:nlme': #> #> collapse #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union library(\"patchwork\") # simulate data n <- 400 eg1 <- data_sim(\"eg1\", n = n, seed = 1) # fit model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = eg1, method = \"REML\") p <- draw(m) p p + theme_bw() p & theme_bw()"},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"combining-individual-plots-produced-by-draw","dir":"Articles","previous_headings":"","what":"Combining individual plots produced by draw()","title":"Customizing plots","text":"draw() methods like draw.gam() return object created patchwork::wrap_plots(), result isn’t straightforward combine objects new patchwork avoid error, need use patchwork::plot_layout() set dimensions want achieved directly via draw() instructive know combine outputs draw() need arise, want create patchwork plots different models.","code":"p1 <- draw(m, select = \"s(x0)\") p2 <- draw(m, select = \"s(x1)\") p3 <- draw(m, select = \"s(x2)\") p1 + p2 + p3 #> Error in `wrap_dims()`: #> ! Need 3 panels, but together `nrow` and `ncol` only provide 1. #> ℹ Please increase `ncol` and/or `nrow`. p1 + p2 + p3 + plot_layout(ncol = 3) draw(m, select = c(\"s(x0)\", \"s(x1)\", \"s(x2)\"), ncol = 3)"},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"building-your-own-plot-by-hand","dir":"Articles","previous_headings":"","what":"Building your own plot by hand","title":"Customizing plots","text":"{gratia} provides high-level functions like draw() get good graphical overview fitted model, little option customisation — isn’t possible desirable allow possible customisation options fatures {ggplot2} single function. Think many arguments require! Instead, {gratia} also exports lower-level functions used draw() can create plot using whatever {ggplot2} functions make sense. next code blocks ’ll see plot created draw(m) can recreated hand using lower-level building blocks. main thing need evaluate smooths values covariates. done using smooth_estimates(). also need add credible interval evaluations, can done tidyverse-style via add_confint() default draw.gam() add partial residuals partial effects plots. achieve effect, need add partial residuals data used fit model. can done via add_partial_residuals() will2 add columns names \"s(x0)\". \"s(x1)\", etc. data. Now everything need recreate plots created draw.gam(). code block filter sm focus specific smooth, f(x2)f(x2) (\"s(x2)\"), add rug plot observed values x2, credible interval around estimated smooth, partial residuals point layer, estimated smooth line layer, annotation Assuming repeat steps smooths, creating plot objects p_sx0, p_sx1, p_sx2, p_sx3 (code shown), can complete plot creating patchwork desired number rows columns real benefit complete control data plotted can use power {ggplot2} map additional variables plot aesthetics. example, let’s assume factor variable original data want colour partial residuals according levels factor. Let’s create factor Now can modify plotting code map fac colour aesthetic plot partial residuals. save typing, ’ll reorder layers plot add partial residuals last can also simple model checking plotting smooth partial residuals coloured according one covariates (also plotting actual residuals covariates). code chunk , map covariate x1 colour size aesthetics (note deleted cex = 1.5 allow mapping size) resulting plot doesn’t show particular problems model way data simulated, hopefully illustrates can possible use low-level functions provided {gratia}.","code":"# evaluate the smooths sm <- smooth_estimates(m) |> add_confint() sm #> # A tibble: 400 × 11 #> .smooth .type .by .estimate .se x0 x1 x2 x3 .lower_ci #> #> 1 s(x0) TPRS NA -0.929 0.422 0.0131 NA NA NA -1.76 #> 2 s(x0) TPRS NA -0.881 0.396 0.0230 NA NA NA -1.66 #> 3 s(x0) TPRS NA -0.834 0.372 0.0329 NA NA NA -1.56 #> 4 s(x0) TPRS NA -0.786 0.348 0.0429 NA NA NA -1.47 #> 5 s(x0) TPRS NA -0.738 0.326 0.0528 NA NA NA -1.38 #> 6 s(x0) TPRS NA -0.690 0.305 0.0627 NA NA NA -1.29 #> 7 s(x0) TPRS NA -0.643 0.287 0.0727 NA NA NA -1.20 #> 8 s(x0) TPRS NA -0.595 0.270 0.0826 NA NA NA -1.12 #> 9 s(x0) TPRS NA -0.548 0.255 0.0925 NA NA NA -1.05 #> 10 s(x0) TPRS NA -0.501 0.242 0.102 NA NA NA -0.975 #> # ℹ 390 more rows #> # ℹ 1 more variable: .upper_ci # add partial residuals to data eg1 <- eg1 |> add_partial_residuals(m) names(eg1) #> [1] \"y\" \"x0\" \"x1\" \"x2\" \"x3\" \"f\" \"f0\" \"f1\" \"f2\" #> [10] \"f3\" \"s(x0)\" \"s(x1)\" \"s(x2)\" \"s(x3)\" p_sx2 <- sm |> filter(.smooth == \"s(x2)\") |> ggplot() + geom_rug(aes(x = x2), data = eg1, sides = \"b\", length = grid::unit(0.02, \"npc\") ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, x = x2), alpha = 0.2 ) + geom_point(aes(x = x2, y = `s(x2)`), data = eg1, cex = 1.5, colour = \"steelblue3\" ) + geom_line(aes(x = x2, y = .estimate), lwd = 1.2) + labs(y = \"Partial effect\", title = \"s(x2)\") p_sx2 p_sx0 + p_sx1 + p_sx2 + p_sx3 + plot_layout(ncol = 2) set.seed(12) eg1 <- eg1 |> mutate(fac = sample(letters[1:4], n(), replace = TRUE)) plt <- sm |> filter(.smooth == \"s(x2)\") |> ggplot() + geom_rug(aes(x = x2), data = eg1, sides = \"b\", length = grid::unit(0.02, \"npc\") ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, x = x2), alpha = 0.2 ) + geom_line(aes(x = x2, y = .estimate), lwd = 1.2) + labs(y = \"Partial effect\", title = \"s(x2)\") plt + geom_point( aes( x = x2, y = `s(x2)`, colour = fac ), # <-- map fac to colour aesthetic data = eg1, cex = 1.5 ) plt + geom_point( aes( x = x2, y = `s(x2)`, colour = x1, size = x1 ), # <-- map fac to colour aesthetic data = eg1, alpha = 0.3 ) + # <-- deleted cex!! scale_colour_viridis_c(option = \"plasma\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"carbon-dioxide-uptake-in-grass-plants","dir":"Articles","previous_headings":"","what":"Carbon Dioxide Uptake in Grass Plants","title":"Data slices","text":"first example uses small data set experimental study cold tolerance grass Echinochloa crusgalli. data data frame CO2 provided {datasets} package ships R. One way model data allow different smooths combinations treatment type covariates can look fitted smooths using draw() might want compare model fitted values treatment types (origins), ignoring random effect component. want evaluate model range values covariate conc combinations factors. data slice covariate space, can create using data_slice(). create data slice conc Quebec type chilled treatment use Notice data_slice() filled something remaining covariates didn’t mention? case, data_slice() doesn’t know tt created, chosen modal level tt factor, correct choice case. Instead, need specify correct level explicitly tt created data slice, can predict model using combination covariate values specified slice. use predict.gam() , fitted_values() function {gratia} easier use, especially non-Gaussian models Notice excluded random effect term; even though specify something plant covariate can ignore term model using exclude argument. fitted_values() creates credible interval scale link function back-transforms response scale scale = \"response\", also default. Plotting fitted values data slice now requires simple {ggplot2} knowledge Next, let’s compare fitted effects treatment Mississippi origin plants , replaced automatically-generated tt variable correctly specified call fct_cross(), retaining levels type treatment factors. insures correct combinations corresponding treatment type factors also preserve original levels tt covariate created. can visualise fitted values data slice creating data slices, used helper functions specify covariate values slice. {gratia} provides several helper functions: evenly(x, n = 100) — creates n evenly spaced values range covariate, evenly(x, = 5 — creates evenly spaced values range covariate increments 5, evenly(x, ..., lower = 5, upper = 10) — either two uses evenly() shown use lower upper limits vector x. Arguments lower upper can used change one upper lower bounds. evenly(fct) — produces new factor containing level specified factor fct just , ref_level(fct) — creates new factor containing just reference level specified factor covariate fct, level(fct, \"level\") — creates factor requested \"level\" factor fct. cases involving factors, helper functions set levels factor match original model fit2. second argument data_slice() ... ... argument allows provide expressions create covariate values want data slice. Expressions passed ... evaluated within model frame fitted model (argument object) data (supplied). restricted either using helper functions provide {gratia}; R function used long makes sense context model frame, returns something can combined using tidyr::expand_grid().","code":"## data load and prep data(CO2, package = \"datasets\") plant <- CO2 |> as_tibble() |> rename(plant = Plant, type = Type, treatment = Treatment) |> mutate(plant = factor(plant, ordered = FALSE)) plant_ylab <- expression(CO[2] ~ uptake ~ (mu * mol ~ m^{-3})) plant_xlab <- expression(CO[2] ~ concentration ~ (mL ~ L^{-1})) plant |> ggplot(aes(x = conc, y = uptake, group = plant, colour = treatment)) + geom_point() + geom_line() + facet_wrap(~type) + labs(y = plant_ylab, x = plant_xlab, colour = \"Treatment\") plant <- plant |> mutate(tt = fct_cross(treatment, type)) m_plant <- gam(uptake ~ treatment * type + s(conc, by = tt, k = 6) + s(plant, bs = \"re\"), data = plant, method = \"REML\", family = Gamma(link = \"log\") ) overview(m_plant) #> #> Generalized Additive Model with 8 terms #> #> term type k edf statistic p.value #> #> 1 treatment parametric NA 1 1.59 0.2124864 #> 2 type parametric NA 1 11.2 0.0014830 #> 3 treatment:type parametric NA 1 7.45 0.0085489 #> 4 s(conc):ttnonchilled:Quebec TPRS 5 4.72 69.7 < 0.001 #> 5 s(conc):ttchilled:Quebec TPRS 5 4.71 86.5 < 0.001 #> 6 s(conc):ttnonchilled:Mississippi TPRS 5 4.62 74.1 < 0.001 #> 7 s(conc):ttchilled:Mississippi TPRS 5 4.39 25.3 < 0.001 #> 8 s(plant) Random effect 12 7.40 12.8 < 0.001 draw(m_plant, residuals = TRUE, scales = \"fixed\") ds1 <- data_slice(m_plant, conc = evenly(conc, n = 100), type = level(type, \"Quebec\"), treatment = level(treatment, \"chilled\") ) ds1 #> # A tibble: 100 × 5 #> conc type treatment tt plant #> #> 1 95 Quebec chilled nonchilled:Quebec Qn1 #> 2 104. Quebec chilled nonchilled:Quebec Qn1 #> 3 113. Quebec chilled nonchilled:Quebec Qn1 #> 4 122. Quebec chilled nonchilled:Quebec Qn1 #> 5 132. Quebec chilled nonchilled:Quebec Qn1 #> 6 141. Quebec chilled nonchilled:Quebec Qn1 #> 7 150. Quebec chilled nonchilled:Quebec Qn1 #> 8 159. Quebec chilled nonchilled:Quebec Qn1 #> 9 168. Quebec chilled nonchilled:Quebec Qn1 #> 10 177. Quebec chilled nonchilled:Quebec Qn1 #> # ℹ 90 more rows ds1 <- data_slice(m_plant, conc = evenly(conc, n = 100), treatment = level(treatment, \"chilled\"), type = level(type, \"Quebec\"), tt = level(tt, \"chilled:Quebec\") ) ds1 #> # A tibble: 100 × 5 #> conc treatment type tt plant #> #> 1 95 chilled Quebec chilled:Quebec Qn1 #> 2 104. chilled Quebec chilled:Quebec Qn1 #> 3 113. chilled Quebec chilled:Quebec Qn1 #> 4 122. chilled Quebec chilled:Quebec Qn1 #> 5 132. chilled Quebec chilled:Quebec Qn1 #> 6 141. chilled Quebec chilled:Quebec Qn1 #> 7 150. chilled Quebec chilled:Quebec Qn1 #> 8 159. chilled Quebec chilled:Quebec Qn1 #> 9 168. chilled Quebec chilled:Quebec Qn1 #> 10 177. chilled Quebec chilled:Quebec Qn1 #> # ℹ 90 more rows fv1 <- fitted_values(m_plant, data = ds1, scale = \"response\", exclude = \"s(plant)\") fv1 #> # A tibble: 100 × 10 #> .row conc treatment type tt plant .fitted .se .lower_ci .upper_ci #> #> 1 1 95 chilled Quebec chille… Qn1 13.0 0.0783 11.2 15.2 #> 2 2 104. chilled Quebec chille… Qn1 14.1 0.0757 12.1 16.3 #> 3 3 113. chilled Quebec chille… Qn1 15.2 0.0737 13.1 17.5 #> 4 4 122. chilled Quebec chille… Qn1 16.3 0.0722 14.2 18.8 #> 5 5 132. chilled Quebec chille… Qn1 17.6 0.0714 15.3 20.2 #> 6 6 141. chilled Quebec chille… Qn1 18.9 0.0711 16.4 21.7 #> 7 7 150. chilled Quebec chille… Qn1 20.2 0.0712 17.6 23.3 #> 8 8 159. chilled Quebec chille… Qn1 21.6 0.0716 18.8 24.9 #> 9 9 168. chilled Quebec chille… Qn1 23.0 0.0721 20.0 26.5 #> 10 10 177. chilled Quebec chille… Qn1 24.4 0.0726 21.2 28.1 #> # ℹ 90 more rows fv1 |> ggplot(aes(x = conc, y = .fitted)) + geom_point( data = plant |> filter(type == \"Quebec\", treatment == \"chilled\"), mapping = aes(y = uptake), alpha = 0.8, colour = \"steelblue\" ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( x = plant_xlab, y = plant_ylab, title = expression(Estimated ~ CO[2] ~ uptake), subtitle = \"Chilled plants of the Quebec type\" ) ds2 <- data_slice(m_plant, conc = evenly(conc, n = 100), treatment = evenly(treatment), type = level(type, \"Mississippi\") ) |> mutate(tt = fct_cross(treatment, type, keep_empty = TRUE)) ds2 #> # A tibble: 200 × 5 #> conc treatment type tt plant #> #> 1 95 nonchilled Mississippi nonchilled:Mississippi Qn1 #> 2 95 chilled Mississippi chilled:Mississippi Qn1 #> 3 104. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 4 104. chilled Mississippi chilled:Mississippi Qn1 #> 5 113. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 6 113. chilled Mississippi chilled:Mississippi Qn1 #> 7 122. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 8 122. chilled Mississippi chilled:Mississippi Qn1 #> 9 132. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 10 132. chilled Mississippi chilled:Mississippi Qn1 #> # ℹ 190 more rows fitted_values(m_plant, data = ds2, scale = \"response\", exclude = \"s(plant)\" ) |> ggplot(aes(x = conc, y = .fitted, group = treatment)) + geom_point( data = plant |> filter(type == \"Mississippi\"), mapping = aes(y = uptake, colour = treatment), alpha = 0.8 ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = treatment), alpha = 0.2 ) + geom_line(aes(colour = treatment)) + labs( x = plant_xlab, y = plant_ylab, title = expression(Estimated ~ CO[2] ~ uptake), subtitle = \"Comparison of treatment in plants of the Mississippi type\", colour = \"Treatment\", fill = \"Treatment\" ) args(gratia:::data_slice.gam) #> function (object, ..., data = NULL, envir = NULL) #> NULL"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"slices-through-a-2d-smooth","dir":"Articles","previous_headings":"","what":"Slices through a 2D smooth","title":"Data slices","text":"second example, ’ll use bivariate example data set {mgcv} fit tensor product covariates x z aim example create univariate data slice 2D smooth user-specified values x holding z one fixed values. visualise effect smooth level, using smooth_estimates(), response level, using fitted_values().","code":"# simulate data from the bivariate surface df <- data_sim(\"eg2\", n = 1000, scale = 0.25, seed = 2) # fit the GAM m_biv <- gam(y ~ te(x, z), data = df, method = \"REML\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"using-smooth_estimates","dir":"Articles","previous_headings":"Slices through a 2D smooth","what":"Using smooth_estimates()","title":"Data slices","text":"begin creating slice data space. also create label point nice axis label. evaluate smooth desired values add confidence interval can plot sm using {ggplot2} Note interval Marra Wood (2012) interval. doesn’t include uncertainty model constant term moment, unless smooth close linear shouldn’t make much difference. extends multiple slices asking several discrete z","code":"ds3 <- data_slice(m_biv, x = evenly(x, n = 100), z = quantile(z, probs = 0.25) ) z_val <- with(ds3, round(quantile(z, probs = 0.25), 2)) ylab <- bquote(hat(f)(x, .(z_val))) sm <- smooth_estimates(m_biv, select = \"te(x,z)\", data = ds3) |> add_confint() sm #> # A tibble: 100 × 9 #> .smooth .type .by .estimate .se x z .lower_ci .upper_ci #> #> 1 te(x,z) Tensor prod… NA 0.103 0.0583 6.63e-4 0.245 -0.0107 0.218 #> 2 te(x,z) Tensor prod… NA 0.122 0.0548 1.08e-2 0.245 0.0148 0.230 #> 3 te(x,z) Tensor prod… NA 0.141 0.0514 2.08e-2 0.245 0.0400 0.242 #> 4 te(x,z) Tensor prod… NA 0.159 0.0482 3.09e-2 0.245 0.0648 0.254 #> 5 te(x,z) Tensor prod… NA 0.177 0.0451 4.10e-2 0.245 0.0890 0.266 #> 6 te(x,z) Tensor prod… NA 0.195 0.0422 5.11e-2 0.245 0.113 0.278 #> 7 te(x,z) Tensor prod… NA 0.213 0.0396 6.12e-2 0.245 0.135 0.291 #> 8 te(x,z) Tensor prod… NA 0.230 0.0372 7.13e-2 0.245 0.157 0.303 #> 9 te(x,z) Tensor prod… NA 0.247 0.0351 8.14e-2 0.245 0.178 0.316 #> 10 te(x,z) Tensor prod… NA 0.263 0.0333 9.14e-2 0.245 0.198 0.328 #> # ℹ 90 more rows sm |> ggplot(aes(x = x, y = .estimate)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Evaluation of smooth te(x,z) at fixed z\", y = ylab ) ds4 <- data_slice(m_biv, x = evenly(x, n = 100), z = round(quantile(z, probs = c(0.25, 0.5, 0.75)), 2) ) sm <- smooth_estimates(m_biv, select = \"te(x,z)\", data = ds4) |> add_confint() |> mutate(fz = factor(z)) sm |> ggplot(aes(x = x, y = .estimate, colour = fz, group = fz)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = fz, colour = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Evaluation of smooth te(x,z) at fixed z\", y = expression(hat(f)(x, z)), colour = \"z\", fill = \"z\" )"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"using-fitted_samples","dir":"Articles","previous_headings":"Slices through a 2D smooth","what":"Using fitted_samples()","title":"Data slices","text":"want evaluate surface x fixed z conditional upon values covariates (model predicted fitted values) fitted_samples() tidy wrapper predict.gam(). single z multiple z difference now model constant included well uncertainty.","code":"fitted_values(m_biv, data = ds3) |> # default is response scale, not link ggplot(aes(x = x, y = .fitted)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Fitted values from model\", y = expression(hat(y)) ) fitted_values(m_biv, data = ds4) |> mutate(fz = factor(z)) |> ggplot(aes(x = x, y = .fitted, colour = fz, group = fz)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = fz, colour = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Fitted values from model\", y = expression(hat(y)), colour = \"z\", fill = \"z\" )"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"plotting","dir":"Articles","previous_headings":"","what":"Plotting","title":"Getting started with gratia","text":"gratia provides draw() function produce plots using ggplot2 📦. plot estimated smooths GAM fitted , use plots produced partial effect plots, show component contributions, link scale, model term linear predictor. y axis plots typically centred around 0 due smooths sum--zero identifiability constraint applied . constraint allows model include multiple smooths remain identifiable. plots allow read contributions smooth fitted response (link scale); show link-scale predictions response smooth, conditional upon terms model, including parametric effects intercept, zero contribution. parlance marginaleffects package (Arel-Bundock, Greifer, Heiss Forthcoming), plots show adjusted predictions, just adjustment includes setting contribution model terms predicted value zero. partial derivatives (marginaleffects call marginal effect slope), gratia provides derivatives(). resulting plot intended reasonable overview estimated model, offers limited option modify resulting plot. want full control, can obtain data used create plot smooth_estimates() evaluate smooths values evenly spaced range covariate(s). want evaluate selected smooths, can specify via smooth argument. takes smooth labels names smooths known mgcv. list labels smooths use evaluate f(x2)f(x_2) use can generate plot using ggplot2 package, example","code":"draw(m) sm <- smooth_estimates(m) sm #> # A tibble: 400 × 9 #> .smooth .type .by .estimate .se x0 x1 x2 x3 #> #> 1 s(x0) TPRS NA -1.32 0.390 0.000239 NA NA NA #> 2 s(x0) TPRS NA -1.24 0.365 0.0103 NA NA NA #> 3 s(x0) TPRS NA -1.17 0.340 0.0204 NA NA NA #> 4 s(x0) TPRS NA -1.09 0.318 0.0304 NA NA NA #> 5 s(x0) TPRS NA -1.02 0.297 0.0405 NA NA NA #> 6 s(x0) TPRS NA -0.947 0.279 0.0506 NA NA NA #> 7 s(x0) TPRS NA -0.875 0.263 0.0606 NA NA NA #> 8 s(x0) TPRS NA -0.803 0.249 0.0707 NA NA NA #> 9 s(x0) TPRS NA -0.732 0.237 0.0807 NA NA NA #> 10 s(x0) TPRS NA -0.662 0.228 0.0908 NA NA NA #> # ℹ 390 more rows smooths(m) #> [1] \"s(x0)\" \"s(x1)\" \"s(x2)\" \"s(x3)\" sm <- smooth_estimates(m, smooth = \"s(x2)\") #> Warning: The `smooth` argument of `smooth_estimates()` is deprecated as of gratia #> 0.8.9.9. #> ℹ Please use the `select` argument instead. #> This warning is displayed once every 8 hours. #> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was #> generated. sm #> # A tibble: 100 × 6 #> .smooth .type .by .estimate .se x2 #> #> 1 s(x2) TPRS NA -4.47 0.476 0.00359 #> 2 s(x2) TPRS NA -4.00 0.406 0.0136 #> 3 s(x2) TPRS NA -3.53 0.345 0.0237 #> 4 s(x2) TPRS NA -3.06 0.295 0.0338 #> 5 s(x2) TPRS NA -2.58 0.263 0.0438 #> 6 s(x2) TPRS NA -2.09 0.250 0.0539 #> 7 s(x2) TPRS NA -1.59 0.253 0.0639 #> 8 s(x2) TPRS NA -1.08 0.264 0.0740 #> 9 s(x2) TPRS NA -0.564 0.278 0.0841 #> 10 s(x2) TPRS NA -0.0364 0.289 0.0941 #> # ℹ 90 more rows library(\"ggplot2\") library(\"dplyr\") #> #> Attaching package: 'dplyr' #> The following object is masked from 'package:nlme': #> #> collapse #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union sm |> add_confint() |> ggplot(aes(y = .estimate, x = x2)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2, fill = \"forestgreen\" ) + geom_line(colour = \"forestgreen\", linewidth = 1.5) + labs( y = \"Partial effect\", title = expression(\"Partial effect of\" ~ f(x[2])), x = expression(x[2]) )"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"model-diagnostics","dir":"Articles","previous_headings":"","what":"Model diagnostics","title":"Getting started with gratia","text":"appraise() function provides standard diagnostic plots GAMs plots produced (left--right, top--bottom), quantile-quantile (QQ) plot deviance residuals, scatterplot deviance residuals linear predictor, histogram deviance residuals, scatterplot observed vs fitted values. Adding partial residuals partial effect plots produced draw() can also help diagnose problems model, oversmoothing","code":"appraise(m) draw(m, residuals = TRUE)"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"want-to-learn-more","dir":"Articles","previous_headings":"","what":"Want to learn more?","title":"Getting started with gratia","text":"gratia active development area development currently lacking documentation. find package, look help pages package look examples code help get going.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"what-are-we-simulating","dir":"Articles","previous_headings":"","what":"What are we simulating?","title":"Posterior Simulation","text":"Posterior simulation involves randomly sampling MVN(𝛃̂,𝐕b)\\text{MVN}(\\hat{\\boldsymbol{\\beta}}, \\mathbf{V}_{\\text{b}}) EF(μi,ϕ)\\text{EF}(\\mu_i, \\phi), . might simulate posterior distribution single estimated smooth function see uncertainty estimate function. simulate just subset βj⋅\\beta_{j \\cdot} associated fjf_j interest. Instead, might interested uncertainty expectation (expected value) model given values covariates, case can simulate 𝛃\\boldsymbol{\\beta} sample posterior 𝔼(yi)\\mathbb{E}(y_i), fitted values model. might want generate new values response variable via draws conditional distribution response, simulating new response data 𝕪*\\mathbb{y}^{\\ast}, either observed 𝐱\\mathbf{x} new values $^{}, yi*|𝛈,𝐱∼EF(μî,ϕ)y^{\\ast}_i | \\boldsymbol{\\eta}, \\mathbf{x} \\sim \\text{EF}(\\hat{\\mu_i}, \\phi). Finally, can combine posterior simulation distributions generate posterior draws new data 𝕪*\\mathbb{y}^{\\ast} also include uncertainty expected values. gratia functionality options following functions smooth_samples() generates draws posterior distribution single estimated smooth functions, fitted_samples() generates draws posterior distribution 𝔼(yi|𝐗i=xi)\\mathbb{E}(y_i | \\mathbf{X}_i = x_i), expected value responss, predicted_samples(), generates new response data given supplied values covariates yi*|𝐗i=xi*y^{\\ast}_i | \\mathbf{X}_i = x^{\\ast}_i posterior_samples(), generates draws posterior distribution model, including uncertainty estimated parameters model. simpler terms, fitted_samples() generates predictions “average” expected value response values covariates. predictions include uncertainty estimated values model coefficients. contrast, posterior_samples() generates predictions actual values response might expect observe (model correct) given values covariates. predicted values include variance sampling distribution (error term). predicted_samples() lies somewhere two; predicted values include variation sampling distribution, take model fixed, known. worth reminding posterior draws conditional upon selected values smoothing parameter(s) λj\\lambda_j. act wiggliness estimated smooths known, actual fact estimated (selected perhaps better description) wiglinesses data model fitting. estimated GAM fitted method argument \"REML\", \"ML\", version 𝐕b\\mathbf{V}_{\\text{b}} corrected selected smoothing parameters, 𝐕c\\mathbf{V}_{\\text{c}}, generally available. allows, extent, posterior simulation account additional source uncertainty chosen values 𝛌\\boldsymbol{\\lambda}. two additional functions available gratia posterior simulation: simulate(), derivative_samples(). gratia provides simulate() methods models estimated using gam(), bam(), gamm(), well fitted via scam() scam package. simulate() base R convention thing predicted_samples(), just non-tidy way (pejorative; returns simulated response values matrix, arguably useful math statistical computation.) derivative_samples() provides draws posterior distribution derivative response variable small change focal covariate value. derivative_samples() less general version fitted_samples(); achieve thing two separate calls fitted_samples(). ’ll reserve discussion derivative_samples() separate vignette focused estimating derivatives GAMs. following sections ’ll look four main posterior simulation functions turn.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"posterior-smooths-and-smooth_samples","dir":"Articles","previous_headings":"","what":"Posterior smooths and smooth_samples()","title":"Posterior Simulation","text":"can sample posterior distribution coefficients particular smooth β̂j\\hat{\\beta}_j given values smoothing parameters 𝛌̂\\hat{\\boldsymbol{\\lambda}}. generate posterior samples smooths sampling 𝛃j⋆∼N(β̂j,𝐕β̂j)\\boldsymbol{\\beta}_{j\\star} \\sim N(\\hat{\\beta}_j, \\mathbf{V}_{\\hat{\\beta}_j}) forming 𝐗𝛃̂j𝛃j⋆𝖳\\mathbf{X}_{\\hat{\\boldsymbol{\\beta}}_j} \\boldsymbol{\\beta}_{j\\star}^{\\mathsf{T}}. sampling can done using smooth_samples(). illustrate , ’ll simulate data Gu & Wabha’s 4 smooth example, fit GAM simulated data simulating posterior distribution estimated smooth, sampling coefficients particular smooth. model, coefficients smooth f(x0)f(x_0) stored elements 2 10 coefficients vector. sample posterior distribution coefficients use smooth_samples() choosing particular smooth ’re interested using select argument; want sample smooths posteriors smooths model, select can left default value. Typically ’re bothered particular values covariate evaluate posterior smooths; ask 100 evenly spaced values x0 using n_vals, can provide covariates values via data argument. number posterior smooths sampled controlled argument n; ask 100 samples. Objects returned smooth_samples() draw() method available draw posterior smooths can set n_samples randomly select many smooths draw (seed can provided via argument seed make set chosen smooths repeatable.) credible interval smooth contain smooths. standard 95% credible interval, sampled smooths exceed limits interval. Following Marra & Wood (2012), blue credible interval contain average 95% grey lines (posterior smooths) given value x0x_0. across function frequentist interpretation credible interval implies values x0x_0 coverage less 95% values greater 95%.","code":"ss_df <- data_sim(\"eg1\", seed = 42) m_ss <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = ss_df, method = \"REML\") s_x0 <- get_smooth(m_ss, \"s(x0)\") smooth_coef_indices(s_x0) #> [1] 2 3 4 5 6 7 8 9 10 sm_samp <- smooth_samples(m_ss, select = \"s(x0)\", n_vals = 100, n = 100, seed = 21) sm_samp |> draw(alpha = 0.3) # evaluate the fitted smooth over x0 and add on a credible interval sm_est <- smooth_estimates(m_ss, select = \"s(x0)\") |> add_confint() # plot the smooth, credible interval, and posterior smooths sm_est |> ggplot(aes(x = x0)) + geom_lineribbon(aes(ymin = .lower_ci, ymax = .upper_ci), orientation = \"vertical\", fill = \"#56B4E9\", alpha = 0.5 ) + geom_line( data = sm_samp, aes(y = .value, group = .draw), alpha = 0.2 ) + geom_line(aes(y = .estimate), linewidth = 1, colour = \"#E69F00\") + labs(y = smooth_label(s_x0))"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"posterior-fitted-values-via-fitted_samples","dir":"Articles","previous_headings":"","what":"Posterior fitted values via fitted_samples()","title":"Posterior Simulation","text":"Posterior fitted values draws posterior distribution mean expected value response. expectations returned use predict() estimated GAM, except fitted_samples() includes uncertainty estimated model coefficients, whereas predict() just uses estimated coefficients. example, using data_sim() simulate data example 6 Luo & Wahba (1997) sin(2⋅(4x−2))+2⋅exp(−256⋅(x−0.5)2) \\sin(2 \\cdot (4x - 2)) + 2 \\cdot \\exp(-256 \\cdot (x - 0.5)^2) data fit adaptive smoother Next create data slice 200 values interval (0,1) ’ll predict model generate posterior fitted values compute fitted values new data posterior fitted values drawn fitted_samples() using Gaussian approximation posterior. just take 10 draws posterior observation new_df merge posterior draws data Adding posterior fitted samples plot data, superimposing Bayesian credible interval fitted values see posterior draws largely contained credible interval. difference smooth_samples() now ’re including effects model terms. simple model single smooth identity link, difference model constant term uncertainty included samples.","code":"f <- function(x) { sin(2 * ((4 * x) - 2)) + (2 * exp(-256 * (x - 0.5)^2)) } df <- data_sim(\"lwf6\", dist = \"normal\", scale = 0.3, seed = 2) plt <- df |> ggplot(aes(x = x, y = y)) + geom_point(alpha = 0.5) + geom_function(fun = f) plt m <- gam(y ~ s(x, k = 25, bs = \"ad\"), data = df, method = \"REML\") new_df <- data_slice(m, x = evenly(x, lower = 0, upper = 1, n = 200)) |> mutate(.row = row_number()) fv <- fitted_values(m, data = new_df) fs <- fitted_samples(m, data = new_df, n = 10, seed = 4) |> left_join(new_df |> select(.row, x), by = join_by(.row == .row)) plt + geom_ribbon(data = fv, aes(y = .fitted, ymin = .lower_ci, ymax = .upper_ci), fill = \"red\", alpha = 0.3) + geom_line(data = fs, aes(group = .draw, x = x, y = .fitted), colour = \"yellow\", alpha = 0.4)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"distributional-gams","dir":"Articles","previous_headings":"Additional examples","what":"Distributional GAMs","title":"Posterior Simulation","text":"possible, predicted_samples() posterior_samples() also work distributional GAMs. possible suitable random number generator available family object stored within model. illustrate, reuse example Matteo Fasiolo, author mgcViz package, based classic mcycle data set MASS package. loading data adding row number variable use late data fit standard Gaussian GAM conditional mean accel. Next, simulate n_sim new response values observed data using predicted_samples() comments briefly indicate dplyr code . Now can plot observed simulated data resulting plot shown left-hand panel figure . clearly problem ; simulated data don’t look much like observations 15ms immediately impact ~45ms impact. due model fitted conditional mean accel. Instead, model conditional mean conditional variance data, linear predictors parameters Gaussian distribution Simulating new data follows using code earlier benefit data wrangling now realised can replace data plot created earlier simulations distribution GAM, plot plot simulated response data distributional GAM shown right hand panel plot. Now, much less disagreement observed data can produce fitted mdoel.","code":"data(mcycle, package = \"MASS\") mcycle <- mcycle |> mutate( .row = row_number() ) |> relocate(.row, .before = 1L) m_gau <- gam(accel ~ s(times, k = 20), data = mcycle, method = \"REML\" ) n_sim <- 10 n_data <- nrow(mcycle) sim_gau <- predicted_samples(m_gau, n = n_sim, seed = 10) |> left_join(mcycle |> select(-accel), # join on the observed data for times by = \".row\" ) |> rename(accel = .response) |> # rename bind_rows(mcycle |> relocate(.after = last_col())) |> # bind on observer data mutate( # add indicator: simulated or observed type = rep(c(\"simulated\", \"observed\"), times = c(n_sim * n_data, n_data) ), .alpha = rep( # set alpha values for sims & observed c(0.2, 1), time = c(n_sim * n_data, n_data) ) ) plt_labs <- labs( x = \"Time after impact [ms]\", y = \"Acceleration [g]\" ) plt_gau <- sim_gau |> ggplot(aes(x = times)) + geom_point(aes(y = accel, colour = type, alpha = .alpha)) + plt_labs + scale_colour_okabe_ito(order = c(6, 5)) + scale_alpha_identity() m_gaulss <- gam( list(accel ~ s(times, k = 20, bs = \"tp\"), ~ s(times, bs = \"tp\") ), data = mcycle, family = gaulss() ) sim_gaulss <- predicted_samples(m_gaulss, n = n_sim, seed = 20) |> left_join(mcycle |> select(-accel), by = \".row\" ) |> rename(accel = .response) |> bind_rows(mcycle |> relocate(.after = last_col())) |> mutate( type = rep(c(\"simulated\", \"observed\"), times = c(n_sim * n_data, n_data) ), .alpha = rep(c(0.2, 1), time = c(n_sim * n_data, n_data)) ) plt_gaulss <- plt_gau %+% sim_gaulss plt_gau + plt_gaulss + plot_annotation(tag_levels = \"a\") + plot_layout(guides = \"collect\", ncol = 2)"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"prediction-intervals","dir":"Articles","previous_headings":"Additional examples","what":"Prediction intervals","title":"Posterior Simulation","text":"One use posterior simulation generate prediction intervals fitted model. Prediction intervals include two sources uncertainty; estimated model , plus sampling uncertainty error arises drawing observations conditional distribution response. example, Gaussian GAM, first source uncertainty comes uncertainty estimates βj\\beta_j, model coefficients. uncertainty mean expected value response. second source uncertainty stems error term, estimated variance response. two parameters define conditional distribution YiY_i. value covariate(s) 𝐗\\mathbf{X}, estimated model defines entire distribution response values might expect observe covariate values. illustrate, ’ll fit simple GAM single smooth function data simulate Gu & Wabha’s function f2f_2 using data_sim(). simulate 400 values Gaussian distribution variance σ2=1\\sigma^2 = 1. simulated data, true function generated shown GAM data contains single smooth function x consider new value covariate x, x*=0.5x^{\\ast} = 0.5, expected value response given model, 𝔼(y*|x=x*)\\mathbb{E}(y^{*} | x = x^{*}), ~2.92, obtain using predict() value mean Gaussian distribution , model correct description data, describes distribution values YY might take x=0.5x = 0.5. Gaussian distribution defined two parameters; mean, μ\\mu, describes middle distribution, variance, σ2\\sigma^2, describes spread distribution mean. fully describe Gaussian distribution response x=0.5x = 0.5, need estimate variance. didn’t model explicitly GAM, get estimate model’s scale parameter, ϕ\\phi. stored element scale model object can visualise distribution looks like magic ggdist package orange region shows expected density response values x*=0.5x^{\\ast} = 0.5 model predicts expect observe. region assumes uncertainty estimate mean variance. Prediction intervals take account variation expected value, plus uncertainty expected value. fitted_values() conveniently returns uncertainty us, default 95% credible interval .se column standard error (standard deviation) estimated value (.fitted), .lower_ci .upper_ci lower upper uncertainty bounds (95% level) estimated value respectively. GAMs fitted mgcv don’t corresponding estimate uncertainty scale parameter, ϕ\\phi, model estimated standard deviation σ̂\\hat{\\sigma}. pretty easy compute upper lower tail quantiles fitted Gaussian distribution range values x get prediction interval, ’d ignoring uncertainty model estimates mean. Posterior simulation provides simple convenient way generate prediction interval includes model uncertainty, works principle families available mgcv (although practice, families currently supported gratia). compute prediction interval x GAM, creating set data evenly range x observed data used fit model added variable .row used later match posterior simulated values row prediction data set ds. also compute fitted values new observations using fitted_values(). step isn’t required order posterior simulation gratia, ’ll use fitted values later show model estimated values uncertainty contrast prediction interval. use posterior_samples() generate new response data new x values ds use join add prediction data draw asked 10000 posterior draws new value x. Ideally ’d generate least three four times many draws get precise estimate prediction interval, keep number low vignette avoid excessive computation time. ’re also using smoothness parameter selection corrected version Bayesian covariance matrix; matrix adjusted account us knowing value smoothing parameter f(xi)f(x_i). ps tibble, n * nrow(ds) rows. .draw variable groups simulated values posterior draw, .row groups posterior draws value x. summarise posterior draws using {dplyr} need function compute quantiles posterior distribution value x (.row). following function simple wrapper around quantile() function base R, arranges output quantile() data frame. apply function set posterior draws, grouping .row summarise separately posterior distribution new value x. reframe() used summarise posterior using quantile_fun() function. ease use, pivot resulting summary long wide format add covariate values joining .row variable 95% prediction interval shown first 10 rows prediction data. column labelled .q50 median posterior distribution. can now use various objects produced plot fitted values model (uncertainties), well prediction intervals just generated. add observed data used fit model black points, summarise posterior samples (ps) using hexagonal binning (avoid plotting 2 million posterior samples) outermost pair blue lines plot prediction interval created. interval encloses, expected, almost observe data points. also encloses, design, posterior samples, indicated filled hexagonal bins, warmer colours indicating larger counts posterior draws.","code":"df <- data_sim(\"gwf2\", n = 400, scale = 1, dist = \"normal\", seed = 8) df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_function(fun = gw_f2, colour = \"#0072B2\", linewidth = 1.5) m <- gam(y ~ s(x), data = df, method = \"REML\", family = gaussian()) mu <- predict(m, newdata = data.frame(x = 0.5)) mu #> 1 #> 2.919094 sigma <- m$scale sigma #> [1] 1.019426 df |> ggplot(aes(x = x, y = y)) + stat_halfeye(aes(ydist = dist_normal(mean = mu, sd = sigma)), x = 0.5, scale = 0.2, slab_fill = \"#E69F00\", slab_alpha = 0.7 ) + geom_point() + geom_function(fun = gw_f2, colour = \"#0072B2\", linewidth = 1.5) + geom_point(x = 0.5, y = mu, colour = \"red\") fitted_values(m, data = data.frame(x = 0.5)) #> # A tibble: 1 × 6 #> .row x .fitted .se .lower_ci .upper_ci #> #> 1 1 0.5 2.92 0.161 2.60 3.23 ds <- data_slice(m, x = evenly(x, n = 200)) |> mutate(.row = row_number()) fv <- fitted_values(m, data = ds) ps <- posterior_samples(m, n = 10000, data = ds, seed = 24, unconditional = TRUE) |> left_join(ds, by = join_by(.row == .row)) ps #> # A tibble: 2,000,000 × 4 #> .row .draw .response x #> #> 1 1 1 -1.34 0.00129 #> 2 2 1 -0.0495 0.00629 #> 3 3 1 0.0308 0.0113 #> 4 4 1 -0.783 0.0163 #> 5 5 1 0.861 0.0213 #> 6 6 1 0.475 0.0263 #> 7 7 1 0.858 0.0313 #> 8 8 1 0.143 0.0363 #> 9 9 1 -0.0344 0.0413 #> 10 10 1 1.04 0.0463 #> # ℹ 1,999,990 more rows quantile_fun <- function(x, probs = c(0.025, 0.5, 0.975), ...) { tibble::tibble( .value = quantile(x, probs = probs, ...), .q = probs * 100 ) } p_int <- ps |> group_by(.row) |> reframe(quantile_fun(.response)) |> pivot_wider( id_cols = .row, names_from = .q, values_from = .value, names_prefix = \".q\" ) |> left_join(ds, by = join_by(.row == .row)) p_int #> # A tibble: 200 × 5 #> .row .q2.5 .q50 .q97.5 x #> #> 1 1 -2.84 -0.847 1.25 0.00129 #> 2 2 -2.70 -0.651 1.41 0.00629 #> 3 3 -2.50 -0.434 1.62 0.0113 #> 4 4 -2.24 -0.207 1.83 0.0163 #> 5 5 -2.04 -0.0197 2.01 0.0213 #> 6 6 -1.81 0.191 2.25 0.0263 #> 7 7 -1.59 0.391 2.41 0.0313 #> 8 8 -1.38 0.594 2.60 0.0363 #> 9 9 -1.20 0.831 2.84 0.0413 #> 10 10 -0.935 1.06 3.04 0.0463 #> # ℹ 190 more rows fv |> ggplot(aes(x = x, y = .fitted)) + # summarise the posterior samples geom_hex( data = ps, aes(x = x, y = .response, fill = after_stat(count)), bins = 50, alpha = 0.7 ) + # add the lower and upper prediction intervals geom_line(data = p_int, aes(y = .q2.5), colour = \"#56B4E9\", linewidth = 1.5) + geom_line(data = p_int, aes(y = .q97.5), colour = \"#56B4E9\", linewidth = 1.5) + # add the lower and upper credible intervals geom_line(aes(y = .lower_ci), colour = \"#56B4E9\", linewidth = 1) + geom_line(aes(y = .upper_ci), colour = \"#56B4E9\", linewidth = 1) + # add the fitted model geom_line() + # add the observed data geom_point(data = df, aes(x = x, y = y)) + scale_fill_viridis_c(option = \"plasma\") + theme(legend.position = \"none\") + labs(y = \"Response\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"metropolis-hastings-sampler","dir":"Articles","previous_headings":"Additional examples","what":"Metropolis Hastings sampler","title":"Posterior Simulation","text":"cases, Gaussian approximation posterior distribution model coefficients can fail. Simon Wood shows example just failure ?gam.mh help page, Gaussian approximation basically useless binomial GAM large numbers zeroes. mgcv::gam.mh() implements simple Metropolis Hastings sampler, alternates proposals Gaussian t distribution approximation posterior random walk proposals based shrunken approximate posterior covariance matrix. section, rework Simon’s example failure Gaussian approximation ?gam.mh show use gratia generate posterior draws using Metropolis Hastings sampler provided gam.mh(). begin defining function simulate data example. use simulate data set plot Note zeroes large parts covariate space response zeroes. fit binomial (logistic) GAM data generate sample posterior distribution using default Gaussian approximation subsequently using simpler Metropolis Hastings sampler. method argument used select Metropolis Hastings sampler, specify two additional arguments: thin, controls many draws skipped retained sample, rw_scale, scaling factor posterior covariance matrix shrunk random walk proposals. leave two important arguments defaults: burnin = 1000, number samples discard prior sampling, t_df = 40, degrees freedom t proposals. degrees freedom t proposals large, ’re effectively Gaussian approximation default, alternating proposals random walk proposals. collected posterior draws, summarise set 50%, 80%, 95% intervals using ggdist::median_qi(), add data locations left join First plot intervals Gaussian approximation posterior, repeat plot using intervals derived Metropolis Hastings sampler, arranging two plots using patchwork Gaussian approximation-based intervals shown left figure, range x largely useless, covering entire range response, despite fact observed zeroes large parts covariate space. Contrast intervals ones obtained using Metropolis Hastings sampler; intervals much better reflect uncertainty estimated response function x data zeroes.","code":"ga_fail <- function(seed) { df <- tibble(y = c( rep(0, 89), 1, 0, 1, 0, 0, 1, rep(0, 13), 1, 0, 0, 1, rep(0, 10), 1, 0, 0, 1, 1, 0, 1, rep(0, 4), 1, rep(0, 3), 1, rep(0, 3), 1, rep(0, 10), 1, rep(0, 4), 1, 0, 1, 0, 0, rep(1, 4), 0, rep(1, 5), rep(0, 4), 1, 1, rep(0, 46) )) |> mutate( x = withr::with_seed( seed, sort(c(0:10 * 5, rnorm(length(y) - 11) * 20 + 100)) ), .row = row_number() ) |> relocate(.row, .before = 1L) df } df <- ga_fail(3) df |> ggplot(aes(x = x, y = y)) + geom_point() m_logit <- gam(y ~ s(x, k = 15), data = df, method = \"REML\", family = binomial) fs_ga <- fitted_samples(m_logit, n = 2000, seed = 2) fs_mh <- fitted_samples(m_logit, n = 2000, seed = 2, method = \"mh\", thin = 2, rw_scale = 0.4 ) excl_col <- c(\".draw\", \".parameter\", \".row\") int_ga <- fs_ga |> group_by(.row) |> median_qi(.width = c(0.5, 0.8, 0.95), .exclude = excl_col) |> left_join(df, by = join_by(.row == .row)) int_mh <- fs_mh |> group_by(.row) |> median_qi(.width = c(0.5, 0.8, 0.95), .exclude = excl_col) |> left_join(df, by = join_by(.row == .row)) plt_ga <- df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_lineribbon( data = int_ga, aes(x = x, y = .fitted, ymin = .lower, ymax = .upper) ) + scale_fill_brewer() + labs(title = \"Gaussian approximation\") plt_mh <- df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_lineribbon( data = int_mh, aes(x = x, y = .fitted, ymin = .lower, ymax = .upper) ) + scale_fill_brewer() + labs(title = \"Metropolis Hastings sampler\") plt_ga + plt_mh + plot_layout(guides = \"collect\")"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Gavin L. Simpson. Author, maintainer, copyright holder. Henrik Singmann. Contributor.","code":""},{"path":"https://gavinsimpson.github.io/gratia/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Simpson G (????). gratia: Graceful ggplot-Based Graphics Functions GAMs Fitted using mgcv. R package version 0.9.2.9013, https://gavinsimpson.github.io/gratia/.","code":"@Manual{, title = {{gratia}: Graceful {ggplot}-Based Graphics and Other Functions for {GAM}s Fitted using {mgcv}}, author = {Gavin L. Simpson}, abstract = {Graceful ggplot-based graphics and utility functions for working with generalized additive models (GAMs) fitted using the mgcv package. Provides a reimplementation of the plot() method for GAMs that mgcv provides, as well as tidyverse-compatible representations of estimated smooths.}, note = {R package version 0.9.2.9013}, url = {https://gavinsimpson.github.io/gratia/}, }"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"An R package for working with generalized additive models","text":"Working GAMs within ‘tidyverse’ can tedious even difficult without good understanding GAMs model returned ‘mgcv’ model objects contain. ‘gratia’ designed help . ‘gratia’ provides ‘ggplot’-based graphics utility functions working generalized additive models (GAMs) fitted using ‘mgcv’ package, via reimplementation plot() method GAMs ‘mgcv’ provides, well ‘tidyverse’ compatible representations estimated smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"features","dir":"","previous_headings":"","what":"Features","title":"An R package for working with generalized additive models","text":"main features gratia currently ggplot2-based replacement mgcv:::plot.gam(): draw.gam(). example, classic four term additive example Gu & Wahba: Estimated smooths GAM bivariate smooth: Estimated smooths GAM Note specialist smoothers (bs %% c(\"mrf\",\"sw\", \"sf\")) currently supported, univariate, factor continuous -variable smooths, simple random effect smooths (bs = 're'), factor-smooth interaction smooths (bs = \"fs\"), constrained factor smooths (bs = \"sz\"), full soap film smooths (bs = \"\"), bivariate, trivariate, quadvariate TPRS tensor product smooths supported, Estimation derivatives fitted smoothers: derivatives(), Estimation point-wise across--function confidence intervals simultaneous intervals smooths: confint.gam(). Model diagnostics via appraise() Model diagnostics figure","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"installing-gratia","dir":"","previous_headings":"","what":"Installing gratia","title":"An R package for working with generalized additive models","text":"gratia now available CRAN, can installed however gratia active development may wish install development version github. easiest way via install_github() function package remotes. Make sure remotes installed, run install package. Alternatively, binary packages development version available rOpenSci’s R Universe service:","code":"install.packages(\"gratia\") remotes::install_github(\"gavinsimpson/gratia\") # Install gratia in R install.packages(\"gratia\", repos = c( \"https://gavinsimpson.r-universe.dev\", \"https://cloud.r-project.org\" ))"},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"history","dir":"","previous_headings":"","what":"History","title":"An R package for working with generalized additive models","text":"gratia grew earlier package, schoenberg, development earlier package tsgam, originally intended used GAMs fitted time series. developing tsgam however became clear package used generally name “tsgam” longer appropriate. avoid breaking blog posts written using tsgam decided copy git repo history new repo package name schoenberg. later date someone released another package called schoenberg CRAN, scuppered idea. Now ’m calling package gratia. Hopefully won’t change …","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"why-gratia","dir":"","previous_headings":"","what":"Why gratia?","title":"An R package for working with generalized additive models","text":"naming greta package, Nick Golding observed recent phenomena naming statistical modelling software, Stan Edward, individuals played prominent role development field. lead Nick name Tensor Flow-based package greta Grete Hermann. spirit, gratia named recognition contributions Grace Wahba, pioneering work penalised spline models foundation way GAMs estimated mgcv. wanted name package grace, explicitly recognise Grace’s contributions, unfortunately already package named Grace CRAN. looked elsewhere inspiration. English word “grace” derives Latin gratia, meaning “favor, charm, thanks” (according Merriam Webster). chair Grace Wabha currently holds named Isaac J Schoenberg, former University Madison-Wisconsin Professor Mathematics, 1946 paper provided first mathematical reference “splines”. (Hence previous name package.)","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":null,"dir":"Reference","previous_headings":"","what":"Add a confidence interval to an existing object — add_confint","title":"Add a confidence interval to an existing object — add_confint","text":"Add confidence interval existing object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add a confidence interval to an existing object — add_confint","text":"","code":"add_confint(object, coverage = 0.95, ...) # S3 method for class 'smooth_estimates' add_confint(object, coverage = 0.95, ...) # S3 method for class 'parametric_effects' add_confint(object, coverage = 0.95, ...) # Default S3 method add_confint(object, coverage = 0.95, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add a confidence interval to an existing object — add_confint","text":"object R object. coverage numeric; coverage interval. Must range 0 < coverage < 1. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":null,"dir":"Reference","previous_headings":"","what":"Add a constant to estimated values — add_constant","title":"Add a constant to estimated values — add_constant","text":"Add constant estimated values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add a constant to estimated values — add_constant","text":"","code":"add_constant(object, constant = NULL, ...) # S3 method for class 'smooth_estimates' add_constant(object, constant = NULL, ...) # S3 method for class 'smooth_samples' add_constant(object, constant = NULL, ...) # S3 method for class 'mgcv_smooth' add_constant(object, constant = NULL, ...) # S3 method for class 'parametric_effects' add_constant(object, constant = NULL, ...) # S3 method for class 'tbl_df' add_constant(object, constant = NULL, column = NULL, ...) # S3 method for class 'evaluated_parametric_term' add_constant(object, constant = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add a constant to estimated values — add_constant","text":"object object add constant . constant constant add. ... additional arguments passed methods. column character; \"tbl_df\" method, column add constant .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add a constant to estimated values — add_constant","text":"Returns object estimate shifted addition supplied constant.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add a constant to estimated values — add_constant","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Add fitted values from a GAM to a data frame — add_fitted.gam","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"Add fitted values GAM data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"","code":"# S3 method for class 'gam' add_fitted(data, model, value = \".fitted\", type = \"response\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. type character; type predictions return. See mgcv::predict.gam() options. ... additional arguments passed mgcv::predict.gam().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"data frame (tibble) formed data predictions model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # add fitted values to our data add_fitted(df, m) #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 .fitted #> #> 1 3.34 0.266 0.659 0.859 0.367 5.90 #> 2 -0.0758 0.372 0.185 0.0344 0.741 3.15 #> 3 10.7 0.573 0.954 0.971 0.934 8.28 #> 4 8.73 0.908 0.898 0.745 0.673 8.65 #> 5 15.0 0.202 0.944 0.273 0.701 15.7 #> 6 7.67 0.898 0.724 0.677 0.848 8.38 #> 7 7.58 0.945 0.370 0.348 0.706 7.84 #> 8 8.51 0.661 0.781 0.947 0.859 6.74 #> 9 10.6 0.629 0.0111 0.339 0.446 9.14 #> 10 3.72 0.0618 0.940 0.0317 0.677 7.04 #> # i 390 more rows # with type = \"terms\" or \"iterms\" add_fitted(df, m, type = \"terms\") #> # A tibble: 400 x 10 #> y x0 x1 x2 x3 .constant `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 3.34 0.266 0.659 0.859 0.367 7.94 0.175 0.559 -2.81 0.0351 #> 2 -0.0758 0.372 0.185 0.0344 0.741 7.94 0.435 -1.92 -3.23 -0.0687 #> 3 10.7 0.573 0.954 0.971 0.934 7.94 0.593 3.35 -3.47 -0.122 #> 4 8.73 0.908 0.898 0.745 0.673 7.94 -0.812 2.77 -1.19 -0.0498 #> 5 15.0 0.202 0.944 0.273 0.701 7.94 -0.0589 3.23 4.63 -0.0576 #> 6 7.67 0.898 0.724 0.677 0.848 7.94 -0.745 1.15 0.146 -0.0981 #> 7 7.58 0.945 0.370 0.348 0.706 7.94 -1.07 -1.31 2.34 -0.0589 #> 8 8.51 0.661 0.781 0.947 0.859 7.94 0.434 1.67 -3.20 -0.101 #> 9 10.6 0.629 0.0111 0.339 0.446 7.94 0.512 -1.95 2.63 0.0132 #> 10 3.72 0.0618 0.940 0.0317 0.677 7.94 -0.695 3.20 -3.35 -0.0508 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":null,"dir":"Reference","previous_headings":"","what":"Add fitted values from a model to a data frame — add_fitted","title":"Add fitted values from a model to a data frame — add_fitted","text":"Add fitted values model data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add fitted values from a model to a data frame — add_fitted","text":"","code":"add_fitted(data, model, value = \".value\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add fitted values from a model to a data frame — add_fitted","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. ... additional arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add fitted values from a model to a data frame — add_fitted","text":"data frame (tibble) formed data fitted values model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Add posterior draws from a model to a data object — add_fitted_samples","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"Adds draws posterior distribution model data object using one fitted_samples(), predicted_samples(), posterior_samples().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"","code":"add_fitted_samples(object, model, n = 1, seed = NULL, ...) add_predicted_samples(object, model, n = 1, seed = NULL, ...) add_posterior_samples(object, model, n = 1, seed = NULL, ...) add_smooth_samples(object, model, n = 1, seed = NULL, select = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"object data frame tibble posterior draws added. model fitted GAM (GAM-like) object posterior draw method exists. n integer; number posterior draws add. seed numeric; value seed random number generator. ... arguments passed posterior draw function, currently one fitted_samples(), predicted_samples(), posterior_samples(). n seed already specified arguments also passed posterior sampling function. select character; select smooth's posterior draw . default, NULL, means posteriors smooths model wil sampled individually. supplied, character vector requested smooth terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # add fitted samples (posterior draws of the expected value of the response) # note that there are 800 rows in the output: 400 data by `n = 2` samples. df |> add_fitted_samples(m, n = 2, seed = 84) #> # A tibble: 800 × 14 #> y x0 x1 x2 x3 f f0 f1 f2 f3 .row .draw #> #> 1 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 1 #> 2 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 2 #> 3 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 1 #> 4 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 2 #> 5 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 1 #> 6 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 2 #> 7 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 1 #> 8 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 2 #> 9 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 1 #> 10 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 2 #> # ℹ 790 more rows #> # ℹ 2 more variables: .parameter , .fitted # add posterior draws from smooth s(x2) df |> add_smooth_samples(m, n = 2, seed = 2, select= \"s(x2)\") #> # A tibble: 800 × 15 #> y x0 x1 x2 x3 f f0 f1 f2 f3 .row .smooth #> #> 1 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 s(x2) #> 2 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 s(x2) #> 3 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 s(x2) #> 4 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 s(x2) #> 5 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 s(x2) #> 6 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 s(x2) #> 7 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 s(x2) #> 8 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 s(x2) #> 9 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 s(x2) #> 10 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 s(x2) #> # ℹ 790 more rows #> # ℹ 3 more variables: .term , .draw , .value "},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Add partial residuals — add_partial_residuals","title":"Add partial residuals — add_partial_residuals","text":"Add partial residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add partial residuals — add_partial_residuals","text":"","code":"add_partial_residuals(data, model, ...) # S3 method for class 'gam' add_partial_residuals(data, model, select = NULL, partial_match = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add partial residuals — add_partial_residuals","text":"data data frame containing values variables used fit model. Passed stats::residuals() newdata. model fitted model stats::residuals() method available. S3 method dispatch performed model argument. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add partial residuals — add_partial_residuals","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## add partial residuals add_partial_residuals(df, m) #> # A tibble: 400 x 9 #> y x0 x1 x2 x3 `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.38 -2.00 -5.36 -2.52 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -2.79 -5.15 -6.45 -3.29 #> 3 10.7 0.573 0.954 0.971 0.934 2.99 5.75 -1.07 2.28 #> 4 8.73 0.908 0.898 0.745 0.673 -0.734 2.84 -1.11 0.0287 #> 5 15.0 0.202 0.944 0.273 0.701 -0.752 2.54 3.94 -0.750 #> 6 7.67 0.898 0.724 0.677 0.848 -1.46 0.432 -0.567 -0.812 #> 7 7.58 0.945 0.370 0.348 0.706 -1.33 -1.57 2.08 -0.318 #> 8 8.51 0.661 0.781 0.947 0.859 2.21 3.44 -1.42 1.68 #> 9 10.6 0.629 0.0111 0.339 0.446 2.01 -0.445 4.13 1.51 #> 10 3.72 0.0618 0.940 0.0317 0.677 -4.02 -0.123 -6.67 -3.37 #> # i 390 more rows ## add partial residuals for selected smooths add_partial_residuals(df, m, select = \"s(x0)\") #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 `s(x0)` #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.38 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -2.79 #> 3 10.7 0.573 0.954 0.971 0.934 2.99 #> 4 8.73 0.908 0.898 0.745 0.673 -0.734 #> 5 15.0 0.202 0.944 0.273 0.701 -0.752 #> 6 7.67 0.898 0.724 0.677 0.848 -1.46 #> 7 7.58 0.945 0.370 0.348 0.706 -1.33 #> 8 8.51 0.661 0.781 0.947 0.859 2.21 #> 9 10.6 0.629 0.0111 0.339 0.446 2.01 #> 10 3.72 0.0618 0.940 0.0317 0.677 -4.02 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Add residuals from a GAM to a data frame — add_residuals.gam","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"Add residuals GAM data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"","code":"# S3 method for class 'gam' add_residuals(data, model, value = \".residual\", type = \"deviance\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. type character; type residuals return. See mgcv::residuals.gam() options. ... additional arguments passed mgcv::residuals.gam().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"data frame (tibble) formed data residuals model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## add_residuals(df, m) #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 .residual #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.56 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -3.22 #> 3 10.7 0.573 0.954 0.971 0.934 2.40 #> 4 8.73 0.908 0.898 0.745 0.673 0.0785 #> 5 15.0 0.202 0.944 0.273 0.701 -0.693 #> 6 7.67 0.898 0.724 0.677 0.848 -0.714 #> 7 7.58 0.945 0.370 0.348 0.706 -0.259 #> 8 8.51 0.661 0.781 0.947 0.859 1.78 #> 9 10.6 0.629 0.0111 0.339 0.446 1.50 #> 10 3.72 0.0618 0.940 0.0317 0.677 -3.32 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Add residuals from a model to a data frame — add_residuals","title":"Add residuals from a model to a data frame — add_residuals","text":"Add residuals model data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add residuals from a model to a data frame — add_residuals","text":"","code":"add_residuals(data, model, value = \".residual\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add residuals from a model to a data frame — add_residuals","text":"data data frame containing values variables used fit model. Passed stats::residuals() newdata. model fitted model stats::residuals() method available. S3 method dispatch performed model argument. value character; name variable model residuals stored. ... additional arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add residuals from a model to a data frame — add_residuals","text":"data frame (tibble) formed data residuals model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":null,"dir":"Reference","previous_headings":"","what":"Add indicators of significant change after SiZeR — add_sizer","title":"Add indicators of significant change after SiZeR — add_sizer","text":"Add indicators significant change SiZeR","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add indicators of significant change after SiZeR — add_sizer","text":"","code":"add_sizer(object, type = c(\"change\", \"sizer\"), ...) # S3 method for class 'derivatives' add_sizer(object, type = c(\"change\", \"sizer\"), ...) # S3 method for class 'smooth_estimates' add_sizer(object, type = c(\"change\", \"sizer\"), derivatives = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add indicators of significant change after SiZeR — add_sizer","text":"object R object. Currently supported methods classes \"derivatives\". type character; \"change\" adds single variable object indicating credible interval derivative excludes 0. \"sizer\" adds two variables indicating whether derivative postive negative. ... arguments passed methods derivatives object class \"derivatives\", resulting call derivatives().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add indicators of significant change after SiZeR — add_sizer","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## first derivatives of all smooths using central finite differences d <- derivatives(m, type = \"central\") |> add_sizer() # default adds a .change column names(d) #> [1] \".smooth\" \".by\" \".fs\" \".derivative\" \".se\" #> [6] \".crit\" \".lower_ci\" \".upper_ci\" \".change\" \"x0\" #> [11] \"x1\" \"x2\" \"x3\""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":null,"dir":"Reference","previous_headings":"","what":"Model diagnostic plots — appraise","title":"Model diagnostic plots — appraise","text":"Model diagnostic plots","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Model diagnostic plots — appraise","text":"","code":"appraise(model, ...) # S3 method for class 'gam' appraise( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), use_worm = FALSE, n_uniform = 10, n_simulate = 50, seed = NULL, type = c(\"deviance\", \"pearson\", \"response\"), n_bins = c(\"sturges\", \"scott\", \"fd\"), ncol = NULL, nrow = NULL, guides = \"keep\", level = 0.9, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'lm' appraise(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Model diagnostic plots — appraise","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed patchwork::wrap_plots(). method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF (\"uniform\"``) available family` used model fitting. Note method = \"direct\" deprecated favour method = \"uniform\". use_worm logical; worm plot drawn place QQ plot? n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"direct\") QQ plots. n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\") QQ plots. seed numeric; random number seed use method = \"simulate\" method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_bins character numeric; either number bins string indicating calculate number bins. ncol, nrow numeric; numbers rows columns spread plots. guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() level numeric; coverage level QQ plot reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ci_alpha, ci_col colour transparency used draw QQ plot reference interval method = \"simulate\". point_col, point_alpha colour transparency used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. line_col colour specification 1:1 line QQ plot reference line residuals vs linear predictor plot.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Model diagnostic plots — appraise","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Model diagnostic plots — appraise","text":"","code":"load_mgcv() ## simulate some data... dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat) ## run some basic model checks appraise(mod, point_col = \"steelblue\", point_alpha = 0.4) ## To change the theme for all panels use the & operator, for example to ## change the ggplot theme for all panels library(\"ggplot2\") appraise(mod, seed = 42, point_col = \"steelblue\", point_alpha = 0.4, line_col = \"black\" ) & theme_minimal()"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":null,"dir":"Reference","previous_headings":"","what":"Basis expansions for smooths — basis","title":"Basis expansions for smooths — basis","text":"Creates basis expansion definition smoother using syntax mgcv's smooths via mgcv::s()., mgcv::te(), mgcv::ti(), mgcv::t2(), fitted GAM(M).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Basis expansions for smooths — basis","text":"","code":"basis(object, ...) # S3 method for class 'gam' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'scam' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'gamm' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'list' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # Default S3 method basis( object, data, knots = NULL, constraints = FALSE, at = NULL, diagonalize = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Basis expansions for smooths — basis","text":"object smooth specification, result call one mgcv::s()., mgcv::te(), mgcv::ti(), mgcv::t2(), fitted GAM(M) model. ... arguments passed mgcv::smoothCon(). select character; select smooths fitted model term argument renamed select data data frame containing variables used smooth. n numeric; number points range covariate evaluate smooth. n_2d numeric; number new observations dimension bivariate smooth. currently used; n used dimensions. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1. knots list data frame named components containing knots locations. Names must match covariates basis required. See mgcv::smoothCon(). constraints logical; identifiability constraints applied smooth basis. See argument absorb.cons mgcv::smoothCon(). data frame containing values smooth covariate(s) basis evaluated. diagonalize logical; TRUE, reparameterises smooth associated penalty identity matrix. effect turning last diagonal elements penalty zero, highlights penalty null space.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Basis expansions for smooths — basis","text":"tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Basis expansions for smooths — basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Basis expansions for smooths — basis","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", n = 400, seed = 42) bf <- basis(s(x0), data = df) bf <- basis(s(x2, by = fac, bs = \"bs\"), data = df, constraints = TRUE)"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract basis dimension of a smooth — basis_size","title":"Extract basis dimension of a smooth — basis_size","text":"Extract basis dimension smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract basis dimension of a smooth — basis_size","text":"","code":"basis_size(object, ...) # S3 method for class 'mgcv.smooth' basis_size(object, ...) # S3 method for class 'gam' basis_size(object, ...) # S3 method for class 'gamm' basis_size(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract basis dimension of a smooth — basis_size","text":"object fitted GAM(M). Currently mgcv::gam() (anything inherits \"gam\" class, e.g. mgcv::bam()) mgcv::gamm() supported. ... Arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract basis dimension of a smooth — basis_size","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 200, seed = 1) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) basis_size(m) #> s(x0) s(x1) s(x2) s(x3) #> 9 9 9 9"},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulated bird migration data — bird_move","title":"Simulated bird migration data — bird_move","text":"Data generated hypothetical study bird movement along migration corridor, sampled throughout year. dataset consists simulated sample records numbers observed locations 100 tagged individuals six species bird, ten locations along latitudinal gradient, one observation taken every four weeks. Counts simulated randomly species location week creating species-specific migration curve gave probability finding individual given species given location, simulated distribution individuals across sites using multinomial distribution, subsampling using binomial distribution simulation observation error (.e. every bird present location detected). data set (bird_move) consists variables count, latitude, week species.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Simulated bird migration data — bird_move","text":"data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Simulated bird migration data — bird_move","text":"Pedersen EJ, Miller DL, Simpson GL, Ross N. 2018. Hierarchical generalized additive models: introduction mgcv. PeerJ Preprints 6:e27320v1 doi:10.7287/peerj.preprints.27320v1 .","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the boundary of a soap film smooth — boundary","text":"","code":"boundary(x, ...) # S3 method for class 'soap.film' boundary(x, ...) # S3 method for class 'gam' boundary(x, select, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the boundary of a soap film smooth — boundary","text":"x R object. Currently objects inherit classes \"soap.film\" \"gam\". ... arguments passed methods. select character; label soap film smooth extract boundary.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract the boundary of a soap film smooth — boundary","text":"list lists data frames specifying loops define boundary soap film smooth.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Select smooths based on user's choices — check_user_select_smooths","title":"Select smooths based on user's choices — check_user_select_smooths","text":"Given vector indexing smooths GAM, returns logical vector selecting requested smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select smooths based on user's choices — check_user_select_smooths","text":"","code":"check_user_select_smooths( smooths, select = NULL, partial_match = FALSE, model_name = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select smooths based on user's choices — check_user_select_smooths","text":"smooths character; vector smooth labels. select numeric, logical, character vector selected smooths. partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1. model_name character; model name used error messages.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select smooths based on user's choices — check_user_select_smooths","text":"logical vector length length(smooths) indicating smooths selected.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select smooths based on user's choices — check_user_select_smooths","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract coefficients from a fitted scam model. — coef.scam","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"Extract coefficients fitted scam model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"","code":"# S3 method for class 'scam' coef(object, parametrized = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"object model object fitted scam() parametrized logical; extract parametrized coefficients, respect linear inequality constraints model. ... arguments.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Compare smooths across models — compare_smooths","title":"Compare smooths across models — compare_smooths","text":"Compare smooths across models","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compare smooths across models — compare_smooths","text":"","code":"compare_smooths( model, ..., select = NULL, smooths = deprecated(), n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, partial_match = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compare smooths across models — compare_smooths","text":"model Primary model comparison. ... Additional models compare smooths model. select character; select smooths compare. default (NULL) means smooths model compared. Numeric select indexes smooths order specified formula stored model. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooths Use select instead. n numeric; number points range covariate evaluate smooth. data data frame covariate values evaluate smooth. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compare smooths across models — compare_smooths","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", seed = 2) ## models to compare smooths across - artificially create differences m1 <- gam(y ~ s(x0, k = 5) + s(x1, k = 5) + s(x2, k = 5) + s(x3, k = 5), data = dat, method = \"REML\" ) m2 <- gam(y ~ s(x0, bs = \"ts\") + s(x1, bs = \"ts\") + s(x2, bs = \"ts\") + s(x3, bs = \"ts\"), data = dat, method = \"REML\") ## build comparisons comp <- compare_smooths(m1, m2) comp #> # A tibble: 8 x 5 #> .model .smooth .type .by data #> #> 1 m1 s(x0) TPRS NA #> 2 m2 s(x0) TPRS (shrink) NA #> 3 m1 s(x1) TPRS NA #> 4 m2 s(x1) TPRS (shrink) NA #> 5 m1 s(x2) TPRS NA #> 6 m2 s(x2) TPRS (shrink) NA #> 7 m1 s(x3) TPRS NA #> 8 m2 s(x3) TPRS (shrink) NA ## notice that the result is a nested tibble draw(comp)"},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Conditional predictions from a GAM — conditional_values","title":"Conditional predictions from a GAM — conditional_values","text":"Generate predicted values GAM, conditional upon supplied values covariates. conditional_values() modelled marginaleffects::plot_predictions(), intentionally simpler, restrictive functionality. intended use case quickly visualizing predicted values fitted GAM response scale. complex model predictions, strongly encouraged use marginaleffects::plot_predictions().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Conditional predictions from a GAM — conditional_values","text":"","code":"conditional_values( model, condition = NULL, data = NULL, scale = c(\"response\", \"link\", \"linear_predictor\"), ... ) # S3 method for class 'gam' conditional_values( model, condition = NULL, data = NULL, scale = c(\"response\", \"link\", \"linear_predictor\"), n_vals = 100, ci_level = 0.95, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Conditional predictions from a GAM — conditional_values","text":"model fitted GAM object. condition either character vector list supplying names covariates, possibly values, condition . order values determines plotted via draw.conditional_values() method; first element mapped x channel, second element colour channel, third ggplot2::facet_wrap() fourth element present, present, fourth element mapped rows third element mapped columns ggplot2::facet_grid(). data data frame values predict. supplied overrides values supplied condition. scale character; scale predictions returned ? ... arguments passed fitted_values(). n_vals numeric; number values generate numeric variables named condition. ci_level numeric; number interval (0,1) giving coverage credible intervals.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Conditional predictions from a GAM — conditional_values","text":"data frame (tibble) class \"conditional_values\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Conditional predictions from a GAM — conditional_values","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Conditional predictions from a GAM — conditional_values","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # predictions conditional on values evenly spaced over x2, all other # variables in model are held at representative values cv <- conditional_values( m1, condition = \"x2\" ) # plot cv |> draw() # as above but condition on `x1` also. When plotted, `x1` is mapped to the # colour channel, noting that it has been summarised using fivenum() cv <- conditional_values( m1, condition = c(\"x2\", \"x1\") ) # plot cv |> draw() # can pass `condition` a list, allowing for greater flexibility # For example, here we condition on all four variables in the model, # summarising: # * `x1` at its five number summary, # * `x0 at its quartiles # * `x3` at its mean a d mean +/- sd cv <- conditional_values( m1, condition = list(\"x2\", x1 = \"fivenum\", x0 = \"quartile\", x3 = \"threenum\") ) # plot cv |> draw() # some model terms can be exclude from the conditional predictions using the # `exclude` mechanism of `predict.gam`. Here we exclude the effects of # `s(x0)` and `s(x3)` from the conditional predictions. This, in effect, # treats these smooths as having **0** effect on the conditional predictions # of the response, even though the two smooths conditioned on (`s(x2)` and # `s(x1)`) were estimated given the two excluded smooths were in the model cv <- conditional_values( m1, condition = list(\"x2\", x1 = \"minmax\"), exclude = c(\"s(x0)\", \"s(x3)\") ) # plot cv |> draw() # categorical conditions are also handled df <- data_sim(\"eg4\", seed = 2) m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") cv <- conditional_values( m2, condition = list(\"fac\", x2 = \"fivenum\") ) # plot - we see a discrete x axis cv |> draw() # in this example we condition on `x2` and `fac %in% c(2,3)` cv <- conditional_values( m2, condition = list(\"x2\", fac = 2:3) ) # plot - smooths of `x2` for `fac == 2` and `fac == 3` cv |> draw()"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":null,"dir":"Reference","previous_headings":"","what":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"Calculates point-wise confidence simultaneous intervals first derivatives smooth terms fitted GAM.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"","code":"# S3 method for class 'fderiv' confint( object, parm, level = 0.95, type = c(\"confidence\", \"simultaneous\"), nsim = 10000, ncores = 1L, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"object object class \"fderiv\" containing estimated derivatives. parm parameters (smooth terms) given intervals vector terms. missing, parameters considered. level numeric, 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. type character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. nsim integer; number simulations used computing simultaneous intervals. ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). ... additional arguments methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"data frame components: term; factor indicating term row relates, lower; lower limit confidence simultaneous interval, est; estimated derivative upper; upper limit confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") # new data to evaluate the derivatives at, say over the middle 50% of range # of each covariate middle <- function(x, n = 25, coverage = 0.5) { v <- (1 - coverage) / 2 q <- quantile(x, prob = c(0 + v, 1 - v), type = 8) seq(q[1], q[2], length = n) } new_data <- sapply(dat[c(\"x0\", \"x1\", \"x2\", \"x3\")], middle) new_data <- data.frame(new_data) ## first derivatives of all smooths... fd <- fderiv(mod, newdata = new_data) #> Warning: `fderiv()` was deprecated in gratia 0.7.0. #> i Please use `derivatives()` instead. ## point-wise interval ci <- confint(fd, type = \"confidence\") ci #> # A tibble: 100 x 4 #> term lower est upper #> #> 1 s(x0) 1.7 4.1 6.6 #> 2 s(x0) 1.3 3.8 6.3 #> 3 s(x0) 0.99 3.5 6.0 #> 4 s(x0) 0.68 3.1 5.6 #> 5 s(x0) 0.37 2.8 5.2 #> 6 s(x0) 0.0049 2.4 4.8 #> 7 s(x0) -0.40 2.0 4.5 #> 8 s(x0) -0.79 1.7 4.2 #> 9 s(x0) -1.1 1.3 3.8 #> 10 s(x0) -1.4 0.99 3.4 #> # i 90 more rows ## simultaneous interval for smooth term of x2 x2_sint <- confint(fd, parm = \"x2\", type = \"simultaneous\", nsim = 10000, ncores = 2 ) # \\donttest{ x2_sint #> # A tibble: 25 x 4 #> term lower est upper #> #> 1 s(x2) -24. -15. -5.6 #> 2 s(x2) -35. -26. -16. #> 3 s(x2) -41. -33. -24. #> 4 s(x2) -44. -36. -29. #> 5 s(x2) -44. -36. -28. #> 6 s(x2) -42. -34. -25. #> 7 s(x2) -38. -30. -21. #> 8 s(x2) -33. -24. -16. #> 9 s(x2) -27. -19. -11. #> 10 s(x2) -22. -14. -5.8 #> # i 15 more rows # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"Calculates point-wise confidence simultaneous intervals smooth terms fitted GAM.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"","code":"# S3 method for class 'gam' confint( object, parm, level = 0.95, data = newdata, n = 100, type = c(\"confidence\", \"simultaneous\"), nsim = 10000, shift = FALSE, transform = FALSE, unconditional = FALSE, ncores = 1, partial_match = FALSE, ..., newdata = NULL ) # S3 method for class 'gamm' confint(object, ...) # S3 method for class 'list' confint(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"object object class \"gam\" \"gamm\". parm parameters (smooth terms) given intervals vector terms. missing, parameters considered, although currently implemented. level numeric, 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. data data frame; new values covariates used model fit. selected smooth(s) wil evaluated supplied values. n numeric; number points evaluate smooths . type character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. nsim integer; number simulations used computing simultaneous intervals. shift logical; constant term add smooth? transform logical; smooth evaluated transformed scale? generalised models, involves applying inverse link function used fit model. Alternatively, name , actual, function can supplied transform smooth confidence interval. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix returned, available. ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; matching parm use partial match exact match? Can used length(parm) 1. ... additional arguments methods newdata DEPRECATED! data frame; containing new values covariates used model fit. selected smooth(s) wil evaluated supplied values.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"tibble components: .smooth; character indicating term row relates, .type; type smooth, .name variable smooth, NA otherwise, one vectors values smooth evaluated, named per variables smooth, zero variables containing values variable, .estimate; estimated value smooth, .se; standard error estimated value smooth, .crit; critical value 100 * level% confidence interval. .lower_ci; lower limit confidence simultaneous interval, .upper_ci; upper limit confidence simultaneous interval,","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") # new data to evaluate the smooths at, say over the middle 50% of range # of each covariate middle <- function(x, n = 50, coverage = 0.5) { v <- (1 - coverage) / 2 q <- quantile(x, prob = c(0 + v, 1 - v), type = 8) seq(q[1], q[2], length = n) } new_data <- sapply(dat[c(\"x0\", \"x1\", \"x2\", \"x3\")], middle) new_data <- data.frame(new_data) ## point-wise interval for smooth of x2 ci <- confint(mod, parm = \"s(x2)\", type = \"confidence\", data = new_data) ci #> # A tibble: 50 x 9 #> .smooth .type .by x2 .estimate .se .crit .lower_ci .upper_ci #> #> 1 s(x2) TPRS NA 0.26 5.3 0.18 2.0 5.0 5.7 #> 2 s(x2) TPRS NA 0.27 5.1 0.18 2.0 4.8 5.5 #> 3 s(x2) TPRS NA 0.28 4.9 0.18 2.0 4.6 5.3 #> 4 s(x2) TPRS NA 0.29 4.6 0.18 2.0 4.3 5.0 #> 5 s(x2) TPRS NA 0.30 4.3 0.19 2.0 3.9 4.7 #> 6 s(x2) TPRS NA 0.32 4.0 0.19 2.0 3.6 4.3 #> 7 s(x2) TPRS NA 0.33 3.6 0.20 2.0 3.2 4.0 #> 8 s(x2) TPRS NA 0.34 3.2 0.20 2.0 2.9 3.6 #> 9 s(x2) TPRS NA 0.35 2.9 0.20 2.0 2.5 3.3 #> 10 s(x2) TPRS NA 0.36 2.5 0.19 2.0 2.1 2.9 #> # i 40 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":null,"dir":"Reference","previous_headings":"","what":"All combinations of factor levels plus typical values of continuous variables — data_combos","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"combinations factor levels plus typical values continuous variables","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"","code":"data_combos(object, ...) # S3 method for class 'gam' data_combos( object, vars = everything(), complete = TRUE, envir = environment(formula(object)), data = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"object fitted model object. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. complete logical; combinations factor levels returned? FALSE, combinations levels observed model retained. envir environment within recreate data used fit object. data optional data frame data used fit mdoel reconstruction data model work.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate example data for fitting GAMs — data_sim","title":"Simulate example data for fitting GAMs — data_sim","text":"tidy reimplementation functions implemented mgcv::gamSim() can used fit GAMs. new feature sampling distribution can applied example types.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate example data for fitting GAMs — data_sim","text":"","code":"data_sim( model = \"eg1\", n = 400, scale = NULL, theta = 3, power = 1.5, dist = c(\"normal\", \"poisson\", \"binary\", \"negbin\", \"tweedie\", \"gamma\", \"ocat\", \"ordered categorical\"), n_cat = 4, cuts = c(-1, 0, 5), seed = NULL, gfam_families = c(\"binary\", \"tweedie\", \"normal\") )"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate example data for fitting GAMs — data_sim","text":"model character; either \"egX\" X integer 1:7, name model. See Details possible options. n numeric; number observations simulate. scale numeric; level noise use. theta numeric; dispersion parameter \\(\\theta\\) use. default entirely arbitrary, chosen provide simulated data exhibits extra dispersion beyond assumed Poisson. power numeric; Tweedie power parameter. dist character; sampling distribution response variable. \"ordered categorical\" synonym \"ocat\". n_cat integer; number categories categorical response. Currently used distr %% c(\"ocat\", \"ordered categorical\"). cuts numeric; vector cut points latent variable, excluding end points -Inf Inf. Must one fewer number categories: length(cuts) == n_cat - 1. seed numeric; seed random number generator. Passed base::set.seed(). gfam_families character; vector distributions use generating data grouped families use family = gfam(). allowed distributions per dist.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate example data for fitting GAMs — data_sim","text":"data_sim() can simulate data several underlying models known true functions. available options currently : \"eg1\": four term additive true model. classic Gu & Wahba four univariate term test model. See gw_functions details underlying four functions. \"eg2\": bivariate smooth true model. \"eg3\": example containing continuous smooth (varying coefficient) true model. model \\(\\hat{y}_i = f_2(x_{1i})x_{2i}\\) function \\(f_2()\\) \\(f_2(x) = 0.2 * x^{11} * (10 * (1 - x))^6 + 10 * (10 * x)^3 * (1 - x)^{10}\\). \"eg4\": factor smooth true model. true model contains factor 3 levels, response nth level follows nth Gu & Wabha function (\\(n \\{1, 2, 3}\\)). \"eg5\": additive plus factor true model. response linear combination Gu & Wabha functions 2, 3, 4 (latter null function) plus factor term four levels. \"eg6\": additive plus random effect term true model. ´\"eg7\": version model \"eg1\"`, covariates correlated. \"gwf2\": model response Gu & Wabha's \\(f_2(x_i)\\) plus noise. \"lwf6\": model response Luo & Wabha's \"example 6\" function \\(sin(2(4x-2)) + 2 exp(-256(x-0.5)^2)\\) plus noise. \"gfam\": simulates data use GAMs family = gfam(families). See example mgcv::gfam(). model specified dist ignored gfam_families used specify distributions included simulated data. Can vector families allowed dist. \"ocat\" %% gfam_families (\"ordered categorical\"), 4 classes assumed, changed. Link functions used \"identity\" \"normal\", \"logit\" \"binary\", \"ocat\", \"ordered categorical\", \"exp\" elsewhere. random component providing noise sampling variation can follow one distributions, specified via argument dist \"normal\": Gaussian, \"poisson\": Poisson, \"binary\": Bernoulli, \"negbin\": Negative binomial, \"tweedie\": Tweedie, \"gamma\": gamma , \"ordered categorical\": ordered categorical arguments provide parameters distribution.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Simulate example data for fitting GAMs — data_sim","text":"Gu, C., Wahba, G., (1993). Smoothing Spline ANOVA Component-Wise Bayesian \"Confidence Intervals.\" J. Comput. Graph. Stat. 2, 97–117. Luo, Z., Wahba, G., (1997). Hybrid adaptive splines. J. . Stat. Assoc. 92, 107–116.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate example data for fitting GAMs — data_sim","text":"","code":"data_sim(\"eg1\", n = 100, seed = 1) #> # A tibble: 100 x 10 #> y x0 x1 x2 x3 f f0 f1 f2 f3 #> #> 1 14.532 0.26551 0.65472 0.26751 0.67371 13.713 1.4814 3.7041 8.5277 0 #> 2 16.113 0.37212 0.35320 0.21865 0.094858 12.735 1.8408 2.0267 8.8680 0 #> 3 9.5835 0.57285 0.27026 0.51680 0.49260 6.4103 1.9478 1.7169 2.7456 0 #> 4 15.687 0.90821 0.99268 0.26895 0.46155 16.349 0.56879 7.2817 8.4980 0 #> 5 8.2216 0.20168 0.63349 0.18117 0.37522 12.792 1.1841 3.5501 8.0578 0 #> 6 9.9034 0.89839 0.21321 0.51858 0.99110 4.9081 0.62765 1.5318 2.7487 0 #> 7 5.9362 0.94468 0.12937 0.56278 0.17635 4.6020 0.34587 1.2953 2.9609 0 #> 8 10.839 0.66080 0.47812 0.12916 0.81344 9.7565 1.7502 2.6019 5.4045 0 #> 9 16.883 0.62911 0.92407 0.25637 0.068447 16.909 1.8377 6.3481 8.7237 0 #> 10 7.3603 0.061786 0.59876 0.71794 0.40045 6.3401 0.38578 3.3119 2.6424 0 #> # i 90 more rows # an ordered categorical response data_sim(\"eg1\", n = 100, dist = \"ocat\", n_cat = 4, cuts = c(-1, 0, 5)) #> # A tibble: 100 x 11 #> y x0 x1 x2 x3 f f0 f1 f2 #> #> 1 1 0.93708 0.21716 0.51711 0.44457 -3.5517 0.39280 1.5439 2.7461 #> 2 1 0.28614 0.21657 0.85193 0.060386 -4.7654 1.5653 1.5421 0.36166 #> 3 1 0.83045 0.38895 0.44280 0.32751 -1.7693 1.0157 2.1769 3.2727 #> 4 4 0.64175 0.94246 0.15788 0.87843 7.2150 1.8050 6.5858 7.0588 #> 5 3 0.51910 0.96261 0.44232 0.93060 3.8994 1.9964 6.8566 3.2808 #> 6 1 0.73659 0.73986 0.96773 0.39218 -2.3701 1.4725 4.3917 0.00015734 #> 7 1 0.13467 0.73325 0.48459 0.15885 -0.27657 0.82112 4.3340 2.8028 #> 8 3 0.65699 0.53576 0.25246 0.31995 5.2247 1.7616 2.9198 8.7777 #> 9 3 0.70506 0.0022730 0.25969 0.30697 3.0408 1.5991 1.0046 8.6716 #> 10 2 0.45774 0.60894 0.54202 0.10781 -0.036524 1.9824 3.3800 2.8356 #> # i 90 more rows #> # i 2 more variables: f3 , latent "},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare a data slice through model covariates — data_slice","title":"Prepare a data slice through model covariates — data_slice","text":"Prepare data slice model covariates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare a data slice through model covariates — data_slice","text":"","code":"data_slice(object, ...) # Default S3 method data_slice(object, ...) # S3 method for class 'data.frame' data_slice(object, ...) # S3 method for class 'gam' data_slice(object, ..., data = NULL, envir = NULL) # S3 method for class 'gamm' data_slice(object, ...) # S3 method for class 'list' data_slice(object, ...) # S3 method for class 'scam' data_slice(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare a data slice through model covariates — data_slice","text":"object R model object. ... User supplied variables defining data slice. Arguments passed via ... need named. data alternative data frame values containing variables needed fit model. NULL, default, data used fit model recovered using model.frame. User-supplied expressions passed ... evaluated data. envir environment within recreate data used fit object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare a data slice through model covariates — data_slice","text":"data slice data set results one (covariates) varied systematically () range specified subset values interest, remaining covariates model held fixed, representative values. known reference grid package emmeans data grid marginaleffects package. GAMs, covariates specified via ... take representative values determined data used fit model follows: numeric covariates, value fitting data closest median value used, factor covariates, modal (frequently observed) level used, first level (sorted per vector returned base::levels() several levels observed number times. values already computed calling gam() bam() example can found var.summary component fitted model. Function typical_values() extract values interested. Convenience functions evenly(), ref_level(), level() provided help users specify data slices. ref_level(), level() also ensure factor covariates correct levels, needed mgcv::predict.gam() example. extended discussion data_slice() examples, see vignette(\"data-slices\", package = \"gratia\").","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare a data slice through model covariates — data_slice","text":"","code":"load_mgcv() # simulate some Gaussian data df <- data_sim(\"eg1\", n = 50, seed = 2) # fit a GAM with 1 smooth and 1 linear term m <- gam(y ~ s(x2, k = 7) + x1, data = df, method = \"REML\") # Want to predict over f(x2) while holding `x1` at some value. # Default will use the observation closest to the median for unspecified # variables. ds <- data_slice(m, x2 = evenly(x2, n = 50)) ds #> # A tibble: 50 x 2 #> x2 x1 #> #> 1 0.0228 0.403 #> 2 0.0424 0.403 #> 3 0.0619 0.403 #> 4 0.0815 0.403 #> 5 0.101 0.403 #> 6 0.121 0.403 #> 7 0.140 0.403 #> 8 0.160 0.403 #> 9 0.179 0.403 #> 10 0.199 0.403 #> # i 40 more rows # for full control, specify the values you want ds <- data_slice(m, x2 = evenly(x2, n = 50), x1 = 0.3) # or provide an expression (function call) which will be evaluated in the # data frame passed to `data` or `model.frame(object)` ds <- data_slice(m, x2 = evenly(x2, n = 50), x1 = mean(x1))"},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate data over the range of variables used in smooths — datagen","title":"Generate data over the range of variables used in smooths — datagen","text":"smooth GAM, generate new data range variables involved smooth. function deprecated useful narrow use-case. Use data_slice() instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate data over the range of variables used in smooths — datagen","text":"","code":"datagen(x, ...) # S3 method for class 'mgcv.smooth' datagen(x, n = 100, data, ...) # S3 method for class 'fs.interaction' datagen(x, n = 100, data, ...) # S3 method for class 'gam' datagen(x, smooth = NULL, n = 200, ...) # S3 method for class 'gamm' datagen(x, ...) # S3 method for class 'list' datagen(x, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate data over the range of variables used in smooths — datagen","text":"x object new data required. Currently objects classes \"gam\", \"gamm\" supported, smooths mgcv inheriting class \"mgcv.smooth\". ... arguments passed methods n numeric; number data values generate per term smooth. data data frame; \"mgcv.smooth\" objects, data used fit GAM need supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate data over the range of variables used in smooths — datagen","text":"data frame new values spread range observed values.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate data over the range of variables used in smooths — datagen","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior expectations of derivatives from an estimated model — derivative_samples","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"Posterior expectations derivatives estimated model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"","code":"derivative_samples(object, ...) # Default S3 method derivative_samples(object, ...) # S3 method for class 'gamm' derivative_samples(object, ...) # S3 method for class 'gam' derivative_samples( object, focal = NULL, data = NULL, order = 1L, type = c(\"forward\", \"backward\", \"central\"), scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n = 100, eps = 1e-07, n_sim = 10000, level = lifecycle::deprecated(), seed = NULL, envir = environment(formula(object)), draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"object R object compute derivatives ... arguments passed methods fitted_samples() focal character; name focal variable. response derivative response respect variable returned. variables involved model held constant values. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". scale character; derivative estimated response linear predictor (link) scale? One \"response\" (default), \"linear predictor\". method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sample alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n numeric; number points evaluate derivative (data supplied). eps numeric; finite difference. n_sim integer; number simulations used computing simultaneous intervals. level seed numeric; random seed simulations. envir environment within recreate data used fit object. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"tibble, currently following variables: .derivative: estimated partial derivative, additional columns containing covariate values derivative evaluated.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"negbin\", scale = 0.25, seed = 42) # fit the GAM (note: for execution time reasons using bam()) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, family = nb(), method = \"fREML\") # data slice through data along x2 - all other covariates will be set to # typical values (value closest to median) ds <- data_slice(m, x2 = evenly(x2, n = 200)) # samples from posterior of derivatives fd_samp <- derivative_samples(m, data = ds, type = \"central\", focal = \"x2\", eps = 0.01, seed = 21, n_sim = 100 ) # plot the first 20 posterior draws if (requireNamespace(\"ggplot2\") && requireNamespace(\"dplyr\")) { library(\"ggplot2\") fd_samp |> dplyr::filter(.draw <= 20) |> ggplot(aes(x = x2, y = .derivative, group = .draw)) + geom_line(alpha = 0.5) }"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Derivatives of estimated smooths via finite differences — derivatives","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"Derivatives estimated smooths via finite differences","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"","code":"derivatives(object, ...) # Default S3 method derivatives(object, ...) # S3 method for class 'gamm' derivatives(object, ...) # S3 method for class 'gam' derivatives( object, select = NULL, term = deprecated(), data = newdata, order = 1L, type = c(\"forward\", \"backward\", \"central\"), n = 100, eps = 1e-07, interval = c(\"confidence\", \"simultaneous\"), n_sim = 10000, level = 0.95, unconditional = FALSE, frequentist = FALSE, offset = NULL, ncores = 1, partial_match = FALSE, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"object R object compute derivatives . ... arguments passed methods. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. Can partial match smooth term; see argument partial_match . term Use select instead. data data frame containing values model covariates evaluate first derivatives smooths. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". n numeric; number points evaluate derivative . eps numeric; finite difference. interval character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. unconditional logical; use smoothness selection-corrected Bayesian covariance matrix? frequentist logical; use frequentist covariance matrix? offset numeric; value use offset term ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; smooths selected partial matches term? TRUE, term can single string match . newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"tibble, currently following variables: smooth: smooth row refers , var: name variable involved smooth, data: values var derivative evaluated, derivative: estimated derivative, se: standard error estimated derivative, crit: critical value derivative ± (crit * se) gives upper lower bounds requested confidence simultaneous interval (given level), lower: lower bound confidence simultaneous interval, upper: upper bound confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"derivatives() ignore random effect smooths encounters object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 42) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivatives of all smooths using central finite differences derivatives(mod, type = \"central\") #> # A tibble: 400 x 12 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x0 x1 #> #> 1 s(x0) NA NA 7.41 3.33 1.96 0.874 13.9 2.39e-4 NA #> 2 s(x0) NA NA 7.40 3.33 1.96 0.884 13.9 1.03e-2 NA #> 3 s(x0) NA NA 7.39 3.30 1.96 0.929 13.8 2.04e-2 NA #> 4 s(x0) NA NA 7.36 3.24 1.96 1.01 13.7 3.04e-2 NA #> 5 s(x0) NA NA 7.32 3.15 1.96 1.14 13.5 4.05e-2 NA #> 6 s(x0) NA NA 7.26 3.04 1.96 1.30 13.2 5.06e-2 NA #> 7 s(x0) NA NA 7.18 2.90 1.96 1.49 12.9 6.06e-2 NA #> 8 s(x0) NA NA 7.09 2.76 1.96 1.69 12.5 7.07e-2 NA #> 9 s(x0) NA NA 6.99 2.61 1.96 1.87 12.1 8.07e-2 NA #> 10 s(x0) NA NA 6.87 2.47 1.96 2.03 11.7 9.08e-2 NA #> # i 390 more rows #> # i 2 more variables: x2 , x3 ## derivatives for a selected smooth derivatives(mod, type = \"central\", select = \"s(x1)\") #> # A tibble: 100 x 9 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x1 #> #> 1 s(x1) NA NA -0.907 3.12 1.96 -7.02 5.20 0.000405 #> 2 s(x1) NA NA -0.906 3.11 1.96 -7.01 5.20 0.0105 #> 3 s(x1) NA NA -0.898 3.10 1.96 -6.97 5.17 0.0205 #> 4 s(x1) NA NA -0.880 3.06 1.96 -6.88 5.12 0.0306 #> 5 s(x1) NA NA -0.849 3.00 1.96 -6.73 5.03 0.0406 #> 6 s(x1) NA NA -0.803 2.92 1.96 -6.52 4.92 0.0507 #> 7 s(x1) NA NA -0.740 2.81 1.96 -6.25 4.77 0.0607 #> 8 s(x1) NA NA -0.659 2.69 1.96 -5.93 4.61 0.0708 #> 9 s(x1) NA NA -0.557 2.56 1.96 -5.57 4.46 0.0809 #> 10 s(x1) NA NA -0.436 2.42 1.96 -5.19 4.32 0.0909 #> # i 90 more rows ## or via a partial match derivatives(mod, type = \"central\", select = \"x1\", partial_match = TRUE) #> # A tibble: 100 x 9 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x1 #> #> 1 s(x1) NA NA -0.907 3.12 1.96 -7.02 5.20 0.000405 #> 2 s(x1) NA NA -0.906 3.11 1.96 -7.01 5.20 0.0105 #> 3 s(x1) NA NA -0.898 3.10 1.96 -6.97 5.17 0.0205 #> 4 s(x1) NA NA -0.880 3.06 1.96 -6.88 5.12 0.0306 #> 5 s(x1) NA NA -0.849 3.00 1.96 -6.73 5.03 0.0406 #> 6 s(x1) NA NA -0.803 2.92 1.96 -6.52 4.92 0.0507 #> 7 s(x1) NA NA -0.740 2.81 1.96 -6.25 4.77 0.0607 #> 8 s(x1) NA NA -0.659 2.69 1.96 -5.93 4.61 0.0708 #> 9 s(x1) NA NA -0.557 2.56 1.96 -5.57 4.46 0.0809 #> 10 s(x1) NA NA -0.436 2.42 1.96 -5.19 4.32 0.0909 #> # i 90 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Differences of factor smooth interactions — difference_smooths","title":"Differences of factor smooth interactions — difference_smooths","text":"Estimates pairwise differences (comparisons) factor smooth interactions (smooths factor argument) pairs groups defined factor. group means can optionally included difference.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Differences of factor smooth interactions — difference_smooths","text":"","code":"difference_smooths(model, ...) # S3 method for class 'gam' difference_smooths( model, select = NULL, smooth = deprecated(), n = 100, ci_level = 0.95, data = NULL, group_means = FALSE, partial_match = TRUE, unconditional = FALSE, frequentist = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Differences of factor smooth interactions — difference_smooths","text":"model fitted model. ... arguments passed methods. currently used. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. n numeric; number points evaluate difference pairs smooths. ci_level numeric 0 1; coverage credible interval. data data frame locations evaluate difference smooths. group_means logical; group means included difference? partial_match logical; smooth match partially smooths? partial_match = TRUE, smooth must single string, character vector length 1. Unlike similar functions, default TRUE intention users matching factor-smooth labels. unconditional logical; account smoothness selection model? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Differences of factor smooth interactions — difference_smooths","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", seed = 42) m <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") sm_dif <- difference_smooths(m, select = \"s(x2)\") sm_dif #> # A tibble: 300 x 9 #> .smooth .by .level_1 .level_2 .diff .se .lower_ci .upper_ci x2 #> #> 1 s(x2) fac 1 2 0.386 0.618 -0.824 1.60 0.00359 #> 2 s(x2) fac 1 2 0.479 0.574 -0.646 1.60 0.0136 #> 3 s(x2) fac 1 2 0.572 0.534 -0.474 1.62 0.0237 #> 4 s(x2) fac 1 2 0.665 0.497 -0.308 1.64 0.0338 #> 5 s(x2) fac 1 2 0.758 0.464 -0.151 1.67 0.0438 #> 6 s(x2) fac 1 2 0.850 0.435 -0.00342 1.70 0.0539 #> 7 s(x2) fac 1 2 0.941 0.412 0.134 1.75 0.0639 #> 8 s(x2) fac 1 2 1.03 0.393 0.262 1.80 0.0740 #> 9 s(x2) fac 1 2 1.12 0.378 0.380 1.86 0.0841 #> 10 s(x2) fac 1 2 1.21 0.367 0.489 1.93 0.0941 #> # i 290 more rows draw(sm_dif) # include the groups means for `fac` in the difference sm_dif2 <- difference_smooths(m, select = \"s(x2)\", group_means = TRUE) draw(sm_dif2)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/dispersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dispersion parameter for fitted model — dispersion","text":"","code":"dispersion(model, ...) # S3 method for class 'gam' dispersion(model, ...) # S3 method for class 'glm' dispersion(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/dispersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dispersion parameter for fitted model — dispersion","text":"model fitted model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot basis functions — draw.basis","title":"Plot basis functions — draw.basis","text":"Plots basis functions using ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot basis functions — draw.basis","text":"","code":"# S3 method for class 'basis' draw( object, legend = FALSE, labeller = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, ncol = NULL, nrow = NULL, angle = NULL, guides = \"keep\", contour = FALSE, n_contour = 10, contour_col = \"black\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot basis functions — draw.basis","text":"object object, result call basis(). legend logical; legend drawn indicate basis functions? labeller labeller function label facets. default use ggplot2::label_both(). ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). ncol, nrow numeric; numbers rows columns spread plots angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() contour logical; contours draw plot using ggplot2::geom_contour(). n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). contour_col colour specification contour lines. ... arguments passed methods. used method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot basis functions — draw.basis","text":"patchwork object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot basis functions — draw.basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot basis functions — draw.basis","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") bf <- basis(m) draw(bf) bf <- basis(m, \"s(x2)\") draw(bf)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot comparisons of smooths — draw.compare_smooths","title":"Plot comparisons of smooths — draw.compare_smooths","text":"Plot comparisons smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot comparisons of smooths — draw.compare_smooths","text":"","code":"# S3 method for class 'compare_smooths' draw(object, ncol = NULL, nrow = NULL, guides = \"collect\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot comparisons of smooths — draw.compare_smooths","text":"object class \"compare_smooths\", result call compare_smooths(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot conditional predictions — draw.conditional_values","title":"Plot conditional predictions — draw.conditional_values","text":"Plot conditional predictions","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot conditional predictions — draw.conditional_values","text":"","code":"# S3 method for class 'conditional_values' draw( object, facet_scales = \"fixed\", discrete_colour = NULL, discrete_fill = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot conditional predictions — draw.conditional_values","text":"object object class \"conditional_values\", result call conditional_values(). facet_scales character; facets axis scales across facets? See ggplot2::facet_wrap() details. Options : \"fixed\" (default), \"free_x\", \"free_y\", \"free\". discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot derivatives of smooths — draw.derivatives","title":"Plot derivatives of smooths — draw.derivatives","text":"Plot derivatives smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot derivatives of smooths — draw.derivatives","text":"","code":"# S3 method for class 'derivatives' draw( object, select = NULL, scales = c(\"free\", \"fixed\"), add_change = FALSE, change_type = c(\"change\", \"sizer\"), alpha = 0.2, change_col = \"black\", decrease_col = \"#56B4E9\", increase_col = \"#E69F00\", lwd_change = 1.5, ncol = NULL, nrow = NULL, guides = \"keep\", angle = NULL, ... ) # S3 method for class 'partial_derivatives' draw( object, select = NULL, scales = c(\"free\", \"fixed\"), alpha = 0.2, ncol = NULL, nrow = NULL, guides = \"keep\", angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot derivatives of smooths — draw.derivatives","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. add_change logical; periods significant change highlighted plot? change_type character; type change indicate. \"change\", differentiation made periods significant increase decrease. \"sizer\", periods increase decrease differentiated resulting plot. alpha numeric; alpha transparency confidence simultaneous interval. change_col, decrease_col, increase_col colour specifications use indicating periods change. col_change used change_type = \"change\", col_decrease col_increase used `change_type = \"sizer\"“. lwd_change numeric; linewidth use change indicators. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot derivatives of smooths — draw.derivatives","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 800, dist = \"normal\", scale = 2, seed = 42) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivative of all smooths df <- derivatives(mod, type = \"central\") draw(df) ## fixed axis scales draw(df, scales = \"fixed\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot differences of smooths — draw.difference_smooth","title":"Plot differences of smooths — draw.difference_smooth","text":"Plot differences smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot differences of smooths — draw.difference_smooth","text":"","code":"# S3 method for class 'difference_smooth' draw( object, select = NULL, rug = FALSE, ref_line = FALSE, contour = FALSE, contour_col = \"black\", n_contour = NULL, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", line_col = \"red\", scales = c(\"free\", \"fixed\"), ncol = NULL, nrow = NULL, guides = \"keep\", xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot differences of smooths — draw.difference_smooth","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. rug logical; ref_line logical; contour logical; contour lines added smooth surfaces? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth difference line. line_col colour specification drawing reference lines scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() xlab, ylab, title, subtitle, caption character; labels annotate plots angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot differences of smooths — draw.difference_smooth","text":"","code":"load_mgcv() # simulate some data; a factor smooth example df <- data_sim(\"eg4\", seed = 42) # fit GAM m <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") # calculate the differences between pairs of smooths the f_j(x2) term diffs <- difference_smooths(m, select = \"s(x2)\") draw(diffs)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated parametric effects — draw.evaluated_parametric_term","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"Plots estimated univariate bivariate smooths using ggplot2.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"","code":"# S3 method for class 'evaluated_parametric_term' draw( object, ci_level = 0.95, constant = NULL, fun = NULL, xlab, ylab, title = NULL, subtitle = NULL, caption = NULL, rug = TRUE, position = \"identity\", response_range = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"object object, result call evaluate_parametric_term(). ci_level numeric 0 1; coverage credible interval. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). rug evaluate_parametric_terms(), logical indicate rug plot drawn. position Position adjustment, either string, result call position adjustment function. response_range numeric; vector two values giving range response data guide. Used fix plots common scale/range. Ignored show set \"se\". ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated smooths from a fitted GAM — draw.gam","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Plots estimated smooths fitted GAM model similar way mgcv::plot.gam() instead using base graphics, ggplot2::ggplot() used instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"","code":"# S3 method for class 'gam' draw( object, data = NULL, select = NULL, parametric = FALSE, terms = NULL, residuals = FALSE, scales = c(\"free\", \"fixed\"), ci_level = 0.95, n = 100, n_3d = 16, n_4d = 4, unconditional = FALSE, overall_uncertainty = TRUE, constant = NULL, fun = NULL, dist = 0.1, rug = TRUE, contour = TRUE, grouped_by = FALSE, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", resid_col = \"steelblue3\", contour_col = \"black\", n_contour = NULL, partial_match = FALSE, discrete_colour = NULL, discrete_fill = NULL, continuous_colour = NULL, continuous_fill = NULL, position = \"identity\", angle = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", widths = NULL, heights = NULL, crs = NULL, default_crs = NULL, lims_method = \"cross\", wrap = TRUE, caption = TRUE, envir = environment(formula(object)), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"object fitted GAM, result call mgcv::gam(). data optional data frame used supply data smooths evaluated plotted. usually needed, option need fine control exactly data used plotting. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. parametric logical; plot parametric terms also? Note select used selecting smooths plot. terms argument used select parametric effects plotted. default, mgcv::plot.gam(), draw parametric effects. terms character; model parametric terms drawn? Default NULL plot parametric terms can drawn. residuals logical; partial residuals smooth drawn? Ignored anything simple univariate smooth. scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ci_level numeric 0 1; coverage credible interval. n numeric; number points range covariate evaluate smooth. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. contour logical; contours draw plot using ggplot2::geom_contour(). grouped_by logical; factor smooths drawn one panel per level factor (FALSE, default), individual smooths combined single panel containing levels (TRUE)? ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth line. resid_col colour specification partial residuals. contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). partial_match logical; smooths selected partial matches select? TRUE, select can single string match . discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. continuous_colour suitable colour scale used plotting continuous variables. continuous_fill suitable fill scale used plotting continuous variables. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() widths, heights relative widths heights column row grid. get repeated match dimensions grid. 1 plot widths = NULL, value widths set internally widths = 1 accommodate plots smooths use fixed aspect ratio. crs coordinate reference system (CRS) use plot. data projected CRS. See ggplot2::coord_sf() details. default_crs coordinate reference system (CRS) use non-sf layers plot. left default NULL, CRS used 4326 (WGS84), appropriate spline---sphere smooths, parameterized terms latitude longitude coordinates. See ggplot2::coord_sf() details. lims_method character; affects axis limits determined. See ggplot2::coord_sf(). careful; testing examples, changing \"orthogonal\" example chlorophyll-example Simon Wood's GAM book quickly used RAM test system OS killed R. incorrect usage part; right now grid points SOS smooths evaluated (supplied user) can produce invalid coordinates corners tiles grid generated tile centres without respect spacing tiles. wrap logical; wrap plots patchwork? FALSE, list ggplot objects returned, 1 per term plotted. caption logical; show smooth type caption plot? envir environment look data within. ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"object returned created patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Internally, plots smooth created using ggplot2::ggplot() composed single plot using patchwork::wrap_plots(). result, possible use + add plots way one might typically work ggplot() plots. Instead, use & operator; see examples.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"","code":"load_mgcv() # simulate some data df1 <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) # fit GAM m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df1, method = \"REML\") # plot all smooths draw(m1) # can add partial residuals draw(m1, residuals = TRUE) df2 <- data_sim(\"eg2\", n = 1000, dist = \"normal\", scale = 1, seed = 2) m2 <- gam(y ~ s(x, z, k = 40), data = df2, method = \"REML\") draw(m2, contour = FALSE, n = 50) # See https://gavinsimpson.github.io/gratia/articles/custom-plotting.html # for more examples and for details on how to modify the theme of all the # plots produced by draw(). To modify all panels, for example to change the # theme, use the & operator"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"Provides draw() method GAMLSS (distributional GAMs) fitted GJRM::gamlss().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"","code":"# S3 method for class 'gamlss' draw( object, scales = c(\"free\", \"fixed\"), ncol = NULL, nrow = NULL, guides = \"keep\", widths = NULL, heights = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"object model, fitted GJRM::gamlss() scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() widths, heights relative widths heights column row grid. get repeated match dimensions grid. 1 plot widths = NULL, value widths set internally widths = 1 accommodate plots smooths use fixed aspect ratio. ... arguments passed draw.gam()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"Plots smooths labelled linear predictor belong.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"","code":"if (require(\"GJRM\", quietly = TRUE)) { # follow example from ?GJRM::gamlss load_mgcv() suppressPackageStartupMessages(library(\"GJRM\")) set.seed(0) n <- 100 x1 <- round(runif(n)) x2 <- runif(n) x3 <- runif(n) f1 <- function(x) cos(pi * 2 * x) + sin(pi * x) y1 <- -1.55 + 2 * x1 + f1(x2) + rnorm(n) dataSim <- data.frame(y1, x1, x2, x3) eq_mu <- y1 ~ x1 + s(x2) eq_s <- ~ s(x3, k = 6) fl <- list(eq_mu, eq_s) m <- gamlss(fl, data = dataSim) draw(m) }"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic plotting via ggplot2 — draw","title":"Generic plotting via ggplot2 — draw","text":"Generic plotting via ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic plotting via ggplot2 — draw","text":"","code":"draw(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic plotting via ggplot2 — draw","text":"object R object plot. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic plotting via ggplot2 — draw","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generic plotting via ggplot2 — draw","text":"Generic function plotting R objects uses ggplot2 package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic plotting via ggplot2 — draw","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot basis functions — draw.mgcv_smooth","title":"Plot basis functions — draw.mgcv_smooth","text":"Plots basis functions using ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot basis functions — draw.mgcv_smooth","text":"","code":"# S3 method for class 'mgcv_smooth' draw( object, legend = FALSE, use_facets = TRUE, labeller = NULL, xlab, ylab, title = NULL, subtitle = NULL, caption = NULL, angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot basis functions — draw.mgcv_smooth","text":"object object, result call basis(). legend logical; legend drawn indicate basis functions? use_facets logical; factor smooths, use facets show basis functions level factor? FALSE, separate ggplot object created level combined using patchwork::wrap_plots(). Currently ignored. labeller labeller function label facets. default use ggplot2::label_both(). xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... arguments passed methods. used method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot basis functions — draw.mgcv_smooth","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot basis functions — draw.mgcv_smooth","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot basis functions — draw.mgcv_smooth","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", n = 400, seed = 42) bf <- basis(s(x0), data = df) draw(bf) bf <- basis(s(x2, by = fac, bs = \"bs\"), data = df) draw(bf)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot concurvity measures — draw.pairwise_concurvity","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"Plot concurvity measures","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"","code":"# S3 method for class 'pairwise_concurvity' draw( object, title = \"Smooth-wise concurvity\", subtitle = NULL, caption = NULL, x_lab = \"Term\", y_lab = \"With\", fill_lab = \"Concurvity\", continuous_colour = NULL, ... ) # S3 method for class 'overall_concurvity' draw( object, title = \"Overall concurvity\", subtitle = NULL, caption = NULL, y_lab = \"Concurvity\", x_lab = NULL, bar_col = \"steelblue\", bar_fill = \"steelblue\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"object object inheriting class \"concurvity\", usually result call model_concurvity() abbreviated form concrvity(). title character; plot title. subtitle character; plot subtitle. caption character; plot caption x_lab character; label x axis. y_lab character; label y axis. fill_lab character; label use fill guide. continuous_colour function; continuous colour (fill) scale use. ... arguments passed methods. bar_col colour specification bar colour. bar_fill colour specification bar fill","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated effects for model parametric terms — draw.parametric_effects","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"Plot estimated effects model parametric terms","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"","code":"# S3 method for class 'parametric_effects' draw( object, scales = c(\"free\", \"fixed\"), ci_level = 0.95, ci_col = \"black\", ci_alpha = 0.2, line_col = \"black\", constant = NULL, fun = NULL, rug = TRUE, position = \"identity\", angle = NULL, ..., ncol = NULL, nrow = NULL, guides = \"keep\" )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"object fitted GAM, result call mgcv::gam(). scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ci_level numeric 0 1; coverage credible interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. ci_alpha numeric; alpha transparency confidence simultaneous interval. line_col colour specification used regression lines linear continuous terms. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Display penalty matrices of smooths using ggplot — draw.penalty_df","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"Displays penalty matrices smooths heatmap using ggplot","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"","code":"# S3 method for class 'penalty_df' draw( object, normalize = FALSE, as_matrix = TRUE, continuous_fill = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"object fitted GAM, result call mgcv::gam(). normalize logical; normalize penalty range -1, 1? as_matrix logical; plotted penalty matrix oriented? TRUE row 1, column 1 penalty matrix draw upper left, whereas, FALSE drawn lower left plot. continuous_fill suitable fill scale used plotting continuous variables. xlab character expression; label x axis. supplied, axis label drawn. May vector, one per penalty. ylab character expression; label y axis. supplied, axis label drawn. May vector, one per penalty. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ncol, nrow numeric; numbers rows columns spread plots. guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"","code":"load_mgcv() dat <- data_sim(\"eg4\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1, bs = \"cr\") + s(x2, bs = \"bs\", by = fac), data = dat, method = \"REML\" ) ## produce a multi-panel plot of all penalties draw(penalty(m)) # for a specific smooth draw(penalty(m, select = \"s(x2):fac1\"))"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a rootogram — draw.rootogram","title":"Draw a rootogram — draw.rootogram","text":"rootogram model diagnostic tool assesses goodness fit statistical model. observed values response compared expected fitted model. discrete, count responses, frequency count (0, 1, 2, etc) observed data expected conditional distribution response implied model compared. continuous variables, observed expected frequencies obtained grouping data bins. rootogram drawn using ggplot2::ggplot() graphics. design closely follows Kleiber & Zeileis (2016).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a rootogram — draw.rootogram","text":"","code":"# S3 method for class 'rootogram' draw( object, type = c(\"hanging\", \"standing\", \"suspended\"), sqrt = TRUE, ref_line = TRUE, warn_limits = TRUE, fitted_colour = \"steelblue\", bar_colour = NA, bar_fill = \"grey\", ref_line_colour = \"black\", warn_line_colour = \"black\", ylab = NULL, xlab = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a rootogram — draw.rootogram","text":"object R object plot. type character; type rootogram draw. sqrt logical; show observed fitted frequencies ref_line logical; draw reference line zero? warn_limits logical; draw Tukey's warning limit lines +/- 1? fitted_colour, bar_colour, bar_fill, ref_line_colour, warn_line_colour colours used draw respective element rootogram. xlab, ylab character; labels x y axis rootogram. May missing (NULL), case suitable labels used. ' ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a rootogram — draw.rootogram","text":"'ggplot' object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw a rootogram — draw.rootogram","text":"Kleiber, C., Zeileis, ., (2016) Visualizing Count Data Regressions Using Rootograms. . Stat. 70, 296–303. doi:10.1080/00031305.2016.1173590","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a rootogram — draw.rootogram","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 1000, dist = \"poisson\", scale = 0.1, seed = 6) # A poisson example m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = poisson(), data = df, method = \"REML\") rg <- rootogram(m) # plot the rootogram draw(rg) # change the type of rootogram draw(rg, type = \"suspended\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"Plot result call smooth_estimates()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"","code":"# S3 method for class 'smooth_estimates' draw( object, constant = NULL, fun = NULL, contour = TRUE, grouped_by = FALSE, contour_col = \"black\", n_contour = NULL, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", resid_col = \"steelblue3\", decrease_col = \"#56B4E9\", increase_col = \"#E69F00\", change_lwd = 1.75, partial_match = FALSE, discrete_colour = NULL, discrete_fill = NULL, continuous_colour = NULL, continuous_fill = NULL, angle = NULL, ylim = NULL, crs = NULL, default_crs = NULL, lims_method = \"cross\", caption = TRUE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"object fitted GAM, result call mgcv::gam(). constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. contour logical; contours draw plot using ggplot2::geom_contour(). grouped_by logical; factor smooths drawn one panel per level factor (FALSE, default), individual smooths combined single panel containing levels (TRUE)? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth line. resid_col colour specification partial residuals. decrease_col, increase_col colour specifications use indicating periods change. col_change used change_type = \"change\", col_decrease col_increase used `change_type = \"sizer\"“. change_lwd numeric; value set linewidth ggplot2::geom_line(), used represent periods change. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. continuous_colour suitable colour scale used plotting continuous variables. continuous_fill suitable fill scale used plotting continuous variables. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ylim numeric; vector y axis limits use panels drawn. crs coordinate reference system (CRS) use plot. data projected CRS. See ggplot2::coord_sf() details. default_crs coordinate reference system (CRS) use non-sf layers plot. left default NULL, CRS used 4326 (WGS84), appropriate spline---sphere smooths, parameterized terms latitude longitude coordinates. See ggplot2::coord_sf() details. lims_method character; affects axis limits determined. See ggplot2::coord_sf(). careful; testing examples, changing \"orthogonal\" example chlorophyll-example Simon Wood's GAM book quickly used RAM test system OS killed R. incorrect usage part; right now grid points SOS smooths evaluated (supplied user) can produce invalid coordinates corners tiles grid generated tile centres without respect spacing tiles. caption logical; show smooth type caption plot? ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"","code":"load_mgcv() # example data df <- data_sim(\"eg1\", seed = 21) # fit GAM m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # plot all of the estimated smooths sm <- smooth_estimates(m) draw(sm) # evaluate smooth of `x2` sm <- smooth_estimates(m, select = \"s(x2)\") # plot it draw(sm) # customising some plot elements draw(sm, ci_col = \"steelblue\", smooth_col = \"forestgreen\", ci_alpha = 0.3) # Add a constant to the plotted smooth draw(sm, constant = coef(m)[1]) # Adding change indicators to smooths based on derivatives of the smooth d <- derivatives(m, n = 100) # n to match smooth_estimates() smooth_estimates(m) |> add_sizer(derivatives = d, type = \"sizer\") |> draw()"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot posterior smooths — draw.smooth_samples","title":"Plot posterior smooths — draw.smooth_samples","text":"Plot posterior smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot posterior smooths — draw.smooth_samples","text":"","code":"# S3 method for class 'smooth_samples' draw( object, select = NULL, n_samples = NULL, seed = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, alpha = 1, colour = \"black\", contour = FALSE, contour_col = \"black\", n_contour = NULL, scales = c(\"free\", \"fixed\"), rug = TRUE, partial_match = FALSE, angle = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot posterior smooths — draw.smooth_samples","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. n_samples numeric; NULL, sample n_samples posterior draws plotting. seed numeric; random seed used sampling draws. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). alpha numeric; alpha transparency confidence simultaneous interval. colour colour use draw posterior smooths. Passed ggplot2::geom_line() argument colour. contour logical; contour lines added smooth surfaces? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot posterior smooths — draw.smooth_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot posterior smooths — draw.smooth_samples","text":"","code":"load_mgcv() dat1 <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## a single smooth GAM m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat1, method = \"REML\") ## posterior smooths from m1 sm1 <- smooth_samples(m1, n = 15, seed = 23478) ## plot draw(sm1, alpha = 0.7) ## plot only 5 randomly smapled draws draw(sm1, n_samples = 5, alpha = 0.7) ## A factor-by smooth example dat2 <- data_sim(\"eg4\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## a multi-smooth GAM with a factor-by smooth m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = dat2, method = \"REML\") ## posterior smooths from m1 sm2 <- smooth_samples(m2, n = 15, seed = 23478) ## plot, this time selecting only the factor-by smooth draw(sm2, select = \"s(x2)\", partial_match = TRUE, alpha = 0.7) # \\donttest{ ## A 2D smooth example dat3 <- data_sim(\"eg2\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## fit a 2D smooth m3 <- gam(y ~ te(x, z), data = dat3, method = \"REML\") ## get samples sm3 <- smooth_samples(m3, n = 10) ## plot just 6 of the draws, with contour line overlays draw(sm3, n_samples = 6, contour = TRUE, seed = 42) # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to draw an individual parametric effect — draw_parametric_effect","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"Internal function draw individual parametric effect","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"","code":"draw_parametric_effect( object, ci_level = 0.95, ci_col = \"black\", ci_alpha = 0.2, line_col = \"black\", constant = NULL, fun = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, rug = TRUE, position = \"identity\", ylim = NULL, angle = NULL, factor_levels = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"object fitted GAM, result call mgcv::gam(). ci_level numeric 0 1; coverage credible interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. ci_alpha numeric; alpha transparency confidence simultaneous interval. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). factor_levels list; named list factor levels ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":null,"dir":"Reference","previous_headings":"","what":"Effective degrees of freedom for smooths and GAMs — edf","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"Extracts effective degrees freedom (EDF) model smooth terms overall EDF fitted GAMs","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"","code":"edf(object, ...) # S3 method for class 'gam' edf( object, select = NULL, smooth = deprecated(), type = c(\"default\", \"unconditional\", \"alternative\"), partial_match = FALSE, ... ) model_edf(object, ..., type = c(\"default\", \"unconditional\", \"alternative\"))"},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"object fitted model extract smooth-specific EDFs. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. extracted. NULL, default, EDFs smooths returned. type character: type EDF return. \"default\" returns standard EDF; \"unconditional\" selects EDF corrected smoothness parameter selection, available; \"alternative\" returns alternative formulation EDF Wood (2017, pp. 252) partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"Multiple formulations effective degrees freedom available. additional uncertainty due selection smoothness parameters can taken account computing EDF smooths. form EDF available type = \"unconditional\". Wood (2017; pp. 252) describes alternative EDF model $$\\mathrm{EDF} = 2\\mathrm{tr}(\\mathbf{F}) - \\mathrm{tr}(\\mathbf{FF}),$$ \\(\\mathrm{tr}\\) matrix trace \\(\\mathbf{F}\\) matrix mapping un-penalized coefficient estimates penalized coefficient estimates. trace \\(\\mathbf{F}\\) effectively average shrinkage coefficients multipled number coefficients (Wood, 2017). Smooth-specific EDFs obtained summing relevent elements \\(\\mathrm{diag}(2\\mathbf{F} - \\mathbf{FF})\\).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # extract the EDFs for all smooths edf(m) #> # A tibble: 4 x 2 #> .smooth .edf #> #> 1 s(x0) 3.4248 #> 2 s(x1) 3.2213 #> 3 s(x2) 7.9049 #> 4 s(x3) 1.8847 # or selected smooths edf(m, select = c(\"s(x0)\", \"s(x2)\")) #> # A tibble: 2 x 2 #> .smooth .edf #> #> 1 s(x0) 3.4248 #> 2 s(x2) 7.9049 # accounting for smoothness parameter uncertainty edf(m, type = \"unconditional\") #> # A tibble: 4 x 2 #> .smooth .edf #> #> 1 s(x0) 3.7697 #> 2 s(x1) 3.8728 #> 3 s(x2) 8.0670 #> 4 s(x3) 2.8834 # over EDF of the model, including the intercept model_edf(m) #> # A tibble: 1 x 2 #> .model .edf #> #> 1 m 17.436 # can get model EDF for multiple models m2 <- gam(y ~ s(x0) + s(x1) + s(x3), data = df, method = \"REML\") model_edf(m, m2) #> # A tibble: 2 x 2 #> .model .edf #> #> 1 m 17.436 #> 2 m2 7.5777"},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"S3 methods to evaluate individual smooths — eval_smooth","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"S3 methods evaluate individual smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"","code":"eval_smooth(smooth, ...) # S3 method for class 'mgcv.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'soap.film' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'scam_smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'fs.interaction' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'sz.interaction' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'random.effect' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'mrf.smooth' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 't2.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'tensor.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"smooth currently object inherits class mgcv.smooth. ... arguments passed methods model fitted model; currently mgcv::gam() mgcv::bam() models suported. n numeric; number points range covariate evaluate smooth. n_3d, n_4d numeric; number points range last covariate 3D 4D smooth. default NULL achieves standard behaviour using n points range covariate, resulting n^d evaluation points, d dimension smooth. d > 2 can result many evaluation points slow performance. smooths d > 4, value n_4d used dimensions > 4, unless NULL, case default behaviour (using n dimensions) observed. data optional data frame values evaluate smooth . unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate parametric model terms — evaluate_parametric_term","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"Returns values parametric model terms values factor terms grid covariate values linear parametric terms. function now deprecated favour parametric_effects().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"","code":"evaluate_parametric_term(object, ...) # S3 method for class 'gam' evaluate_parametric_term(object, term, unconditional = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"object object class \"gam\" \"gamm\". ... arguments passed methods. term character; parametric term whose effects evaluated unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a smooth — evaluate_smooth","title":"Evaluate a smooth — evaluate_smooth","text":"Evaluate smooth grid evenly spaced value range covariate associated smooth. Alternatively, set points smooth evaluated can supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a smooth — evaluate_smooth","text":"","code":"evaluate_smooth(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a smooth — evaluate_smooth","text":"object object class \"gam\" \"gamm\". ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate a smooth — evaluate_smooth","text":"data frame, class \"evaluated_1d_smooth\" evaluated_2d_smooth, inherit classes \"evaluated_smooth\" \"data.frame\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Evaluate a smooth — evaluate_smooth","text":"evaluate_smooth() deprecated favour smooth_estimates(), provides cleaner way evaluate smooth range covariate values. smooth_estimates() can handle much wider range models evaluate_smooth() capable smooth_estimates() much easier extend handle new smooth types. code uses evaluate_smooth() work simply changing function call smooth_estimates(). However, differences: newdata argument becomes data","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a sequence of evenly-spaced values — evenly","title":"Create a sequence of evenly-spaced values — evenly","text":"continuous vector x, evenly seq_min_max() create sequence n evenly-spaced values range lower – upper. default, lower defined min(x) upper max(x), excluding NAs. factor x, function returns levels(x).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a sequence of evenly-spaced values — evenly","text":"","code":"evenly(x, n = 100, by = NULL, lower = NULL, upper = NULL) seq_min_max(x, n, by = NULL, lower = NULL, upper = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a sequence of evenly-spaced values — evenly","text":"x numeric; vector evenly-spaced values returned n numeric; number evenly-spaced values return. default 100 used convenience typically used evaluating smooth. numeric; increment sequence. specified, argument n ignored sequence returned min(x) max(x) increments . lower numeric; lower bound interval. upper numeric; upper bound interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a sequence of evenly-spaced values — evenly","text":"numeric vector length n.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a sequence of evenly-spaced values — evenly","text":"","code":"x <- rnorm(10) n <- 10L # 10 values evenly over the range of `x` evenly(x, n = n) #> [1] -0.83562861 -0.56552757 -0.29542652 -0.02532547 0.24477557 0.51487662 #> [7] 0.78497766 1.05507871 1.32517976 1.59528080 # evenly spaced values, incrementing by 0.2 evenly(x, by = 0.2) #> [1] -0.83562861 -0.63562861 -0.43562861 -0.23562861 -0.03562861 0.16437139 #> [7] 0.36437139 0.56437139 0.76437139 0.96437139 1.16437139 1.36437139 #> [13] 1.56437139 # evenly spaced values, incrementing by 0.2, starting at -2 evenly(x, by = 0.2, lower = -2) #> [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 #> [16] 1.0 1.2 1.4"},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":null,"dir":"Reference","previous_headings":"","what":"All combinations of factor levels — factor_combos","title":"All combinations of factor levels — factor_combos","text":"combinations factor levels","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All combinations of factor levels — factor_combos","text":"","code":"factor_combos(object, ...) # S3 method for class 'gam' factor_combos(object, vars = everything(), complete = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All combinations of factor levels — factor_combos","text":"object fitted model object. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. complete logical; combinations factor levels returned? FALSE, combinations levels observed model retained.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract family objects from models — family.gam","title":"Extract family objects from models — family.gam","text":"Provides stats::family() method range GAM objects.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract family objects from models — family.gam","text":"","code":"# S3 method for class 'gam' family(object, ...) # S3 method for class 'gamm' family(object, ...) # S3 method for class 'bam' family(object, ...) # S3 method for class 'list' family(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract family objects from models — family.gam","text":"object fitted model. Models fitted mgcv::gam(), mgcv::bam(), mgcv::gamm(), gamm4::gamm4() currently supported. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Name of family used to fit model — family_name","title":"Name of family used to fit model — family_name","text":"Extracts name family used fit supplied model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Name of family used to fit model — family_name","text":"","code":"family_name(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Name of family used to fit model — family_name","text":"object R object. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Name of family used to fit model — family_name","text":"character vector containing family name.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Extracts the type of family in a consistent way — family_type","title":"Extracts the type of family in a consistent way — family_type","text":"Extracts type family consistent way","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extracts the type of family in a consistent way — family_type","text":"","code":"family_type(object, ...) # S3 method for class 'family' family_type(object, ...) # Default S3 method family_type(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extracts the type of family in a consistent way — family_type","text":"object R object. Currently family() objects anything family() method. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":null,"dir":"Reference","previous_headings":"","what":"First derivatives of fitted GAM functions — fderiv","title":"First derivatives of fitted GAM functions — fderiv","text":"function deprecated limited first order forward finite differences derivatives , improved offer needed functionality without breaking backwards compatability papers blog posts already used fderiv(). replacement, derivatives(), now available recommended new analyses.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"First derivatives of fitted GAM functions — fderiv","text":"","code":"fderiv(model, ...) # S3 method for class 'gam' fderiv( model, newdata, term, n = 200, eps = 1e-07, unconditional = FALSE, offset = NULL, ... ) # S3 method for class 'gamm' fderiv(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"First derivatives of fitted GAM functions — fderiv","text":"model fitted GAM. Currently models fitted mgcv::gam() mgcv::gamm() supported. ... Arguments passed methods. newdata data frame containing values model covariates evaluate first derivatives smooths. term character; vector one terms derivatives required. missing, derivatives smooth terms returned. n integer; newdata missing original data can reconstructed model n controls number values range covariate populate newdata. eps numeric; value finite difference used approximate first derivative. unconditional logical; TRUE, smoothing parameter uncertainty corrected covariance matrix used, available, otherwise uncorrected Bayesian posterior covariance matrix used. offset numeric; value offset use generating predictions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"First derivatives of fitted GAM functions — fderiv","text":"object class \"fderiv\" returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"First derivatives of fitted GAM functions — fderiv","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"First derivatives of fitted GAM functions — fderiv","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivatives of all smooths... fd <- fderiv(mod) ## now use --> fd <- derivatives(mod) ## ...and a selected smooth fd2 <- fderiv(mod, term = \"x1\") ## now use --> fd2 <- derivatives(mod, select = \"s(x1)\") ## Models with factors dat <- data_sim(\"eg4\", n = 400, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + fac, data = dat, method = \"REML\") ## first derivatives of all smooths... fd <- fderiv(mod) ## now use --> fd <- derivatives(mod) ## ...and a selected smooth fd2 <- fderiv(mod, term = \"x1\") ## now use --> fd2 <- derivatives(mod, select = \"s(x1)\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw fitted values from the posterior distribution — fitted_samples","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Expectations (fitted values) response drawn posterior distribution fitted model using Gaussian approximation posterior simple Metropolis Hastings sampler.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"","code":"fitted_samples(model, ...) # S3 method for class 'gam' fitted_samples( model, n = 1, data = newdata, seed = NULL, scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n_cores = 1, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, freq = FALSE, unconditional = FALSE, draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. scale character; scale fitted values returned ? \"linear predictor\" synonym \"link\" prefer terminology. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Models offset terms supplied via offset argument mgcv::gam() etc. ignored mgcv::predict.gam(). , kind offset term also ignored posterior_samples(). Offset terms included model formula supplied mgcv::gam() etc ignored posterior samples produced reflect offset term values. side effect requiring new data values provided posterior_samples() via data argument must include offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Wood, S.N., (2020). Simplified integrated nested Laplace approximation. Biometrika 107, 223–230. doi:10.1093/biomet/asz044","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") fs <- fitted_samples(m1, n = 5, seed = 42) # \\donttest{ fs #> # A tibble: 5,000 x 4 #> .row .draw .parameter .fitted #> #> 1 1 1 location 6.34 #> 2 2 1 location 5.08 #> 3 3 1 location 6.84 #> 4 4 1 location 7.71 #> 5 5 1 location 9.23 #> 6 6 1 location 8.03 #> 7 7 1 location 6.19 #> 8 8 1 location 7.28 #> 9 9 1 location 14.0 #> 10 10 1 location 12.7 #> # i 4,990 more rows # } # can generate own set of draws and use them drws <- generate_draws(m1, n = 2, seed = 24) fs2 <- fitted_samples(m1, method = \"user\", draws = drws) # \\donttest{ fs2 #> # A tibble: 2,000 x 4 #> .row .draw .parameter .fitted #> #> 1 1 1 location 6.30 #> 2 2 1 location 5.12 #> 3 3 1 location 7.40 #> 4 4 1 location 7.42 #> 5 5 1 location 9.40 #> 6 6 1 location 8.04 #> 7 7 1 location 5.83 #> 8 8 1 location 7.30 #> 9 9 1 location 14.3 #> 10 10 1 location 13.1 #> # i 1,990 more rows # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate fitted values from a estimated GAM — fitted_values","title":"Generate fitted values from a estimated GAM — fitted_values","text":"Generate fitted values estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate fitted values from a estimated GAM — fitted_values","text":"","code":"fitted_values(object, ...) # S3 method for class 'gam' fitted_values( object, data = NULL, scale = c(\"response\", \"link\", \"linear predictor\"), ci_level = 0.95, ... ) # S3 method for class 'gamm' fitted_values(object, ...) # S3 method for class 'scam' fitted_values(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate fitted values from a estimated GAM — fitted_values","text":"object fitted model. Currently models fitted mgcv::gam() mgcv::bam() supported. ... arguments passed mgcv::predict.gam(). Note type, newdata, se.fit already used passed mgcv::predict.gam(). data optional data frame covariate values fitted values returned. scale character; scale fitted values returned ? \"linear predictor\" synonym \"link\" prefer terminology. ci_level numeric; value 0 1 indicating coverage credible interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate fitted values from a estimated GAM — fitted_values","text":"tibble (data frame) whose first m columns contain either data used fit model (data NULL), variables supplied data. Four columns added: fitted: fitted values specified scale, se: standard error fitted values (always link scale), lower, upper: limits credible interval fitted values, specified scale. Models fitted certain families include additional variables mgcv::ocat() models: scale = \"repsonse\", returned object contain row column category column, indicate row data row returned object belongs. Additionally, nrow(data) * n_categories rows returned object; row predicted probability single category response.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Generate fitted values from a estimated GAM — fitted_values","text":"families, regardless scale fitted values returned, se component returned object link (linear predictor) scale, response scale. exception mgcv::ocat() family, se response scale scale = \"response\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate fitted values from a estimated GAM — fitted_values","text":"","code":"load_mgcv() sim_df <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = sim_df, method = \"REML\") fv <- fitted_values(m) fv #> # A tibble: 400 x 9 #> .row x0 x1 x2 x3 .fitted .se .lower_ci #> #> 1 1 0.184882 0.617142 0.415244 0.132410 8.73875 0.354677 8.04360 #> 2 2 0.702374 0.569064 0.531439 0.365331 7.62581 0.337779 6.96378 #> 3 3 0.573326 0.153970 0.00324621 0.454532 3.12106 0.591862 1.96103 #> 4 4 0.168052 0.0348332 0.252100 0.537114 11.1124 0.402378 10.3237 #> 5 5 0.943839 0.997953 0.155229 0.185495 14.0533 0.452947 13.1655 #> 6 6 0.943475 0.835574 0.878840 0.449276 6.13080 0.364521 5.41635 #> 7 7 0.129159 0.586562 0.203511 0.256527 12.4838 0.355808 11.7864 #> 8 8 0.833449 0.339117 0.583528 0.618458 6.25215 0.344700 5.57655 #> 9 9 0.468019 0.166883 0.804473 0.880744 4.21463 0.372003 3.48552 #> 10 10 0.549984 0.807410 0.264717 0.317747 15.5283 0.369999 14.8031 #> # i 390 more rows #> # i 1 more variable: .upper_ci "},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix the names of a data frame containing an offset variable. — fix_offset","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"Identifies variable, , model offset, fixed name offset(foo(var)) converted var, possibly sets values variable offset_val.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"","code":"fix_offset(model, newdata, offset_val = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"model fitted GAM. newdata data frame; new values predict . offset_val numeric, optional; provided, offset variable newdata set constant value returning newdata","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"original newdata returned fixed names possibly modified offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + offset(x2), data = df, method = \"REML\") names(model.frame(m)) #> [1] \"y\" \"offset(x2)\" \"x0\" \"x1\" names(fix_offset(m, model.frame(m), offset_val = 1L)) #> [1] \"y\" \"x2\" \"x0\" \"x1\""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract fixed effects estimates from a fitted GAM — fixef.gam","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"Extract fixed effects estimates fitted GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"","code":"# S3 method for class 'gam' fixef(object, ...) # S3 method for class 'gamm' fixef(object, ...) # S3 method for class 'lm' fixef(object, ...) # S3 method for class 'glm' fixef(object, ...) fixed_effects(object, ...) # Default S3 method fixed_effects(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"object fitted GAM ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"","code":"load_mgcv() # run example if lme4 is available if (require(\"lme4\")) { data(sleepstudy, package = \"lme4\") m <- gam( Reaction ~ Days + s(Subject, bs = \"re\") + s(Days, Subject, bs = \"re\"), data = sleepstudy, method = \"REML\" ) fixef(m) } #> Loading required package: lme4 #> Loading required package: Matrix #> (Intercept) Days #> 251.40510 10.46729"},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract fixed effects estimates — fixef","title":"Extract fixed effects estimates — fixef","text":"Extract fixed effects estimates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract fixed effects estimates — fixef","text":"object fitted GAM ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"Posterior samples using simple Metropolis Hastings sampler","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"","code":"gaussian_draws(model, ...) # S3 method for class 'gam' gaussian_draws( model, n, n_cores = 1L, index = NULL, frequentist = FALSE, unconditional = FALSE, mvn_method = \"mvnfast\", ... ) # S3 method for class 'scam' gaussian_draws( model, n, n_cores = 1L, index = NULL, frequentist = FALSE, parametrized = TRUE, mvn_method = \"mvnfast\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. n_cores integer; number CPU cores use generating multivariate normal distributed random values. used mvn_method = \"mvnfast\" method = \"gaussian\". index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model. frequentist logical; TRUE, frequentist covariance matrix parameter estimates used. FALSE, Bayesian posterior covariance matrix parameters used. See mgcv::vcov.gam(). unconditional logical; TRUE Bayesian smoothing parameter uncertainty corrected covariance matrix used, available model. See mgcv::vcov.gam(). mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. parametrized logical; use parametrized coefficients covariance matrix, respect linear inequality constraints model. scam::scam() model fits.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an factor-by smooth by name — get_by_smooth","title":"Extract an factor-by smooth by name — get_by_smooth","text":"Extract factor-smooth name","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an factor-by smooth by name — get_by_smooth","text":"","code":"get_by_smooth(object, term, level)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an factor-by smooth by name — get_by_smooth","text":"object fitted GAM model object. term character; name smooth term extract. level character; level factor exrtact smooth .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract an factor-by smooth by name — get_by_smooth","text":"single smooth object, list smooths several match named term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an mgcv smooth by name — get_smooth","title":"Extract an mgcv smooth by name — get_smooth","text":"Extract mgcv smooth name","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an mgcv smooth by name — get_smooth","text":"","code":"get_smooth(object, term)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an mgcv smooth by name — get_smooth","text":"object fitted GAM model object. term character; name smooth term extract","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract an mgcv smooth by name — get_smooth","text":"single smooth object, list smooths several match named term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"Extract mgcv smooth given position model object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"","code":"get_smooths_by_id(object, id) # S3 method for class 'gam' get_smooths_by_id(object, id) # S3 method for class 'scam' get_smooths_by_id(object, id) # S3 method for class 'gamm' get_smooths_by_id(object, id) # S3 method for class 'gamm4' get_smooths_by_id(object, id) # S3 method for class 'list' get_smooths_by_id(object, id)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"object fitted GAM model object. id numeric; position smooth model object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gratia-package.html","id":null,"dir":"Reference","previous_headings":"","what":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","title":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","text":"Graceful 'ggplot'-based graphics utility functions working generalized additive models (GAMs) fitted using 'mgcv' package. Provides reimplementation plot() method GAMs 'mgcv' provides, well 'tidyverse' compatible representations estimated smooths.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/gratia-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","text":"Maintainer: Gavin L. Simpson ucfagls@gmail.com (ORCID) [copyright holder] contributors: Henrik Singmann (ORCID) [contributor]","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gss_vocab.html","id":null,"dir":"Reference","previous_headings":"","what":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","title":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","text":"subset data carData::GSSvocab dataset carData package, containing observations 2016 .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gss_vocab.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","text":"data frame 1858 rows 3 variables: vocab: numeric; number words 10 correct vocabulary test. nativeBorn: factor; respondent born US? factor levels yes. ageGroup: factor; grouped age respondent levels 18-29 30-39, 40-49, 50-59, 60+.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":null,"dir":"Reference","previous_headings":"","what":"Gu and Wabha test functions — gw_f0","title":"Gu and Wabha test functions — gw_f0","text":"Gu Wabha test functions","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gu and Wabha test functions — gw_f0","text":"","code":"gw_f0(x, ...) gw_f1(x, ...) gw_f2(x, ...) gw_f3(x, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gu and Wabha test functions — gw_f0","text":"x numeric; vector points evaluate function , interval (0,1) ... arguments passed methods, ignored.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gu and Wabha test functions — gw_f0","text":"","code":"x <- seq(0, 1, length = 6) gw_f0(x) #> [1] 0.000e+00 1.176e+00 1.902e+00 1.902e+00 1.176e+00 2.449e-16 gw_f1(x) #> [1] 1.000 1.492 2.226 3.320 4.953 7.389 gw_f2(x) #> [1] 0.000 8.591 4.261 3.199 1.100 0.000 gw_f3(x) # should be constant 0 #> [1] 0 0 0 0 0 0"},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":null,"dir":"Reference","previous_headings":"","what":"Are additional parameters available for a GAM? — has_theta","title":"Are additional parameters available for a GAM? — has_theta","text":"additional parameters available GAM?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Are additional parameters available for a GAM? — has_theta","text":"","code":"has_theta(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Are additional parameters available for a GAM? — has_theta","text":"object R object, either family() object object whose class family() method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Are additional parameters available for a GAM? — has_theta","text":"logical; TRUE additional parameters available, FALSE otherwise.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Are additional parameters available for a GAM? — has_theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"poisson\", seed = 42, scale = 1 / 5) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\", family = nb() ) has_theta(m) #> [1] TRUE p <- theta(m)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Tests for by variable smooths — is_by_smooth","title":"Tests for by variable smooths — is_by_smooth","text":"Functions check smooth -variable one test type -variable smooth factor-smooth continous-smooth interaction.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tests for by variable smooths — is_by_smooth","text":"","code":"is_by_smooth(smooth) is_factor_by_smooth(smooth) is_continuous_by_smooth(smooth) by_variable(smooth) by_level(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tests for by variable smooths — is_by_smooth","text":"smooth object class \"mgcv.smooth\"","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tests for by variable smooths — is_by_smooth","text":"logical vector.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tests for by variable smooths — is_by_smooth","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Is a model term a factor (categorical)? — is_factor_term","title":"Is a model term a factor (categorical)? — is_factor_term","text":"Given name (term label) term model, identify term factor term numeric. useful considering interactions, terms like fac1:fac2 num1:fac1 may requested user. terms type fac1:fac2 function return TRUE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is a model term a factor (categorical)? — is_factor_term","text":"","code":"is_factor_term(object, term, ...) # S3 method for class 'terms' is_factor_term(object, term, ...) # S3 method for class 'gam' is_factor_term(object, term, ...) # S3 method for class 'bam' is_factor_term(object, term, ...) # S3 method for class 'gamm' is_factor_term(object, term, ...) # S3 method for class 'list' is_factor_term(object, term, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is a model term a factor (categorical)? — is_factor_term","text":"object R object method dispatch performed term character; name model term, sense attr(terms(object), \"term.labels\"). Currently checked see term exists model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is a model term a factor (categorical)? — is_factor_term","text":"logical: TRUE variables involved term factors, otherwise FALSE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"Check objects smooths particular type smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"","code":"is_mgcv_smooth(smooth) stop_if_not_mgcv_smooth(smooth) check_is_mgcv_smooth(smooth) is_mrf_smooth(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"smooth R object, typically list","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"Check smooth inherits class \"mgcv.smooth\". stop_if_not_mgcv_smooth() wrapper around is_mgcv_smooth(), useful programming checking supplied object one mgcv's smooths, throwing consistent error . check_is_mgcv_smooth() similar stop_if_not_mgcv_smooth() returns result is_mgcv_smooth() invisibly.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":null,"dir":"Reference","previous_headings":"","what":"Is a model term an offset? — is_offset","title":"Is a model term an offset? — is_offset","text":"Given character vector model terms, checks see , , model offset.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is a model term an offset? — is_offset","text":"","code":"is_offset(terms)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is a model term an offset? — is_offset","text":"terms character vector model terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is a model term an offset? — is_offset","text":"logical vector length terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Is a model term an offset? — is_offset","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is a model term an offset? — is_offset","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\") m <- gam(y ~ s(x0) + s(x1) + offset(x0), data = df, method = \"REML\") nm <- names(model.frame(m)) nm #> [1] \"y\" \"offset(x0)\" \"x0\" \"x1\" is_offset(nm) #> [1] FALSE TRUE FALSE FALSE"},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract link and inverse link functions from models — link","title":"Extract link and inverse link functions from models — link","text":"Returns link inverse estimated model, provides simple way extract functions complex models multiple links, location scale models.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract link and inverse link functions from models — link","text":"","code":"link(object, ...) # S3 method for class 'family' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gam' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'bam' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gamm' link(object, ...) # S3 method for class 'glm' link(object, ...) # S3 method for class 'list' link(object, ...) inv_link(object, ...) # S3 method for class 'family' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gam' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'bam' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gamm' inv_link(object, ...) # S3 method for class 'list' inv_link(object, ...) # S3 method for class 'glm' inv_link(object, ...) extract_link(family, ...) # S3 method for class 'family' extract_link(family, inverse = FALSE, ...) # S3 method for class 'general.family' extract_link(family, parameter, inverse = FALSE, which_eta = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract link and inverse link functions from models — link","text":"object family object fitted model extract family object. Models fitted stats::glm(), mgcv::gam(), mgcv::bam(), mgcv::gamm(), gamm4::gamm4() currently supported. ... arguments passed methods. parameter character; parameter distribution. Usually \"location\" \"scale\" \"shape\" may provided location scale models. options include \"mu\" synonym \"location\", \"sigma\" scale parameter mgcv::gaulss(), \"pi\" zero-inflation term mgcv::ziplss(), \"power\" mgcv::twlss() power parameter, \"xi\", shape parameter mgcv::gevlss(), \"epsilon\" \"skewness\" skewness \"delta\" \"kurtosis\" kurtosis parameter mgcv::shash(), \"phi\" scale parameter mgcv::gammals() & mgcv::twlss(). which_eta numeric; linear predictor extract families mgcv::mvn() mgcv::multinom(). family family object, result call family(). inverse logical; return inverse link function?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract link and inverse link functions from models — link","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract link and inverse link functions from models — link","text":"","code":"load_mgcv() link(gaussian()) #> function (mu) #> mu #> link(nb()) #> function (mu) #> log(mu) #> inv_link(nb()) #> function (eta) #> pmax(exp(eta), .Machine$double.eps) #> dat <- data_sim(\"eg1\", seed = 4234) mod <- gam(list(y ~ s(x0) + s(x1) + s(x2) + s(x3), ~1), data = dat, family = gaulss ) link(mod, parameter = \"scale\") #> function (mu) #> log(1/mu - 0.01) #> inv_link(mod, parameter = \"scale\") #> function (eta) #> 1/(exp(eta) + 0.01) #> ## Works with `family` objects too link(shash(), parameter = \"skewness\") #> function (mu) #> mu #> "},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":null,"dir":"Reference","previous_headings":"","what":"Load mgcv quietly — load_mgcv","title":"Load mgcv quietly — load_mgcv","text":"Simple function loads mgcv package whilst suppressing startup messages prints console.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load mgcv quietly — load_mgcv","text":"","code":"load_mgcv()"},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load mgcv quietly — load_mgcv","text":"Returns logical vectors invisibly, indicating whether package loaded .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the linear prediction matrix of a fitted GAM — lp_matrix","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"lp_matrix() wrapper predict(..., type = \"lpmatrix\") returning linear predictor matrix model training data (data = NULL), user-specified data values supplied via data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"","code":"lp_matrix(model, ...) # S3 method for class 'gam' lp_matrix(model, data = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"model fitted model ... arguments passed methods predict methods including mgcv::predict.gam() mgcv::predict.bam() data data frame values return linear prediction matrix.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"linear prediction matrix returned matrix. object returned class \"lp_matrix\", inherits classes \"matrix\" \"array\". special class allows printing matrix controlled, printing matrix tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"linear prediction matrix \\(\\mathbf{X}_p\\) matrix maps values parameters \\(\\hat{\\mathbf{\\beta}}_p\\) values linear predictor model \\(\\hat{\\eta}_p = \\mathbf{X}_p \\hat{\\mathbf{\\beta}}_p\\). \\(\\mathbf{X}_p\\) model matrix spline covariates replaced values basis functions evaluated respective covariates. Parametric covariates also included.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) # linear prediction matrix for observed data xp <- lp_matrix(m) ## IGNORE_RDIFF_BEGIN xp #> Linear prediction matrix (400 x 37) #> `(Intercept)` `s(x0).1` `s(x0).2` `s(x0).3` `s(x0).4` `s(x0).5` `s(x0).6` #> #> 1 1 0.961 0.227 0.706 -0.135 0.457 -0.146 #> 2 1 0.651 -0.241 0.0684 -0.308 0.394 -0.00994 #> 3 1 -0.385 -0.549 0.0660 -0.204 -0.416 -0.247 #> 4 1 -1.27 0.156 -1.53 0.222 -1.60 0.198 #> 5 1 1.05 0.420 1.11 0.214 0.893 0.0351 #> # i 395 more rows ## IGNORE_RDIFF_END # the object `xp` *is* a matrix class(xp) #> [1] \"lp_matrix\" \"matrix\" \"array\" # but we print like a tibble to avoid spamming the R console # linear predictor matrix for new data set ds <- data_slice(m, x2 = evenly(x2)) xp <- lp_matrix(m, data = ds) ## IGNORE_RDIFF_BEGIN xp #> Linear prediction matrix (100 x 37) #> `(Intercept)` `s(x0).1` `s(x0).2` `s(x0).3` `s(x0).4` `s(x0).5` `s(x0).6` #> #> 1 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 2 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 3 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 4 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 5 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> # i 95 more rows ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/lss_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"General names of LSS parameters for each GAM family — lss_parameters","title":"General names of LSS parameters for each GAM family — lss_parameters","text":"General names LSS parameters GAM family","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lss_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General names of LSS parameters for each GAM family — lss_parameters","text":"","code":"lss_parameters(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"Posterior samples using Gaussian approximation posterior distribution","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"","code":"mh_draws(model, ...) # S3 method for class 'gam' mh_draws( model, n, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. burnin numeric; length initial burn period discard. See mgcv::gam.mh(). thin numeric; retain thin samples. See mgcv::gam.mh(). t_df numeric; degrees freedom static multivariate t proposal. See mgcv::gam.mh(). rw_scale numeric; factor scale posterior covariance matrix generating random walk proposals. See mgcv::gam.mh(). index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":null,"dir":"Reference","previous_headings":"","what":"Concurvity of an estimated GAM — model_concurvity","title":"Concurvity of an estimated GAM — model_concurvity","text":"Concurvity estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Concurvity of an estimated GAM — model_concurvity","text":"","code":"model_concurvity(model, ...) # S3 method for class 'gam' model_concurvity( model, terms = everything(), type = c(\"all\", \"estimate\", \"observed\", \"worst\"), pairwise = FALSE, ... ) concrvity( model, terms = everything(), type = c(\"all\", \"estimate\", \"observed\", \"worst\"), pairwise = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Concurvity of an estimated GAM — model_concurvity","text":"model fitted GAM. Currently objects class \"gam\" supported ... arguents passed methods. terms currently ignored type character; pairwise logical; extract pairwise concurvity model terms?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Concurvity of an estimated GAM — model_concurvity","text":"","code":"## simulate data with concurvity... library(\"tibble\") load_mgcv() set.seed(8) n <- 200 df <- tibble( t = sort(runif(n)), x = gw_f2(t) + rnorm(n) * 3, y = sin(4 * pi * t) + exp(x / 20) + rnorm(n) * 0.3 ) ## fit model m <- gam(y ~ s(t, k = 15) + s(x, k = 15), data = df, method = \"REML\") ## overall concurvity o_conc <- concrvity(m) draw(o_conc) ## pairwise concurvity p_conc <- concrvity(m, pairwise = TRUE) draw(p_conc)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the model constant term — model_constant","title":"Extract the model constant term — model_constant","text":"Extracts model constant term(s), model intercept, fitted model object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the model constant term — model_constant","text":"","code":"model_constant(model, ...) # S3 method for class 'gam' model_constant(model, lp = NULL, ...) # S3 method for class 'gamlss' model_constant(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the model constant term — model_constant","text":"model fitted model coef() method exists. ... arguments passed methods. lp numeric; linear predictors extract constant terms .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract the model constant term — model_constant","text":"","code":"load_mgcv() # simulate a small example df <- data_sim(\"eg1\", seed = 42) # fit the GAM m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # extract the estimate of the constant term model_constant(m) #> [1] 7.495 #> attr(,\"par_names\") #> [1] \"location\" # same as coef(m)[1L] coef(m)[1L] #> (Intercept) #> 7.495"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":null,"dir":"Reference","previous_headings":"","what":"List the variables involved in a model fitted with a formula — model_vars","title":"List the variables involved in a model fitted with a formula — model_vars","text":"List variables involved model fitted formula","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List the variables involved in a model fitted with a formula — model_vars","text":"","code":"model_vars(model, ...) # S3 method for class 'gam' model_vars(model, ...) # Default S3 method model_vars(model, ...) # S3 method for class 'bam' model_vars(model, ...) # S3 method for class 'gamm' model_vars(model, ...) # S3 method for class 'gamm4' model_vars(model, ...) # S3 method for class 'list' model_vars(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List the variables involved in a model fitted with a formula — model_vars","text":"model fitted model object $pred.formula, $terms component \"terms\" attribute ... Arguments passed methods. Currently ignored.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List the variables involved in a model fitted with a formula — model_vars","text":"","code":"load_mgcv() # simulate some Gaussian data df <- data_sim(\"eg1\", n = 50, seed = 2) # fit a GAM with 1 smooth and 1 linear term m1 <- gam(y ~ s(x2, k = 7) + x1, data = df, method = \"REML\") model_vars(m1) #> [1] \"x1\" \"x2\" # fit a lm with two linear terms m2 <- lm(y ~ x2 + x1, data = df) model_vars(m2) #> [1] \"x2\" \"x1\""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":null,"dir":"Reference","previous_headings":"","what":"The Number of linear predictors in model — n_eta","title":"The Number of linear predictors in model — n_eta","text":"Extracts number linear predictors fitted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The Number of linear predictors in model — n_eta","text":"","code":"n_eta(model, ...) # S3 method for class 'gam' n_eta(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The Number of linear predictors in model — n_eta","text":"model fitted model. Currently, models inheriting class \"gam\" supported. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The Number of linear predictors in model — n_eta","text":"integer vector length 1 containing number linear predictors model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"How many smooths in a fitted model — n_smooths","title":"How many smooths in a fitted model — n_smooths","text":"many smooths fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"How many smooths in a fitted model — n_smooths","text":"","code":"n_smooths(object) # Default S3 method n_smooths(object) # S3 method for class 'gam' n_smooths(object) # S3 method for class 'gamm' n_smooths(object) # S3 method for class 'bam' n_smooths(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"How many smooths in a fitted model — n_smooths","text":"object fitted GAM related model. Typically result call mgcv::gam(), mgcv::bam(), mgcv::gamm().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":null,"dir":"Reference","previous_headings":"","what":"Negative binomial parameter theta — nb_theta","title":"Negative binomial parameter theta — nb_theta","text":"Negative binomial parameter theta","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Negative binomial parameter theta — nb_theta","text":"","code":"nb_theta(model) # S3 method for class 'gam' nb_theta(model)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Negative binomial parameter theta — nb_theta","text":"model fitted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Negative binomial parameter theta — nb_theta","text":"numeric vector length 1 containing estimated value theta.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"methods-by-class-","dir":"Reference","previous_headings":"","what":"Methods (by class)","title":"Negative binomial parameter theta — nb_theta","text":"nb_theta(gam): Method class \"gam\"","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Negative binomial parameter theta — nb_theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 500, dist = \"poisson\", scale = 0.1, seed = 6) m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = nb, data = df, method = \"REML\") ## IGNORE_RDIFF_BEGIN nb_theta(m) #> [1] 239333.8 ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial residuals in nested form — nested_partial_residuals","title":"Partial residuals in nested form — nested_partial_residuals","text":"Computes partial residuals smooth terms, formats long/tidy format, nests partial_residual column result nested data frame one row per smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial residuals in nested form — nested_partial_residuals","text":"","code":"nested_partial_residuals(object, terms = NULL, data = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial residuals in nested form — nested_partial_residuals","text":"object fitted GAM model terms vector terms include partial residuals . Passed argument terms mgcv::predict.gam()]. data optional data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partial residuals in nested form — nested_partial_residuals","text":"nested tibble (data frame) one row per smooth term. Contains two columns: smooth - label indicating smooth term partial_residual - list column containing tibble (data frame) 1 column partial_residual containing requested partial residuals indicated smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Values for rug plot in nested form — nested_rug_values","title":"Values for rug plot in nested form — nested_rug_values","text":"Extracts original data smooth terms, formats long/tidy format, nests data column(s) result nested data frame one row per smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Values for rug plot in nested form — nested_rug_values","text":"","code":"nested_rug_values(object, terms = NULL, data = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Values for rug plot in nested form — nested_rug_values","text":"object fitted GAM model terms vector terms include original data . Passed argument terms mgcv::predict.gam()]. data optional data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Values for rug plot in nested form — nested_rug_values","text":"nested tibble (data frame) one row per smooth term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the null deviance of a fitted model — null_deviance","title":"Extract the null deviance of a fitted model — null_deviance","text":"Extract null deviance fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the null deviance of a fitted model — null_deviance","text":"","code":"null_deviance(model, ...) # Default S3 method null_deviance(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the null deviance of a fitted model — null_deviance","text":"model fitted model ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot of fitted against observed response values — observed_fitted_plot","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"Plot fitted observed response values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"","code":"observed_fitted_plot( model, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, point_col = \"black\", point_alpha = 1 )"},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"model fitted model. Currently class \"gam\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). point_col colour used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. point_alpha numeric; alpha transparency points plots.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":null,"dir":"Reference","previous_headings":"","what":"Provides an overview of a model and the terms in that model — overview","title":"Provides an overview of a model and the terms in that model — overview","text":"Provides overview model terms model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Provides an overview of a model and the terms in that model — overview","text":"","code":"overview(model, ...) # S3 method for class 'gam' overview( model, parametric = TRUE, random_effects = TRUE, dispersion = NULL, frequentist = FALSE, accuracy = 0.001, stars = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Provides an overview of a model and the terms in that model — overview","text":"model fitted model object overview. ... arguments passed methods. parametric logical; include model parametric terms overview? random_effects tests fully penalized smooth terms (zero-dimensional null space, e.g. random effects) computationally expensive large data sets producing p values can take long time. random_effects = FALSE, tests expensive terms skipped. dispersion numeric; known value dispersion parameter. default NULL implies estimated value default value (1 Poisson distribution example) specified used instead. frequentist logical; default Bayesian estimated covariance matrix parameter estimates used calculate p values parametric terms. frequentist = FALSE, frequentist covariance matrix parameter estimates used. accuracy numeric; accuracy report p values, p values value displayed \"< accuracy\". stars logical; significance stars added output?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Provides an overview of a model and the terms in that model — overview","text":"","code":"load_mgcv() df <- data_sim(n = 400, seed = 2) m <- gam(y ~ x3 + s(x0) + s(x1, bs = \"bs\") + s(x2, bs = \"ts\"), data = df, method = \"REML\" ) overview(m) #> #> Generalized Additive Model with 4 terms #> #> term type k edf statistic p.value #> #> 1 x3 parametric NA 1 4.28 0.03926 #> 2 s(x0) TPRS 9 3.02 6.25 < 0.001 #> 3 s(x1) B spline 9 2.81 71.0 < 0.001 #> 4 s(x2) TPRS (shrink) 9 7.91 83.8 < 0.001"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimated values for parametric model terms — parametric_effects","title":"Estimated values for parametric model terms — parametric_effects","text":"Estimated values parametric model terms","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimated values for parametric model terms — parametric_effects","text":"","code":"parametric_effects(object, ...) # S3 method for class 'gam' parametric_effects( object, terms = NULL, data = NULL, unconditional = FALSE, unnest = TRUE, ci_level = 0.95, envir = environment(formula(object)), transform = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimated values for parametric model terms — parametric_effects","text":"object fitted model object. ... arguments passed methods. terms character; model parametric terms drawn? Default NULL plot parametric terms can drawn. data optional data frame may may used? FIXME! unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. unnest logical; unnest parametric effect objects? ci_level numeric; coverage required confidence interval. Currently ignored. envir environment look data within. transform logical; TRUE, parametric effect plotted transformed scale result effect straight line. FALSE, effect plotted raw data (.e. log10(x), poly(z), x-axis plot x z respectively.)","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of any parametric terms in a GAM — parametric_terms","title":"Names of any parametric terms in a GAM — parametric_terms","text":"Names parametric terms GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of any parametric terms in a GAM — parametric_terms","text":"","code":"parametric_terms(model, ...) # Default S3 method parametric_terms(model, ...) # S3 method for class 'gam' parametric_terms(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of any parametric terms in a GAM — parametric_terms","text":"model fitted model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"Partial derivatives estimated multivariate smooths via finite differences","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"","code":"partial_derivatives(object, ...) # Default S3 method partial_derivatives(object, ...) # S3 method for class 'gamm' partial_derivatives(object, ...) # S3 method for class 'gam' partial_derivatives( object, select = NULL, term = deprecated(), focal = NULL, data = newdata, order = 1L, type = c(\"forward\", \"backward\", \"central\"), n = 100, eps = 1e-07, interval = c(\"confidence\", \"simultaneous\"), n_sim = 10000, level = 0.95, unconditional = FALSE, frequentist = FALSE, offset = NULL, ncores = 1, partial_match = FALSE, seed = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"object R object compute derivatives . ... arguments passed methods. select character; vector one smooth terms derivatives required. missing, derivatives smooth terms returned. Can partial match smooth term; see argument partial_match . term Use select instead. focal character; name focal variable. partial derivative estimated smooth respect variable returned. variables involved smooth held constant. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". n numeric; number points evaluate derivative . eps numeric; finite difference. interval character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. unconditional logical; use smoothness selection-corrected Bayesian covariance matrix? frequentist logical; use frequentist covariance matrix? offset numeric; value use offset term ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; smooths selected partial matches term? TRUE, term can single string match . seed numeric; RNG seed use. newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"tibble, currently following variables: .smooth: smooth row refers , .partial_deriv: estimated partial derivative, .se: standard error estimated partial derivative, .crit: critical value derivative ± (crit * se) gives upper lower bounds requested confidence simultaneous interval (given level), .lower_ci: lower bound confidence simultaneous interval, .upper_ci: upper bound confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"partial_derivatives() ignore random effect smooths encounters object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"","code":"library(\"ggplot2\") library(\"patchwork\") load_mgcv() df <- data_sim(\"eg2\", n = 2000, dist = \"normal\", scale = 0.5, seed = 42) # fit the GAM (note: for execution time reasons, k is set articifially low) m <- gam(y ~ te(x, z, k = c(5, 5)), data = df, method = \"REML\") # data slice through te(x,z) holding z == 0.4 ds <- data_slice(m, x = evenly(x, n = 100), z = 0.4) # evaluate te(x,z) at values of x & z sm <- smooth_estimates(m, select = \"te(x,z)\", data = ds) |> add_confint() # partial derivatives pd_x <- partial_derivatives(m, data = ds, type = \"central\", focal = \"x\") # draw te(x,z) p1 <- draw(m, rug = FALSE) & geom_hline(yintercept = 0.4, linewidth = 1) p1 # draw te(x,z) along slice cap <- expression(z == 0.4) p2 <- sm |> ggplot(aes(x = x, y = .estimate)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( x = \"x\", y = \"Partial effect\", title = \"te(x,z)\", caption = cap ) p2 # draw partial derivs p3 <- pd_x |> draw() + labs(caption = cap) p3 # draw all three panels p1 + p2 + p3 + plot_layout(ncol = 3)"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial residuals — partial_residuals","title":"Partial residuals — partial_residuals","text":"Partial residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial residuals — partial_residuals","text":"","code":"partial_residuals(object, ...) # S3 method for class 'gam' partial_residuals(object, select = NULL, partial_match = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial residuals — partial_residuals","text":"object R object, typically model. Currently objects class \"gam\" (inherit class) supported. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partial residuals — partial_residuals","text":"","code":"## load mgcv load_mgcv() ## example data - Gu & Wabha four term model df <- data_sim(\"eg1\", n = 400, seed = 42) ## fit the model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## extract partial residuals partial_residuals(m) #> # A tibble: 400 x 4 #> `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 -0.3527 -1.321 -2.180 0.6077 #> 2 -0.1233 0.5013 -1.775 0.9613 #> 3 1.429 1.515 5.609 0.9910 #> 4 -1.110 -1.700 -0.8882 -0.6593 #> 5 -2.120 -0.01378 -2.733 -3.012 #> 6 1.254 -1.224 3.915 0.07275 #> 7 -0.5220 3.023 -0.8197 -1.019 #> 8 1.398 0.2184 7.055 1.897 #> 9 2.797 0.4969 7.329 2.498 #> 10 1.151 -0.2267 0.7202 0.7437 #> # i 390 more rows ## and for a select term partial_residuals(m, select = \"s(x2)\") #> # A tibble: 400 x 1 #> `s(x2)` #> #> 1 -2.180 #> 2 -1.775 #> 3 5.609 #> 4 -0.8882 #> 5 -2.733 #> 6 3.915 #> 7 -0.8197 #> 8 7.055 #> 9 7.329 #> 10 0.7202 #> # i 390 more rows ## or with partial matching partial_residuals(m, select = \"x\", partial_match = TRUE) # returns all #> # A tibble: 400 x 4 #> `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 -0.3527 -1.321 -2.180 0.6077 #> 2 -0.1233 0.5013 -1.775 0.9613 #> 3 1.429 1.515 5.609 0.9910 #> 4 -1.110 -1.700 -0.8882 -0.6593 #> 5 -2.120 -0.01378 -2.733 -3.012 #> 6 1.254 -1.224 3.915 0.07275 #> 7 -0.5220 3.023 -0.8197 -1.019 #> 8 1.398 0.2184 7.055 1.897 #> 9 2.797 0.4969 7.329 2.498 #> 10 1.151 -0.2267 0.7202 0.7437 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract and tidy penalty matrices — penalty","title":"Extract and tidy penalty matrices — penalty","text":"Extract tidy penalty matrices","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract and tidy penalty matrices — penalty","text":"","code":"penalty(object, ...) # Default S3 method penalty( object, rescale = FALSE, data, knots = NULL, constraints = FALSE, diagonalize = FALSE, ... ) # S3 method for class 'gam' penalty( object, select = NULL, smooth = deprecated(), rescale = FALSE, partial_match = FALSE, ... ) # S3 method for class 'mgcv.smooth' penalty(object, rescale = FALSE, ...) # S3 method for class 'tensor.smooth' penalty(object, margins = FALSE, ...) # S3 method for class 't2.smooth' penalty(object, margins = FALSE, ...) # S3 method for class 're.smooth.spec' penalty(object, data, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract and tidy penalty matrices — penalty","text":"object fitted GAM smooth. ... additional arguments passed methods. rescale logical; default, mgcv scale penalty matrix better performance mgcv::gamm(). rescale TRUE, scaling undone put penalty matrix back original scale. data data frame; data frame values terms mentioned smooth specification. knots list data frame named components containing knots locations. Names must match covariates basis required. See mgcv::smoothCon(). constraints logical; identifiability constraints applied smooth basis. See argument absorb.cons mgcv::smoothCon(). diagonalize logical; TRUE, reparameterises smooth associated penalty identity matrix. effect turning last diagonal elements penalty zero, highlights penalty null space. select character, logical, numeric; smooths extract penalties . NULL, default, penalties model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . margins logical; extract penalty matrices tensor product marginal smooths tensor product?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract and tidy penalty matrices — penalty","text":"'tibble' (data frame) class penalty_df inheriting tbl_df, following components: .smooth - character; label mgcv uses refer smooth, .type - character; type smooth, .penalty - character; label specific penalty. smooths multiple penalty matrices, penalty component identifies particular penalty matrix uses labelling mgcv uses internally, .row - character; label form fn n integer nth basis function, referencing columns penalty matrix, .col - character; label form fn n integer nth basis function, referencing columns penalty matrix, .value - double; value penalty matrix combination row col,","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extract and tidy penalty matrices — penalty","text":"print() method uses base::zapsmall() turn small numbers 0s display purposes ; underlying values penalty matrix matrices changed. smooths subject eigendecomposition (e.g. default thin plate regression splines, bs = \"tp\"), signs eigenvectors defined can expect differences across systems penalties smooths system-, OS-, CPU architecture- specific.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract and tidy penalty matrices — penalty","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract and tidy penalty matrices — penalty","text":"","code":"load_mgcv() dat <- data_sim(\"eg4\", n = 400, seed = 42) m <- gam( y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, by = fac, bs = \"cr\"), data = dat, method = \"REML\" ) # penalties for all smooths penalty(m) #> # A tibble: 405 x 6 #> .smooth .type .penalty .row .col .value #> #> 1 s(x0) CRS s(x0) F1 F1 0.783 #> 2 s(x0) CRS s(x0) F1 F2 -0.635 #> 3 s(x0) CRS s(x0) F1 F3 0.265 #> 4 s(x0) CRS s(x0) F1 F4 -0.0203 #> 5 s(x0) CRS s(x0) F1 F5 0.0441 #> 6 s(x0) CRS s(x0) F1 F6 0.0378 #> 7 s(x0) CRS s(x0) F1 F7 0.0482 #> 8 s(x0) CRS s(x0) F1 F8 0.0216 #> 9 s(x0) CRS s(x0) F1 F9 0.0247 #> 10 s(x0) CRS s(x0) F2 F1 -0.635 #> # i 395 more rows # for a specific smooth penalty(m, select = \"s(x2):fac1\") #> # A tibble: 81 x 6 #> .smooth .type .penalty .row .col .value #> #> 1 s(x2):fac1 CRS s(x2):fac1 F1 F1 1.66 #> 2 s(x2):fac1 CRS s(x2):fac1 F1 F2 -0.755 #> 3 s(x2):fac1 CRS s(x2):fac1 F1 F3 0.430 #> 4 s(x2):fac1 CRS s(x2):fac1 F1 F4 0.0846 #> 5 s(x2):fac1 CRS s(x2):fac1 F1 F5 0.192 #> 6 s(x2):fac1 CRS s(x2):fac1 F1 F6 0.152 #> 7 s(x2):fac1 CRS s(x2):fac1 F1 F7 0.188 #> 8 s(x2):fac1 CRS s(x2):fac1 F1 F8 0.164 #> 9 s(x2):fac1 CRS s(x2):fac1 F1 F9 0.0597 #> 10 s(x2):fac1 CRS s(x2):fac1 F2 F1 -0.755 #> # i 71 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"Low-level Functions generate draws posterior distribution model coefficients Generate posterior draws fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"","code":"post_draws(model, ...) # Default S3 method post_draws( model, n, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), mu = NULL, sigma = NULL, n_cores = 1L, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, frequentist = FALSE, unconditional = FALSE, parametrized = TRUE, mvn_method = c(\"mvnfast\", \"mgcv\"), draws = NULL, seed = NULL, ... ) generate_draws(model, ...) # S3 method for class 'gam' generate_draws( model, n, method = c(\"gaussian\", \"mh\", \"inla\"), mu = NULL, sigma = NULL, n_cores = 1L, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, frequentist = FALSE, unconditional = FALSE, mvn_method = c(\"mvnfast\", \"mgcv\"), seed = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. method character; algorithm use sample posterior. Currently implemented methods : \"gaussian\" \"mh\". \"gaussian\" calls gaussian_draws() uses Gaussian approximation posterior distribution. \"mh\" uses simple Metropolis Hasting sampler alternates static proposals based Gaussian approximation posterior, random walk proposals. Note, setting t_df low value result heavier-tailed statistic proposals. See mgcv::gam.mh() details. mu numeric; user-supplied mean vector (vector model coefficients). Currently ignored. sigma matrix; user-supplied covariance matrix mu. Currently ignored. n_cores integer; number CPU cores use generating multivariate normal distributed random values. used mvn_method = \"mvnfast\" method = \"gaussian\". burnin numeric; length initial burn period discard. See mgcv::gam.mh(). thin numeric; retain thin samples. See mgcv::gam.mh(). t_df numeric; degrees freedom static multivariate t proposal. See mgcv::gam.mh(). rw_scale numeric; factor scale posterior covariance matrix generating random walk proposals. See mgcv::gam.mh(). index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model. frequentist logical; TRUE, frequentist covariance matrix parameter estimates used. FALSE, Bayesian posterior covariance matrix parameters used. See mgcv::vcov.gam(). unconditional logical; TRUE Bayesian smoothing parameter uncertainty corrected covariance matrix used, available model. See mgcv::vcov.gam(). parametrized logical; use parametrized coefficients covariance matrix, respect linear inequality constraints model. scam::scam() model fits. mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. draws matrix; user supplied posterior draws used method = \"user\". seed numeric; random seed use. NULL, random seed generated without affecting current state R's RNG.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_link_funs.html","id":null,"dir":"Reference","previous_headings":"","what":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","title":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","text":"list transformation functions named LSS parameters GAMLSS","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_link_funs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","text":"","code":"post_link_funs( location = identity_fun, scale = identity_fun, shape = identity_fun, skewness = identity_fun, kurtosis = identity_fun, power = identity_fun, pi = identity_fun )"},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw samples from the posterior distribution of an estimated model — posterior_samples","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Draw samples posterior distribution estimated model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"","code":"posterior_samples(model, ...) # S3 method for class 'gam' posterior_samples( model, n = 1, data = newdata, seed = NULL, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n_cores = 1, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, freq = FALSE, unconditional = FALSE, weights = NULL, draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. weights numeric; vector prior weights. data null defaults object[[\"prior.weights\"]], otherwise vector ones. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Models offset terms supplied via offset argument mgcv::gam() etc. ignored mgcv::predict.gam(). , kind offset term also ignored posterior_samples(). Offset terms included model formula supplied mgcv::gam() etc ignored posterior samples produced reflect offset term values. side effect requiring new data values provided posterior_samples() via data argument must include offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Wood, S.N., (2020). Simplified integrated nested Laplace approximation. Biometrika 107, 223–230. doi:10.1093/biomet/asz044","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw new response values from the conditional distribution of the response — predicted_samples","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"Predicted values response (new response data) drawn fitted model, created via simulate() (e.g. simulate.gam()) returned tidy, long, format. predicted values include uncertainty estimated model; simply draws conditional distribution response.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"","code":"predicted_samples(model, ...) # S3 method for class 'gam' predicted_samples( model, n = 1, data = newdata, seed = NULL, weights = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. weights numeric; vector prior weights. data null defaults object[[\"prior.weights\"]], otherwise vector ones. newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") predicted_samples(m, n = 5, seed = 42) #> # A tibble: 5,000 x 3 #> .row .draw .response #> #> 1 1 1 8.93 #> 2 2 1 4.23 #> 3 3 1 7.71 #> 4 4 1 8.51 #> 5 5 1 10.1 #> 6 6 1 8.20 #> 7 7 1 8.95 #> 8 8 1 7.20 #> 9 9 1 18.1 #> 10 10 1 12.7 #> # i 4,990 more rows ## Can pass arguments to predict.gam() newd <- data.frame( x0 = runif(10), x1 = runif(10), x2 = runif(10), x3 = runif(10) ) ## Exclude s(x2) predicted_samples(m, n = 5, newd, exclude = \"s(x2)\", seed = 25) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 9.42 #> 2 2 1 6.97 #> 3 3 1 8.10 #> 4 4 1 9.95 #> 5 5 1 6.75 #> 6 6 1 10.3 #> 7 7 1 10.8 #> 8 8 1 10.5 #> 9 9 1 8.43 #> 10 10 1 12.2 #> # i 40 more rows ## Exclude s(x1) predicted_samples(m, n = 5, newd, exclude = \"s(x1)\", seed = 25) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 6.05 #> 2 2 1 5.28 #> 3 3 1 5.96 #> 4 4 1 13.7 #> 5 5 1 4.36 #> 6 6 1 5.11 #> 7 7 1 12.5 #> 8 8 1 5.66 #> 9 9 1 12.6 #> 10 10 1 8.38 #> # i 40 more rows ## Select which terms --- result should be the same as previous ## but note that we have to include any parametric terms, including the ## constant term predicted_samples(m, n = 5, newd, seed = 25, terms = c(\"Intercept\", \"s(x0)\", \"s(x2)\", \"s(x3)\") ) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 -1.94 #> 2 2 1 -2.71 #> 3 3 1 -2.03 #> 4 4 1 5.73 #> 5 5 1 -3.63 #> 6 6 1 -2.87 #> 7 7 1 4.48 #> 8 8 1 -2.33 #> 9 9 1 4.65 #> 10 10 1 0.395 #> # i 40 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Quantile-quantile plot of model residuals — qq_plot","title":"Quantile-quantile plot of model residuals — qq_plot","text":"Quantile-quantile plots (QQ-plots) GAMs using reference quantiles Augustin et al (2012).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quantile-quantile plot of model residuals — qq_plot","text":"","code":"qq_plot(model, ...) # Default S3 method qq_plot(model, ...) # S3 method for class 'gam' qq_plot( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), type = c(\"deviance\", \"response\", \"pearson\"), n_uniform = 10, n_simulate = 50, seed = NULL, level = 0.9, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'glm' qq_plot(model, ...) # S3 method for class 'lm' qq_plot(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quantile-quantile plot of model residuals — qq_plot","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed ot methods. method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF available family used model fitting (`\"uniform\"“). Note method = \"direct\" deprecated favour method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"uniform\"). n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\"). seed numeric; random number seed use method = \"simulate\" method = \"uniform\". level numeric; coverage level reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ci_col fill colour reference interval method = \"simulate\". ci_alpha alpha transparency reference interval method = \"simulate\". point_col colour points QQ plot. point_alpha alpha transparency points QQ plot. line_col colour used draw reference line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Quantile-quantile plot of model residuals — qq_plot","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Quantile-quantile plot of model residuals — qq_plot","text":"underlying methodology used method \"simulate\" \"uniform\" described Augustin et al (2012): Augustin, N.H., Sauleau, E.-., Wood, S.N., (2012) quantile quantile plots generalized linear models. Computational Statatistics Data Analysis 56, 2404-2409 doi:10.1016/j.csda.2012.01.026 .","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quantile-quantile plot of model residuals — qq_plot","text":"","code":"load_mgcv() ## simulate binomial data... dat <- data_sim(\"eg1\", n = 200, dist = \"binary\", scale = .33, seed = 0) p <- binomial()$linkinv(dat$f) # binomial p n <- sample(c(1, 3), 200, replace = TRUE) # binomial n dat <- transform(dat, y = rbinom(n, n, p), n = n) m <- gam(y / n ~ s(x0) + s(x1) + s(x2) + s(x3), family = binomial, data = dat, weights = n, method = \"REML\" ) ## Q-Q plot; default using direct randomization of uniform quantiles qq_plot(m) ## Alternatively use simulate new data from the model, which ## allows construction of reference intervals for the Q-Q plot qq_plot(m, method = \"simulate\", seed = 42, point_col = \"steelblue\", point_alpha = 0.4 ) ## ... or use the usual normality assumption qq_plot(m, method = \"normal\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the reference or specific level of a factor — ref_level","title":"Return the reference or specific level of a factor — ref_level","text":"Extracts reference specific level supplied factor, returning factor levels one supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the reference or specific level of a factor — ref_level","text":"","code":"ref_level(fct) level(fct, level)"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the reference or specific level of a factor — ref_level","text":"fct factor; factor reference specific level extracted. level character; specific level extract case level().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the reference or specific level of a factor — ref_level","text":"length 1 factor levels supplied factor fct.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Return the reference or specific level of a factor — ref_level","text":"","code":"f <- factor(sample(letters[1:5], 100, replace = TRUE)) # the reference level ref_level(f) #> [1] a #> Levels: a b c d e # a specific level level(f, level = \"b\") #> [1] b #> Levels: a b c d e # note that the levels will always match the input factor identical(levels(f), levels(ref_level(f))) #> [1] TRUE identical(levels(f), levels(level(f, \"c\"))) #> [1] TRUE"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_sims.html","id":null,"dir":"Reference","previous_headings":"","what":"Reference simulation data — ref_sims","title":"Reference simulation data — ref_sims","text":"set reference objects testing data_sim().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_sims.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reference simulation data — ref_sims","text":"named list simulated data sets created data_sim().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"Reorder random factor smooth terms place factor last","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"","code":"reorder_fs_smooth_terms(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"smooth mgcv smooth object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"tensor product smooth 3 terms contains 2d marginal smooth, get nicer output smooth_estimates() hence nicer plot draw.smooth_estimates() method reorder terms smooth vary terms 2d marginal first, terms vary slowly generate data evaluate smooth . results automatically generated data focuses (first one) 2d marginal smooth, end result smooth_estimates() shows 2d smooth changes terms involved smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"","code":"reorder_tensor_smooth_terms(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"smooth mgcv smooth object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Repeat the first level of a factor n times — rep_first_factor_value","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"Function repeat first level factor n times return vector factor original levels intact","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"","code":"rep_first_factor_value(f, n)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"f factor n numeric; number times repeat first level f","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"factor length n levels f, whose elements first level f.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Histogram of model residuals — residuals_hist_plot","title":"Histogram of model residuals — residuals_hist_plot","text":"Histogram model residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Histogram of model residuals — residuals_hist_plot","text":"","code":"residuals_hist_plot( model, type = c(\"deviance\", \"pearson\", \"response\"), n_bins = c(\"sturges\", \"scott\", \"fd\"), ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Histogram of model residuals — residuals_hist_plot","text":"model fitted model. Currently class \"gam\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_bins character numeric; either number bins string indicating calculate number bins. ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot of residuals versus linear predictor values — residuals_linpred_plot","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"Plot residuals versus linear predictor values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"","code":"residuals_linpred_plot( model, type = c(\"deviance\", \"pearson\", \"response\"), ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, point_col = \"black\", point_alpha = 1, line_col = \"red\" )"},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"model fitted model. Currently class \"gam\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). point_col colour used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. point_alpha numeric; alpha transparency points plots. line_col colour specification 1:1 line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Derivatives on the response scale from an estimated GAM — response_derivatives","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"Derivatives response scale estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"","code":"response_derivatives(object, ...) # Default S3 method response_derivatives(object, ...) # S3 method for class 'gamm' response_derivatives(object, ...) # S3 method for class 'gam' response_derivatives( object, focal = NULL, data = NULL, order = 1L, type = c(\"forward\", \"backward\", \"central\"), scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n = 100, eps = 1e-07, n_sim = 10000, level = 0.95, seed = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"object R object compute derivatives . ... arguments passed methods fitted_samples() focal character; name focal variable. response derivative response respect variable returned. variables involved model held constant values. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". scale character; derivative estimated response linear predictor (link) scale? One \"response\" (default), \"linear predictor\". method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sample alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n numeric; number points evaluate derivative (data supplied). eps numeric; finite difference. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; coverage level credible interval. default 0.95 95% interval. seed numeric; random seed simulations. mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"tibble, currently following variables: .row: integer, indexing row data row output represents .focal: name variable partial derivative evaluated, .derivative: estimated partial derivative, .lower_ci: lower bound confidence simultaneous interval, .upper_ci: upper bound confidence simultaneous interval, additional columns containing covariate values derivative evaluated.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"","code":"library(\"ggplot2\") library(\"patchwork\") load_mgcv() df <- data_sim(\"eg1\", dist = \"negbin\", scale = 0.25, seed = 42) # fit the GAM (note: for execution time reasons using bam()) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, family = nb(), method = \"fREML\" ) # data slice through data along x2 - all other covariates will be set to # typical values (value closest to median) ds <- data_slice(m, x2 = evenly(x2, n = 100)) # fitted values along x2 fv <- fitted_values(m, data = ds) # response derivatives - ideally n_sim = >10000 y_d <- response_derivatives(m, data = ds, type = \"central\", focal = \"x2\", eps = 0.01, seed = 21, n_sim = 1000 ) # draw fitted values along x2 p1 <- fv |> ggplot(aes(x = x2, y = .fitted)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, y = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Estimated count as a function of x2\", y = \"Estimated count\" ) # draw response derivatives p2 <- y_d |> ggplot(aes(x = x2, y = .derivative)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Estimated 1st derivative of estimated count\", y = \"First derivative\" ) # draw both panels p1 + p2 + plot_layout(nrow = 2)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":null,"dir":"Reference","previous_headings":"","what":"Rootograms to assess goodness of model fit — rootogram","title":"Rootograms to assess goodness of model fit — rootogram","text":"rootogram model diagnostic tool assesses goodness fit statistical model. observed values response compared expected fitted model. discrete, count responses, frequency count (0, 1, 2, etc) observed data expected conditional distribution response implied model compared. continuous variables, observed expected frequencies obtained grouping data bins. rootogram drawn using ggplot2::ggplot() graphics. design closely follows Kleiber & Zeileis (2016).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rootograms to assess goodness of model fit — rootogram","text":"","code":"rootogram(object, ...) # S3 method for class 'gam' rootogram(object, max_count = NULL, breaks = \"Sturges\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rootograms to assess goodness of model fit — rootogram","text":"object R object ... arguments passed methods max_count integer; largest count consider breaks continuous responses, group response. Can anything acceptable breaks argument graphics::hist.default()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Rootograms to assess goodness of model fit — rootogram","text":"Kleiber, C., Zeileis, ., (2016) Visualizing Count Data Regressions Using Rootograms. . Stat. 70, 296–303. doi:10.1080/00031305.2016.1173590","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rootograms to assess goodness of model fit — rootogram","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 1000, dist = \"poisson\", scale = 0.1, seed = 6) # A poisson example m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = poisson(), data = df, method = \"REML\") rg <- rootogram(m) rg #> # A tibble: 21 x 3 #> .bin .observed .fitted #> #> 1 0 113 116.640 #> 2 1 236 227.869 #> 3 2 230 239.168 #> 4 3 200 181.679 #> 5 4 94 113.432 #> 6 5 68 62.4881 #> 7 6 27 31.6795 #> 8 7 22 15.1323 #> 9 8 4 6.88637 #> 10 9 3 2.99628 #> # i 11 more rows draw(rg) # plot the rootogram # A Gaussian example df <- data_sim(\"eg1\", dist = \"normal\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") draw(rootogram(m, breaks = \"FD\"), type = \"suspended\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"Creates sequence n evenly-spaced values range min(x) – max(x), minimum maximum adjusted always contained within range x x may shifted forwards backwards amount related eps. particularly useful computing derivatives via finite differences without adjustment may predicting values outside range data hence conmstraints penalty.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"","code":"seq_min_max_eps(x, n, order, type = c(\"forward\", \"backward\", \"central\"), eps)"},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"x numeric; vector evenly-spaced values returned n numeric; number evenly-spaced values return order integer; order derivative. Either 1 2 first second order derivatives type character; type finite difference used. One \"forward\", \"backward\", \"central\" eps numeric; finite difference","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"numeric vector length n.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Shift numeric values in a data frame by an amount eps — shift_values","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"Shift numeric values data frame amount eps","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"","code":"shift_values(df, h, i, FUN = `+`, focal = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"df data frame tibble. h numeric; amount shift values df . logical; vector indexing columns df included shift. FUN function; function applut shift. Typically + -. focal character; focal variable computing partial derivatives. allows shifting focal variable eps.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate from the posterior distribution of a GAM — simulate.gam","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"Simulations posterior distribution fitted GAM model involve computing predicted values observation data simulated data required, generating random draws probability distribution used fitting model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"","code":"# S3 method for class 'gam' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL ) # S3 method for class 'gamm' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL ) # S3 method for class 'scam' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"object fitted GAM, typically result call mgcv::gam` mgcv::gamm(). nsim numeric; number posterior simulations return. seed numeric; random seed simulations. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used newdata, available object. weights numeric; vector prior weights. newdata null defaults object[[\"prior.weights\"]], otherwise vector ones. ... arguments passed methods. simulate.gam() simulate.scam() pass ... predict.gam(). can pass additional arguments terms, exclude, select model terms included predictions. may useful, example, excluding effects random effect terms. newdata Deprecated. Use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"(Currently) matrix nsim columns.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"simulate.gam() function, family component fitted model must contain, updateable contain, required random number generator. See mgcv::fix.family.rd().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") sims <- simulate(m1, nsim = 5, seed = 42) head(sims) #> [,1] [,2] [,3] [,4] [,5] #> [1,] 11.445470 11.374304 10.098681 7.264881 8.796630 #> [2,] 6.510912 5.909584 9.057362 7.698084 11.444781 #> [3,] 3.837995 3.230610 3.550240 3.759380 4.774581 #> [4,] 12.361830 11.209226 10.714215 11.861957 10.746417 #> [5,] 14.851461 12.911440 11.356984 15.783913 15.106270 #> [6,] 5.921276 4.158963 5.520856 7.973614 9.654888"},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":null,"dir":"Reference","previous_headings":"","what":"Lead-210 age-depth measurements for Small Water — smallAges","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"dataset containing lead-210 based age depth measurements SMALL1 core Small Water.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"data frame 12 rows 7 variables.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"Simpson, G.L. (Unpublished data).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"variables follows: Depth Drymass Date Age Error SedAccRate SedPerCentChange","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"Returns vector indices parametric terms represent supplied smooth. Useful extracting model coefficients columns covariance matrix.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"","code":"smooth_coef_indices(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"smooth object inherits class mgcv.smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"numeric vector indices.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficients for a particular smooth — smooth_coefs","title":"Coefficients for a particular smooth — smooth_coefs","text":"Returns vector model coefficients parametric terms represent supplied smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficients for a particular smooth — smooth_coefs","text":"","code":"smooth_coefs(object, ...) # S3 method for class 'gam' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'bam' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'gamm' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'gamm4' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'list' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'mgcv.smooth' smooth_coefs(object, model, ...) # S3 method for class 'scam' smooth_coefs(object, select, term = deprecated(), ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficients for a particular smooth — smooth_coefs","text":"object fitted GAM(M) object, , \"mgcv.smooth\" method, object inherits class mgcv.smooth. ... arguments passed methods. select character; label smooth whose coefficients returned. term Use select instead. model fitted GAM(M) object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficients for a particular smooth — smooth_coefs","text":"numeric vector model coefficients.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficients for a particular smooth — smooth_coefs","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficients for a particular smooth — smooth_coefs","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## IGNORE_RDIFF_BEGIN smooth_coefs(m, select = \"s(x2)\") #> s(x2).1 s(x2).2 s(x2).3 s(x2).4 s(x2).5 s(x2).6 s(x2).7 s(x2).8 #> -6.533373 9.694277 2.194078 -1.967280 -2.374874 1.207638 -1.572586 9.269744 #> s(x2).9 #> 5.622738 ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate regular data over the covariates of a smooth — smooth_data","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"Generate regular data covariates smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"","code":"smooth_data( model, id, n = 100, n_2d = NULL, n_3d = NULL, n_4d = NULL, offset = NULL, include_all = FALSE, var_order = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"model fitted model id number ID smooth within model process. n numeric; number new observations generate. n_2d numeric; number new observations generate second dimension 2D smooth. Currently ignored. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. offset numeric; value model offset use. include_all logical; include covariates involved smooth? FALSE, covariates involved smooth included returned data frame. TRUE, representative value included covariates model actually used smooth. can useful want pass returned data frame mgcv::PredictMat(). var_order character; order terms smooth processed. useful tensor products least one 2d marginal smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 42) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) # generate data over range of x1 for smooth s(x1) smooth_data(m, id = 2) #> # A tibble: 100 x 1 #> x1 #> #> 1 0.0004050 #> 2 0.01046 #> 3 0.02052 #> 4 0.03057 #> 5 0.04063 #> 6 0.05069 #> 7 0.06074 #> 8 0.07080 #> 9 0.08086 #> 10 0.09091 #> # i 90 more rows # generate data over range of x1 for smooth s(x1), with typical value for # other covariates in the model smooth_data(m, id = 2, include_all = TRUE) #> # A tibble: 100 x 4 #> x1 x0 x2 x3 #> #> 1 0.0004050 0.4883 0.4708 0.4879 #> 2 0.01046 0.4883 0.4708 0.4879 #> 3 0.02052 0.4883 0.4708 0.4879 #> 4 0.03057 0.4883 0.4708 0.4879 #> 5 0.04063 0.4883 0.4708 0.4879 #> 6 0.05069 0.4883 0.4708 0.4879 #> 7 0.06074 0.4883 0.4708 0.4879 #> 8 0.07080 0.4883 0.4708 0.4879 #> 9 0.08086 0.4883 0.4708 0.4879 #> 10 0.09091 0.4883 0.4708 0.4879 #> # i 90 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":null,"dir":"Reference","previous_headings":"","what":"Dimension of a smooth — smooth_dim","title":"Dimension of a smooth — smooth_dim","text":"Extracts dimension estimated smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dimension of a smooth — smooth_dim","text":"","code":"smooth_dim(object) # S3 method for class 'gam' smooth_dim(object) # S3 method for class 'gamm' smooth_dim(object) # S3 method for class 'mgcv.smooth' smooth_dim(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dimension of a smooth — smooth_dim","text":"object R object. See Details list supported objects.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Dimension of a smooth — smooth_dim","text":"numeric vector dimensions smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Dimension of a smooth — smooth_dim","text":"generic function methods objects class \"gam\", \"gamm\", \"mgcv.smooth\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Dimension of a smooth — smooth_dim","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate smooths at covariate values — smooth_estimates","title":"Evaluate smooths at covariate values — smooth_estimates","text":"Evaluate smooth grid evenly spaced value range covariate associated smooth. Alternatively, set points smooth evaluated can supplied. smooth_estimates() new implementation evaluate_smooth(), replaces function, removed package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate smooths at covariate values — smooth_estimates","text":"","code":"smooth_estimates(object, ...) # S3 method for class 'gam' smooth_estimates( object, select = NULL, smooth = deprecated(), n = 100, n_3d = 16, n_4d = 4, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, unnest = TRUE, partial_match = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate smooths at covariate values — smooth_estimates","text":"object object class \"gam\" \"gamm\". ... arguments passed methods. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. smooth Use select instead. n numeric; number points range covariate evaluate smooth. n_3d, n_4d numeric; number points range last covariate 3D 4D smooth. default NULL achieves standard behaviour using n points range covariate, resulting n^d evaluation points, d dimension smooth. d > 2 can result many evaluation points slow performance. smooths d > 4, value n_4d used dimensions > 4, unless NULL, case default behaviour (using n dimensions) observed. data data frame covariate values evaluate smooth. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details. unnest logical; unnest smooth objects? partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate smooths at covariate values — smooth_estimates","text":"data frame (tibble), class \"smooth_estimates\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Evaluate smooths at covariate values — smooth_estimates","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## evaluate all smooths smooth_estimates(m1) #> # A tibble: 400 x 9 #> .smooth .type .by .estimate .se x0 x1 x2 x3 #> #> 1 s(x0) TPRS NA -0.966542 0.316118 0.00710904 NA NA NA #> 2 s(x0) TPRS NA -0.925391 0.297170 0.0171157 NA NA NA #> 3 s(x0) TPRS NA -0.884233 0.279256 0.0271224 NA NA NA #> 4 s(x0) TPRS NA -0.843050 0.262594 0.0371291 NA NA NA #> 5 s(x0) TPRS NA -0.801824 0.247376 0.0471358 NA NA NA #> 6 s(x0) TPRS NA -0.760536 0.233728 0.0571425 NA NA NA #> 7 s(x0) TPRS NA -0.719175 0.221701 0.0671492 NA NA NA #> 8 s(x0) TPRS NA -0.677736 0.211261 0.0771559 NA NA NA #> 9 s(x0) TPRS NA -0.636220 0.202303 0.0871626 NA NA NA #> 10 s(x0) TPRS NA -0.594641 0.194685 0.0971693 NA NA NA #> # i 390 more rows ## or selected smooths smooth_estimates(m1, select = c(\"s(x0)\", \"s(x1)\")) #> # A tibble: 200 x 7 #> .smooth .type .by .estimate .se x0 x1 #> #> 1 s(x0) TPRS NA -0.966542 0.316118 0.00710904 NA #> 2 s(x0) TPRS NA -0.925391 0.297170 0.0171157 NA #> 3 s(x0) TPRS NA -0.884233 0.279256 0.0271224 NA #> 4 s(x0) TPRS NA -0.843050 0.262594 0.0371291 NA #> 5 s(x0) TPRS NA -0.801824 0.247376 0.0471358 NA #> 6 s(x0) TPRS NA -0.760536 0.233728 0.0571425 NA #> 7 s(x0) TPRS NA -0.719175 0.221701 0.0671492 NA #> 8 s(x0) TPRS NA -0.677736 0.211261 0.0771559 NA #> 9 s(x0) TPRS NA -0.636220 0.202303 0.0871626 NA #> 10 s(x0) TPRS NA -0.594641 0.194685 0.0971693 NA #> # i 190 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the label for a smooth used by 'mgcv' — smooth_label","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"label 'mgcv' uses smooths useful many contexts, including selecting smooths labelling plots. smooth_label() extracts label 'mgcv' smooth object, .e. object inherits class \"mgcv.smooth\". typically found $smooth component GAM fitted mgcv::gam() mgcv::bam(), related functions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"","code":"smooth_label(object, ...) # S3 method for class 'gam' smooth_label(object, id, ...) # S3 method for class 'mgcv.smooth' smooth_label(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"object R object. Currently, methods class \"gam\" mgcv smooth objects inheriting class \"mgcv.smooth\" supported. ... arguments passed methods. id numeric; indices smooths whose labels extracted. missing, labels smooths model returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"character vector.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"","code":"load_mgcv() df <- data_sim(\"gwf2\", n = 100) m <- gam(y ~ s(x), data = df, method = \"REML\") # extract the smooth sm <- get_smooths_by_id(m, id = 1)[[1]] # extract the label smooth_label(sm) #> [1] \"s(x)\" # or directly on the fitted GAM smooth_label(m$smooth[[1]]) #> [1] \"s(x)\" # or extract labels by idex/position smooth_label(m, id = 1) #> [1] \"s(x)\""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior draws for individual smooths — smooth_samples","title":"Posterior draws for individual smooths — smooth_samples","text":"Returns draws posterior distributions smooth functions GAM. Useful, example, visualising uncertainty individual estimated functions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior draws for individual smooths — smooth_samples","text":"","code":"smooth_samples(model, ...) # S3 method for class 'gam' smooth_samples( model, select = NULL, term = deprecated(), n = 1, data = newdata, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), seed = NULL, freq = FALSE, unconditional = FALSE, n_cores = 1L, n_vals = 200, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, rng_per_smooth = FALSE, draws = NULL, partial_match = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior draws for individual smooths — smooth_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. term Use select instead. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). seed numeric; random seed simulations. freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). n_vals numeric; many locations evaluate smooth data supplied burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". rng_per_smooth logical; TRUE, behaviour gratia version 0.8.1 earlier used, whereby separate call random number generator (RNG) performed smooth. FALSE, single call RNG performed model parameters draws matrix; user supplied posterior draws used method = \"user\". partial_match logical; smooths selected partial matches select? TRUE, select can single string match . mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Posterior draws for individual smooths — smooth_samples","text":"tibble additional classes \"smooth_samples\" `\"posterior_samples\". \"gam\" method, columns currently returned (order) : .smooth; character vector. Indicates smooth function particular draw, .term; character vector. Similar smooth, contain full label smooth, differentiate factor-smooths example. .; character vector. smooth involves term, variable named , NA_character_ otherwise. .row; integer. vector values seq_len(n_vals), repeated n > 1L. Indexes row data particular draw. .draw; integer. vector integer values indexing particular posterior draw row belongs . .value; numeric. value smooth function posterior draw covariate combination. xxx; numeric. series one columns containing data required smooth, named per variables involved respective smooth. Additional columns present case factor smooths, contain level factor named by_variable particular posterior draw.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"warning","dir":"Reference","previous_headings":"","what":"Warning","title":"Posterior draws for individual smooths — smooth_samples","text":"set variables returned order tibble subject change future versions. rely position.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Posterior draws for individual smooths — smooth_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Posterior draws for individual smooths — smooth_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") sms <- smooth_samples(m1, select = \"s(x0)\", n = 5, seed = 42) # \\donttest{ sms #> # A tibble: 1,000 x 8 #> .smooth .term .type .by .row .draw .value x0 #> #> 1 s(x0) s(x0) TPRS NA 1 1 -0.357 0.00711 #> 2 s(x0) s(x0) TPRS NA 1 2 -0.465 0.00711 #> 3 s(x0) s(x0) TPRS NA 1 3 -0.720 0.00711 #> 4 s(x0) s(x0) TPRS NA 1 4 -1.27 0.00711 #> 5 s(x0) s(x0) TPRS NA 1 5 -1.18 0.00711 #> 6 s(x0) s(x0) TPRS NA 2 1 -0.365 0.0121 #> 7 s(x0) s(x0) TPRS NA 2 2 -0.464 0.0121 #> 8 s(x0) s(x0) TPRS NA 2 3 -0.708 0.0121 #> 9 s(x0) s(x0) TPRS NA 2 4 -1.24 0.0121 #> 10 s(x0) s(x0) TPRS NA 2 5 -1.16 0.0121 #> # i 990 more rows # } ## A factor by example (with a spurious covariate x0) dat <- data_sim(\"eg4\", n = 1000, seed = 2) ## fit model... m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = dat) sms <- smooth_samples(m2, n = 5, seed = 42) draw(sms)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List the variables involved in smooths — smooth_terms","text":"","code":"smooth_terms(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List the variables involved in smooths — smooth_terms","text":"object R object result call mgcv::gam(), mgcv::bam(), mgcv::gamm(), inherits classes \"gam\" \"mgcv.smooth\", \"fs.interaction\". ... arguments passed methods. Currently unused.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the type of smooth and return it n a human readable form — smooth_type","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"Determine type smooth return n human readable form","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"","code":"smooth_type(smooth) # Default S3 method smooth_type(smooth) # S3 method for class 'tprs.smooth' smooth_type(smooth) # S3 method for class 'ts.smooth' smooth_type(smooth) # S3 method for class 'cr.smooth' smooth_type(smooth) # S3 method for class 'cs.smooth' smooth_type(smooth) # S3 method for class 'cyclic.smooth' smooth_type(smooth) # S3 method for class 'pspline.smooth' smooth_type(smooth) # S3 method for class 'cpspline.smooth' smooth_type(smooth) # S3 method for class 'Bspline.smooth' smooth_type(smooth) # S3 method for class 'duchon.spline' smooth_type(smooth) # S3 method for class 'fs.interaction' smooth_type(smooth) # S3 method for class 'sz.interaction' smooth_type(smooth) # S3 method for class 'gp.smooth' smooth_type(smooth) # S3 method for class 'mrf.smooth' smooth_type(smooth) # S3 method for class 'random.effect' smooth_type(smooth) # S3 method for class 'sw' smooth_type(smooth) # S3 method for class 'sf' smooth_type(smooth) # S3 method for class 'soap.film' smooth_type(smooth) # S3 method for class 't2.smooth' smooth_type(smooth) # S3 method for class 'sos.smooth' smooth_type(smooth) # S3 method for class 'tensor.smooth' smooth_type(smooth) # S3 method for class 'mpi.smooth' smooth_type(smooth) # S3 method for class 'mpd.smooth' smooth_type(smooth) # S3 method for class 'cx.smooth' smooth_type(smooth) # S3 method for class 'cv.smooth' smooth_type(smooth) # S3 method for class 'micx.smooth' smooth_type(smooth) # S3 method for class 'micv.smooth' smooth_type(smooth) # S3 method for class 'mdcx.smooth' smooth_type(smooth) # S3 method for class 'mdcv.smooth' smooth_type(smooth) # S3 method for class 'miso.smooth' smooth_type(smooth) # S3 method for class 'mifo.smooth' smooth_type(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"smooth object inheriting class mgcv.smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of smooths in a GAM — smooths","title":"Names of smooths in a GAM — smooths","text":"Names smooths GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of smooths in a GAM — smooths","text":"","code":"smooths(object) # Default S3 method smooths(object) # S3 method for class 'gamm' smooths(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of smooths in a GAM — smooths","text":"object fitted GAM related model. Typically result call mgcv::gam(), mgcv::bam(), mgcv::gamm().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a spline at provided covariate values — spline_values","title":"Evaluate a spline at provided covariate values — spline_values","text":"Evaluate spline provided covariate values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a spline at provided covariate values — spline_values","text":"","code":"spline_values( smooth, data, model, unconditional, overall_uncertainty = TRUE, frequentist = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a spline at provided covariate values — spline_values","text":"smooth currently object inherits class mgcv.smooth. data data frame values evaluate smooth . model fitted model; currently mgcv::gam() mgcv::bam() models suported. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a spline at provided covariate values — spline_values2","title":"Evaluate a spline at provided covariate values — spline_values2","text":"function spline_values2() renamed spline_values() version 0.9.0. allowed following removal evaluate_smooth(), function using spline_values(). spline_values2() renamed spline_values().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a spline at provided covariate values — spline_values2","text":"","code":"spline_values2( smooth, data, model, unconditional, overall_uncertainty = TRUE, frequentist = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a spline at provided covariate values — spline_values2","text":"smooth currently object inherits class mgcv.smooth. data optional data frame values evaluate smooth . model fitted model; currently mgcv::gam() mgcv::bam() models suported. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract names of all variables needed to fit a GAM or a smooth — term_names","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"Extract names variables needed fit GAM smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"","code":"term_names(object, ...) # S3 method for class 'gam' term_names(object, ...) # S3 method for class 'mgcv.smooth' term_names(object, ...) # S3 method for class 'gamm' term_names(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"object fitted GAM object (inheriting class \"gam\" mgcv::smooth.construct smooth object, inheriting class \"mgcv.smooth\". ... arguments passed methods. currently used.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"vector variable names required terms model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of variables involved in a specified model term — term_variables","title":"Names of variables involved in a specified model term — term_variables","text":"Given name (term label) term model, returns names variables involved term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of variables involved in a specified model term — term_variables","text":"","code":"term_variables(object, term, ...) # S3 method for class 'terms' term_variables(object, term, ...) # S3 method for class 'gam' term_variables(object, term, ...) # S3 method for class 'bam' term_variables(object, term, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of variables involved in a specified model term — term_variables","text":"object R object method dispatch performed term character; name model term, sense attr(terms(object), \"term.labels\"). Currently checked see term exists model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Names of variables involved in a specified model term — term_variables","text":"character vector variable names.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":null,"dir":"Reference","previous_headings":"","what":"General extractor for additional parameters in mgcv models — theta","title":"General extractor for additional parameters in mgcv models — theta","text":"General extractor additional parameters mgcv models","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General extractor for additional parameters in mgcv models — theta","text":"","code":"theta(object, ...) # S3 method for class 'gam' theta(object, transform = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"General extractor for additional parameters in mgcv models — theta","text":"object fitted model ... arguments passed methods. transform logical; transform natural scale parameter","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"General extractor for additional parameters in mgcv models — theta","text":"Returns numeric vector additional parameters","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"General extractor for additional parameters in mgcv models — theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"poisson\", seed = 42, scale = 1 / 5) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\", family = nb() ) p <- theta(m)"},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":null,"dir":"Reference","previous_headings":"","what":"A tidy basis representation of a smooth object — tidy_basis","title":"A tidy basis representation of a smooth object — tidy_basis","text":"Takes object class mgcv.smooth returns tidy representation basis.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A tidy basis representation of a smooth object — tidy_basis","text":"","code":"tidy_basis(smooth, data = NULL, at = NULL, coefs = NULL, p_ident = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A tidy basis representation of a smooth object — tidy_basis","text":"smooth smooth object inheriting class \"mgcv.smooth\". Typically, objects returned part fitted GAM GAMM $smooth component model object $gam$smooth component model fitted mgcv::gamm() gamm4::gamm4(). data data frame containing variables used smooth. data frame containing values smooth covariate(s) basis evaluated. coefs numeric; optional vector coefficients smooth p_ident logical vector; used handling scam::scam() smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A tidy basis representation of a smooth object — tidy_basis","text":"tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"A tidy basis representation of a smooth object — tidy_basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A tidy basis representation of a smooth object — tidy_basis","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) # fit model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # tidy representaition of a basis for a smooth definition # extract the smooth sm <- get_smooth(m, \"s(x2)\") # get the tidy basis - need to pass where we want it to be evaluated bf <- tidy_basis(sm, at = df) # can weight the basis by the model coefficients for this smooth bf <- tidy_basis(sm, at = df, coefs = smooth_coefs(sm, model = m))"},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":null,"dir":"Reference","previous_headings":"","what":"Sets the elements of vector to NA — to_na","title":"Sets the elements of vector to NA — to_na","text":"Given vector indexing elements x, sets selected elements x NA.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sets the elements of vector to NA — to_na","text":"","code":"to_na(x, i)"},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sets the elements of vector to NA — to_na","text":"x vector values vector values used subset x","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sets the elements of vector to NA — to_na","text":"Returns x possibly elements set NA","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":null,"dir":"Reference","previous_headings":"","what":"Exclude values that lie too far from the support of data — too_far","title":"Exclude values that lie too far from the support of data — too_far","text":"Identifies pairs covariate values lie far original data. function currently basic wrapper around mgcv::exclude..far().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exclude values that lie too far from the support of data — too_far","text":"","code":"too_far(x, y, ref_1, ref_2, dist = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exclude values that lie too far from the support of data — too_far","text":"x, y numeric; vector values covariates compare observed data ref_1, ref_2 numeric; vectors covariate values represent reference x1 x2` compared dist supplied, numeric vector length 1 representing distance data beyond observation excluded. example, want exclude values lie observation 10% range observed data, use 0.1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exclude values that lie too far from the support of data — too_far","text":"Returns logical vector length x1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":null,"dir":"Reference","previous_headings":"","what":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"Set rows data NA lie far reference set values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"","code":"too_far_to_na(smooth, input, reference, cols, dist = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"smooth mgcv smooth object input data frame containing input observations columns set NA reference data frame containing reference values cols character vector columns whose elements set NA data lies far reference set dist numeric, distance reference set beyond elements input set NA","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Transform estimated values and confidence intervals by applying a function — transform_fun","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Transform estimated values confidence intervals applying function","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"","code":"transform_fun(object, fun = NULL, ...) # S3 method for class 'smooth_estimates' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'smooth_samples' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'mgcv_smooth' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'evaluated_parametric_term' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'parametric_effects' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'tbl_df' transform_fun(object, fun = NULL, column = NULL, constant = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"object object apply transform function . fun function apply. ... additional arguments passed methods. constant numeric; constant apply transformation. column character; \"tbl_df\" method, column transform.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Returns object estimate upper lower values confidence interval transformed via function.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Typical values of model covariates — typical_values","title":"Typical values of model covariates — typical_values","text":"Typical values model covariates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Typical values of model covariates — typical_values","text":"","code":"typical_values(object, ...) # S3 method for class 'gam' typical_values( object, vars = everything(), envir = environment(formula(object)), data = NULL, ... ) # S3 method for class 'data.frame' typical_values(object, vars = everything(), ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Typical values of model covariates — typical_values","text":"object fitted GAM(M) model. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. envir environment within recreate data used fit object. data optional data frame data used fit model reconstruction data model work.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle user-supplied posterior draws — user_draws","title":"Handle user-supplied posterior draws — user_draws","text":"Handle user-supplied posterior draws","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle user-supplied posterior draws — user_draws","text":"","code":"user_draws(model, draws, ...) # S3 method for class 'gam' user_draws(model, draws, index = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle user-supplied posterior draws — user_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. draws matrix; user supplied posterior draws used method = \"user\". ... arguments passed methods. index vector index (subset) columns draws.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Handle user-supplied posterior draws — user_draws","text":"supplied draws must matrix (currently), 1 column per model coefficient, 1 row per posterior draw. \"gam\" method argument index, can used subset (select) coefficients (columns) draws. index can valid way selecting (indexing) columns matrix. index useful set posterior draws entire model (say mgcv::gam.mh()) wish use draws individual smooth, via smooth_samples().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":null,"dir":"Reference","previous_headings":"","what":"Variance components of smooths from smoothness estimates — variance_comp","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"wrapper mgcv::gam.vcomp() returns smoothing parameters expressed variance components.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"","code":"variance_comp(object, ...) # S3 method for class 'gam' variance_comp(object, rescale = TRUE, coverage = 0.95, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"object R object. Currently models fitted mgcv::gam() mgcv::bam() supported. ... arguments passed methods rescale logical; numerical stability reasons penalty matrices smooths rescaled fitting. rescale = TRUE, rescaling undone, resulting variance components original scale. needed comparing mixed model software, lmer(). coverage numeric; value 0 1 indicating (approximate) coverage confidence interval returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"function wrapper mgcv::gam.vcomp() performs three additional services suppresses annoying text output mgcv::gam.vcomp() prints terminal, returns variance smooth well standard deviation, returns variance components tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns names of variables from a smooth label — vars_from_label","title":"Returns names of variables from a smooth label — vars_from_label","text":"Returns names variables smooth label","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns names of variables from a smooth label — vars_from_label","text":"","code":"vars_from_label(label)"},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns names of variables from a smooth label — vars_from_label","text":"label character; length 1 character vector containing label smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Returns names of variables from a smooth label — vars_from_label","text":"","code":"vars_from_label(\"s(x1)\") #> [1] \"x1\" vars_from_label(\"t2(x1,x2,x3)\") #> [1] \"x1\" \"x2\" \"x3\""},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify a smooth term by its label — which_smooths","title":"Identify a smooth term by its label — which_smooths","text":"Identify smooth term label","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify a smooth term by its label — which_smooths","text":"","code":"which_smooths(object, ...) # Default S3 method which_smooths(object, ...) # S3 method for class 'gam' which_smooths(object, terms, ...) # S3 method for class 'bam' which_smooths(object, terms, ...) # S3 method for class 'gamm' which_smooths(object, terms, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify a smooth term by its label — which_smooths","text":"object fitted GAM. ... arguments passed methods. terms character; one (partial) term labels identify required smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Worm plot of model residuals — worm_plot","title":"Worm plot of model residuals — worm_plot","text":"Worm plot model residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Worm plot of model residuals — worm_plot","text":"","code":"worm_plot(model, ...) # S3 method for class 'gam' worm_plot( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), type = c(\"deviance\", \"response\", \"pearson\"), n_uniform = 10, n_simulate = 50, level = 0.9, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'glm' worm_plot(model, ...) # S3 method for class 'lm' worm_plot(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Worm plot of model residuals — worm_plot","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed ot methods. method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF available family used model fitting (`\"uniform\"“). Note method = \"direct\" deprecated favour method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"uniform\"). n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\"). level numeric; coverage level reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ci_col fill colour reference interval method = \"simulate\". ci_alpha alpha transparency reference interval method = \"simulate\". point_col colour points QQ plot. point_alpha alpha transparency points QQ plot. line_col colour used draw reference line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Worm plot of model residuals — worm_plot","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Worm plot of model residuals — worm_plot","text":"","code":"load_mgcv() ## simulate binomial data... dat <- data_sim(\"eg1\", n = 200, dist = \"binary\", scale = .33, seed = 0) p <- binomial()$linkinv(dat$f) # binomial p n <- sample(c(1, 3), 200, replace = TRUE) # binomial n dat <- transform(dat, y = rbinom(n, n, p), n = n) m <- gam(y / n ~ s(x0) + s(x1) + s(x2) + s(x3), family = binomial, data = dat, weights = n, method = \"REML\" ) ## Worm plot; default using direct randomization of uniform quantiles ## Note no reference bands are drawn with this method. worm_plot(m) ## Alternatively use simulate new data from the model, which ## allows construction of reference intervals for the Q-Q plot worm_plot(m, method = \"simulate\", point_col = \"steelblue\", point_alpha = 0.4 ) ## ... or use the usual normality assumption worm_plot(m, method = \"normal\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":null,"dir":"Reference","previous_headings":"","what":"Madison lakes zooplankton data — zooplankton","title":"Madison lakes zooplankton data — zooplankton","text":"Madison lake zooplankton data long-term study seasonal dynamics zooplankton, collected Richard Lathrop. data collected chain lakes Wisconsin (Mendota, Monona, Kegnonsa, Waubesa) approximately bi-weekly 1976 1994. consist samples zooplankton communities, taken deepest point lake via vertical tow. data provided Wisconsin Department Natural Resources collection processing fully described Lathrop (2000).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Madison lakes zooplankton data — zooplankton","text":"data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Madison lakes zooplankton data — zooplankton","text":"Pedersen EJ, Miller DL, Simpson GL, Ross N. 2018. Hierarchical generalized additive models: introduction mgcv. PeerJ Preprints 6:e27320v1 doi:10.7287/peerj.preprints.27320v1 .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Madison lakes zooplankton data — zooplankton","text":"record consists counts given zooplankton taxon taken subsample single vertical net tow, scaled account relative volume subsample versus whole net sample area net tow rounded nearest 1000 give estimated population density per m2 taxon point time sampled lake.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Madison lakes zooplankton data — zooplankton","text":"Lathrop RC. (2000). Madison Wisonsin Lakes Zooplankton 1976–1994. Environmental Data Initiative.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-development-version","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia (development version)","text":"conditional_values() draw() method compute plot predictions fitted GAM conditional one covariates. function wrapper around fitted_values() allows user simple ways specify covariates condition values covariates take. provides similar functionality marginaleffects::plot_predictions(), simpler. See #300. penalty() basis() can now allow smooth reparameterized resulting basis identity matrix. clearly highlights penalty null space, functions penalty effect . draw.gam() draw.smooth_estimates() gain argument caption, , set FALSE plot smooth basis type caption plot. #307 appraise() qq_plot.gam() now allow user set random seed used generating reference quantiles method = \"uniform\" method = \"simulate\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-development-version","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia (development version)","text":"derivative_samples() ignoring scale argument. #293 Reported @jonathonmellor Argument level derivative_samples() included accidentally. v0.9.2.9002 argument deprecated using now generate warning. #291 draw() plotting cyclic P spline smooths. Reported @Zuckerbrot #297 derivatives() fail \"fs\" smooths parametric effects model. Reported @mahonmb #301 Partial residuals partial_residuals() draw.gam() wrong GAMs fitted family = binomial() weights argument contained binomial sample sizes prior weights used form weighted working residuals. Now working weights used instead. Reported @emchuron #273 Internal function gammals_link() expecting \"theta\" synonym scale parameter master table \"phi\" coded synonym. Now work expected. level() assumed level single value even though handle multiple levels. #321","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-092","dir":"Changelog","previous_headings":"","what":"gratia 0.9.2","title":"gratia 0.9.2","text":"CRAN release: 2024-06-25","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"breaking-changes-0-9-2","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"gratia 0.9.2","text":"parametric_effects() slightly escaped great renaming happened 0.9.0. Columns type term gain prefix .. now rectified two columns now .type .term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-9-2","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.9.2","text":"Plots random effects now labelled smooth label. Previously, title taken fro variable involved smooth, doesn’t work terms like s(subject, continuous_var, bs = \"re\") random slopes, previsouly title \"subject\". Now terms title \"s(subject,continuous_var)\". Simple random intercept terms, s(subject, bs = \"re\"), now titled \"s(subject)\". #287 vignettes custom-plotting.Rmd, posterior-simulation.Rmd moved vignettes/articles thus longer available package vignettes. Instead, accessible Articles package website: https://gavinsimpson.github.io/gratia/","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-9-2","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.9.2","text":"fitted_samples() now works gam() models multiple linear predictors, currently location parameter supported. parameter indicated new variable .parameter returned object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-9-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.9.2","text":"partial_residuals() computing partial residuals deviance residuals. compatibility mgcv::plot.gam(), partial residuals now computed working residuals. Reported @wStockhausen #273 appraise() passing ci_col argument qq_plot() worm_plot(). Reported Sate Ahmed. Couldn’t pass mvn_method posterior sampling functions user facing functions fitted_samples(), posterior_samples(), smooth_samples(), derivative_samples(), repsonse_derivatives(). Reported @stefgehrig #279 fitted_values() works quantile GAMs fitted qgam(). confint.gam() applying shift estimate upper lower interval. #280 reported @TIMAVID & @rbentham parametric_effects() draw.parametric_effects() forget levels factors (intentionally), lead problems ordered factors ordering levels preserved. Now, parametric_effects() returns named list factor levels attribute \"factor_levels\" containing required information order levels preserved plotting. #284 Reported @mhpob parametric_effects() fail parametric terms model interaction terms (don’t currently handle). #282","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-090","dir":"Changelog","previous_headings":"","what":"gratia 0.9.0","title":"gratia 0.9.0","text":"CRAN release: 2024-03-27","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"breaking-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"gratia 0.9.0","text":"Many functions now return objects different named variables. order avoid clashes variable names used user’s models data, period (.) now used prefix generated variable names. functions whose names changed : smooth_estimates(), fitted_values(), fitted_samples(), posterior_samples(), derivatives(), partial_derivatives(), derivative_samples(). addition, add_confint() also adds newly-named variables. derivatives() partial_derivatives() now work like smooth_estimates(); place var data columns, gratia now stores data variables derivatives evaluated columns object actual variable names. way spline---sphere (SOS) smooths (bs = \"sos\") plotted changed use ggplot2::coord_sf() instead previously-used ggplot2::coord_map(). changed made result coord_map() soft-deprecated (“superseded”) minor versions ggplot2 now already, changes guides system version 3.5.0 ggplot2. axes plots created coord_map() never really worked correctly changing angle tick labels never worked. coord_map() superseded, didn’t receive updates guides system side effect changes, code plotted SOS smooths producing warning release ggplot2 version 3.5.0. projection settings used draw SOS smooths previously controlled via arguments projection orientation. arguments affect ggplot2::coord_sf(), Instead projection used controlled new argument crs, takes PROJ string detailing projection use integer refers known coordinate reference system (CRS). default projection used +proj=ortho +lat_0=20 +lon_0=XX XX mean longitude coordinates data points.","code":"1. `est` is now `.estimate`, 2. `lower` and `upper` are now `.lower_ci` and `.upper_ci`, 3. `draw` and `row` and now `.draw` and `.row` respectively, 4. `fitted`, `se`, `crit` are now `.fitted`, `.se`, `.crit`, respectively 5. `smooth`, `by`, and `type` in `smooth_estimates()` are now `.smooth`, `.by`, `.type`, respectively."},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"defunct-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Defunct","title":"gratia 0.9.0","text":"evaluate_smooth() deprecated gratia version 0.7.0. function ’s methods removed package. Use smooth_estimates() instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-functions-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Deprecated functions","title":"gratia 0.9.0","text":"following functions deprecated version 0.9.0 gratia. eventually removed package part clean ahead eventual 1.0.0 release. functions become defunct version 0.11.0 1.0.0, whichever released soonest. evaluate_parametric_term() deprecated. Use parametric_effects() instead. datagen() deprecated. never really originally designed , replaced data_slice().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-arguments-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Deprecated arguments","title":"gratia 0.9.0","text":"make functions package consistent, arguments select, term, smooth used thing hence latter two deprecated favour select. deprecated argument used, warning issued value assigned argument assigned select function continue.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.9.0","text":"smooth_samples() now uses single call RNG generate draws posterior smooths. Previous version 0.9.0, smooth_samples() separate call mvnfast::rmvn() smooth. result, result call smooth_samples() model multiple smooths now produce different results generated previously. regain old behaviour, add rng_per_smooth = TRUE smooth_samples() call. Note, however, using per-smooth RNG calls method = \"mh\" inefficient , method, posterior draws coefficients model sampled . , use rng_per_smooth = TRUE method = \"gaussian\". output smooth_estimates() draw() method changed tensor product smooths involve one 2D marginal smooths. Now, covariate values supplied via data argument, smooth_estimates() identifies one marginals 2d surface allows covariates involved surface vary fastest, ahead terms marginals. change made provides better default nothing provided data. also affects draw.gam(). fitted_values() now level support location, scale, shape families. Supported families mgcv::gaulss(), mgcv::gammals(), mgcv::gumbls(), mgcv::gevlss(), mgcv::shash(), mgcv::twlss(), mgcv::ziplss(). gratia now requires dplyr versions >= 1.1.0 tidyselect >= 1.2.0. new vignette Posterior Simulation available, describes posterior simulation fitted GAMs using {gratia}.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-9-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.9.0","text":"Soap film smooths using basis bs = \"\" now handled draw(), smooth_estimates() etc. #8 response_derivatives() new function computing derivatives response respect (continuous) focal variable. First second order derivatives can computed using forward, backward, central finite differences. uncertainty estimated derivative determined using posterior sampling via fitted_samples(), hence can derived Gaussian approximation posterior using Metropolis Hastings sampler (see .) derivative_samples() work horse function behind response_derivatives(), computes returns posterior draws derivatives additive combination model terms. Requested @jonathanmellor #237 data_sim() can now simulate response data gamma, Tweedie ordered categorical distributions. data_sim() gains two new example models \"gwf2\", simulating data Gu & Wabha’s f2 function, \"lwf6\", example function 6 Luo & Wabha (1997 JASA 92(437), 107-116). data_sim() can also simulate data use GAMs fitted using family = gfam() grouped families different types data response handled. #266 part #265 fitted_samples() smooth_samples() can now use Metropolis Hastings sampler mgcv::gam.mh(), instead Gaussian approximation, sample posterior distribution model specific smooths respectively. posterior_samples() new function family fitted_samples() smooth_samples(). posterior_samples() returns draws posterior distribution response, combining uncertainty estimated expected value response dispersion response distribution. difference posterior_samples() predicted_samples() latter includes variation due drawing samples conditional distribution response (uncertainty expected values ignored), former includes sources uncertainty. fitted_samples() can new use matrix user-supplied posterior draws. Related #120 add_fitted_samples(), add_predicted_samples(), add_posterior_samples(), add_smooth_samples() new utility functions add respective draws posterior distribution existing data object covariate values object: obj |> add_posterior_draws(model). #50 basis_size() new function extract basis dimension (number basis functions) smooths. Methods available objects inherit classes \"gam\", \"gamm\", \"mgcv.smooth\" (individual smooths). data_slice() gains method data frames tibbles. typical_values() gains method data frames tibbles. fitted_values() now works models fitted using mgcv::ocat() family. predicted probability category returned, alongside Wald interval created using standard error (SE) estimated probability. SE estimated probabilities transformed logit (linear predictor) scale, Wald credible interval formed, back-transformed response (probability) scale. fitted_values() now works GAMMs fitted using mgcv::gamm(). Fitted (predicted) values use GAM part model, thus exclude random effects. link() inv_link() work models fitted using cnorm() family. worm plot can now drawn place QQ plot appraise() via new argument use_worm = TRUE. #62 smooths() now works models fitted mgcv::gamm(). overview() now returns basis dimension smooth gains argument stars TRUE add significance stars output plus legend printed tibble footer. Part wish @noamross #214 New add_constant() transform_fun() methods smooth_samples(). evenly() gains arguments lower upper modify lower / upper bound interval evenly spaced values generated. add_sizer() new function add information whether derivative smooth significantly changing (credible interval excludes 0). Currently, methods derivatives() smooth_estimates() objects implemented. Part request @asanders11 #117 draw.derivatives() gains arguments add_change change_type allow derivatives smooths plotted indicators credible interval derivative excludes 0. Options allow periods decrease increase differentiated via change_type = \"sizer\" instead default change_type = \"change\", emphasises either type change way. Part wish @asanders11 #117 draw.gam() can now group factor smooths given factor single panel, rather plotting smooths level separate panels. achieved via new argument grouped_by. Requested @RPanczak #89 draw.smooth_estimates() can now also group factor smooths given factor single panel. underlying plotting code used draw_smooth_estimates() univariate smooths can now add change indicators plots smooths change indicators added object created smooth_estimates() using add_sizer(). See example ?draw.smooth_estimates. smooth_estimates() can, evaluating 3D 4D tensor product smooth, identify one 2D smooths marginal tensor product. users provide covariate values evaluate smooths, smooth_estimates() focus 2D marginal smooth (first one involved tensor product), instead following ordering terms definition tensor product. #191 example, te(z, x, y, bs = c(cr, ds), d = c(1, 2)), second marginal smooth 2D Duchon spline covariates x y. Previously, smooth_estimates() generated n values z x n_3d values y, evaluated tensor product combinations generated values. ignore structure implicit tensor product, likely want know surface estimated Duchon spline x y smoothly varies z. Previously smooth_estimates() generate surfaces z x, varying y. Now, smooth_estimates() correctly identifies one marginal smooths tensor product 2D surface focus surface varying terms tensor product. improved behaviour needed bam() models always possible obvious thing reorder smooths defining tensor product te(x, y, z, bs = c(ds, cr), d = c(2, 1)). discrete = TRUE used bam() terms tensor product may get rearranged model setup maximum efficiency (See Details ?mgcv::bam). Additionally, draw.gam() now also works way. New function null_deviance() extracts null deviance fitted model. draw(), smooth_estimates(), fitted_values(), data_slice(), smooth_samples() now work models fitted scam::scam(). matters, current support extends univariate smooths. generate_draws() new low-level function generating posterior draws fitted model coefficients. generate_daws() S3 generic function extensible users. Currently provides simple interface simple Gaussian approximation sampler (gaussian_draws()) simple Metropolis Hasting sample (mh_draws()) available via mgcv::gam.mh(). #211 smooth_label() new function extracting labels ‘mgcv’ creates smooths smooth object . penalty() default method works s(), te(), t2(), ti(), create smooth specification. transform_fun() gains argument constant allow addition constant value objects (e.g. estimate confidence interval). enables single obj |> transform_fun(fun = exp, constant = 5) instead separate calls add_constant() transform_fun(). Part discussion #79 model_constant() new function simply extracts first coefficient estimated model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-9-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.9.0","text":"link(), inv_link(), related family functions ocat() weren’t correctly identifying family name result throw error even passed object correct family. link() inv_link() now work correctly betar() family fitted GAM. print() method lp_matrix() now converts matrix data frame conversion tibble. makes sense results typical behaviour columns printed object doubles. Constrained factor smooths (bs = \"sz\") factor first variable mentioned smooth (.e. s(x, f, bs = \"sz\") continuous x factor f) now plotable draw(). #208 parametric_effects() unable handle special parametric terms like poly(x) log(x) formulas. Reported @fhui28 #212 parametric_effects() now works better location, scale, shape models. Reported @pboesu #45 parametric_effects now works missing values one variables used fitted GAM. #219 response_derivatives() incorrectly using .data tidyselect selectors. typical_values() handle logical variables GAM fit mgcv stores numerics var.summary. affected evenly() data_slice(). #222 parametric_effects() fail two ordered factors model. Reported @dsmi31 #221 Continuous smooths evaluated median value variable instead value 1. #224 fitted_samples() (hence posterior_samples()) now handles models offset terms formula. Offset terms supplied via offset argument ignored mgcv:::predict.gam() hence ignored also gratia. Reported @jonathonmellor #231 #233 smooth_estimates() fail \"fs\" smooth multivariate base smoother used factor last variable specified definition smooth: s(x1, x2, f, bs = \"fs\", xt = list(bs = \"ds\")) work, s(f, x1, x2, bs = \"fs\", xt = list(bs = \"ds\")) (ordering variables places factor last) emit obscure error. ordering terms involved smooth now doesn’t matter. Reported @chrisaak #249. draw.gam() fail plotting multivariate base smoother used \"sz\" smooth. Now, use case identified message printed indicating (currently) gratia doesn’t know plot smooth. Reported @chrisaak #249. draw.gam() fail plotting multivariate base smoother used \"fs\" smooth. Now, use case identified message printed indicating (currently) gratia doesn’t know plot smooth. Reported @chrisaak #249. derivative_samples() fail order = 2 computing forward finite differences, regardless type order = 1. Partly reported @samlipworth #251. draw() method penalty() normalizing penalty range 0–1, claimed documented -1–1 argument normalize = TRUE. now fixed. smooth_samples() failing data supplied contained variables used smooth sampled. Hence generally fail unless single smooth sampled model contained single smooth. function never intended retain variables data written way fail relocating data columns end posterior sampling object. #255 draw.gam() draw.smooth_estimates() fail plotting univariate tensor product smooth (e.g. te(x), ti(x), t2()). Reported @wStockhausen #260 plot.smooth() printing factor level subtitles ordered factor smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-082","dir":"Changelog","previous_headings":"","what":"gratia 0.8.2","title":"gratia 0.8.2","text":"CRAN release: 2024-01-09 Small fixes CRAN.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-081","dir":"Changelog","previous_headings":"","what":"gratia 0.8.1","title":"gratia 0.8.1","text":"CRAN release: 2023-02-02","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-8-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.8.1","text":"smooth_samples() now returns objects variables involved smooths correct name. Previously variables named .x1, .x2, etc. Fixing #126 improving compatibility compare_smooths() smooth_estimates() allowed variables named correctly. gratia now depends version 1.8-41 later mgcv package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.8.1","text":"draw.gam() can now handle tensor products include marginal random effect smooth. Beware plotting smooths many levels, however, separate surface plot produced level.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-8-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.8.1","text":"Additional fixes changes dplyr 1.1.0. smooth_samples() now works sampling posteriors multiple smooths different dimension. #126 reported @Aariq","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-8-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.8.0","text":"{gratia} now depends R version 4.1 later. new vignette “Data slices” supplied {gratia}. Functions {gratia} harmonised use argument named data instead newdata passing new data evaluate features smooths. message printed newdata used now . Existing code need changed data takes value newdata. Note due way ... handled R, R script uses data argument, run versions gratia prior 8.0 (released; 0.7.3.8 using development version) user-supplied data silently ignored. , scripts using data check installed version gratia >= 0.8 package developers update depend versions >= 0.8 using gratia (>= 0.8) DESCRIPTION. order plots smooths changed draw.gam() match order smooths specified model formula. See Bug Fixes detail #154.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-8-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.8.0","text":"Added basic support GAMLSS (distributional GAMs) fitted gamlss() function package GJRM. Support currently restricted draw() method. difference_smooths() can now include group means difference, many users expected. include group means use group_means = TRUE function call, e.g. difference_smooths(model, smooth = \"s(x)\", group_means = TRUE). Note: function still differs plot_diff() package itsadug, essentially computes differences model predictions. main practical difference effects beyond factor smooth, including random effects, may included plot_diff(). implements main wish #108 (@dinga92) #143 (@mbolyanatz) despite protestations complicated cases (isn’t; complexity just cancels .) data_slice() totally revised. Now, user provides values variables want slice variables model specified held typical values (.e. value observation closest median numeric variables, modal factor level.) Data slices now produced passing name = value pairs variables values want appear slice. example value pair can expression looked (evaluated) data argument model frame fitted model (default). example, resulting slice data frame 100 observations, comprising x1, vector 100 values spread evenly range x1, constant value mean x2 x2 variable, constant factor level, model class fac, fac variable model. partial_derivatives() new function computing partial derivatives multivariate smooths (e.g. s(x,z), te(x,z)) respect one margins smooth. Multivariate smooths dimension handled, one dimensions allowed vary. Partial derivatives estimated using method finite differences, forward, backward, central finite differences available. Requested @noamross #101 overview() provides simple overview model terms fitted GAMs. new bs = \"sz\" basis released mgcv version 1.18-41 now supported smooth_estimates(), draw.gam(), draw.smooth_estimates() basis unique plotting method. #202 basis() now method fitted GAM(M)s can extract estimated basis model plot , using estimated coefficients smooth weight basis. #137 also new draw.basis() method plotting results call basis(). method can now also handle bivariate bases. tidy_basis() lower level function heavy lifting basis(), now exported. tidy_basis() returns tidy representation basis supplied object inheriting class \"mgcv.smooth\". objects returned $smooth component fitted GAM(M) model. lp_matrix() new utility function quickly return linear predictor matrix estimated model. wrapper predict(..., type = \"lpmatrix\") evenly() synonym seq_min_max() preferred going forward. Gains argument produce sequences covariate increment units . ref_level() level() new utility functions extracting reference specific level factor respectively. useful specifying covariate values condition data slice. model_vars() new, public facing way returning vector variables used model. difference_smooths() now use user-supplied data points evaluate pair smooths. Also note argument newdata renamed data. #175 draw() method difference_smooths() now uses better labels plot titles avoid long labels even modest factor levels. derivatives() now works factor-smooth interaction (\"fs\") smooths. draw() methods now allow angle tick labels x axis plots rotated using argument angle. Requested @tamas-ferenci #87 draw.gam() related functions (draw.parametric_effects(), draw.smooth_estimates()) now add basis plot using caption. #155 smooth_coefs() new utility function extracting coefficients particular smooth fitted model. smooth_coef_indices() associated function returns indices (positions) vector model coefficients (returned coef(gam_model)) coefficients pertain stated smooth. draw.gam() now better handles patchworks plots one plots fixed aspect ratios. #190","code":"m <- gam(y ~ s(x1) + x2 + fac) data_slice(model, x1 = evenly(x1, n = 100), x2 = mean(x2))"},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-8-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.8.0","text":"draw.posterior_smooths now plots posterior samples fixed aspect ratio smooth isotropic. #148 derivatives() now ignores random effect smooths (derivatives don’t make sense anyway). #168 confint.gam(...., method = \"simultaneous\") now works factor smooths parm passed full name specific smooth s(x)faclevel. order plots produced gratia::draw.gam() matches order smooths entered model formula. Recent changes internals gratia::draw.gam() switch smooth_estimates() undertaken lead change behaviour resulting use dplyr::group_split(), ’s coercion internally character vector factor. factor now created explicitly, levels set correct order. #154 Setting dist argument set response smooth values NA lay far support data multivariate smooths, lead incorrect scale response guide. now fixed. #193 Argument fun draw.gam() applied parametric terms. Reported @grasshoppermouse #195 draw.gam() adding uncertainty linear predictors smooths overall_uncertainty = TRUE used. Now draw.gam() includes uncertainty linear predictors smooth takes part. #158 partial_derivatives() works provided single data point evaluate derivative. #199 transform_fun.smooth_estimates() addressing wrong variable names trying transform confidence interval. #201 data_slice() doesn’t fail error used model contains offset term. #198 confint.gam() longer uses evaluate_smooth(), soft deprecated. #167 qq_plot() worm_plot() compute wrong deviance residuals used generate theoretical quantiles exotic families (distributions) available mgcv. also affected appraise() QQ plot; residuals shown plots deviance residuals shown y-axis QQ plot correct. generation reference intervals/quantiles affected.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-073","dir":"Changelog","previous_headings":"","what":"gratia 0.7.3","title":"gratia 0.7.3","text":"CRAN release: 2022-05-09","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-7-3","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.7.3","text":"Plots smooths now use “Partial effect” y-axis label place “Effect”, better indicate displayed.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-3","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.3","text":"confint.fderiv() confint.gam() now return results tibble instead common--garden data frame. latter mostly already . Examples confint.fderiv() confint.gam() reworked, part remove inconsistent output examples run M1 macs.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.3","text":"compare_smooths() failed passed non-standard model “names” like compare_smooths(m_gam, m_gamm$gam) compare_smooths(l[[1]], l[[2]]) even evaluated objects valid GAM(M) models. Reported Andrew Irwin #150","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-072","dir":"Changelog","previous_headings":"","what":"gratia 0.7.2","title":"gratia 0.7.2","text":"CRAN release: 2022-03-17","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-2","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.2","text":"draw.gam() draw.smooth_estimates() can now handle splines sphere (s(lat, long, bs = \"sos\")) special plotting methods using ggplot2::coord_map() handle projection spherical coordinates. orthographic projection used default, essentially arbitrary (northern hemisphere-centric) default orientation view. fitted_values() insures data (hence returned object) tibble rather common garden data frame.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.2","text":"draw.posterior_smooths() redundantly plotting duplicate data rug plot. Now unique set covariate values used drawing rug. data_sim() passing scale argument bivariate example setting (\"eg2\"). draw() methods gamm() gamm4::gamm4() fits passing arguments draw.gam(). draw.smooth_estimates() produce subtitle data continuous smooth factor smooth. Now subtitle contains name continuous variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-071","dir":"Changelog","previous_headings":"","what":"gratia 0.7.1","title":"gratia 0.7.1","text":"Due issue size package source tarball, wasn’t discovered submission CRAN, 0.7.1 never released.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.1","text":"draw.gam() draw.smooth_estimates(): {gratia} can now handle smooths 3 4 covariates plotting. smooths 3 covariates, third covariate handled ggplot2::facet_wrap() set (default n = 16) small multiples drawn, 2d surface evaluated specified value third covariate. smooths 4 covariates, ggplot2::facet_grid() used draw small multiples, default producing 4 rows 4 columns plots specific values third fourth covariates. number small multiples produced controlled new arguments n_3d (default = n_3d = 16) n_4d (default n_4d = 4, yielding n_4d * n_4d = 16 facets) respectively. affects plotting; smooth_estimates() able handle smooths number covariates . handling higher-dimensional smooths, actually drawing plots default device can slow, especially default value n = 100 (3D 4D smooths result 160,000 data points plotted). recommended reduce n smaller value: n = 50 reasonable compromise resolution speed. model_concurvity() returns concurvity measures mgcv::concurvity() estimated GAMs tidy format. synonym concrvity() also provided. draw() method provided produces bar plot heatmap concurvity values depending whether overall concurvity smooth pairwise concurvity smooth model requested. draw.gam() gains argument resid_col = \"steelblue3\" allows colour partial residuals (plotted) changed.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.1","text":"model_edf() using type argument. result ever returned default EDF type. add_constant() methods weren’t applying constant required variables. draw.gam(), draw.parametric_effects() now actually work model parametric effects. #142 Reported @Nelson-Gon parametric_effects() fail model parametric terms predict.gam() returns empty arrays passed exclude = character(0).","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-070","dir":"Changelog","previous_headings":"","what":"gratia 0.7.0","title":"gratia 0.7.0","text":"CRAN release: 2022-02-07","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"major-changes-0-7-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"gratia 0.7.0","text":"draw.gam() now uses smooth_estimates() internally consequently uses draw() method underlying plotting code. simplified code compared evaluate_smooth() methods, allow future development addition features easily evaluate_smooth() retained. Similarly, evaluate_parametric_terms() now deprecated favour parametric_effects(), also used internally draw.gam() parametric terms present model (parametric = TRUE). lot code reused differences plots result change minimal, corner cases may missed. File Issue notice something changed think shouldn’t. draw.gam() now plots 2D isotropic smooths (TPRS Duchon splines) equally-scaled x y coordinates using coord_equal(ratio = 1). Alignment plots little different now plotting models multiple smooths. See Issue #81.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-functions-0-7-0","dir":"Changelog","previous_headings":"Major changes","what":"Deprecated functions","title":"gratia 0.7.0","text":"version 0.7.0, following functions considered deprecated use discouraged: fderiv() soft-deprecated favour derivatives(), evaluate_smooth() soft-deprecated favour smooth_estimates(), evaluate_parametric_term() soft-deprecated favour parametric_effects(). first call one functions generate warning, pointing newer, alternative, function. safe ignore warnings, deprecated functions longer receive updates thus risk removed package future date. newer alternatives can handle types models smooths, especially case smooth_estimates().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.0","text":"fitted_values() provides tidy wrapper around predict.gam() generating fitted values model. New covariate values can provided via argument data. credible interval fitted values returned, values can link (linear predictor) response scale. Note function returns expected values response. Hence, “fitted values” used instead “predictions” case new covariate values differentiate values case generating new response values fitted model. rootogram() draw() method produce rootograms diagnostic plots fitted models. Currently models fitted poisson(), nb(), negbin(), gaussian() families. New helper functions typical_values(), factor_combos() data_combos() quickly creating data sets producing predictions fitted models covariatess fixed come typical representative values. typical_values() new helper function return typical values covariates fitted model. returns value observation closest median numerical covariates modal level factor preserving levels factor. typical_values() useful preparing data slices scenarios fitted values estimated model required. factor_combos() extracts returns combinations levels factors found data used fit model. Unlike typical_values(), factor_combos() returns combinations factor levels observed data, just modal level. Optionally, combinations factor levels can returned, just observed data. data_combos() combines returns factor data factor_combos() plus typical values numerical covariates. useful want generate predictions model combination factor terms holding continuous covariates median values. nb_theta() new extractor function returns theta parameter fitted negative binomial GAM (families nb() negbin()). Additionally, theta() has_theta() provide additional functionality. theta() experimental function extracting additional parameters model family. has_theta() useful checking additional parameters available family model. edf() extracts effective degrees freedom (EDF) fitted model specific smooth model. Various forms EDF can extracted. model_edf() returns EDF overall model. supplied multiple models, EDFs model returned comparison. draw.gam() can now show “rug” plot bivariate smooth drawing small points high transparency smooth surface data coordinates. addition, rugs plots factor smooths now show locations covariate values specific level factor levels. better reflects data used estimate smooth, even though basis smooth set using covariate locations. draw.gam() draw.smooth_estimates() now allow aspects plot changed: fill (colour) alpha attributes credible interval, line colour smooth can now specified using arguments ci_col, ci_alpha, smooth_col respectively. Partial residuals can now plotted factor smooths. allow , partial residuals filtered residuals associated particular level’s smooth drawn plot smooth. smooth_estimates() uses check_user_select_smooths() handle user-specified selection smooth terms. flexible previously, allows easier selection smooths evaluate. fixef() now imported (re-exported) nlme package, methods models fitted gam() gamm(), extract fixed effects estimates fitted models. fixed_effects() alias fixef(). draw() method smooth_samples() can now handle 2D smooths. Additionally, number posterior draws plot can now specified plotting using new argument n_samples, result n_samples draws selected random set draws plotting. New argument seed allows selection draws repeatable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.0","text":"smooth_estimates() filtering user-supplied data level specific smooth used factor smooths. result smooth evaluated rows user-supplied data, therefore result nrow(user_data) * nlevels(by_variable) rows returned object instead nrow(user_data) rows. add_confint() method smooth_estimates() upper lower intervals reversed. #107 Reported @Aariq draw.gam() smooth_estimates() ignoring dist argument allows covariate values lie far support data excluded returning estimated values smooth plotting . #111 Reported @Aariq smooth_samples() factor GAM return samples first factor level . Reported @rroyaute discussion #121 smooth_samples() fail model contained random effect “smooths”. now ignored message running smooth_samples(). Reported @isabellaghement #121 link(), inv_link() failing models fitted family = scat(). Reported @Aariq #130","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-060","dir":"Changelog","previous_headings":"","what":"gratia 0.6.0","title":"gratia 0.6.0","text":"CRAN release: 2021-04-18","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"major-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"gratia 0.6.0","text":"{cowplot} package replaced {patchwork} package producing multi-panel figures draw() appraise(). shouldn’t affect code used {gratia} , passed additional arguments cowplot::plot_grid() used align axis arguments draw() appraise(), ’ll need adapt code accordingly. Typically, can simply delete align axis arguments {patchwork} just work align plots nicely. arguments passed via ... cowplot::plot_grid() just ignored patchwork::wrap_plots() unless passed arguments match arguments patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-6-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.6.0","text":"{patchwork} package now used multi-panel figures. , {gratia} longer Imports {cowplot} package. Worm plot diagnostic plots available via new function worm_plot(). Worm plots detrended Q-Q plots, deviation Q-Q reference line emphasized deviations around line occupy full height plot. worm_plot() methods available models classes \"gam\", \"glm\", \"lm\". (#62) Smooths can now compared across models using compare_smooths(), comparisons visualised associated draw() method. (#85 @dill) feature bit experimental; returned object uses nested lists may change future users find confusing. reference line qq_plot() method = \"normal\" previously drawn line intercept 0 slope 1, match methods. inconsistent stats::qqplot() drew line 1st 3rd quartiles. qq_plot() method = \"normal\" now uses robust reference line. Reference lines methods remain drawn slope 1 intercept 0. qq_plot() method = \"normal\" now draws point-wise reference band using standard error order statistic. draw() method penalty() now plots penalty matrix heatmaps -logical orientation, match matrices might written printed R console. link(), inv_link() now work models fitted gumbls() shash() families. (#84) extract_link() lower level utility function related link() inv_link(), now exported.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.6.0","text":"default method name generating reference quantiles qq_plot() changed \"direct\" \"uniform\", avoid confusion mgcv::qq.gam() help page description methods. Accordingly using method = \"direct\" deprecated message effect displayed used. way smooths/terms selected derivatives() switched use mechanism draw.gam()’s select argument. get partial match term, now need also specify partial_match = TRUE call derivatives().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.6.0","text":"transform_fun() copy paste bug definition generic. (#96 @Aariq) derivatives() user-supplied newdata fail factor smooths interval = \"simultaneous\" introduce rows derivative == 0 interval = \"confidence\" didn’t subset rows newdata specific level factor computing derivatives. (#102 @sambweber) evaluate_smooth() can now handle random effect smooths defined using ordered factor. (#99 @StefanoMezzini)","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-051","dir":"Changelog","previous_headings":"","what":"gratia 0.5.1","title":"gratia 0.5.1","text":"CRAN release: 2021-01-23","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-5-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.5.1","text":"smooth_estimates() can now handle bivariate multivariate thinplate regression spline smooths, e.g.  s(x, z, ), tensor product smooths (te(), t2(), & ti()), e.g. te(x, z, ) factor smooth interactions, e.g. s(x, f, bs = \"fs\") random effect smooths, e.g. s(f, bs = \"re\") penalty() provides tidy representation penalty matrices smooths. tidy representation suitable plotting ggplot(). draw() method provided, represents penalty matrix heatmap.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-5-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.5.1","text":"newdata argument smooth_estimates() changed data originally intended.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-050","dir":"Changelog","previous_headings":"","what":"gratia 0.5.0","title":"gratia 0.5.0","text":"CRAN release: 2021-01-10","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-5-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.5.0","text":"Partial residuals models can computed partial_residuals(). partial residuals weighted residuals model added contribution smooth term (returned predict(model, type = \"terms\"). Wish #76 (@noamross) Also, new function add_partial_residuals() can used add partial residuals data frames. Users can now control extent colour fill scales used plotting smooths draw() methods use . useful change fill scale plotting 2D smooths, change discrete colour scale used plotting random factor smooths (bs = \"fs\"). user can pass scales via arguments discrete_colour continuous_fill. effects certain smooths can excluded data simulated model using simulate.gam() predicted_samples() passing exclude terms predict.gam(). allows excluding random effects, example, model predicted values used simulate new data conditional distribution. See example predicted_samples(). Wish #74 (@hgoldspiel) draw.gam() related functions gain arguments constant fun allow user-defined constants transformations smooth estimates confidence intervals applied. Part wish Wish #79. confint.gam() now works 2D smooths also. smooth_estimates() early version code replace (likely supersede) evaluate_smooth(). smooth_estimates() can currently handle 1D smooths standard types.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.5.0","text":"meaning parm confint.gam changed. argument now requires smooth label match smooth. vector labels can provided, partial matching smooth label works single parm value. default behaviour remains unchanged however; parm NULL smooths evaluated returned confidence intervals. data_class() longer exported; ever intended internal function.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-5-0","dir":"Changelog","previous_headings":"","what":"Bug Fixes","title":"gratia 0.5.0","text":"confint.gam() failing tensor product smooth due matching issues. Reported @tamas-ferenci #88 also fixes #80 related issue selecting specific smooth. vdiffr package now used conditionally package tests. Reported Brian Ripley #93","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-041","dir":"Changelog","previous_headings":"","what":"gratia 0.4.1","title":"gratia 0.4.1","text":"CRAN release: 2020-05-30","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-4-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.4.1","text":"draw.gam() scales = \"fixed\" now applies terms can plotted, including 2d smooths. Reported @StefanoMezzini #73","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-4-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.4.1","text":"dplyr::combine() deprecated. Switch vctrs::vec_c(). draw.gam() scales = \"fixed\" wasn’t using fixed scales 2d smooths model. Reported @StefanoMezzini #73","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-4-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.4.0","text":"draw.gam() can include partial residuals drawing univariate smooths. Use residuals = TRUE add partial residuals univariate smooth drawn. feature available smooths one variable, smooths, factor-smooth interactions (bs = \"fs\"). coverage credible confidence intervals drawn draw.gam() can specified via argument ci_level. default arbitrarily 0.95 reason (rough) compatibility plot.gam(). change effect making intervals slightly narrower previous versions gratia; intervals drawn ± 2 × standard error. default intervals now drawn ± ~1.96 × standard error. New function difference_smooths() computing differences factor smooth interactions. Methods available gam(), bam(), gamm() gamm4::gamm4(). Also draw() method, can handle differences 1D 2D smooths currently (handling 3D 4D smooths planned). New functions add_fitted() add_residuals() add fitted values (expectations) model residuals existing data frame. Currently methods available objects fitted gam() bam(). data_sim() tidy reimplementation mgcv::gamSim() added ability use sampling distributions Gaussian models implemented. Currently Gaussian, Poisson, Bernoulli sampling distributions available. smooth_samples() can handle continuous variable smooths varying coefficient models. link() inv_link() now work families available mgcv, including location, scale, shape families, specialised families described ?mgcv::family.mgcv. evaluate_smooth(), data_slice(), family(), link(), inv_link() methods models fitted using gamm4() gamm4 package. data_slice() can generate data 1-d slice (single variable varying). colour points, reference lines, simulation band appraise() can now specified via arguments point_col, point_alpha, ci_col ci_alpha line_col passed qq_plot(), observed_fitted_plot(), residuals_linpred_plot(), residuals_hist_plot(), also now take new arguments applicable. Added utility functions is_factor_term() term_variables() working models. is_factor_term() identifies named term factor using information terms() object fitted model. term_variables() returns character vector variable names involved model term. strictly working parametric terms models. appraise() now works models fitted glm() lm(), underlying functions calls, especially qq_plot. appraise() also works models fitted family gaulss(). location scale models models fitted extended family functions supported upcoming releases.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-4-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.4.0","text":"datagen() now internal function longer exported. Use data_slice() instead. evaluate_parametric_term() now much stricter can evaluate main effect terms, .e. whose order, stored terms object model 1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-4-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.4.0","text":"draw() method derivatives() getting x-axis label factor smooths correctly, instead using NA second subsequent levels factor. datagen() method class \"gam\" couldn’t possibly worked anything simplest models fail even simple factor smooths. issues fixed, behaviour datagen() changed, function now intended use users. Fixed issue models terms form factor1:factor2 incorrectly identified numeric parametric terms. #68","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-031","dir":"Changelog","previous_headings":"","what":"gratia 0.3.1","title":"gratia 0.3.1","text":"CRAN release: 2020-03-29","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-3-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.3.1","text":"New functions link() inv_link() access link function inverse fitted models family functions. Methods classes: \"glm\", \"gam\", \"bam\", \"gamm\" currently. #58 Adds explicit family() methods objects classes \"gam\", \"bam\", \"gamm\". derivatives() now handles non-numeric creating shifted data finite differences. Fixes problem stringsAsFactors = FALSE default R-devel. #64","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-3-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.3.1","text":"Updated gratia work tibble versions >= 3.0","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-030","dir":"Changelog","previous_headings":"","what":"gratia 0.3.0","title":"gratia 0.3.0","text":"CRAN release: 2020-01-19","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-3-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.3.0","text":"gratia now uses mvnfast package random draws multivariate normal distribution (mvnfast::rmvn()). Contributed Henrik Singmann #28 New function basis() generating tidy representations basis expansions mgcv-like definition smooth, e.g. s(), te(), ti(), t2(). basic smooth types also simple draw() method plotting basis. basis() simple wrapper around mgcv::smoothCon() post processing basis model matrix tidy format. #42 New function smooth_samples() draw samples entire smooth functions posterior distribution. Also draw() method plotting posterior samples.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-3-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.3.0","text":"draw.gam() produce empty plots panels parametric terms 2 parametric terms model. Reported @sklayn #39. derivatives() now works factor smooths, including ordered factor smooths. function also now works correctly complex models multiple covariates/smooths. #47 derivatives() also now handles 'fs' smooths. Reported @tomand-uio #57. evaluate_parametric_term() hence draw.gam() fail ziplss() model ) gratia didn’t handle parametric terms models multiple linear predictors correctly, ii) gratia didn’t convert naming convention mgcv terms higher linear predictors. Reported @pboesu #45","code":""}] +[{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported package maintainer, Gavin Simpson (see email address CRAN package page) . complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"something-isnt-working-right-or-generating-an-error","dir":"","previous_headings":"","what":"Something isn’t working right or generating an error","title":"Contributing","text":"something isn’t working, either might expect/want contrary documentation, probably bug missing feature. ’re getting error running {gratia}, ’s also likely bug, opportunity catch use-case wasn’t expecting. First, check issue hasn’t already fixed -development version Github. Install current development version {gratia} R-universe using issue remains, please file issue via Issues page. ’s OK report issue even ’re sure ’s problem, problem better described question, use Discussions page (see ). Feature requests welcome! problem {gratia} hit top TODO list quickly cen provide reproducible example demonstrating problem.","code":"install.packages(\"gratia\", repos = c( \"https://gavinsimpson.r-universe.dev\", \"https://cloud.r-project.org\" ))"},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"got-a-question-want-to-show-how-to-do-something-with-gratia","dir":"","previous_headings":"","what":"Got a question? Want to show how to do something with {gratia}?","title":"Contributing","text":"issue best described question, want know something {gratia}, cool example using {gratia} want share , please consider using Discussions page. ’re sure, can always ask issue Question (Use Q&category) , really bug, can easily create Issue discussion.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"Contributing","text":"Code contributions form Pull Requests always appreciated. suitable workflow: Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//gratia.git Make sure track progress upstream (.e., version gratis gavinsimpson/gratia) git remote add upstream https://github.com/gavinsimpson/gratia.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new feature branch) Push account Submit pull request home base gavinsimpson/gratia","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"development-tools--paradigm--ethos","dir":"","previous_headings":"Code contributions","what":"Development tools / paradigm / ethos","title":"Contributing","text":"Please note following contributing code: {gratia} tightly aligned tidyverse use {dplyr} related packages lot internally developing package. plan replacing code lower-level code using {vctrs}, right now development focus filling functionality package premature optimisation. original aim {gratia} provide {ggplot2} plotting smooths; please stick principle use plotting paradigm. aim {mgcv}-feature complete; {mgcv} can something terms plotting smooths, handling specialists smooths, etc, principle {gratia} support . aim general compatibility {mgcv}; {gratia} deviates {mgcv} things, needs good justification; example {gratia} deviates multivariate isotropic smooths fitted s() plotted, Dave Miller (@dill) argued convincingly way. Don’t add dependencies! Unless accompanied strong justification, want reduce dependencies increase number. ’m using {styler} style code, using 2 spaces indent. code written change, however. Respect 80 character line length limit. contribute functionality fix bug, please add test using {testthat} framework insure new things works correctly bug stays fixed. contributions must result new NOTES, WARNINGS, ERRORS running R CMD check ---cran; please check contributions Winbuilder example.","code":""},{"path":"https://gavinsimpson.github.io/gratia/CONTRIBUTING.html","id":"email","dir":"","previous_headings":"","what":"Email","title":"Contributing","text":"hate email! can email GMail address — ’s like can stop :-) — unless capture attention immediately label message {gratia}-related, quickly get swamped never seen . Even label , ’s guarantee ever get round replying; usually happens ’ll forget don’t remember check gratia label often. end result email , get response , tardy. infinitely better use Discussions Issues pages Github ask questions package report problems. Please don’t email work (academic) address (email address might find ) {gratia}. question GAMs, much better ask CrossValidated StackOverflow depending whether question statistical programming related. relates {gratia} can use Discussions page. Asking question public allows others reply public, contributes body knowledge easily available others. circumstances send email multiple addresses; quickest way get message trash.","code":""},{"path":"https://gavinsimpson.github.io/gratia/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"The MIT License (MIT)","title":"The MIT License (MIT)","text":"Copyright (c) 2013-2024 Gavin L. Simpson Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Customizing plots","text":"draw() function {gratia} envisaged ggplot-based alternative mgcv:::plot.gam(). , never intended allow sorts customization possible ggplot() packages use ggplot() plotting layer. largely due decision produce multiple separate ggplot() plots GAMs multiple smooths, subsequently combined single figure device, initially using {cowplot} recently {patchwork}. things way evident consider might represent smooths 3 4 variables (common might think; consider space-time models via te(x, y, time, d = c(2,1)) space-depth-time models [think ocean atmospheric data space depth (height), observed time] via te(x, y, depth, time, d = c(2, 1, 1))), require facets top produce small multiples, means can’t use facets plot separate smooths. Additional complications arise consider complex smooth types, splines sphere, might want us different coordinate systems geoms best represent underlying smooth. gone root combining multiple ggplot objects single figure, problem customizing plots quickly rears head. vignette presents solutions problem modifying adding plots produced draw() culminating example illustrating use {gratia}’s utility functions produce plots lower-lever components.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"adding-layers-to-plots-with-the-operator","dir":"Articles","previous_headings":"","what":"Adding layers to plots with the & operator","title":"Customizing plots","text":"start simulating data fitting GAM four smooth functions default plot produced draw() want change theme plots, can’t append theme() layer p affects last plot patchwork1 One way apply theme plots patchwork & operator.","code":"library(\"gratia\") library(\"mgcv\") #> Loading required package: nlme #> This is mgcv 1.9-1. For overview type 'help(\"mgcv-package\")'. library(\"ggplot2\") library(\"dplyr\") #> #> Attaching package: 'dplyr' #> The following object is masked from 'package:nlme': #> #> collapse #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union library(\"patchwork\") # simulate data n <- 400 eg1 <- data_sim(\"eg1\", n = n, seed = 1) # fit model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = eg1, method = \"REML\") p <- draw(m) p p + theme_bw() p & theme_bw()"},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"combining-individual-plots-produced-by-draw","dir":"Articles","previous_headings":"","what":"Combining individual plots produced by draw()","title":"Customizing plots","text":"draw() methods like draw.gam() return object created patchwork::wrap_plots(), result isn’t straightforward combine objects new patchwork avoid error, need use patchwork::plot_layout() set dimensions want achieved directly via draw() instructive know combine outputs draw() need arise, want create patchwork plots different models.","code":"p1 <- draw(m, select = \"s(x0)\") p2 <- draw(m, select = \"s(x1)\") p3 <- draw(m, select = \"s(x2)\") p1 + p2 + p3 #> Error in `wrap_dims()`: #> ! Need 3 panels, but together `nrow` and `ncol` only provide 1. #> ℹ Please increase `ncol` and/or `nrow`. p1 + p2 + p3 + plot_layout(ncol = 3) draw(m, select = c(\"s(x0)\", \"s(x1)\", \"s(x2)\"), ncol = 3)"},{"path":"https://gavinsimpson.github.io/gratia/articles/custom-plotting.html","id":"building-your-own-plot-by-hand","dir":"Articles","previous_headings":"","what":"Building your own plot by hand","title":"Customizing plots","text":"{gratia} provides high-level functions like draw() get good graphical overview fitted model, little option customisation — isn’t possible desirable allow possible customisation options fatures {ggplot2} single function. Think many arguments require! Instead, {gratia} also exports lower-level functions used draw() can create plot using whatever {ggplot2} functions make sense. next code blocks ’ll see plot created draw(m) can recreated hand using lower-level building blocks. main thing need evaluate smooths values covariates. done using smooth_estimates(). also need add credible interval evaluations, can done tidyverse-style via add_confint() default draw.gam() add partial residuals partial effects plots. achieve effect, need add partial residuals data used fit model. can done via add_partial_residuals() will2 add columns names \"s(x0)\". \"s(x1)\", etc. data. Now everything need recreate plots created draw.gam(). code block filter sm focus specific smooth, f(x2)f(x2) (\"s(x2)\"), add rug plot observed values x2, credible interval around estimated smooth, partial residuals point layer, estimated smooth line layer, annotation Assuming repeat steps smooths, creating plot objects p_sx0, p_sx1, p_sx2, p_sx3 (code shown), can complete plot creating patchwork desired number rows columns real benefit complete control data plotted can use power {ggplot2} map additional variables plot aesthetics. example, let’s assume factor variable original data want colour partial residuals according levels factor. Let’s create factor Now can modify plotting code map fac colour aesthetic plot partial residuals. save typing, ’ll reorder layers plot add partial residuals last can also simple model checking plotting smooth partial residuals coloured according one covariates (also plotting actual residuals covariates). code chunk , map covariate x1 colour size aesthetics (note deleted cex = 1.5 allow mapping size) resulting plot doesn’t show particular problems model way data simulated, hopefully illustrates can possible use low-level functions provided {gratia}.","code":"# evaluate the smooths sm <- smooth_estimates(m) |> add_confint() sm #> # A tibble: 400 × 11 #> .smooth .type .by .estimate .se x0 x1 x2 x3 .lower_ci #> #> 1 s(x0) TPRS NA -0.929 0.422 0.0131 NA NA NA -1.76 #> 2 s(x0) TPRS NA -0.881 0.396 0.0230 NA NA NA -1.66 #> 3 s(x0) TPRS NA -0.834 0.372 0.0329 NA NA NA -1.56 #> 4 s(x0) TPRS NA -0.786 0.348 0.0429 NA NA NA -1.47 #> 5 s(x0) TPRS NA -0.738 0.326 0.0528 NA NA NA -1.38 #> 6 s(x0) TPRS NA -0.690 0.305 0.0627 NA NA NA -1.29 #> 7 s(x0) TPRS NA -0.643 0.287 0.0727 NA NA NA -1.20 #> 8 s(x0) TPRS NA -0.595 0.270 0.0826 NA NA NA -1.12 #> 9 s(x0) TPRS NA -0.548 0.255 0.0925 NA NA NA -1.05 #> 10 s(x0) TPRS NA -0.501 0.242 0.102 NA NA NA -0.975 #> # ℹ 390 more rows #> # ℹ 1 more variable: .upper_ci # add partial residuals to data eg1 <- eg1 |> add_partial_residuals(m) names(eg1) #> [1] \"y\" \"x0\" \"x1\" \"x2\" \"x3\" \"f\" \"f0\" \"f1\" \"f2\" #> [10] \"f3\" \"s(x0)\" \"s(x1)\" \"s(x2)\" \"s(x3)\" p_sx2 <- sm |> filter(.smooth == \"s(x2)\") |> ggplot() + geom_rug(aes(x = x2), data = eg1, sides = \"b\", length = grid::unit(0.02, \"npc\") ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, x = x2), alpha = 0.2 ) + geom_point(aes(x = x2, y = `s(x2)`), data = eg1, cex = 1.5, colour = \"steelblue3\" ) + geom_line(aes(x = x2, y = .estimate), lwd = 1.2) + labs(y = \"Partial effect\", title = \"s(x2)\") p_sx2 p_sx0 + p_sx1 + p_sx2 + p_sx3 + plot_layout(ncol = 2) set.seed(12) eg1 <- eg1 |> mutate(fac = sample(letters[1:4], n(), replace = TRUE)) plt <- sm |> filter(.smooth == \"s(x2)\") |> ggplot() + geom_rug(aes(x = x2), data = eg1, sides = \"b\", length = grid::unit(0.02, \"npc\") ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, x = x2), alpha = 0.2 ) + geom_line(aes(x = x2, y = .estimate), lwd = 1.2) + labs(y = \"Partial effect\", title = \"s(x2)\") plt + geom_point( aes( x = x2, y = `s(x2)`, colour = fac ), # <-- map fac to colour aesthetic data = eg1, cex = 1.5 ) plt + geom_point( aes( x = x2, y = `s(x2)`, colour = x1, size = x1 ), # <-- map fac to colour aesthetic data = eg1, alpha = 0.3 ) + # <-- deleted cex!! scale_colour_viridis_c(option = \"plasma\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"carbon-dioxide-uptake-in-grass-plants","dir":"Articles","previous_headings":"","what":"Carbon Dioxide Uptake in Grass Plants","title":"Data slices","text":"first example uses small data set experimental study cold tolerance grass Echinochloa crusgalli. data data frame CO2 provided {datasets} package ships R. One way model data allow different smooths combinations treatment type covariates can look fitted smooths using draw() might want compare model fitted values treatment types (origins), ignoring random effect component. want evaluate model range values covariate conc combinations factors. data slice covariate space, can create using data_slice(). create data slice conc Quebec type chilled treatment use Notice data_slice() filled something remaining covariates didn’t mention? case, data_slice() doesn’t know tt created, chosen modal level tt factor, correct choice case. Instead, need specify correct level explicitly tt created data slice, can predict model using combination covariate values specified slice. use predict.gam() , fitted_values() function {gratia} easier use, especially non-Gaussian models Notice excluded random effect term; even though specify something plant covariate can ignore term model using exclude argument. fitted_values() creates credible interval scale link function back-transforms response scale scale = \"response\", also default. Plotting fitted values data slice now requires simple {ggplot2} knowledge Next, let’s compare fitted effects treatment Mississippi origin plants , replaced automatically-generated tt variable correctly specified call fct_cross(), retaining levels type treatment factors. insures correct combinations corresponding treatment type factors also preserve original levels tt covariate created. can visualise fitted values data slice creating data slices, used helper functions specify covariate values slice. {gratia} provides several helper functions: evenly(x, n = 100) — creates n evenly spaced values range covariate, evenly(x, = 5 — creates evenly spaced values range covariate increments 5, evenly(x, ..., lower = 5, upper = 10) — either two uses evenly() shown use lower upper limits vector x. Arguments lower upper can used change one upper lower bounds. evenly(fct) — produces new factor containing level specified factor fct just , ref_level(fct) — creates new factor containing just reference level specified factor covariate fct, level(fct, \"level\") — creates factor requested \"level\" factor fct. cases involving factors, helper functions set levels factor match original model fit2. second argument data_slice() ... ... argument allows provide expressions create covariate values want data slice. Expressions passed ... evaluated within model frame fitted model (argument object) data (supplied). restricted either using helper functions provide {gratia}; R function used long makes sense context model frame, returns something can combined using tidyr::expand_grid().","code":"## data load and prep data(CO2, package = \"datasets\") plant <- CO2 |> as_tibble() |> rename(plant = Plant, type = Type, treatment = Treatment) |> mutate(plant = factor(plant, ordered = FALSE)) plant_ylab <- expression(CO[2] ~ uptake ~ (mu * mol ~ m^{-3})) plant_xlab <- expression(CO[2] ~ concentration ~ (mL ~ L^{-1})) plant |> ggplot(aes(x = conc, y = uptake, group = plant, colour = treatment)) + geom_point() + geom_line() + facet_wrap(~type) + labs(y = plant_ylab, x = plant_xlab, colour = \"Treatment\") plant <- plant |> mutate(tt = fct_cross(treatment, type)) m_plant <- gam(uptake ~ treatment * type + s(conc, by = tt, k = 6) + s(plant, bs = \"re\"), data = plant, method = \"REML\", family = Gamma(link = \"log\") ) overview(m_plant) #> #> Generalized Additive Model with 8 terms #> #> term type k edf statistic p.value #> #> 1 treatment parametric NA 1 1.59 0.2124864 #> 2 type parametric NA 1 11.2 0.0014830 #> 3 treatment:type parametric NA 1 7.45 0.0085489 #> 4 s(conc):ttnonchilled:Quebec TPRS 5 4.72 69.7 < 0.001 #> 5 s(conc):ttchilled:Quebec TPRS 5 4.71 86.5 < 0.001 #> 6 s(conc):ttnonchilled:Mississippi TPRS 5 4.62 74.1 < 0.001 #> 7 s(conc):ttchilled:Mississippi TPRS 5 4.39 25.3 < 0.001 #> 8 s(plant) Random effect 12 7.40 12.8 < 0.001 draw(m_plant, residuals = TRUE, scales = \"fixed\") ds1 <- data_slice(m_plant, conc = evenly(conc, n = 100), type = level(type, \"Quebec\"), treatment = level(treatment, \"chilled\") ) ds1 #> # A tibble: 100 × 5 #> conc type treatment tt plant #> #> 1 95 Quebec chilled nonchilled:Quebec Qn1 #> 2 104. Quebec chilled nonchilled:Quebec Qn1 #> 3 113. Quebec chilled nonchilled:Quebec Qn1 #> 4 122. Quebec chilled nonchilled:Quebec Qn1 #> 5 132. Quebec chilled nonchilled:Quebec Qn1 #> 6 141. Quebec chilled nonchilled:Quebec Qn1 #> 7 150. Quebec chilled nonchilled:Quebec Qn1 #> 8 159. Quebec chilled nonchilled:Quebec Qn1 #> 9 168. Quebec chilled nonchilled:Quebec Qn1 #> 10 177. Quebec chilled nonchilled:Quebec Qn1 #> # ℹ 90 more rows ds1 <- data_slice(m_plant, conc = evenly(conc, n = 100), treatment = level(treatment, \"chilled\"), type = level(type, \"Quebec\"), tt = level(tt, \"chilled:Quebec\") ) ds1 #> # A tibble: 100 × 5 #> conc treatment type tt plant #> #> 1 95 chilled Quebec chilled:Quebec Qn1 #> 2 104. chilled Quebec chilled:Quebec Qn1 #> 3 113. chilled Quebec chilled:Quebec Qn1 #> 4 122. chilled Quebec chilled:Quebec Qn1 #> 5 132. chilled Quebec chilled:Quebec Qn1 #> 6 141. chilled Quebec chilled:Quebec Qn1 #> 7 150. chilled Quebec chilled:Quebec Qn1 #> 8 159. chilled Quebec chilled:Quebec Qn1 #> 9 168. chilled Quebec chilled:Quebec Qn1 #> 10 177. chilled Quebec chilled:Quebec Qn1 #> # ℹ 90 more rows fv1 <- fitted_values(m_plant, data = ds1, scale = \"response\", exclude = \"s(plant)\") fv1 #> # A tibble: 100 × 10 #> .row conc treatment type tt plant .fitted .se .lower_ci .upper_ci #> #> 1 1 95 chilled Quebec chille… Qn1 13.0 0.0783 11.2 15.2 #> 2 2 104. chilled Quebec chille… Qn1 14.1 0.0757 12.1 16.3 #> 3 3 113. chilled Quebec chille… Qn1 15.2 0.0737 13.1 17.5 #> 4 4 122. chilled Quebec chille… Qn1 16.3 0.0722 14.2 18.8 #> 5 5 132. chilled Quebec chille… Qn1 17.6 0.0714 15.3 20.2 #> 6 6 141. chilled Quebec chille… Qn1 18.9 0.0711 16.4 21.7 #> 7 7 150. chilled Quebec chille… Qn1 20.2 0.0712 17.6 23.3 #> 8 8 159. chilled Quebec chille… Qn1 21.6 0.0716 18.8 24.9 #> 9 9 168. chilled Quebec chille… Qn1 23.0 0.0721 20.0 26.5 #> 10 10 177. chilled Quebec chille… Qn1 24.4 0.0726 21.2 28.1 #> # ℹ 90 more rows fv1 |> ggplot(aes(x = conc, y = .fitted)) + geom_point( data = plant |> filter(type == \"Quebec\", treatment == \"chilled\"), mapping = aes(y = uptake), alpha = 0.8, colour = \"steelblue\" ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( x = plant_xlab, y = plant_ylab, title = expression(Estimated ~ CO[2] ~ uptake), subtitle = \"Chilled plants of the Quebec type\" ) ds2 <- data_slice(m_plant, conc = evenly(conc, n = 100), treatment = evenly(treatment), type = level(type, \"Mississippi\") ) |> mutate(tt = fct_cross(treatment, type, keep_empty = TRUE)) ds2 #> # A tibble: 200 × 5 #> conc treatment type tt plant #> #> 1 95 nonchilled Mississippi nonchilled:Mississippi Qn1 #> 2 95 chilled Mississippi chilled:Mississippi Qn1 #> 3 104. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 4 104. chilled Mississippi chilled:Mississippi Qn1 #> 5 113. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 6 113. chilled Mississippi chilled:Mississippi Qn1 #> 7 122. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 8 122. chilled Mississippi chilled:Mississippi Qn1 #> 9 132. nonchilled Mississippi nonchilled:Mississippi Qn1 #> 10 132. chilled Mississippi chilled:Mississippi Qn1 #> # ℹ 190 more rows fitted_values(m_plant, data = ds2, scale = \"response\", exclude = \"s(plant)\" ) |> ggplot(aes(x = conc, y = .fitted, group = treatment)) + geom_point( data = plant |> filter(type == \"Mississippi\"), mapping = aes(y = uptake, colour = treatment), alpha = 0.8 ) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = treatment), alpha = 0.2 ) + geom_line(aes(colour = treatment)) + labs( x = plant_xlab, y = plant_ylab, title = expression(Estimated ~ CO[2] ~ uptake), subtitle = \"Comparison of treatment in plants of the Mississippi type\", colour = \"Treatment\", fill = \"Treatment\" ) args(gratia:::data_slice.gam) #> function (object, ..., data = NULL, envir = NULL) #> NULL"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"slices-through-a-2d-smooth","dir":"Articles","previous_headings":"","what":"Slices through a 2D smooth","title":"Data slices","text":"second example, ’ll use bivariate example data set {mgcv} fit tensor product covariates x z aim example create univariate data slice 2D smooth user-specified values x holding z one fixed values. visualise effect smooth level, using smooth_estimates(), response level, using fitted_values().","code":"# simulate data from the bivariate surface df <- data_sim(\"eg2\", n = 1000, scale = 0.25, seed = 2) # fit the GAM m_biv <- gam(y ~ te(x, z), data = df, method = \"REML\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"using-smooth_estimates","dir":"Articles","previous_headings":"Slices through a 2D smooth","what":"Using smooth_estimates()","title":"Data slices","text":"begin creating slice data space. also create label point nice axis label. evaluate smooth desired values add confidence interval can plot sm using {ggplot2} Note interval Marra Wood (2012) interval. doesn’t include uncertainty model constant term moment, unless smooth close linear shouldn’t make much difference. extends multiple slices asking several discrete z","code":"ds3 <- data_slice(m_biv, x = evenly(x, n = 100), z = quantile(z, probs = 0.25) ) z_val <- with(ds3, round(quantile(z, probs = 0.25), 2)) ylab <- bquote(hat(f)(x, .(z_val))) sm <- smooth_estimates(m_biv, select = \"te(x,z)\", data = ds3) |> add_confint() sm #> # A tibble: 100 × 9 #> .smooth .type .by .estimate .se x z .lower_ci .upper_ci #> #> 1 te(x,z) Tensor prod… NA 0.103 0.0583 6.63e-4 0.245 -0.0107 0.218 #> 2 te(x,z) Tensor prod… NA 0.122 0.0548 1.08e-2 0.245 0.0148 0.230 #> 3 te(x,z) Tensor prod… NA 0.141 0.0514 2.08e-2 0.245 0.0400 0.242 #> 4 te(x,z) Tensor prod… NA 0.159 0.0482 3.09e-2 0.245 0.0648 0.254 #> 5 te(x,z) Tensor prod… NA 0.177 0.0451 4.10e-2 0.245 0.0890 0.266 #> 6 te(x,z) Tensor prod… NA 0.195 0.0422 5.11e-2 0.245 0.113 0.278 #> 7 te(x,z) Tensor prod… NA 0.213 0.0396 6.12e-2 0.245 0.135 0.291 #> 8 te(x,z) Tensor prod… NA 0.230 0.0372 7.13e-2 0.245 0.157 0.303 #> 9 te(x,z) Tensor prod… NA 0.247 0.0351 8.14e-2 0.245 0.178 0.316 #> 10 te(x,z) Tensor prod… NA 0.263 0.0333 9.14e-2 0.245 0.198 0.328 #> # ℹ 90 more rows sm |> ggplot(aes(x = x, y = .estimate)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Evaluation of smooth te(x,z) at fixed z\", y = ylab ) ds4 <- data_slice(m_biv, x = evenly(x, n = 100), z = round(quantile(z, probs = c(0.25, 0.5, 0.75)), 2) ) sm <- smooth_estimates(m_biv, select = \"te(x,z)\", data = ds4) |> add_confint() |> mutate(fz = factor(z)) sm |> ggplot(aes(x = x, y = .estimate, colour = fz, group = fz)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = fz, colour = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Evaluation of smooth te(x,z) at fixed z\", y = expression(hat(f)(x, z)), colour = \"z\", fill = \"z\" )"},{"path":"https://gavinsimpson.github.io/gratia/articles/data-slices.html","id":"using-fitted_samples","dir":"Articles","previous_headings":"Slices through a 2D smooth","what":"Using fitted_samples()","title":"Data slices","text":"want evaluate surface x fixed z conditional upon values covariates (model predicted fitted values) fitted_samples() tidy wrapper predict.gam(). single z multiple z difference now model constant included well uncertainty.","code":"fitted_values(m_biv, data = ds3) |> # default is response scale, not link ggplot(aes(x = x, y = .fitted)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Fitted values from model\", y = expression(hat(y)) ) fitted_values(m_biv, data = ds4) |> mutate(fz = factor(z)) |> ggplot(aes(x = x, y = .fitted, colour = fz, group = fz)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, fill = fz, colour = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Fitted values from model\", y = expression(hat(y)), colour = \"z\", fill = \"z\" )"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"plotting","dir":"Articles","previous_headings":"","what":"Plotting","title":"Getting started with gratia","text":"gratia provides draw() function produce plots using ggplot2 📦. plot estimated smooths GAM fitted , use plots produced partial effect plots, show component contributions, link scale, model term linear predictor. y axis plots typically centred around 0 due smooths sum--zero identifiability constraint applied . constraint allows model include multiple smooths remain identifiable. plots allow read contributions smooth fitted response (link scale); show link-scale predictions response smooth, conditional upon terms model, including parametric effects intercept, zero contribution. parlance marginaleffects package (Arel-Bundock, Greifer, Heiss Forthcoming), plots show adjusted predictions, just adjustment includes setting contribution model terms predicted value zero. partial derivatives (marginaleffects call marginal effect slope), gratia provides derivatives(). resulting plot intended reasonable overview estimated model, offers limited option modify resulting plot. want full control, can obtain data used create plot smooth_estimates() evaluate smooths values evenly spaced range covariate(s). want evaluate selected smooths, can specify via smooth argument. takes smooth labels names smooths known mgcv. list labels smooths use evaluate f(x2)f(x_2) use can generate plot using ggplot2 package, example","code":"draw(m) sm <- smooth_estimates(m) sm #> # A tibble: 400 × 9 #> .smooth .type .by .estimate .se x0 x1 x2 x3 #> #> 1 s(x0) TPRS NA -1.32 0.390 0.000239 NA NA NA #> 2 s(x0) TPRS NA -1.24 0.365 0.0103 NA NA NA #> 3 s(x0) TPRS NA -1.17 0.340 0.0204 NA NA NA #> 4 s(x0) TPRS NA -1.09 0.318 0.0304 NA NA NA #> 5 s(x0) TPRS NA -1.02 0.297 0.0405 NA NA NA #> 6 s(x0) TPRS NA -0.947 0.279 0.0506 NA NA NA #> 7 s(x0) TPRS NA -0.875 0.263 0.0606 NA NA NA #> 8 s(x0) TPRS NA -0.803 0.249 0.0707 NA NA NA #> 9 s(x0) TPRS NA -0.732 0.237 0.0807 NA NA NA #> 10 s(x0) TPRS NA -0.662 0.228 0.0908 NA NA NA #> # ℹ 390 more rows smooths(m) #> [1] \"s(x0)\" \"s(x1)\" \"s(x2)\" \"s(x3)\" sm <- smooth_estimates(m, smooth = \"s(x2)\") #> Warning: The `smooth` argument of `smooth_estimates()` is deprecated as of gratia #> 0.8.9.9. #> ℹ Please use the `select` argument instead. #> This warning is displayed once every 8 hours. #> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was #> generated. sm #> # A tibble: 100 × 6 #> .smooth .type .by .estimate .se x2 #> #> 1 s(x2) TPRS NA -4.47 0.476 0.00359 #> 2 s(x2) TPRS NA -4.00 0.406 0.0136 #> 3 s(x2) TPRS NA -3.53 0.345 0.0237 #> 4 s(x2) TPRS NA -3.06 0.295 0.0338 #> 5 s(x2) TPRS NA -2.58 0.263 0.0438 #> 6 s(x2) TPRS NA -2.09 0.250 0.0539 #> 7 s(x2) TPRS NA -1.59 0.253 0.0639 #> 8 s(x2) TPRS NA -1.08 0.264 0.0740 #> 9 s(x2) TPRS NA -0.564 0.278 0.0841 #> 10 s(x2) TPRS NA -0.0364 0.289 0.0941 #> # ℹ 90 more rows library(\"ggplot2\") library(\"dplyr\") #> #> Attaching package: 'dplyr' #> The following object is masked from 'package:nlme': #> #> collapse #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union sm |> add_confint() |> ggplot(aes(y = .estimate, x = x2)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2, fill = \"forestgreen\" ) + geom_line(colour = \"forestgreen\", linewidth = 1.5) + labs( y = \"Partial effect\", title = expression(\"Partial effect of\" ~ f(x[2])), x = expression(x[2]) )"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"model-diagnostics","dir":"Articles","previous_headings":"","what":"Model diagnostics","title":"Getting started with gratia","text":"appraise() function provides standard diagnostic plots GAMs plots produced (left--right, top--bottom), quantile-quantile (QQ) plot deviance residuals, scatterplot deviance residuals linear predictor, histogram deviance residuals, scatterplot observed vs fitted values. Adding partial residuals partial effect plots produced draw() can also help diagnose problems model, oversmoothing","code":"appraise(m) draw(m, residuals = TRUE)"},{"path":"https://gavinsimpson.github.io/gratia/articles/gratia.html","id":"want-to-learn-more","dir":"Articles","previous_headings":"","what":"Want to learn more?","title":"Getting started with gratia","text":"gratia active development area development currently lacking documentation. find package, look help pages package look examples code help get going.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"what-are-we-simulating","dir":"Articles","previous_headings":"","what":"What are we simulating?","title":"Posterior Simulation","text":"Posterior simulation involves randomly sampling MVN(𝛃̂,𝐕b)\\text{MVN}(\\hat{\\boldsymbol{\\beta}}, \\mathbf{V}_{\\text{b}}) EF(μi,ϕ)\\text{EF}(\\mu_i, \\phi), . might simulate posterior distribution single estimated smooth function see uncertainty estimate function. simulate just subset βj⋅\\beta_{j \\cdot} associated fjf_j interest. Instead, might interested uncertainty expectation (expected value) model given values covariates, case can simulate 𝛃\\boldsymbol{\\beta} sample posterior 𝔼(yi)\\mathbb{E}(y_i), fitted values model. might want generate new values response variable via draws conditional distribution response, simulating new response data 𝕪*\\mathbb{y}^{\\ast}, either observed 𝐱\\mathbf{x} new values $^{}, yi*|𝛈,𝐱∼EF(μî,ϕ)y^{\\ast}_i | \\boldsymbol{\\eta}, \\mathbf{x} \\sim \\text{EF}(\\hat{\\mu_i}, \\phi). Finally, can combine posterior simulation distributions generate posterior draws new data 𝕪*\\mathbb{y}^{\\ast} also include uncertainty expected values. gratia functionality options following functions smooth_samples() generates draws posterior distribution single estimated smooth functions, fitted_samples() generates draws posterior distribution 𝔼(yi|𝐗i=xi)\\mathbb{E}(y_i | \\mathbf{X}_i = x_i), expected value responss, predicted_samples(), generates new response data given supplied values covariates yi*|𝐗i=xi*y^{\\ast}_i | \\mathbf{X}_i = x^{\\ast}_i posterior_samples(), generates draws posterior distribution model, including uncertainty estimated parameters model. simpler terms, fitted_samples() generates predictions “average” expected value response values covariates. predictions include uncertainty estimated values model coefficients. contrast, posterior_samples() generates predictions actual values response might expect observe (model correct) given values covariates. predicted values include variance sampling distribution (error term). predicted_samples() lies somewhere two; predicted values include variation sampling distribution, take model fixed, known. worth reminding posterior draws conditional upon selected values smoothing parameter(s) λj\\lambda_j. act wiggliness estimated smooths known, actual fact estimated (selected perhaps better description) wiglinesses data model fitting. estimated GAM fitted method argument \"REML\", \"ML\", version 𝐕b\\mathbf{V}_{\\text{b}} corrected selected smoothing parameters, 𝐕c\\mathbf{V}_{\\text{c}}, generally available. allows, extent, posterior simulation account additional source uncertainty chosen values 𝛌\\boldsymbol{\\lambda}. two additional functions available gratia posterior simulation: simulate(), derivative_samples(). gratia provides simulate() methods models estimated using gam(), bam(), gamm(), well fitted via scam() scam package. simulate() base R convention thing predicted_samples(), just non-tidy way (pejorative; returns simulated response values matrix, arguably useful math statistical computation.) derivative_samples() provides draws posterior distribution derivative response variable small change focal covariate value. derivative_samples() less general version fitted_samples(); achieve thing two separate calls fitted_samples(). ’ll reserve discussion derivative_samples() separate vignette focused estimating derivatives GAMs. following sections ’ll look four main posterior simulation functions turn.","code":""},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"posterior-smooths-and-smooth_samples","dir":"Articles","previous_headings":"","what":"Posterior smooths and smooth_samples()","title":"Posterior Simulation","text":"can sample posterior distribution coefficients particular smooth β̂j\\hat{\\beta}_j given values smoothing parameters 𝛌̂\\hat{\\boldsymbol{\\lambda}}. generate posterior samples smooths sampling 𝛃j⋆∼N(β̂j,𝐕β̂j)\\boldsymbol{\\beta}_{j\\star} \\sim N(\\hat{\\beta}_j, \\mathbf{V}_{\\hat{\\beta}_j}) forming 𝐗𝛃̂j𝛃j⋆𝖳\\mathbf{X}_{\\hat{\\boldsymbol{\\beta}}_j} \\boldsymbol{\\beta}_{j\\star}^{\\mathsf{T}}. sampling can done using smooth_samples(). illustrate , ’ll simulate data Gu & Wabha’s 4 smooth example, fit GAM simulated data simulating posterior distribution estimated smooth, sampling coefficients particular smooth. model, coefficients smooth f(x0)f(x_0) stored elements 2 10 coefficients vector. sample posterior distribution coefficients use smooth_samples() choosing particular smooth ’re interested using select argument; want sample smooths posteriors smooths model, select can left default value. Typically ’re bothered particular values covariate evaluate posterior smooths; ask 100 evenly spaced values x0 using n_vals, can provide covariates values via data argument. number posterior smooths sampled controlled argument n; ask 100 samples. Objects returned smooth_samples() draw() method available draw posterior smooths can set n_samples randomly select many smooths draw (seed can provided via argument seed make set chosen smooths repeatable.) credible interval smooth contain smooths. standard 95% credible interval, sampled smooths exceed limits interval. Following Marra & Wood (2012), blue credible interval contain average 95% grey lines (posterior smooths) given value x0x_0. across function frequentist interpretation credible interval implies values x0x_0 coverage less 95% values greater 95%.","code":"ss_df <- data_sim(\"eg1\", seed = 42) m_ss <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = ss_df, method = \"REML\") s_x0 <- get_smooth(m_ss, \"s(x0)\") smooth_coef_indices(s_x0) #> [1] 2 3 4 5 6 7 8 9 10 sm_samp <- smooth_samples(m_ss, select = \"s(x0)\", n_vals = 100, n = 100, seed = 21) sm_samp |> draw(alpha = 0.3) # evaluate the fitted smooth over x0 and add on a credible interval sm_est <- smooth_estimates(m_ss, select = \"s(x0)\") |> add_confint() # plot the smooth, credible interval, and posterior smooths sm_est |> ggplot(aes(x = x0)) + geom_lineribbon(aes(ymin = .lower_ci, ymax = .upper_ci), orientation = \"vertical\", fill = \"#56B4E9\", alpha = 0.5 ) + geom_line( data = sm_samp, aes(y = .value, group = .draw), alpha = 0.2 ) + geom_line(aes(y = .estimate), linewidth = 1, colour = \"#E69F00\") + labs(y = smooth_label(s_x0))"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"posterior-fitted-values-via-fitted_samples","dir":"Articles","previous_headings":"","what":"Posterior fitted values via fitted_samples()","title":"Posterior Simulation","text":"Posterior fitted values draws posterior distribution mean expected value response. expectations returned use predict() estimated GAM, except fitted_samples() includes uncertainty estimated model coefficients, whereas predict() just uses estimated coefficients. example, using data_sim() simulate data example 6 Luo & Wahba (1997) sin(2⋅(4x−2))+2⋅exp(−256⋅(x−0.5)2) \\sin(2 \\cdot (4x - 2)) + 2 \\cdot \\exp(-256 \\cdot (x - 0.5)^2) data fit adaptive smoother Next create data slice 200 values interval (0,1) ’ll predict model generate posterior fitted values compute fitted values new data posterior fitted values drawn fitted_samples() using Gaussian approximation posterior. just take 10 draws posterior observation new_df merge posterior draws data Adding posterior fitted samples plot data, superimposing Bayesian credible interval fitted values see posterior draws largely contained credible interval. difference smooth_samples() now ’re including effects model terms. simple model single smooth identity link, difference model constant term uncertainty included samples.","code":"f <- function(x) { sin(2 * ((4 * x) - 2)) + (2 * exp(-256 * (x - 0.5)^2)) } df <- data_sim(\"lwf6\", dist = \"normal\", scale = 0.3, seed = 2) plt <- df |> ggplot(aes(x = x, y = y)) + geom_point(alpha = 0.5) + geom_function(fun = f) plt m <- gam(y ~ s(x, k = 25, bs = \"ad\"), data = df, method = \"REML\") new_df <- data_slice(m, x = evenly(x, lower = 0, upper = 1, n = 200)) |> mutate(.row = row_number()) fv <- fitted_values(m, data = new_df) fs <- fitted_samples(m, data = new_df, n = 10, seed = 4) |> left_join(new_df |> select(.row, x), by = join_by(.row == .row)) plt + geom_ribbon(data = fv, aes(y = .fitted, ymin = .lower_ci, ymax = .upper_ci), fill = \"red\", alpha = 0.3) + geom_line(data = fs, aes(group = .draw, x = x, y = .fitted), colour = \"yellow\", alpha = 0.4)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"distributional-gams","dir":"Articles","previous_headings":"Additional examples","what":"Distributional GAMs","title":"Posterior Simulation","text":"possible, predicted_samples() posterior_samples() also work distributional GAMs. possible suitable random number generator available family object stored within model. illustrate, reuse example Matteo Fasiolo, author mgcViz package, based classic mcycle data set MASS package. loading data adding row number variable use late data fit standard Gaussian GAM conditional mean accel. Next, simulate n_sim new response values observed data using predicted_samples() comments briefly indicate dplyr code . Now can plot observed simulated data resulting plot shown left-hand panel figure . clearly problem ; simulated data don’t look much like observations 15ms immediately impact ~45ms impact. due model fitted conditional mean accel. Instead, model conditional mean conditional variance data, linear predictors parameters Gaussian distribution Simulating new data follows using code earlier benefit data wrangling now realised can replace data plot created earlier simulations distribution GAM, plot plot simulated response data distributional GAM shown right hand panel plot. Now, much less disagreement observed data can produce fitted mdoel.","code":"data(mcycle, package = \"MASS\") mcycle <- mcycle |> mutate( .row = row_number() ) |> relocate(.row, .before = 1L) m_gau <- gam(accel ~ s(times, k = 20), data = mcycle, method = \"REML\" ) n_sim <- 10 n_data <- nrow(mcycle) sim_gau <- predicted_samples(m_gau, n = n_sim, seed = 10) |> left_join(mcycle |> select(-accel), # join on the observed data for times by = \".row\" ) |> rename(accel = .response) |> # rename bind_rows(mcycle |> relocate(.after = last_col())) |> # bind on observer data mutate( # add indicator: simulated or observed type = rep(c(\"simulated\", \"observed\"), times = c(n_sim * n_data, n_data) ), .alpha = rep( # set alpha values for sims & observed c(0.2, 1), time = c(n_sim * n_data, n_data) ) ) plt_labs <- labs( x = \"Time after impact [ms]\", y = \"Acceleration [g]\" ) plt_gau <- sim_gau |> ggplot(aes(x = times)) + geom_point(aes(y = accel, colour = type, alpha = .alpha)) + plt_labs + scale_colour_okabe_ito(order = c(6, 5)) + scale_alpha_identity() + theme(legend.position = \"bottom\") m_gaulss <- gam( list(accel ~ s(times, k = 20, bs = \"tp\"), ~ s(times, bs = \"tp\") ), data = mcycle, family = gaulss() ) sim_gaulss <- predicted_samples(m_gaulss, n = n_sim, seed = 20) |> left_join(mcycle |> select(-accel), by = \".row\" ) |> rename(accel = .response) |> bind_rows(mcycle |> relocate(.after = last_col())) |> mutate( type = rep(c(\"simulated\", \"observed\"), times = c(n_sim * n_data, n_data) ), .alpha = rep(c(0.2, 1), time = c(n_sim * n_data, n_data)) ) plt_gaulss <- plt_gau %+% sim_gaulss plt_gau + plt_gaulss + plot_annotation(tag_levels = \"a\") + plot_layout(guides = \"collect\", ncol = 2)"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"prediction-intervals","dir":"Articles","previous_headings":"Additional examples","what":"Prediction intervals","title":"Posterior Simulation","text":"One use posterior simulation generate prediction intervals fitted model. Prediction intervals include two sources uncertainty; estimated model , plus sampling uncertainty error arises drawing observations conditional distribution response. example, Gaussian GAM, first source uncertainty comes uncertainty estimates βj\\beta_j, model coefficients. uncertainty mean expected value response. second source uncertainty stems error term, estimated variance response. two parameters define conditional distribution YiY_i. value covariate(s) 𝐗\\mathbf{X}, estimated model defines entire distribution response values might expect observe covariate values. illustrate, ’ll fit simple GAM single smooth function data simulate Gu & Wabha’s function f2f_2 using data_sim(). simulate 400 values Gaussian distribution variance σ2=1\\sigma^2 = 1. simulated data, true function generated shown GAM data contains single smooth function x consider new value covariate x, x*=0.5x^{\\ast} = 0.5, expected value response given model, 𝔼(y*|x=x*)\\mathbb{E}(y^{*} | x = x^{*}), ~2.92, obtain using predict() value mean Gaussian distribution , model correct description data, describes distribution values YY might take x=0.5x = 0.5. Gaussian distribution defined two parameters; mean, μ\\mu, describes middle distribution, variance, σ2\\sigma^2, describes spread distribution mean. fully describe Gaussian distribution response x=0.5x = 0.5, need estimate variance. didn’t model explicitly GAM, get estimate model’s scale parameter, ϕ\\phi. stored element scale model object can visualise distribution looks like magic ggdist package orange region shows expected density response values x*=0.5x^{\\ast} = 0.5 model predicts expect observe. region assumes uncertainty estimate mean variance. Prediction intervals take account variation expected value, plus uncertainty expected value. fitted_values() conveniently returns uncertainty us, default 95% credible interval .se column standard error (standard deviation) estimated value (.fitted), .lower_ci .upper_ci lower upper uncertainty bounds (95% level) estimated value respectively. GAMs fitted mgcv don’t corresponding estimate uncertainty scale parameter, ϕ\\phi, model estimated standard deviation σ̂\\hat{\\sigma}. pretty easy compute upper lower tail quantiles fitted Gaussian distribution range values x get prediction interval, ’d ignoring uncertainty model estimates mean. Posterior simulation provides simple convenient way generate prediction interval includes model uncertainty, works principle families available mgcv (although practice, families currently supported gratia). compute prediction interval x GAM, creating set data evenly range x observed data used fit model added variable .row used later match posterior simulated values row prediction data set ds. also compute fitted values new observations using fitted_values(). step isn’t required order posterior simulation gratia, ’ll use fitted values later show model estimated values uncertainty contrast prediction interval. use posterior_samples() generate new response data new x values ds use join add prediction data draw asked 10000 posterior draws new value x. Ideally ’d generate least three four times many draws get precise estimate prediction interval, keep number low vignette avoid excessive computation time. ’re also using smoothness parameter selection corrected version Bayesian covariance matrix; matrix adjusted account us knowing value smoothing parameter f(xi)f(x_i). ps tibble, n * nrow(ds) rows. .draw variable groups simulated values posterior draw, .row groups posterior draws value x. summarise posterior draws using {dplyr} need function compute quantiles posterior distribution value x (.row). following function simple wrapper around quantile() function base R, arranges output quantile() data frame. apply function set posterior draws, grouping .row summarise separately posterior distribution new value x. reframe() used summarise posterior using quantile_fun() function. ease use, pivot resulting summary long wide format add covariate values joining .row variable 95% prediction interval shown first 10 rows prediction data. column labelled .q50 median posterior distribution. can now use various objects produced plot fitted values model (uncertainties), well prediction intervals just generated. add observed data used fit model black points, summarise posterior samples (ps) using hexagonal binning (avoid plotting 2 million posterior samples) outermost pair blue lines plot prediction interval created. interval encloses, expected, almost observe data points. also encloses, design, posterior samples, indicated filled hexagonal bins, warmer colours indicating larger counts posterior draws.","code":"df <- data_sim(\"gwf2\", n = 400, scale = 1, dist = \"normal\", seed = 8) df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_function(fun = gw_f2, colour = \"#0072B2\", linewidth = 1.5) m <- gam(y ~ s(x), data = df, method = \"REML\", family = gaussian()) mu <- predict(m, newdata = data.frame(x = 0.5)) mu #> 1 #> 2.919094 sigma <- m$scale sigma #> [1] 1.019426 df |> ggplot(aes(x = x, y = y)) + stat_halfeye(aes(ydist = dist_normal(mean = mu, sd = sigma)), x = 0.5, scale = 0.2, slab_fill = \"#E69F00\", slab_alpha = 0.7 ) + geom_point() + geom_function(fun = gw_f2, colour = \"#0072B2\", linewidth = 1.5) + geom_point(x = 0.5, y = mu, colour = \"red\") fitted_values(m, data = data.frame(x = 0.5)) #> # A tibble: 1 × 6 #> .row x .fitted .se .lower_ci .upper_ci #> #> 1 1 0.5 2.92 0.161 2.60 3.23 ds <- data_slice(m, x = evenly(x, n = 200)) |> mutate(.row = row_number()) fv <- fitted_values(m, data = ds) ps <- posterior_samples(m, n = 10000, data = ds, seed = 24, unconditional = TRUE) |> left_join(ds, by = join_by(.row == .row)) ps #> # A tibble: 2,000,000 × 4 #> .row .draw .response x #> #> 1 1 1 -1.34 0.00129 #> 2 2 1 -0.0495 0.00629 #> 3 3 1 0.0308 0.0113 #> 4 4 1 -0.783 0.0163 #> 5 5 1 0.861 0.0213 #> 6 6 1 0.475 0.0263 #> 7 7 1 0.858 0.0313 #> 8 8 1 0.143 0.0363 #> 9 9 1 -0.0344 0.0413 #> 10 10 1 1.04 0.0463 #> # ℹ 1,999,990 more rows quantile_fun <- function(x, probs = c(0.025, 0.5, 0.975), ...) { tibble::tibble( .value = quantile(x, probs = probs, ...), .q = probs * 100 ) } p_int <- ps |> group_by(.row) |> reframe(quantile_fun(.response)) |> pivot_wider( id_cols = .row, names_from = .q, values_from = .value, names_prefix = \".q\" ) |> left_join(ds, by = join_by(.row == .row)) p_int #> # A tibble: 200 × 5 #> .row .q2.5 .q50 .q97.5 x #> #> 1 1 -2.84 -0.847 1.25 0.00129 #> 2 2 -2.70 -0.651 1.41 0.00629 #> 3 3 -2.50 -0.434 1.62 0.0113 #> 4 4 -2.24 -0.207 1.83 0.0163 #> 5 5 -2.04 -0.0197 2.01 0.0213 #> 6 6 -1.81 0.191 2.25 0.0263 #> 7 7 -1.59 0.391 2.41 0.0313 #> 8 8 -1.38 0.594 2.60 0.0363 #> 9 9 -1.20 0.831 2.84 0.0413 #> 10 10 -0.935 1.06 3.04 0.0463 #> # ℹ 190 more rows fv |> ggplot(aes(x = x, y = .fitted)) + # summarise the posterior samples geom_hex( data = ps, aes(x = x, y = .response, fill = after_stat(count)), bins = 50, alpha = 0.7 ) + # add the lower and upper prediction intervals geom_line(data = p_int, aes(y = .q2.5), colour = \"#56B4E9\", linewidth = 1.5) + geom_line(data = p_int, aes(y = .q97.5), colour = \"#56B4E9\", linewidth = 1.5) + # add the lower and upper credible intervals geom_line(aes(y = .lower_ci), colour = \"#56B4E9\", linewidth = 1) + geom_line(aes(y = .upper_ci), colour = \"#56B4E9\", linewidth = 1) + # add the fitted model geom_line() + # add the observed data geom_point(data = df, aes(x = x, y = y)) + scale_fill_viridis_c(option = \"plasma\") + theme(legend.position = \"none\") + labs(y = \"Response\")"},{"path":"https://gavinsimpson.github.io/gratia/articles/posterior-simulation.html","id":"metropolis-hastings-sampler","dir":"Articles","previous_headings":"Additional examples","what":"Metropolis Hastings sampler","title":"Posterior Simulation","text":"cases, Gaussian approximation posterior distribution model coefficients can fail. Simon Wood shows example just failure ?gam.mh help page, Gaussian approximation basically useless binomial GAM large numbers zeroes. mgcv::gam.mh() implements simple Metropolis Hastings sampler, alternates proposals Gaussian t distribution approximation posterior random walk proposals based shrunken approximate posterior covariance matrix. section, rework Simon’s example failure Gaussian approximation ?gam.mh show use gratia generate posterior draws using Metropolis Hastings sampler provided gam.mh(). begin defining function simulate data example. use simulate data set plot Note zeroes large parts covariate space response zeroes. fit binomial (logistic) GAM data generate sample posterior distribution using default Gaussian approximation subsequently using simpler Metropolis Hastings sampler. method argument used select Metropolis Hastings sampler, specify two additional arguments: thin, controls many draws skipped retained sample, rw_scale, scaling factor posterior covariance matrix shrunk random walk proposals. leave two important arguments defaults: burnin = 1000, number samples discard prior sampling, t_df = 40, degrees freedom t proposals. degrees freedom t proposals large, ’re effectively Gaussian approximation default, alternating proposals random walk proposals. collected posterior draws, summarise set 50%, 80%, 95% intervals using ggdist::median_qi(), add data locations left join First plot intervals Gaussian approximation posterior, repeat plot using intervals derived Metropolis Hastings sampler, arranging two plots using patchwork Gaussian approximation-based intervals shown left figure, range x largely useless, covering entire range response, despite fact observed zeroes large parts covariate space. Contrast intervals ones obtained using Metropolis Hastings sampler; intervals much better reflect uncertainty estimated response function x data zeroes.","code":"ga_fail <- function(seed) { df <- tibble(y = c( rep(0, 89), 1, 0, 1, 0, 0, 1, rep(0, 13), 1, 0, 0, 1, rep(0, 10), 1, 0, 0, 1, 1, 0, 1, rep(0, 4), 1, rep(0, 3), 1, rep(0, 3), 1, rep(0, 10), 1, rep(0, 4), 1, 0, 1, 0, 0, rep(1, 4), 0, rep(1, 5), rep(0, 4), 1, 1, rep(0, 46) )) |> mutate( x = withr::with_seed( seed, sort(c(0:10 * 5, rnorm(length(y) - 11) * 20 + 100)) ), .row = row_number() ) |> relocate(.row, .before = 1L) df } df <- ga_fail(3) df |> ggplot(aes(x = x, y = y)) + geom_point() m_logit <- gam(y ~ s(x, k = 15), data = df, method = \"REML\", family = binomial) fs_ga <- fitted_samples(m_logit, n = 2000, seed = 2) fs_mh <- fitted_samples(m_logit, n = 2000, seed = 2, method = \"mh\", thin = 2, rw_scale = 0.4 ) excl_col <- c(\".draw\", \".parameter\", \".row\") int_ga <- fs_ga |> group_by(.row) |> median_qi(.width = c(0.5, 0.8, 0.95), .exclude = excl_col) |> left_join(df, by = join_by(.row == .row)) int_mh <- fs_mh |> group_by(.row) |> median_qi(.width = c(0.5, 0.8, 0.95), .exclude = excl_col) |> left_join(df, by = join_by(.row == .row)) plt_ga <- df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_lineribbon( data = int_ga, aes(x = x, y = .fitted, ymin = .lower, ymax = .upper) ) + scale_fill_brewer() + labs(title = \"Gaussian approximation\") plt_mh <- df |> ggplot(aes(x = x, y = y)) + geom_point() + geom_lineribbon( data = int_mh, aes(x = x, y = .fitted, ymin = .lower, ymax = .upper) ) + scale_fill_brewer() + labs(title = \"Metropolis Hastings sampler\") plt_ga + plt_mh + plot_layout(guides = \"collect\")"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Gavin L. Simpson. Author, maintainer, copyright holder. Henrik Singmann. Contributor.","code":""},{"path":"https://gavinsimpson.github.io/gratia/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Simpson G (????). gratia: Graceful ggplot-Based Graphics Functions GAMs Fitted using mgcv. R package version 0.9.2.9013, https://gavinsimpson.github.io/gratia/.","code":"@Manual{, title = {{gratia}: Graceful {ggplot}-Based Graphics and Other Functions for {GAM}s Fitted using {mgcv}}, author = {Gavin L. Simpson}, abstract = {Graceful ggplot-based graphics and utility functions for working with generalized additive models (GAMs) fitted using the mgcv package. Provides a reimplementation of the plot() method for GAMs that mgcv provides, as well as tidyverse-compatible representations of estimated smooths.}, note = {R package version 0.9.2.9013}, url = {https://gavinsimpson.github.io/gratia/}, }"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"An R package for working with generalized additive models","text":"Working GAMs within ‘tidyverse’ can tedious even difficult without good understanding GAMs model returned ‘mgcv’ model objects contain. ‘gratia’ designed help . ‘gratia’ provides ‘ggplot’-based graphics utility functions working generalized additive models (GAMs) fitted using ‘mgcv’ package, via reimplementation plot() method GAMs ‘mgcv’ provides, well ‘tidyverse’ compatible representations estimated smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"features","dir":"","previous_headings":"","what":"Features","title":"An R package for working with generalized additive models","text":"main features gratia currently ggplot2-based replacement mgcv:::plot.gam(): draw.gam(). example, classic four term additive example Gu & Wahba: Estimated smooths GAM bivariate smooth: Estimated smooths GAM Note specialist smoothers (bs %% c(\"mrf\",\"sw\", \"sf\")) currently supported, univariate, factor continuous -variable smooths, simple random effect smooths (bs = 're'), factor-smooth interaction smooths (bs = \"fs\"), constrained factor smooths (bs = \"sz\"), full soap film smooths (bs = \"\"), bivariate, trivariate, quadvariate TPRS tensor product smooths supported, Estimation derivatives fitted smoothers: derivatives(), Estimation point-wise across--function confidence intervals simultaneous intervals smooths: confint.gam(). Model diagnostics via appraise() Model diagnostics figure","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"installing-gratia","dir":"","previous_headings":"","what":"Installing gratia","title":"An R package for working with generalized additive models","text":"gratia now available CRAN, can installed however gratia active development may wish install development version github. easiest way via install_github() function package remotes. Make sure remotes installed, run install package. Alternatively, binary packages development version available rOpenSci’s R Universe service:","code":"install.packages(\"gratia\") remotes::install_github(\"gavinsimpson/gratia\") # Install gratia in R install.packages(\"gratia\", repos = c( \"https://gavinsimpson.r-universe.dev\", \"https://cloud.r-project.org\" ))"},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"history","dir":"","previous_headings":"","what":"History","title":"An R package for working with generalized additive models","text":"gratia grew earlier package, schoenberg, development earlier package tsgam, originally intended used GAMs fitted time series. developing tsgam however became clear package used generally name “tsgam” longer appropriate. avoid breaking blog posts written using tsgam decided copy git repo history new repo package name schoenberg. later date someone released another package called schoenberg CRAN, scuppered idea. Now ’m calling package gratia. Hopefully won’t change …","code":""},{"path":"https://gavinsimpson.github.io/gratia/index.html","id":"why-gratia","dir":"","previous_headings":"","what":"Why gratia?","title":"An R package for working with generalized additive models","text":"naming greta package, Nick Golding observed recent phenomena naming statistical modelling software, Stan Edward, individuals played prominent role development field. lead Nick name Tensor Flow-based package greta Grete Hermann. spirit, gratia named recognition contributions Grace Wahba, pioneering work penalised spline models foundation way GAMs estimated mgcv. wanted name package grace, explicitly recognise Grace’s contributions, unfortunately already package named Grace CRAN. looked elsewhere inspiration. English word “grace” derives Latin gratia, meaning “favor, charm, thanks” (according Merriam Webster). chair Grace Wabha currently holds named Isaac J Schoenberg, former University Madison-Wisconsin Professor Mathematics, 1946 paper provided first mathematical reference “splines”. (Hence previous name package.)","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":null,"dir":"Reference","previous_headings":"","what":"Add a confidence interval to an existing object — add_confint","title":"Add a confidence interval to an existing object — add_confint","text":"Add confidence interval existing object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add a confidence interval to an existing object — add_confint","text":"","code":"add_confint(object, coverage = 0.95, ...) # S3 method for class 'smooth_estimates' add_confint(object, coverage = 0.95, ...) # S3 method for class 'parametric_effects' add_confint(object, coverage = 0.95, ...) # Default S3 method add_confint(object, coverage = 0.95, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_confint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add a confidence interval to an existing object — add_confint","text":"object R object. coverage numeric; coverage interval. Must range 0 < coverage < 1. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":null,"dir":"Reference","previous_headings":"","what":"Add a constant to estimated values — add_constant","title":"Add a constant to estimated values — add_constant","text":"Add constant estimated values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add a constant to estimated values — add_constant","text":"","code":"add_constant(object, constant = NULL, ...) # S3 method for class 'smooth_estimates' add_constant(object, constant = NULL, ...) # S3 method for class 'smooth_samples' add_constant(object, constant = NULL, ...) # S3 method for class 'mgcv_smooth' add_constant(object, constant = NULL, ...) # S3 method for class 'parametric_effects' add_constant(object, constant = NULL, ...) # S3 method for class 'tbl_df' add_constant(object, constant = NULL, column = NULL, ...) # S3 method for class 'evaluated_parametric_term' add_constant(object, constant = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add a constant to estimated values — add_constant","text":"object object add constant . constant constant add. ... additional arguments passed methods. column character; \"tbl_df\" method, column add constant .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add a constant to estimated values — add_constant","text":"Returns object estimate shifted addition supplied constant.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_constant.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add a constant to estimated values — add_constant","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Add fitted values from a GAM to a data frame — add_fitted.gam","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"Add fitted values GAM data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"","code":"# S3 method for class 'gam' add_fitted(data, model, value = \".fitted\", type = \"response\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. type character; type predictions return. See mgcv::predict.gam() options. ... additional arguments passed mgcv::predict.gam().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"data frame (tibble) formed data predictions model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add fitted values from a GAM to a data frame — add_fitted.gam","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # add fitted values to our data add_fitted(df, m) #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 .fitted #> #> 1 3.34 0.266 0.659 0.859 0.367 5.90 #> 2 -0.0758 0.372 0.185 0.0344 0.741 3.15 #> 3 10.7 0.573 0.954 0.971 0.934 8.28 #> 4 8.73 0.908 0.898 0.745 0.673 8.65 #> 5 15.0 0.202 0.944 0.273 0.701 15.7 #> 6 7.67 0.898 0.724 0.677 0.848 8.38 #> 7 7.58 0.945 0.370 0.348 0.706 7.84 #> 8 8.51 0.661 0.781 0.947 0.859 6.74 #> 9 10.6 0.629 0.0111 0.339 0.446 9.14 #> 10 3.72 0.0618 0.940 0.0317 0.677 7.04 #> # i 390 more rows # with type = \"terms\" or \"iterms\" add_fitted(df, m, type = \"terms\") #> # A tibble: 400 x 10 #> y x0 x1 x2 x3 .constant `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 3.34 0.266 0.659 0.859 0.367 7.94 0.175 0.559 -2.81 0.0351 #> 2 -0.0758 0.372 0.185 0.0344 0.741 7.94 0.435 -1.92 -3.23 -0.0687 #> 3 10.7 0.573 0.954 0.971 0.934 7.94 0.593 3.35 -3.47 -0.122 #> 4 8.73 0.908 0.898 0.745 0.673 7.94 -0.812 2.77 -1.19 -0.0498 #> 5 15.0 0.202 0.944 0.273 0.701 7.94 -0.0589 3.23 4.63 -0.0576 #> 6 7.67 0.898 0.724 0.677 0.848 7.94 -0.745 1.15 0.146 -0.0981 #> 7 7.58 0.945 0.370 0.348 0.706 7.94 -1.07 -1.31 2.34 -0.0589 #> 8 8.51 0.661 0.781 0.947 0.859 7.94 0.434 1.67 -3.20 -0.101 #> 9 10.6 0.629 0.0111 0.339 0.446 7.94 0.512 -1.95 2.63 0.0132 #> 10 3.72 0.0618 0.940 0.0317 0.677 7.94 -0.695 3.20 -3.35 -0.0508 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":null,"dir":"Reference","previous_headings":"","what":"Add fitted values from a model to a data frame — add_fitted","title":"Add fitted values from a model to a data frame — add_fitted","text":"Add fitted values model data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add fitted values from a model to a data frame — add_fitted","text":"","code":"add_fitted(data, model, value = \".value\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add fitted values from a model to a data frame — add_fitted","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. ... additional arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add fitted values from a model to a data frame — add_fitted","text":"data frame (tibble) formed data fitted values model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Add posterior draws from a model to a data object — add_fitted_samples","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"Adds draws posterior distribution model data object using one fitted_samples(), predicted_samples(), posterior_samples().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"","code":"add_fitted_samples(object, model, n = 1, seed = NULL, ...) add_predicted_samples(object, model, n = 1, seed = NULL, ...) add_posterior_samples(object, model, n = 1, seed = NULL, ...) add_smooth_samples(object, model, n = 1, seed = NULL, select = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"object data frame tibble posterior draws added. model fitted GAM (GAM-like) object posterior draw method exists. n integer; number posterior draws add. seed numeric; value seed random number generator. ... arguments passed posterior draw function, currently one fitted_samples(), predicted_samples(), posterior_samples(). n seed already specified arguments also passed posterior sampling function. select character; select smooth's posterior draw . default, NULL, means posteriors smooths model wil sampled individually. supplied, character vector requested smooth terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_fitted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add posterior draws from a model to a data object — add_fitted_samples","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # add fitted samples (posterior draws of the expected value of the response) # note that there are 800 rows in the output: 400 data by `n = 2` samples. df |> add_fitted_samples(m, n = 2, seed = 84) #> # A tibble: 800 × 14 #> y x0 x1 x2 x3 f f0 f1 f2 f3 .row .draw #> #> 1 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 1 #> 2 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 2 #> 3 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 1 #> 4 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 2 #> 5 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 1 #> 6 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 2 #> 7 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 1 #> 8 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 2 #> 9 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 1 #> 10 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 2 #> # ℹ 790 more rows #> # ℹ 2 more variables: .parameter , .fitted # add posterior draws from smooth s(x2) df |> add_smooth_samples(m, n = 2, seed = 2, select= \"s(x2)\") #> # A tibble: 800 × 15 #> y x0 x1 x2 x3 f f0 f1 f2 f3 .row .smooth #> #> 1 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 s(x2) #> 2 2.99 0.915 0.0227 0.909 0.402 1.62 0.529 1.05 0.0397 0 1 s(x2) #> 3 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 s(x2) #> 4 4.70 0.937 0.513 0.900 0.432 3.25 0.393 2.79 0.0630 0 2 s(x2) #> 5 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 s(x2) #> 6 13.9 0.286 0.631 0.192 0.664 13.5 1.57 3.53 8.41 0 3 s(x2) #> 7 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 s(x2) #> 8 5.71 0.830 0.419 0.532 0.182 6.12 1.02 2.31 2.79 0 4 s(x2) #> 9 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 s(x2) #> 10 7.63 0.642 0.879 0.522 0.838 10.4 1.80 5.80 2.76 0 5 s(x2) #> # ℹ 790 more rows #> # ℹ 3 more variables: .term , .draw , .value "},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Add partial residuals — add_partial_residuals","title":"Add partial residuals — add_partial_residuals","text":"Add partial residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add partial residuals — add_partial_residuals","text":"","code":"add_partial_residuals(data, model, ...) # S3 method for class 'gam' add_partial_residuals(data, model, select = NULL, partial_match = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add partial residuals — add_partial_residuals","text":"data data frame containing values variables used fit model. Passed stats::residuals() newdata. model fitted model stats::residuals() method available. S3 method dispatch performed model argument. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_partial_residuals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add partial residuals — add_partial_residuals","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## add partial residuals add_partial_residuals(df, m) #> # A tibble: 400 x 9 #> y x0 x1 x2 x3 `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.38 -2.00 -5.36 -2.52 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -2.79 -5.15 -6.45 -3.29 #> 3 10.7 0.573 0.954 0.971 0.934 2.99 5.75 -1.07 2.28 #> 4 8.73 0.908 0.898 0.745 0.673 -0.734 2.84 -1.11 0.0287 #> 5 15.0 0.202 0.944 0.273 0.701 -0.752 2.54 3.94 -0.750 #> 6 7.67 0.898 0.724 0.677 0.848 -1.46 0.432 -0.567 -0.812 #> 7 7.58 0.945 0.370 0.348 0.706 -1.33 -1.57 2.08 -0.318 #> 8 8.51 0.661 0.781 0.947 0.859 2.21 3.44 -1.42 1.68 #> 9 10.6 0.629 0.0111 0.339 0.446 2.01 -0.445 4.13 1.51 #> 10 3.72 0.0618 0.940 0.0317 0.677 -4.02 -0.123 -6.67 -3.37 #> # i 390 more rows ## add partial residuals for selected smooths add_partial_residuals(df, m, select = \"s(x0)\") #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 `s(x0)` #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.38 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -2.79 #> 3 10.7 0.573 0.954 0.971 0.934 2.99 #> 4 8.73 0.908 0.898 0.745 0.673 -0.734 #> 5 15.0 0.202 0.944 0.273 0.701 -0.752 #> 6 7.67 0.898 0.724 0.677 0.848 -1.46 #> 7 7.58 0.945 0.370 0.348 0.706 -1.33 #> 8 8.51 0.661 0.781 0.947 0.859 2.21 #> 9 10.6 0.629 0.0111 0.339 0.446 2.01 #> 10 3.72 0.0618 0.940 0.0317 0.677 -4.02 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Add residuals from a GAM to a data frame — add_residuals.gam","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"Add residuals GAM data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"","code":"# S3 method for class 'gam' add_residuals(data, model, value = \".residual\", type = \"deviance\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"data data frame containing values variables used fit model. Passed stats::predict() newdata. model fitted model stats::predict() method available. S3 method dispatch performed model argument. value character; name variable model predictions stored. type character; type residuals return. See mgcv::residuals.gam() options. ... additional arguments passed mgcv::residuals.gam().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"data frame (tibble) formed data residuals model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add residuals from a GAM to a data frame — add_residuals.gam","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) df <- df[, c(\"y\", \"x0\", \"x1\", \"x2\", \"x3\")] m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## add_residuals(df, m) #> # A tibble: 400 x 6 #> y x0 x1 x2 x3 .residual #> #> 1 3.34 0.266 0.659 0.859 0.367 -2.56 #> 2 -0.0758 0.372 0.185 0.0344 0.741 -3.22 #> 3 10.7 0.573 0.954 0.971 0.934 2.40 #> 4 8.73 0.908 0.898 0.745 0.673 0.0785 #> 5 15.0 0.202 0.944 0.273 0.701 -0.693 #> 6 7.67 0.898 0.724 0.677 0.848 -0.714 #> 7 7.58 0.945 0.370 0.348 0.706 -0.259 #> 8 8.51 0.661 0.781 0.947 0.859 1.78 #> 9 10.6 0.629 0.0111 0.339 0.446 1.50 #> 10 3.72 0.0618 0.940 0.0317 0.677 -3.32 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Add residuals from a model to a data frame — add_residuals","title":"Add residuals from a model to a data frame — add_residuals","text":"Add residuals model data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add residuals from a model to a data frame — add_residuals","text":"","code":"add_residuals(data, model, value = \".residual\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add residuals from a model to a data frame — add_residuals","text":"data data frame containing values variables used fit model. Passed stats::residuals() newdata. model fitted model stats::residuals() method available. S3 method dispatch performed model argument. value character; name variable model residuals stored. ... additional arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_residuals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add residuals from a model to a data frame — add_residuals","text":"data frame (tibble) formed data residuals model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":null,"dir":"Reference","previous_headings":"","what":"Add indicators of significant change after SiZeR — add_sizer","title":"Add indicators of significant change after SiZeR — add_sizer","text":"Add indicators significant change SiZeR","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add indicators of significant change after SiZeR — add_sizer","text":"","code":"add_sizer(object, type = c(\"change\", \"sizer\"), ...) # S3 method for class 'derivatives' add_sizer(object, type = c(\"change\", \"sizer\"), ...) # S3 method for class 'smooth_estimates' add_sizer(object, type = c(\"change\", \"sizer\"), derivatives = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add indicators of significant change after SiZeR — add_sizer","text":"object R object. Currently supported methods classes \"derivatives\". type character; \"change\" adds single variable object indicating credible interval derivative excludes 0. \"sizer\" adds two variables indicating whether derivative postive negative. ... arguments passed methods derivatives object class \"derivatives\", resulting call derivatives().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/add_sizer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add indicators of significant change after SiZeR — add_sizer","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## first derivatives of all smooths using central finite differences d <- derivatives(m, type = \"central\") |> add_sizer() # default adds a .change column names(d) #> [1] \".smooth\" \".by\" \".fs\" \".derivative\" \".se\" #> [6] \".crit\" \".lower_ci\" \".upper_ci\" \".change\" \"x0\" #> [11] \"x1\" \"x2\" \"x3\""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":null,"dir":"Reference","previous_headings":"","what":"Model diagnostic plots — appraise","title":"Model diagnostic plots — appraise","text":"Model diagnostic plots","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Model diagnostic plots — appraise","text":"","code":"appraise(model, ...) # S3 method for class 'gam' appraise( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), use_worm = FALSE, n_uniform = 10, n_simulate = 50, seed = NULL, type = c(\"deviance\", \"pearson\", \"response\"), n_bins = c(\"sturges\", \"scott\", \"fd\"), ncol = NULL, nrow = NULL, guides = \"keep\", level = 0.9, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'lm' appraise(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Model diagnostic plots — appraise","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed patchwork::wrap_plots(). method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF (\"uniform\"``) available family` used model fitting. Note method = \"direct\" deprecated favour method = \"uniform\". use_worm logical; worm plot drawn place QQ plot? n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"direct\") QQ plots. n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\") QQ plots. seed numeric; random number seed use method = \"simulate\" method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_bins character numeric; either number bins string indicating calculate number bins. ncol, nrow numeric; numbers rows columns spread plots. guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() level numeric; coverage level QQ plot reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ci_alpha, ci_col colour transparency used draw QQ plot reference interval method = \"simulate\". point_col, point_alpha colour transparency used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. line_col colour specification 1:1 line QQ plot reference line residuals vs linear predictor plot.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Model diagnostic plots — appraise","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/appraise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Model diagnostic plots — appraise","text":"","code":"load_mgcv() ## simulate some data... dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat) ## run some basic model checks appraise(mod, point_col = \"steelblue\", point_alpha = 0.4) ## To change the theme for all panels use the & operator, for example to ## change the ggplot theme for all panels library(\"ggplot2\") appraise(mod, seed = 42, point_col = \"steelblue\", point_alpha = 0.4, line_col = \"black\" ) & theme_minimal()"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":null,"dir":"Reference","previous_headings":"","what":"Basis expansions for smooths — basis","title":"Basis expansions for smooths — basis","text":"Creates basis expansion definition smoother using syntax mgcv's smooths via mgcv::s()., mgcv::te(), mgcv::ti(), mgcv::t2(), fitted GAM(M).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Basis expansions for smooths — basis","text":"","code":"basis(object, ...) # S3 method for class 'gam' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'scam' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'gamm' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # S3 method for class 'list' basis( object, select = NULL, term = deprecated(), data = NULL, n = 100, n_2d = 50, n_3d = 16, n_4d = 4, partial_match = FALSE, ... ) # Default S3 method basis( object, data, knots = NULL, constraints = FALSE, at = NULL, diagonalize = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Basis expansions for smooths — basis","text":"object smooth specification, result call one mgcv::s()., mgcv::te(), mgcv::ti(), mgcv::t2(), fitted GAM(M) model. ... arguments passed mgcv::smoothCon(). select character; select smooths fitted model term argument renamed select data data frame containing variables used smooth. n numeric; number points range covariate evaluate smooth. n_2d numeric; number new observations dimension bivariate smooth. currently used; n used dimensions. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1. knots list data frame named components containing knots locations. Names must match covariates basis required. See mgcv::smoothCon(). constraints logical; identifiability constraints applied smooth basis. See argument absorb.cons mgcv::smoothCon(). data frame containing values smooth covariate(s) basis evaluated. diagonalize logical; TRUE, reparameterises smooth associated penalty identity matrix. effect turning last diagonal elements penalty zero, highlights penalty null space.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Basis expansions for smooths — basis","text":"tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Basis expansions for smooths — basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Basis expansions for smooths — basis","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", n = 400, seed = 42) bf <- basis(s(x0), data = df) bf <- basis(s(x2, by = fac, bs = \"bs\"), data = df, constraints = TRUE)"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract basis dimension of a smooth — basis_size","title":"Extract basis dimension of a smooth — basis_size","text":"Extract basis dimension smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract basis dimension of a smooth — basis_size","text":"","code":"basis_size(object, ...) # S3 method for class 'mgcv.smooth' basis_size(object, ...) # S3 method for class 'gam' basis_size(object, ...) # S3 method for class 'gamm' basis_size(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract basis dimension of a smooth — basis_size","text":"object fitted GAM(M). Currently mgcv::gam() (anything inherits \"gam\" class, e.g. mgcv::bam()) mgcv::gamm() supported. ... Arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/basis_size.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract basis dimension of a smooth — basis_size","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 200, seed = 1) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) basis_size(m) #> s(x0) s(x1) s(x2) s(x3) #> 9 9 9 9"},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulated bird migration data — bird_move","title":"Simulated bird migration data — bird_move","text":"Data generated hypothetical study bird movement along migration corridor, sampled throughout year. dataset consists simulated sample records numbers observed locations 100 tagged individuals six species bird, ten locations along latitudinal gradient, one observation taken every four weeks. Counts simulated randomly species location week creating species-specific migration curve gave probability finding individual given species given location, simulated distribution individuals across sites using multinomial distribution, subsampling using binomial distribution simulation observation error (.e. every bird present location detected). data set (bird_move) consists variables count, latitude, week species.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Simulated bird migration data — bird_move","text":"data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/bird_move.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Simulated bird migration data — bird_move","text":"Pedersen EJ, Miller DL, Simpson GL, Ross N. 2018. Hierarchical generalized additive models: introduction mgcv. PeerJ Preprints 6:e27320v1 doi:10.7287/peerj.preprints.27320v1 .","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the boundary of a soap film smooth — boundary","text":"","code":"boundary(x, ...) # S3 method for class 'soap.film' boundary(x, ...) # S3 method for class 'gam' boundary(x, select, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the boundary of a soap film smooth — boundary","text":"x R object. Currently objects inherit classes \"soap.film\" \"gam\". ... arguments passed methods. select character; label soap film smooth extract boundary.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/boundary.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract the boundary of a soap film smooth — boundary","text":"list lists data frames specifying loops define boundary soap film smooth.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Select smooths based on user's choices — check_user_select_smooths","title":"Select smooths based on user's choices — check_user_select_smooths","text":"Given vector indexing smooths GAM, returns logical vector selecting requested smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select smooths based on user's choices — check_user_select_smooths","text":"","code":"check_user_select_smooths( smooths, select = NULL, partial_match = FALSE, model_name = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select smooths based on user's choices — check_user_select_smooths","text":"smooths character; vector smooth labels. select numeric, logical, character vector selected smooths. partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1. model_name character; model name used error messages.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select smooths based on user's choices — check_user_select_smooths","text":"logical vector length length(smooths) indicating smooths selected.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/check_user_select_smooths.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select smooths based on user's choices — check_user_select_smooths","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract coefficients from a fitted scam model. — coef.scam","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"Extract coefficients fitted scam model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"","code":"# S3 method for class 'scam' coef(object, parametrized = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/coef.scam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract coefficients from a fitted scam model. — coef.scam","text":"object model object fitted scam() parametrized logical; extract parametrized coefficients, respect linear inequality constraints model. ... arguments.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Compare smooths across models — compare_smooths","title":"Compare smooths across models — compare_smooths","text":"Compare smooths across models","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compare smooths across models — compare_smooths","text":"","code":"compare_smooths( model, ..., select = NULL, smooths = deprecated(), n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, partial_match = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compare smooths across models — compare_smooths","text":"model Primary model comparison. ... Additional models compare smooths model. select character; select smooths compare. default (NULL) means smooths model compared. Numeric select indexes smooths order specified formula stored model. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooths Use select instead. n numeric; number points range covariate evaluate smooth. data data frame covariate values evaluate smooth. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/compare_smooths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compare smooths across models — compare_smooths","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", seed = 2) ## models to compare smooths across - artificially create differences m1 <- gam(y ~ s(x0, k = 5) + s(x1, k = 5) + s(x2, k = 5) + s(x3, k = 5), data = dat, method = \"REML\" ) m2 <- gam(y ~ s(x0, bs = \"ts\") + s(x1, bs = \"ts\") + s(x2, bs = \"ts\") + s(x3, bs = \"ts\"), data = dat, method = \"REML\") ## build comparisons comp <- compare_smooths(m1, m2) comp #> # A tibble: 8 x 5 #> .model .smooth .type .by data #> #> 1 m1 s(x0) TPRS NA #> 2 m2 s(x0) TPRS (shrink) NA #> 3 m1 s(x1) TPRS NA #> 4 m2 s(x1) TPRS (shrink) NA #> 5 m1 s(x2) TPRS NA #> 6 m2 s(x2) TPRS (shrink) NA #> 7 m1 s(x3) TPRS NA #> 8 m2 s(x3) TPRS (shrink) NA ## notice that the result is a nested tibble draw(comp)"},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Conditional predictions from a GAM — conditional_values","title":"Conditional predictions from a GAM — conditional_values","text":"Generate predicted values GAM, conditional upon supplied values covariates. conditional_values() modelled marginaleffects::plot_predictions(), intentionally simpler, restrictive functionality. intended use case quickly visualizing predicted values fitted GAM response scale. complex model predictions, strongly encouraged use marginaleffects::plot_predictions().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Conditional predictions from a GAM — conditional_values","text":"","code":"conditional_values( model, condition = NULL, data = NULL, scale = c(\"response\", \"link\", \"linear_predictor\"), ... ) # S3 method for class 'gam' conditional_values( model, condition = NULL, data = NULL, scale = c(\"response\", \"link\", \"linear_predictor\"), n_vals = 100, ci_level = 0.95, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Conditional predictions from a GAM — conditional_values","text":"model fitted GAM object. condition either character vector list supplying names covariates, possibly values, condition . order values determines plotted via draw.conditional_values() method; first element mapped x channel, second element colour channel, third ggplot2::facet_wrap() fourth element present, present, fourth element mapped rows third element mapped columns ggplot2::facet_grid(). data data frame values predict. supplied overrides values supplied condition. scale character; scale predictions returned ? ... arguments passed fitted_values(). n_vals numeric; number values generate numeric variables named condition. ci_level numeric; number interval (0,1) giving coverage credible intervals.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Conditional predictions from a GAM — conditional_values","text":"data frame (tibble) class \"conditional_values\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Conditional predictions from a GAM — conditional_values","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/conditional_values.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Conditional predictions from a GAM — conditional_values","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # predictions conditional on values evenly spaced over x2, all other # variables in model are held at representative values cv <- conditional_values( m1, condition = \"x2\" ) # plot cv |> draw() # as above but condition on `x1` also. When plotted, `x1` is mapped to the # colour channel, noting that it has been summarised using fivenum() cv <- conditional_values( m1, condition = c(\"x2\", \"x1\") ) # plot cv |> draw() # can pass `condition` a list, allowing for greater flexibility # For example, here we condition on all four variables in the model, # summarising: # * `x1` at its five number summary, # * `x0 at its quartiles # * `x3` at its mean a d mean +/- sd cv <- conditional_values( m1, condition = list(\"x2\", x1 = \"fivenum\", x0 = \"quartile\", x3 = \"threenum\") ) # plot cv |> draw() # some model terms can be exclude from the conditional predictions using the # `exclude` mechanism of `predict.gam`. Here we exclude the effects of # `s(x0)` and `s(x3)` from the conditional predictions. This, in effect, # treats these smooths as having **0** effect on the conditional predictions # of the response, even though the two smooths conditioned on (`s(x2)` and # `s(x1)`) were estimated given the two excluded smooths were in the model cv <- conditional_values( m1, condition = list(\"x2\", x1 = \"minmax\"), exclude = c(\"s(x0)\", \"s(x3)\") ) # plot cv |> draw() # categorical conditions are also handled df <- data_sim(\"eg4\", seed = 2) m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") cv <- conditional_values( m2, condition = list(\"fac\", x2 = \"fivenum\") ) # plot - we see a discrete x axis cv |> draw() # in this example we condition on `x2` and `fac %in% c(2,3)` cv <- conditional_values( m2, condition = list(\"x2\", fac = 2:3) ) # plot - smooths of `x2` for `fac == 2` and `fac == 3` cv |> draw()"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":null,"dir":"Reference","previous_headings":"","what":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"Calculates point-wise confidence simultaneous intervals first derivatives smooth terms fitted GAM.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"","code":"# S3 method for class 'fderiv' confint( object, parm, level = 0.95, type = c(\"confidence\", \"simultaneous\"), nsim = 10000, ncores = 1L, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"object object class \"fderiv\" containing estimated derivatives. parm parameters (smooth terms) given intervals vector terms. missing, parameters considered. level numeric, 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. type character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. nsim integer; number simulations used computing simultaneous intervals. ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). ... additional arguments methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"data frame components: term; factor indicating term row relates, lower; lower limit confidence simultaneous interval, est; estimated derivative upper; upper limit confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.fderiv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Point-wise and simultaneous confidence intervals for derivatives of smooths — confint.fderiv","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") # new data to evaluate the derivatives at, say over the middle 50% of range # of each covariate middle <- function(x, n = 25, coverage = 0.5) { v <- (1 - coverage) / 2 q <- quantile(x, prob = c(0 + v, 1 - v), type = 8) seq(q[1], q[2], length = n) } new_data <- sapply(dat[c(\"x0\", \"x1\", \"x2\", \"x3\")], middle) new_data <- data.frame(new_data) ## first derivatives of all smooths... fd <- fderiv(mod, newdata = new_data) #> Warning: `fderiv()` was deprecated in gratia 0.7.0. #> i Please use `derivatives()` instead. ## point-wise interval ci <- confint(fd, type = \"confidence\") ci #> # A tibble: 100 x 4 #> term lower est upper #> #> 1 s(x0) 1.7 4.1 6.6 #> 2 s(x0) 1.3 3.8 6.3 #> 3 s(x0) 0.99 3.5 6.0 #> 4 s(x0) 0.68 3.1 5.6 #> 5 s(x0) 0.37 2.8 5.2 #> 6 s(x0) 0.0049 2.4 4.8 #> 7 s(x0) -0.40 2.0 4.5 #> 8 s(x0) -0.79 1.7 4.2 #> 9 s(x0) -1.1 1.3 3.8 #> 10 s(x0) -1.4 0.99 3.4 #> # i 90 more rows ## simultaneous interval for smooth term of x2 x2_sint <- confint(fd, parm = \"x2\", type = \"simultaneous\", nsim = 10000, ncores = 2 ) # \\donttest{ x2_sint #> # A tibble: 25 x 4 #> term lower est upper #> #> 1 s(x2) -24. -15. -5.6 #> 2 s(x2) -35. -26. -16. #> 3 s(x2) -41. -33. -24. #> 4 s(x2) -44. -36. -29. #> 5 s(x2) -44. -36. -28. #> 6 s(x2) -42. -34. -25. #> 7 s(x2) -38. -30. -21. #> 8 s(x2) -33. -24. -16. #> 9 s(x2) -27. -19. -11. #> 10 s(x2) -22. -14. -5.8 #> # i 15 more rows # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"Calculates point-wise confidence simultaneous intervals smooth terms fitted GAM.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"","code":"# S3 method for class 'gam' confint( object, parm, level = 0.95, data = newdata, n = 100, type = c(\"confidence\", \"simultaneous\"), nsim = 10000, shift = FALSE, transform = FALSE, unconditional = FALSE, ncores = 1, partial_match = FALSE, ..., newdata = NULL ) # S3 method for class 'gamm' confint(object, ...) # S3 method for class 'list' confint(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"object object class \"gam\" \"gamm\". parm parameters (smooth terms) given intervals vector terms. missing, parameters considered, although currently implemented. level numeric, 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. data data frame; new values covariates used model fit. selected smooth(s) wil evaluated supplied values. n numeric; number points evaluate smooths . type character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. nsim integer; number simulations used computing simultaneous intervals. shift logical; constant term add smooth? transform logical; smooth evaluated transformed scale? generalised models, involves applying inverse link function used fit model. Alternatively, name , actual, function can supplied transform smooth confidence interval. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix returned, available. ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; matching parm use partial match exact match? Can used length(parm) 1. ... additional arguments methods newdata DEPRECATED! data frame; containing new values covariates used model fit. selected smooth(s) wil evaluated supplied values.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"tibble components: .smooth; character indicating term row relates, .type; type smooth, .name variable smooth, NA otherwise, one vectors values smooth evaluated, named per variables smooth, zero variables containing values variable, .estimate; estimated value smooth, .se; standard error estimated value smooth, .crit; critical value 100 * level% confidence interval. .lower_ci; lower limit confidence simultaneous interval, .upper_ci; upper limit confidence simultaneous interval,","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/confint.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Point-wise and simultaneous confidence intervals for smooths — confint.gam","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") # new data to evaluate the smooths at, say over the middle 50% of range # of each covariate middle <- function(x, n = 50, coverage = 0.5) { v <- (1 - coverage) / 2 q <- quantile(x, prob = c(0 + v, 1 - v), type = 8) seq(q[1], q[2], length = n) } new_data <- sapply(dat[c(\"x0\", \"x1\", \"x2\", \"x3\")], middle) new_data <- data.frame(new_data) ## point-wise interval for smooth of x2 ci <- confint(mod, parm = \"s(x2)\", type = \"confidence\", data = new_data) ci #> # A tibble: 50 x 9 #> .smooth .type .by x2 .estimate .se .crit .lower_ci .upper_ci #> #> 1 s(x2) TPRS NA 0.26 5.3 0.18 2.0 5.0 5.7 #> 2 s(x2) TPRS NA 0.27 5.1 0.18 2.0 4.8 5.5 #> 3 s(x2) TPRS NA 0.28 4.9 0.18 2.0 4.6 5.3 #> 4 s(x2) TPRS NA 0.29 4.6 0.18 2.0 4.3 5.0 #> 5 s(x2) TPRS NA 0.30 4.3 0.19 2.0 3.9 4.7 #> 6 s(x2) TPRS NA 0.32 4.0 0.19 2.0 3.6 4.3 #> 7 s(x2) TPRS NA 0.33 3.6 0.20 2.0 3.2 4.0 #> 8 s(x2) TPRS NA 0.34 3.2 0.20 2.0 2.9 3.6 #> 9 s(x2) TPRS NA 0.35 2.9 0.20 2.0 2.5 3.3 #> 10 s(x2) TPRS NA 0.36 2.5 0.19 2.0 2.1 2.9 #> # i 40 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":null,"dir":"Reference","previous_headings":"","what":"All combinations of factor levels plus typical values of continuous variables — data_combos","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"combinations factor levels plus typical values continuous variables","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"","code":"data_combos(object, ...) # S3 method for class 'gam' data_combos( object, vars = everything(), complete = TRUE, envir = environment(formula(object)), data = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_combos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All combinations of factor levels plus typical values of continuous variables — data_combos","text":"object fitted model object. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. complete logical; combinations factor levels returned? FALSE, combinations levels observed model retained. envir environment within recreate data used fit object. data optional data frame data used fit mdoel reconstruction data model work.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate example data for fitting GAMs — data_sim","title":"Simulate example data for fitting GAMs — data_sim","text":"tidy reimplementation functions implemented mgcv::gamSim() can used fit GAMs. new feature sampling distribution can applied example types.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate example data for fitting GAMs — data_sim","text":"","code":"data_sim( model = \"eg1\", n = 400, scale = NULL, theta = 3, power = 1.5, dist = c(\"normal\", \"poisson\", \"binary\", \"negbin\", \"tweedie\", \"gamma\", \"ocat\", \"ordered categorical\"), n_cat = 4, cuts = c(-1, 0, 5), seed = NULL, gfam_families = c(\"binary\", \"tweedie\", \"normal\") )"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate example data for fitting GAMs — data_sim","text":"model character; either \"egX\" X integer 1:7, name model. See Details possible options. n numeric; number observations simulate. scale numeric; level noise use. theta numeric; dispersion parameter \\(\\theta\\) use. default entirely arbitrary, chosen provide simulated data exhibits extra dispersion beyond assumed Poisson. power numeric; Tweedie power parameter. dist character; sampling distribution response variable. \"ordered categorical\" synonym \"ocat\". n_cat integer; number categories categorical response. Currently used distr %% c(\"ocat\", \"ordered categorical\"). cuts numeric; vector cut points latent variable, excluding end points -Inf Inf. Must one fewer number categories: length(cuts) == n_cat - 1. seed numeric; seed random number generator. Passed base::set.seed(). gfam_families character; vector distributions use generating data grouped families use family = gfam(). allowed distributions per dist.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate example data for fitting GAMs — data_sim","text":"data_sim() can simulate data several underlying models known true functions. available options currently : \"eg1\": four term additive true model. classic Gu & Wahba four univariate term test model. See gw_functions details underlying four functions. \"eg2\": bivariate smooth true model. \"eg3\": example containing continuous smooth (varying coefficient) true model. model \\(\\hat{y}_i = f_2(x_{1i})x_{2i}\\) function \\(f_2()\\) \\(f_2(x) = 0.2 * x^{11} * (10 * (1 - x))^6 + 10 * (10 * x)^3 * (1 - x)^{10}\\). \"eg4\": factor smooth true model. true model contains factor 3 levels, response nth level follows nth Gu & Wabha function (\\(n \\{1, 2, 3}\\)). \"eg5\": additive plus factor true model. response linear combination Gu & Wabha functions 2, 3, 4 (latter null function) plus factor term four levels. \"eg6\": additive plus random effect term true model. ´\"eg7\": version model \"eg1\"`, covariates correlated. \"gwf2\": model response Gu & Wabha's \\(f_2(x_i)\\) plus noise. \"lwf6\": model response Luo & Wabha's \"example 6\" function \\(sin(2(4x-2)) + 2 exp(-256(x-0.5)^2)\\) plus noise. \"gfam\": simulates data use GAMs family = gfam(families). See example mgcv::gfam(). model specified dist ignored gfam_families used specify distributions included simulated data. Can vector families allowed dist. \"ocat\" %% gfam_families (\"ordered categorical\"), 4 classes assumed, changed. Link functions used \"identity\" \"normal\", \"logit\" \"binary\", \"ocat\", \"ordered categorical\", \"exp\" elsewhere. random component providing noise sampling variation can follow one distributions, specified via argument dist \"normal\": Gaussian, \"poisson\": Poisson, \"binary\": Bernoulli, \"negbin\": Negative binomial, \"tweedie\": Tweedie, \"gamma\": gamma , \"ordered categorical\": ordered categorical arguments provide parameters distribution.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Simulate example data for fitting GAMs — data_sim","text":"Gu, C., Wahba, G., (1993). Smoothing Spline ANOVA Component-Wise Bayesian \"Confidence Intervals.\" J. Comput. Graph. Stat. 2, 97–117. Luo, Z., Wahba, G., (1997). Hybrid adaptive splines. J. . Stat. Assoc. 92, 107–116.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_sim.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate example data for fitting GAMs — data_sim","text":"","code":"data_sim(\"eg1\", n = 100, seed = 1) #> # A tibble: 100 x 10 #> y x0 x1 x2 x3 f f0 f1 f2 f3 #> #> 1 14.532 0.26551 0.65472 0.26751 0.67371 13.713 1.4814 3.7041 8.5277 0 #> 2 16.113 0.37212 0.35320 0.21865 0.094858 12.735 1.8408 2.0267 8.8680 0 #> 3 9.5835 0.57285 0.27026 0.51680 0.49260 6.4103 1.9478 1.7169 2.7456 0 #> 4 15.687 0.90821 0.99268 0.26895 0.46155 16.349 0.56879 7.2817 8.4980 0 #> 5 8.2216 0.20168 0.63349 0.18117 0.37522 12.792 1.1841 3.5501 8.0578 0 #> 6 9.9034 0.89839 0.21321 0.51858 0.99110 4.9081 0.62765 1.5318 2.7487 0 #> 7 5.9362 0.94468 0.12937 0.56278 0.17635 4.6020 0.34587 1.2953 2.9609 0 #> 8 10.839 0.66080 0.47812 0.12916 0.81344 9.7565 1.7502 2.6019 5.4045 0 #> 9 16.883 0.62911 0.92407 0.25637 0.068447 16.909 1.8377 6.3481 8.7237 0 #> 10 7.3603 0.061786 0.59876 0.71794 0.40045 6.3401 0.38578 3.3119 2.6424 0 #> # i 90 more rows # an ordered categorical response data_sim(\"eg1\", n = 100, dist = \"ocat\", n_cat = 4, cuts = c(-1, 0, 5)) #> # A tibble: 100 x 11 #> y x0 x1 x2 x3 f f0 f1 f2 #> #> 1 1 0.93708 0.21716 0.51711 0.44457 -3.5517 0.39280 1.5439 2.7461 #> 2 1 0.28614 0.21657 0.85193 0.060386 -4.7654 1.5653 1.5421 0.36166 #> 3 1 0.83045 0.38895 0.44280 0.32751 -1.7693 1.0157 2.1769 3.2727 #> 4 4 0.64175 0.94246 0.15788 0.87843 7.2150 1.8050 6.5858 7.0588 #> 5 3 0.51910 0.96261 0.44232 0.93060 3.8994 1.9964 6.8566 3.2808 #> 6 1 0.73659 0.73986 0.96773 0.39218 -2.3701 1.4725 4.3917 0.00015734 #> 7 1 0.13467 0.73325 0.48459 0.15885 -0.27657 0.82112 4.3340 2.8028 #> 8 3 0.65699 0.53576 0.25246 0.31995 5.2247 1.7616 2.9198 8.7777 #> 9 3 0.70506 0.0022730 0.25969 0.30697 3.0408 1.5991 1.0046 8.6716 #> 10 2 0.45774 0.60894 0.54202 0.10781 -0.036524 1.9824 3.3800 2.8356 #> # i 90 more rows #> # i 2 more variables: f3 , latent "},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare a data slice through model covariates — data_slice","title":"Prepare a data slice through model covariates — data_slice","text":"Prepare data slice model covariates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare a data slice through model covariates — data_slice","text":"","code":"data_slice(object, ...) # Default S3 method data_slice(object, ...) # S3 method for class 'data.frame' data_slice(object, ...) # S3 method for class 'gam' data_slice(object, ..., data = NULL, envir = NULL) # S3 method for class 'gamm' data_slice(object, ...) # S3 method for class 'list' data_slice(object, ...) # S3 method for class 'scam' data_slice(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare a data slice through model covariates — data_slice","text":"object R model object. ... User supplied variables defining data slice. Arguments passed via ... need named. data alternative data frame values containing variables needed fit model. NULL, default, data used fit model recovered using model.frame. User-supplied expressions passed ... evaluated data. envir environment within recreate data used fit object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare a data slice through model covariates — data_slice","text":"data slice data set results one (covariates) varied systematically () range specified subset values interest, remaining covariates model held fixed, representative values. known reference grid package emmeans data grid marginaleffects package. GAMs, covariates specified via ... take representative values determined data used fit model follows: numeric covariates, value fitting data closest median value used, factor covariates, modal (frequently observed) level used, first level (sorted per vector returned base::levels() several levels observed number times. values already computed calling gam() bam() example can found var.summary component fitted model. Function typical_values() extract values interested. Convenience functions evenly(), ref_level(), level() provided help users specify data slices. ref_level(), level() also ensure factor covariates correct levels, needed mgcv::predict.gam() example. extended discussion data_slice() examples, see vignette(\"data-slices\", package = \"gratia\").","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/data_slice.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare a data slice through model covariates — data_slice","text":"","code":"load_mgcv() # simulate some Gaussian data df <- data_sim(\"eg1\", n = 50, seed = 2) # fit a GAM with 1 smooth and 1 linear term m <- gam(y ~ s(x2, k = 7) + x1, data = df, method = \"REML\") # Want to predict over f(x2) while holding `x1` at some value. # Default will use the observation closest to the median for unspecified # variables. ds <- data_slice(m, x2 = evenly(x2, n = 50)) ds #> # A tibble: 50 x 2 #> x2 x1 #> #> 1 0.0228 0.403 #> 2 0.0424 0.403 #> 3 0.0619 0.403 #> 4 0.0815 0.403 #> 5 0.101 0.403 #> 6 0.121 0.403 #> 7 0.140 0.403 #> 8 0.160 0.403 #> 9 0.179 0.403 #> 10 0.199 0.403 #> # i 40 more rows # for full control, specify the values you want ds <- data_slice(m, x2 = evenly(x2, n = 50), x1 = 0.3) # or provide an expression (function call) which will be evaluated in the # data frame passed to `data` or `model.frame(object)` ds <- data_slice(m, x2 = evenly(x2, n = 50), x1 = mean(x1))"},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate data over the range of variables used in smooths — datagen","title":"Generate data over the range of variables used in smooths — datagen","text":"smooth GAM, generate new data range variables involved smooth. function deprecated useful narrow use-case. Use data_slice() instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate data over the range of variables used in smooths — datagen","text":"","code":"datagen(x, ...) # S3 method for class 'mgcv.smooth' datagen(x, n = 100, data, ...) # S3 method for class 'fs.interaction' datagen(x, n = 100, data, ...) # S3 method for class 'gam' datagen(x, smooth = NULL, n = 200, ...) # S3 method for class 'gamm' datagen(x, ...) # S3 method for class 'list' datagen(x, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate data over the range of variables used in smooths — datagen","text":"x object new data required. Currently objects classes \"gam\", \"gamm\" supported, smooths mgcv inheriting class \"mgcv.smooth\". ... arguments passed methods n numeric; number data values generate per term smooth. data data frame; \"mgcv.smooth\" objects, data used fit GAM need supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate data over the range of variables used in smooths — datagen","text":"data frame new values spread range observed values.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/datagen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate data over the range of variables used in smooths — datagen","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior expectations of derivatives from an estimated model — derivative_samples","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"Posterior expectations derivatives estimated model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"","code":"derivative_samples(object, ...) # Default S3 method derivative_samples(object, ...) # S3 method for class 'gamm' derivative_samples(object, ...) # S3 method for class 'gam' derivative_samples( object, focal = NULL, data = NULL, order = 1L, type = c(\"forward\", \"backward\", \"central\"), scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n = 100, eps = 1e-07, n_sim = 10000, level = lifecycle::deprecated(), seed = NULL, envir = environment(formula(object)), draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"object R object compute derivatives ... arguments passed methods fitted_samples() focal character; name focal variable. response derivative response respect variable returned. variables involved model held constant values. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". scale character; derivative estimated response linear predictor (link) scale? One \"response\" (default), \"linear predictor\". method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sample alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n numeric; number points evaluate derivative (data supplied). eps numeric; finite difference. n_sim integer; number simulations used computing simultaneous intervals. level seed numeric; random seed simulations. envir environment within recreate data used fit object. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"tibble, currently following variables: .derivative: estimated partial derivative, additional columns containing covariate values derivative evaluated.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivative_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Posterior expectations of derivatives from an estimated model — derivative_samples","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"negbin\", scale = 0.25, seed = 42) # fit the GAM (note: for execution time reasons using bam()) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, family = nb(), method = \"fREML\") # data slice through data along x2 - all other covariates will be set to # typical values (value closest to median) ds <- data_slice(m, x2 = evenly(x2, n = 200)) # samples from posterior of derivatives fd_samp <- derivative_samples(m, data = ds, type = \"central\", focal = \"x2\", eps = 0.01, seed = 21, n_sim = 100 ) # plot the first 20 posterior draws if (requireNamespace(\"ggplot2\") && requireNamespace(\"dplyr\")) { library(\"ggplot2\") fd_samp |> dplyr::filter(.draw <= 20) |> ggplot(aes(x = x2, y = .derivative, group = .draw)) + geom_line(alpha = 0.5) }"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Derivatives of estimated smooths via finite differences — derivatives","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"Derivatives estimated smooths via finite differences","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"","code":"derivatives(object, ...) # Default S3 method derivatives(object, ...) # S3 method for class 'gamm' derivatives(object, ...) # S3 method for class 'gam' derivatives( object, select = NULL, term = deprecated(), data = newdata, order = 1L, type = c(\"forward\", \"backward\", \"central\"), n = 100, eps = 1e-07, interval = c(\"confidence\", \"simultaneous\"), n_sim = 10000, level = 0.95, unconditional = FALSE, frequentist = FALSE, offset = NULL, ncores = 1, partial_match = FALSE, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"object R object compute derivatives . ... arguments passed methods. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. Can partial match smooth term; see argument partial_match . term Use select instead. data data frame containing values model covariates evaluate first derivatives smooths. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". n numeric; number points evaluate derivative . eps numeric; finite difference. interval character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. unconditional logical; use smoothness selection-corrected Bayesian covariance matrix? frequentist logical; use frequentist covariance matrix? offset numeric; value use offset term ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; smooths selected partial matches term? TRUE, term can single string match . newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"tibble, currently following variables: smooth: smooth row refers , var: name variable involved smooth, data: values var derivative evaluated, derivative: estimated derivative, se: standard error estimated derivative, crit: critical value derivative ± (crit * se) gives upper lower bounds requested confidence simultaneous interval (given level), lower: lower bound confidence simultaneous interval, upper: upper bound confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"derivatives() ignore random effect smooths encounters object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Derivatives of estimated smooths via finite differences — derivatives","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 42) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivatives of all smooths using central finite differences derivatives(mod, type = \"central\") #> # A tibble: 400 x 12 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x0 x1 #> #> 1 s(x0) NA NA 7.41 3.33 1.96 0.874 13.9 2.39e-4 NA #> 2 s(x0) NA NA 7.40 3.33 1.96 0.884 13.9 1.03e-2 NA #> 3 s(x0) NA NA 7.39 3.30 1.96 0.929 13.8 2.04e-2 NA #> 4 s(x0) NA NA 7.36 3.24 1.96 1.01 13.7 3.04e-2 NA #> 5 s(x0) NA NA 7.32 3.15 1.96 1.14 13.5 4.05e-2 NA #> 6 s(x0) NA NA 7.26 3.04 1.96 1.30 13.2 5.06e-2 NA #> 7 s(x0) NA NA 7.18 2.90 1.96 1.49 12.9 6.06e-2 NA #> 8 s(x0) NA NA 7.09 2.76 1.96 1.69 12.5 7.07e-2 NA #> 9 s(x0) NA NA 6.99 2.61 1.96 1.87 12.1 8.07e-2 NA #> 10 s(x0) NA NA 6.87 2.47 1.96 2.03 11.7 9.08e-2 NA #> # i 390 more rows #> # i 2 more variables: x2 , x3 ## derivatives for a selected smooth derivatives(mod, type = \"central\", select = \"s(x1)\") #> # A tibble: 100 x 9 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x1 #> #> 1 s(x1) NA NA -0.907 3.12 1.96 -7.02 5.20 0.000405 #> 2 s(x1) NA NA -0.906 3.11 1.96 -7.01 5.20 0.0105 #> 3 s(x1) NA NA -0.898 3.10 1.96 -6.97 5.17 0.0205 #> 4 s(x1) NA NA -0.880 3.06 1.96 -6.88 5.12 0.0306 #> 5 s(x1) NA NA -0.849 3.00 1.96 -6.73 5.03 0.0406 #> 6 s(x1) NA NA -0.803 2.92 1.96 -6.52 4.92 0.0507 #> 7 s(x1) NA NA -0.740 2.81 1.96 -6.25 4.77 0.0607 #> 8 s(x1) NA NA -0.659 2.69 1.96 -5.93 4.61 0.0708 #> 9 s(x1) NA NA -0.557 2.56 1.96 -5.57 4.46 0.0809 #> 10 s(x1) NA NA -0.436 2.42 1.96 -5.19 4.32 0.0909 #> # i 90 more rows ## or via a partial match derivatives(mod, type = \"central\", select = \"x1\", partial_match = TRUE) #> # A tibble: 100 x 9 #> .smooth .by .fs .derivative .se .crit .lower_ci .upper_ci x1 #> #> 1 s(x1) NA NA -0.907 3.12 1.96 -7.02 5.20 0.000405 #> 2 s(x1) NA NA -0.906 3.11 1.96 -7.01 5.20 0.0105 #> 3 s(x1) NA NA -0.898 3.10 1.96 -6.97 5.17 0.0205 #> 4 s(x1) NA NA -0.880 3.06 1.96 -6.88 5.12 0.0306 #> 5 s(x1) NA NA -0.849 3.00 1.96 -6.73 5.03 0.0406 #> 6 s(x1) NA NA -0.803 2.92 1.96 -6.52 4.92 0.0507 #> 7 s(x1) NA NA -0.740 2.81 1.96 -6.25 4.77 0.0607 #> 8 s(x1) NA NA -0.659 2.69 1.96 -5.93 4.61 0.0708 #> 9 s(x1) NA NA -0.557 2.56 1.96 -5.57 4.46 0.0809 #> 10 s(x1) NA NA -0.436 2.42 1.96 -5.19 4.32 0.0909 #> # i 90 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Differences of factor smooth interactions — difference_smooths","title":"Differences of factor smooth interactions — difference_smooths","text":"Estimates pairwise differences (comparisons) factor smooth interactions (smooths factor argument) pairs groups defined factor. group means can optionally included difference.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Differences of factor smooth interactions — difference_smooths","text":"","code":"difference_smooths(model, ...) # S3 method for class 'gam' difference_smooths( model, select = NULL, smooth = deprecated(), n = 100, ci_level = 0.95, data = NULL, group_means = FALSE, partial_match = TRUE, unconditional = FALSE, frequentist = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Differences of factor smooth interactions — difference_smooths","text":"model fitted model. ... arguments passed methods. currently used. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. n numeric; number points evaluate difference pairs smooths. ci_level numeric 0 1; coverage credible interval. data data frame locations evaluate difference smooths. group_means logical; group means included difference? partial_match logical; smooth match partially smooths? partial_match = TRUE, smooth must single string, character vector length 1. Unlike similar functions, default TRUE intention users matching factor-smooth labels. unconditional logical; account smoothness selection model? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/difference_smooths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Differences of factor smooth interactions — difference_smooths","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", seed = 42) m <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") sm_dif <- difference_smooths(m, select = \"s(x2)\") sm_dif #> # A tibble: 300 x 9 #> .smooth .by .level_1 .level_2 .diff .se .lower_ci .upper_ci x2 #> #> 1 s(x2) fac 1 2 0.386 0.618 -0.824 1.60 0.00359 #> 2 s(x2) fac 1 2 0.479 0.574 -0.646 1.60 0.0136 #> 3 s(x2) fac 1 2 0.572 0.534 -0.474 1.62 0.0237 #> 4 s(x2) fac 1 2 0.665 0.497 -0.308 1.64 0.0338 #> 5 s(x2) fac 1 2 0.758 0.464 -0.151 1.67 0.0438 #> 6 s(x2) fac 1 2 0.850 0.435 -0.00342 1.70 0.0539 #> 7 s(x2) fac 1 2 0.941 0.412 0.134 1.75 0.0639 #> 8 s(x2) fac 1 2 1.03 0.393 0.262 1.80 0.0740 #> 9 s(x2) fac 1 2 1.12 0.378 0.380 1.86 0.0841 #> 10 s(x2) fac 1 2 1.21 0.367 0.489 1.93 0.0941 #> # i 290 more rows draw(sm_dif) # include the groups means for `fac` in the difference sm_dif2 <- difference_smooths(m, select = \"s(x2)\", group_means = TRUE) draw(sm_dif2)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/dispersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dispersion parameter for fitted model — dispersion","text":"","code":"dispersion(model, ...) # S3 method for class 'gam' dispersion(model, ...) # S3 method for class 'glm' dispersion(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/dispersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dispersion parameter for fitted model — dispersion","text":"model fitted model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot basis functions — draw.basis","title":"Plot basis functions — draw.basis","text":"Plots basis functions using ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot basis functions — draw.basis","text":"","code":"# S3 method for class 'basis' draw( object, legend = FALSE, labeller = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, ncol = NULL, nrow = NULL, angle = NULL, guides = \"keep\", contour = FALSE, n_contour = 10, contour_col = \"black\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot basis functions — draw.basis","text":"object object, result call basis(). legend logical; legend drawn indicate basis functions? labeller labeller function label facets. default use ggplot2::label_both(). ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). ncol, nrow numeric; numbers rows columns spread plots angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() contour logical; contours draw plot using ggplot2::geom_contour(). n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). contour_col colour specification contour lines. ... arguments passed methods. used method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot basis functions — draw.basis","text":"patchwork object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot basis functions — draw.basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot basis functions — draw.basis","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") bf <- basis(m) draw(bf) bf <- basis(m, \"s(x2)\") draw(bf)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot comparisons of smooths — draw.compare_smooths","title":"Plot comparisons of smooths — draw.compare_smooths","text":"Plot comparisons smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot comparisons of smooths — draw.compare_smooths","text":"","code":"# S3 method for class 'compare_smooths' draw(object, ncol = NULL, nrow = NULL, guides = \"collect\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.compare_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot comparisons of smooths — draw.compare_smooths","text":"object class \"compare_smooths\", result call compare_smooths(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot conditional predictions — draw.conditional_values","title":"Plot conditional predictions — draw.conditional_values","text":"Plot conditional predictions","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot conditional predictions — draw.conditional_values","text":"","code":"# S3 method for class 'conditional_values' draw( object, facet_scales = \"fixed\", discrete_colour = NULL, discrete_fill = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.conditional_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot conditional predictions — draw.conditional_values","text":"object object class \"conditional_values\", result call conditional_values(). facet_scales character; facets axis scales across facets? See ggplot2::facet_wrap() details. Options : \"fixed\" (default), \"free_x\", \"free_y\", \"free\". discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot derivatives of smooths — draw.derivatives","title":"Plot derivatives of smooths — draw.derivatives","text":"Plot derivatives smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot derivatives of smooths — draw.derivatives","text":"","code":"# S3 method for class 'derivatives' draw( object, select = NULL, scales = c(\"free\", \"fixed\"), add_change = FALSE, change_type = c(\"change\", \"sizer\"), alpha = 0.2, change_col = \"black\", decrease_col = \"#56B4E9\", increase_col = \"#E69F00\", lwd_change = 1.5, ncol = NULL, nrow = NULL, guides = \"keep\", angle = NULL, ... ) # S3 method for class 'partial_derivatives' draw( object, select = NULL, scales = c(\"free\", \"fixed\"), alpha = 0.2, ncol = NULL, nrow = NULL, guides = \"keep\", angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot derivatives of smooths — draw.derivatives","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. add_change logical; periods significant change highlighted plot? change_type character; type change indicate. \"change\", differentiation made periods significant increase decrease. \"sizer\", periods increase decrease differentiated resulting plot. alpha numeric; alpha transparency confidence simultaneous interval. change_col, decrease_col, increase_col colour specifications use indicating periods change. col_change used change_type = \"change\", col_decrease col_increase used `change_type = \"sizer\"“. lwd_change numeric; linewidth use change indicators. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot derivatives of smooths — draw.derivatives","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 800, dist = \"normal\", scale = 2, seed = 42) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivative of all smooths df <- derivatives(mod, type = \"central\") draw(df) ## fixed axis scales draw(df, scales = \"fixed\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot differences of smooths — draw.difference_smooth","title":"Plot differences of smooths — draw.difference_smooth","text":"Plot differences smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot differences of smooths — draw.difference_smooth","text":"","code":"# S3 method for class 'difference_smooth' draw( object, select = NULL, rug = FALSE, ref_line = FALSE, contour = FALSE, contour_col = \"black\", n_contour = NULL, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", line_col = \"red\", scales = c(\"free\", \"fixed\"), ncol = NULL, nrow = NULL, guides = \"keep\", xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot differences of smooths — draw.difference_smooth","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. rug logical; ref_line logical; contour logical; contour lines added smooth surfaces? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth difference line. line_col colour specification drawing reference lines scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() xlab, ylab, title, subtitle, caption character; labels annotate plots angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.difference_smooth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot differences of smooths — draw.difference_smooth","text":"","code":"load_mgcv() # simulate some data; a factor smooth example df <- data_sim(\"eg4\", seed = 42) # fit GAM m <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = df, method = \"REML\") # calculate the differences between pairs of smooths the f_j(x2) term diffs <- difference_smooths(m, select = \"s(x2)\") draw(diffs)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated parametric effects — draw.evaluated_parametric_term","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"Plots estimated univariate bivariate smooths using ggplot2.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"","code":"# S3 method for class 'evaluated_parametric_term' draw( object, ci_level = 0.95, constant = NULL, fun = NULL, xlab, ylab, title = NULL, subtitle = NULL, caption = NULL, rug = TRUE, position = \"identity\", response_range = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"object object, result call evaluate_parametric_term(). ci_level numeric 0 1; coverage credible interval. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). rug evaluate_parametric_terms(), logical indicate rug plot drawn. position Position adjustment, either string, result call position adjustment function. response_range numeric; vector two values giving range response data guide. Used fix plots common scale/range. Ignored show set \"se\". ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.evaluated_parametric_term.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot estimated parametric effects — draw.evaluated_parametric_term","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated smooths from a fitted GAM — draw.gam","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Plots estimated smooths fitted GAM model similar way mgcv::plot.gam() instead using base graphics, ggplot2::ggplot() used instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"","code":"# S3 method for class 'gam' draw( object, data = NULL, select = NULL, parametric = FALSE, terms = NULL, residuals = FALSE, scales = c(\"free\", \"fixed\"), ci_level = 0.95, n = 100, n_3d = 16, n_4d = 4, unconditional = FALSE, overall_uncertainty = TRUE, constant = NULL, fun = NULL, dist = 0.1, rug = TRUE, contour = TRUE, grouped_by = FALSE, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", resid_col = \"steelblue3\", contour_col = \"black\", n_contour = NULL, partial_match = FALSE, discrete_colour = NULL, discrete_fill = NULL, continuous_colour = NULL, continuous_fill = NULL, position = \"identity\", angle = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", widths = NULL, heights = NULL, crs = NULL, default_crs = NULL, lims_method = \"cross\", wrap = TRUE, caption = TRUE, envir = environment(formula(object)), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"object fitted GAM, result call mgcv::gam(). data optional data frame used supply data smooths evaluated plotted. usually needed, option need fine control exactly data used plotting. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. parametric logical; plot parametric terms also? Note select used selecting smooths plot. terms argument used select parametric effects plotted. default, mgcv::plot.gam(), draw parametric effects. terms character; model parametric terms drawn? Default NULL plot parametric terms can drawn. residuals logical; partial residuals smooth drawn? Ignored anything simple univariate smooth. scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ci_level numeric 0 1; coverage credible interval. n numeric; number points range covariate evaluate smooth. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. contour logical; contours draw plot using ggplot2::geom_contour(). grouped_by logical; factor smooths drawn one panel per level factor (FALSE, default), individual smooths combined single panel containing levels (TRUE)? ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth line. resid_col colour specification partial residuals. contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). partial_match logical; smooths selected partial matches select? TRUE, select can single string match . discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. continuous_colour suitable colour scale used plotting continuous variables. continuous_fill suitable fill scale used plotting continuous variables. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() widths, heights relative widths heights column row grid. get repeated match dimensions grid. 1 plot widths = NULL, value widths set internally widths = 1 accommodate plots smooths use fixed aspect ratio. crs coordinate reference system (CRS) use plot. data projected CRS. See ggplot2::coord_sf() details. default_crs coordinate reference system (CRS) use non-sf layers plot. left default NULL, CRS used 4326 (WGS84), appropriate spline---sphere smooths, parameterized terms latitude longitude coordinates. See ggplot2::coord_sf() details. lims_method character; affects axis limits determined. See ggplot2::coord_sf(). careful; testing examples, changing \"orthogonal\" example chlorophyll-example Simon Wood's GAM book quickly used RAM test system OS killed R. incorrect usage part; right now grid points SOS smooths evaluated (supplied user) can produce invalid coordinates corners tiles grid generated tile centres without respect spacing tiles. wrap logical; wrap plots patchwork? FALSE, list ggplot objects returned, 1 per term plotted. caption logical; show smooth type caption plot? envir environment look data within. ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"object returned created patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Internally, plots smooth created using ggplot2::ggplot() composed single plot using patchwork::wrap_plots(). result, possible use + add plots way one might typically work ggplot() plots. Instead, use & operator; see examples.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot estimated smooths from a fitted GAM — draw.gam","text":"","code":"load_mgcv() # simulate some data df1 <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) # fit GAM m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df1, method = \"REML\") # plot all smooths draw(m1) # can add partial residuals draw(m1, residuals = TRUE) df2 <- data_sim(\"eg2\", n = 1000, dist = \"normal\", scale = 1, seed = 2) m2 <- gam(y ~ s(x, z, k = 40), data = df2, method = \"REML\") draw(m2, contour = FALSE, n = 50) # See https://gavinsimpson.github.io/gratia/articles/custom-plotting.html # for more examples and for details on how to modify the theme of all the # plots produced by draw(). To modify all panels, for example to change the # theme, use the & operator"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"Provides draw() method GAMLSS (distributional GAMs) fitted GJRM::gamlss().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"","code":"# S3 method for class 'gamlss' draw( object, scales = c(\"free\", \"fixed\"), ncol = NULL, nrow = NULL, guides = \"keep\", widths = NULL, heights = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"object model, fitted GJRM::gamlss() scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() widths, heights relative widths heights column row grid. get repeated match dimensions grid. 1 plot widths = NULL, value widths set internally widths = 1 accommodate plots smooths use fixed aspect ratio. ... arguments passed draw.gam()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"Plots smooths labelled linear predictor belong.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.gamlss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot smooths of a GAMLSS model estimated by GJRM::gamlss — draw.gamlss","text":"","code":"if (require(\"GJRM\", quietly = TRUE)) { # follow example from ?GJRM::gamlss load_mgcv() suppressPackageStartupMessages(library(\"GJRM\")) set.seed(0) n <- 100 x1 <- round(runif(n)) x2 <- runif(n) x3 <- runif(n) f1 <- function(x) cos(pi * 2 * x) + sin(pi * x) y1 <- -1.55 + 2 * x1 + f1(x2) + rnorm(n) dataSim <- data.frame(y1, x1, x2, x3) eq_mu <- y1 ~ x1 + s(x2) eq_s <- ~ s(x3, k = 6) fl <- list(eq_mu, eq_s) m <- gamlss(fl, data = dataSim) draw(m) }"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic plotting via ggplot2 — draw","title":"Generic plotting via ggplot2 — draw","text":"Generic plotting via ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic plotting via ggplot2 — draw","text":"","code":"draw(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic plotting via ggplot2 — draw","text":"object R object plot. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic plotting via ggplot2 — draw","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generic plotting via ggplot2 — draw","text":"Generic function plotting R objects uses ggplot2 package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic plotting via ggplot2 — draw","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot basis functions — draw.mgcv_smooth","title":"Plot basis functions — draw.mgcv_smooth","text":"Plots basis functions using ggplot2","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot basis functions — draw.mgcv_smooth","text":"","code":"# S3 method for class 'mgcv_smooth' draw( object, legend = FALSE, use_facets = TRUE, labeller = NULL, xlab, ylab, title = NULL, subtitle = NULL, caption = NULL, angle = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot basis functions — draw.mgcv_smooth","text":"object object, result call basis(). legend logical; legend drawn indicate basis functions? use_facets logical; factor smooths, use facets show basis functions level factor? FALSE, separate ggplot object created level combined using patchwork::wrap_plots(). Currently ignored. labeller labeller function label facets. default use ggplot2::label_both(). xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... arguments passed methods. used method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot basis functions — draw.mgcv_smooth","text":"ggplot2::ggplot() object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot basis functions — draw.mgcv_smooth","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.mgcv_smooth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot basis functions — draw.mgcv_smooth","text":"","code":"load_mgcv() df <- data_sim(\"eg4\", n = 400, seed = 42) bf <- basis(s(x0), data = df) draw(bf) bf <- basis(s(x2, by = fac, bs = \"bs\"), data = df) draw(bf)"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot concurvity measures — draw.pairwise_concurvity","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"Plot concurvity measures","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"","code":"# S3 method for class 'pairwise_concurvity' draw( object, title = \"Smooth-wise concurvity\", subtitle = NULL, caption = NULL, x_lab = \"Term\", y_lab = \"With\", fill_lab = \"Concurvity\", continuous_colour = NULL, ... ) # S3 method for class 'overall_concurvity' draw( object, title = \"Overall concurvity\", subtitle = NULL, caption = NULL, y_lab = \"Concurvity\", x_lab = NULL, bar_col = \"steelblue\", bar_fill = \"steelblue\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.pairwise_concurvity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot concurvity measures — draw.pairwise_concurvity","text":"object object inheriting class \"concurvity\", usually result call model_concurvity() abbreviated form concrvity(). title character; plot title. subtitle character; plot subtitle. caption character; plot caption x_lab character; label x axis. y_lab character; label y axis. fill_lab character; label use fill guide. continuous_colour function; continuous colour (fill) scale use. ... arguments passed methods. bar_col colour specification bar colour. bar_fill colour specification bar fill","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot estimated effects for model parametric terms — draw.parametric_effects","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"Plot estimated effects model parametric terms","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"","code":"# S3 method for class 'parametric_effects' draw( object, scales = c(\"free\", \"fixed\"), ci_level = 0.95, ci_col = \"black\", ci_alpha = 0.2, line_col = \"black\", constant = NULL, fun = NULL, rug = TRUE, position = \"identity\", angle = NULL, ..., ncol = NULL, nrow = NULL, guides = \"keep\" )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.parametric_effects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot estimated effects for model parametric terms — draw.parametric_effects","text":"object fitted GAM, result call mgcv::gam(). scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. ci_level numeric 0 1; coverage credible interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. ci_alpha numeric; alpha transparency confidence simultaneous interval. line_col colour specification used regression lines linear continuous terms. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ... additional arguments passed patchwork::wrap_plots(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Display penalty matrices of smooths using ggplot — draw.penalty_df","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"Displays penalty matrices smooths heatmap using ggplot","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"","code":"# S3 method for class 'penalty_df' draw( object, normalize = FALSE, as_matrix = TRUE, continuous_fill = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"object fitted GAM, result call mgcv::gam(). normalize logical; normalize penalty range -1, 1? as_matrix logical; plotted penalty matrix oriented? TRUE row 1, column 1 penalty matrix draw upper left, whereas, FALSE drawn lower left plot. continuous_fill suitable fill scale used plotting continuous variables. xlab character expression; label x axis. supplied, axis label drawn. May vector, one per penalty. ylab character expression; label y axis. supplied, axis label drawn. May vector, one per penalty. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ncol, nrow numeric; numbers rows columns spread plots. guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.penalty_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Display penalty matrices of smooths using ggplot — draw.penalty_df","text":"","code":"load_mgcv() dat <- data_sim(\"eg4\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1, bs = \"cr\") + s(x2, bs = \"bs\", by = fac), data = dat, method = \"REML\" ) ## produce a multi-panel plot of all penalties draw(penalty(m)) # for a specific smooth draw(penalty(m, select = \"s(x2):fac1\"))"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a rootogram — draw.rootogram","title":"Draw a rootogram — draw.rootogram","text":"rootogram model diagnostic tool assesses goodness fit statistical model. observed values response compared expected fitted model. discrete, count responses, frequency count (0, 1, 2, etc) observed data expected conditional distribution response implied model compared. continuous variables, observed expected frequencies obtained grouping data bins. rootogram drawn using ggplot2::ggplot() graphics. design closely follows Kleiber & Zeileis (2016).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a rootogram — draw.rootogram","text":"","code":"# S3 method for class 'rootogram' draw( object, type = c(\"hanging\", \"standing\", \"suspended\"), sqrt = TRUE, ref_line = TRUE, warn_limits = TRUE, fitted_colour = \"steelblue\", bar_colour = NA, bar_fill = \"grey\", ref_line_colour = \"black\", warn_line_colour = \"black\", ylab = NULL, xlab = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a rootogram — draw.rootogram","text":"object R object plot. type character; type rootogram draw. sqrt logical; show observed fitted frequencies ref_line logical; draw reference line zero? warn_limits logical; draw Tukey's warning limit lines +/- 1? fitted_colour, bar_colour, bar_fill, ref_line_colour, warn_line_colour colours used draw respective element rootogram. xlab, ylab character; labels x y axis rootogram. May missing (NULL), case suitable labels used. ' ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a rootogram — draw.rootogram","text":"'ggplot' object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw a rootogram — draw.rootogram","text":"Kleiber, C., Zeileis, ., (2016) Visualizing Count Data Regressions Using Rootograms. . Stat. 70, 296–303. doi:10.1080/00031305.2016.1173590","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.rootogram.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a rootogram — draw.rootogram","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 1000, dist = \"poisson\", scale = 0.1, seed = 6) # A poisson example m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = poisson(), data = df, method = \"REML\") rg <- rootogram(m) # plot the rootogram draw(rg) # change the type of rootogram draw(rg, type = \"suspended\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"Plot result call smooth_estimates()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"","code":"# S3 method for class 'smooth_estimates' draw( object, constant = NULL, fun = NULL, contour = TRUE, grouped_by = FALSE, contour_col = \"black\", n_contour = NULL, ci_alpha = 0.2, ci_col = \"black\", smooth_col = \"black\", resid_col = \"steelblue3\", decrease_col = \"#56B4E9\", increase_col = \"#E69F00\", change_lwd = 1.75, partial_match = FALSE, discrete_colour = NULL, discrete_fill = NULL, continuous_colour = NULL, continuous_fill = NULL, angle = NULL, ylim = NULL, crs = NULL, default_crs = NULL, lims_method = \"cross\", caption = TRUE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"object fitted GAM, result call mgcv::gam(). constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. contour logical; contours draw plot using ggplot2::geom_contour(). grouped_by logical; factor smooths drawn one panel per level factor (FALSE, default), individual smooths combined single panel containing levels (TRUE)? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). ci_alpha numeric; alpha transparency confidence simultaneous interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. smooth_col colour specification smooth line. resid_col colour specification partial residuals. decrease_col, increase_col colour specifications use indicating periods change. col_change used change_type = \"change\", col_decrease col_increase used `change_type = \"sizer\"“. change_lwd numeric; value set linewidth ggplot2::geom_line(), used represent periods change. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . discrete_colour suitable colour scale used plotting discrete variables. discrete_fill suitable fill scale used plotting discrete variables. continuous_colour suitable colour scale used plotting continuous variables. continuous_fill suitable fill scale used plotting continuous variables. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ylim numeric; vector y axis limits use panels drawn. crs coordinate reference system (CRS) use plot. data projected CRS. See ggplot2::coord_sf() details. default_crs coordinate reference system (CRS) use non-sf layers plot. left default NULL, CRS used 4326 (WGS84), appropriate spline---sphere smooths, parameterized terms latitude longitude coordinates. See ggplot2::coord_sf() details. lims_method character; affects axis limits determined. See ggplot2::coord_sf(). careful; testing examples, changing \"orthogonal\" example chlorophyll-example Simon Wood's GAM book quickly used RAM test system OS killed R. incorrect usage part; right now grid points SOS smooths evaluated (supplied user) can produce invalid coordinates corners tiles grid generated tile centres without respect spacing tiles. caption logical; show smooth type caption plot? ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_estimates.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot the result of a call to smooth_estimates() — draw.smooth_estimates","text":"","code":"load_mgcv() # example data df <- data_sim(\"eg1\", seed = 21) # fit GAM m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # plot all of the estimated smooths sm <- smooth_estimates(m) draw(sm) # evaluate smooth of `x2` sm <- smooth_estimates(m, select = \"s(x2)\") # plot it draw(sm) # customising some plot elements draw(sm, ci_col = \"steelblue\", smooth_col = \"forestgreen\", ci_alpha = 0.3) # Add a constant to the plotted smooth draw(sm, constant = coef(m)[1]) # Adding change indicators to smooths based on derivatives of the smooth d <- derivatives(m, n = 100) # n to match smooth_estimates() smooth_estimates(m) |> add_sizer(derivatives = d, type = \"sizer\") |> draw()"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot posterior smooths — draw.smooth_samples","title":"Plot posterior smooths — draw.smooth_samples","text":"Plot posterior smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot posterior smooths — draw.smooth_samples","text":"","code":"# S3 method for class 'smooth_samples' draw( object, select = NULL, n_samples = NULL, seed = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, alpha = 1, colour = \"black\", contour = FALSE, contour_col = \"black\", n_contour = NULL, scales = c(\"free\", \"fixed\"), rug = TRUE, partial_match = FALSE, angle = NULL, ncol = NULL, nrow = NULL, guides = \"keep\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot posterior smooths — draw.smooth_samples","text":"object fitted GAM, result call mgcv::gam(). select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. n_samples numeric; NULL, sample n_samples posterior draws plotting. seed numeric; random seed used sampling draws. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). alpha numeric; alpha transparency confidence simultaneous interval. colour colour use draw posterior smooths. Passed ggplot2::geom_line() argument colour. contour logical; contour lines added smooth surfaces? contour_col colour specification contour lines. n_contour numeric; number contour bins. result n_contour - 1 contour lines drawn. See ggplot2::geom_contour(). scales character; univariate smooths plotted y-axis scale? scales = \"free\", default, univariate smooth y-axis scale. scales = \"fixed\", common y axis scale used univariate smooths. Currently affect y-axis scale plots parametric terms. rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). ncol, nrow numeric; numbers rows columns spread plots guides character; one \"keep\" (default), \"collect\", \"auto\". Passed patchwork::plot_layout() ... arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot posterior smooths — draw.smooth_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw.smooth_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot posterior smooths — draw.smooth_samples","text":"","code":"load_mgcv() dat1 <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## a single smooth GAM m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat1, method = \"REML\") ## posterior smooths from m1 sm1 <- smooth_samples(m1, n = 15, seed = 23478) ## plot draw(sm1, alpha = 0.7) ## plot only 5 randomly smapled draws draw(sm1, n_samples = 5, alpha = 0.7) ## A factor-by smooth example dat2 <- data_sim(\"eg4\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## a multi-smooth GAM with a factor-by smooth m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = dat2, method = \"REML\") ## posterior smooths from m1 sm2 <- smooth_samples(m2, n = 15, seed = 23478) ## plot, this time selecting only the factor-by smooth draw(sm2, select = \"s(x2)\", partial_match = TRUE, alpha = 0.7) # \\donttest{ ## A 2D smooth example dat3 <- data_sim(\"eg2\", n = 400, dist = \"normal\", scale = 1, seed = 1) ## fit a 2D smooth m3 <- gam(y ~ te(x, z), data = dat3, method = \"REML\") ## get samples sm3 <- smooth_samples(m3, n = 10) ## plot just 6 of the draws, with contour line overlays draw(sm3, n_samples = 6, contour = TRUE, seed = 42) # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal function to draw an individual parametric effect — draw_parametric_effect","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"Internal function draw individual parametric effect","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"","code":"draw_parametric_effect( object, ci_level = 0.95, ci_col = \"black\", ci_alpha = 0.2, line_col = \"black\", constant = NULL, fun = NULL, xlab = NULL, ylab = NULL, title = NULL, subtitle = NULL, caption = NULL, rug = TRUE, position = \"identity\", ylim = NULL, angle = NULL, factor_levels = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/draw_parametric_effect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal function to draw an individual parametric effect — draw_parametric_effect","text":"object fitted GAM, result call mgcv::gam(). ci_level numeric 0 1; coverage credible interval. ci_col colour specification confidence/credible intervals band. Affects fill interval. ci_alpha numeric; alpha transparency confidence simultaneous interval. constant numeric; constant add estimated values smooth. constant, supplied, added estimated value confidence band computed. fun function; function applied estimated values confidence interval plotting. Can function name function. Function fun applied adding constant, provided. xlab character expression; label x axis. supplied, suitable label generated object. ylab character expression; label y axis. supplied, suitable label generated object. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). rug logical; draw rug plot bottom plot 1-D smooths plot locations data higher dimensions. position Position adjustment, either string, result call position adjustment function. angle numeric; angle x axis tick labels drawn passed angle argument ggplot2::guide_axis(). factor_levels list; named list factor levels ... additional arguments passed patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":null,"dir":"Reference","previous_headings":"","what":"Effective degrees of freedom for smooths and GAMs — edf","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"Extracts effective degrees freedom (EDF) model smooth terms overall EDF fitted GAMs","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"","code":"edf(object, ...) # S3 method for class 'gam' edf( object, select = NULL, smooth = deprecated(), type = c(\"default\", \"unconditional\", \"alternative\"), partial_match = FALSE, ... ) model_edf(object, ..., type = c(\"default\", \"unconditional\", \"alternative\"))"},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"object fitted model extract smooth-specific EDFs. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. extracted. NULL, default, EDFs smooths returned. type character: type EDF return. \"default\" returns standard EDF; \"unconditional\" selects EDF corrected smoothness parameter selection, available; \"alternative\" returns alternative formulation EDF Wood (2017, pp. 252) partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"Multiple formulations effective degrees freedom available. additional uncertainty due selection smoothness parameters can taken account computing EDF smooths. form EDF available type = \"unconditional\". Wood (2017; pp. 252) describes alternative EDF model $$\\mathrm{EDF} = 2\\mathrm{tr}(\\mathbf{F}) - \\mathrm{tr}(\\mathbf{FF}),$$ \\(\\mathrm{tr}\\) matrix trace \\(\\mathbf{F}\\) matrix mapping un-penalized coefficient estimates penalized coefficient estimates. trace \\(\\mathbf{F}\\) effectively average shrinkage coefficients multipled number coefficients (Wood, 2017). Smooth-specific EDFs obtained summing relevent elements \\(\\mathrm{diag}(2\\mathbf{F} - \\mathbf{FF})\\).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/edf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Effective degrees of freedom for smooths and GAMs — edf","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # extract the EDFs for all smooths edf(m) #> # A tibble: 4 x 2 #> .smooth .edf #> #> 1 s(x0) 3.4248 #> 2 s(x1) 3.2213 #> 3 s(x2) 7.9049 #> 4 s(x3) 1.8847 # or selected smooths edf(m, select = c(\"s(x0)\", \"s(x2)\")) #> # A tibble: 2 x 2 #> .smooth .edf #> #> 1 s(x0) 3.4248 #> 2 s(x2) 7.9049 # accounting for smoothness parameter uncertainty edf(m, type = \"unconditional\") #> # A tibble: 4 x 2 #> .smooth .edf #> #> 1 s(x0) 3.7697 #> 2 s(x1) 3.8728 #> 3 s(x2) 8.0670 #> 4 s(x3) 2.8834 # over EDF of the model, including the intercept model_edf(m) #> # A tibble: 1 x 2 #> .model .edf #> #> 1 m 17.436 # can get model EDF for multiple models m2 <- gam(y ~ s(x0) + s(x1) + s(x3), data = df, method = \"REML\") model_edf(m, m2) #> # A tibble: 2 x 2 #> .model .edf #> #> 1 m 17.436 #> 2 m2 7.5777"},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"S3 methods to evaluate individual smooths — eval_smooth","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"S3 methods evaluate individual smooths","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"","code":"eval_smooth(smooth, ...) # S3 method for class 'mgcv.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'soap.film' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'scam_smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'fs.interaction' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'sz.interaction' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'random.effect' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 'mrf.smooth' eval_smooth( smooth, model, n = 100, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, ... ) # S3 method for class 't2.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... ) # S3 method for class 'tensor.smooth' eval_smooth( smooth, model, n = 100, n_3d = NULL, n_4d = NULL, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/eval_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"S3 methods to evaluate individual smooths — eval_smooth","text":"smooth currently object inherits class mgcv.smooth. ... arguments passed methods model fitted model; currently mgcv::gam() mgcv::bam() models suported. n numeric; number points range covariate evaluate smooth. n_3d, n_4d numeric; number points range last covariate 3D 4D smooth. default NULL achieves standard behaviour using n points range covariate, resulting n^d evaluation points, d dimension smooth. d > 2 can result many evaluation points slow performance. smooths d > 4, value n_4d used dimensions > 4, unless NULL, case default behaviour (using n dimensions) observed. data optional data frame values evaluate smooth . unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate parametric model terms — evaluate_parametric_term","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"Returns values parametric model terms values factor terms grid covariate values linear parametric terms. function now deprecated favour parametric_effects().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"","code":"evaluate_parametric_term(object, ...) # S3 method for class 'gam' evaluate_parametric_term(object, term, unconditional = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_parametric_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate parametric model terms — evaluate_parametric_term","text":"object object class \"gam\" \"gamm\". ... arguments passed methods. term character; parametric term whose effects evaluated unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a smooth — evaluate_smooth","title":"Evaluate a smooth — evaluate_smooth","text":"Evaluate smooth grid evenly spaced value range covariate associated smooth. Alternatively, set points smooth evaluated can supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a smooth — evaluate_smooth","text":"","code":"evaluate_smooth(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a smooth — evaluate_smooth","text":"object object class \"gam\" \"gamm\". ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate a smooth — evaluate_smooth","text":"data frame, class \"evaluated_1d_smooth\" evaluated_2d_smooth, inherit classes \"evaluated_smooth\" \"data.frame\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evaluate_smooth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Evaluate a smooth — evaluate_smooth","text":"evaluate_smooth() deprecated favour smooth_estimates(), provides cleaner way evaluate smooth range covariate values. smooth_estimates() can handle much wider range models evaluate_smooth() capable smooth_estimates() much easier extend handle new smooth types. code uses evaluate_smooth() work simply changing function call smooth_estimates(). However, differences: newdata argument becomes data","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a sequence of evenly-spaced values — evenly","title":"Create a sequence of evenly-spaced values — evenly","text":"continuous vector x, evenly seq_min_max() create sequence n evenly-spaced values range lower – upper. default, lower defined min(x) upper max(x), excluding NAs. factor x, function returns levels(x).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a sequence of evenly-spaced values — evenly","text":"","code":"evenly(x, n = 100, by = NULL, lower = NULL, upper = NULL) seq_min_max(x, n, by = NULL, lower = NULL, upper = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a sequence of evenly-spaced values — evenly","text":"x numeric; vector evenly-spaced values returned n numeric; number evenly-spaced values return. default 100 used convenience typically used evaluating smooth. numeric; increment sequence. specified, argument n ignored sequence returned min(x) max(x) increments . lower numeric; lower bound interval. upper numeric; upper bound interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a sequence of evenly-spaced values — evenly","text":"numeric vector length n.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/evenly.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a sequence of evenly-spaced values — evenly","text":"","code":"x <- rnorm(10) n <- 10L # 10 values evenly over the range of `x` evenly(x, n = n) #> [1] -0.83562861 -0.56552757 -0.29542652 -0.02532547 0.24477557 0.51487662 #> [7] 0.78497766 1.05507871 1.32517976 1.59528080 # evenly spaced values, incrementing by 0.2 evenly(x, by = 0.2) #> [1] -0.83562861 -0.63562861 -0.43562861 -0.23562861 -0.03562861 0.16437139 #> [7] 0.36437139 0.56437139 0.76437139 0.96437139 1.16437139 1.36437139 #> [13] 1.56437139 # evenly spaced values, incrementing by 0.2, starting at -2 evenly(x, by = 0.2, lower = -2) #> [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 #> [16] 1.0 1.2 1.4"},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":null,"dir":"Reference","previous_headings":"","what":"All combinations of factor levels — factor_combos","title":"All combinations of factor levels — factor_combos","text":"combinations factor levels","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"All combinations of factor levels — factor_combos","text":"","code":"factor_combos(object, ...) # S3 method for class 'gam' factor_combos(object, vars = everything(), complete = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/factor_combos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"All combinations of factor levels — factor_combos","text":"object fitted model object. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. complete logical; combinations factor levels returned? FALSE, combinations levels observed model retained.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract family objects from models — family.gam","title":"Extract family objects from models — family.gam","text":"Provides stats::family() method range GAM objects.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract family objects from models — family.gam","text":"","code":"# S3 method for class 'gam' family(object, ...) # S3 method for class 'gamm' family(object, ...) # S3 method for class 'bam' family(object, ...) # S3 method for class 'list' family(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract family objects from models — family.gam","text":"object fitted model. Models fitted mgcv::gam(), mgcv::bam(), mgcv::gamm(), gamm4::gamm4() currently supported. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Name of family used to fit model — family_name","title":"Name of family used to fit model — family_name","text":"Extracts name family used fit supplied model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Name of family used to fit model — family_name","text":"","code":"family_name(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Name of family used to fit model — family_name","text":"object R object. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Name of family used to fit model — family_name","text":"character vector containing family name.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Extracts the type of family in a consistent way — family_type","title":"Extracts the type of family in a consistent way — family_type","text":"Extracts type family consistent way","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extracts the type of family in a consistent way — family_type","text":"","code":"family_type(object, ...) # S3 method for class 'family' family_type(object, ...) # Default S3 method family_type(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/family_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extracts the type of family in a consistent way — family_type","text":"object R object. Currently family() objects anything family() method. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":null,"dir":"Reference","previous_headings":"","what":"First derivatives of fitted GAM functions — fderiv","title":"First derivatives of fitted GAM functions — fderiv","text":"function deprecated limited first order forward finite differences derivatives , improved offer needed functionality without breaking backwards compatability papers blog posts already used fderiv(). replacement, derivatives(), now available recommended new analyses.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"First derivatives of fitted GAM functions — fderiv","text":"","code":"fderiv(model, ...) # S3 method for class 'gam' fderiv( model, newdata, term, n = 200, eps = 1e-07, unconditional = FALSE, offset = NULL, ... ) # S3 method for class 'gamm' fderiv(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"First derivatives of fitted GAM functions — fderiv","text":"model fitted GAM. Currently models fitted mgcv::gam() mgcv::gamm() supported. ... Arguments passed methods. newdata data frame containing values model covariates evaluate first derivatives smooths. term character; vector one terms derivatives required. missing, derivatives smooth terms returned. n integer; newdata missing original data can reconstructed model n controls number values range covariate populate newdata. eps numeric; value finite difference used approximate first derivative. unconditional logical; TRUE, smoothing parameter uncertainty corrected covariance matrix used, available, otherwise uncorrected Bayesian posterior covariance matrix used. offset numeric; value offset use generating predictions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"First derivatives of fitted GAM functions — fderiv","text":"object class \"fderiv\" returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"First derivatives of fitted GAM functions — fderiv","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fderiv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"First derivatives of fitted GAM functions — fderiv","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", seed = 2) mod <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## first derivatives of all smooths... fd <- fderiv(mod) ## now use --> fd <- derivatives(mod) ## ...and a selected smooth fd2 <- fderiv(mod, term = \"x1\") ## now use --> fd2 <- derivatives(mod, select = \"s(x1)\") ## Models with factors dat <- data_sim(\"eg4\", n = 400, dist = \"normal\", scale = 2, seed = 2) mod <- gam(y ~ s(x0) + s(x1) + fac, data = dat, method = \"REML\") ## first derivatives of all smooths... fd <- fderiv(mod) ## now use --> fd <- derivatives(mod) ## ...and a selected smooth fd2 <- fderiv(mod, term = \"x1\") ## now use --> fd2 <- derivatives(mod, select = \"s(x1)\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw fitted values from the posterior distribution — fitted_samples","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Expectations (fitted values) response drawn posterior distribution fitted model using Gaussian approximation posterior simple Metropolis Hastings sampler.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"","code":"fitted_samples(model, ...) # S3 method for class 'gam' fitted_samples( model, n = 1, data = newdata, seed = NULL, scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n_cores = 1, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, freq = FALSE, unconditional = FALSE, draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. scale character; scale fitted values returned ? \"linear predictor\" synonym \"link\" prefer terminology. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Models offset terms supplied via offset argument mgcv::gam() etc. ignored mgcv::predict.gam(). , kind offset term also ignored posterior_samples(). Offset terms included model formula supplied mgcv::gam() etc ignored posterior samples produced reflect offset term values. side effect requiring new data values provided posterior_samples() via data argument must include offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Wood, S.N., (2020). Simplified integrated nested Laplace approximation. Biometrika 107, 223–230. doi:10.1093/biomet/asz044","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw fitted values from the posterior distribution — fitted_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") fs <- fitted_samples(m1, n = 5, seed = 42) # \\donttest{ fs #> # A tibble: 5,000 x 4 #> .row .draw .parameter .fitted #> #> 1 1 1 location 6.34 #> 2 2 1 location 5.08 #> 3 3 1 location 6.84 #> 4 4 1 location 7.71 #> 5 5 1 location 9.23 #> 6 6 1 location 8.03 #> 7 7 1 location 6.19 #> 8 8 1 location 7.28 #> 9 9 1 location 14.0 #> 10 10 1 location 12.7 #> # i 4,990 more rows # } # can generate own set of draws and use them drws <- generate_draws(m1, n = 2, seed = 24) fs2 <- fitted_samples(m1, method = \"user\", draws = drws) # \\donttest{ fs2 #> # A tibble: 2,000 x 4 #> .row .draw .parameter .fitted #> #> 1 1 1 location 6.30 #> 2 2 1 location 5.12 #> 3 3 1 location 7.40 #> 4 4 1 location 7.42 #> 5 5 1 location 9.40 #> 6 6 1 location 8.04 #> 7 7 1 location 5.83 #> 8 8 1 location 7.30 #> 9 9 1 location 14.3 #> 10 10 1 location 13.1 #> # i 1,990 more rows # }"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate fitted values from a estimated GAM — fitted_values","title":"Generate fitted values from a estimated GAM — fitted_values","text":"Generate fitted values estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate fitted values from a estimated GAM — fitted_values","text":"","code":"fitted_values(object, ...) # S3 method for class 'gam' fitted_values( object, data = NULL, scale = c(\"response\", \"link\", \"linear predictor\"), ci_level = 0.95, ... ) # S3 method for class 'gamm' fitted_values(object, ...) # S3 method for class 'scam' fitted_values(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate fitted values from a estimated GAM — fitted_values","text":"object fitted model. Currently models fitted mgcv::gam() mgcv::bam() supported. ... arguments passed mgcv::predict.gam(). Note type, newdata, se.fit already used passed mgcv::predict.gam(). data optional data frame covariate values fitted values returned. scale character; scale fitted values returned ? \"linear predictor\" synonym \"link\" prefer terminology. ci_level numeric; value 0 1 indicating coverage credible interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate fitted values from a estimated GAM — fitted_values","text":"tibble (data frame) whose first m columns contain either data used fit model (data NULL), variables supplied data. Four columns added: fitted: fitted values specified scale, se: standard error fitted values (always link scale), lower, upper: limits credible interval fitted values, specified scale. Models fitted certain families include additional variables mgcv::ocat() models: scale = \"repsonse\", returned object contain row column category column, indicate row data row returned object belongs. Additionally, nrow(data) * n_categories rows returned object; row predicted probability single category response.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Generate fitted values from a estimated GAM — fitted_values","text":"families, regardless scale fitted values returned, se component returned object link (linear predictor) scale, response scale. exception mgcv::ocat() family, se response scale scale = \"response\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fitted_values.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate fitted values from a estimated GAM — fitted_values","text":"","code":"load_mgcv() sim_df <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = sim_df, method = \"REML\") fv <- fitted_values(m) fv #> # A tibble: 400 x 9 #> .row x0 x1 x2 x3 .fitted .se .lower_ci #> #> 1 1 0.184882 0.617142 0.415244 0.132410 8.73875 0.354677 8.04360 #> 2 2 0.702374 0.569064 0.531439 0.365331 7.62581 0.337779 6.96378 #> 3 3 0.573326 0.153970 0.00324621 0.454532 3.12106 0.591862 1.96103 #> 4 4 0.168052 0.0348332 0.252100 0.537114 11.1124 0.402378 10.3237 #> 5 5 0.943839 0.997953 0.155229 0.185495 14.0533 0.452947 13.1655 #> 6 6 0.943475 0.835574 0.878840 0.449276 6.13080 0.364521 5.41635 #> 7 7 0.129159 0.586562 0.203511 0.256527 12.4838 0.355808 11.7864 #> 8 8 0.833449 0.339117 0.583528 0.618458 6.25215 0.344700 5.57655 #> 9 9 0.468019 0.166883 0.804473 0.880744 4.21463 0.372003 3.48552 #> 10 10 0.549984 0.807410 0.264717 0.317747 15.5283 0.369999 14.8031 #> # i 390 more rows #> # i 1 more variable: .upper_ci "},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix the names of a data frame containing an offset variable. — fix_offset","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"Identifies variable, , model offset, fixed name offset(foo(var)) converted var, possibly sets values variable offset_val.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"","code":"fix_offset(model, newdata, offset_val = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"model fitted GAM. newdata data frame; new values predict . offset_val numeric, optional; provided, offset variable newdata set constant value returning newdata","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"original newdata returned fixed names possibly modified offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fix_offset.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix the names of a data frame containing an offset variable. — fix_offset","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + offset(x2), data = df, method = \"REML\") names(model.frame(m)) #> [1] \"y\" \"offset(x2)\" \"x0\" \"x1\" names(fix_offset(m, model.frame(m), offset_val = 1L)) #> [1] \"y\" \"x2\" \"x0\" \"x1\""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract fixed effects estimates from a fitted GAM — fixef.gam","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"Extract fixed effects estimates fitted GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"","code":"# S3 method for class 'gam' fixef(object, ...) # S3 method for class 'gamm' fixef(object, ...) # S3 method for class 'lm' fixef(object, ...) # S3 method for class 'glm' fixef(object, ...) fixed_effects(object, ...) # Default S3 method fixed_effects(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"object fitted GAM ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.gam.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract fixed effects estimates from a fitted GAM — fixef.gam","text":"","code":"load_mgcv() # run example if lme4 is available if (require(\"lme4\")) { data(sleepstudy, package = \"lme4\") m <- gam( Reaction ~ Days + s(Subject, bs = \"re\") + s(Days, Subject, bs = \"re\"), data = sleepstudy, method = \"REML\" ) fixef(m) } #> Loading required package: lme4 #> Loading required package: Matrix #> (Intercept) Days #> 251.40510 10.46729"},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract fixed effects estimates — fixef","title":"Extract fixed effects estimates — fixef","text":"Extract fixed effects estimates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/fixef.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract fixed effects estimates — fixef","text":"object fitted GAM ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"Posterior samples using simple Metropolis Hastings sampler","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"","code":"gaussian_draws(model, ...) # S3 method for class 'gam' gaussian_draws( model, n, n_cores = 1L, index = NULL, frequentist = FALSE, unconditional = FALSE, mvn_method = \"mvnfast\", ... ) # S3 method for class 'scam' gaussian_draws( model, n, n_cores = 1L, index = NULL, frequentist = FALSE, parametrized = TRUE, mvn_method = \"mvnfast\", ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/gaussian_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior samples using a simple Metropolis Hastings sampler — gaussian_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. n_cores integer; number CPU cores use generating multivariate normal distributed random values. used mvn_method = \"mvnfast\" method = \"gaussian\". index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model. frequentist logical; TRUE, frequentist covariance matrix parameter estimates used. FALSE, Bayesian posterior covariance matrix parameters used. See mgcv::vcov.gam(). unconditional logical; TRUE Bayesian smoothing parameter uncertainty corrected covariance matrix used, available model. See mgcv::vcov.gam(). mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. parametrized logical; use parametrized coefficients covariance matrix, respect linear inequality constraints model. scam::scam() model fits.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an factor-by smooth by name — get_by_smooth","title":"Extract an factor-by smooth by name — get_by_smooth","text":"Extract factor-smooth name","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an factor-by smooth by name — get_by_smooth","text":"","code":"get_by_smooth(object, term, level)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an factor-by smooth by name — get_by_smooth","text":"object fitted GAM model object. term character; name smooth term extract. level character; level factor exrtact smooth .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_by_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract an factor-by smooth by name — get_by_smooth","text":"single smooth object, list smooths several match named term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an mgcv smooth by name — get_smooth","title":"Extract an mgcv smooth by name — get_smooth","text":"Extract mgcv smooth name","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an mgcv smooth by name — get_smooth","text":"","code":"get_smooth(object, term)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an mgcv smooth by name — get_smooth","text":"object fitted GAM model object. term character; name smooth term extract","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract an mgcv smooth by name — get_smooth","text":"single smooth object, list smooths several match named term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"Extract mgcv smooth given position model object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"","code":"get_smooths_by_id(object, id) # S3 method for class 'gam' get_smooths_by_id(object, id) # S3 method for class 'scam' get_smooths_by_id(object, id) # S3 method for class 'gamm' get_smooths_by_id(object, id) # S3 method for class 'gamm4' get_smooths_by_id(object, id) # S3 method for class 'list' get_smooths_by_id(object, id)"},{"path":"https://gavinsimpson.github.io/gratia/reference/get_smooths_by_id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract an mgcv smooth given its position in the model object — get_smooths_by_id","text":"object fitted GAM model object. id numeric; position smooth model object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gratia-package.html","id":null,"dir":"Reference","previous_headings":"","what":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","title":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","text":"Graceful 'ggplot'-based graphics utility functions working generalized additive models (GAMs) fitted using 'mgcv' package. Provides reimplementation plot() method GAMs 'mgcv' provides, well 'tidyverse' compatible representations estimated smooths.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/gratia-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"gratia: Graceful 'ggplot'-Based Graphics and Other Functions for GAMs Fitted Using 'mgcv' — gratia-package","text":"Maintainer: Gavin L. Simpson ucfagls@gmail.com (ORCID) [copyright holder] contributors: Henrik Singmann (ORCID) [contributor]","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gss_vocab.html","id":null,"dir":"Reference","previous_headings":"","what":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","title":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","text":"subset data carData::GSSvocab dataset carData package, containing observations 2016 .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gss_vocab.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data from the General Social Survey (GSS) from the National Opinion Research Center of the University of Chicago — gss_vocab","text":"data frame 1858 rows 3 variables: vocab: numeric; number words 10 correct vocabulary test. nativeBorn: factor; respondent born US? factor levels yes. ageGroup: factor; grouped age respondent levels 18-29 30-39, 40-49, 50-59, 60+.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":null,"dir":"Reference","previous_headings":"","what":"Gu and Wabha test functions — gw_f0","title":"Gu and Wabha test functions — gw_f0","text":"Gu Wabha test functions","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gu and Wabha test functions — gw_f0","text":"","code":"gw_f0(x, ...) gw_f1(x, ...) gw_f2(x, ...) gw_f3(x, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gu and Wabha test functions — gw_f0","text":"x numeric; vector points evaluate function , interval (0,1) ... arguments passed methods, ignored.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/gw_functions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gu and Wabha test functions — gw_f0","text":"","code":"x <- seq(0, 1, length = 6) gw_f0(x) #> [1] 0.000e+00 1.176e+00 1.902e+00 1.902e+00 1.176e+00 2.449e-16 gw_f1(x) #> [1] 1.000 1.492 2.226 3.320 4.953 7.389 gw_f2(x) #> [1] 0.000 8.591 4.261 3.199 1.100 0.000 gw_f3(x) # should be constant 0 #> [1] 0 0 0 0 0 0"},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":null,"dir":"Reference","previous_headings":"","what":"Are additional parameters available for a GAM? — has_theta","title":"Are additional parameters available for a GAM? — has_theta","text":"additional parameters available GAM?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Are additional parameters available for a GAM? — has_theta","text":"","code":"has_theta(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Are additional parameters available for a GAM? — has_theta","text":"object R object, either family() object object whose class family() method.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Are additional parameters available for a GAM? — has_theta","text":"logical; TRUE additional parameters available, FALSE otherwise.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/has_theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Are additional parameters available for a GAM? — has_theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"poisson\", seed = 42, scale = 1 / 5) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\", family = nb() ) has_theta(m) #> [1] TRUE p <- theta(m)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Tests for by variable smooths — is_by_smooth","title":"Tests for by variable smooths — is_by_smooth","text":"Functions check smooth -variable one test type -variable smooth factor-smooth continous-smooth interaction.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tests for by variable smooths — is_by_smooth","text":"","code":"is_by_smooth(smooth) is_factor_by_smooth(smooth) is_continuous_by_smooth(smooth) by_variable(smooth) by_level(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tests for by variable smooths — is_by_smooth","text":"smooth object class \"mgcv.smooth\"","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tests for by variable smooths — is_by_smooth","text":"logical vector.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_by_smooth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tests for by variable smooths — is_by_smooth","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":null,"dir":"Reference","previous_headings":"","what":"Is a model term a factor (categorical)? — is_factor_term","title":"Is a model term a factor (categorical)? — is_factor_term","text":"Given name (term label) term model, identify term factor term numeric. useful considering interactions, terms like fac1:fac2 num1:fac1 may requested user. terms type fac1:fac2 function return TRUE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is a model term a factor (categorical)? — is_factor_term","text":"","code":"is_factor_term(object, term, ...) # S3 method for class 'terms' is_factor_term(object, term, ...) # S3 method for class 'gam' is_factor_term(object, term, ...) # S3 method for class 'bam' is_factor_term(object, term, ...) # S3 method for class 'gamm' is_factor_term(object, term, ...) # S3 method for class 'list' is_factor_term(object, term, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is a model term a factor (categorical)? — is_factor_term","text":"object R object method dispatch performed term character; name model term, sense attr(terms(object), \"term.labels\"). Currently checked see term exists model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_factor_term.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is a model term a factor (categorical)? — is_factor_term","text":"logical: TRUE variables involved term factors, otherwise FALSE.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"Check objects smooths particular type smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"","code":"is_mgcv_smooth(smooth) stop_if_not_mgcv_smooth(smooth) check_is_mgcv_smooth(smooth) is_mrf_smooth(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"smooth R object, typically list","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_mgcv_smooth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Check if objects are smooths or are a particular type of smooth — is_mgcv_smooth","text":"Check smooth inherits class \"mgcv.smooth\". stop_if_not_mgcv_smooth() wrapper around is_mgcv_smooth(), useful programming checking supplied object one mgcv's smooths, throwing consistent error . check_is_mgcv_smooth() similar stop_if_not_mgcv_smooth() returns result is_mgcv_smooth() invisibly.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":null,"dir":"Reference","previous_headings":"","what":"Is a model term an offset? — is_offset","title":"Is a model term an offset? — is_offset","text":"Given character vector model terms, checks see , , model offset.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is a model term an offset? — is_offset","text":"","code":"is_offset(terms)"},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is a model term an offset? — is_offset","text":"terms character vector model terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is a model term an offset? — is_offset","text":"logical vector length terms.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Is a model term an offset? — is_offset","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/is_offset.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is a model term an offset? — is_offset","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, dist = \"normal\") m <- gam(y ~ s(x0) + s(x1) + offset(x0), data = df, method = \"REML\") nm <- names(model.frame(m)) nm #> [1] \"y\" \"offset(x0)\" \"x0\" \"x1\" is_offset(nm) #> [1] FALSE TRUE FALSE FALSE"},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract link and inverse link functions from models — link","title":"Extract link and inverse link functions from models — link","text":"Returns link inverse estimated model, provides simple way extract functions complex models multiple links, location scale models.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract link and inverse link functions from models — link","text":"","code":"link(object, ...) # S3 method for class 'family' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gam' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'bam' link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gamm' link(object, ...) # S3 method for class 'glm' link(object, ...) # S3 method for class 'list' link(object, ...) inv_link(object, ...) # S3 method for class 'family' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gam' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'bam' inv_link(object, parameter = NULL, which_eta = NULL, ...) # S3 method for class 'gamm' inv_link(object, ...) # S3 method for class 'list' inv_link(object, ...) # S3 method for class 'glm' inv_link(object, ...) extract_link(family, ...) # S3 method for class 'family' extract_link(family, inverse = FALSE, ...) # S3 method for class 'general.family' extract_link(family, parameter, inverse = FALSE, which_eta = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract link and inverse link functions from models — link","text":"object family object fitted model extract family object. Models fitted stats::glm(), mgcv::gam(), mgcv::bam(), mgcv::gamm(), gamm4::gamm4() currently supported. ... arguments passed methods. parameter character; parameter distribution. Usually \"location\" \"scale\" \"shape\" may provided location scale models. options include \"mu\" synonym \"location\", \"sigma\" scale parameter mgcv::gaulss(), \"pi\" zero-inflation term mgcv::ziplss(), \"power\" mgcv::twlss() power parameter, \"xi\", shape parameter mgcv::gevlss(), \"epsilon\" \"skewness\" skewness \"delta\" \"kurtosis\" kurtosis parameter mgcv::shash(), \"phi\" scale parameter mgcv::gammals() & mgcv::twlss(). which_eta numeric; linear predictor extract families mgcv::mvn() mgcv::multinom(). family family object, result call family(). inverse logical; return inverse link function?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract link and inverse link functions from models — link","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/link.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract link and inverse link functions from models — link","text":"","code":"load_mgcv() link(gaussian()) #> function (mu) #> mu #> link(nb()) #> function (mu) #> log(mu) #> inv_link(nb()) #> function (eta) #> pmax(exp(eta), .Machine$double.eps) #> dat <- data_sim(\"eg1\", seed = 4234) mod <- gam(list(y ~ s(x0) + s(x1) + s(x2) + s(x3), ~1), data = dat, family = gaulss ) link(mod, parameter = \"scale\") #> function (mu) #> log(1/mu - 0.01) #> inv_link(mod, parameter = \"scale\") #> function (eta) #> 1/(exp(eta) + 0.01) #> ## Works with `family` objects too link(shash(), parameter = \"skewness\") #> function (mu) #> mu #> "},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":null,"dir":"Reference","previous_headings":"","what":"Load mgcv quietly — load_mgcv","title":"Load mgcv quietly — load_mgcv","text":"Simple function loads mgcv package whilst suppressing startup messages prints console.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load mgcv quietly — load_mgcv","text":"","code":"load_mgcv()"},{"path":"https://gavinsimpson.github.io/gratia/reference/load_mgcv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load mgcv quietly — load_mgcv","text":"Returns logical vectors invisibly, indicating whether package loaded .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the linear prediction matrix of a fitted GAM — lp_matrix","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"lp_matrix() wrapper predict(..., type = \"lpmatrix\") returning linear predictor matrix model training data (data = NULL), user-specified data values supplied via data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"","code":"lp_matrix(model, ...) # S3 method for class 'gam' lp_matrix(model, data = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"model fitted model ... arguments passed methods predict methods including mgcv::predict.gam() mgcv::predict.bam() data data frame values return linear prediction matrix.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"linear prediction matrix returned matrix. object returned class \"lp_matrix\", inherits classes \"matrix\" \"array\". special class allows printing matrix controlled, printing matrix tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"linear prediction matrix \\(\\mathbf{X}_p\\) matrix maps values parameters \\(\\hat{\\mathbf{\\beta}}_p\\) values linear predictor model \\(\\hat{\\eta}_p = \\mathbf{X}_p \\hat{\\mathbf{\\beta}}_p\\). \\(\\mathbf{X}_p\\) model matrix spline covariates replaced values basis functions evaluated respective covariates. Parametric covariates also included.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lp_matrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Return the linear prediction matrix of a fitted GAM — lp_matrix","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 1) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) # linear prediction matrix for observed data xp <- lp_matrix(m) ## IGNORE_RDIFF_BEGIN xp #> Linear prediction matrix (400 x 37) #> `(Intercept)` `s(x0).1` `s(x0).2` `s(x0).3` `s(x0).4` `s(x0).5` `s(x0).6` #> #> 1 1 0.961 0.227 0.706 -0.135 0.457 -0.146 #> 2 1 0.651 -0.241 0.0684 -0.308 0.394 -0.00994 #> 3 1 -0.385 -0.549 0.0660 -0.204 -0.416 -0.247 #> 4 1 -1.27 0.156 -1.53 0.222 -1.60 0.198 #> 5 1 1.05 0.420 1.11 0.214 0.893 0.0351 #> # i 395 more rows ## IGNORE_RDIFF_END # the object `xp` *is* a matrix class(xp) #> [1] \"lp_matrix\" \"matrix\" \"array\" # but we print like a tibble to avoid spamming the R console # linear predictor matrix for new data set ds <- data_slice(m, x2 = evenly(x2)) xp <- lp_matrix(m, data = ds) ## IGNORE_RDIFF_BEGIN xp #> Linear prediction matrix (100 x 37) #> `(Intercept)` `s(x0).1` `s(x0).2` `s(x0).3` `s(x0).4` `s(x0).5` `s(x0).6` #> #> 1 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 2 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 3 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 4 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> 5 1 0.170 -0.542 -0.0371 -0.0534 0.144 -0.353 #> # i 95 more rows ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/lss_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"General names of LSS parameters for each GAM family — lss_parameters","title":"General names of LSS parameters for each GAM family — lss_parameters","text":"General names LSS parameters GAM family","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/lss_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General names of LSS parameters for each GAM family — lss_parameters","text":"","code":"lss_parameters(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"Posterior samples using Gaussian approximation posterior distribution","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"","code":"mh_draws(model, ...) # S3 method for class 'gam' mh_draws( model, n, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/mh_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior samples using a Gaussian approximation to the posterior distribution — mh_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. burnin numeric; length initial burn period discard. See mgcv::gam.mh(). thin numeric; retain thin samples. See mgcv::gam.mh(). t_df numeric; degrees freedom static multivariate t proposal. See mgcv::gam.mh(). rw_scale numeric; factor scale posterior covariance matrix generating random walk proposals. See mgcv::gam.mh(). index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":null,"dir":"Reference","previous_headings":"","what":"Concurvity of an estimated GAM — model_concurvity","title":"Concurvity of an estimated GAM — model_concurvity","text":"Concurvity estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Concurvity of an estimated GAM — model_concurvity","text":"","code":"model_concurvity(model, ...) # S3 method for class 'gam' model_concurvity( model, terms = everything(), type = c(\"all\", \"estimate\", \"observed\", \"worst\"), pairwise = FALSE, ... ) concrvity( model, terms = everything(), type = c(\"all\", \"estimate\", \"observed\", \"worst\"), pairwise = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Concurvity of an estimated GAM — model_concurvity","text":"model fitted GAM. Currently objects class \"gam\" supported ... arguents passed methods. terms currently ignored type character; pairwise logical; extract pairwise concurvity model terms?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_concurvity.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Concurvity of an estimated GAM — model_concurvity","text":"","code":"## simulate data with concurvity... library(\"tibble\") load_mgcv() set.seed(8) n <- 200 df <- tibble( t = sort(runif(n)), x = gw_f2(t) + rnorm(n) * 3, y = sin(4 * pi * t) + exp(x / 20) + rnorm(n) * 0.3 ) ## fit model m <- gam(y ~ s(t, k = 15) + s(x, k = 15), data = df, method = \"REML\") ## overall concurvity o_conc <- concrvity(m) draw(o_conc) ## pairwise concurvity p_conc <- concrvity(m, pairwise = TRUE) draw(p_conc)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the model constant term — model_constant","title":"Extract the model constant term — model_constant","text":"Extracts model constant term(s), model intercept, fitted model object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the model constant term — model_constant","text":"","code":"model_constant(model, ...) # S3 method for class 'gam' model_constant(model, lp = NULL, ...) # S3 method for class 'gamlss' model_constant(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the model constant term — model_constant","text":"model fitted model coef() method exists. ... arguments passed methods. lp numeric; linear predictors extract constant terms .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_constant.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract the model constant term — model_constant","text":"","code":"load_mgcv() # simulate a small example df <- data_sim(\"eg1\", seed = 42) # fit the GAM m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # extract the estimate of the constant term model_constant(m) #> [1] 7.495 #> attr(,\"par_names\") #> [1] \"location\" # same as coef(m)[1L] coef(m)[1L] #> (Intercept) #> 7.495"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":null,"dir":"Reference","previous_headings":"","what":"List the variables involved in a model fitted with a formula — model_vars","title":"List the variables involved in a model fitted with a formula — model_vars","text":"List variables involved model fitted formula","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List the variables involved in a model fitted with a formula — model_vars","text":"","code":"model_vars(model, ...) # S3 method for class 'gam' model_vars(model, ...) # Default S3 method model_vars(model, ...) # S3 method for class 'bam' model_vars(model, ...) # S3 method for class 'gamm' model_vars(model, ...) # S3 method for class 'gamm4' model_vars(model, ...) # S3 method for class 'list' model_vars(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List the variables involved in a model fitted with a formula — model_vars","text":"model fitted model object $pred.formula, $terms component \"terms\" attribute ... Arguments passed methods. Currently ignored.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/model_vars.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List the variables involved in a model fitted with a formula — model_vars","text":"","code":"load_mgcv() # simulate some Gaussian data df <- data_sim(\"eg1\", n = 50, seed = 2) # fit a GAM with 1 smooth and 1 linear term m1 <- gam(y ~ s(x2, k = 7) + x1, data = df, method = \"REML\") model_vars(m1) #> [1] \"x1\" \"x2\" # fit a lm with two linear terms m2 <- lm(y ~ x2 + x1, data = df) model_vars(m2) #> [1] \"x2\" \"x1\""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":null,"dir":"Reference","previous_headings":"","what":"The Number of linear predictors in model — n_eta","title":"The Number of linear predictors in model — n_eta","text":"Extracts number linear predictors fitted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The Number of linear predictors in model — n_eta","text":"","code":"n_eta(model, ...) # S3 method for class 'gam' n_eta(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The Number of linear predictors in model — n_eta","text":"model fitted model. Currently, models inheriting class \"gam\" supported. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_eta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The Number of linear predictors in model — n_eta","text":"integer vector length 1 containing number linear predictors model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"How many smooths in a fitted model — n_smooths","title":"How many smooths in a fitted model — n_smooths","text":"many smooths fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"How many smooths in a fitted model — n_smooths","text":"","code":"n_smooths(object) # Default S3 method n_smooths(object) # S3 method for class 'gam' n_smooths(object) # S3 method for class 'gamm' n_smooths(object) # S3 method for class 'bam' n_smooths(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/n_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"How many smooths in a fitted model — n_smooths","text":"object fitted GAM related model. Typically result call mgcv::gam(), mgcv::bam(), mgcv::gamm().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":null,"dir":"Reference","previous_headings":"","what":"Negative binomial parameter theta — nb_theta","title":"Negative binomial parameter theta — nb_theta","text":"Negative binomial parameter theta","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Negative binomial parameter theta — nb_theta","text":"","code":"nb_theta(model) # S3 method for class 'gam' nb_theta(model)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Negative binomial parameter theta — nb_theta","text":"model fitted model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Negative binomial parameter theta — nb_theta","text":"numeric vector length 1 containing estimated value theta.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"methods-by-class-","dir":"Reference","previous_headings":"","what":"Methods (by class)","title":"Negative binomial parameter theta — nb_theta","text":"nb_theta(gam): Method class \"gam\"","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nb_theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Negative binomial parameter theta — nb_theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 500, dist = \"poisson\", scale = 0.1, seed = 6) m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = nb, data = df, method = \"REML\") ## IGNORE_RDIFF_BEGIN nb_theta(m) #> [1] 239333.8 ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial residuals in nested form — nested_partial_residuals","title":"Partial residuals in nested form — nested_partial_residuals","text":"Computes partial residuals smooth terms, formats long/tidy format, nests partial_residual column result nested data frame one row per smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial residuals in nested form — nested_partial_residuals","text":"","code":"nested_partial_residuals(object, terms = NULL, data = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial residuals in nested form — nested_partial_residuals","text":"object fitted GAM model terms vector terms include partial residuals . Passed argument terms mgcv::predict.gam()]. data optional data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_partial_residuals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partial residuals in nested form — nested_partial_residuals","text":"nested tibble (data frame) one row per smooth term. Contains two columns: smooth - label indicating smooth term partial_residual - list column containing tibble (data frame) 1 column partial_residual containing requested partial residuals indicated smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Values for rug plot in nested form — nested_rug_values","title":"Values for rug plot in nested form — nested_rug_values","text":"Extracts original data smooth terms, formats long/tidy format, nests data column(s) result nested data frame one row per smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Values for rug plot in nested form — nested_rug_values","text":"","code":"nested_rug_values(object, terms = NULL, data = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Values for rug plot in nested form — nested_rug_values","text":"object fitted GAM model terms vector terms include original data . Passed argument terms mgcv::predict.gam()]. data optional data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/nested_rug_values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Values for rug plot in nested form — nested_rug_values","text":"nested tibble (data frame) one row per smooth term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the null deviance of a fitted model — null_deviance","title":"Extract the null deviance of a fitted model — null_deviance","text":"Extract null deviance fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the null deviance of a fitted model — null_deviance","text":"","code":"null_deviance(model, ...) # Default S3 method null_deviance(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/null_deviance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the null deviance of a fitted model — null_deviance","text":"model fitted model ... arguments passed methods","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot of fitted against observed response values — observed_fitted_plot","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"Plot fitted observed response values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"","code":"observed_fitted_plot( model, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, point_col = \"black\", point_alpha = 1 )"},{"path":"https://gavinsimpson.github.io/gratia/reference/observed_fitted_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot of fitted against observed response values — observed_fitted_plot","text":"model fitted model. Currently class \"gam\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). point_col colour used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. point_alpha numeric; alpha transparency points plots.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":null,"dir":"Reference","previous_headings":"","what":"Provides an overview of a model and the terms in that model — overview","title":"Provides an overview of a model and the terms in that model — overview","text":"Provides overview model terms model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Provides an overview of a model and the terms in that model — overview","text":"","code":"overview(model, ...) # S3 method for class 'gam' overview( model, parametric = TRUE, random_effects = TRUE, dispersion = NULL, frequentist = FALSE, accuracy = 0.001, stars = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Provides an overview of a model and the terms in that model — overview","text":"model fitted model object overview. ... arguments passed methods. parametric logical; include model parametric terms overview? random_effects tests fully penalized smooth terms (zero-dimensional null space, e.g. random effects) computationally expensive large data sets producing p values can take long time. random_effects = FALSE, tests expensive terms skipped. dispersion numeric; known value dispersion parameter. default NULL implies estimated value default value (1 Poisson distribution example) specified used instead. frequentist logical; default Bayesian estimated covariance matrix parameter estimates used calculate p values parametric terms. frequentist = FALSE, frequentist covariance matrix parameter estimates used. accuracy numeric; accuracy report p values, p values value displayed \"< accuracy\". stars logical; significance stars added output?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/overview.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Provides an overview of a model and the terms in that model — overview","text":"","code":"load_mgcv() df <- data_sim(n = 400, seed = 2) m <- gam(y ~ x3 + s(x0) + s(x1, bs = \"bs\") + s(x2, bs = \"ts\"), data = df, method = \"REML\" ) overview(m) #> #> Generalized Additive Model with 4 terms #> #> term type k edf statistic p.value #> #> 1 x3 parametric NA 1 4.28 0.03926 #> 2 s(x0) TPRS 9 3.02 6.25 < 0.001 #> 3 s(x1) B spline 9 2.81 71.0 < 0.001 #> 4 s(x2) TPRS (shrink) 9 7.91 83.8 < 0.001"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimated values for parametric model terms — parametric_effects","title":"Estimated values for parametric model terms — parametric_effects","text":"Estimated values parametric model terms","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimated values for parametric model terms — parametric_effects","text":"","code":"parametric_effects(object, ...) # S3 method for class 'gam' parametric_effects( object, terms = NULL, data = NULL, unconditional = FALSE, unnest = TRUE, ci_level = 0.95, envir = environment(formula(object)), transform = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_effects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimated values for parametric model terms — parametric_effects","text":"object fitted model object. ... arguments passed methods. terms character; model parametric terms drawn? Default NULL plot parametric terms can drawn. data optional data frame may may used? FIXME! unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. unnest logical; unnest parametric effect objects? ci_level numeric; coverage required confidence interval. Currently ignored. envir environment look data within. transform logical; TRUE, parametric effect plotted transformed scale result effect straight line. FALSE, effect plotted raw data (.e. log10(x), poly(z), x-axis plot x z respectively.)","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of any parametric terms in a GAM — parametric_terms","title":"Names of any parametric terms in a GAM — parametric_terms","text":"Names parametric terms GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of any parametric terms in a GAM — parametric_terms","text":"","code":"parametric_terms(model, ...) # Default S3 method parametric_terms(model, ...) # S3 method for class 'gam' parametric_terms(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/parametric_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of any parametric terms in a GAM — parametric_terms","text":"model fitted model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"Partial derivatives estimated multivariate smooths via finite differences","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"","code":"partial_derivatives(object, ...) # Default S3 method partial_derivatives(object, ...) # S3 method for class 'gamm' partial_derivatives(object, ...) # S3 method for class 'gam' partial_derivatives( object, select = NULL, term = deprecated(), focal = NULL, data = newdata, order = 1L, type = c(\"forward\", \"backward\", \"central\"), n = 100, eps = 1e-07, interval = c(\"confidence\", \"simultaneous\"), n_sim = 10000, level = 0.95, unconditional = FALSE, frequentist = FALSE, offset = NULL, ncores = 1, partial_match = FALSE, seed = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"object R object compute derivatives . ... arguments passed methods. select character; vector one smooth terms derivatives required. missing, derivatives smooth terms returned. Can partial match smooth term; see argument partial_match . term Use select instead. focal character; name focal variable. partial derivative estimated smooth respect variable returned. variables involved smooth held constant. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". n numeric; number points evaluate derivative . eps numeric; finite difference. interval character; type interval compute. One \"confidence\" point-wise intervals, \"simultaneous\" simultaneous intervals. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; confidence level point-wise simultaneous interval. default 0.95 95% interval. unconditional logical; use smoothness selection-corrected Bayesian covariance matrix? frequentist logical; use frequentist covariance matrix? offset numeric; value use offset term ncores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). partial_match logical; smooths selected partial matches term? TRUE, term can single string match . seed numeric; RNG seed use. newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"tibble, currently following variables: .smooth: smooth row refers , .partial_deriv: estimated partial derivative, .se: standard error estimated partial derivative, .crit: critical value derivative ± (crit * se) gives upper lower bounds requested confidence simultaneous interval (given level), .lower_ci: lower bound confidence simultaneous interval, .upper_ci: upper bound confidence simultaneous interval.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"partial_derivatives() ignore random effect smooths encounters object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partial derivatives of estimated multivariate smooths via finite differences — partial_derivatives","text":"","code":"library(\"ggplot2\") library(\"patchwork\") load_mgcv() df <- data_sim(\"eg2\", n = 2000, dist = \"normal\", scale = 0.5, seed = 42) # fit the GAM (note: for execution time reasons, k is set articifially low) m <- gam(y ~ te(x, z, k = c(5, 5)), data = df, method = \"REML\") # data slice through te(x,z) holding z == 0.4 ds <- data_slice(m, x = evenly(x, n = 100), z = 0.4) # evaluate te(x,z) at values of x & z sm <- smooth_estimates(m, select = \"te(x,z)\", data = ds) |> add_confint() # partial derivatives pd_x <- partial_derivatives(m, data = ds, type = \"central\", focal = \"x\") # draw te(x,z) p1 <- draw(m, rug = FALSE) & geom_hline(yintercept = 0.4, linewidth = 1) p1 # draw te(x,z) along slice cap <- expression(z == 0.4) p2 <- sm |> ggplot(aes(x = x, y = .estimate)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( x = \"x\", y = \"Partial effect\", title = \"te(x,z)\", caption = cap ) p2 # draw partial derivs p3 <- pd_x |> draw() + labs(caption = cap) p3 # draw all three panels p1 + p2 + p3 + plot_layout(ncol = 3)"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":null,"dir":"Reference","previous_headings":"","what":"Partial residuals — partial_residuals","title":"Partial residuals — partial_residuals","text":"Partial residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Partial residuals — partial_residuals","text":"","code":"partial_residuals(object, ...) # S3 method for class 'gam' partial_residuals(object, select = NULL, partial_match = FALSE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Partial residuals — partial_residuals","text":"object R object, typically model. Currently objects class \"gam\" (inherit class) supported. ... arguments passed methods. select character, logical, numeric; smooths plot. NULL, default, model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. partial_match logical; smooths selected partial matches select? TRUE, select can single string match .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/partial_residuals.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Partial residuals — partial_residuals","text":"","code":"## load mgcv load_mgcv() ## example data - Gu & Wabha four term model df <- data_sim(\"eg1\", n = 400, seed = 42) ## fit the model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## extract partial residuals partial_residuals(m) #> # A tibble: 400 x 4 #> `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 -0.3527 -1.321 -2.180 0.6077 #> 2 -0.1233 0.5013 -1.775 0.9613 #> 3 1.429 1.515 5.609 0.9910 #> 4 -1.110 -1.700 -0.8882 -0.6593 #> 5 -2.120 -0.01378 -2.733 -3.012 #> 6 1.254 -1.224 3.915 0.07275 #> 7 -0.5220 3.023 -0.8197 -1.019 #> 8 1.398 0.2184 7.055 1.897 #> 9 2.797 0.4969 7.329 2.498 #> 10 1.151 -0.2267 0.7202 0.7437 #> # i 390 more rows ## and for a select term partial_residuals(m, select = \"s(x2)\") #> # A tibble: 400 x 1 #> `s(x2)` #> #> 1 -2.180 #> 2 -1.775 #> 3 5.609 #> 4 -0.8882 #> 5 -2.733 #> 6 3.915 #> 7 -0.8197 #> 8 7.055 #> 9 7.329 #> 10 0.7202 #> # i 390 more rows ## or with partial matching partial_residuals(m, select = \"x\", partial_match = TRUE) # returns all #> # A tibble: 400 x 4 #> `s(x0)` `s(x1)` `s(x2)` `s(x3)` #> #> 1 -0.3527 -1.321 -2.180 0.6077 #> 2 -0.1233 0.5013 -1.775 0.9613 #> 3 1.429 1.515 5.609 0.9910 #> 4 -1.110 -1.700 -0.8882 -0.6593 #> 5 -2.120 -0.01378 -2.733 -3.012 #> 6 1.254 -1.224 3.915 0.07275 #> 7 -0.5220 3.023 -0.8197 -1.019 #> 8 1.398 0.2184 7.055 1.897 #> 9 2.797 0.4969 7.329 2.498 #> 10 1.151 -0.2267 0.7202 0.7437 #> # i 390 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract and tidy penalty matrices — penalty","title":"Extract and tidy penalty matrices — penalty","text":"Extract tidy penalty matrices","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract and tidy penalty matrices — penalty","text":"","code":"penalty(object, ...) # Default S3 method penalty( object, rescale = FALSE, data, knots = NULL, constraints = FALSE, diagonalize = FALSE, ... ) # S3 method for class 'gam' penalty( object, select = NULL, smooth = deprecated(), rescale = FALSE, partial_match = FALSE, ... ) # S3 method for class 'mgcv.smooth' penalty(object, rescale = FALSE, ...) # S3 method for class 'tensor.smooth' penalty(object, margins = FALSE, ...) # S3 method for class 't2.smooth' penalty(object, margins = FALSE, ...) # S3 method for class 're.smooth.spec' penalty(object, data, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract and tidy penalty matrices — penalty","text":"object fitted GAM smooth. ... additional arguments passed methods. rescale logical; default, mgcv scale penalty matrix better performance mgcv::gamm(). rescale TRUE, scaling undone put penalty matrix back original scale. data data frame; data frame values terms mentioned smooth specification. knots list data frame named components containing knots locations. Names must match covariates basis required. See mgcv::smoothCon(). constraints logical; identifiability constraints applied smooth basis. See argument absorb.cons mgcv::smoothCon(). diagonalize logical; TRUE, reparameterises smooth associated penalty identity matrix. effect turning last diagonal elements penalty zero, highlights penalty null space. select character, logical, numeric; smooths extract penalties . NULL, default, penalties model smooths drawn. Numeric select indexes smooths order specified formula stored object. Character select matches labels smooths shown example output summary(object). Logical select operates per numeric select order smooths stored. smooth Use select instead. partial_match logical; smooths selected partial matches select? TRUE, select can single string match . margins logical; extract penalty matrices tensor product marginal smooths tensor product?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract and tidy penalty matrices — penalty","text":"'tibble' (data frame) class penalty_df inheriting tbl_df, following components: .smooth - character; label mgcv uses refer smooth, .type - character; type smooth, .penalty - character; label specific penalty. smooths multiple penalty matrices, penalty component identifies particular penalty matrix uses labelling mgcv uses internally, .row - character; label form fn n integer nth basis function, referencing columns penalty matrix, .col - character; label form fn n integer nth basis function, referencing columns penalty matrix, .value - double; value penalty matrix combination row col,","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extract and tidy penalty matrices — penalty","text":"print() method uses base::zapsmall() turn small numbers 0s display purposes ; underlying values penalty matrix matrices changed. smooths subject eigendecomposition (e.g. default thin plate regression splines, bs = \"tp\"), signs eigenvectors defined can expect differences across systems penalties smooths system-, OS-, CPU architecture- specific.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract and tidy penalty matrices — penalty","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/penalty.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract and tidy penalty matrices — penalty","text":"","code":"load_mgcv() dat <- data_sim(\"eg4\", n = 400, seed = 42) m <- gam( y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, by = fac, bs = \"cr\"), data = dat, method = \"REML\" ) # penalties for all smooths penalty(m) #> # A tibble: 405 x 6 #> .smooth .type .penalty .row .col .value #> #> 1 s(x0) CRS s(x0) F1 F1 0.783 #> 2 s(x0) CRS s(x0) F1 F2 -0.635 #> 3 s(x0) CRS s(x0) F1 F3 0.265 #> 4 s(x0) CRS s(x0) F1 F4 -0.0203 #> 5 s(x0) CRS s(x0) F1 F5 0.0441 #> 6 s(x0) CRS s(x0) F1 F6 0.0378 #> 7 s(x0) CRS s(x0) F1 F7 0.0482 #> 8 s(x0) CRS s(x0) F1 F8 0.0216 #> 9 s(x0) CRS s(x0) F1 F9 0.0247 #> 10 s(x0) CRS s(x0) F2 F1 -0.635 #> # i 395 more rows # for a specific smooth penalty(m, select = \"s(x2):fac1\") #> # A tibble: 81 x 6 #> .smooth .type .penalty .row .col .value #> #> 1 s(x2):fac1 CRS s(x2):fac1 F1 F1 1.66 #> 2 s(x2):fac1 CRS s(x2):fac1 F1 F2 -0.755 #> 3 s(x2):fac1 CRS s(x2):fac1 F1 F3 0.430 #> 4 s(x2):fac1 CRS s(x2):fac1 F1 F4 0.0846 #> 5 s(x2):fac1 CRS s(x2):fac1 F1 F5 0.192 #> 6 s(x2):fac1 CRS s(x2):fac1 F1 F6 0.152 #> 7 s(x2):fac1 CRS s(x2):fac1 F1 F7 0.188 #> 8 s(x2):fac1 CRS s(x2):fac1 F1 F8 0.164 #> 9 s(x2):fac1 CRS s(x2):fac1 F1 F9 0.0597 #> 10 s(x2):fac1 CRS s(x2):fac1 F2 F1 -0.755 #> # i 71 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"Low-level Functions generate draws posterior distribution model coefficients Generate posterior draws fitted model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"","code":"post_draws(model, ...) # Default S3 method post_draws( model, n, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), mu = NULL, sigma = NULL, n_cores = 1L, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, frequentist = FALSE, unconditional = FALSE, parametrized = TRUE, mvn_method = c(\"mvnfast\", \"mgcv\"), draws = NULL, seed = NULL, ... ) generate_draws(model, ...) # S3 method for class 'gam' generate_draws( model, n, method = c(\"gaussian\", \"mh\", \"inla\"), mu = NULL, sigma = NULL, n_cores = 1L, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, index = NULL, frequentist = FALSE, unconditional = FALSE, mvn_method = c(\"mvnfast\", \"mgcv\"), seed = NULL, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/post_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Low-level Functions to generate draws from the posterior distribution of model coefficients — post_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. ... arguments passed methods. n numeric; number posterior draws take. method character; algorithm use sample posterior. Currently implemented methods : \"gaussian\" \"mh\". \"gaussian\" calls gaussian_draws() uses Gaussian approximation posterior distribution. \"mh\" uses simple Metropolis Hasting sampler alternates static proposals based Gaussian approximation posterior, random walk proposals. Note, setting t_df low value result heavier-tailed statistic proposals. See mgcv::gam.mh() details. mu numeric; user-supplied mean vector (vector model coefficients). Currently ignored. sigma matrix; user-supplied covariance matrix mu. Currently ignored. n_cores integer; number CPU cores use generating multivariate normal distributed random values. used mvn_method = \"mvnfast\" method = \"gaussian\". burnin numeric; length initial burn period discard. See mgcv::gam.mh(). thin numeric; retain thin samples. See mgcv::gam.mh(). t_df numeric; degrees freedom static multivariate t proposal. See mgcv::gam.mh(). rw_scale numeric; factor scale posterior covariance matrix generating random walk proposals. See mgcv::gam.mh(). index numeric; vector indices coefficients use. Can used subset mean vector covariance matrix extracted model. frequentist logical; TRUE, frequentist covariance matrix parameter estimates used. FALSE, Bayesian posterior covariance matrix parameters used. See mgcv::vcov.gam(). unconditional logical; TRUE Bayesian smoothing parameter uncertainty corrected covariance matrix used, available model. See mgcv::vcov.gam(). parametrized logical; use parametrized coefficients covariance matrix, respect linear inequality constraints model. scam::scam() model fits. mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. draws matrix; user supplied posterior draws used method = \"user\". seed numeric; random seed use. NULL, random seed generated without affecting current state R's RNG.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_link_funs.html","id":null,"dir":"Reference","previous_headings":"","what":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","title":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","text":"list transformation functions named LSS parameters GAMLSS","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/post_link_funs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list of transformation functions named for LSS parameters in a GAMLSS — post_link_funs","text":"","code":"post_link_funs( location = identity_fun, scale = identity_fun, shape = identity_fun, skewness = identity_fun, kurtosis = identity_fun, power = identity_fun, pi = identity_fun )"},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw samples from the posterior distribution of an estimated model — posterior_samples","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Draw samples posterior distribution estimated model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"","code":"posterior_samples(model, ...) # S3 method for class 'gam' posterior_samples( model, n = 1, data = newdata, seed = NULL, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n_cores = 1, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, freq = FALSE, unconditional = FALSE, weights = NULL, draws = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. weights numeric; vector prior weights. data null defaults object[[\"prior.weights\"]], otherwise vector ones. draws matrix; user supplied posterior draws used method = \"user\". mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Models offset terms supplied via offset argument mgcv::gam() etc. ignored mgcv::predict.gam(). , kind offset term also ignored posterior_samples(). Offset terms included model formula supplied mgcv::gam() etc ignored posterior samples produced reflect offset term values. side effect requiring new data values provided posterior_samples() via data argument must include offset variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Wood, S.N., (2020). Simplified integrated nested Laplace approximation. Biometrika 107, 223–230. doi:10.1093/biomet/asz044","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/posterior_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw samples from the posterior distribution of an estimated model — posterior_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw new response values from the conditional distribution of the response — predicted_samples","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"Predicted values response (new response data) drawn fitted model, created via simulate() (e.g. simulate.gam()) returned tidy, long, format. predicted values include uncertainty estimated model; simply draws conditional distribution response.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"","code":"predicted_samples(model, ...) # S3 method for class 'gam' predicted_samples( model, n = 1, data = newdata, seed = NULL, weights = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. seed numeric; random seed simulations. weights numeric; vector prior weights. data null defaults object[[\"prior.weights\"]], otherwise vector ones. newdata Deprecated: use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"tibble (data frame) 3 columns containing posterior predicted values long format. columns row (integer) row data posterior draw relates , draw (integer) index, range 1:n, indicating draw row relates , response (numeric) predicted response indicated row data.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/predicted_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw new response values from the conditional distribution of the response — predicted_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 1000, dist = \"normal\", scale = 2, seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") predicted_samples(m, n = 5, seed = 42) #> # A tibble: 5,000 x 3 #> .row .draw .response #> #> 1 1 1 8.93 #> 2 2 1 4.23 #> 3 3 1 7.71 #> 4 4 1 8.51 #> 5 5 1 10.1 #> 6 6 1 8.20 #> 7 7 1 8.95 #> 8 8 1 7.20 #> 9 9 1 18.1 #> 10 10 1 12.7 #> # i 4,990 more rows ## Can pass arguments to predict.gam() newd <- data.frame( x0 = runif(10), x1 = runif(10), x2 = runif(10), x3 = runif(10) ) ## Exclude s(x2) predicted_samples(m, n = 5, newd, exclude = \"s(x2)\", seed = 25) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 9.42 #> 2 2 1 6.97 #> 3 3 1 8.10 #> 4 4 1 9.95 #> 5 5 1 6.75 #> 6 6 1 10.3 #> 7 7 1 10.8 #> 8 8 1 10.5 #> 9 9 1 8.43 #> 10 10 1 12.2 #> # i 40 more rows ## Exclude s(x1) predicted_samples(m, n = 5, newd, exclude = \"s(x1)\", seed = 25) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 6.05 #> 2 2 1 5.28 #> 3 3 1 5.96 #> 4 4 1 13.7 #> 5 5 1 4.36 #> 6 6 1 5.11 #> 7 7 1 12.5 #> 8 8 1 5.66 #> 9 9 1 12.6 #> 10 10 1 8.38 #> # i 40 more rows ## Select which terms --- result should be the same as previous ## but note that we have to include any parametric terms, including the ## constant term predicted_samples(m, n = 5, newd, seed = 25, terms = c(\"Intercept\", \"s(x0)\", \"s(x2)\", \"s(x3)\") ) #> # A tibble: 50 x 3 #> .row .draw .response #> #> 1 1 1 -1.94 #> 2 2 1 -2.71 #> 3 3 1 -2.03 #> 4 4 1 5.73 #> 5 5 1 -3.63 #> 6 6 1 -2.87 #> 7 7 1 4.48 #> 8 8 1 -2.33 #> 9 9 1 4.65 #> 10 10 1 0.395 #> # i 40 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Quantile-quantile plot of model residuals — qq_plot","title":"Quantile-quantile plot of model residuals — qq_plot","text":"Quantile-quantile plots (QQ-plots) GAMs using reference quantiles Augustin et al (2012).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quantile-quantile plot of model residuals — qq_plot","text":"","code":"qq_plot(model, ...) # Default S3 method qq_plot(model, ...) # S3 method for class 'gam' qq_plot( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), type = c(\"deviance\", \"response\", \"pearson\"), n_uniform = 10, n_simulate = 50, seed = NULL, level = 0.9, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'glm' qq_plot(model, ...) # S3 method for class 'lm' qq_plot(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quantile-quantile plot of model residuals — qq_plot","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed ot methods. method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF available family used model fitting (`\"uniform\"“). Note method = \"direct\" deprecated favour method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"uniform\"). n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\"). seed numeric; random number seed use method = \"simulate\" method = \"uniform\". level numeric; coverage level reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ci_col fill colour reference interval method = \"simulate\". ci_alpha alpha transparency reference interval method = \"simulate\". point_col colour points QQ plot. point_alpha alpha transparency points QQ plot. line_col colour used draw reference line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Quantile-quantile plot of model residuals — qq_plot","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Quantile-quantile plot of model residuals — qq_plot","text":"underlying methodology used method \"simulate\" \"uniform\" described Augustin et al (2012): Augustin, N.H., Sauleau, E.-., Wood, S.N., (2012) quantile quantile plots generalized linear models. Computational Statatistics Data Analysis 56, 2404-2409 doi:10.1016/j.csda.2012.01.026 .","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/qq_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quantile-quantile plot of model residuals — qq_plot","text":"","code":"load_mgcv() ## simulate binomial data... dat <- data_sim(\"eg1\", n = 200, dist = \"binary\", scale = .33, seed = 0) p <- binomial()$linkinv(dat$f) # binomial p n <- sample(c(1, 3), 200, replace = TRUE) # binomial n dat <- transform(dat, y = rbinom(n, n, p), n = n) m <- gam(y / n ~ s(x0) + s(x1) + s(x2) + s(x3), family = binomial, data = dat, weights = n, method = \"REML\" ) ## Q-Q plot; default using direct randomization of uniform quantiles qq_plot(m) ## Alternatively use simulate new data from the model, which ## allows construction of reference intervals for the Q-Q plot qq_plot(m, method = \"simulate\", seed = 42, point_col = \"steelblue\", point_alpha = 0.4 ) ## ... or use the usual normality assumption qq_plot(m, method = \"normal\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Return the reference or specific level of a factor — ref_level","title":"Return the reference or specific level of a factor — ref_level","text":"Extracts reference specific level supplied factor, returning factor levels one supplied.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Return the reference or specific level of a factor — ref_level","text":"","code":"ref_level(fct) level(fct, level)"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Return the reference or specific level of a factor — ref_level","text":"fct factor; factor reference specific level extracted. level character; specific level extract case level().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Return the reference or specific level of a factor — ref_level","text":"length 1 factor levels supplied factor fct.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_level.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Return the reference or specific level of a factor — ref_level","text":"","code":"f <- factor(sample(letters[1:5], 100, replace = TRUE)) # the reference level ref_level(f) #> [1] a #> Levels: a b c d e # a specific level level(f, level = \"b\") #> [1] b #> Levels: a b c d e # note that the levels will always match the input factor identical(levels(f), levels(ref_level(f))) #> [1] TRUE identical(levels(f), levels(level(f, \"c\"))) #> [1] TRUE"},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_sims.html","id":null,"dir":"Reference","previous_headings":"","what":"Reference simulation data — ref_sims","title":"Reference simulation data — ref_sims","text":"set reference objects testing data_sim().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/ref_sims.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reference simulation data — ref_sims","text":"named list simulated data sets created data_sim().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"Reorder random factor smooth terms place factor last","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"","code":"reorder_fs_smooth_terms(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_fs_smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder random factor smooth terms to place factor last — reorder_fs_smooth_terms","text":"smooth mgcv smooth object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"tensor product smooth 3 terms contains 2d marginal smooth, get nicer output smooth_estimates() hence nicer plot draw.smooth_estimates() method reorder terms smooth vary terms 2d marginal first, terms vary slowly generate data evaluate smooth . results automatically generated data focuses (first one) 2d marginal smooth, end result smooth_estimates() shows 2d smooth changes terms involved smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"","code":"reorder_tensor_smooth_terms(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/reorder_tensor_smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reorder tensor product terms for nicer plotting — reorder_tensor_smooth_terms","text":"smooth mgcv smooth object","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Repeat the first level of a factor n times — rep_first_factor_value","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"Function repeat first level factor n times return vector factor original levels intact","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"","code":"rep_first_factor_value(f, n)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"f factor n numeric; number times repeat first level f","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rep_first_factor_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Repeat the first level of a factor n times — rep_first_factor_value","text":"factor length n levels f, whose elements first level f.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Histogram of model residuals — residuals_hist_plot","title":"Histogram of model residuals — residuals_hist_plot","text":"Histogram model residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Histogram of model residuals — residuals_hist_plot","text":"","code":"residuals_hist_plot( model, type = c(\"deviance\", \"pearson\", \"response\"), n_bins = c(\"sturges\", \"scott\", \"fd\"), ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_hist_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Histogram of model residuals — residuals_hist_plot","text":"model fitted model. Currently class \"gam\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_bins character numeric; either number bins string indicating calculate number bins. ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot of residuals versus linear predictor values — residuals_linpred_plot","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"Plot residuals versus linear predictor values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"","code":"residuals_linpred_plot( model, type = c(\"deviance\", \"pearson\", \"response\"), ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, point_col = \"black\", point_alpha = 1, line_col = \"red\" )"},{"path":"https://gavinsimpson.github.io/gratia/reference/residuals_linpred_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot of residuals versus linear predictor values — residuals_linpred_plot","text":"model fitted model. Currently class \"gam\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). subtitle character expression; subtitle plot. See ggplot2::labs(). caption character expression; plot caption. See ggplot2::labs(). point_col colour used draw points plots. See graphics::par() section Color Specification. passed individual plotting functions, therefore affects points plots. point_alpha numeric; alpha transparency points plots. line_col colour specification 1:1 line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":null,"dir":"Reference","previous_headings":"","what":"Derivatives on the response scale from an estimated GAM — response_derivatives","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"Derivatives response scale estimated GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"","code":"response_derivatives(object, ...) # Default S3 method response_derivatives(object, ...) # S3 method for class 'gamm' response_derivatives(object, ...) # S3 method for class 'gam' response_derivatives( object, focal = NULL, data = NULL, order = 1L, type = c(\"forward\", \"backward\", \"central\"), scale = c(\"response\", \"linear_predictor\"), method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), n = 100, eps = 1e-07, n_sim = 10000, level = 0.95, seed = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"object R object compute derivatives . ... arguments passed methods fitted_samples() focal character; name focal variable. response derivative response respect variable returned. variables involved model held constant values. can missing supplying data, case, focal variable identified one variable constant. data data frame containing values model covariates evaluate first derivatives smooths. supplied, one variable must held constant value. order numeric; order derivative. type character; type finite difference used. One \"forward\", \"backward\", \"central\". scale character; derivative estimated response linear predictor (link) scale? One \"response\" (default), \"linear predictor\". method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sample alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). n numeric; number points evaluate derivative (data supplied). eps numeric; finite difference. n_sim integer; number simulations used computing simultaneous intervals. level numeric; 0 < level < 1; coverage level credible interval. default 0.95 95% interval. seed numeric; random seed simulations. mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"tibble, currently following variables: .row: integer, indexing row data row output represents .focal: name variable partial derivative evaluated, .derivative: estimated partial derivative, .lower_ci: lower bound confidence simultaneous interval, .upper_ci: upper bound confidence simultaneous interval, additional columns containing covariate values derivative evaluated.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/response_derivatives.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Derivatives on the response scale from an estimated GAM — response_derivatives","text":"","code":"library(\"ggplot2\") library(\"patchwork\") load_mgcv() df <- data_sim(\"eg1\", dist = \"negbin\", scale = 0.25, seed = 42) # fit the GAM (note: for execution time reasons using bam()) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, family = nb(), method = \"fREML\" ) # data slice through data along x2 - all other covariates will be set to # typical values (value closest to median) ds <- data_slice(m, x2 = evenly(x2, n = 100)) # fitted values along x2 fv <- fitted_values(m, data = ds) # response derivatives - ideally n_sim = >10000 y_d <- response_derivatives(m, data = ds, type = \"central\", focal = \"x2\", eps = 0.01, seed = 21, n_sim = 1000 ) # draw fitted values along x2 p1 <- fv |> ggplot(aes(x = x2, y = .fitted)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci, y = NULL), alpha = 0.2 ) + geom_line() + labs( title = \"Estimated count as a function of x2\", y = \"Estimated count\" ) # draw response derivatives p2 <- y_d |> ggplot(aes(x = x2, y = .derivative)) + geom_ribbon(aes(ymin = .lower_ci, ymax = .upper_ci), alpha = 0.2) + geom_line() + labs( title = \"Estimated 1st derivative of estimated count\", y = \"First derivative\" ) # draw both panels p1 + p2 + plot_layout(nrow = 2)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":null,"dir":"Reference","previous_headings":"","what":"Rootograms to assess goodness of model fit — rootogram","title":"Rootograms to assess goodness of model fit — rootogram","text":"rootogram model diagnostic tool assesses goodness fit statistical model. observed values response compared expected fitted model. discrete, count responses, frequency count (0, 1, 2, etc) observed data expected conditional distribution response implied model compared. continuous variables, observed expected frequencies obtained grouping data bins. rootogram drawn using ggplot2::ggplot() graphics. design closely follows Kleiber & Zeileis (2016).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rootograms to assess goodness of model fit — rootogram","text":"","code":"rootogram(object, ...) # S3 method for class 'gam' rootogram(object, max_count = NULL, breaks = \"Sturges\", ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rootograms to assess goodness of model fit — rootogram","text":"object R object ... arguments passed methods max_count integer; largest count consider breaks continuous responses, group response. Can anything acceptable breaks argument graphics::hist.default()","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Rootograms to assess goodness of model fit — rootogram","text":"Kleiber, C., Zeileis, ., (2016) Visualizing Count Data Regressions Using Rootograms. . Stat. 70, 296–303. doi:10.1080/00031305.2016.1173590","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/rootogram.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rootograms to assess goodness of model fit — rootogram","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 1000, dist = \"poisson\", scale = 0.1, seed = 6) # A poisson example m <- gam(y ~ s(x0, bs = \"cr\") + s(x1, bs = \"cr\") + s(x2, bs = \"cr\") + s(x3, bs = \"cr\"), family = poisson(), data = df, method = \"REML\") rg <- rootogram(m) rg #> # A tibble: 21 x 3 #> .bin .observed .fitted #> #> 1 0 113 116.640 #> 2 1 236 227.869 #> 3 2 230 239.168 #> 4 3 200 181.679 #> 5 4 94 113.432 #> 6 5 68 62.4881 #> 7 6 27 31.6795 #> 8 7 22 15.1323 #> 9 8 4 6.88637 #> 10 9 3 2.99628 #> # i 11 more rows draw(rg) # plot the rootogram # A Gaussian example df <- data_sim(\"eg1\", dist = \"normal\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") draw(rootogram(m, breaks = \"FD\"), type = \"suspended\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"Creates sequence n evenly-spaced values range min(x) – max(x), minimum maximum adjusted always contained within range x x may shifted forwards backwards amount related eps. particularly useful computing derivatives via finite differences without adjustment may predicting values outside range data hence conmstraints penalty.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"","code":"seq_min_max_eps(x, n, order, type = c(\"forward\", \"backward\", \"central\"), eps)"},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"x numeric; vector evenly-spaced values returned n numeric; number evenly-spaced values return order integer; order derivative. Either 1 2 first second order derivatives type character; type finite difference used. One \"forward\", \"backward\", \"central\" eps numeric; finite difference","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/seq_min_max_eps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a sequence of evenly-spaced values adjusted to accommodate a small adjustment — seq_min_max_eps","text":"numeric vector length n.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Shift numeric values in a data frame by an amount eps — shift_values","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"Shift numeric values data frame amount eps","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"","code":"shift_values(df, h, i, FUN = `+`, focal = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/shift_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Shift numeric values in a data frame by an amount eps — shift_values","text":"df data frame tibble. h numeric; amount shift values df . logical; vector indexing columns df included shift. FUN function; function applut shift. Typically + -. focal character; focal variable computing partial derivatives. allows shifting focal variable eps.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate from the posterior distribution of a GAM — simulate.gam","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"Simulations posterior distribution fitted GAM model involve computing predicted values observation data simulated data required, generating random draws probability distribution used fitting model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"","code":"# S3 method for class 'gam' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL ) # S3 method for class 'gamm' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL ) # S3 method for class 'scam' simulate( object, nsim = 1, seed = NULL, data = newdata, weights = NULL, ..., newdata = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"object fitted GAM, typically result call mgcv::gam` mgcv::gamm(). nsim numeric; number posterior simulations return. seed numeric; random seed simulations. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used newdata, available object. weights numeric; vector prior weights. newdata null defaults object[[\"prior.weights\"]], otherwise vector ones. ... arguments passed methods. simulate.gam() simulate.scam() pass ... predict.gam(). can pass additional arguments terms, exclude, select model terms included predictions. may useful, example, excluding effects random effect terms. newdata Deprecated. Use data instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"(Currently) matrix nsim columns.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"simulate.gam() function, family component fitted model must contain, updateable contain, required random number generator. See mgcv::fix.family.rd().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/simulate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate from the posterior distribution of a GAM — simulate.gam","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") sims <- simulate(m1, nsim = 5, seed = 42) head(sims) #> [,1] [,2] [,3] [,4] [,5] #> [1,] 11.445470 11.374304 10.098681 7.264881 8.796630 #> [2,] 6.510912 5.909584 9.057362 7.698084 11.444781 #> [3,] 3.837995 3.230610 3.550240 3.759380 4.774581 #> [4,] 12.361830 11.209226 10.714215 11.861957 10.746417 #> [5,] 14.851461 12.911440 11.356984 15.783913 15.106270 #> [6,] 5.921276 4.158963 5.520856 7.973614 9.654888"},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":null,"dir":"Reference","previous_headings":"","what":"Lead-210 age-depth measurements for Small Water — smallAges","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"dataset containing lead-210 based age depth measurements SMALL1 core Small Water.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"data frame 12 rows 7 variables.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"Simpson, G.L. (Unpublished data).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smallAges.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Lead-210 age-depth measurements for Small Water — smallAges","text":"variables follows: Depth Drymass Date Age Error SedAccRate SedPerCentChange","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"Returns vector indices parametric terms represent supplied smooth. Useful extracting model coefficients columns covariance matrix.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"","code":"smooth_coef_indices(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"smooth object inherits class mgcv.smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"numeric vector indices.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coef_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Indices of the parametric terms for a particular smooth — smooth_coef_indices","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficients for a particular smooth — smooth_coefs","title":"Coefficients for a particular smooth — smooth_coefs","text":"Returns vector model coefficients parametric terms represent supplied smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficients for a particular smooth — smooth_coefs","text":"","code":"smooth_coefs(object, ...) # S3 method for class 'gam' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'bam' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'gamm' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'gamm4' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'list' smooth_coefs(object, select, term = deprecated(), ...) # S3 method for class 'mgcv.smooth' smooth_coefs(object, model, ...) # S3 method for class 'scam' smooth_coefs(object, select, term = deprecated(), ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficients for a particular smooth — smooth_coefs","text":"object fitted GAM(M) object, , \"mgcv.smooth\" method, object inherits class mgcv.smooth. ... arguments passed methods. select character; label smooth whose coefficients returned. term Use select instead. model fitted GAM(M) object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficients for a particular smooth — smooth_coefs","text":"numeric vector model coefficients.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficients for a particular smooth — smooth_coefs","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_coefs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficients for a particular smooth — smooth_coefs","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 2) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") ## IGNORE_RDIFF_BEGIN smooth_coefs(m, select = \"s(x2)\") #> s(x2).1 s(x2).2 s(x2).3 s(x2).4 s(x2).5 s(x2).6 s(x2).7 s(x2).8 #> -6.533373 9.694277 2.194078 -1.967280 -2.374874 1.207638 -1.572586 9.269744 #> s(x2).9 #> 5.622738 ## IGNORE_RDIFF_END"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate regular data over the covariates of a smooth — smooth_data","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"Generate regular data covariates smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"","code":"smooth_data( model, id, n = 100, n_2d = NULL, n_3d = NULL, n_4d = NULL, offset = NULL, include_all = FALSE, var_order = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"model fitted model id number ID smooth within model process. n numeric; number new observations generate. n_2d numeric; number new observations generate second dimension 2D smooth. Currently ignored. n_3d numeric; number new observations generate third dimension 3D smooth. n_4d numeric; number new observations generate dimensions higher 2 (!) kD smooth (k >= 4). example, smooth 4D smooth, dimensions 3 4 get n_4d new observations. offset numeric; value model offset use. include_all logical; include covariates involved smooth? FALSE, covariates involved smooth included returned data frame. TRUE, representative value included covariates model actually used smooth. can useful want pass returned data frame mgcv::PredictMat(). var_order character; order terms smooth processed. useful tensor products least one 2d marginal smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate regular data over the covariates of a smooth — smooth_data","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", seed = 42) m <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df) # generate data over range of x1 for smooth s(x1) smooth_data(m, id = 2) #> # A tibble: 100 x 1 #> x1 #> #> 1 0.0004050 #> 2 0.01046 #> 3 0.02052 #> 4 0.03057 #> 5 0.04063 #> 6 0.05069 #> 7 0.06074 #> 8 0.07080 #> 9 0.08086 #> 10 0.09091 #> # i 90 more rows # generate data over range of x1 for smooth s(x1), with typical value for # other covariates in the model smooth_data(m, id = 2, include_all = TRUE) #> # A tibble: 100 x 4 #> x1 x0 x2 x3 #> #> 1 0.0004050 0.4883 0.4708 0.4879 #> 2 0.01046 0.4883 0.4708 0.4879 #> 3 0.02052 0.4883 0.4708 0.4879 #> 4 0.03057 0.4883 0.4708 0.4879 #> 5 0.04063 0.4883 0.4708 0.4879 #> 6 0.05069 0.4883 0.4708 0.4879 #> 7 0.06074 0.4883 0.4708 0.4879 #> 8 0.07080 0.4883 0.4708 0.4879 #> 9 0.08086 0.4883 0.4708 0.4879 #> 10 0.09091 0.4883 0.4708 0.4879 #> # i 90 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":null,"dir":"Reference","previous_headings":"","what":"Dimension of a smooth — smooth_dim","title":"Dimension of a smooth — smooth_dim","text":"Extracts dimension estimated smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Dimension of a smooth — smooth_dim","text":"","code":"smooth_dim(object) # S3 method for class 'gam' smooth_dim(object) # S3 method for class 'gamm' smooth_dim(object) # S3 method for class 'mgcv.smooth' smooth_dim(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Dimension of a smooth — smooth_dim","text":"object R object. See Details list supported objects.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Dimension of a smooth — smooth_dim","text":"numeric vector dimensions smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Dimension of a smooth — smooth_dim","text":"generic function methods objects class \"gam\", \"gamm\", \"mgcv.smooth\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_dim.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Dimension of a smooth — smooth_dim","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate smooths at covariate values — smooth_estimates","title":"Evaluate smooths at covariate values — smooth_estimates","text":"Evaluate smooth grid evenly spaced value range covariate associated smooth. Alternatively, set points smooth evaluated can supplied. smooth_estimates() new implementation evaluate_smooth(), replaces function, removed package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate smooths at covariate values — smooth_estimates","text":"","code":"smooth_estimates(object, ...) # S3 method for class 'gam' smooth_estimates( object, select = NULL, smooth = deprecated(), n = 100, n_3d = 16, n_4d = 4, data = NULL, unconditional = FALSE, overall_uncertainty = TRUE, dist = NULL, unnest = TRUE, partial_match = FALSE, ... )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate smooths at covariate values — smooth_estimates","text":"object object class \"gam\" \"gamm\". ... arguments passed methods. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. smooth Use select instead. n numeric; number points range covariate evaluate smooth. n_3d, n_4d numeric; number points range last covariate 3D 4D smooth. default NULL achieves standard behaviour using n points range covariate, resulting n^d evaluation points, d dimension smooth. d > 2 can result many evaluation points slow performance. smooths d > 4, value n_4d used dimensions > 4, unless NULL, case default behaviour (using n dimensions) observed. data data frame covariate values evaluate smooth. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? dist numeric; greater 0, used determine location far data plotted plotting 2-D smooths. data scaled unit square deciding exclude, dist distance within unit square. See mgcv::exclude..far() details. unnest logical; unnest smooth objects? partial_match logical; case character select, select match partially smooths? partial_match = TRUE, select must single string, character vector length 1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate smooths at covariate values — smooth_estimates","text":"data frame (tibble), class \"smooth_estimates\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_estimates.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Evaluate smooths at covariate values — smooth_estimates","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, dist = \"normal\", scale = 2, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") ## evaluate all smooths smooth_estimates(m1) #> # A tibble: 400 x 9 #> .smooth .type .by .estimate .se x0 x1 x2 x3 #> #> 1 s(x0) TPRS NA -0.966542 0.316118 0.00710904 NA NA NA #> 2 s(x0) TPRS NA -0.925391 0.297170 0.0171157 NA NA NA #> 3 s(x0) TPRS NA -0.884233 0.279256 0.0271224 NA NA NA #> 4 s(x0) TPRS NA -0.843050 0.262594 0.0371291 NA NA NA #> 5 s(x0) TPRS NA -0.801824 0.247376 0.0471358 NA NA NA #> 6 s(x0) TPRS NA -0.760536 0.233728 0.0571425 NA NA NA #> 7 s(x0) TPRS NA -0.719175 0.221701 0.0671492 NA NA NA #> 8 s(x0) TPRS NA -0.677736 0.211261 0.0771559 NA NA NA #> 9 s(x0) TPRS NA -0.636220 0.202303 0.0871626 NA NA NA #> 10 s(x0) TPRS NA -0.594641 0.194685 0.0971693 NA NA NA #> # i 390 more rows ## or selected smooths smooth_estimates(m1, select = c(\"s(x0)\", \"s(x1)\")) #> # A tibble: 200 x 7 #> .smooth .type .by .estimate .se x0 x1 #> #> 1 s(x0) TPRS NA -0.966542 0.316118 0.00710904 NA #> 2 s(x0) TPRS NA -0.925391 0.297170 0.0171157 NA #> 3 s(x0) TPRS NA -0.884233 0.279256 0.0271224 NA #> 4 s(x0) TPRS NA -0.843050 0.262594 0.0371291 NA #> 5 s(x0) TPRS NA -0.801824 0.247376 0.0471358 NA #> 6 s(x0) TPRS NA -0.760536 0.233728 0.0571425 NA #> 7 s(x0) TPRS NA -0.719175 0.221701 0.0671492 NA #> 8 s(x0) TPRS NA -0.677736 0.211261 0.0771559 NA #> 9 s(x0) TPRS NA -0.636220 0.202303 0.0871626 NA #> 10 s(x0) TPRS NA -0.594641 0.194685 0.0971693 NA #> # i 190 more rows"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the label for a smooth used by 'mgcv' — smooth_label","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"label 'mgcv' uses smooths useful many contexts, including selecting smooths labelling plots. smooth_label() extracts label 'mgcv' smooth object, .e. object inherits class \"mgcv.smooth\". typically found $smooth component GAM fitted mgcv::gam() mgcv::bam(), related functions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"","code":"smooth_label(object, ...) # S3 method for class 'gam' smooth_label(object, id, ...) # S3 method for class 'mgcv.smooth' smooth_label(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"object R object. Currently, methods class \"gam\" mgcv smooth objects inheriting class \"mgcv.smooth\" supported. ... arguments passed methods. id numeric; indices smooths whose labels extracted. missing, labels smooths model returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"character vector.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_label.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract the label for a smooth used by 'mgcv' — smooth_label","text":"","code":"load_mgcv() df <- data_sim(\"gwf2\", n = 100) m <- gam(y ~ s(x), data = df, method = \"REML\") # extract the smooth sm <- get_smooths_by_id(m, id = 1)[[1]] # extract the label smooth_label(sm) #> [1] \"s(x)\" # or directly on the fitted GAM smooth_label(m$smooth[[1]]) #> [1] \"s(x)\" # or extract labels by idex/position smooth_label(m, id = 1) #> [1] \"s(x)\""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":null,"dir":"Reference","previous_headings":"","what":"Posterior draws for individual smooths — smooth_samples","title":"Posterior draws for individual smooths — smooth_samples","text":"Returns draws posterior distributions smooth functions GAM. Useful, example, visualising uncertainty individual estimated functions.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Posterior draws for individual smooths — smooth_samples","text":"","code":"smooth_samples(model, ...) # S3 method for class 'gam' smooth_samples( model, select = NULL, term = deprecated(), n = 1, data = newdata, method = c(\"gaussian\", \"mh\", \"inla\", \"user\"), seed = NULL, freq = FALSE, unconditional = FALSE, n_cores = 1L, n_vals = 200, burnin = 1000, thin = 1, t_df = 40, rw_scale = 0.25, rng_per_smooth = FALSE, draws = NULL, partial_match = NULL, mvn_method = c(\"mvnfast\", \"mgcv\"), ..., newdata = NULL, ncores = NULL )"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Posterior draws for individual smooths — smooth_samples","text":"model fitted model supported types ... arguments passed methods. fitted_samples(), passed mgcv::predict.gam(). posterior_samples() passed fitted_samples(). predicted_samples() passed relevant simulate() method. select character; select smooth's posterior draw . default (NULL) means posteriors smooths model wil sampled . supplied, character vector requested terms. term Use select instead. n numeric; number posterior samples return. data data frame; new observations posterior draws model evaluated. supplied, data used fit model used data, available model. method character; method used draw samples posterior distribution. \"gaussian\" uses Gaussian (Laplace) approximation posterior. \"mh\" uses Metropolis Hastings sampler alternates t proposals proposals based shrunken version posterior covariance matrix. \"inla\" uses variant Integrated Nested Laplace Approximation due Wood (2019), (currently implemented). \"user\" allows user-supplied posterior draws (currently implemented). seed numeric; random seed simulations. freq logical; TRUE use frequentist covariance matrix parameter estimators, FALSE use Bayesian posterior covariance matrix parameters. unconditional logical; TRUE (freq == FALSE) Bayesian smoothing parameter uncertainty corrected covariance matrix used, available. n_cores number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R). n_vals numeric; many locations evaluate smooth data supplied burnin numeric; number samples discard burnin draws. used method = \"mh\". thin numeric; number samples skip taking n draws. Results thin * n draws posterior taken. used method = \"mh\". t_df numeric; degrees freedom t distribution proposals. used method = \"mh\". rw_scale numeric; Factor scale posterior covariance matrix generating random walk proposals. Negative non finite skip random walk step. used method = \"mh\". rng_per_smooth logical; TRUE, behaviour gratia version 0.8.1 earlier used, whereby separate call random number generator (RNG) performed smooth. FALSE, single call RNG performed model parameters draws matrix; user supplied posterior draws used method = \"user\". partial_match logical; smooths selected partial matches select? TRUE, select can single string match . mvn_method character; one \"mvnfast\" \"mgcv\". default uses mvnfast::rmvn(), can considerably faster generate large numbers MVN random values mgcv::rmvn(), might work marginal fits, covariance matrix close singular. newdata Deprecated: use data instead. ncores Deprecated; use n_cores instead. number cores generating random variables multivariate normal distribution. Passed mvnfast::rmvn(). Parallelization take place OpenMP supported (appears work Windows current R).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Posterior draws for individual smooths — smooth_samples","text":"tibble additional classes \"smooth_samples\" `\"posterior_samples\". \"gam\" method, columns currently returned (order) : .smooth; character vector. Indicates smooth function particular draw, .term; character vector. Similar smooth, contain full label smooth, differentiate factor-smooths example. .; character vector. smooth involves term, variable named , NA_character_ otherwise. .row; integer. vector values seq_len(n_vals), repeated n > 1L. Indexes row data particular draw. .draw; integer. vector integer values indexing particular posterior draw row belongs . .value; numeric. value smooth function posterior draw covariate combination. xxx; numeric. series one columns containing data required smooth, named per variables involved respective smooth. Additional columns present case factor smooths, contain level factor named by_variable particular posterior draw.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"warning","dir":"Reference","previous_headings":"","what":"Warning","title":"Posterior draws for individual smooths — smooth_samples","text":"set variables returned order tibble subject change future versions. rely position.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Posterior draws for individual smooths — smooth_samples","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_samples.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Posterior draws for individual smooths — smooth_samples","text":"","code":"load_mgcv() dat <- data_sim(\"eg1\", n = 400, seed = 2) m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = \"REML\") sms <- smooth_samples(m1, select = \"s(x0)\", n = 5, seed = 42) # \\donttest{ sms #> # A tibble: 1,000 x 8 #> .smooth .term .type .by .row .draw .value x0 #> #> 1 s(x0) s(x0) TPRS NA 1 1 -0.357 0.00711 #> 2 s(x0) s(x0) TPRS NA 1 2 -0.465 0.00711 #> 3 s(x0) s(x0) TPRS NA 1 3 -0.720 0.00711 #> 4 s(x0) s(x0) TPRS NA 1 4 -1.27 0.00711 #> 5 s(x0) s(x0) TPRS NA 1 5 -1.18 0.00711 #> 6 s(x0) s(x0) TPRS NA 2 1 -0.365 0.0121 #> 7 s(x0) s(x0) TPRS NA 2 2 -0.464 0.0121 #> 8 s(x0) s(x0) TPRS NA 2 3 -0.708 0.0121 #> 9 s(x0) s(x0) TPRS NA 2 4 -1.24 0.0121 #> 10 s(x0) s(x0) TPRS NA 2 5 -1.16 0.0121 #> # i 990 more rows # } ## A factor by example (with a spurious covariate x0) dat <- data_sim(\"eg4\", n = 1000, seed = 2) ## fit model... m2 <- gam(y ~ fac + s(x2, by = fac) + s(x0), data = dat) sms <- smooth_samples(m2, n = 5, seed = 42) draw(sms)"},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List the variables involved in smooths — smooth_terms","text":"","code":"smooth_terms(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List the variables involved in smooths — smooth_terms","text":"object R object result call mgcv::gam(), mgcv::bam(), mgcv::gamm(), inherits classes \"gam\" \"mgcv.smooth\", \"fs.interaction\". ... arguments passed methods. Currently unused.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the type of smooth and return it n a human readable form — smooth_type","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"Determine type smooth return n human readable form","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"","code":"smooth_type(smooth) # Default S3 method smooth_type(smooth) # S3 method for class 'tprs.smooth' smooth_type(smooth) # S3 method for class 'ts.smooth' smooth_type(smooth) # S3 method for class 'cr.smooth' smooth_type(smooth) # S3 method for class 'cs.smooth' smooth_type(smooth) # S3 method for class 'cyclic.smooth' smooth_type(smooth) # S3 method for class 'pspline.smooth' smooth_type(smooth) # S3 method for class 'cpspline.smooth' smooth_type(smooth) # S3 method for class 'Bspline.smooth' smooth_type(smooth) # S3 method for class 'duchon.spline' smooth_type(smooth) # S3 method for class 'fs.interaction' smooth_type(smooth) # S3 method for class 'sz.interaction' smooth_type(smooth) # S3 method for class 'gp.smooth' smooth_type(smooth) # S3 method for class 'mrf.smooth' smooth_type(smooth) # S3 method for class 'random.effect' smooth_type(smooth) # S3 method for class 'sw' smooth_type(smooth) # S3 method for class 'sf' smooth_type(smooth) # S3 method for class 'soap.film' smooth_type(smooth) # S3 method for class 't2.smooth' smooth_type(smooth) # S3 method for class 'sos.smooth' smooth_type(smooth) # S3 method for class 'tensor.smooth' smooth_type(smooth) # S3 method for class 'mpi.smooth' smooth_type(smooth) # S3 method for class 'mpd.smooth' smooth_type(smooth) # S3 method for class 'cx.smooth' smooth_type(smooth) # S3 method for class 'cv.smooth' smooth_type(smooth) # S3 method for class 'micx.smooth' smooth_type(smooth) # S3 method for class 'micv.smooth' smooth_type(smooth) # S3 method for class 'mdcx.smooth' smooth_type(smooth) # S3 method for class 'mdcv.smooth' smooth_type(smooth) # S3 method for class 'miso.smooth' smooth_type(smooth) # S3 method for class 'mifo.smooth' smooth_type(smooth)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooth_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine the type of smooth and return it n a human readable form — smooth_type","text":"smooth object inheriting class mgcv.smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of smooths in a GAM — smooths","title":"Names of smooths in a GAM — smooths","text":"Names smooths GAM","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of smooths in a GAM — smooths","text":"","code":"smooths(object) # Default S3 method smooths(object) # S3 method for class 'gamm' smooths(object)"},{"path":"https://gavinsimpson.github.io/gratia/reference/smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of smooths in a GAM — smooths","text":"object fitted GAM related model. Typically result call mgcv::gam(), mgcv::bam(), mgcv::gamm().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a spline at provided covariate values — spline_values","title":"Evaluate a spline at provided covariate values — spline_values","text":"Evaluate spline provided covariate values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a spline at provided covariate values — spline_values","text":"","code":"spline_values( smooth, data, model, unconditional, overall_uncertainty = TRUE, frequentist = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a spline at provided covariate values — spline_values","text":"smooth currently object inherits class mgcv.smooth. data data frame values evaluate smooth . model fitted model; currently mgcv::gam() mgcv::bam() models suported. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate a spline at provided covariate values — spline_values2","title":"Evaluate a spline at provided covariate values — spline_values2","text":"function spline_values2() renamed spline_values() version 0.9.0. allowed following removal evaluate_smooth(), function using spline_values(). spline_values2() renamed spline_values().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate a spline at provided covariate values — spline_values2","text":"","code":"spline_values2( smooth, data, model, unconditional, overall_uncertainty = TRUE, frequentist = FALSE )"},{"path":"https://gavinsimpson.github.io/gratia/reference/spline_values2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate a spline at provided covariate values — spline_values2","text":"smooth currently object inherits class mgcv.smooth. data optional data frame values evaluate smooth . model fitted model; currently mgcv::gam() mgcv::bam() models suported. unconditional logical; confidence intervals include uncertainty due smoothness selection? TRUE, corrected Bayesian covariance matrix used. overall_uncertainty logical; uncertainty model constant term included standard error evaluate values smooth? frequentist logical; use frequentist covariance matrix?","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract names of all variables needed to fit a GAM or a smooth — term_names","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"Extract names variables needed fit GAM smooth","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"","code":"term_names(object, ...) # S3 method for class 'gam' term_names(object, ...) # S3 method for class 'mgcv.smooth' term_names(object, ...) # S3 method for class 'gamm' term_names(object, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"object fitted GAM object (inheriting class \"gam\" mgcv::smooth.construct smooth object, inheriting class \"mgcv.smooth\". ... arguments passed methods. currently used.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract names of all variables needed to fit a GAM or a smooth — term_names","text":"vector variable names required terms model","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of variables involved in a specified model term — term_variables","title":"Names of variables involved in a specified model term — term_variables","text":"Given name (term label) term model, returns names variables involved term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of variables involved in a specified model term — term_variables","text":"","code":"term_variables(object, term, ...) # S3 method for class 'terms' term_variables(object, term, ...) # S3 method for class 'gam' term_variables(object, term, ...) # S3 method for class 'bam' term_variables(object, term, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Names of variables involved in a specified model term — term_variables","text":"object R object method dispatch performed term character; name model term, sense attr(terms(object), \"term.labels\"). Currently checked see term exists model. ... arguments passed methods.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/term_variables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Names of variables involved in a specified model term — term_variables","text":"character vector variable names.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":null,"dir":"Reference","previous_headings":"","what":"General extractor for additional parameters in mgcv models — theta","title":"General extractor for additional parameters in mgcv models — theta","text":"General extractor additional parameters mgcv models","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General extractor for additional parameters in mgcv models — theta","text":"","code":"theta(object, ...) # S3 method for class 'gam' theta(object, transform = TRUE, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"General extractor for additional parameters in mgcv models — theta","text":"object fitted model ... arguments passed methods. transform logical; transform natural scale parameter","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"General extractor for additional parameters in mgcv models — theta","text":"Returns numeric vector additional parameters","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/theta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"General extractor for additional parameters in mgcv models — theta","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", dist = \"poisson\", seed = 42, scale = 1 / 5) m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\", family = nb() ) p <- theta(m)"},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":null,"dir":"Reference","previous_headings":"","what":"A tidy basis representation of a smooth object — tidy_basis","title":"A tidy basis representation of a smooth object — tidy_basis","text":"Takes object class mgcv.smooth returns tidy representation basis.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A tidy basis representation of a smooth object — tidy_basis","text":"","code":"tidy_basis(smooth, data = NULL, at = NULL, coefs = NULL, p_ident = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A tidy basis representation of a smooth object — tidy_basis","text":"smooth smooth object inheriting class \"mgcv.smooth\". Typically, objects returned part fitted GAM GAMM $smooth component model object $gam$smooth component model fitted mgcv::gamm() gamm4::gamm4(). data data frame containing variables used smooth. data frame containing values smooth covariate(s) basis evaluated. coefs numeric; optional vector coefficients smooth p_ident logical vector; used handling scam::scam() smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A tidy basis representation of a smooth object — tidy_basis","text":"tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"A tidy basis representation of a smooth object — tidy_basis","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/tidy_basis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A tidy basis representation of a smooth object — tidy_basis","text":"","code":"load_mgcv() df <- data_sim(\"eg1\", n = 400, seed = 42) # fit model m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = \"REML\") # tidy representaition of a basis for a smooth definition # extract the smooth sm <- get_smooth(m, \"s(x2)\") # get the tidy basis - need to pass where we want it to be evaluated bf <- tidy_basis(sm, at = df) # can weight the basis by the model coefficients for this smooth bf <- tidy_basis(sm, at = df, coefs = smooth_coefs(sm, model = m))"},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":null,"dir":"Reference","previous_headings":"","what":"Sets the elements of vector to NA — to_na","title":"Sets the elements of vector to NA — to_na","text":"Given vector indexing elements x, sets selected elements x NA.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Sets the elements of vector to NA — to_na","text":"","code":"to_na(x, i)"},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Sets the elements of vector to NA — to_na","text":"x vector values vector values used subset x","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/to_na.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Sets the elements of vector to NA — to_na","text":"Returns x possibly elements set NA","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":null,"dir":"Reference","previous_headings":"","what":"Exclude values that lie too far from the support of data — too_far","title":"Exclude values that lie too far from the support of data — too_far","text":"Identifies pairs covariate values lie far original data. function currently basic wrapper around mgcv::exclude..far().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exclude values that lie too far from the support of data — too_far","text":"","code":"too_far(x, y, ref_1, ref_2, dist = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exclude values that lie too far from the support of data — too_far","text":"x, y numeric; vector values covariates compare observed data ref_1, ref_2 numeric; vectors covariate values represent reference x1 x2` compared dist supplied, numeric vector length 1 representing distance data beyond observation excluded. example, want exclude values lie observation 10% range observed data, use 0.1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exclude values that lie too far from the support of data — too_far","text":"Returns logical vector length x1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":null,"dir":"Reference","previous_headings":"","what":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"Set rows data NA lie far reference set values","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"","code":"too_far_to_na(smooth, input, reference, cols, dist = NULL)"},{"path":"https://gavinsimpson.github.io/gratia/reference/too_far_to_na.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set rows of data to NA if the lie too far from a reference set of values — too_far_to_na","text":"smooth mgcv smooth object input data frame containing input observations columns set NA reference data frame containing reference values cols character vector columns whose elements set NA data lies far reference set dist numeric, distance reference set beyond elements input set NA","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Transform estimated values and confidence intervals by applying a function — transform_fun","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Transform estimated values confidence intervals applying function","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"","code":"transform_fun(object, fun = NULL, ...) # S3 method for class 'smooth_estimates' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'smooth_samples' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'mgcv_smooth' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'evaluated_parametric_term' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'parametric_effects' transform_fun(object, fun = NULL, constant = NULL, ...) # S3 method for class 'tbl_df' transform_fun(object, fun = NULL, column = NULL, constant = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"object object apply transform function . fun function apply. ... additional arguments passed methods. constant numeric; constant apply transformation. column character; \"tbl_df\" method, column transform.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Returns object estimate upper lower values confidence interval transformed via function.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/transform_fun.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Transform estimated values and confidence intervals by applying a function — transform_fun","text":"Gavin L. Simpson","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":null,"dir":"Reference","previous_headings":"","what":"Typical values of model covariates — typical_values","title":"Typical values of model covariates — typical_values","text":"Typical values model covariates","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Typical values of model covariates — typical_values","text":"","code":"typical_values(object, ...) # S3 method for class 'gam' typical_values( object, vars = everything(), envir = environment(formula(object)), data = NULL, ... ) # S3 method for class 'data.frame' typical_values(object, vars = everything(), ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/typical_values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Typical values of model covariates — typical_values","text":"object fitted GAM(M) model. ... arguments passed methods. vars terms include exclude returned object. Uses tidyselect principles. envir environment within recreate data used fit object. data optional data frame data used fit model reconstruction data model work.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":null,"dir":"Reference","previous_headings":"","what":"Handle user-supplied posterior draws — user_draws","title":"Handle user-supplied posterior draws — user_draws","text":"Handle user-supplied posterior draws","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Handle user-supplied posterior draws — user_draws","text":"","code":"user_draws(model, draws, ...) # S3 method for class 'gam' user_draws(model, draws, index = NULL, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Handle user-supplied posterior draws — user_draws","text":"model fitted R model. Currently models fitted mgcv::gam() mgcv::bam(), return object inherits objects supported. , \"inherits\" used loose fashion; models fitted scam::scam() support even though models strictly inherit class \"gam\" far inherits() concerned. draws matrix; user supplied posterior draws used method = \"user\". ... arguments passed methods. index vector index (subset) columns draws.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/user_draws.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Handle user-supplied posterior draws — user_draws","text":"supplied draws must matrix (currently), 1 column per model coefficient, 1 row per posterior draw. \"gam\" method argument index, can used subset (select) coefficients (columns) draws. index can valid way selecting (indexing) columns matrix. index useful set posterior draws entire model (say mgcv::gam.mh()) wish use draws individual smooth, via smooth_samples().","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":null,"dir":"Reference","previous_headings":"","what":"Variance components of smooths from smoothness estimates — variance_comp","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"wrapper mgcv::gam.vcomp() returns smoothing parameters expressed variance components.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"","code":"variance_comp(object, ...) # S3 method for class 'gam' variance_comp(object, rescale = TRUE, coverage = 0.95, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"object R object. Currently models fitted mgcv::gam() mgcv::bam() supported. ... arguments passed methods rescale logical; numerical stability reasons penalty matrices smooths rescaled fitting. rescale = TRUE, rescaling undone, resulting variance components original scale. needed comparing mixed model software, lmer(). coverage numeric; value 0 1 indicating (approximate) coverage confidence interval returned.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/variance_comp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Variance components of smooths from smoothness estimates — variance_comp","text":"function wrapper mgcv::gam.vcomp() performs three additional services suppresses annoying text output mgcv::gam.vcomp() prints terminal, returns variance smooth well standard deviation, returns variance components tibble.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns names of variables from a smooth label — vars_from_label","title":"Returns names of variables from a smooth label — vars_from_label","text":"Returns names variables smooth label","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns names of variables from a smooth label — vars_from_label","text":"","code":"vars_from_label(label)"},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns names of variables from a smooth label — vars_from_label","text":"label character; length 1 character vector containing label smooth.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/vars_from_label.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Returns names of variables from a smooth label — vars_from_label","text":"","code":"vars_from_label(\"s(x1)\") #> [1] \"x1\" vars_from_label(\"t2(x1,x2,x3)\") #> [1] \"x1\" \"x2\" \"x3\""},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":null,"dir":"Reference","previous_headings":"","what":"Identify a smooth term by its label — which_smooths","title":"Identify a smooth term by its label — which_smooths","text":"Identify smooth term label","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Identify a smooth term by its label — which_smooths","text":"","code":"which_smooths(object, ...) # Default S3 method which_smooths(object, ...) # S3 method for class 'gam' which_smooths(object, terms, ...) # S3 method for class 'bam' which_smooths(object, terms, ...) # S3 method for class 'gamm' which_smooths(object, terms, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/which_smooths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Identify a smooth term by its label — which_smooths","text":"object fitted GAM. ... arguments passed methods. terms character; one (partial) term labels identify required smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Worm plot of model residuals — worm_plot","title":"Worm plot of model residuals — worm_plot","text":"Worm plot model residuals","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Worm plot of model residuals — worm_plot","text":"","code":"worm_plot(model, ...) # S3 method for class 'gam' worm_plot( model, method = c(\"uniform\", \"simulate\", \"normal\", \"direct\"), type = c(\"deviance\", \"response\", \"pearson\"), n_uniform = 10, n_simulate = 50, level = 0.9, ylab = NULL, xlab = NULL, title = NULL, subtitle = NULL, caption = NULL, ci_col = \"black\", ci_alpha = 0.2, point_col = \"black\", point_alpha = 1, line_col = \"red\", ... ) # S3 method for class 'glm' worm_plot(model, ...) # S3 method for class 'lm' worm_plot(model, ...)"},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Worm plot of model residuals — worm_plot","text":"model fitted model. Currently models inheriting class \"gam\", well classes \"glm\" \"lm\" calls stats::glm stats::lm supported. ... arguments passed ot methods. method character; method used generate theoretical quantiles. default \"uniform\", generates reference quantiles using random draws uniform distribution inverse cummulative distribution function (CDF) fitted values. reference quantiles averaged n_uniform draws. \"simulate\" generates reference quantiles simulating new response data model observed values covariates, residualised generate reference quantiles, using n_simulate simulated data sets. \"normal\" generates reference quantiles using standard normal distribution. \"uniform\" computationally efficient, \"simulate\" allows reference bands drawn QQ-plot. \"normal\" avoided used fall back random number generator (\"simulate\") inverse CDF available family used model fitting (`\"uniform\"“). Note method = \"direct\" deprecated favour method = \"uniform\". type character; type residuals use. \"deviance\", \"response\", \"pearson\" residuals allowed. n_uniform numeric; number times randomize uniform quantiles direct computation method (method = \"uniform\"). n_simulate numeric; number data sets simulate estimated model using simulation method (method = \"simulate\"). level numeric; coverage level reference intervals. Must strictly 0 < level < 1. used method = \"simulate\". ylab character expression; label y axis. supplied, suitable label generated. xlab character expression; label y axis. supplied, suitable label generated. title character expression; title plot. See ggplot2::labs(). May vector, one per penalty. subtitle character expression; subtitle plot. See ggplot2::labs(). May vector, one per penalty. caption character expression; plot caption. See ggplot2::labs(). May vector, one per penalty. ci_col fill colour reference interval method = \"simulate\". ci_alpha alpha transparency reference interval method = \"simulate\". point_col colour points QQ plot. point_alpha alpha transparency points QQ plot. line_col colour used draw reference line.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Worm plot of model residuals — worm_plot","text":"wording used mgcv::qq.gam() uses direct reference simulated residuals method (method = \"simulated\"). avoid confusion, method = \"direct\" deprecated favour method = \"uniform\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/worm_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Worm plot of model residuals — worm_plot","text":"","code":"load_mgcv() ## simulate binomial data... dat <- data_sim(\"eg1\", n = 200, dist = \"binary\", scale = .33, seed = 0) p <- binomial()$linkinv(dat$f) # binomial p n <- sample(c(1, 3), 200, replace = TRUE) # binomial n dat <- transform(dat, y = rbinom(n, n, p), n = n) m <- gam(y / n ~ s(x0) + s(x1) + s(x2) + s(x3), family = binomial, data = dat, weights = n, method = \"REML\" ) ## Worm plot; default using direct randomization of uniform quantiles ## Note no reference bands are drawn with this method. worm_plot(m) ## Alternatively use simulate new data from the model, which ## allows construction of reference intervals for the Q-Q plot worm_plot(m, method = \"simulate\", point_col = \"steelblue\", point_alpha = 0.4 ) ## ... or use the usual normality assumption worm_plot(m, method = \"normal\")"},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":null,"dir":"Reference","previous_headings":"","what":"Madison lakes zooplankton data — zooplankton","title":"Madison lakes zooplankton data — zooplankton","text":"Madison lake zooplankton data long-term study seasonal dynamics zooplankton, collected Richard Lathrop. data collected chain lakes Wisconsin (Mendota, Monona, Kegnonsa, Waubesa) approximately bi-weekly 1976 1994. consist samples zooplankton communities, taken deepest point lake via vertical tow. data provided Wisconsin Department Natural Resources collection processing fully described Lathrop (2000).","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Madison lakes zooplankton data — zooplankton","text":"data frame","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Madison lakes zooplankton data — zooplankton","text":"Pedersen EJ, Miller DL, Simpson GL, Ross N. 2018. Hierarchical generalized additive models: introduction mgcv. PeerJ Preprints 6:e27320v1 doi:10.7287/peerj.preprints.27320v1 .","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Madison lakes zooplankton data — zooplankton","text":"record consists counts given zooplankton taxon taken subsample single vertical net tow, scaled account relative volume subsample versus whole net sample area net tow rounded nearest 1000 give estimated population density per m2 taxon point time sampled lake.","code":""},{"path":"https://gavinsimpson.github.io/gratia/reference/zooplankton.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Madison lakes zooplankton data — zooplankton","text":"Lathrop RC. (2000). Madison Wisonsin Lakes Zooplankton 1976–1994. Environmental Data Initiative.","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-development-version","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia (development version)","text":"conditional_values() draw() method compute plot predictions fitted GAM conditional one covariates. function wrapper around fitted_values() allows user simple ways specify covariates condition values covariates take. provides similar functionality marginaleffects::plot_predictions(), simpler. See #300. penalty() basis() can now allow smooth reparameterized resulting basis identity matrix. clearly highlights penalty null space, functions penalty effect . draw.gam() draw.smooth_estimates() gain argument caption, , set FALSE plot smooth basis type caption plot. #307 appraise() qq_plot.gam() now allow user set random seed used generating reference quantiles method = \"uniform\" method = \"simulate\".","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-development-version","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia (development version)","text":"derivative_samples() ignoring scale argument. #293 Reported @jonathonmellor Argument level derivative_samples() included accidentally. v0.9.2.9002 argument deprecated using now generate warning. #291 draw() plotting cyclic P spline smooths. Reported @Zuckerbrot #297 derivatives() fail \"fs\" smooths parametric effects model. Reported @mahonmb #301 Partial residuals partial_residuals() draw.gam() wrong GAMs fitted family = binomial() weights argument contained binomial sample sizes prior weights used form weighted working residuals. Now working weights used instead. Reported @emchuron #273 Internal function gammals_link() expecting \"theta\" synonym scale parameter master table \"phi\" coded synonym. Now work expected. level() assumed level single value even though handle multiple levels. #321","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-092","dir":"Changelog","previous_headings":"","what":"gratia 0.9.2","title":"gratia 0.9.2","text":"CRAN release: 2024-06-25","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"breaking-changes-0-9-2","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"gratia 0.9.2","text":"parametric_effects() slightly escaped great renaming happened 0.9.0. Columns type term gain prefix .. now rectified two columns now .type .term.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-9-2","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.9.2","text":"Plots random effects now labelled smooth label. Previously, title taken fro variable involved smooth, doesn’t work terms like s(subject, continuous_var, bs = \"re\") random slopes, previsouly title \"subject\". Now terms title \"s(subject,continuous_var)\". Simple random intercept terms, s(subject, bs = \"re\"), now titled \"s(subject)\". #287 vignettes custom-plotting.Rmd, posterior-simulation.Rmd moved vignettes/articles thus longer available package vignettes. Instead, accessible Articles package website: https://gavinsimpson.github.io/gratia/","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-9-2","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.9.2","text":"fitted_samples() now works gam() models multiple linear predictors, currently location parameter supported. parameter indicated new variable .parameter returned object.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-9-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.9.2","text":"partial_residuals() computing partial residuals deviance residuals. compatibility mgcv::plot.gam(), partial residuals now computed working residuals. Reported @wStockhausen #273 appraise() passing ci_col argument qq_plot() worm_plot(). Reported Sate Ahmed. Couldn’t pass mvn_method posterior sampling functions user facing functions fitted_samples(), posterior_samples(), smooth_samples(), derivative_samples(), repsonse_derivatives(). Reported @stefgehrig #279 fitted_values() works quantile GAMs fitted qgam(). confint.gam() applying shift estimate upper lower interval. #280 reported @TIMAVID & @rbentham parametric_effects() draw.parametric_effects() forget levels factors (intentionally), lead problems ordered factors ordering levels preserved. Now, parametric_effects() returns named list factor levels attribute \"factor_levels\" containing required information order levels preserved plotting. #284 Reported @mhpob parametric_effects() fail parametric terms model interaction terms (don’t currently handle). #282","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-090","dir":"Changelog","previous_headings":"","what":"gratia 0.9.0","title":"gratia 0.9.0","text":"CRAN release: 2024-03-27","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"breaking-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"gratia 0.9.0","text":"Many functions now return objects different named variables. order avoid clashes variable names used user’s models data, period (.) now used prefix generated variable names. functions whose names changed : smooth_estimates(), fitted_values(), fitted_samples(), posterior_samples(), derivatives(), partial_derivatives(), derivative_samples(). addition, add_confint() also adds newly-named variables. derivatives() partial_derivatives() now work like smooth_estimates(); place var data columns, gratia now stores data variables derivatives evaluated columns object actual variable names. way spline---sphere (SOS) smooths (bs = \"sos\") plotted changed use ggplot2::coord_sf() instead previously-used ggplot2::coord_map(). changed made result coord_map() soft-deprecated (“superseded”) minor versions ggplot2 now already, changes guides system version 3.5.0 ggplot2. axes plots created coord_map() never really worked correctly changing angle tick labels never worked. coord_map() superseded, didn’t receive updates guides system side effect changes, code plotted SOS smooths producing warning release ggplot2 version 3.5.0. projection settings used draw SOS smooths previously controlled via arguments projection orientation. arguments affect ggplot2::coord_sf(), Instead projection used controlled new argument crs, takes PROJ string detailing projection use integer refers known coordinate reference system (CRS). default projection used +proj=ortho +lat_0=20 +lon_0=XX XX mean longitude coordinates data points.","code":"1. `est` is now `.estimate`, 2. `lower` and `upper` are now `.lower_ci` and `.upper_ci`, 3. `draw` and `row` and now `.draw` and `.row` respectively, 4. `fitted`, `se`, `crit` are now `.fitted`, `.se`, `.crit`, respectively 5. `smooth`, `by`, and `type` in `smooth_estimates()` are now `.smooth`, `.by`, `.type`, respectively."},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"defunct-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Defunct","title":"gratia 0.9.0","text":"evaluate_smooth() deprecated gratia version 0.7.0. function ’s methods removed package. Use smooth_estimates() instead.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-functions-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Deprecated functions","title":"gratia 0.9.0","text":"following functions deprecated version 0.9.0 gratia. eventually removed package part clean ahead eventual 1.0.0 release. functions become defunct version 0.11.0 1.0.0, whichever released soonest. evaluate_parametric_term() deprecated. Use parametric_effects() instead. datagen() deprecated. never really originally designed , replaced data_slice().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-arguments-0-9-0","dir":"Changelog","previous_headings":"Breaking changes > Defunct and deprecated functions and arguments","what":"Deprecated arguments","title":"gratia 0.9.0","text":"make functions package consistent, arguments select, term, smooth used thing hence latter two deprecated favour select. deprecated argument used, warning issued value assigned argument assigned select function continue.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.9.0","text":"smooth_samples() now uses single call RNG generate draws posterior smooths. Previous version 0.9.0, smooth_samples() separate call mvnfast::rmvn() smooth. result, result call smooth_samples() model multiple smooths now produce different results generated previously. regain old behaviour, add rng_per_smooth = TRUE smooth_samples() call. Note, however, using per-smooth RNG calls method = \"mh\" inefficient , method, posterior draws coefficients model sampled . , use rng_per_smooth = TRUE method = \"gaussian\". output smooth_estimates() draw() method changed tensor product smooths involve one 2D marginal smooths. Now, covariate values supplied via data argument, smooth_estimates() identifies one marginals 2d surface allows covariates involved surface vary fastest, ahead terms marginals. change made provides better default nothing provided data. also affects draw.gam(). fitted_values() now level support location, scale, shape families. Supported families mgcv::gaulss(), mgcv::gammals(), mgcv::gumbls(), mgcv::gevlss(), mgcv::shash(), mgcv::twlss(), mgcv::ziplss(). gratia now requires dplyr versions >= 1.1.0 tidyselect >= 1.2.0. new vignette Posterior Simulation available, describes posterior simulation fitted GAMs using {gratia}.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-9-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.9.0","text":"Soap film smooths using basis bs = \"\" now handled draw(), smooth_estimates() etc. #8 response_derivatives() new function computing derivatives response respect (continuous) focal variable. First second order derivatives can computed using forward, backward, central finite differences. uncertainty estimated derivative determined using posterior sampling via fitted_samples(), hence can derived Gaussian approximation posterior using Metropolis Hastings sampler (see .) derivative_samples() work horse function behind response_derivatives(), computes returns posterior draws derivatives additive combination model terms. Requested @jonathanmellor #237 data_sim() can now simulate response data gamma, Tweedie ordered categorical distributions. data_sim() gains two new example models \"gwf2\", simulating data Gu & Wabha’s f2 function, \"lwf6\", example function 6 Luo & Wabha (1997 JASA 92(437), 107-116). data_sim() can also simulate data use GAMs fitted using family = gfam() grouped families different types data response handled. #266 part #265 fitted_samples() smooth_samples() can now use Metropolis Hastings sampler mgcv::gam.mh(), instead Gaussian approximation, sample posterior distribution model specific smooths respectively. posterior_samples() new function family fitted_samples() smooth_samples(). posterior_samples() returns draws posterior distribution response, combining uncertainty estimated expected value response dispersion response distribution. difference posterior_samples() predicted_samples() latter includes variation due drawing samples conditional distribution response (uncertainty expected values ignored), former includes sources uncertainty. fitted_samples() can new use matrix user-supplied posterior draws. Related #120 add_fitted_samples(), add_predicted_samples(), add_posterior_samples(), add_smooth_samples() new utility functions add respective draws posterior distribution existing data object covariate values object: obj |> add_posterior_draws(model). #50 basis_size() new function extract basis dimension (number basis functions) smooths. Methods available objects inherit classes \"gam\", \"gamm\", \"mgcv.smooth\" (individual smooths). data_slice() gains method data frames tibbles. typical_values() gains method data frames tibbles. fitted_values() now works models fitted using mgcv::ocat() family. predicted probability category returned, alongside Wald interval created using standard error (SE) estimated probability. SE estimated probabilities transformed logit (linear predictor) scale, Wald credible interval formed, back-transformed response (probability) scale. fitted_values() now works GAMMs fitted using mgcv::gamm(). Fitted (predicted) values use GAM part model, thus exclude random effects. link() inv_link() work models fitted using cnorm() family. worm plot can now drawn place QQ plot appraise() via new argument use_worm = TRUE. #62 smooths() now works models fitted mgcv::gamm(). overview() now returns basis dimension smooth gains argument stars TRUE add significance stars output plus legend printed tibble footer. Part wish @noamross #214 New add_constant() transform_fun() methods smooth_samples(). evenly() gains arguments lower upper modify lower / upper bound interval evenly spaced values generated. add_sizer() new function add information whether derivative smooth significantly changing (credible interval excludes 0). Currently, methods derivatives() smooth_estimates() objects implemented. Part request @asanders11 #117 draw.derivatives() gains arguments add_change change_type allow derivatives smooths plotted indicators credible interval derivative excludes 0. Options allow periods decrease increase differentiated via change_type = \"sizer\" instead default change_type = \"change\", emphasises either type change way. Part wish @asanders11 #117 draw.gam() can now group factor smooths given factor single panel, rather plotting smooths level separate panels. achieved via new argument grouped_by. Requested @RPanczak #89 draw.smooth_estimates() can now also group factor smooths given factor single panel. underlying plotting code used draw_smooth_estimates() univariate smooths can now add change indicators plots smooths change indicators added object created smooth_estimates() using add_sizer(). See example ?draw.smooth_estimates. smooth_estimates() can, evaluating 3D 4D tensor product smooth, identify one 2D smooths marginal tensor product. users provide covariate values evaluate smooths, smooth_estimates() focus 2D marginal smooth (first one involved tensor product), instead following ordering terms definition tensor product. #191 example, te(z, x, y, bs = c(cr, ds), d = c(1, 2)), second marginal smooth 2D Duchon spline covariates x y. Previously, smooth_estimates() generated n values z x n_3d values y, evaluated tensor product combinations generated values. ignore structure implicit tensor product, likely want know surface estimated Duchon spline x y smoothly varies z. Previously smooth_estimates() generate surfaces z x, varying y. Now, smooth_estimates() correctly identifies one marginal smooths tensor product 2D surface focus surface varying terms tensor product. improved behaviour needed bam() models always possible obvious thing reorder smooths defining tensor product te(x, y, z, bs = c(ds, cr), d = c(2, 1)). discrete = TRUE used bam() terms tensor product may get rearranged model setup maximum efficiency (See Details ?mgcv::bam). Additionally, draw.gam() now also works way. New function null_deviance() extracts null deviance fitted model. draw(), smooth_estimates(), fitted_values(), data_slice(), smooth_samples() now work models fitted scam::scam(). matters, current support extends univariate smooths. generate_draws() new low-level function generating posterior draws fitted model coefficients. generate_daws() S3 generic function extensible users. Currently provides simple interface simple Gaussian approximation sampler (gaussian_draws()) simple Metropolis Hasting sample (mh_draws()) available via mgcv::gam.mh(). #211 smooth_label() new function extracting labels ‘mgcv’ creates smooths smooth object . penalty() default method works s(), te(), t2(), ti(), create smooth specification. transform_fun() gains argument constant allow addition constant value objects (e.g. estimate confidence interval). enables single obj |> transform_fun(fun = exp, constant = 5) instead separate calls add_constant() transform_fun(). Part discussion #79 model_constant() new function simply extracts first coefficient estimated model.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-9-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.9.0","text":"link(), inv_link(), related family functions ocat() weren’t correctly identifying family name result throw error even passed object correct family. link() inv_link() now work correctly betar() family fitted GAM. print() method lp_matrix() now converts matrix data frame conversion tibble. makes sense results typical behaviour columns printed object doubles. Constrained factor smooths (bs = \"sz\") factor first variable mentioned smooth (.e. s(x, f, bs = \"sz\") continuous x factor f) now plotable draw(). #208 parametric_effects() unable handle special parametric terms like poly(x) log(x) formulas. Reported @fhui28 #212 parametric_effects() now works better location, scale, shape models. Reported @pboesu #45 parametric_effects now works missing values one variables used fitted GAM. #219 response_derivatives() incorrectly using .data tidyselect selectors. typical_values() handle logical variables GAM fit mgcv stores numerics var.summary. affected evenly() data_slice(). #222 parametric_effects() fail two ordered factors model. Reported @dsmi31 #221 Continuous smooths evaluated median value variable instead value 1. #224 fitted_samples() (hence posterior_samples()) now handles models offset terms formula. Offset terms supplied via offset argument ignored mgcv:::predict.gam() hence ignored also gratia. Reported @jonathonmellor #231 #233 smooth_estimates() fail \"fs\" smooth multivariate base smoother used factor last variable specified definition smooth: s(x1, x2, f, bs = \"fs\", xt = list(bs = \"ds\")) work, s(f, x1, x2, bs = \"fs\", xt = list(bs = \"ds\")) (ordering variables places factor last) emit obscure error. ordering terms involved smooth now doesn’t matter. Reported @chrisaak #249. draw.gam() fail plotting multivariate base smoother used \"sz\" smooth. Now, use case identified message printed indicating (currently) gratia doesn’t know plot smooth. Reported @chrisaak #249. draw.gam() fail plotting multivariate base smoother used \"fs\" smooth. Now, use case identified message printed indicating (currently) gratia doesn’t know plot smooth. Reported @chrisaak #249. derivative_samples() fail order = 2 computing forward finite differences, regardless type order = 1. Partly reported @samlipworth #251. draw() method penalty() normalizing penalty range 0–1, claimed documented -1–1 argument normalize = TRUE. now fixed. smooth_samples() failing data supplied contained variables used smooth sampled. Hence generally fail unless single smooth sampled model contained single smooth. function never intended retain variables data written way fail relocating data columns end posterior sampling object. #255 draw.gam() draw.smooth_estimates() fail plotting univariate tensor product smooth (e.g. te(x), ti(x), t2()). Reported @wStockhausen #260 plot.smooth() printing factor level subtitles ordered factor smooths.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-082","dir":"Changelog","previous_headings":"","what":"gratia 0.8.2","title":"gratia 0.8.2","text":"CRAN release: 2024-01-09 Small fixes CRAN.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-081","dir":"Changelog","previous_headings":"","what":"gratia 0.8.1","title":"gratia 0.8.1","text":"CRAN release: 2023-02-02","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-8-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.8.1","text":"smooth_samples() now returns objects variables involved smooths correct name. Previously variables named .x1, .x2, etc. Fixing #126 improving compatibility compare_smooths() smooth_estimates() allowed variables named correctly. gratia now depends version 1.8-41 later mgcv package.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.8.1","text":"draw.gam() can now handle tensor products include marginal random effect smooth. Beware plotting smooths many levels, however, separate surface plot produced level.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-8-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.8.1","text":"Additional fixes changes dplyr 1.1.0. smooth_samples() now works sampling posteriors multiple smooths different dimension. #126 reported @Aariq","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-8-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.8.0","text":"{gratia} now depends R version 4.1 later. new vignette “Data slices” supplied {gratia}. Functions {gratia} harmonised use argument named data instead newdata passing new data evaluate features smooths. message printed newdata used now . Existing code need changed data takes value newdata. Note due way ... handled R, R script uses data argument, run versions gratia prior 8.0 (released; 0.7.3.8 using development version) user-supplied data silently ignored. , scripts using data check installed version gratia >= 0.8 package developers update depend versions >= 0.8 using gratia (>= 0.8) DESCRIPTION. order plots smooths changed draw.gam() match order smooths specified model formula. See Bug Fixes detail #154.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-8-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.8.0","text":"Added basic support GAMLSS (distributional GAMs) fitted gamlss() function package GJRM. Support currently restricted draw() method. difference_smooths() can now include group means difference, many users expected. include group means use group_means = TRUE function call, e.g. difference_smooths(model, smooth = \"s(x)\", group_means = TRUE). Note: function still differs plot_diff() package itsadug, essentially computes differences model predictions. main practical difference effects beyond factor smooth, including random effects, may included plot_diff(). implements main wish #108 (@dinga92) #143 (@mbolyanatz) despite protestations complicated cases (isn’t; complexity just cancels .) data_slice() totally revised. Now, user provides values variables want slice variables model specified held typical values (.e. value observation closest median numeric variables, modal factor level.) Data slices now produced passing name = value pairs variables values want appear slice. example value pair can expression looked (evaluated) data argument model frame fitted model (default). example, resulting slice data frame 100 observations, comprising x1, vector 100 values spread evenly range x1, constant value mean x2 x2 variable, constant factor level, model class fac, fac variable model. partial_derivatives() new function computing partial derivatives multivariate smooths (e.g. s(x,z), te(x,z)) respect one margins smooth. Multivariate smooths dimension handled, one dimensions allowed vary. Partial derivatives estimated using method finite differences, forward, backward, central finite differences available. Requested @noamross #101 overview() provides simple overview model terms fitted GAMs. new bs = \"sz\" basis released mgcv version 1.18-41 now supported smooth_estimates(), draw.gam(), draw.smooth_estimates() basis unique plotting method. #202 basis() now method fitted GAM(M)s can extract estimated basis model plot , using estimated coefficients smooth weight basis. #137 also new draw.basis() method plotting results call basis(). method can now also handle bivariate bases. tidy_basis() lower level function heavy lifting basis(), now exported. tidy_basis() returns tidy representation basis supplied object inheriting class \"mgcv.smooth\". objects returned $smooth component fitted GAM(M) model. lp_matrix() new utility function quickly return linear predictor matrix estimated model. wrapper predict(..., type = \"lpmatrix\") evenly() synonym seq_min_max() preferred going forward. Gains argument produce sequences covariate increment units . ref_level() level() new utility functions extracting reference specific level factor respectively. useful specifying covariate values condition data slice. model_vars() new, public facing way returning vector variables used model. difference_smooths() now use user-supplied data points evaluate pair smooths. Also note argument newdata renamed data. #175 draw() method difference_smooths() now uses better labels plot titles avoid long labels even modest factor levels. derivatives() now works factor-smooth interaction (\"fs\") smooths. draw() methods now allow angle tick labels x axis plots rotated using argument angle. Requested @tamas-ferenci #87 draw.gam() related functions (draw.parametric_effects(), draw.smooth_estimates()) now add basis plot using caption. #155 smooth_coefs() new utility function extracting coefficients particular smooth fitted model. smooth_coef_indices() associated function returns indices (positions) vector model coefficients (returned coef(gam_model)) coefficients pertain stated smooth. draw.gam() now better handles patchworks plots one plots fixed aspect ratios. #190","code":"m <- gam(y ~ s(x1) + x2 + fac) data_slice(model, x1 = evenly(x1, n = 100), x2 = mean(x2))"},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-8-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.8.0","text":"draw.posterior_smooths now plots posterior samples fixed aspect ratio smooth isotropic. #148 derivatives() now ignores random effect smooths (derivatives don’t make sense anyway). #168 confint.gam(...., method = \"simultaneous\") now works factor smooths parm passed full name specific smooth s(x)faclevel. order plots produced gratia::draw.gam() matches order smooths entered model formula. Recent changes internals gratia::draw.gam() switch smooth_estimates() undertaken lead change behaviour resulting use dplyr::group_split(), ’s coercion internally character vector factor. factor now created explicitly, levels set correct order. #154 Setting dist argument set response smooth values NA lay far support data multivariate smooths, lead incorrect scale response guide. now fixed. #193 Argument fun draw.gam() applied parametric terms. Reported @grasshoppermouse #195 draw.gam() adding uncertainty linear predictors smooths overall_uncertainty = TRUE used. Now draw.gam() includes uncertainty linear predictors smooth takes part. #158 partial_derivatives() works provided single data point evaluate derivative. #199 transform_fun.smooth_estimates() addressing wrong variable names trying transform confidence interval. #201 data_slice() doesn’t fail error used model contains offset term. #198 confint.gam() longer uses evaluate_smooth(), soft deprecated. #167 qq_plot() worm_plot() compute wrong deviance residuals used generate theoretical quantiles exotic families (distributions) available mgcv. also affected appraise() QQ plot; residuals shown plots deviance residuals shown y-axis QQ plot correct. generation reference intervals/quantiles affected.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-073","dir":"Changelog","previous_headings":"","what":"gratia 0.7.3","title":"gratia 0.7.3","text":"CRAN release: 2022-05-09","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-7-3","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.7.3","text":"Plots smooths now use “Partial effect” y-axis label place “Effect”, better indicate displayed.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-3","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.3","text":"confint.fderiv() confint.gam() now return results tibble instead common--garden data frame. latter mostly already . Examples confint.fderiv() confint.gam() reworked, part remove inconsistent output examples run M1 macs.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.3","text":"compare_smooths() failed passed non-standard model “names” like compare_smooths(m_gam, m_gamm$gam) compare_smooths(l[[1]], l[[2]]) even evaluated objects valid GAM(M) models. Reported Andrew Irwin #150","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-072","dir":"Changelog","previous_headings":"","what":"gratia 0.7.2","title":"gratia 0.7.2","text":"CRAN release: 2022-03-17","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-2","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.2","text":"draw.gam() draw.smooth_estimates() can now handle splines sphere (s(lat, long, bs = \"sos\")) special plotting methods using ggplot2::coord_map() handle projection spherical coordinates. orthographic projection used default, essentially arbitrary (northern hemisphere-centric) default orientation view. fitted_values() insures data (hence returned object) tibble rather common garden data frame.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.2","text":"draw.posterior_smooths() redundantly plotting duplicate data rug plot. Now unique set covariate values used drawing rug. data_sim() passing scale argument bivariate example setting (\"eg2\"). draw() methods gamm() gamm4::gamm4() fits passing arguments draw.gam(). draw.smooth_estimates() produce subtitle data continuous smooth factor smooth. Now subtitle contains name continuous variable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-071","dir":"Changelog","previous_headings":"","what":"gratia 0.7.1","title":"gratia 0.7.1","text":"Due issue size package source tarball, wasn’t discovered submission CRAN, 0.7.1 never released.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.1","text":"draw.gam() draw.smooth_estimates(): {gratia} can now handle smooths 3 4 covariates plotting. smooths 3 covariates, third covariate handled ggplot2::facet_wrap() set (default n = 16) small multiples drawn, 2d surface evaluated specified value third covariate. smooths 4 covariates, ggplot2::facet_grid() used draw small multiples, default producing 4 rows 4 columns plots specific values third fourth covariates. number small multiples produced controlled new arguments n_3d (default = n_3d = 16) n_4d (default n_4d = 4, yielding n_4d * n_4d = 16 facets) respectively. affects plotting; smooth_estimates() able handle smooths number covariates . handling higher-dimensional smooths, actually drawing plots default device can slow, especially default value n = 100 (3D 4D smooths result 160,000 data points plotted). recommended reduce n smaller value: n = 50 reasonable compromise resolution speed. model_concurvity() returns concurvity measures mgcv::concurvity() estimated GAMs tidy format. synonym concrvity() also provided. draw() method provided produces bar plot heatmap concurvity values depending whether overall concurvity smooth pairwise concurvity smooth model requested. draw.gam() gains argument resid_col = \"steelblue3\" allows colour partial residuals (plotted) changed.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.1","text":"model_edf() using type argument. result ever returned default EDF type. add_constant() methods weren’t applying constant required variables. draw.gam(), draw.parametric_effects() now actually work model parametric effects. #142 Reported @Nelson-Gon parametric_effects() fail model parametric terms predict.gam() returns empty arrays passed exclude = character(0).","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-070","dir":"Changelog","previous_headings":"","what":"gratia 0.7.0","title":"gratia 0.7.0","text":"CRAN release: 2022-02-07","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"major-changes-0-7-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"gratia 0.7.0","text":"draw.gam() now uses smooth_estimates() internally consequently uses draw() method underlying plotting code. simplified code compared evaluate_smooth() methods, allow future development addition features easily evaluate_smooth() retained. Similarly, evaluate_parametric_terms() now deprecated favour parametric_effects(), also used internally draw.gam() parametric terms present model (parametric = TRUE). lot code reused differences plots result change minimal, corner cases may missed. File Issue notice something changed think shouldn’t. draw.gam() now plots 2D isotropic smooths (TPRS Duchon splines) equally-scaled x y coordinates using coord_equal(ratio = 1). Alignment plots little different now plotting models multiple smooths. See Issue #81.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"deprecated-functions-0-7-0","dir":"Changelog","previous_headings":"Major changes","what":"Deprecated functions","title":"gratia 0.7.0","text":"version 0.7.0, following functions considered deprecated use discouraged: fderiv() soft-deprecated favour derivatives(), evaluate_smooth() soft-deprecated favour smooth_estimates(), evaluate_parametric_term() soft-deprecated favour parametric_effects(). first call one functions generate warning, pointing newer, alternative, function. safe ignore warnings, deprecated functions longer receive updates thus risk removed package future date. newer alternatives can handle types models smooths, especially case smooth_estimates().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-7-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.7.0","text":"fitted_values() provides tidy wrapper around predict.gam() generating fitted values model. New covariate values can provided via argument data. credible interval fitted values returned, values can link (linear predictor) response scale. Note function returns expected values response. Hence, “fitted values” used instead “predictions” case new covariate values differentiate values case generating new response values fitted model. rootogram() draw() method produce rootograms diagnostic plots fitted models. Currently models fitted poisson(), nb(), negbin(), gaussian() families. New helper functions typical_values(), factor_combos() data_combos() quickly creating data sets producing predictions fitted models covariatess fixed come typical representative values. typical_values() new helper function return typical values covariates fitted model. returns value observation closest median numerical covariates modal level factor preserving levels factor. typical_values() useful preparing data slices scenarios fitted values estimated model required. factor_combos() extracts returns combinations levels factors found data used fit model. Unlike typical_values(), factor_combos() returns combinations factor levels observed data, just modal level. Optionally, combinations factor levels can returned, just observed data. data_combos() combines returns factor data factor_combos() plus typical values numerical covariates. useful want generate predictions model combination factor terms holding continuous covariates median values. nb_theta() new extractor function returns theta parameter fitted negative binomial GAM (families nb() negbin()). Additionally, theta() has_theta() provide additional functionality. theta() experimental function extracting additional parameters model family. has_theta() useful checking additional parameters available family model. edf() extracts effective degrees freedom (EDF) fitted model specific smooth model. Various forms EDF can extracted. model_edf() returns EDF overall model. supplied multiple models, EDFs model returned comparison. draw.gam() can now show “rug” plot bivariate smooth drawing small points high transparency smooth surface data coordinates. addition, rugs plots factor smooths now show locations covariate values specific level factor levels. better reflects data used estimate smooth, even though basis smooth set using covariate locations. draw.gam() draw.smooth_estimates() now allow aspects plot changed: fill (colour) alpha attributes credible interval, line colour smooth can now specified using arguments ci_col, ci_alpha, smooth_col respectively. Partial residuals can now plotted factor smooths. allow , partial residuals filtered residuals associated particular level’s smooth drawn plot smooth. smooth_estimates() uses check_user_select_smooths() handle user-specified selection smooth terms. flexible previously, allows easier selection smooths evaluate. fixef() now imported (re-exported) nlme package, methods models fitted gam() gamm(), extract fixed effects estimates fitted models. fixed_effects() alias fixef(). draw() method smooth_samples() can now handle 2D smooths. Additionally, number posterior draws plot can now specified plotting using new argument n_samples, result n_samples draws selected random set draws plotting. New argument seed allows selection draws repeatable.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-7-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.7.0","text":"smooth_estimates() filtering user-supplied data level specific smooth used factor smooths. result smooth evaluated rows user-supplied data, therefore result nrow(user_data) * nlevels(by_variable) rows returned object instead nrow(user_data) rows. add_confint() method smooth_estimates() upper lower intervals reversed. #107 Reported @Aariq draw.gam() smooth_estimates() ignoring dist argument allows covariate values lie far support data excluded returning estimated values smooth plotting . #111 Reported @Aariq smooth_samples() factor GAM return samples first factor level . Reported @rroyaute discussion #121 smooth_samples() fail model contained random effect “smooths”. now ignored message running smooth_samples(). Reported @isabellaghement #121 link(), inv_link() failing models fitted family = scat(). Reported @Aariq #130","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-060","dir":"Changelog","previous_headings":"","what":"gratia 0.6.0","title":"gratia 0.6.0","text":"CRAN release: 2021-04-18","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"major-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"Major changes","title":"gratia 0.6.0","text":"{cowplot} package replaced {patchwork} package producing multi-panel figures draw() appraise(). shouldn’t affect code used {gratia} , passed additional arguments cowplot::plot_grid() used align axis arguments draw() appraise(), ’ll need adapt code accordingly. Typically, can simply delete align axis arguments {patchwork} just work align plots nicely. arguments passed via ... cowplot::plot_grid() just ignored patchwork::wrap_plots() unless passed arguments match arguments patchwork::wrap_plots().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-6-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.6.0","text":"{patchwork} package now used multi-panel figures. , {gratia} longer Imports {cowplot} package. Worm plot diagnostic plots available via new function worm_plot(). Worm plots detrended Q-Q plots, deviation Q-Q reference line emphasized deviations around line occupy full height plot. worm_plot() methods available models classes \"gam\", \"glm\", \"lm\". (#62) Smooths can now compared across models using compare_smooths(), comparisons visualised associated draw() method. (#85 @dill) feature bit experimental; returned object uses nested lists may change future users find confusing. reference line qq_plot() method = \"normal\" previously drawn line intercept 0 slope 1, match methods. inconsistent stats::qqplot() drew line 1st 3rd quartiles. qq_plot() method = \"normal\" now uses robust reference line. Reference lines methods remain drawn slope 1 intercept 0. qq_plot() method = \"normal\" now draws point-wise reference band using standard error order statistic. draw() method penalty() now plots penalty matrix heatmaps -logical orientation, match matrices might written printed R console. link(), inv_link() now work models fitted gumbls() shash() families. (#84) extract_link() lower level utility function related link() inv_link(), now exported.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-6-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.6.0","text":"default method name generating reference quantiles qq_plot() changed \"direct\" \"uniform\", avoid confusion mgcv::qq.gam() help page description methods. Accordingly using method = \"direct\" deprecated message effect displayed used. way smooths/terms selected derivatives() switched use mechanism draw.gam()’s select argument. get partial match term, now need also specify partial_match = TRUE call derivatives().","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.6.0","text":"transform_fun() copy paste bug definition generic. (#96 @Aariq) derivatives() user-supplied newdata fail factor smooths interval = \"simultaneous\" introduce rows derivative == 0 interval = \"confidence\" didn’t subset rows newdata specific level factor computing derivatives. (#102 @sambweber) evaluate_smooth() can now handle random effect smooths defined using ordered factor. (#99 @StefanoMezzini)","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-051","dir":"Changelog","previous_headings":"","what":"gratia 0.5.1","title":"gratia 0.5.1","text":"CRAN release: 2021-01-23","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-5-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.5.1","text":"smooth_estimates() can now handle bivariate multivariate thinplate regression spline smooths, e.g.  s(x, z, ), tensor product smooths (te(), t2(), & ti()), e.g. te(x, z, ) factor smooth interactions, e.g. s(x, f, bs = \"fs\") random effect smooths, e.g. s(f, bs = \"re\") penalty() provides tidy representation penalty matrices smooths. tidy representation suitable plotting ggplot(). draw() method provided, represents penalty matrix heatmap.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-5-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.5.1","text":"newdata argument smooth_estimates() changed data originally intended.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-050","dir":"Changelog","previous_headings":"","what":"gratia 0.5.0","title":"gratia 0.5.0","text":"CRAN release: 2021-01-10","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-5-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.5.0","text":"Partial residuals models can computed partial_residuals(). partial residuals weighted residuals model added contribution smooth term (returned predict(model, type = \"terms\"). Wish #76 (@noamross) Also, new function add_partial_residuals() can used add partial residuals data frames. Users can now control extent colour fill scales used plotting smooths draw() methods use . useful change fill scale plotting 2D smooths, change discrete colour scale used plotting random factor smooths (bs = \"fs\"). user can pass scales via arguments discrete_colour continuous_fill. effects certain smooths can excluded data simulated model using simulate.gam() predicted_samples() passing exclude terms predict.gam(). allows excluding random effects, example, model predicted values used simulate new data conditional distribution. See example predicted_samples(). Wish #74 (@hgoldspiel) draw.gam() related functions gain arguments constant fun allow user-defined constants transformations smooth estimates confidence intervals applied. Part wish Wish #79. confint.gam() now works 2D smooths also. smooth_estimates() early version code replace (likely supersede) evaluate_smooth(). smooth_estimates() can currently handle 1D smooths standard types.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.5.0","text":"meaning parm confint.gam changed. argument now requires smooth label match smooth. vector labels can provided, partial matching smooth label works single parm value. default behaviour remains unchanged however; parm NULL smooths evaluated returned confidence intervals. data_class() longer exported; ever intended internal function.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-5-0","dir":"Changelog","previous_headings":"","what":"Bug Fixes","title":"gratia 0.5.0","text":"confint.gam() failing tensor product smooth due matching issues. Reported @tamas-ferenci #88 also fixes #80 related issue selecting specific smooth. vdiffr package now used conditionally package tests. Reported Brian Ripley #93","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-041","dir":"Changelog","previous_headings":"","what":"gratia 0.4.1","title":"gratia 0.4.1","text":"CRAN release: 2020-05-30","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-4-1","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.4.1","text":"draw.gam() scales = \"fixed\" now applies terms can plotted, including 2d smooths. Reported @StefanoMezzini #73","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-4-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.4.1","text":"dplyr::combine() deprecated. Switch vctrs::vec_c(). draw.gam() scales = \"fixed\" wasn’t using fixed scales 2d smooths model. Reported @StefanoMezzini #73","code":""},{"path":[]},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-4-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.4.0","text":"draw.gam() can include partial residuals drawing univariate smooths. Use residuals = TRUE add partial residuals univariate smooth drawn. feature available smooths one variable, smooths, factor-smooth interactions (bs = \"fs\"). coverage credible confidence intervals drawn draw.gam() can specified via argument ci_level. default arbitrarily 0.95 reason (rough) compatibility plot.gam(). change effect making intervals slightly narrower previous versions gratia; intervals drawn ± 2 × standard error. default intervals now drawn ± ~1.96 × standard error. New function difference_smooths() computing differences factor smooth interactions. Methods available gam(), bam(), gamm() gamm4::gamm4(). Also draw() method, can handle differences 1D 2D smooths currently (handling 3D 4D smooths planned). New functions add_fitted() add_residuals() add fitted values (expectations) model residuals existing data frame. Currently methods available objects fitted gam() bam(). data_sim() tidy reimplementation mgcv::gamSim() added ability use sampling distributions Gaussian models implemented. Currently Gaussian, Poisson, Bernoulli sampling distributions available. smooth_samples() can handle continuous variable smooths varying coefficient models. link() inv_link() now work families available mgcv, including location, scale, shape families, specialised families described ?mgcv::family.mgcv. evaluate_smooth(), data_slice(), family(), link(), inv_link() methods models fitted using gamm4() gamm4 package. data_slice() can generate data 1-d slice (single variable varying). colour points, reference lines, simulation band appraise() can now specified via arguments point_col, point_alpha, ci_col ci_alpha line_col passed qq_plot(), observed_fitted_plot(), residuals_linpred_plot(), residuals_hist_plot(), also now take new arguments applicable. Added utility functions is_factor_term() term_variables() working models. is_factor_term() identifies named term factor using information terms() object fitted model. term_variables() returns character vector variable names involved model term. strictly working parametric terms models. appraise() now works models fitted glm() lm(), underlying functions calls, especially qq_plot. appraise() also works models fitted family gaulss(). location scale models models fitted extended family functions supported upcoming releases.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"user-visible-changes-0-4-0","dir":"Changelog","previous_headings":"","what":"User visible changes","title":"gratia 0.4.0","text":"datagen() now internal function longer exported. Use data_slice() instead. evaluate_parametric_term() now much stricter can evaluate main effect terms, .e. whose order, stored terms object model 1.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-4-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.4.0","text":"draw() method derivatives() getting x-axis label factor smooths correctly, instead using NA second subsequent levels factor. datagen() method class \"gam\" couldn’t possibly worked anything simplest models fail even simple factor smooths. issues fixed, behaviour datagen() changed, function now intended use users. Fixed issue models terms form factor1:factor2 incorrectly identified numeric parametric terms. #68","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-031","dir":"Changelog","previous_headings":"","what":"gratia 0.3.1","title":"gratia 0.3.1","text":"CRAN release: 2020-03-29","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-3-1","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.3.1","text":"New functions link() inv_link() access link function inverse fitted models family functions. Methods classes: \"glm\", \"gam\", \"bam\", \"gamm\" currently. #58 Adds explicit family() methods objects classes \"gam\", \"bam\", \"gamm\". derivatives() now handles non-numeric creating shifted data finite differences. Fixes problem stringsAsFactors = FALSE default R-devel. #64","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-3-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.3.1","text":"Updated gratia work tibble versions >= 3.0","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"gratia-030","dir":"Changelog","previous_headings":"","what":"gratia 0.3.0","title":"gratia 0.3.0","text":"CRAN release: 2020-01-19","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"new-features-0-3-0","dir":"Changelog","previous_headings":"","what":"New features","title":"gratia 0.3.0","text":"gratia now uses mvnfast package random draws multivariate normal distribution (mvnfast::rmvn()). Contributed Henrik Singmann #28 New function basis() generating tidy representations basis expansions mgcv-like definition smooth, e.g. s(), te(), ti(), t2(). basic smooth types also simple draw() method plotting basis. basis() simple wrapper around mgcv::smoothCon() post processing basis model matrix tidy format. #42 New function smooth_samples() draw samples entire smooth functions posterior distribution. Also draw() method plotting posterior samples.","code":""},{"path":"https://gavinsimpson.github.io/gratia/news/index.html","id":"bug-fixes-0-3-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"gratia 0.3.0","text":"draw.gam() produce empty plots panels parametric terms 2 parametric terms model. Reported @sklayn #39. derivatives() now works factor smooths, including ordered factor smooths. function also now works correctly complex models multiple covariates/smooths. #47 derivatives() also now handles 'fs' smooths. Reported @tomand-uio #57. evaluate_parametric_term() hence draw.gam() fail ziplss() model ) gratia didn’t handle parametric terms models multiple linear predictors correctly, ii) gratia didn’t convert naming convention mgcv terms higher linear predictors. Reported @pboesu #45","code":""}]

;4^IDrvs(r2{8FUWs`upotb`6VJAni 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 z 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 diff --git a/pkgdown.yml b/pkgdown.yml index cee155fa..9d2f1a13 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -6,7 +6,7 @@ articles: data-slices: data-slices.html gratia: gratia.html articles/posterior-simulation: posterior-simulation.html -last_built: 2024-11-25T14:17Z +last_built: 2024-11-25T14:28Z urls: reference: https://gavinsimpson.github.io/gratia/reference article: https://gavinsimpson.github.io/gratia/articles diff --git a/reference/draw.smooth_samples-2.png b/reference/draw.smooth_samples-2.png index 79c76f9f449bd17fb5b1c28f6e36b618dc7e9e88..957c1e62ea861fc7de80943058ed728daf8e4442 100644 GIT binary patch literal 177624 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 literal 170409 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