R中plot和qplot中的不同lowess曲线

3

我正在比较两个图形,每个图形都有一个非参数的lo(w)ess曲线。问题是,尽管它们的参数(例如span)相同,但曲线看起来非常不同。

enter image description here

enter image description here

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中生成相同的曲线呢?

谢谢。


你正在使用两个不同的拟合函数:一个是使用qplot函数的loess线性拟合,另一个是使用lines函数的lowess - Simon O'Hanlon
@SimonO'Hanlon 低通滤波(lowess)和局部回归(loess)是同一个平滑函数,参考链接:http://en.wikipedia.org/wiki/Local_regression ,对吧?如果不是的话,在ggplot2中有类似的函数吗? - JohnK
2
不,他们没有。请仔细阅读!并参见这里 - Simon O'Hanlon
1
@SimonO'Hanlon 哇,你说得非常正确。Loess曲线默认使用二次局部回归拟合,因此会出现曲率。非常感谢! - JohnK
2个回答

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")


2
这里是一个新的stat函数,可与ggplot2一起使用,它使用lowess()https://github.com/harrelfe/Hmisc/blob/master/R/stat-plsmo.r。您需要加载proto包才能使其正常工作。我喜欢使用lowess,因为它适用于任何样本大小,并且可以关闭二元Y的异常值检测。但它不提供置信区间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接