2011-10-28 113 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")