Các vấn đề với dự đoán chuỗi thời gian


8

Tôi có một câu hỏi về mô hình chuỗi thời gian trong R. dữ liệu của tôi bao gồm ma trận sau:

1   0.03333333 0.01111111 0.9555556
2   0.03810624 0.02309469 0.9387991
3   0.00000000 0.03846154 0.9615385
4   0.03776683 0.03119869 0.9310345
5   0.06606607 0.01201201 0.9219219
6   0.03900325 0.02058505 0.9404117
7   0.03125000 0.01562500 0.9531250
8   0.00000000 0.00000000 1.0000000
9   0.04927885 0.01802885 0.9326923
10  0.06106870 0.02290076 0.9160305
11  0.03846154 0.00000000 0.9615385
12  0.00000000 0.00000000 1.0000000
13  0.06028636 0.03843256 0.9012811
14  0.09646302 0.05144695 0.8520900
15  0.04444444 0.06666667 0.8888889

các ma trận này có tổng cộng 200 hàng.

như bạn có thể thấy trong mỗi tình huống, tổng của mỗi hàng là 1, điều đó trở thành bởi vì các giá trị là tỷ lệ phần trăm của tổng thể. ví dụ hàng 1 chứa 3,33% biến a, 1,11% biến 2 và 95,5% biến đổi 3. collomn đầu tiên cho biết năm mà các giá trị được đo.

Mục tiêu của tôi là đưa ra dự đoán trong 5 năm tới, vì vậy từ năm 200 đến 205.

Tôi có thể làm điều đó bằng cách thực hiện ba dự báo chuỗi thời gian bình thường. Nhưng đối với dự báo đó, tổng tiền không bao giờ bằng 1, điều này rất quan trọng. Normaly đang sử dụng các kỹ thuật như arima và làm mịn theo cấp số nhân.

Có ai biết một phương pháp để đưa ra một dự báo cho một vấn đề như vậy?


Bạn có biết nếu đây là các tỷ lệ rời rạc (ví dụ: số lượng đơn vị trong các loại A, B, & C, với tổng số đơn vị) hoặc tỷ lệ liên tục? Nếu chúng rời rạc, bạn có biết tổng số đơn vị tại mỗi thời điểm không?
gung - Phục hồi Monica

Có, các giá trị này đến từ các đơn vị riêng biệt, tôi đã tính các tỷ lệ này với việc sử dụng tổng số.
karmabob

Câu trả lời:


8

Bạn đang cố gắng dự báo một chuỗi thời gian thành phần . Đó là, bạn có ba thành phần bị hạn chế nằm giữa 0 và 1 và thêm tối đa 1.

Bạn có thể giải quyết vấn đề này bằng cách sử dụng làm mịn theo cấp số nhân tiêu chuẩn, bằng cách sử dụng một chuyển đổi logistic tổng quát thích hợp. Có một bài thuyết trình về điều này của Koehler, Snyder, Ord & Beaumont tại Hội nghị chuyên đề quốc tế về dự báo năm 2010 , đã biến thành một bài báo ( Snyder et al., 2017, Tạp chí dự báo quốc tế ).

Hãy đi bộ mặc dù điều này với dữ liệu của bạn. Đọc dữ liệu thành một ma trận obscủa chuỗi thời gian:

obs <- structure(c(0.03333333, 0.03810624, 0, 0.03776683, 0.06606607, 
0.03900325, 0.03125, 0, 0.04927885, 0.0610687, 0.03846154, 0, 
0.06028636, 0.09646302, 0.04444444, 0.01111111, 0.02309469, 0.03846154, 
0.03119869, 0.01201201, 0.02058505, 0.015625, 0, 0.01802885, 
0.02290076, 0, 0, 0.03843256, 0.05144695, 0.06666667, 0.9555556, 
0.9387991, 0.9615385, 0.9310345, 0.9219219, 0.9404117, 0.953125, 
1, 0.9326923, 0.9160305, 0.9615385, 1, 0.9012811, 0.85209, 0.8888889
), .Dim = c(15L, 3L), .Dimnames = list(NULL, c("Series 1", "Series 2", 
"Series 3")), .Tsp = c(1, 15, 1), class = c("mts", "ts", "matrix"
))

Bạn có thể kiểm tra xem cái này có hoạt động không bằng cách gõ

obs

εε

epsilon <- 0.0001
obs[obs<epsilon] <- epsilon

Bây giờ các hàng sửa đổi không tổng thành 1 nữa. Chúng ta có thể khắc phục điều đó (mặc dù tôi nghĩ rằng điều này có thể làm cho dự báo tồi tệ hơn):

obs <- obs/matrix(rowSums(obs),nrow=nrow(obs),ncol=ncol(obs),byrow=FALSE)

Bây giờ chúng tôi chuyển đổi dữ liệu theo trang 35 của bản trình bày:

zz <- log(obs[,-ncol(obs)]/obs[,ncol(obs)])
colnames(zz) <- head(colnames(obs),-1)
zz

Tải forecastgói và đặt chân trời 5 điểm thời gian:

library(forecast)
horizon <- 5

Bây giờ mô hình và dự báo cột dữ liệu được chuyển đổi theo cột. Ở đây tôi chỉ đơn giản là gọi ets(), mà sẽ cố gắng để phù hợp với một mô hình làm mịn theo cấp số nhân không gian trạng thái. Nó chỉ ra rằng nó sử dụng làm mịn theo cấp số nhân cho cả ba loạt, nhưng đặc biệt nếu bạn có nhiều hơn 15 khoảng thời gian, nó có thể chọn các mô hình xu hướng. Hoặc nếu bạn có dữ liệu hàng tháng, hãy giải thích cho R rằng bạn có tính thời vụ tiềm năng, bằng cách sử dụng ts()với frequency=12- sau đó ets()sẽ xem xét các mô hình theo mùa.

baz <- apply(zz,2,function(xx)forecast(ets(xx),horizon=horizon)["mean"])
forecasts.transformed <- cbind(baz[[1]]$mean,baz[[2]]$mean)

Tiếp theo, chúng tôi quay lại dự báo theo trang 38 của bản trình bày:

forecasts <- cbind(exp(forecasts.transformed),1)/(1+rowSums(exp(forecasts.transformed)))

Cuối cùng, hãy vẽ lịch sử và dự báo:

plot(obs[,1],ylim=c(0,1),xlim=c(1,nrow(obs)+horizon),type="n",ylab="")
for ( ii in 1:ncol(obs) ) {
    lines(obs[,ii],type="o",pch=19,col=ii)
    lines(forecasts[,ii],type="o",pch=21,col=ii,lty=2)
}
legend("left",inset=.01,lwd=1,col=1:ncol(obs),pch=19,legend=colnames(obs))

dự báo thành phần

EDIT: một bài báo về dự báo chuỗi thời gian thành phần vừa xuất hiện. Tôi chưa đọc nó, nhưng nó có thể được quan tâm.


Cảm ơn @stephan Kolassa, đó chính xác là điều tôi muốn nói. Có ai biết thời tiết có gói công cụ trong R để dự báo với chuỗi thời gian thành phần không.
karmabob

Tôi không nghĩ vậy và những tác giả này không nằm trong số những người "luôn luôn viết gói R đồng hành cho bất kỳ ấn phẩm nào". Nhưng cách tiếp cận của họ khá đơn giản và không cần nhiều hơn năm dòng để xử lý chuỗi thời gian của bạn, sau đó bạn có thể sử dụng các công cụ tiêu chuẩn (ví dụ: ets()trong forecastgói để làm mịn theo cấp số nhân không gian).
Stephan Kolassa

Kiến thức toán học của tôi không tốt lắm. bạn có thể giúp xử lý trước dữ liệu không? khi dữ liệu ở đúng định dạng tôi có thể thực hiện quá trình dự báo.
karmabob

Tôi đã đi lang thang nếu bạn đã tìm thấy một số thời gian để giúp tôi với vấn đề tôi gặp phải với chuỗi thời gian sáng tác?
karmabob

Bạn đi đây Xin lỗi nó đã mất một lúc; Tôi thực sự gặp khó khăn trong việc hiểu bài thuyết trình và phải xóa đầu.
Stephan Kolassa
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.