运行中位数曲线而不是LOWESS

时间:2013-01-20 21:25:02

标签: r curve median

我目前正在修改我提供的一些R代码,以满足我的需求。

情况如下:

我们正在绘制约200行。 然后他们使用LOWESS来获得最佳曲线。

现在看起来像这样:

lines(lowess(x.lowess, y.lowess), lwd = 3)

其中x.lowess和y.lowess是相应的坐标,每个坐标都在一个向量中,例如:

> dput(x.lowess)
c(0.268309377138946, 0.511978097193703, 0.785763175906913, 0.974674880219028, ... )
> dput(y.lowess)
c(0.8, 0.5, 0.8, 0.5, ... )

我现在正在寻找一条正在运行的中间曲线,而不是一条LOWESS最佳拟合曲线。

这样做有简单的方法/功能吗?

关于情节的一个例子,请在flickr上看到这个(对不起,不能直接上传它,我在这里是新的,不允许:) plot with lowess smoothing curve in red

1 个答案:

答案 0 :(得分:2)

生成一些样本数据:

set.seed(1001)
x <- runif(1000)
y <- runif(1000)
dat <- data.frame(x,y)

使用quantreg包查找中位数作为x的函数:

library(quantreg)
q1 <- rq(y~x,data=data.frame(x,y))
xvec <- seq(0,1,length=101)
pq <- predict(q1,newdata=data.frame(x=xvec))

绘制基础图形:

plot(x,y,pch=".")
lines(lowess(x,y))
lines(xvec,pq,col=2)

或使用ggplot2

library(ggplot2)
theme_set(theme_bw())
qplot(x,y,data=dat,size=I(0.8),alpha=I(0.2))+
    geom_smooth(method="loess")+
    stat_quantile(quantiles=0.5,formula=y~x,colour="red")