用不同数量的观测数据平滑数据进行绘图?

时间:2011-10-28 17:35:33

标签: r smoothing

我有两个数据帧,行数不等。但我需要平滑数据框中的数据并将它们绘制在一起。我可以用lowess / loess来平滑每个数据帧。但是,当我尝试将两个数据帧的线条一起绘制时,我通常会得到错误“行数不等”。我通过使用spline找到了解决方法。我想知道以下内容是否有效:

tmp1 <- spline( lowess( df1[,1], df[,2] ), n = 20 )
tmp2 <- spline( lowess( df2[,1], df2[,2] ), n = 20 )

plot( tmp1[,1], tmp1[,2], type="l" )
lines( tmp2[,1], tmp2[,2], col="red" )

我想知道将lowess对象的样条曲线绘制为其表示是否在“统计上”有效,因为我想限制数据点的数量。这是针对不同系列的lowess包含不等数量的点的情况吗?

1 个答案:

答案 0 :(得分:1)

如果你(和我)记得splines没有返回可以作为行和列寻址的对象,那将会奏效。它返回一个两元素的向量列表。所以你需要修复第二个“df”的拼写并使用“[[”:

# test data
df1 <- data.frame(x=rnorm(100), y=rpois(100, lambda=.5))
df2 <- data.frame(x=rnorm(200), y=rpois(200, lambda=.5))

tmp1 <- spline( lowess( df1[,1], df1[,2] ), n = 20 )
tmp2 <- spline( lowess( df2[,1], df2[,2] ), n = 20 )

plot( tmp1[[1]], tmp1[[2]], type="l" )
lines( tmp2[[1]], tmp2[[2]], col="red" )

这个例子可能不是一个很好的开始,因为ylim需要扩展才能看到任何一点:

 plot( tmp1[[1]], tmp1[[2]], type="l", ylim=c(0,4) )
 lines( tmp2[[1]], tmp2[[2]], col="red" )
 points(jitter(df2[[1]]), df2[[2]],  cex=0.3, col="blue")
 points(jitter( df1[[1]]), df1[[2]], cex=0.3, col="red")