Poisson Mixture Models ด้วย flexmix

Mixture Models ใน R

Victor Medina

Researcher at The University of Edinburgh

ปัญหาที่ต้องแก้

  1. การแจกแจงความน่าจะเป็นที่เหมาะสมคืออะไร?
    • การแจกแจง Poisson แบบหลายตัวแปร
  2. ควรพิจารณากี่กลุ่มย่อย?
    • ลองตั้งแต่ 1 ถึง 15 คลัสเตอร์ แล้วเลือกด้วย BIC
  3. พารามิเตอร์และการประมาณค่ามีอะไรบ้าง?
    • ค่า lambda ของแต่ละ Poisson และสัดส่วนของแต่ละกลุ่ม
Mixture Models ใน R
crimes_matrix <- as.matrix(crimes[,-1])
poisson_mix_model <- stepFlexmix(crimes_matrix ~ 1, 
                                 k = 1:15, 
                                 nrep = 5, 
                                 model = FLXMCmvpois(),
                                 control = list(tolerance = 1e-15, iter = 1000))
  • ใช้ stepFlexmix แทนฟังก์ชัน flexmix
  • k เป็นช่วงของค่า
  • nrep คือจำนวนครั้งที่อัลกอริทึม EM รันซ้ำสำหรับแต่ละค่า k
  • การแจกแจง Poisson คือ FLXMCmvpois
Mixture Models ใน R

เลือกโมเดลที่ดีที่สุด

best_fit <- getModel(poisson_mix_model, which = "BIC")
  • เกณฑ์ทางสถิติอื่นที่มีใน flexmix ได้แก่ AIC และ ICL
Mixture Models ใน R

สัดส่วนของแต่ละกลุ่ม

prior(best_fit)
0.07792208 0.05194805 0.19480519 0.27272727 0.20779224 0.19480517
Mixture Models ใน R
param_pmm <- data.frame(parameters(best_fit))
param_pmm <- param_pmm %>% mutate(Type = colnames(crimes_matrix))
head(param_pmm)
    Comp.1  Comp.2    Comp.3    Comp.4   Comp.5    Comp.6               Type
1 380.3333  821.75 112.26667  67.57143 216.9375  475.3334            ASSAULT
2 929.5000 2271.50 268.13333 153.14286 574.7500 1204.8667            BATTERY
3 303.8333  418.00  98.60000  52.04762 174.9375  272.9333           BURGLARY
4 601.3333 1074.50 199.66666 116.90476 370.9375  648.6667    CRIMINAL DAMAGE
5 210.5000  223.75  49.73333  25.00000  81.0625  139.0000  CRIMINAL TRESPASS
6 973.1667  438.00 158.80000  61.95238 196.7500  241.4666 DECEPTIVE PRACTICE
Mixture Models ใน R

แสดงภาพคลัสเตอร์

param_pmm %>% 
  pivot_longer(-Type, names_to = "Components", values_to = "Lambda") %>%
  ggplot(aes(x = Type, y = Lambda, fill = Type)) + 
  geom_bar(stat = "identity") +
  facet_wrap(~ Components) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1), 
        legend.position = "none")
Mixture Models ใน R

Mixture Models ใน R

กำหนดคลัสเตอร์ให้แต่ละชุมชน

crimes_c <- crimes %>% 
  mutate(CLUSTER = factor(clusters(best_fit)))
Mixture Models ใน R

แสดงคลัสเตอร์พร้อมชุมชนของแต่ละกลุ่ม

crimes_c %>% 
  group_by(CLUSTER) %>% 
  mutate(NUMBER = row_number()) %>% 
  ggplot(aes(x = CLUSTER, y = NUMBER, col = CLUSTER)) + 
  geom_text(aes(label = COMMUNITY), size = 2.3)+
  theme(legend.position="none")
Mixture Models ใน R

Mixture Models ใน R

มาฝึกกันเถอะ!

Mixture Models ใน R

Preparing Video For Download...