เป็นไปได้ไหมที่จะทำการจัดกลุ่มอนุกรมเวลาตามรูปร่างโค้ง


47

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

n.quarters <- 100
n.stores <- 20
if (exists("test.data")){
  rm(test.data)
}
for (i in 1:n.stores){
  interval <- runif(1, 1, 200)
  new.df <- data.frame(              
    var0 = interval + c(0, cumsum(runif(49, -5, 5))),
    date = seq.Date(as.Date("1990-03-30"), by="3 month", length.out=n.quarters),
    store = rep(paste("Store", i, sep=""), n.quarters))
  if (exists("test.data")){
    test.data <- rbind(test.data, new.df)    
  } else {
    test.data <- new.df
  }
}
test.data$store <- factor(test.data$store)

ฉันต้องการทราบว่าฉันสามารถจัดกลุ่มตามรูปร่างของส่วนโค้งในอาร์ฉันได้พิจารณาวิธีการต่อไปนี้:

  1. สร้างคอลัมน์ใหม่โดยแปลง var0 ของแต่ละร้านเป็นค่าระหว่าง 0.0 ถึง 1.0 สำหรับอนุกรมเวลาทั้งหมด
  2. จัดกลุ่มเส้นโค้งที่เปลี่ยนแปลงเหล่านี้โดยใช้kmlแพ็กเกจใน R

ฉันมีสองคำถาม:

  1. นี่เป็นวิธีการสำรวจที่สมเหตุสมผลหรือไม่?
  2. ฉันจะแปลงข้อมูลเป็นรูปแบบข้อมูลระยะยาวที่kmlจะเข้าใจได้อย่างไร ตัวอย่าง R ใด ๆ จะได้รับการชื่นชมมาก!

2
คุณอาจได้รับแนวคิดเล็กน้อยจากคำถามก่อนหน้านี้ในการจัดกลุ่ม trajectories data longitudinal data แต่ละเส้นstats.stackexchange.com/questions/2777/…
Jeromy Anglim

1
@Jeromy Anglin ขอบคุณสำหรับลิงค์ คุณโชคดีkmlไหม
fmark

ฉันได้ดูอย่างรวดเร็ว แต่ในขณะนี้ฉันกำลังใช้การวิเคราะห์กลุ่มแบบกำหนดเองตามคุณลักษณะที่เลือกของอนุกรมเวลาแต่ละรายการ (เช่นค่าเริ่มต้นค่าเริ่มต้นความแปรปรวนการปรากฏตัวของการเปลี่ยนแปลงอย่างกะทันหันเป็นต้น)
Jeromy Anglim

ซ้ำกันหรือไม่ stats.stackexchange.com/questions/3238/…
Rob Hyndman

@Rob คำถามนี้ดูเหมือนจะไม่ได้มีช่วงเวลาที่ผิดปกติ แต่แน่นอนว่าพวกเขาอยู่ใกล้กัน (ฉันไม่ได้นึกถึงคำถามอื่น ๆ ในเวลาที่ฉันเขียน)
chl

คำตอบ:


26

มีการพูดคุยกันหลายทิศทางสำหรับการวิเคราะห์ข้อมูลระยะยาวในลิงก์ที่ให้บริการโดย @Jeromy ดังนั้นฉันขอแนะนำให้คุณอ่านอย่างระมัดระวังโดยเฉพาะในการวิเคราะห์ข้อมูลการทำงาน ลอง googling สำหรับ "การจัดกลุ่มการทำงานของยาวข้อมูล" หรือกล่องเครื่องมือ PACE Matlab ซึ่งเป็นห่วงโดยเฉพาะกับการจัดกลุ่มแบบตามวิถีตัวอย่างสม่ำเสมอ (Peng และMüller, การจัดกลุ่มตามระยะทางของกระบวนการสุ่มสังเกตเบาบางกับการใช้งานเพื่อการประมูลออนไลน์ , พงศาวดารของสถิติประยุกต์ 2551 2: 1056) ฉันสามารถจินตนาการได้ว่าอาจมีกรอบสถิติที่ดีสำหรับอนุกรมเวลาทางการเงิน แต่ฉันไม่รู้เรื่องนั้น

kmltniyi=(yi1,yi2,,yit)d(yi,yj)=t1k=1t(yikyjk)2. ข้อมูลที่ขาดหายไปได้รับการจัดการผ่านการปรับเปลี่ยนเล็กน้อยของการวัดระยะทางก่อนหน้า (การปรับ Gower) ที่เกี่ยวข้องกับรูปแบบการใส่ร้ายคล้ายเพื่อนบ้านที่ใกล้ที่สุด (สำหรับการคำนวณเกณฑ์ Calinski) เนื่องจากฉันไม่ได้แสดงตัวตนว่าข้อมูลจริงของคุณเป็นอย่างไรฉันไม่สามารถบอกได้ว่าจะใช้งานได้หรือไม่ อย่างน้อยมันทำงานกับเส้นโค้งการเจริญเติบโตตามยาวรูปร่าง "พหุนาม" แต่ฉันสงสัยว่ามันจะช่วยให้คุณตรวจสอบรูปแบบที่เฉพาะเจาะจงมาก (เช่น local minima / maxima ณ จุดเวลาที่ระบุด้วยเวลา - จุดต่างกันระหว่างกลุ่ม ตัวอย่าง). หากคุณมีความสนใจในการจัดกลุ่มเส้นโค้งที่ไม่ตรงแนวคุณอาจต้องมองหาวิธีการแก้ปัญหาอื่น ๆ อย่างแน่นอน การจัดกลุ่มและการจัดตำแหน่งที่ใช้งานได้จาก Sangalli et al. และการอ้างอิงในนั้นอาจเป็นจุดเริ่มต้นที่ดี

kmlclusterizLongDataidt

library(lattice)
xyplot(var0 ~ date, data=test.data, groups=store, type=c("l","g"))

tw <- reshape(test.data, timevar="date", idvar="store", direction="wide")
parallel(tw[,-1], horizontal.axis=F, 
         scales=list(x=list(rot=45, 
                            at=seq(1,ncol(tw)-1,by=2), 
                            labels=substr(names(tw[,-1])[seq(1,ncol(tw)-1,by=2)],6,100), 
                            cex=.5)))

library(kml)
names(tw) <- c("id", paste("t", 1:(ncol(tw)-1)))
tw.cld <- as.cld(tw)
cld.res <- kml(tw.cld,nbRedrawing=5)
plot(tw.cld)

ตัวเลขสองร่างถัดไปคือข้อมูลจำลองดิบและโซลูชันห้าคลัสเตอร์ (ตามเกณฑ์ Calinski ซึ่งใช้ในแพ็คเกจfpc ) ฉันจะไม่แสดงรุ่นปรับขนาด

ข้อความแสดงแทน

ข้อความแสดงแทน


1
ขอบคุณสำหรับคำตอบโดยละเอียดของคุณ ฉันได้kmlทำงานกับข้อมูลของฉันแล้ว แต่อย่างที่คุณแนะนำมันคือการจัดกลุ่มส่วนใหญ่ขึ้นอยู่กับขนาดแทนที่จะเป็นรูปโค้งดังนั้นฉันจึงลองทำขั้นตอนการประมวลผลล่วงหน้าสองสามขั้นตอนเพื่อดูว่าฉันสามารถปรับปรุงเรื่องต่างๆได้หรือไม่ ผลงานของ Sangalli และคณะ ดูมีแนวโน้มมากสำหรับสิ่งที่ฉันต้องการทำ - ฉันไม่สามารถหาวิธีการใช้งานของพวกเขาได้ ฉันอาจไม่มีเวลาในการสร้างการใช้งานของตัวเองสำหรับโครงการนี้ แต่อย่างไรก็ตาม คุณตระหนักถึงการใช้งาน FOSS หรือไม่?
fmark

@fmark ไม่มีการนำ OSS มาใช้กับความรู้ของฉัน (งานนี้ค่อนข้างเร็ว ๆ นี้); พวกเขาใช้ k-mean และ k-medoids ซึ่งทั้งคู่มีอยู่ใน R ในความคิดของฉันส่วนที่สำคัญที่สุดคือการสร้างเทมเพลตโค้งและใช้ฟังก์ชั่นการแปรปรวน สำหรับสิ่งนั้นคุณสามารถหาข้อมูลเพิ่มเติมได้โดยดูที่การวิเคราะห์ morphometry / procruste หรือค้นหารหัสของกล่องเครื่องมือ Matlab PACE (แต่ควรเต็ม EM หรือสิ่งอื่น ๆ ) คำแนะนำที่ดีที่สุดของฉันคือ: ถามผู้เขียนเกี่ยวกับการใช้อัลกอริทึมของพวกเขาฟรี
chl

2
ฉันจะรายงานกลับหากฉันได้รับการยืนยัน :) การจัดแนวกระดาษk-meanของพวกเขาสำหรับการจัดกลุ่มเส้นโค้งมีรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งานซึ่งอาจเป็นประโยชน์กับคนที่ต้องการทำสิ่งนี้ด้วยตนเอง
fmark

1
ทำไมไม่เพียงแค่ลบค่าเฉลี่ย (และอาจหารด้วยค่าเบี่ยงเบนมาตรฐาน) แล้วทำเช่นนี้? จากนั้นผลลัพธ์จะมากขึ้นเกี่ยวกับรูปร่างและน้อยลงเกี่ยวกับขนาด ...
naught101

9

วิธีการอื่นได้รับการเผยแพร่โดย stats.se เป็นประจำใน Wang, Xiaozhe, Kate Smith และ Rob Hyndman

'การจัดกลุ่มตามลักษณะสำหรับข้อมูลอนุกรมเวลา' การทำเหมืองข้อมูลและการค้นหาความรู้ 13 หมายเลข 3 (2006): 335-364

พวกเขาเขียน:

กระดาษนี้เสนอวิธีการสำหรับการจัดกลุ่มของอนุกรมเวลาตามลักษณะโครงสร้าง ไม่เหมือนกับทางเลือกอื่น ๆ วิธีนี้ไม่ได้จัดกลุ่มค่าจุดโดยใช้ตัวชี้วัดระยะทาง แต่จะรวมกลุ่มตามคุณสมบัติทั่วโลกที่แยกออกมาจากอนุกรมเวลา การวัดคุณลักษณะนั้นได้มาจากแต่ละชุดและสามารถป้อนเข้าสู่อัลกอริทึมการจัดกลุ่มโดยพลการรวมถึงอัลกอริทึมเครือข่ายประสาทที่ไม่ได้รับอนุญาตแผนที่การจัดระเบียบตัวเองหรืออัลกอริทึมการจัดกลุ่มแบบลำดับชั้น มาตรการระดับโลกที่อธิบายถึงอนุกรมเวลานั้นได้มาจากการใช้การดำเนินการทางสถิติที่ดีที่สุดในการจับลักษณะพื้นฐาน: แนวโน้มฤดูกาลฤดูกาลความสัมพันธ์อนุกรมความเบ้ kurtosis ความโกลาหลความไม่เชิงเส้นและความคล้ายคลึงตัวเอง เนื่องจากวิธีการนี้เป็นกลุ่มที่ใช้การวัดแบบโกลบอลที่แยกออกมา มันลดมิติของอนุกรมเวลาและมีความไวต่อข้อมูลที่หายไปหรือเสียงดังมาก เราได้จัดเตรียมกลไกการค้นหาเพิ่มเติมเพื่อค้นหาตัวเลือกที่ดีที่สุดจากชุดคุณลักษณะที่ควรใช้เป็นอินพุตการทำคลัสเตอร์

รหัส R ที่มีอยู่ในบล็อกของร็อบ


6

คุณสามารถดูการทำงานของEamonn Keogh (UC Riverside) ในการจัดกลุ่มอนุกรมเวลา เว็บไซต์ของเขามีทรัพยากรมากมาย ฉันคิดว่าเขาให้ตัวอย่างรหัส Matlab ดังนั้นคุณต้องแปลมันเป็น R

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