Mô phỏng đường dẫn mẫu dự báo từ mô hình tbats


8

Sử dụng gói dự báo tuyệt vời của Rob Hyndman, tôi đã thấy rằng không chỉ cần có các khoảng dự đoán, mà còn mô phỏng một số con đường trong tương lai, đưa ra các quan sát trong quá khứ về chuỗi thời gian phức tạp. Có một cái gì đó cho chuỗi thời gian ít phức tạp hơn chỉ với một hoặc hai tính thời vụ (simulation.ets () trong gói dự báo), nhưng trong trường hợp của tôi, tôi sẽ yêu cầu tương đương với simulation.ets () cho mô hình tbats phức tạp hơn.

Tôi giả định rằng dữ liệu cần thiết để tạo các đường dẫn như vậy đã có trong đối tượng phù hợp, tuy nhiên khả năng tạo các đường dẫn mẫu dường như không thể truy cập trực tiếp. Do đó, tôi đã đưa ra một giải pháp ngây thơ và muốn biết, liệu phương pháp này có đúng không.

require(forecast)
fit = bats(test,use.parallel=T,use.damped.trend=F,use.trend=T,seasonal.periods=seasonal.periods)

Ngây thơ, tôi tưởng tượng rằng các đường dẫn mẫu có thể được xây dựng bằng cách sử dụng dự báo điểm từ

fit 

> forecast(fit)
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
1960.016       24.48576 23.82518 25.14633 23.47550 25.49602
1960.032       24.79870 23.88004 25.71735 23.39374 26.20366
1960.048       25.31743 24.39878 26.23608 23.91247 26.72239
1960.065       25.69254 24.77389 26.61120 24.28759 27.09750 
1960.081       26.06863 25.14998 26.98729 24.66367 27.47359
1960.097       26.43215 25.51350 27.35080 25.02719 27.83711
1960.113       26.77674 25.85809 27.69540 25.37179 28.18170

và chỉ cần thêm các giá trị được rút ngẫu nhiên từ quy trình khớp mô hình.

> fit$errors
Time Series:
Start = c(1959, 2) 
End = c(1960, 1) 
Frequency = 365 
  [1]  0.140656913 -0.455335141 -0.558989185  1.697532911 -0.114406022  0.366182718 -0.377056927  0.396144296

Do đó, với

prediction = forecast(fit)
errors = fit$errors

path = prediction$mean + sample(errors, size = length(prediction$mean))
plot(ts(path))

một đường dẫn mẫu có thể được xây dựng.

nhập mô tả hình ảnh ở đây

Đây có phải là một cách hợp lệ để xây dựng các đường dẫn mẫu? Nếu không, điều gì sẽ là một cách chính xác?

Cảm ơn rất nhiều vì sự giúp đỡ!

Câu trả lời:


2

Không, phương pháp đó không hợp lệ nói chung.

Đây là một ví dụ đơn giản, minh họa. Giả sử rằng bạn có một bước đi ngẫu nhiên mà không trôi:

Yt= =Yt-1+εt
εt~N(0,1)

Quá trình này rơi vào lớp TBATS (nó chỉ là mô hình ETS kiểu "ANN" với , không có bất kỳ tính thời vụ phức tạp hoặc biến đổi Box-Cox hoặc lỗi ARMA).α= =1

Đây là giao diện nếu bạn sử dụng phương pháp của mình trên dữ liệu mô phỏng:

nhập mô tả hình ảnh ở đây

"Đường dẫn mô phỏng" phẳng và có phương sai nhỏ, trong khi dữ liệu gốc sẽ đi lạc khỏi mức trung bình khá nhiều. Nó hoàn toàn không "giống" dữ liệu gốc.

Nếu chúng ta lặp lại quy trình nhiều lần và tính toán các lượng tử theo kinh nghiệm cho 95% phân phối ở giữa ở mỗi chân trời, bạn sẽ thấy rằng chúng sai so với các khoảng dự đoán được báo cáo bởi forecast.tbats(nếu phương pháp hoạt động, chúng phải khớp với bên ngoài, khoảng màu xám):

nhập mô tả hình ảnh ở đây

Nhiều mô hình chuỗi thời gian có thể được xem như là một biến đổi của một chuỗi các biến ngẫu nhiên không tương quan; sự chuyển đổi chính xác phụ thuộc vào mô hình. Đưa ra một phép chuyển đổi cụ thể, bạn thường có thể lấy phần dư (gọi chúng là ), lấy mẫu lại chúng, sau đó áp dụng phép chuyển đổi này để mô phỏng từ cùng một quy trình.εt^

Ví dụ: bước đi ngẫu nhiên biến đổi một chuỗi các biến không tương quan theo đệ quy đã nêu ở trên (tổng tích lũy). Nếu chuỗi ban đầu của bạn kết thúc tại , bạn có thể lấy mẫu , từ và áp dụng đệ quy tương tự cho có được giá trị mô phỏng cho , như thế này:εtTεT+1*{ε1^,Giáo dục,εT^}YT+1

YT+1*= =YT+εT+1*

Nếu bạn tính toán các lượng tử như trước đây, bạn nên đến gần khu vực màu xám.

Do đó, nói chung, loại bootstrap dựa trên mô hình này yêu cầu mã hơi khác nhau cho các mô hình khác nhau, để thực hiện các biến đổi khác nhau trên . Hàm xử lý việc này cho bạn đối với lớp ETS, nhưng dường như vẫn không có tương đương với TBATS trong gói, theo như tôi có thể nói.εt*simulate.ets


Bất kỳ đề xuất về cách làm điều này cho TBATS mà không cần phải tạo ra một simulate.tbatsphương pháp?
Bryan Shalloway

1
εT*N(0,σ^2)ε^Tôip(YT+1,...,YT+h|Y1,...,YT,θ^)

-2

Đây có lẽ là một câu trả lời rất muộn nhưng tôi không hiểu tại sao không.

Cách tiếp cận của bạn có vẻ đúng. Nhưng, có một cách dễ dàng hơn để làm điều đó.

Bạn đã chỉ định một tên biến cho dự báo của bạn. Bạn chỉ cần plot(prediction). Bằng cách thêm biến hlà số lượng thời gian để dự báo prediction, bạn có thể kiểm soát độ dài dự báo. Ví dụ, bạn có thể nói prediction <- forecast(fit, h = 48). Lưu ý rằng giá trị của hphụ thuộc vào mức độ bạn muốn thấy trong tương lai.


1
Tôi không quan tâm đến cốt truyện, nhưng để có quyền truy cập vào một tập hợp các dự báo.
Peter Lustig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.