2013-01-20 27 views
2

我目前正在修改一些R代碼,我已經提供了適合我的需求。運行中值曲線而不是LOWESS

情況如下:

我們正在繪製〜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最佳擬合曲線。

有沒有簡單的方法/功能來做到這一點?

的情節的例子,這SEEE在Flickr上(對不起,不能直接上傳,我是新來的,它是不允許的:) plot with lowess smoothing curve in red

+1

歡迎的StackOverflow!你能否展示一個可複製的數據例子,例如使用'dput(x.lowess)'和'dput(y.lowess)'? –

+0

謝謝你的回答! > dput(x.lowess) C(0.268309377138946,0.511978097193703,0.785763175906913,0.974674880219028,...) > dput(y.lowess) C(0.8,0.5,0.8,0.5,...) – user1995421

+0

指定更:這是根據測量時的時間標記連接與一個對象相對應的多個測量值的情節。所以首先畫出所有的線條,數值按照患者分類,現在爲lowess,他們只是使用所有的測量和時間戳「一起」 – user1995421

回答

1

生成一些樣本數據:

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

你好!非常感謝您的回答。我真的不明白'xvec'的含義,所以我試過這個:'library(quantreg) x < - x.lowess y < - y.lowess q1 < - rq(y〜x,data = data (x,y)) pq < - prediction(q1,newdata = data.frame(x = x.lowess)) lines(x.lowess,pq,col = 2,lwd = 3)' 我是一個線性斜率(我不應該說繪製線傾向於指數,我在我的問題中添加了一個陰謀示例) – user1995421

+0

'rq'適合中位數的線性模型。你想要什麼?運行中位數?使用'family ='symmetric''的'loess'函數(注意不同於'lowess')將會強健 - 不是中間值,但可能更接近你想要的值...'xvec'是矢量您希望評估適合度的x值。 –

+0

是的,確切地說,一箇中位數是完美的!對不起,我沒有讓自己清楚... – user1995421