Cho khung dữ liệu sau:
df <- data.frame(x1 = c(26, 28, 19, 27, 23, 31, 22, 1, 2, 1, 1, 1),
x2 = c(5, 5, 7, 5, 7, 4, 2, 0, 0, 0, 0, 1),
x3 = c(8, 6, 5, 7, 5, 9, 5, 1, 0, 1, 0, 1),
x4 = c(8, 5, 3, 8, 1, 3, 4, 0, 0, 1, 0, 0),
x5 = c(1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0),
x6 = c(2, 3, 1, 0, 1, 1, 3, 37, 49, 39, 28, 30))
Như vậy mà
> df
x1 x2 x3 x4 x5 x6
1 26 5 8 8 1 2
2 28 5 6 5 1 3
3 19 7 5 3 1 1
4 27 5 7 8 1 0
5 23 7 5 1 1 1
6 31 4 9 3 0 1
7 22 2 5 4 1 3
8 1 0 1 0 0 37
9 2 0 0 0 0 49
10 1 0 1 1 0 39
11 1 0 0 0 0 28
12 1 1 1 0 0 30
Tôi muốn nhóm 12 cá nhân này bằng cách sử dụng các cụm phân cấp và sử dụng mối tương quan làm thước đo khoảng cách. Vì vậy, đây là những gì tôi đã làm:
clus <- hcluster(df, method = 'corr')
Và đây là cốt truyện của clus
:
Đây df
thực sự là một trong 69 trường hợp tôi đang phân tích cụm. Để đưa ra một điểm cắt, tôi đã xem xét một số bản thảo và chơi xung quanh với h
tham số cutree
cho đến khi tôi hài lòng với kết quả có ý nghĩa đối với hầu hết các trường hợp. Con số đó là k = .5
. Vì vậy, đây là nhóm chúng tôi đã kết thúc sau đó:
> data.frame(df, cluster = cutree(clus, h = .5))
x1 x2 x3 x4 x5 x6 cluster
1 26 5 8 8 1 2 1
2 28 5 6 5 1 3 1
3 19 7 5 3 1 1 1
4 27 5 7 8 1 0 1
5 23 7 5 1 1 1 1
6 31 4 9 3 0 1 1
7 22 2 5 4 1 3 1
8 1 0 1 0 0 37 2
9 2 0 0 0 0 49 2
10 1 0 1 1 0 39 2
11 1 0 0 0 0 28 2
12 1 1 1 0 0 30 2
Tuy nhiên, tôi gặp khó khăn trong việc diễn giải điểm cắt .5 trong trường hợp này. Tôi đã lấy một cái nhìn xung quanh Internet, bao gồm các trang trợ giúp ?hcluster
, ?hclust
và ?cutree
, nhưng không thành công. Điều xa nhất tôi trở nên hiểu được quá trình là bằng cách này:
Đầu tiên, tôi xem cách hợp nhất được thực hiện:
> clus$merge
[,1] [,2]
[1,] -9 -11
[2,] -8 -10
[3,] 1 2
[4,] -12 3
[5,] -1 -4
[6,] -3 -5
[7,] -2 -7
[8,] -6 7
[9,] 5 8
[10,] 6 9
[11,] 4 10
Có nghĩa là mọi thứ bắt đầu bằng cách tham gia các quan sát 9 và 11, sau đó quan sát 8 và 10, sau đó bước 1 và 2 (nghĩa là tham gia 9, 11, 8 và 10), v.v. Đọc về merge
giá trị của việc hcluster
giúp hiểu ma trận ở trên.
Bây giờ tôi hãy xem chiều cao của mỗi bước:
> clus$height
[1] 1.284794e-05 3.423587e-04 7.856873e-04 1.107160e-03 3.186764e-03 6.463286e-03
6.746793e-03 1.539053e-02 3.060367e-02 6.125852e-02 1.381041e+00
> clus$height > .5
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
Điều đó có nghĩa là việc phân cụm chỉ dừng lại ở bước cuối cùng, khi chiều cao cuối cùng vượt lên trên 0,5 (vì Dendogram đã chỉ, BTW).
Bây giờ, đây là câu hỏi của tôi: làm thế nào để tôi giải thích độ cao? Đây có phải là "phần còn lại của hệ số tương quan" (xin vui lòng không bị đau tim)? Tôi có thể tái tạo chiều cao của bước đầu tiên (tham gia các quan sát 9 và 11) như vậy:
> 1 - cor(as.numeric(df[9, ]), as.numeric(df[11, ]))
[1] 1.284794e-05
Và cũng cho bước tiếp theo, tham gia các quan sát 8 và 10:
> 1 - cor(as.numeric(df[8, ]), as.numeric(df[10, ]))
[1] 0.0003423587
Nhưng bước tiếp theo liên quan đến việc tham gia 4 quan sát đó và tôi không biết:
- Cách tính chiều cao chính xác của bước này
- Những gì mỗi chiều cao thực sự có nghĩa là.