อนุกรมเวลา 'การจัดกลุ่ม' ใน R


38

ฉันมีชุดข้อมูลอนุกรมเวลา แต่ละซีรี่ส์ครอบคลุมช่วงเวลาเดียวกันแม้ว่าวันที่ที่เกิดขึ้นจริงในแต่ละช่วงเวลาอาจไม่ตรงกับ

กล่าวคือถ้าหากต้องอ่านอนุกรมเวลาในเมทริกซ์ 2D มันจะมีลักษณะดังนี้:

date     T1   T2   T3 .... TN
1/1/01   100  59   42      N/A
2/1/01   120  29   N/A     42.5
3/1/01   110  N/A  12      36.82
4/1/01   N/A  59   40      61.82
5/1/01    05  99   42      23.68
...
31/12/01  100  59   42     N/A

etc 

ฉันต้องการเขียนสคริปต์ R ที่จะแยกอนุกรมเวลา {T1, T2, ... TN} ลงใน 'Families' ซึ่งครอบครัวถูกกำหนดเป็นชุดของซีรี่ส์ที่ "มีแนวโน้มที่จะเห็นอกเห็นใจ" ซึ่งกันและกัน

สำหรับส่วน 'การจัดกลุ่ม' ฉันจะต้องเลือก / กำหนดประเภทของการวัดระยะทาง ฉันไม่แน่ใจว่าจะทำอย่างไรกับเรื่องนี้เนื่องจากฉันจัดการกับอนุกรมเวลาและคู่ของชุดที่อาจเคลื่อนไหวด้วยความเห็นอกเห็นใจในช่วงเวลาหนึ่งอาจไม่ทำในช่วงเวลาต่อมา

ฉันแน่ใจว่ามีคนที่มีประสบการณ์ / ฉลาดกว่าฉันอยู่ที่นี่ดังนั้นฉันจะขอบคุณสำหรับคำแนะนำความคิดเห็นเกี่ยวกับอัลกอริทึม / การแก้ปัญหาที่จะใช้สำหรับการวัดระยะทางและวิธีใช้ในการจัดกลุ่มอนุกรมเวลา

ฉันเดาว่าไม่มีวิธีการทางสถิติที่แข็งแกร่งสำหรับการทำเช่นนี้ดังนั้นฉันจะสนใจมากที่จะเห็นว่าผู้คนเข้ามาใกล้ / แก้ปัญหานี้อย่างไร - คิดเหมือนนักสถิติ


1
คุณอาจสนใจคำตอบของคำถามนี้stats.stackexchange.com/q/2777/1036
Andy W


1
มีวิธีการทางสถิติตามกระบวนการ Dirichlet ซึ่งทำงานกับชุดข้อมูลที่ timepoints ไม่เหมือนกันสำหรับตัวอย่างทั้งหมด
Dario

คำตอบ:


24

ในการสตรีมข้อมูลและการขุดฐานข้อมูลอนุกรมเวลาแนวทางทั่วไปคือเปลี่ยนชุดข้อมูลให้เป็นตัวแทนสัญลักษณ์จากนั้นใช้เมทริกความคล้ายคลึงกันเช่นระยะทางแบบยุคลิดเพื่อจัดกลุ่มชุดข้อมูล ตัวแทนที่ได้รับความนิยมมากที่สุดคือ SAX (Keogh & Lin) หรือ iSAX ที่ใหม่กว่า (Shieh & Keogh):

หน้าเว็บด้านบนมีการอ้างอิงถึงตัวชี้วัดระยะทางและการจัดกลุ่ม Keogh และลูกเรือต่างก็ทำการวิจัยที่ทำซ้ำได้และเปิดกว้างสำหรับการปล่อยรหัสของพวกเขา ดังนั้นคุณสามารถส่งอีเมลถึงพวกเขาและถาม ฉันเชื่อว่าพวกเขามักจะทำงานใน MATLAB / C ++

มีความพยายามล่าสุดในการสร้างการใช้งาน Java และ R:

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


1
นี่เป็นจุดเริ่มต้นที่ดี ขอบคุณสำหรับลิงค์
morpheous

4
อึศักดิ์สิทธิ์ฉันคิดว่าหน้า SAX เป็นหน้าเว็บที่น่าเกลียดที่สุดที่ฉันเคยเห็น!
naught101

18

อีกวิธีในการพูดว่า "มีแนวโน้มที่จะเคลื่อนไหวด้วยความเห็นอกเห็นใจ" ก็คือ

มีวิธีการมาตรฐานสองวิธีในการคำนวณcointegration : วิธี Engle-Granger และขั้นตอน Johansen เหล่านี้จะถูกปกคลุมไปด้วย"การวิเคราะห์แบบบูรณาการและ Cointegrated อนุกรมเวลากับ R" (Pfaff 2008) และที่เกี่ยวข้อง R แพคเกจ Urca ฉันขอแนะนำหนังสือเล่มนี้หากคุณต้องการใช้วิธีการเหล่านี้ในอาร์

ฉันขอแนะนำให้คุณดูคำถามนี้เกี่ยวกับอนุกรมเวลาหลายตัวแปรและโดยเฉพาะอย่างยิ่งที่หลักสูตร Ruey Tsay ที่ U. Chicagoซึ่งรวมถึงรหัส R ที่จำเป็นทั้งหมด


ฉันได้พบการสังฆราชเมื่อไม่กี่ปีที่ผ่านมา - แต่มันก็ซับซ้อนสำหรับฉันมาก (ฉันไม่เข้าใจ!) ฉันหวังว่าจะมีวิธีการแก้ปัญหา (เช่นการปฏิบัติมากขึ้น) ในทางทฤษฎีน้อยลง ...
morpheous

3
วิธีการของ Engle-Granger นั้นไม่ซับซ้อนเป็นพิเศษ: คุณเพียงแค่นำส่วนที่เหลือของการถดถอยระหว่างสองซีรีส์และตรวจสอบว่ามันมีรูทยูนิตหรือไม่ มันใช้งานได้จริง: มันถูกใช้เป็นประจำเพื่อแก้ปัญหาในวงกว้าง ที่กล่าวว่าฉันคิดว่าคำตอบสำหรับคำถามใด ๆ ของคุณจะต้องมีความรู้ทางสถิติ ... (เช่นคุณควรเข้าใจสิ่งที่ต้องการ stationarity อิสระ ฯลฯ .)
เชน

มีวิธีที่ดีกว่าในการทำเช่นนี้มากกว่าการทดสอบซีรีย์สมาร์ทจับคู่สำหรับการรวมกลุ่ม (ด้วยอุดมคติในใจของซีรีย์คลัสเตอร์ด้วยกันหรือไม่) ข้อเสนอแนะนี้จะไม่ขึ้นอยู่กับข้อเท็จจริงที่ว่า ที่เริ่มมีอาการหรือไม่
Andy W

@ Andy: ฉันแน่ใจว่ามีวิธีที่ดีกว่าและฉันหวังว่าจะได้ยินเกี่ยวกับมัน นี่เป็นวิธีพื้นฐานที่ค่อนข้างดี
เชน

1
> ฉันไม่สามารถแนะนำสิ่งอื่นได้อีก แต่การใช้ cointegration นั้นมีความเปราะบางมากในทางปฏิบัติและไม่เหมาะสำหรับงานที่ต้องทำ: ในแต่ละขั้นตอนจะมีการรวมกลุ่มแบบลำดับชั้น อนุกรมต่อหนึ่ง (ค่าเฉลี่ยรวม)
user603

4

อนุกรมเวลาในการจัดกลุ่มจะทำกันโดยทั่วไปโดยประชากรพลศาสตร์โดยเฉพาะอย่างยิ่งผู้ที่ศึกษาแมลงเพื่อทำความเข้าใจแนวโน้มในการระบาดและการล่มสลาย หางานทำจากยิปซีมอด Spruce budoworm ด้วงสนภูเขาและต้นสนชนิดหนึ่ง Budmoth

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

ที่คุณจะมีปัญหาคือการกำหนดจำนวนของกลุ่ม (ครอบครัว) ที่จะใช้หลังจากที่คุณได้กลุ่มอนุกรมเวลา มีหลายวิธีในการเลือกตัดข้อมูลกลุ่ม แต่ที่นี่วรรณกรรมไม่ดี


1
คริสการรวมกลุ่มเป็นประจำจะไม่ลดลง คุณต้องยอมรับว่าซีรี่ส์มีความสัมพันธ์อย่างมากกับอดีตของตัวเองโดยการใส่แต่ละเป็นมิติของมันเอง (เช่นส่งผลให้เกิดมิติ N * T) หรือคุณทำการดึงมิติทั้งหมดเข้าด้วยกัน แต่จากนั้น ( เมื่อมีความสัมพันธ์สูงภายในชุด) คุณจะจบลงด้วยการรวมกลุ่มเดียว นอกจากนี้วิธีการจัดกลุ่มส่วนใหญ่จะไม่เหมาะสม / แนะนำสำหรับตัวแปรที่มีความสัมพันธ์สูง y1,t
user603

1
@ user603 คุณอธิบายได้หรือไม่ว่า "คุณต้องยอมรับว่าซีรีย์นั้นมีความสัมพันธ์อย่างมากกับอดีตของตัวเองโดยใส่ y1 แต่ละตัวเป็นมิติของมันเอง (เช่นส่งผลให้ขนาด N * T)" ได้ไหม?
B_Miner

2

ดูคำตอบของฉันคำถามที่คล้ายกันที่นี่ เรื่องสั้นสั้นทำการแปลงฟูริเยร์ที่รวดเร็วของข้อมูลทิ้งความถี่ซ้ำซ้อนถ้าข้อมูลอินพุตของคุณมีมูลค่าจริงแยกส่วนจริงและจินตภาพสำหรับแต่ละองค์ประกอบของการแปลงฟูริเยร์ที่รวดเร็วและใช้แพ็คเกจ Mclust ใน R เพื่อทำแบบจำลอง การจัดกลุ่มแบบอิงตามส่วนจริงและจินตภาพของแต่ละองค์ประกอบของแต่ละอนุกรมเวลา แพคเกจทำการปรับให้เหมาะสมโดยอัตโนมัติผ่านจำนวนกลุ่มและความหนาแน่น


0

คุณยังสามารถใช้แพ็คเกจ clustDDist ซึ่งทำวิธีการแบบผู้นำและวิธีการทำคลัสเตอร์แบบลำดับชั้นที่มีการวัดข้อผิดพลาดต่างกัน:

http://r-forge.r-project.org/projects/clustddist/

ระยะทางแบบยุคลิดกำลังสองสนับสนุนรูปแบบการแจกแจงที่มียอดเขาสูงชันหนึ่งและดังนั้นจึงวัด เป็นบางครั้งที่ต้องการ

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