rgammgcvrandom-effectsmultilevel-analysis

Generalized Additive Mixed Model (GAMM) in R mgcv Package Formula Implementation for Grouping Variable


I am attempting to use mgcv to model a non-linear multilevel model with Time as the primary independent variable + a level 2 covariate (Xc). Because these data are within-person, I would like the model to reflect the within-person responses at level 1 (Person_ID). The problem is that I cannot make sense of the mgcv package documentation inasmuch as I do not know how to code for the group (see random=~1|Person_ID in my code, which is wrong).

Here are the details, with the data and code following: Dependent variable = DV, Time variable = Time, Level 2 covariate = Xc, Group = Person_ID.

Sample data and code:

#Import data.
df2 <- structure(list(Person_ID = c(100003L, 100003L, 100003L, 100006L, 
                                    100006L, 100006L, 100006L, 100006L, 100016L, 100027L, 100027L, 
                                    100027L, 100027L, 100031L, 100031L, 100031L, 100032L, 100032L, 
                                    100032L, 100033L, 100033L, 100033L, 100033L, 100033L, 100033L, 
                                    100052L, 100052L, 100052L, 100052L, 100052L, 100052L, 100060L, 
                                    100060L, 100060L, 100078L, 100078L, 100078L, 100078L, 100078L, 
                                    100078L, 100078L, 100079L, 100079L, 100079L, 100079L, 100079L, 
                                    100079L, 100088L, 100088L, 100088L, 100088L, 100099L, 100099L, 
                                    100099L, 100099L, 100100L, 100100L, 100100L, 100100L, 100100L, 
                                    100100L, 100100L, 100100L, 100106L, 100106L, 100106L, 100122L, 
                                    100129L, 100129L, 100138L, 100138L, 100140L, 100140L, 100140L, 
                                    100140L, 100140L, 100142L, 100142L, 100147L, 100147L, 100147L, 
                                    100159L, 100159L, 100166L, 100166L, 100166L, 100166L, 100166L, 
                                    100167L, 100167L, 100167L, 100167L, 100185L, 100185L, 100185L, 
                                    100187L, 100187L, 100187L, 100187L, 100187L, 100187L, 100187L, 
                                    100187L, 100197L, 100207L, 100207L, 100207L, 100207L, 100207L, 
                                    100208L, 100208L, 100208L, 100208L, 100208L, 100247L, 100250L, 
                                    100250L, 100250L, 100270L, 100270L, 100270L, 100270L, 100270L, 
                                    100270L, 100270L, 100271L, 100271L, 100271L, 100271L, 100271L, 
                                    100271L, 100271L, 100271L, 100271L, 100271L, 100272L, 100272L, 
                                    100272L, 100273L, 1000034L, 1000034L, 1000103L, 1000103L, 1000136L, 
                                    1000136L, 1000143L, 1000166L, 1000166L, 1000196L, 1000196L, 1000215L, 
                                    1000215L, 1000226L, 1000226L, 1000255L, 1000255L, 1000279L, 1000279L, 
                                    1000281L, 1000281L, 1000282L, 1000320L, 1000329L, 1000329L, 1000383L, 
                                    1000383L, 1000401L, 1000411L, 1000411L, 1000488L, 1000488L, 1000496L, 
                                    1000535L, 1000535L, 1000632L, 1000632L, 1000685L, 1000685L, 1000732L, 
                                    1000735L, 1000735L, 1000736L, 1000736L, 1000741L, 1000758L, 1000821L, 
                                    1000825L, 1000838L, 1000838L, 1000870L, 1000870L, 1000880L, 1000882L, 
                                    1000882L, 1000945L, 1000993L, 1000993L, 1001010L, 1001036L, 1001036L
), Time = c(5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 5L, 1L, 2L, 3L, 4L, 
            4L, 5L, 6L, 1L, 2L, 3L, 3L, 4L, 5L, 6L, 7L, 8L, 5L, 6L, 7L, 8L, 
            9L, 10L, 5L, 6L, 7L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 5L, 6L, 7L, 
            8L, 9L, 10L, 5L, 6L, 7L, 8L, 5L, 6L, 7L, 8L, 4L, 5L, 6L, 7L, 
            8L, 9L, 10L, 11L, 3L, 4L, 5L, 5L, 5L, 6L, 4L, 5L, 5L, 6L, 7L, 
            8L, 9L, 5L, 6L, 5L, 6L, 7L, 1L, 2L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
            3L, 4L, 4L, 5L, 6L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 5L, 3L, 
            4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 4L, 1L, 2L, 3L, 4L, 5L, 6L, 
            7L, 8L, 9L, 10L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
            4L, 5L, 6L, 3L, 4L, 5L, 4L, 5L, 4L, 5L, 4L, 4L, 5L, 4L, 5L, 2L, 
            3L, 4L, 5L, 4L, 5L, 2L, 3L, 2L, 3L, 3L, 4L, 4L, 5L, 4L, 5L, 4L, 
            4L, 5L, 3L, 4L, 3L, 4L, 5L, 4L, 5L, 4L, 5L, 4L, 2L, 3L, 4L, 5L, 
            3L, 4L, 2L, 3L, 4L, 5L, 4L, 5L, 4L, 3L, 4L, 4L, 4L, 5L, 2L, 4L, 
            5L), Xc = c(4.33333333333333, 4.33333333333333, 5.16666666666667, 
                        4.66666666666667, 4.66666666666667, 4.33333333333333, 4.33333333333333, 
                        4.33333333333333, 3.5, 4.5, 4.5, 4.5, 4.5, 4.33333333333333, 
                        4.33333333333333, 4.33333333333333, 5, 5, 5, 4.33333333333333, 
                        4.33333333333333, 4.33333333333333, 4.33333333333333, 3.5, 3.5, 
                        5.16666666666667, 5.16666666666667, 5.16666666666667, 5.16666666666667, 
                        5.33333333333333, 5.33333333333333, 6, 6, 6, 2.5, 2.5, 2.5, 2.5, 
                        2.83333333333333, 2.83333333333333, 2.83333333333333, 4, 4, 4, 
                        4, 5.16666666666667, 5.16666666666667, 4.33333333333333, 4.33333333333333, 
                        4.33333333333333, 4.33333333333333, 3.5, 3.5, 3.5, 3.5, 5.33333333333333, 
                        5.33333333333333, 5.33333333333333, 5.33333333333333, 6.66666666666667, 
                        6.66666666666667, 6.66666666666667, 6.66666666666667, 5.33333333333333, 
                        5.33333333333333, 5.33333333333333, 4, 4, 4, 7, 7, 3.83333333333333, 
                        3.83333333333333, 3.83333333333333, 3.83333333333333, 4.16666666666667, 
                        4.16666666666667, 4.16666666666667, 3.66666666666667, 3.66666666666667, 
                        3.66666666666667, 4.5, 4.5, 5.33333333333333, 5.33333333333333, 
                        5.33333333333333, 5.16666666666667, 5.16666666666667, 4.16666666666667, 
                        4.16666666666667, 4.16666666666667, 4.16666666666667, 4, 4, 4, 
                        4.66666666666667, 4.66666666666667, 4.66666666666667, 4.66666666666667, 
                        4.66666666666667, 4.66666666666667, 4.66666666666667, 4.66666666666667, 
                        5.33333333333333, 4.33333333333333, 4.33333333333333, 4.33333333333333, 
                        5.5, 5.5, 4.33333333333333, 4.33333333333333, 4.33333333333333, 
                        4, 4, 5.33333333333333, 6, 6, 6, 2.83333333333333, 2.83333333333333, 
                        2.83333333333333, 2.83333333333333, 1.33333333333333, 1.33333333333333, 
                        1.33333333333333, 2.83333333333333, 2.83333333333333, 2.83333333333333, 
                        2.83333333333333, 4.16666666666667, 4.16666666666667, 4.16666666666667, 
                        4.16666666666667, 4.66666666666667, 4.66666666666667, 3.83333333333333, 
                        3.83333333333333, 3.83333333333333, 5.83333333333333, 7, 7, 3.33333333333333, 
                        3.33333333333333, 4.16666666666667, 4.16666666666667, 5.66666666666667, 
                        4.5, 4.5, 2.83333333333333, 2.83333333333333, 4, 4, 4.33333333333333, 
                        4.33333333333333, 3.16666666666667, 3.16666666666667, 4.5, 4.5, 
                        4.5, 4.5, 5.33333333333333, 3.83333333333333, 6.83333333333333, 
                        6.83333333333333, 4.66666666666667, 4.66666666666667, 5.33333333333333, 
                        4.16666666666667, 4.16666666666667, 4.16666666666667, 4.16666666666667, 
                        6.33333333333333, 4.83333333333333, 4.83333333333333, 5.66666666666667, 
                        5.66666666666667, 4.66666666666667, 4.66666666666667, 3.83333333333333, 
                        5.33333333333333, 5.33333333333333, 6.66666666666667, 6.66666666666667, 
                        5.66666666666667, 3.83333333333333, 4.83333333333333, 5.66666666666667, 
                        4.5, 4.5, 4, 4, 5.33333333333333, 3.66666666666667, 3.66666666666667, 
                        4.5, 3.5, 3.5, 2.5, 3.5, 3.5), DV = c(4, 2, 2.25, 3, NA, 4.25, 
                                                              NA, NA, 3.25, 1.5, 1.5, 1, 2.5, 4.75, 2.5, 2, 2, 2.25, 3.75, 
                                                              2.75, 2.75, 2.5, 3.25, 3.25, 2.5, 2.5, 2, 3.75, 2.25, 2.25, 2, 
                                                              1.75, 6, NA, 5, 3.25, 2.5, 3, 4.5, 5, 4.25, 2.5, 2.75, 3, 3, 
                                                              2.5, 3, 3.5, 4, 3.75, 4, 4, 3.5, NA, NA, 4.75, 4.75, 5, 4, 6, 
                                                              6.75, 5.5, 6, 3.25, 3.25, 4, NA, 2.5, 2.5, 1.5, 3.5, 4.25, 4, 
                                                              3.5, 4, 3, 3.75, 3.75, 3.25, 4.25, 2, 3.5, 3, 4, NA, 4.5, 5.25, 
                                                              5.25, 3.5, 4, 3.75, 5, 3, NA, 1.75, 3, NA, 3.5, 3, 3.25, 3.5, 
                                                              3, 2.5, 3, 4, NA, 3, 3.75, 3, 2, 3, 4, 2.25, 2.75, 4.5, 4, 5.75, 
                                                              6.25, 2.5, 2.25, 2.5, 3.5, 3.5, 5, 5.75, 4, 4.25, 3, 4.25, 5, 
                                                              5.5, 5.75, 5, 4.5, 5, 2, 2, 2.75, 2.5, 4, 3.25, 4.5, 2.25, 4.25, 
                                                              5.25, 3, 3.75, 4.25, 3.5, 4, 2, 3, 5.25, 2.75, 2.75, 4.25, 3.25, 
                                                              5.5, 3.75, 3.25, 5.75, 4.25, 3.75, NA, 4, 3.75, 3.25, 4.75, 4.5, 
                                                              5.25, NA, 1.5, 4.5, 4.25, 3.75, 4.5, 4.25, NA, 3, 2.25, 3.5, 
                                                              2, 4.25, 3, 4.5, 2.25, 4.5, 2.75, 5, 6.25, 5.25, 3.75, 2.75, 
                                                              3.75, 2.5, 5, 4.25, 5.75, 2.5, NA)), row.names = c(3L, 4L, 5L, 
                                                                                                                 11L, 10L, 9L, 8L, 12L, 34L, 91L, 90L, 89L, 88L, 107L, 106L, 108L, 
                                                                                                                 112L, 111L, 110L, 118L, 117L, 116L, 119L, 120L, 121L, 176L, 177L, 
                                                                                                                 178L, 179L, 180L, 181L, 203L, 204L, 205L, 257L, 258L, 259L, 260L, 
                                                                                                                 261L, 262L, 263L, 268L, 269L, 270L, 271L, 272L, 273L, 285L, 286L, 
                                                                                                                 287L, 288L, 300L, 301L, 302L, 303L, 307L, 306L, 308L, 309L, 310L, 
                                                                                                                 311L, 312L, 313L, 324L, 323L, 322L, 333L, 335L, 336L, 339L, 338L, 
                                                                                                                 340L, 341L, 342L, 343L, 344L, 345L, 346L, 351L, 352L, 353L, 370L, 
                                                                                                                 369L, 375L, 374L, 373L, 372L, 371L, 379L, 378L, 377L, 376L, 382L, 
                                                                                                                 381L, 383L, 384L, 385L, 386L, 387L, 388L, 389L, 390L, 391L, 396L, 
                                                                                                                 412L, 411L, 410L, 413L, 414L, 419L, 418L, 417L, 416L, 415L, 439L, 
                                                                                                                 448L, 447L, 446L, 458L, 457L, 459L, 460L, 461L, 462L, 463L, 464L, 
                                                                                                                 465L, 466L, 467L, 468L, 469L, 470L, 471L, 472L, 473L, 475L, 474L, 
                                                                                                                 476L, 477L, 7L, 6L, 24L, 23L, 27L, 26L, 33L, 36L, 35L, 47L, 46L, 
                                                                                                                 62L, 61L, 64L, 63L, 87L, 86L, 95L, 94L, 97L, 96L, 98L, 113L, 
                                                                                                                 115L, 114L, 141L, 140L, 143L, 145L, 144L, 172L, 171L, 173L, 187L, 
                                                                                                                 186L, 217L, 216L, 228L, 227L, 250L, 252L, 251L, 254L, 253L, 255L, 
                                                                                                                 256L, 279L, 280L, 282L, 281L, 284L, 283L, 289L, 291L, 290L, 297L, 
                                                                                                                 305L, 304L, 314L, 319L, 318L), class = "data.frame")
#Attempt to model.
Model1 <- gamm(DV~s(Time)+s(Xc), data=df2, random=~1|Person_ID) #Note the attempt to group by Person_ID
summary(Model1)
plot(Model1, shift=coef(Model1)[1], pages=4, all.terms=T, rug=F, residuals=F, se=T, shade=T, seWithMean=T)

Solution

  • As stated in the documentation for the random argument in gamm:

    The (optional) random effects structure as specified in a call to lme: only the list form is allowed
    

    You have to make your Person_ID into a factor:

    df2$Person_ID <- as.factor(df2$Person_ID)
    

    and then use a list in your argument call:

    Model1 <- gamm(DV~s(Time)+s(Xc), data=df2, random=list(Person_ID=~1)) 
    

    You could also use gam to model simple random effects like this:

    mod <- gam(DV ~ s(Time) + s(Xc) + s(Person_ID, bs = "re"), data=df2)
    

    This will assume a normal prior for Person_ID with common variance.