我有一个数据集,其中结果是衡量幸福指数的连续变量。关键变量是:
t:以天为单位的时间。
D:二元干预变量(0 = 不游泳,1 = 游泳)。
性别:两级分类变量(男性,女性)。
race:四级分类变量。
URL <- "https://github.com/DS4PS/pe4ps-textbook/blob/master/data/time-series-example.rds?raw=true"
dataTS <- readRDS(gzcon(url( URL )))
dataTS$Y <- round(dataTS$Y,1)
dataTS$sex <- sample(c("male", "female"), size = NROW(dataTS), replace = TRUE)
dataTS$race <- sample(c("White", "Black", "Brown", "Yellow"), size = NROW(dataTS), replace = TRUE)
目标是使用中断时间序列 (ITS) 模型评估引入游泳课程 (D) 对健康指数的影响。
plot( dataTS$T, dataTS$Y,
bty="n", pch=19, col="gray",
ylim = c(0, 300), xlim=c(0,400),
xlab = "Time (days)",
ylab = "Wellbeing Index" )
# Line marking the interruption
abline( v=200, col="firebrick", lty=2 )
text( 200, 300, "Start of Swimming Classes", col="firebrick", cex=1.3, pos=4 )`
具体来说,这些是感兴趣的参数:
水平变化(β2):干预后幸福指数的立即变化。 (更改级别)
斜率变化 (β3):干预后幸福指数随时间变化的趋势。
所以我拟合了一个像这样的简单回归模型
ts <- lm(Y ~ T + D + T*D + sex + race, data = dataTS )
拟合模型后,我想使用
emmeans
来可视化 t
和 D
之间的交互。
期待这样的剧情:
我怎样才能实现这个目标?
我不明白你为什么要使用
emmeans
。这对于您的目标来说似乎没有必要。
您无法对分类变量进行平均。因此,我建议对情节进行刻面。您的型号似乎也没有指定好。如果您的假设是性别和种族会产生影响,那么缺少似乎很重要的相互作用。
将 T 集中于干预时间似乎是个好主意。
ts <- lm(Y ~ I(T - 200) + D + I(T - 200)*D + sex + race, data = dataTS )
summary(ts)
anova(ts)
pred1 <- expand.grid(T = seq(from = min(dataTS$T), to = max(dataTS$T), by = 1),
sex = unique(dataTS$sex),
race = unique(dataTS$race))
pred1$D <- as.integer(pred1$T >= 200)
pred1$Y <- predict(ts, newdata = pred1)
pred2 <- pred1[pred1$T > 200,]
pred2$D <- 0
pred2$Y <- predict(ts, newdata = pred2)
library(ggplot2)
ggplot(dataTS, aes(x = T, y = Y)) +
geom_point() +
geom_line(data = pred1, aes(group = factor(D), color = "predicted")) +
geom_line(data = pred2, aes(color = "counterfactual")) +
geom_vline(linetype = 2, aes(xintercept = 200, color = "intervention")) +
facet_grid(sex ~ race)
PS:作为来自德国的人,考虑到我们的历史,我对美国将人类划分为“种族”的习惯深感不安。我强烈建议您阅读一些有关应用于人类的种族概念的论文(例如,Schaare 等人,2023),特别是如果您将其应用于医疗保健或健身环境中。