2015-06-15 28 views
0

我試圖在基本包中使用函數「lowess」來平滑向量。問題是矢量只有一個NA值,但在「lowess」平滑之後,會出現另外4個NA。我搜索了一下,有人建議在「gplots」包中使用「lowess」。我試過但得到了相同的結果。R:帶有NAs的函數「lowess」

x1 <- c(NA, 19.93621, 17.64789, 17.78488, 17.11141, 18.4648, 19.62629, 17.5737, 17.48582, 18.76946, 19.57138, 19.62812, 2.982385, -0.1320513) 
x2 <- lowess(x1) 
x2 
$x 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 

$y 
[1]  NA  NA  NA  NA  NA 18.988279 18.563642 18.407768 18.496699 17.922510 14.419999 10.861535 7.179754 3.145612 

一種方法是刪除x1中的NA,因此在x2 $ y平滑後沒有NA。

x2 <- lowess(x1[-1]) 
x2 
$x 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 

$y 
[1] 18.7079309 18.4481273 18.2491632 18.0847709 18.0946245 18.1282192 18.1497617 17.9298278 14.6441882 10.9465210 7.2635244 3.5247529 -0.3021372 

但我只是想知道爲什麼更多的NA出現,有沒有更簡單的方法?謝謝!

+0

'lowess'做一個局部多項式擬合。如果某個點的局部區域有NA,則這些NA值將傳播到附近的值。 – MrFlick

回答

3

lowess沒有任何內置NA處理

  1. 也許最簡單的事情長期是學會使用loess(其選項和設置都略有不同),它不處理NA值(它有一個na.action參數,就像lm一樣,默認情況下應該按照您想要的方式工作 - 但是,就語法而言,loess的工作原理比lm的工作方式要多得多,就像lowess)。

  2. 您可以直接使用na.omit參數lowess;這樣你就不需要特別指出哪些觀測被省略了。

+0

這看起來很棒,但默認參數「lowess」和「loess」給出了截然不同的結果。無法找到如何簡單地將前者改爲後者,你能指導我嗎? –