Add materials
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,197 @@
|
||||
# hdrs-plots.R
|
||||
#
|
||||
# Example on growth curve models for Reisby et al. (1977)
|
||||
#
|
||||
# content: (1) Read data
|
||||
# (2) Linear analysis
|
||||
# (3) Fitting quadratic model
|
||||
# (3) Centering of variables
|
||||
# (4) Check random effects structure
|
||||
# (5) Check model assumptions
|
||||
#
|
||||
# input: resiby.txt
|
||||
# output: hdrs-ind_pred-randomslope.pdf
|
||||
# hdrs-ind_pred-quad.pdf
|
||||
# hdrs-caterpillar.pdf
|
||||
# hdrs_shrinkage_int-week.pdf
|
||||
# hdrs_shrinkage_int-weeksq.pdf
|
||||
# hdrs_shrinkage_week-weeksq.pdf
|
||||
#
|
||||
# last mod: 2026-04-20, NW
|
||||
|
||||
library("lme4")
|
||||
library("lattice")
|
||||
|
||||
#--------------- (1) Read data ------------------------------------------------
|
||||
|
||||
dat <- read.table("../data/reisby.txt", header = TRUE)
|
||||
dat$id <- factor(dat$id)
|
||||
dat$diag <- factor(dat$diag, levels = c("nonen", "endog"))
|
||||
dat <- na.omit(dat) # drop missing values
|
||||
|
||||
pdf("hdrs-box.pdf", height = 3.375, width = 3.375, pointsize = 10)
|
||||
|
||||
par(mai = c(.6, .6, .1, .1), mgp = c(2, .4, 0))
|
||||
boxplot(hamd ~ week, dat,
|
||||
col = "#3CB4DC",
|
||||
ylab = "HDRS score",
|
||||
xlab = "Time (week)")
|
||||
|
||||
dev.off()
|
||||
|
||||
#--------------- (2) Linear analysis ------------------------------------------
|
||||
|
||||
# random slope model
|
||||
lme2 <- lmer(hamd ~ week + (week | id), dat, REML = FALSE)
|
||||
|
||||
pdf("hdrs-ind_pred-randomslope.pdf", height = 6, width = 6)
|
||||
|
||||
xyplot(hamd + predict(lme2) ~ week | id, data = dat,
|
||||
type = c("p", "l", "g"),
|
||||
#pch = 16,
|
||||
ratio = "xy",
|
||||
col = c("#3CB4DC", "#FF6900"),
|
||||
distribute.type = TRUE,
|
||||
layout = c(11, 6),
|
||||
ylab = "HDRS score",
|
||||
xlab = "Time (week)")
|
||||
|
||||
dev.off()
|
||||
|
||||
#--------------- (3) Fitting quadratic model ----------------------------------
|
||||
|
||||
# model with quadratic time trend
|
||||
lme3 <- lmer(hamd ~ week + I(week^2) + (week + I(week^2) | id), dat,
|
||||
REML = FALSE)
|
||||
|
||||
pdf("hdrs-ind_pred-quad.pdf", height = 6, width = 6)
|
||||
|
||||
xyplot(hamd + predict(lme3) ~ week | id, data = dat,
|
||||
type = c("p", "l", "g"),
|
||||
#pch = 16,
|
||||
ratio = "xy",
|
||||
col = c("#3CB4DC", "#FF6900"),
|
||||
distribute.type = TRUE,
|
||||
layout = c(11, 6),
|
||||
ylab = "HDRS score",
|
||||
xlab = "Time (week)")
|
||||
|
||||
dev.off()
|
||||
|
||||
#--------------- (4) Check random effects structure ---------------
|
||||
|
||||
pdf("hdrs-caterpillar.pdf", height = 8, width = 20)
|
||||
|
||||
dotplot(ranef(lme3), col = "#3CB4DC",
|
||||
scales = list(x = list(relation = "free")))[[1]]
|
||||
|
||||
dev.off()
|
||||
|
||||
# Shrinkage plots
|
||||
|
||||
df <- coef(lmList(hamd ~ week_c + I(week_c^2) | id, dat))
|
||||
cc1 <- as.data.frame(coef(lme3reml)$id)
|
||||
names(cc1) <- c("A", "B", "C")
|
||||
|
||||
df <- cbind(df, cc1)
|
||||
ff <- fixef(lme3reml)
|
||||
|
||||
|
||||
pdf("hdrs_shrinkage_int-week.pdf", height = 6, width = 6, pointsize = 10)
|
||||
|
||||
with(df,
|
||||
xyplot(`(Intercept)` ~ week_c, aspect = 1,
|
||||
x1 = B, y1 = A,
|
||||
panel = function(x, y, x1, y1, subscripts, ...) {
|
||||
panel.grid(h = -1, v = -1)
|
||||
x1 <- x1[subscripts]
|
||||
y1 <- y1[subscripts]
|
||||
larrows(x, y, x1, y1, type = "closed", length = 0.1, fill = "black",
|
||||
angle = 15, ...)
|
||||
lpoints(x, y,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[2])
|
||||
lpoints(x1, y1,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[1])
|
||||
lpoints(ff[2], ff[1],
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[3])
|
||||
},
|
||||
xlab = "week_c",
|
||||
ylab = "(Intercept)",
|
||||
key = list(space = "top", columns = 3,
|
||||
text = list(c("Mixed model", "Within-subject", "Population")),
|
||||
points = list(col = trellis.par.get("superpose.symbol")$col[1:3],
|
||||
pch = 16))
|
||||
)
|
||||
)
|
||||
|
||||
dev.off()
|
||||
|
||||
|
||||
pdf("hdrs_shrinkage_int-weeksq.pdf", height = 6, width = 6, pointsize = 10)
|
||||
|
||||
with(df,
|
||||
xyplot(`(Intercept)` ~ `I(week_c^2)`, aspect = 1,
|
||||
x1 = C, y1 = A,
|
||||
panel = function(x, y, x1, y1, subscripts, ...) {
|
||||
panel.grid(h = -1, v = -1)
|
||||
x1 <- x1[subscripts]
|
||||
y1 <- y1[subscripts]
|
||||
larrows(x, y, x1, y1, type = "closed", length = 0.1, fill = "black",
|
||||
angle = 15, ...)
|
||||
lpoints(x, y,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[2])
|
||||
lpoints(x1, y1,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[1])
|
||||
lpoints(ff[3], ff[1],
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[3])
|
||||
},
|
||||
xlab = expression(week_c^2),
|
||||
ylab = "(Intercept)",
|
||||
key = list(space = "top", columns = 3,
|
||||
text = list(c("Mixed model", "Within-subject", "Population")),
|
||||
points = list(col = trellis.par.get("superpose.symbol")$col[1:3],
|
||||
pch = 16))
|
||||
)
|
||||
)
|
||||
|
||||
dev.off()
|
||||
|
||||
|
||||
pdf("hdrs_shrinkage_week-weeksq.pdf", height = 6, width = 6, pointsize = 10)
|
||||
|
||||
with(df,
|
||||
xyplot(week_c ~ `I(week_c^2)`, aspect = 1,
|
||||
x1 = C, y1 = B,
|
||||
panel = function(x, y, x1, y1, subscripts, ...) {
|
||||
panel.grid(h = -1, v = -1)
|
||||
x1 <- x1[subscripts]
|
||||
y1 <- y1[subscripts]
|
||||
larrows(x, y, x1, y1, type = "closed", length = 0.1, fill = "black",
|
||||
angle = 15, ...)
|
||||
lpoints(x, y,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[2])
|
||||
lpoints(x1, y1,
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[1])
|
||||
lpoints(ff[3], ff[2],
|
||||
pch = 16,
|
||||
col = trellis.par.get("superpose.symbol")$col[3])
|
||||
},
|
||||
xlab = expression(week_c^2),
|
||||
ylab = "week_c",
|
||||
key = list(space = "top", columns = 3,
|
||||
text = list(c("Mixed model", "Within-subject", "Population")),
|
||||
points = list(col = trellis.par.get("superpose.symbol")$col[1:3],
|
||||
pch = 16))
|
||||
)
|
||||
)
|
||||
|
||||
dev.off()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user