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)
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.