2009-10-31 418 views
3

是否有某種滯後的變體使NAs保持在位置?我想計算可能缺失數據的價格數據的回報。第一欄是價格數據第二欄是價格的滯後第三欄顯示了p-lag(p) - 從99到104的回報被有效地忽略,所以計算的回報的路徑長度將不同於真實的。 第4欄顯示了NA位置滯後保存 第5欄顯示了新的差異 - 現在的5 2009-11-07返回可用R滯後於丟失的數據

乾杯,戴夫

x <- xts(c(100, 101, 97, 95, 99, NA, 104, 103, 103, 100), as.Date("2009-11-01") + 0:9) 

# fake the lag I want, with NA kept in position 
x.pos.lag <- lag.xts(x.pos) 
x.pos.lag <- lag.xts(x.pos) 
x.pos.lag['2009-11-07']=99 
x.pos.lag['2009-11-06']=NA 

cbind(x, lag.xts(x), x - lag.xts(x), x.pos.lag, x-x.pos.lag) 
      ..1 ..2 ..3 ..4 ..5 
2009-11-01 100 NA NA NA NA 
2009-11-02 101 100 1 100 1 
2009-11-03 97 101 -4 101 -4 
2009-11-04 95 97 -2 97 -2 
2009-11-05 99 95 4 95 4 
2009-11-06 NA 99 NA NA NA 
2009-11-07 104 NA NA 99 5 
2009-11-08 103 104 -1 104 -1 
2009-11-09 103 103 0 103 0 
2009-11-10 100 103 -3 103 -3 

回答

1

有沒有功能在R中原生地執行該操作,但您可以創建原始NA位置的索引,然後在滯後後將值交換。

x <- xts(c(100, 101, 97, 95, 99, NA, 104, 103, 103, 100), as.Date("2009-11-01") + 0:9) 
lag.xts.na <- function(x, ...) { 
    na.idx <- which(is.na(x)) 
    x2 <- lag.xts(x, ...) 
    x2[na.idx+1,] <- x2[na.idx,] 
    x2[na.idx,] <- NA 
    return(x2) 
} 

lag.xts.na(x) 
      [,1] 
2009-11-01 NA 
2009-11-02 100 
2009-11-03 101 
2009-11-04 97 
2009-11-05 95 
2009-11-06 NA 
2009-11-07 99 
2009-11-08 104 
2009-11-09 103 
2009-11-10 103 

順便說一句,你只是試圖處理週末/假期或沿着這條線?如果是這樣,你可以考慮從你的系列中刪除這些職位;這將大大簡化你的事情。或者,Rmetrics中的timeSeries軟件包具有許多處理工作日的功能。