我试图在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)
上面的代码工作正常。 我的第一个程序无法解决问题。
答案 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
为您提供回归曲线的置信限制。