【发布时间】:2016-07-10 18:51:12
【问题描述】:
我试图在 R 中绘制两个连续变量之间的交互。但是,我的数据是多级的(人们嵌套在几天内),所以我在绘制图表时需要考虑数据的嵌套结构。我使用 lme4 库分析我的数据以解释嵌套结构,但我很难弄清楚如何绘制它。
## example data
spin = runif(600, 1, 24)
reg = runif(600, 1, 15)
ID = rep(c("1","2","3","4","5", "6", "7", "8", "9", "10"))
day = rep(1:30, each = 10)
testdata <- data.frame(
spin, reg, ID, day)
testdata$fatigue <- testdata$spin*testdata$reg/10*rnorm(30, mean=3, sd=2)
在这里,我有自变量旋转和调节、疲劳因变量以及嵌套在几天内的人 (ID)。我在下面运行我的模型。
## running my multilevel model with lme4
library(lme4)
m1 <- lmer(fatigue ~ spin * reg + ( 1 | ID), data = testdata, REML = T)
(m1)
confint(m1, test = "Chisq")
假设我在 spin 和 reg 之间有交互。我需要将我的连续变量放入一个分类变量中才能绘制它。
所以我根据我的一个连续变量创建分类变量。在这里我选择旋转。 注意:不确定下面的代码是否完全适合我想要的。可能必须做标准错误?也没有考虑我的嵌套数据结构,但不知道该怎么做。
x <- mean(testdata$spin, na.rm = T)
print(x)
y <- sd(testdata$spin, na.rm = T)
print(y)
testdata$SpinLevel[testdata$spin > x+y] <- "High"
testdata$SpinLevel[testdata$spin > x-y & testdata$spin <= x+y] <- "Mean"
testdata$SpinLevel[testdata$spin <= x-y] <- "Low"
rm(x,y)
根据我在网上找到的内容,我可以创建一个基本的情节来展示效果。但是没有考虑嵌套结构(人——变量ID——在几天内嵌套)。
library(ggplot2)
ggplot(testdata,aes(reg,fatigue,linetype=SpinLevel))+
geom_smooth(method="lm",se=FALSE)
这个 ggplot 可以很好地解释基本效果,但线条可能会倾斜,因为它们没有考虑到我的数据的嵌套结构(几天内的人)。
我还可以使用效果库绘制我的模型。这确实考虑了嵌套结构。除了图表不漂亮而且是四分位数,而且很难解释。我希望它是高、平均和低,并且都在同一个图表上。但我不知道该怎么做。
library(effects)
plot(effect("spin*reg", m1), grid=TRUE, labels = T,
xlevels=list(spin=quantile(testdata$spin, seq(0, 1, 0.25))))
有什么想法吗?将不胜感激。
【问题讨论】:
-
我在模型规范中看不到任何内容表明嵌套在
day中。 -
我会推荐
broom包作为coefplot2的替代品 ...但我认为 OP 想要一个效果图,而不是系数图 ... -
抱歉,@42,我想我在统计意义上使用“嵌套”一词——当您的数据来自几天内响应的同一个人时,您不能假设响应是独立的。通过使用样本人,我打破了独立观察的统计假设,这就是我使用多级建模的原因。我在我的代码中包含了
day,只是为了表明我在多天内使用了多个人,因为这就是我的数据的格式。 @BenBolker——你说得对,我确实想要效果图。 -
因此您忽略了相邻或附近日期之间潜在的自相关。您的“日子”是否如此相隔太远,以至于这在生理上具有很好的意义?
标签: r plot interaction lme4 multi-level