【问题标题】:Smoothing of data with unequal number of observations for plotting?平滑具有不相等数量观察值的数据以进行绘图?
【发布时间】:2011-10-29 22:21:51
【问题描述】:

我有两个行数不等的数据框。但我需要平滑两个数据框中的数据并将它们绘制在一起。我可以用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 包含不相等点数的情况?

【问题讨论】:

  • 似乎应该如此。关键是要确保 x 和 y 的比例相同。先使用 plot() 然后再使用 lines() 应该注意这一点。真正的问题是为什么您认为它可能无效?
  • 坦率地说,我不是统计学家。我是一名生物学家,这种方法似乎很有意义。但后来我学到了一个艰难的方式,看起来正确的事情并不一定如此。因此,这个问题是为了确保我的理解是正确的。我确实相信社区智慧。再次感谢@Dwin 的评论。这就是我一直在寻找的答案。
  • 我也不是经过认证的统计学家,但使用 loess() 肯定比强制使用特定多项式拟合在统计上更“诚实”。

标签: r smoothing


【解决方案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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-08-09
    • 2017-04-17
    相关资源
    最近更新 更多