class: center, middle, title-slide, inverse layout: false <audio controls> <source src="media/si_monumentum_requires_circumspice.mp3" type="audio/mpeg"> <source src="media/si_monumentum_requires_circumspice.ogg" type="audio/ogg"/> </audio> # Growth models ## Professor Andy Field <div> <img style="vertical-align:middle; width:30px; height:30px" src="media/twitter_60.png"> <span style="line-height:40px;">@profandyfield</span> </div> <div> <img style="vertical-align:middle; width:60px" src="media/youtube.png"> <span style="line-height:40px;">www.youtube.com/user/ProfAndyField/</span> </div> <div> <img style="vertical-align:middle; width:30px; height:30px" src="media/ds_com_fav.png"> <span style="line-height:40px;">www.discoveringstatistics.com</span> </div> <div> <img style="vertical-align:middle; width:30px; height:30px" src="media/milton_grey_fav.png"> <span style="line-height:40px;">www.milton-the-cat.rocks</span> </div> <div> <img style="vertical-align:middle; width:30px; height:30px" src="media/discovr_fav.png"> <span style="line-height:40px;">www.discovr.rocks</span> </div> ??? Music: Deathspell Omega: Si Monumentum Requires, Circumspice (if you seek (his) monument, look around —epitaph of Sir Christopher Wren in St. Paul's, London, of which he was architect) (epilogue subtitle) h or ?: Toggle the help window j: Jump to next slide k: Jump to previous slide b: Toggle blackout mode m: Toggle mirrored mode. p: Toggle PresenterMode f: Toggle Fullscreen t: Reset presentation timer <number> + <Return>: Jump to slide <number> c: Create a clone presentation on a new window --- class: center  ??? We've seen this map of the process of fitting models before --- class: center  ??? Today we focus back on the model itself to look at the form of the model we're fitting. The faded stuff still applies though - we'll look at bias, robust models, and of course samples and estimation and so on. But they are the same as for other models, what is different is the form of the model we're fitting. --- # Learning outcomes * Describe what a growth model is * Describe what an autoregressive covariance structure is * Distinguish fixed from random effects * Be able to interpret a growth model --- # Growth models * Growth models look at the rate of change of a variable over time + Depression over 8 weeks of treatment + Back pain over 10 weeks of physiotherapy + Profits over months of the year + Radioactive decay --- # Types of growth curve .center[ <!-- --> ] --- # A rehabilitative example * **id**: Zombie id * **intervention**: Was the participant assigned to waiting list (0) or gene therapy (1)? * **time**: When was outcome measured: baseline, 1, 6 and 12 month follow up * **time_num**: Time since treatment (expressed numerically): 0, 1, 6, 12 * **resemblance**: Resemblance of their face to their pre-zombie state (0% to 100%). --- background-image: none # The data in <svg style="height: 1em; top:.04em; position: relative; fill: #136CB9;" viewBox="0 0 581 512"><path d="M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"/></svg>
--- class: center  --- # Fixed slopes .center[ <!-- --> ] --- # Random slopes .center[ <!-- --> ] --- # Covariance structures The model has an error matrix .center[.eq_large[.ong[ $$ \Phi = `\begin{pmatrix} \text{var}(e_{t1}) & \text{cov}(e_{t1}, e_{t2}) & \dots & \text{cov}(e_{t1}, e_{tn})\\ \text{cov}(e_{t2}, e_{t1}) & \text{var}(e_{t2}) & \cdots & \text{cov}(e_{t2}, e_{tn})\\ \vdots & \vdots & \ddots & \vdots\\ \text{cov}(e_{tn}, e_{t1}) & \text{cov}(e_{tn}, e_{t2}) & \cdots & \text{var}(e_{tn}) \end{pmatrix}` $$ ]]] -- </br> .center[.eq_large[.ong[ $$ \Phi_\text{Default} = `\begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}` $$ ]]] ??? By default R will assume that errors (remember, these are what’s left over after any effects have been taken out) at different timepoints are uncorrelated. In growth models, this assumption may not be realistic. There are different covariance structures you can model, in growth models you typically would try out a first-order autoregressive covariance structure (AR(1). --- # Covariance structures .center[.eq_large[.ong[ $$ \Phi_\text{Compound symmetry} = `\begin{pmatrix} 1 & \rho & \rho & \rho\\ \rho & 1 & \rho & \rho\\ \rho & \rho & 1 & \rho\\ \rho & \rho & \rho & 1 \end{pmatrix}` $$ ]]] -- </br> .center[.eq_large[.ong[ $$ \Phi_\text{AR(1)} = `\begin{pmatrix} 1 & \rho & \rho^2 & \rho^3\\ \rho & 1 & \rho & \rho^2\\ \rho^2 & \rho & 1 & \rho\\ \rho^3 & \rho^2 & \rho & 1 \end{pmatrix}` $$ ]]] --- # The RM-ANOVA approach * Time is treated as a factor (4 levels) * Restrictions + Effects of time constant across individuals + Residuals between time points correlated to the same degree (compound symmetry) * You end up with a **mixed design** + Predictor 1 (repeated-measures/within-participant) + **time** (baseline, 1 month, 6 months, 12 months) + Predictor 2 (independent measures/between group) + **intervention** (wait list, gene therapy) + Outcome: **resemblance** scores (0-100) --- # RM-ANOVA: how are we treating time? .center[ <!-- --> ] --- # Traditional approach (RM-ANOVA) using `afex` ```r rehab_afx <- afex::aov_4(resemblance ~ time*intervention + (time|id), data = rehab_tib) rehab_afx ``` <table> <thead> <tr> <th style="text-align:left;"> Effect </th> <th style="text-align:center;"> num Df </th> <th style="text-align:center;"> den Df </th> <th style="text-align:center;"> MSE </th> <th style="text-align:center;"> F </th> <th style="text-align:center;"> ges </th> <th style="text-align:right;"> Pr(>F) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> intervention </td> <td style="text-align:center;"> 1.0 </td> <td style="text-align:center;"> 139.00 </td> <td style="text-align:center;"> 366.66 </td> <td style="text-align:center;"> 3.01 </td> <td style="text-align:center;"> 0.02 </td> <td style="text-align:right;"> .085 </td> </tr> <tr> <td style="text-align:left;"> time </td> <td style="text-align:center;"> 2.4 </td> <td style="text-align:center;"> 333.35 </td> <td style="text-align:center;"> 49.85 </td> <td style="text-align:center;"> 4.67 </td> <td style="text-align:center;"> 0.01 </td> <td style="text-align:right;"> .006 </td> </tr> <tr> <td style="text-align:left;"> intervention:time </td> <td style="text-align:center;"> 2.4 </td> <td style="text-align:center;"> 333.35 </td> <td style="text-align:center;"> 49.85 </td> <td style="text-align:center;"> 24.35 </td> <td style="text-align:center;"> 0.04 </td> <td style="text-align:right;"> <.001 </td> </tr> </tbody> </table> ### Basically a wrapper for ```r aov(resemblance ~ time*intervention + Error(id), data = rehab_growth_tib) |> summary() ``` --- # Multilevel approach (restricted) ```r rehab_cs <- nlme::lme(resemblance ~ time*intervention, random = ~ 1|id, data = rehab_tib, method = "ML", correlation = corCompSymm (form = ~ time|id) ) anova(rehab_cs) ``` <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:left;"> numDF </th> <th style="text-align:center;"> denDF </th> <th style="text-align:center;"> F-value </th> <th style="text-align:center;"> p-value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:left;"> 1 </td> <td style="text-align:center;"> 417 </td> <td style="text-align:center;"> 3379.21 </td> <td style="text-align:center;"> 0.00 </td> </tr> <tr> <td style="text-align:left;"> time </td> <td style="text-align:left;"> 3 </td> <td style="text-align:center;"> 417 </td> <td style="text-align:center;"> 5.58 </td> <td style="text-align:center;"> 0.00 </td> </tr> <tr> <td style="text-align:left;"> intervention </td> <td style="text-align:left;"> 1 </td> <td style="text-align:center;"> 139 </td> <td style="text-align:center;"> 3.01 </td> <td style="text-align:center;"> 0.08 </td> </tr> <tr> <td style="text-align:left;"> time:intervention </td> <td style="text-align:left;"> 3 </td> <td style="text-align:center;"> 417 </td> <td style="text-align:center;"> 24.35 </td> <td style="text-align:center;"> 0.00 </td> </tr> </tbody> </table> --- # Limitations of RM-ANOVA for mixed designs * Time treated unrealistically + Doesn't model unequal timepoints + Treats time as categorical not continuous * The effect of time treated as the same across individuals + Can’t model variability in individual change over time (i.e. random slopes) * No flexibility in covariance structure * Can’t handle missing data * Can’t model non-linear change * (But probably better in small samples) --- background-image: none background-color: #000000 class: no-scribble <video width="100%" height="100%" controls id="my_video"> <source src="media/milton_meditation_distraction_subtitles.mp4" type="video/mp4"> </video> --- # The multilevel approach .center[.eq_lrge[.ong[ $$ `\begin{aligned} \text{resemblance}_{ij} & = \hat{\pi}_{0i} + \hat{\pi}_{1i}\text{time}_{ij} + e_{ij}\\ \hat{\pi}_{0i} &= \hat{\gamma}_{00} + \hat{\gamma}_{01}\text{intervention}_i + \hat{\zeta}_{0i} \\ \hat{\pi}_{1i} &= \hat{\gamma}_{10} + \hat{\gamma}_{11}\text{intervention}_i + \hat{\zeta}_{1i} \\ \end{aligned}` $$ ]]] -- `\(i = \text{individual}, \quad j = \text{occasion}\)` -- * `\(\hat{\gamma}_{00}\)` = average baseline resemblance when intervention = 0 (wait list) * `\(\hat{\gamma}_{10}\)` = average rate of change in resemblance when intervention = 0 (wait list) * `\(\hat{\gamma}_{01}\)` = baseline difference between wait list and gene therapy * `\(\hat{\gamma}_{11}\)` = difference in rate of change in resemblance between wait list and gene therapy groups * `\(\hat{\zeta}_{0i}\)` = deviation of individual’s baseline resemblance from group average * `\(\hat{\zeta}_{1i}\)` = deviation of individual’s rate of change in resemblance from group average * `\(e_{ij}\)` = portion individual’s resemblance score that is unpredicted at time *j* --- # The same model (in composite form) .center[.eq_med[.ong[ $$ `\begin{aligned} \text{resemblance}_{ij} &= \big[\hat{\gamma}_{00} + \hat{\gamma}_{10}\text{time}_{ij} + \hat{\gamma}_{01}\text{intervention}_i + \hat{\gamma}_{11}\text{intervention}_i \times \text{time}_{ij} \big] + \\ &\quad \ \big[\hat{\zeta}_{0i} + \hat{\zeta}_{1i}\text{time}_{ij} + e_{ij} \big] \end{aligned}` $$ ]]] -- * `\(\hat{\gamma}_{00}\)` = average baseline resemblance when intervention = 0 (wait list) * `\(\hat{\gamma}_{10}\)` = average rate of change in resemblance when intervention = 0 (wait list) * `\(\hat{\gamma}_{01}\)` = baseline difference between wait list and gene therapy * `\(\hat{\gamma}_{11}\)` = difference in rate of change in resemblance between wait list and gene therapy groups * `\(\hat{\zeta}_{0i}\)` = deviation of individual’s baseline resemblance from group average * `\(\hat{\zeta}_{1i}\)` = deviation of individual’s rate of change in resemblance from group average * `\(e_{ij}\)` = portion individual’s resemblance score that is unpredicted at time *j* --- # Advantages of multilevel framework * Time treated realistically + You can model unevenly spaced or discontinuous measurements + Time can be treated continuously * Model variability in individual change over time (i.e. random slopes) * Flexibility in covariance structure + Fit AR(1) covariance structure * Can handle missing data * Can model non-linear change * (But may not converge in small samples) --- # First-order growth model .center[ <!-- --> ] --- # First-order growth model .center[ <!-- --> ] --- # First-order model ```r rehab_rs <- nlme::lme(resemblance ~ time_num*intervention, random = ~ time_num|id, data = rehab_tib, method = "ML" ) ``` -- ## Fixed effects ```r anova(rehab_rs) ``` <table> <thead> <tr> <th style="text-align:left;"> Effect </th> <th style="text-align:center;"> numDF </th> <th style="text-align:center;"> denDF </th> <th style="text-align:right;"> F-value </th> <th style="text-align:right;"> p-value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 421 </td> <td style="text-align:right;"> 3466.43 </td> <td style="text-align:right;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> time_num </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 421 </td> <td style="text-align:right;"> 5.73 </td> <td style="text-align:right;"> .017 </td> </tr> <tr> <td style="text-align:left;"> intervention </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 139 </td> <td style="text-align:right;"> 0.22 </td> <td style="text-align:right;"> .640 </td> </tr> <tr> <td style="text-align:left;"> time_num:intervention </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 421 </td> <td style="text-align:right;"> 50.33 </td> <td style="text-align:right;"> <.001 </td> </tr> </tbody> </table> --- ## Parameter estimates ### Fixed effects ```r broom.mixed::tidy(rehab_rs, effects = "fixed") ``` <table> <thead> <tr> <th style="text-align:left;"> effect </th> <th style="text-align:center;"> term </th> <th style="text-align:center;"> estimate </th> <th style="text-align:center;"> std.error </th> <th style="text-align:right;"> df </th> <th style="text-align:right;"> statistic </th> <th style="text-align:left;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> (Intercept) </td> <td style="text-align:center;"> 46.96 </td> <td style="text-align:center;"> 1.17 </td> <td style="text-align:right;"> 421 </td> <td style="text-align:right;"> 40.12 </td> <td style="text-align:left;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> time_num </td> <td style="text-align:center;"> -0.33 </td> <td style="text-align:center;"> 0.09 </td> <td style="text-align:right;"> 421 </td> <td style="text-align:right;"> -3.49 </td> <td style="text-align:left;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> interventionGene therapy </td> <td style="text-align:center;"> -1.58 </td> <td style="text-align:center;"> 1.62 </td> <td style="text-align:right;"> 139 </td> <td style="text-align:right;"> -0.98 </td> <td style="text-align:left;"> .330 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> time_num:interventionGene therapy </td> <td style="text-align:center;"> 0.92 </td> <td style="text-align:center;"> 0.13 </td> <td style="text-align:right;"> 421 </td> <td style="text-align:right;"> 7.09 </td> <td style="text-align:left;"> <.001 </td> </tr> </tbody> </table> --- ## Interpreting the interaction ```r emmeans::emtrends(rehab_rs, spec = "intervention", var = "time_num") |> tibble::as_tibble() ``` <table> <thead> <tr> <th style="text-align:left;"> intervention </th> <th style="text-align:center;"> time_num.trend </th> <th style="text-align:left;"> SE </th> <th style="text-align:right;"> df </th> <th style="text-align:left;"> lower.CL </th> <th style="text-align:center;"> upper.CL </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Wait list </td> <td style="text-align:center;"> -0.329 </td> <td style="text-align:left;"> 0.094 </td> <td style="text-align:right;"> 421 </td> <td style="text-align:left;"> -0.514 </td> <td style="text-align:center;"> -0.144 </td> </tr> <tr> <td style="text-align:left;"> Gene therapy </td> <td style="text-align:center;"> 0.594 </td> <td style="text-align:left;"> 0.090 </td> <td style="text-align:right;"> 421 </td> <td style="text-align:left;"> 0.418 </td> <td style="text-align:center;"> 0.770 </td> </tr> </tbody> </table> <br/> -- .infobox[ * **Wait list group**: for every month that passes resemblance scores change by -0.33, that is they decrease: the zombies look *less* like their pre-zombified state. **They look worse**. * **Gene therapy group**: for every month that passes resemblance scores change by 0.59, that is they increase: the zombies look *more* like their pre-zombified state. **They look better**. ] .ong[ $$ `\begin{aligned} \hat{\gamma}_\text{time (gene therapy)} - \hat{\gamma}_\text{time (wait list)} &= 0.59 - (-0.33) \\ &= 0.92 \end{aligned}` $$ ] --- ## Parameter estimates ### Random effects ```r broom.mixed::tidy(rehab_rs, effects = "ran_pars") ``` <table> <thead> <tr> <th style="text-align:left;"> effect </th> <th style="text-align:center;"> group </th> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> sd_(Intercept) </td> <td style="text-align:right;"> 8.612 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> cor_time_num.(Intercept) </td> <td style="text-align:right;"> 0.074 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> sd_time_num </td> <td style="text-align:right;"> 0.464 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> Residual </td> <td style="text-align:left;"> sd_Observation </td> <td style="text-align:right;"> 5.837 </td> </tr> </tbody> </table> --- background-image: none background-color: #000000 class: no-scribble <video width="100%" height="100%" controls id="my_video"> <source src="media/milton_meditation_butthole_subtitles.mp4" type="video/mp4"> </video> --- # A second-order growth model .center[ <!-- --> ] --- # A second-order growth model .center[ <!-- --> ] --- # Second-order model * We add two fixed effects + Fixed effect of time<sup>2</sup> + `poly(time_num, 2)` + Fixed effect of the interaction between intervention and time<sup>2</sup> + `poly(time_num, 2):intervention` * We change the random effect + `random = ~poly(time_num, 2)|id` --- # Second-order model ```r rehab_so <- nlme::lme( * resemblance ~ poly(time_num, 2)*intervention, * random = ~poly(time_num, 2)|id, data = rehab_tib, method = "ML" ) ``` -- ## Fixed effects ```r anova(rehab_so) ``` <table> <thead> <tr> <th style="text-align:left;"> Effect </th> <th style="text-align:center;"> numDF </th> <th style="text-align:center;"> denDF </th> <th style="text-align:right;"> F-value </th> <th style="text-align:right;"> p-value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 419 </td> <td style="text-align:right;"> 3522.06 </td> <td style="text-align:right;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> poly(time_num, 2) </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 419 </td> <td style="text-align:right;"> 7.83 </td> <td style="text-align:right;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> intervention </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 139 </td> <td style="text-align:right;"> 0.07 </td> <td style="text-align:right;"> .785 </td> </tr> <tr> <td style="text-align:left;"> poly(time_num, 2):intervention </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 419 </td> <td style="text-align:right;"> 31.76 </td> <td style="text-align:right;"> <.001 </td> </tr> </tbody> </table> --- ## Parameter estimates ### Fixed effects ```r broom.mixed::tidy(rehab_so, effects = "fixed") ``` <table> <thead> <tr> <th style="text-align:left;"> effect </th> <th style="text-align:center;"> term </th> <th style="text-align:center;"> estimate </th> <th style="text-align:center;"> std.error </th> <th style="text-align:right;"> df </th> <th style="text-align:right;"> statistic </th> <th style="text-align:left;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> (Intercept) </td> <td style="text-align:center;"> 45.40 </td> <td style="text-align:center;"> 1.17 </td> <td style="text-align:right;"> 419 </td> <td style="text-align:right;"> 38.88 </td> <td style="text-align:left;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> poly(time_num, 2)1 </td> <td style="text-align:center;"> -37.19 </td> <td style="text-align:center;"> 10.68 </td> <td style="text-align:right;"> 419 </td> <td style="text-align:right;"> -3.48 </td> <td style="text-align:left;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> poly(time_num, 2)2 </td> <td style="text-align:center;"> -2.45 </td> <td style="text-align:center;"> 9.55 </td> <td style="text-align:right;"> 419 </td> <td style="text-align:right;"> -0.26 </td> <td style="text-align:left;"> .798 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> interventionGene therapy </td> <td style="text-align:center;"> 2.80 </td> <td style="text-align:center;"> 1.61 </td> <td style="text-align:right;"> 139 </td> <td style="text-align:right;"> 1.74 </td> <td style="text-align:left;"> .084 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> poly(time_num, 2)1:interventionGene therapy </td> <td style="text-align:center;"> 104.40 </td> <td style="text-align:center;"> 14.74 </td> <td style="text-align:right;"> 419 </td> <td style="text-align:right;"> 7.08 </td> <td style="text-align:left;"> <.001 </td> </tr> <tr> <td style="text-align:left;"> fixed </td> <td style="text-align:center;"> poly(time_num, 2)2:interventionGene therapy </td> <td style="text-align:center;"> -27.82 </td> <td style="text-align:center;"> 13.19 </td> <td style="text-align:right;"> 419 </td> <td style="text-align:right;"> -2.11 </td> <td style="text-align:left;"> .035 </td> </tr> </tbody> </table> --- ## Parameter estimates ### Random effects ```r broom.mixed::tidy(rehab_so, effects = "ran_pars") ``` <table> <thead> <tr> <th style="text-align:left;"> effect </th> <th style="text-align:center;"> group </th> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> sd_(Intercept) </td> <td style="text-align:right;"> 9.215 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> cor_poly(time_num, 2)1.(Intercept) </td> <td style="text-align:right;"> 0.242 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> cor_poly(time_num, 2)2.(Intercept) </td> <td style="text-align:right;"> -0.229 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> sd_poly(time_num, 2)1 </td> <td style="text-align:right;"> 67.003 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> cor_poly(time_num, 2)2.poly(time_num, 2)1 </td> <td style="text-align:right;"> 0.383 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> id </td> <td style="text-align:left;"> sd_poly(time_num, 2)2 </td> <td style="text-align:right;"> 54.585 </td> </tr> <tr> <td style="text-align:left;"> ran_pars </td> <td style="text-align:center;"> Residual </td> <td style="text-align:left;"> sd_Observation </td> <td style="text-align:right;"> 4.667 </td> </tr> </tbody> </table> --- # To sum up … * A common form of repeated-measures data comes from longitudinal studies * Growth models quantify change over time * Can factor in between-participant measures * Multilevel models + Treat observations as nested within entities + Allow you model individual differences in growth + Allow you to look at different covariance structures + Cope with missing data + Can model non-linear growth