1

Rの最も低い方法を使用して、x軸に沿って均一に分布していないデータセットの加重平均を計算しようとしています。たとえば、最初の5つのデータポイントは次のようになります。最初の列はxで、2番目の列はyです。

375.0 2040.0
472.0 5538.0 510.0 4488.0 573.0
2668.0
586.0
7664.0

Rで次のコマンドを使用しました。

x<-read.table(add,header=FALSE,sep="\t")
y<-lowess(x[,1],x[,2],f=0.01)
write.table(y, file = results , sep = "\t", col.names =FALSE, row.names =FALSE)

出力は次のようになります。

ここに画像の説明を入力してください

緑の線はmatlab(tri-cubic kernel)のsmooth関数によって計算された平均を示し、赤の線はRのlowessメソッドによって計算された平均線です。青い点はデータポイントです。Rのメソッドが機能しない理由がわかりません。何か考えはありますか?

データの一部へのリンクは次のとおりです。

どうもありがとうございました。

4

1 に答える 1

2

の滑らかな関数はフィルターのようなものですmatlab

yy = smooth(y)
yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5  ## convolution of size 5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5

ここは単純なスムージングをした方が良いと思います。

ここで、 f = 0.2(1/5) でloesslowesssを使用し、 Smooth.splineを使用するいくつかの試み

私は ggplot2 を使用してプロットしています( geom_jitter をアルファで使用するため)

library(ggplot2)
dat <-  subset(data, V2 < 5000)
#dat <-  data
xy <- lowess(dat$V1,dat$V2,f = 0.8)
xy <- as.data.frame(do.call(cbind,xy))

p1<- ggplot(data = dat, aes(x= V1, y = V2))+
  geom_jitter(position = position_jitter(width = .2), alpha= 0.1)+
  geom_smooth()

xy <- lowess(dat$V1,dat$V2,f = 0.2)
xy <- as.data.frame(do.call(cbind,xy))
xy.smooth <- smooth.spline(dat$V1,dat$V2)
xy.smooth <- data.frame(x= xy.smooth$x,y = xy.smooth$y)

p2 <- ggplot(data = dat, aes(x= V1, y = V2))+  
  geom_jitter(position = position_jitter(width = .2), alpha= 0.1)+
  geom_line(data = xy, aes(x=x, y = y, group = 1 ), color = 'red')+
  geom_line(data = xy.smooth, aes(x=x, y = y, group = 1 ), color = 'blue')

library(gridExtra)               
grid.arrange(p1,p2) 

ここに画像の説明を入力

于 2013-02-04T15:37:00.007 に答える