Làm thế nào một trung bình di chuyển nên xử lý các điểm dữ liệu bị thiếu?


10

Tôi đang viết một chương trình tính trung bình trọng lượng của người dùng trong các ngày khác nhau. Tôi đang dự định sử dụng mức trung bình di động 5 điểm (ngày hiện tại, hai trước và hai sau). Đôi khi, một điểm dữ liệu bị thiếu trong 1-2 ngày. Những trường hợp này thường được xử lý như thế nào?

(nếu tôi có thể sử dụng bộ lọc thông thấp tốt hơn, tôi sẽ đề xuất các đề xuất)


Điều đầu tiên mà nói đến cái tâm là suy các điểm trước khi sử dụng di chuyển trung bình lọc
someguy

3
Thực sự nhiều hơn một câu hỏi thống kê hơn một câu hỏi xử lý tín hiệu, ít nhất là trong trường hợp không có nhiều bối cảnh. Nhưng bạn có thể chỉ cần bỏ qua việc tính toán lại trung bình, sử dụng mức trung bình hiện tại làm giá trị thay thế hoặc chờ các phép đo tiếp theo và thử nội suy, tuyến tính hoặc cách khác.
Daniel R Hicks

Như những người khác lưu ý, đây thường sẽ là một quyết định dành riêng cho ứng dụng dựa trên việc bạn xem xét cách bạn muốn đầu ra được lọc hoạt động. Hầu hết lý thuyết xử lý tín hiệu dựa trên các mẫu có khoảng cách đều nhau, do đó bạn sẽ không nhận được một cái gì đó có thể được gọi là "câu trả lời đúng".
Jason R

@JasonR Tôi lọc để đưa ra ước tính hợp lý hơn về trọng lượng của người dùng tại thời điểm đó. Dữ liệu được lấy mẫu thống nhất (tần số lấy mẫu = 1 / ngày), ngoại trừ một số điểm dữ liệu bị thiếu.
Anna

@Anna: Phải, tôi hiểu lý do tại sao bạn lọc dữ liệu. Tuy nhiên, dữ liệu của bạn không được lấy mẫu thống nhất do bạn thiếu điểm dữ liệu. Do đó, như tôi đã lưu ý, bạn có thể không tìm thấy câu trả lời lý thuyết thỏa đáng cho vấn đề của mình. Một giải pháp đặc biệt mà bạn cho là "có ý nghĩa" cho ứng dụng cụ thể của bạn có lẽ sẽ là câu trả lời.
Jason R

Câu trả lời:


4

Như một ấn tượng chung, hồi quy sẽ hoạt động tốt hơn trong việc tự động điều chỉnh các điểm còn thiếu thay vì bộ lọc trung bình di động mà bạn đã chọn.

Nếu bạn sử dụng AR (bộ lọc hồi quy tự động) hoặc bộ lọc ARMA - bạn có thể có giá trị dự đoán của đầu ra mẫu dựa trên các đầu vào trong quá khứ.

X^[i]=ωkx[i1k]+η

X^[i]

Xmax,Xminx[i1]X^[i]

Có nhiều lựa chọn thay thế khác - bạn có thể giữ

X^[i]=X[i1]
X^[i]=Long term sample average of X 

Về cơ bản, đây là một trò chơi dự đoán giá trị đã nói và tiếp tục sử dụng nó như một tín hiệu. Tất nhiên, dự đoán sẽ không giống như một mẫu ban đầu nhưng đó không phải là cái giá bạn phải trả cho việc không có dữ liệu.


2
Tại sao bạn nói rằng hồi quy sẽ làm việc tốt hơn trong phù hợp? Cảm ơn
Spacey

3

Một phương pháp đơn giản và chung để điền dữ liệu bị thiếu, nếu bạn có dữ liệu hoàn chỉnh, là sử dụng
hồi quy tuyến tính . Giả sử bạn có 1000 lượt chạy 5 liên tiếp mà không thiếu.
Thiết lập vectơ 1000 x 1 y và 1000 x 4 ma trận X:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

Hồi quy sẽ cung cấp cho bạn 4 số abcd cho kết quả phù hợp nhất

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

cho 1000 hàng dữ liệu của bạn - dữ liệu khác nhau, abc khác nhau d.
Sau đó, bạn sử dụng các abcd này để ước tính (dự đoán, nội suy) thiếu wt [0].
(Đối với trọng lượng của con người, tôi hy vọng abcd sẽ ở khoảng 1/4.)

Trong python, xem numpy.linalg.lstsq .

.


1

[a,b,c,?,e]

a+b+c+e4

1

tôi nghĩ cách đơn giản nhất là "dự đoán" ngày cho "toàn bộ" trong chuỗi thời gian bằng cách sử dụng dữ liệu đi trước. sau đó bạn có thể sử dụng thời gian này để ước tính tham số. (sau đó bạn có thể tiến hành và đánh giá lại các giá trị còn thiếu bằng cách sử dụng các tham số ước tính của mình từ toàn bộ thời gian (đã hoàn thành) và lặp lại điều này cho đến khi chúng hội tụ). tuy nhiên, bạn nên lấy giới hạn tin cậy từ số lượng điểm dữ liệu thực mà bạn có, chứ không phải từ độ dài của các cơ sở dữ liệu đã hoàn thành.

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.