Làm thế nào để xử lý các khoảng trống / NaN trong dữ liệu chuỗi thời gian khi sử dụng Matlab cho tự động tương quan và mạng lưới thần kinh?


9

Tôi có một chuỗi thời gian đo (chiều cao - chuỗi một chiều). Trong giai đoạn quan sát, quá trình đo đã giảm xuống trong một số thời điểm. Vì vậy, dữ liệu kết quả là một vectơ với NaN nơi có các khoảng trống trong dữ liệu. Sử dụng MATLAB, điều này gây ra cho tôi một vấn đề khi tính toán tự động tương quan ( autocorr) và áp dụng các mạng thần kinh ( nnstart).

Những khoảng trống / NaN này nên được xử lý như thế nào? Tôi có nên loại bỏ chúng khỏi vector? Hoặc thay thế mục nhập của họ bằng một giá trị nội suy? (nếu vậy làm thế nào trong MATLAB)

Câu trả lời:


4

Tôi sẽ không chạm vào dữ liệu. Sử dụng công cụ này để tự tương quan với NaNs:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

"không chạm vào dữ liệu" có nghĩa là không xóa bất kỳ dữ liệu hoặc bước thời gian nào hoặc thay thế bằng 0 hoặc giá trị trung bình, nó sẽ làm tổn hại thông tin về sự phụ thuộc tuyến tính thời gian trễ cụ thể. Tôi cũng sẽ tránh mô phỏng các giá trị trong các khoảng trống, nếu bạn quan tâm đến tự động tương quan "SAMPLE", dù sao, ngay cả kỹ thuật mô phỏng tốt nhất cũng sẽ không thêm bất kỳ thông tin nào về tự động tương quan, dựa trên dữ liệu. Tôi đã mã hóa lại một phần các hàm tự tương quan matlab (liên kết ở trên) và các hàm tự tương quan một phần để xử lý NaN: bất kỳ cặp dữ liệu nào bao gồm NaN đều được loại trừ khỏi tính toán. Điều này được thực hiện cho mỗi độ trễ. Nó làm việc cho tôi. Bất kỳ đề nghị cũng được chấp nhận.


Chào mừng @Fabio: Bạn có thể vui lòng giải thích thêm về ý nghĩa của bạn với "không chạm vào dữ liệu" không? Bạn có nghĩa là không loại bỏ bất cứ điều gì? Nó cũng sẽ giúp giới thiệu nội dung bạn liên kết và giải thích lý do tại sao điều này giúp OP.
Momo

Xin chào Momo, cảm ơn vì nhận xét. "không chạm vào dữ liệu" có nghĩa là không xóa bất kỳ dữ liệu hoặc bước thời gian nào hoặc thay thế bằng 0 hoặc giá trị trung bình, nó sẽ làm tổn hại thông tin về sự phụ thuộc tuyến tính thời gian trễ cụ thể. Tôi đã mã hóa lại một phần các hàm tự tương quan matlab (liên kết ở trên) và các hàm tự tương quan một phần để xử lý NaN: bất kỳ cặp dữ liệu nào bao gồm NaN đều được loại trừ khỏi tính toán. Điều này được thực hiện cho mỗi độ trễ. Nó làm việc cho tôi. Bất kỳ đề nghị cũng được chấp nhận.
Fabio

3

Có một số thuật toán miễn nhiễm với các giá trị bị thiếu, vì vậy giải pháp ưa thích là tìm kiếm chúng (ví dụ R là acftự động tương quan).

Nói chung, cách để đi là chỉ loại bỏ dữ liệu với các quan sát bị thiếu (có thể rất đau đớn) hoặc chỉ để đánh giá các giá trị của chúng - có nghĩa là hàng xóm có thể đủ cho chuỗi trơn tru và các khoảng trống nhỏ, nhưng tất nhiên có rất nhiều phương pháp mạnh hơn khác, sử dụng spline, giá trị ngẫu nhiên / thường xuyên nhất, từ chối từ các mô hình, v.v.


2
Acf có giá trị bị thiếu được tính theo cách thông thường, nhưng các giá trị bị thiếu được 'bỏ qua' trong các khoản tiền (nghĩa là, công thức acf cho một độ trễ nhất định trông giống như một tổng chia cho một tổng, trong mỗi tổng đó các giá trị bị thiếu có thể được bỏ qua). Điều này không giống như loại bỏ các giá trị còn thiếu khỏi dữ liệu gốc. Vấn đề với matlab là nó không bỏ qua NaN, và bao gồm cả trong tính toán biến mọi thứ thành NaN.
Không có

1

Sử dụng Phát hiện can thiệp để áp đặt các giá trị còn thiếu khi khai thác cấu trúc ARIMA hữu ích và bất kỳ xu hướng thời gian địa phương và / hoặc thay đổi cấp độ nào.


1

Có 2 vấn đề ở đây. đầu tiên là cung cấp một khung số có ý nghĩa cho câu trả lời tự tương quan của bạn trong MATLAB. để điều này xảy ra, bạn cần kéo dài và / hoặc vá phần chuỗi thời gian của các vectơ dữ liệu của bạn ... thành phần 'toàn vẹn dữ liệu' này của vấn đề là cơ bản nhất.

thứ hai, bạn cần quyết định cách xử lý thành phần 'giá trị' trong vectơ của mình ... điều này phụ thuộc rất lớn vào ứng dụng cụ thể như những gì tốt nhất để giả định, (ví dụ, dấu thời gian nhỏ, thiếu và NaN tương ứng hoặc Nulls có thể được nội suy một cách an toàn từ các hàng xóm của nó ... trong các khoảng trống lớn hơn, đặt giá trị về 0 có thể an toàn hơn ... hoặc không đúng như khuyến nghị ở trên - rõ ràng để điều này có ý nghĩa, các khoảng trống lại phải tương đối 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.