วิธีจัดการกับ gaps / NaNs ในข้อมูลอนุกรมเวลาเมื่อใช้ Matlab สำหรับ autocorrelation และ neural Networks


9

ฉันมีอนุกรมเวลาของการวัด (ซีรีย์ความสูงหนึ่งมิติ) ในช่วงเวลาการสังเกตกระบวนการวัดลงไปบางจุด ดังนั้นข้อมูลที่ได้คือเวกเตอร์ที่มี NaNs ซึ่งมีช่องว่างในข้อมูล การใช้ MATLAB ทำให้ฉันมีปัญหาเมื่อคำนวณค่าความสัมพันธ์อัตโนมัติ ( autocorr) และการใช้เครือข่ายประสาท ( nnstart)

Gaps / NaN เหล่านี้ควรถูกจัดการอย่างไร? ฉันควรนำสิ่งเหล่านี้ออกจากเวกเตอร์หรือไม่ หรือแทนที่รายการของพวกเขาด้วยค่าที่แก้ไขแล้ว? (ถ้าเป็นเช่นนั้นใน MATLAB)

คำตอบ:


4

ฉันจะไม่แตะต้องข้อมูลเลย ใช้สิ่งนี้สำหรับความสัมพันธ์อัตโนมัติกับ NaNs:

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

"ไม่ได้สัมผัสข้อมูล" หมายความว่าจะไม่ลบข้อมูลหรือขั้นตอนเวลาใด ๆ หรือแทนที่ด้วย 0 หรือค่าเฉลี่ยมันจะทำให้ข้อมูลเกี่ยวกับการพึ่งพาเชิงเส้นในช่วงเวลาล่าช้า ฉันจะหลีกเลี่ยงการจำลองค่าในช่องว่างถ้าคุณมีความสนใจใน "อัตโนมัต" ตัวอย่างแม้เทคนิคการจำลองที่ดีที่สุดจะไม่เพิ่มข้อมูลใด ๆ เพิ่มเติมเกี่ยวกับออโตคอร์สัมพันธ์ ฉัน recoded ส่วนหนึ่งของ MATLAB (ลิงก์ด้านบน) และฟังก์ชั่นความสัมพันธ์อัตโนมัติบางส่วนเพื่อจัดการกับ NaNs: คู่ข้อมูลใด ๆ รวมถึง NaNs จะถูกแยกออกจากการคำนวณ สิ่งนี้ทำสำหรับแต่ละความล่าช้า มันใช้งานได้สำหรับฉัน ข้อเสนอแนะใด ๆ เป็นที่ยอมรับกัน


ยินดีต้อนรับ @Fabio: คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับความหมายของคำว่า "ไม่แตะต้องข้อมูล" ได้ไหม? คุณหมายถึงไม่ลบอะไรเลยใช่ไหม นอกจากนี้ยังช่วยแนะนำเนื้อหาที่คุณเชื่อมโยงและอธิบายว่าทำไมสิ่งนี้ถึงช่วย OP ได้
Momo

สวัสดี Momo ขอบคุณสำหรับความคิดเห็น "ไม่ได้สัมผัสข้อมูล" หมายความว่าจะไม่ลบข้อมูลหรือขั้นตอนเวลาใด ๆ หรือแทนที่ด้วย 0 หรือค่าเฉลี่ยมันจะทำให้ข้อมูลเกี่ยวกับการพึ่งพาเชิงเส้นในช่วงเวลาล่าช้า ฉัน recoded ส่วนหนึ่งของ MATLAB (ลิงก์ด้านบน) และฟังก์ชั่นความสัมพันธ์อัตโนมัติบางส่วนเพื่อจัดการกับ NaNs: คู่ข้อมูลใด ๆ รวมถึง NaNs จะถูกแยกออกจากการคำนวณ สิ่งนี้ทำสำหรับแต่ละความล่าช้า มันใช้งานได้สำหรับฉัน ข้อเสนอแนะใด ๆ เป็นที่ยอมรับกัน
Fabio

3

มีอัลกอริธึมบางตัวที่มีภูมิคุ้มกันต่อค่าที่หายไปดังนั้นทางออกที่ต้องการคือมองหาพวกมัน (เช่น R's acfเพื่อหาค่าอัตโนมัติ)

โดยทั่วไปแล้ววิธีที่จะไปคือเพียงแค่ทิ้งข้อมูลด้วยการสังเกตที่หายไป (อาจจะเจ็บปวดมาก) หรือเพียงแค่ใส่ค่าของพวกเขา - ค่าเฉลี่ยของเพื่อนบ้านอาจเพียงพอสำหรับอนุกรมที่ราบรื่นและช่องว่างเล็ก ๆ แต่มีแน่นอน เหลือเฟือของวิธีการที่มีประสิทธิภาพมากขึ้นอื่น ๆ โดยใช้เส้นโค้งค่าสุ่ม / บ่อยที่สุดการใส่ความจากโมเดล ฯลฯ


2
acf ที่มีค่าที่หายไปถูกคำนวณในวิธีปกติ แต่ค่าที่ขาดหายไปจะถูก 'ข้าม' ในผลรวม (นั่นคือสูตร acf สำหรับความล่าช้าที่กำหนดดูเหมือนว่าผลรวมหารด้วยผลรวมในแต่ละผลรวมเหล่านั้นค่าที่หายไปสามารถ ถูกข้ามไป) สิ่งนี้ไม่เหมือนกับการลบค่าที่หายไปจากข้อมูลดั้งเดิม ปัญหากับ matlab คือมันไม่ข้าม NaN และรวมถึงในการคำนวณเปลี่ยนทุกอย่างเป็น NaN
ศูนย์

1

ใช้การตรวจจับการแทรกสอดเพื่อกำหนดค่าที่หายไปซึ่งใช้ประโยชน์จากโครงสร้าง ARIMA ที่มีประโยชน์และแนวโน้มเวลาท้องถิ่นและ / หรือการเลื่อนระดับ


1

มี 2 ​​ปัญหาที่นี่ ข้อแรกคือการให้กรอบตัวเลขที่มีความหมายสำหรับคำตอบของคุณโดยอัตโนมัติใน MATLAB สิ่งนี้จะเกิดขึ้นคุณต้องยืดและ / หรือแก้ไขส่วนอนุกรมเวลาของเวกเตอร์ข้อมูลของคุณ ... องค์ประกอบ 'ความสมบูรณ์ของข้อมูล' ของปัญหาเป็นพื้นฐานที่สุด

ประการที่สองคุณต้องตัดสินใจว่าจะจัดการกับองค์ประกอบ 'ค่า' ของเวกเตอร์ของคุณได้อย่างไรซึ่งขึ้นอยู่กับขอบเขตขนาดใหญ่ของแอปพลิเคชันเฉพาะว่ามีอะไรดีที่สุดที่จะคาดเดา (เช่นขนาดเล็กการประทับเวลาที่ขาดหายไป หรือ Nulls อาจถูกสอดแทรกอย่างปลอดภัยจากเพื่อนบ้าน ... ในช่องว่างขนาดใหญ่การตั้งค่าเป็นศูนย์อาจปลอดภัยกว่า ... หรือใส่ตามที่แนะนำข้างต้น - เห็นได้ชัดว่าสิ่งนี้มีความหมายช่องว่างอีกครั้งจะต้องมีขนาดค่อนข้างเล็ก) .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.