Có cách nào để sử dụng các chức năng được tối ưu hóa (zoo
hoặc một cái gì đó tương tự) (rollmean
, rollmedian
vv) để tính toán các chức năng cán với cửa sổ dựa trên thời gian của một dựa trên một số quan sát? Những gì tôi muốn là đơn giản: đối với mỗi phần tử trong một chuỗi thời gian bất thường, tôi muốn tính toán một chức năng cán với một cửa sổ N-ngày. Đó là, cửa sổ nên bao gồm tất cả các quan sát lên đến N ngày trước khi quan sát hiện tại. Chuỗi thời gian cũng có thể chứa các bản sao.tối ưu hóa các chức năng cán trên các chuỗi thời gian bất thường với cửa sổ dựa trên thời gian
Dưới đây là ví dụ. Với chuỗi thời gian sau:
date value
1/11/2011 5
1/11/2011 4
1/11/2011 2
8/11/2011 1
13/11/2011 0
14/11/2011 0
15/11/2011 0
18/11/2011 1
21/11/2011 4
5/12/2011 3
Một trung bình cán với một cửa sổ 5 ngày, liên kết ở bên phải, nên kết quả trong việc tính toán sau:
> c(
median(c(5)),
median(c(5,4)),
median(c(5,4,2)),
median(c(1)),
median(c(1,0)),
median(c(0,0)),
median(c(0,0,0)),
median(c(0,0,0,1)),
median(c(1,4)),
median(c(3))
)
[1] 5.0 4.5 4.0 1.0 0.5 0.0 0.0 0.0 2.5 3.0
Tôi đã tìm thấy một số giải pháp lên đó, nhưng chúng thường phức tạp, thường có nghĩa là chậm. Tôi đã cố gắng thực hiện tính toán chức năng cán của riêng mình. Vấn đề là trong một chuỗi thời gian rất dài, phiên bản được tối ưu hóa của trung bình (rollmedian) có thể tạo ra sự khác biệt lớn về thời gian, vì nó có tính đến sự chồng chéo giữa các cửa sổ. Tôi muốn tránh thực hiện lại nó. Tôi nghi ngờ có một số trick với các thông số rollapply mà sẽ làm cho nó hoạt động, nhưng tôi không thể tìm ra nó. Xin được cảm ơn trước về sự giúp đỡ.
Không có cách nào để thực hiện điều này bằng 'cuộn tròn '. Bạn có thể cuộn chức năng của riêng bạn (chơi chữ dự định) bằng cách sử dụng 'cửa sổ'. –
Đây có phải là câu hỏi và câu trả lời của bất kỳ sự trợ giúp nào không? http://stackoverflow.com/questions/10465998/sliding-time-intervals-for-time-series-data-in-r – thelatemail
'rollapply'" cheats "bằng cách gọi' rollmedian' nếu bạn sử dụng 'median' làm FUN . So sánh: 'system.time (rollapply (runif (100000), 5, function (x) median (x)))' to 'system.time (rollapply (runif (100000), 5, median))' (trước đây là 30x chậm hơn). Nếu bạn muốn tốc độ so sánh với những gì 'rollapply' đạt được mà không có "gian lận" tôi có thể cung cấp một số giải pháp. Ngoài ra, 'rollmedian' cũng" gian lận "nhiều như nó đòi hỏi các quan sát lẻ, vì vậy rõ ràng nó chỉ xác định một chỉ số của các giá trị" trung bình ", là tầm thường so với những gì bạn đang cố gắng làm. – BrodieG