3

我的问题是几个小时前我问的这个问题的以下问题。看这篇文章将有助于理解接下来的问题。

我制作了一个包含 1 个响应变量和 2 个解释变量的模型,其中一个是一个因素。

在我的模型中,响应变量被转换。我想在图表上显示我的变量,但我不希望解释变量被转换。此外,我想添加我的模型给出的预测线,为此目的应该进行反向转换!为了增加一点难度,我想在 ggplot 上做。

我的问题是如何将@Roland的解决方案扩展到 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我都会遇到同样的问题。这条线要么因为变形而不适合,要么不符合我的模型。

希望我的问题有意义!谢谢你的帮助!

4

2 回答 2

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) )
于 2013-08-29T18:47:54.890 回答
0

如果您愿意使用基本图形解决方案而不是 ggplot2,那么Predict.PlotTeachingDemos 包中的函数将绘制预测变量之一与其他预测变量值的响应之间的预测关系,并将这些图组合起来以显示多个条件。为了获得响应的正确转换/反向转换,最好使用glm链接函数而不是lm.

如果您需要 ggplot2 解决方案,那么您仍然可以将Predict.Plot其用作起点并将其调整为 ggplot2。

于 2013-08-29T15:36:37.543 回答