2012-11-06 35 views
7

Tôi đang cố tính toán biến động lịch sử 20 giai đoạn. Tôi lấy lợi nhuận hàng ngày:Rollapply cho chuỗi thời gian

ret<-ROC(data1) 

Và sau đó tôi sử dụng rollapply để có được những HV 20 ngày cho mỗi cột:

vol<-rollapply(ret,20,sd,by.column=T,fill=NA) 

Vấn đề là quan sát trong vol bắt đầu xuất hiện sau mười ngày đó là sai như tôi đã chỉ định 20.

Đối với cuộc biểu tình ở đây là ví dụ về các dữ liệu:

0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821, 
0.007853403,-0.012987013, 0.007894737, 0.015665796, 0.000000000, -0.002570694, 
0.002577320, -0.015424165, 0.002610966, 0.010416667, 0.002577320, 0.015424165, 
0.000000000, -0.002531646, -0.002538071, 0.030534351, 0.014814815, -0.007299270, 
-0.009803922, -0., 0.002506266, -0.015000000,-0.002538071, 0.002544529 

Giả sử dữ liệu ở trên được lưu trữ trong x, sau đó:

rollapply(x,20,sd,fill=NA) 

sẽ mang lại quan sát đầu tiên ở hàng thứ 10 thay vì 20. Ngoài ra, sd cũng sai.

tôi nên thiếu một cái gì đó ở đây ...

Trả lời

18

Bạn cần phải sử dụng align='right' thay vì sử dụng mặc định đó là align='center', hoặc thay vì sử dụng rollapply, sử dụng các wrapper rollapplyr trong đó có align='right' làm mặc định.

Từ ?rollapply:

class specifyies dù chỉ số của kết quả nên trái hay canh phải hoặc trung tâm (mặc định) so với cửa sổ lăn các quan sát. Đối số này chỉ được sử dụng nếu chiều rộng đại diện cho độ rộng.

Mặc dù, cho điều này, cá nhân, tôi muốn sử dụng runSD từ gói TTR vì nó sử dụng mã biên dịch và sẽ nhanh hơn.

Một trong hai cách này nên làm những gì bạn mong đợi, nhưng điều thứ hai sẽ nhanh hơn.

library(zoo) 
rollapply(x, 20, sd, fill=NA, align='right') 

library(TTR) 
runSD(x, 20) 
Các vấn đề liên quan