2017-07-19 5 views
0

入力データを滑らかにしようとするコードがあります。それは動作しますが、それは原油です。それを行う良い方法はありますか?入力データを滑らかにしようとするコードをRで書いた。それを行う良い方法はありますか?

smooth.data <- function(X){ 

    require(ggplot2) 
    g <- ggplot(df,aes(x=df[,1],y=df[,2])) + geom_point() 
    g <- g + stat_smooth(aes(outfitx=fitx<<-..x.., outfit=fit<<-..y..), method = "lm", formula = y ~ poly(x, 21), se = FALSE) 
    plot(g) 
    plot(fitx, fit, type = "l") 
    return(list(fitx, fit)) 
} 

x <- seq(0.0,10,0.1) 
y <- exp(-x)*sin(x/(2*pi))+runif(10/0.1+1, 0.0, 0.05) 
df <- data.frame(cbind(x,y)) 
smooth.data.res <- smooth.data(df) 
xx <- smooth.data.res[[1]] 
yy <- smooth.data.res[[2]] 
plot(x,y) 
lines(xx,yy, col="blue", ldw=4) 

プロットすることはgであることが最良の方法ではありません。これを抑える方法はありますか?

答えて

1

あなたはggplotなしggplotに使用したのと同じ式を使用することができます:あなたは、引数を渡しているが、あなたは関数の本体でそれを使用していない

fitted <- lm(df[,2] ~ poly(df[,1],21)) 
plot(x,y) 
lines(x,fitted$fitted.values, col="blue", ldw=4) 
0

を。あなたの議論をパラメータ化してより大きな柔軟性を実現することを提案します。

smooth.data <- function(x,y,se=FALSE,npol=21){ 

    require(ggplot2) 
    df<-data.frame(cbind(x,y)) 
    g <- ggplot(df,aes(x=df[,1],y=df[,2])) + geom_point() 
    g <- g + geom_smooth(aes(outfix=fitx<<-..x.., out=fit<<-..y..),method = "lm", formula = y ~ poly(x, npol=npol), se = se) 
    return(list(fitx, fit,g)) 
} 


x <- seq(0.0,10,0.1) 
y <- exp(-x)*sin(x/(2*pi))+runif(10/0.1+1, 0.0, 0.05) 
smooth.data.res <- smooth.data(x,y,se=TRUE,npol=21) 

plot(smooth.data.res[[3]]) 
関連する問題