Kết hợp hai chuỗi thời gian bằng cách lấy trung bình các điểm dữ liệu


10

Tôi muốn kết hợp dự báo và dự phòng (viz. Các giá trị quá khứ dự đoán) của dữ liệu chuỗi thời gian được đặt thành một chuỗi thời gian bằng cách giảm thiểu Lỗi Dự đoán bình phương trung bình.

Giả sử tôi có chuỗi thời gian từ 2001-2010 với khoảng cách cho năm 2007. Tôi đã có thể dự báo năm 2007 bằng cách sử dụng dữ liệu 2001-2007 (dòng màu đỏ - gọi là ) và để chiếu lại bằng dữ liệu 2008-2009 (màu xanh nhạt dòng - gọi nó là ).Y bYfYb

Tôi muốn kết hợp các điểm dữ liệu của và thành một điểm dữ liệu được liệt kê Y_i cho mỗi tháng. Lý tưởng nhất là tôi muốn để có được trọng lượng như vậy mà nó làm giảm thiểu các Dự đoán Lỗi Mean Squared (MSPE) của . Nếu điều này là không thể, làm thế nào tôi có thể tìm trung bình giữa hai điểm dữ liệu của chuỗi thời gian?Y b w Y iYfYbwYi

Yi=wYf+(1w)Yb

Ví dụ nhanh:

tt_f <- ts(1:12, start = 2007, freq = 12)
tt_b <- ts(10:21, start=2007, freq=12)

tt_f
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007   1   2   3   4   5   6   7   8   9  10  11  12
tt_b
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007  10  11  12  13  14  15  16  17  18  19  20  21

Tôi muốn nhận (chỉ hiển thị mức trung bình ... Tối thiểu hóa MSPE)

tt_i
     Jan Feb Mar Apr May Jun  Jul  Aug  Sep  Oct  Nov  Dec
2007 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5

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


Mô hình dự báo (arima, ets, một số khác) là gì? (+1) cho đề xuất tiếp cận, tôi đã từng nghĩ về cách đó, nhưng vẫn ở trong Kỳ vọng tối đa hóa sau khi nội suy. Về nguyên tắc, thời gian học có thể quan trọng, để đưa ra trọng số cao hơn cho mô hình dựa trên thông tin lớn hơn (dự báo màu đỏ trong hình). Một số tiêu chí chính xác cũng có thể có khả năng hữu ích để tạo ra các trọng số, không liên kết một cách dứt khoát với độ dài chuỗi thời gian.
Dmitrij Celov

Xin lỗi về việc rời khỏi mô hình dự báo. Một ở trên chỉ đơn giản là sử dụng predictchức năng của gói dự báo. Tuy nhiên, tôi nghĩ rằng tôi sẽ sử dụng mô hình dự báo HoltWinters để dự đoán và chiếu lại. Tôi có chuỗi thời gian với ít <50, và đã thử dự báo hồi quy Poisson - nhưng vì một số lý do để dự đoán rất yếu.
OSlOlSO

Dữ liệu cho các số đếm dường như có một sự phá vỡ chính xác tại nơi bạn hiển thị, các dự báo và các thông số ngược cũng minh họa điều tương tự. Trong Poisson bạn đã thực hiện hồi quy theo xu hướng thời gian ? tlog(counts)t
Dmitrij Celov

Bạn có chỉ đếm hoặc một số chuỗi thời gian liên quan bổ sung mà không có NAgiá trị? Có vẻ như việc tạo ra thời gian học MSPE có thể gây hiểu lầm vì các giai đoạn phụ 'được mô tả tốt bởi các xu hướng tuyến tính, nhưng trong giai đoạn bị bỏ lỡ, một sự sụt giảm ở đâu đó xảy ra, và nó thực sự có thể là bất kỳ điểm nào. Cũng lưu ý rằng vì các dự báo là cộng tuyến trong xu hướng, trung bình của chúng sẽ đưa ra hai phá vỡ cấu trúc thay vì dường như một.
Dmitrij Celov

Xin lỗi vì chỉ nhận lại bây giờ @Dmitij. Cái 'phá vỡ' mà bạn đang nói đến là gì? Tôi đã làm nhật ký (tính) cho hồi quy GLM. Và có một tập hợp con của dữ liệu đếm có số lượng nhỏ hơn <6 sẽ buộc tôi sử dụng nó. Tôi chỉ có số lượng. Nếu bạn nhìn vào câu hỏi này, bạn sẽ có một ý tưởng về dữ liệu mà tôi có. Số lượng trên chỉ dành cho Agegroup '15up'. Nếu điều này có ý nghĩa?
OSlOlSO

Câu trả lời:


0

Giả sử bạn có Lỗi dự đoán bình phương cho dự báo và dự phòng riêng lẻ, tôi sẽ khuyên bạn điều này: Hãy là một vectơ có độ dài 12, hãy để m là tháng mà bạn quan tâm.

w=rep(NA,12);
for(w in 1:12){
w[m]=SPE_Backcast[m]/(SPE_Backcast[m]+SPE_Forecast[m]);
}

Bây giờ w là trọng số cho dự báo và 1-w là trọng số cho backcast.


Điều này dường như chỉ trọng số giá trị thấp nhất cao hơn (đến mức các số âm có thể có trọng số> 1). Vấn đề ở đây là gì? Ngoài ra, dòng hais/w/m/
naught 101

Làm thế nào bạn sẽ nhận được lỗi dự đoán bình phương tiêu cực?
Owe Jessen

3

Mục đích của bạn là thực hiện việc làm mịn khoảng thời gian cố định (FI) của chuỗi thời gian. Giá trị được làm mịn của quan sát tại thời điểm được xác định là kỳ vọng có điều kiện trong đó ký hiệu dành cho vectơ của các quan sát từ thời gian đến thời gian . Ở trên, khoảng cách được giả sử là khoảng thời gian từ đến và là toàn bộ chiều dài của chuỗi. Thời gian nằm trong khoảng trống và kỳ vọng có thể được viếtY t : = E ( Y t | Y 1 : r ,t Y u : v :=[ Y u ,

Y^t:=E(Yt|Y1:r,Ys:n)
u v r + 1 s - 1 n t Y t | 1 : r , s : nYu:v:=[Yu,Yu+1,,Yv]uvr+1s1ntY^t|1:r,s:n để nhớ lại bản chất có điều kiện của nó.

Giá trị được làm mịn không có dạng đơn giản mà bạn đoán. Đối với chuỗi thời gian trạm gaussian có cấu trúc hiệp phương đã biết, có thể tìm thấy cho trong khoảng cách bằng cách giải hệ phương trình tuyến tính. tY^tt

Khi mô hình chuỗi thời gian có thể được đặt ở dạng Không gian trạng thái (SS), làm mịn FI là một hoạt động tiêu chuẩn dựa trên bộ lọc Kalman và có thể được thực hiện, ví dụ như sử dụng các hàm R có sẵn. Bạn chỉ cần xác định rằng các giá trị trong khoảng trống bị thiếu. Thuật toán làm mịn ước tính trạng thái ẩn chứa tất cả các thông tin liên quan về cho trong khoảng trống. Các mô hình ARIMA có thể được đặt ở dạng SS.αtYtt

Điều thú vị là, làm mịn FI có thể được viết dưới dạng kết hợp của hai bộ lọc: một tiến và lùi, dẫn đến một công thức của loại bạn mong đợi, nhưng đối với ước tính trạng thái ẩn (dự báo và backcast), nhưng không cho quan sát . Điều này được gọi là lọc Rauch-Tung-Striebel .αtYt

Ít nhất là trong các phiên bản nhân, các quy trình dự báo 'ad hoc' như Holt-Winters dựa trên các mô hình ngẫu nhiên không có thuật toán FI đơn giản vì chúng không thể được đặt ở dạng SS. Công thức làm mịn có thể có thể được xấp xỉ bằng cách sử dụng mô hình SS, nhưng việc sử dụng các mô hình Chuỗi thời gian cấu trúc với các phép biến đổi nhật ký sẽ đơn giản hơn nhiều . Các chức năng 'KalmanSmooth', 'tsSmooth' và 'StructTS' của gói thống kê R có thể thực hiện công việc. Bạn nên xem những cuốn sách của Harvey hoặc Durbin và Koopman được trích dẫn trong các trang trợ giúp R. Thuật toán làm mịn có thể cung cấp phương sai có điều kiện cho ước tínhYtvà có thể được sử dụng để xây dựng các khoảng làm mịn, thường có xu hướng lớn hơn ở giữa khoảng cách. Tuy nhiên, lưu ý rằng việc ước tính Mô hình Stuctural có thể khó khăn.

AP <- log10(AirPassengers) 
## Fit a Basic Structural Model
fit <- StructTS(AP, type = "BSM")

## Fit with a gap
AP.gap <- AP
AP.gap[73:96] <- NA
fit.gap <- StructTS(AP.gap, type = "BSM", optim.control = list(trace = TRUE))

# plot in orginal (non-logged) scale
plot(AirPassengers, col = "black", ylab = "AirPass")
AP.missing <- ts(AirPassengers[73:96], start=1955, , freq=12)
lines(AP.missing, col = "grey", lwd = 1)

## smooth and sum 'level' and 'sea' to retrieve series
sm <- tsSmooth(fit.gap)
fill <- apply(as.matrix(sm[ , c(1,3)]), 1, sum)
AP.fill <- ts(fill[73:96], start=1955, , freq=12)
lines(10^AP.fill, col = "red", lwd = 1)

Làm mịn


2

Tôi thấy cách tiếp cận được đề xuất của bạn, về việc sử dụng các phương tiện của các diễn viên trước và sau, thật thú vị.

Một điều có thể đáng để chỉ ra là trong bất kỳ hệ thống nào thể hiện cấu trúc hỗn loạn, các dự báo có khả năng chính xác hơn trong khoảng thời gian ngắn hơn. Đó không phải là trường hợp của tất cả các hệ thống, ví dụ, một con lắc bị ẩm có thể được mô hình hóa bởi một chức năng với chu kỳ sai, trong trường hợp đó, tất cả các dự báo trung hạn có thể bị sai, trong khi tất cả các dự báo dài hạn sẽ xảy ra rất chính xác, khi hệ thống hội tụ về không. Nhưng theo tôi, từ biểu đồ trong câu hỏi, đây có thể là một giả định hợp lý để thực hiện ở đây.

Điều đó ngụ ý rằng chúng ta có thể tốt hơn nên dựa nhiều hơn vào dữ liệu dự báo cho phần trước của giai đoạn bị thiếu và nhiều hơn vào dữ liệu truyền lại cho phần sau. Cách đơn giản nhất để làm điều này là sử dụng trọng số giảm tuyến tính cho dự báo và ngược lại cho dự phòng:

> n <- [number of missing datapoints] 
> w <- seq(1, 0, by = -1/(n+1))[2:(n+1)]

Điều này cho một chút trọng lượng của backcast trên phần tử đầu tiên. Bạn cũng có thể sử dụng n-1, không có các mục con ở cuối, nếu bạn chỉ muốn sử dụng giá trị dự báo trên điểm được nội suy đầu tiên.

> w
 [1] 0.92307692 0.84615385 0.76923077 0.69230769 0.61538462 0.53846154
 [7] 0.46153846 0.38461538 0.30769231 0.23076923 0.15384615 0.07692308

Tôi không có dữ liệu của bạn, vì vậy, hãy thử dữ liệu này trên bộ dữ liệu AirPasbah trong R. Tôi sẽ chỉ xóa khoảng thời gian hai năm gần trung tâm:

> APearly <- ts(AirPassengers[1:72], start=1949, freq=12)
> APlate <- ts(AirPassengers[97:144], start=1957, freq=12)
> APmissing <- ts(AirPassengers[73:96], start=1955, freq=12)
> plot(AirPassengers)
# plot the "missing data" for comparison
> lines(APmissing, col="#eeeeee")
# use the HoltWinters algorithm to predict the mean:
> APforecast <- hw(APearly)[2]$mean
> lines(APforecast, col="red")
# HoltWinters doesn't appear to do backcasting, so reverse the ts, forecast, 
# and reverse again (feel free to edit if there's a better process)
> backwards <- ts(rev(APlate), freq=12)
> backcast <- hw(backwards)[2]$mean
> APbackcast <- ts(rev(backcast), start=1955, freq=12)
> lines(APbackcast, col='blue')
# now the magic: 
> n <- 24 
> w <- seq(1, 0, by=-1/(n+1))[2:(n+1)]
> interpolation = APforecast * w + (1 - w) * APbackcast
> lines(interpolation, col='purple', lwd=2)

Và có nội suy của bạn.

biểu đồ đầu ra

Tất nhiên, nó không hoàn hảo. Tôi đoán đó là kết quả của các mẫu trong phần trước của dữ liệu khác với các mẫu ở phần sau (đỉnh Jul-Aug không quá mạnh trong những năm trước). Nhưng như bạn có thể thấy từ hình ảnh, rõ ràng nó tốt hơn là chỉ dự báo hoặc quay lại một mình. Tôi sẽ tưởng tượng rằng dữ liệu của bạn có thể nhận được kết quả kém tin cậy hơn một chút, vì không có sự thay đổi mạnh mẽ theo mùa như vậy.

Tôi đoán là bạn cũng có thể thử điều này bao gồm cả khoảng tin cậy, nhưng tôi không chắc về tính hợp lệ của việc thực hiện đơn giản như thế này.

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.