2011-10-28 32 views
3

我有两行数据不相等的数据帧。但我需要平滑两个数据框中的数据并将它们绘制在一起。我可以用lowess /黄土来平滑每个数据帧。但是,当我尝试绘制两个数据框在一起的行时,我通常会收到错误“行数不等”。我通过使用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

似乎应该是。关键是要确保x和y的比例相同。首先使用plot()然后使用lines()应该处理这个问题。真正的问题是为什么你认为它可能不合法? –

+0

坦率地说,我不是一名统计学家。我是一名生物学家,这种方法似乎是有道理的。但是,我已经学会了艰难的道路,看起来正确的事情并不一定如此。因此,这个问题是为了确保我的理解是正确的。我相信社区智慧。再次感谢@Dwin的评论。这是我正在寻找的答案。 – Sam

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

这exmple可能没有开始使用一个很好的,因为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")