Add materials

This commit is contained in:
2026-04-20 17:51:32 +02:00
parent 1b3d182923
commit 7b2649be60
26 changed files with 3667 additions and 0 deletions
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+197
View File
@@ -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.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.