我的问题是我几个小时前问过的question以下内容。查看这篇文章将有助于理解随后的问题。
我创建了一个带有1个响应变量和2个解释变量的模型,其中一个是因子。
在我的模型中,响应变量被转换。我想在图表上显示我的变量,但我希望解释变量不被转换。此外,我想添加我的模型给出的预测线,为此目的应该进行后向变换!并且还要添加一个轻微的难度,我想在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)
而不是显示的线条,我希望在反向转换后得到模型的预测值。我可以在method='lm', formula =resp~expl1*factor(expl2)
中添加geom_smooth
但是我是否转换resp
我会遇到同样的问题。这条线因为变形而不适合,或者与我的模型不对应。
希望我的问题有道理!谢谢你的帮助!
答案 0 :(得分:2)
您可以将predict
与多个解释变量一起使用,就像在上一个问题的答案中使用它一样。然后,您只需将预测反向转换为原始比例。预测是在不同的data.frame中,所以如果我使用ggplot
我通常使用原始data.frame映射绘图并添加点,然后使用data.frame预测绘制线条。
# 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) )
答案 1 :(得分:0)
如果您愿意使用基本图形解决方案而不是ggplot2,那么TeachingDemos包中的Predict.Plot
函数将绘制其中一个预测变量与其他预测变量值的响应之间的预测关系,并将这些结合起来图表显示多个条件。要对响应进行正确的转换/反向转换,最好将glm
与链接函数一起使用,而不是lm
。
如果您需要ggplot2解决方案,那么您仍然可以使用Predict.Plot
作为起点并将其调整为ggplot2。