我将两个图表与每种情况下叠加的非参数lo(w)ess曲线进行比较。问题在于曲线看起来非常不同,尽管它们的参数(例如span)是相同的。
y<-rnorm(100)
x<-rgamma(100,2,2)
qplot(x,y)+stat_smooth(span=2/3,se=F)+theme_bw()
plot(x,y)
lines(lowess(y~x))
qplot()
生成的图表似乎有更多的曲线。如你所知,在回归分析的诊断中检测曲率非常重要,我担心如果我要使用ggplot2,我会得出错误的结论。
你能告诉我如何在ggplot2中产生相同的曲线吗?
谢谢
答案 0 :(得分:2)
以下是一个新的stat
函数,用于ggplot2
使用lowess()
:https://github.com/harrelfe/Hmisc/blob/master/R/stat-plsmo.r。您需要加载proto
包才能生效。我喜欢使用lowess
,因为它对于任何样本大小都很快,并且允许对二进制Y关闭异常值检测。但它不提供置信带。
答案 1 :(得分:2)
或者,您可以使用loess(..., degree=1)
。这会产生与lowess(...)
set.seed(1) # for reproducibility
y<-rnorm(100)
x<-rgamma(100,2,2)
plot(x,y)
points(x,loess(y~x,data.frame(x,y),degree=1)$fitted,pch=20,col="red")
lines(lowess(y~x))
使用ggplot
qplot(x,y)+stat_smooth(se=F,degree=1)+
theme_bw()+
geom_point(data=as.data.frame(lowess(y~x)),aes(x,y),col="red")