使用ggplot2绘制多个解释变量模型的预测线

3
我的问题与我几个小时前提出的问题有关。查看此帖子将有助于更好地理解随后的问题。
我使用一个响应变量和两个解释变量构建了一个模型,其中一个是因素。
在我的模型中,响应变量被转换了。我想在图表上显示我的变量,但我希望解释变量不被转换。此外,我想添加由我的模型给出的预测线,为此需要进行反变换!并且为了增加一些困难,我想在ggplot上完成这个过程。
我的问题是如何将@Roland's solution扩展到ggplot和多个解释变量? 以下是一个示例:

set.seed(12)

resp = (rnorm(120)+20)^3.79
expl1 = rep(c(1,2,3,4),30)
expl2 = rep(1:3,40)
df = data.frame(resp=resp,expl1=expl1,expl2=expl2)

m=lm(resp~expl1*factor(expl2), data=df)
ggplot(data=df,aes(y=resp,x=expl1,shape=factor(expl2)))+geom_point() + geom_smooth(se=F)

我希望显示预测模型的反变换后的值,而不是当前显示的线条。我可以在geom_smooth中添加 method='lm', formula =resp~expl1*factor(expl2) 但无论我是否转换resp,我都会遇到同样的问题。线条要么不符合因为被转换了,要么就不对应我的模型。

希望我的问题表述清楚了!感谢您的帮助!

2个回答

2
您可以像之前问题的回答中使用predict一样,使用多个解释变量。然后,您只需要将预测结果反向转换为原始比例尺。预测结果在不同的数据框中,因此如果我使用ggplot,我通常会使用原始数据框映射图形并添加点,然后使用预测数据框绘制线条。
# A transformed response
df$resp2 = df$resp^(1/3.79)

m2 = lm(resp2 ~ expl1 * expl2, data=df)

plotexpl = seq(1, 4, by = .1)
# Use expand grid to make dataset for predictions
newdat = expand.grid(expl1 = plotexpl, expl2 = c("1", "2", "3"))
newdat$pred = predict(m2, newdata = newdat)

# Back-transform predictions
newdat$back = newdat$pred^3.79

require(ggplot2)
ggplot(df, aes(x = expl1, y = resp, color = expl2)) +
    geom_point() + geom_line(data = newdat, aes(y = back) )

0

如果您愿意使用基本图形解决方案而不是ggplot2,则TeachingDemos包中的Predict.Plot函数将绘制一个预测变量与响应变量之间的关系,同时结合其他变量的值来显示多个条件。为了获得响应变量的适当转换/反转换,最好使用glm和链接函数而不是lm。

如果您需要ggplot2解决方案,则仍然可以使用Predict.Plot作为起点,并将其适应于ggplot2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接