关于R中回归预测值的美学上的ggplot误差

时间:2013-11-29 21:45:39

标签: r

我试图在ggplot中绘制预测值的图表。脚本如下所示 -

PROGRAM1

lumber.predict.plm1=lm(lumber.1980.2000 ~ scale(woman.1980.2000) +
                        I(scale(woman.1980.2000)^2), data=lumber.unemployment.women)
xmin=min(lumber.unemployment.women$woman.1980.2000)
xmax=max(lumber.unemployment.women$woman.1980.2000)
predicted.lumber.all=data.frame(woman.1980.2000=seq(xmin,xmax,length.out=100))
predicted.lumber.all$lumber=predict(lumber.predict.plm1,newdata=predicted.lumber.all)



lumber.predict.plot=ggplot(lumber.unemployment.women,mapping=aes(x=woman.1980.2000,
                                       y=lumber.1980.2000)) +
geom_point(colour="red") +
geom_line(data=predicted.lumber.all,size=1)
lumber.predict.plot
Error: Aesthetics must either be length one, or the same length as the   dataProblems:woman.1980.2000

我相信,我们不需要将基础数据集中的观测数量与预测值数据集中的观测数量相匹配。当我在'cars'数据集上尝试时,相同的逻辑/程序可以正常工作。

speed.lm = lm(speed ~ dist, data = cars)
xmin=10
xmax=120
new = data.frame(dist=seq(xmin,xmax,length.out=200))
new$speed=predict(speed.lm,newdata=new,interval='none')
sp <- ggplot(cars, aes(x=dist, y=speed)) +
   geom_point(colour="grey40") + geom_line(data=new, colour="green", size=.8)

上面的代码工作正常。 我的第一个程序无法解决问题。

2 个答案:

答案 0 :(得分:2)

您应该在预测数据中使用相同的y值。改变这一行

predicted.lumber.all$lumber=
        predict(lumber.predict.plm1,newdata=predicted.lumber.all)

这一个:

 predicted.lumber.all$lumber.1980.2000=   ## very bad variable name!
     predict(lumber.predict.plm1,newdata=predicted.lumber.all)

或者将aes召回为:

geom_line(data=new,aes(y=lumber),
  colour="green", size=.8)

答案 1 :(得分:2)

基本问题是在你的代码中,

...
geom_line(data=predicted.lumber.all,size=1)
...

ggplot不知道要使用predicted.lumber中的哪一列。正如@agstudy所说,您可以在aes(...)中使用geom_line指定此内容:

...
geom_line(data=predicted.lumber.all, aes(y=lumber), size=1)
...

由于您只是绘制回归曲线,因此您可以使用以下代码完成同样的事情:

df    <- lumber.unemployment.women
model <- lumber.1980.2000 ~ scale(woman.1980.2000) + I(scale(woman.1980.2000)^2)
ggplot(df, aes(x=woman.1980.2000, y=lumber.1980.2000)) +
  geom_point(color="red") +
  stat_smooth(formula=model, method="lm", se=T, color="green", size=0.8)

请注意se=T为您提供回归曲线的置信限制。