R中多级分析中的绘图节制效果
在我的数据集中,我有3组,我想绘制y和组之间的交互作用。R中多级分析中的绘图节制效果
id <- c(1,1,1,2,2,2,3,3,3)
group <- c(0,0,0,1,1,1,2,2,2)
x <- c(20,50,30,50,65,80,20,50,60)
y <- c(120,130,150,200,210,180,160,170,120)
我已经用“interaction.plot”试过了,但没有奏效。
interaction.plot(x,group,y)
有人有一个很好的R语法来绘制这种交互?
无论您想要什么,您都必须将class
的组更改为factor
。确实interaction.plot()
是因素的双向组合,你的x
不是因素。但如果一个是连续的,interaction.plot()
会提供一些帮助。就你而言,输出结果显示“考虑与这些数据进行交互是愚蠢的想法”。
但是,如果你想要做的(我认为你想要一个线性模型):
df <- data.frame(id = id, x = x, y = y, group = as.factor(group))
## Base plot
model <- lm(y ~ x * group, data = df)
xpara <- 20:80
plot(y ~ x, data = df, col=c(2:4)[group], pch=19)
for(i in 1:3) lines(xpara, predict(model, data.frame(x = xpara, group = as.factor(i-1))), col = i+1)
legend("topleft",paste(c("group0","group1","group2")), pch=19, lty=1, col=c(2:4))
## ggplot2 (I plotted lines and confidence intervals to interpret)
library(ggplot2)
ggplot(df, aes(x = x, y = y, colour = group)) +
geom_point(size = 4) +
geom_smooth(method = "lm", se = T, fullrange = T)
[编辑]
如果类模型通过predict()
支持,方式基本上是一样的。
df2 <- data.frame(id = as.factor(id), x = x, y = y, group = as.factor(group))
library(nlme)
# first; make model
lme.mod <- lme(y ~ x * group, random = ~ 1|id, data = df2)
# second; get predicted values
xpara <- 20:80 # make a vector for an independent variable you use as x.
y.g1 <- predict(lme.mod, data.frame(x = xpara, group = "0", id = "1"), type="response")
y.g2 <- predict(lme.mod, data.frame(x = xpara, group = "1", id = "1"), type="response")
y.g3 <- predict(lme.mod, data.frame(x = xpara, group = "2", id = "1"), type="response")
# third; draw
plot(y ~ x, df2, col=c(2:4)[group], pch=19)
lines(xpara, y.g1, col=2)
lines(xpara, y.g2, col=3)
lines(xpara, y.g3, col=4)
## Simplificated version
lev <- levels(df$group)
plot(y ~ x, data = df2, col=c(2:4)[group], pch=19, ylab="y (id = "1")")
for(i in seq.int(length(lev)))
lines(xpara, predict(lme.mod, data.frame(x = xpara, group = lev[i], id = 1)), col = i+1)
legend("topleft",paste(c("group0","group1","group2")), pch=19, lty=1, col=c(2:4))
谢谢你的回答和语法。但是,由于我的数据集具有层次结构,因此我想在多层模型中绘制交互图,所以我宁愿使用命令“lme”而不是“lm”。这是可能的多层次设计? –
@ M.K。;好的,我编辑过。 – cuttlefish44
小心解释为什么它不起作用?我输入这个代码,我确实得到了一个情节。它出什么问题了? – cgmil