Làm thế nào để giảm kích thước trong R


28

Tôi có một ma trận trong đó a (i, j) cho tôi biết tôi đã xem trang j bao nhiêu lần. Có 27K cá nhân và 95 nghìn trang. Tôi muốn có một số "kích thước" hoặc "các khía cạnh" trong không gian của các trang tương ứng với các bộ trang thường được xem cùng nhau. Mục tiêu cuối cùng của tôi là sau đó có thể tính toán tần suất cá nhân tôi đã xem các trang rơi vào chiều 1, chiều 2, v.v.

Tôi đã đọc tài liệu R về phân tích thành phần chínhphân tách giá trị đơn và đã thực hiện các lệnh này, nhưng tôi không chắc cách tiến hành.

Làm thế nào tôi có thể sử dụng giảm kích thước để làm điều này? Hay đây thực sự là một vấn đề phân cụm và thay vào đó tôi nên xem xét các thuật toán phân cụm?

Rất cám ơn cho bất kỳ cái nhìn sâu sắc ~ l

Câu trả lời:


10

Giả sử mat_pages [] chứa các trang trong các cột (mà bạn muốn phân cụm) và các cá nhân trong các hàng. Bạn có thể phân cụm các trang dựa trên dữ liệu riêng lẻ trong Rby bằng lệnh sau:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

Ma trận tải là ma trận của các hàm riêng của phân tách SVD của dữ liệu. Họ cho trọng số tương đối của mỗi TRANG trong việc tính điểm. Tải với giá trị tuyệt đối lớn hơn có ảnh hưởng nhiều hơn trong việc xác định điểm của thành phần nguyên tắc tương ứng.

Tuy nhiên, tôi cũng nên chỉ ra sự xuất hiện ngắn của việc sử dụng PCA để phân cụm trang. Lý do cho điều này là các tải trọng mang lại trọng lượng lớn hơn cho PAGES với độ biến thiên cao hơn, bất kể biến thể này có thực sự là do nội dung TRANG hay một số lý do khác (có thể là biến thể kỹ thuật hoặc cá nhân). Các tải không nhất thiết phản ánh sự khác biệt thực sự giữa các nhóm, mà (có thể) mối quan tâm chính của bạn. NHƯNG, cụm này thực sự phản ánh sự khác biệt trong nhóm theo giả định rằng tất cả các trang có cùng phương sai (tôi không biết liệu đây có phải là giả định hợp lệ không).

Nếu bạn có một cơ sở tính toán mạnh mẽ (có thể có thể có kích thước dữ liệu của bạn) - sử dụng các mô hình phân cấp có thể là một ý tưởng tốt. Trong R, nó có thể được thực hiện bằng cách sử dụng gói lme4.


Làm gì sau khi bạn có điểm?

Đây là một gợi ý thô và phân tích phụ thuộc rất lớn vào cách dữ liệu trông như thế nào. Ngoài ra, tôi đoán quá trình này sẽ rất khó khả thi để nhóm dữ liệu về cường độ mà bạn có.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Hy vọng rằng, điều này có thể cung cấp cho bạn một hình ảnh về cách dữ liệu được nhóm vào.

Cảnh báo: đây không phải là những gì tôi muốn giới thiệu.


Đề nghị của tôi:

Các vấn đề như thế này phát sinh thường xuyên trong bộ gen. Trong các trang trường hợp của bạn tương ứng với gen và các cá nhân tương ứng với bệnh nhân (về cơ bản các cá nhân có ý nghĩa tương tự như trong bộ gen)

Bạn muốn phân cụm các trang dựa trên dữ liệu.

Bạn có thể sử dụng rất nhiều gói phân cụm trong R và đã được chỉ ra trong các câu trả lời khác. Một vấn đề cơ bản với các gói giống như hclust là làm thế nào để xác định số lượng cụm. Một vài trong số những người yêu thích của tôi là:

  • pvclust (Cung cấp cho bạn các cụm và cũng cung cấp giá trị p cho mỗi cụm. Sử dụng giá trị p bạn có thể xác định các cụm có ý nghĩa thống kê. Vấn đề : đòi hỏi rất nhiều sức mạnh tính toán và tôi không chắc liệu nó có hoạt động với dữ liệu của bạn không kích thước)
  • hopach (Cung cấp cho bạn số lượng cụm ước tính và cụm)
  • Có các gói khác có sẵn trong Bioconductor, vui lòng kiểm tra chúng trong chế độ xem nhiệm vụ.

Bạn cũng có thể sử dụng thuật toán phân cụm như k-mean, v.v ... Tôi chắc chắn tôi đã thấy một chủ đề trong diễn đàn này về phân cụm. Các câu trả lời rất chi tiết. Nó được hỏi bởi Tal Galili nếu tôi nhớ chính xác.


@suncoolsu: cảm ơn nhiều! Tôi vừa làm theo lời khuyên của bạn và chạy prcomp. Tôi cũng lưu trữ ma trận tải nó tạo ra. Nhưng làm thế nào tôi có thể sử dụng ma trận này để nhóm các trang lại với nhau?
laramichaels

Xin chào Laramichaels, xin vui lòng tìm câu trả lời của tôi dưới đây.
suncoolsu

@suncoolsu: Tôi đang xử lý một vấn đề tương tự, nhưng tôi muốn "phân cụm" các cá nhân có cùng "động lực" (thực ra tôi có một số lượng lớn thời gian cho mỗi vùng và tôi muốn mô hình hóa chúng). Tôi đã suy nghĩ để sử dụng pam với khoảng cách tương quan (1-rho). Đây có phải là một cách được đề nghị? Bạn có thể vui lòng đề xuất một số con đường để khám phá?
teucer

@Musa .. Bạn có thể rõ ràng hơn một chút. Tôi không nghĩ rằng tôi hiểu "động lực" được đề cập bởi bạn. Chắc chắn pam là OK để phân cụm. Nhưng bạn cũng có thể thử các gói R pvclust và hopach như tôi đã đề cập. Ngoài ra, SOM (bản đồ tự tổ chức) là một cách khác để xem xét phân cụm. Vui lòng xem sách Ripley và Venable (2002) - MASS để biết thêm chi tiết. Cuốn sách cung cấp một điều trị triệt để của cụm.
suncoolsu

@suncoolsu: Xin lỗi vì công thức kém! Tôi có 200 thời gian mà tôi muốn mô hình hóa (tức là để mô phỏng). Tôi nghĩ rằng tôi có thể phân cụm "tương tự" (nghĩa là có cùng một hành vi theo thời gian: cách tiếp cận thẳng là sử dụng thời gian tương quan) và chỉ mô phỏng các thời gian của cụm ...
teucer

4

Nó chắc chắn là một vấn đề cụm. Kiểm tra clustergói R để có cái nhìn tổng quan về các tùy chọn thuật toán ( pamagneslà các tùy chọn tốt nhất để bắt đầu; chúng đại diện cho hai luồng chính trong phân cụm - centroidphân cấp ).
Vấn đề chính để sử dụng phân cụm trên dữ liệu của bạn là xác định một phép đo tương tự tốt giữa các trang; đơn giản là sử dụng khoảng cách Manhattan; phức tạp hơn một chút để đếm số lượng người xem phổ biến và bình thường hóa nó, giả sử, có nghĩa là số người xem của trang đầu tiên và trang thứ hai - điều này sẽ làm im lặng các hiệu ứng phổ biến.

EDIT: Ok, bây giờ tôi đã thấy kích thước dữ liệu ... nó có thể sẽ khiến R phát nổ, vì nó cần một tam giác (số trang)×(số trang)ma trận để lưu trữ khoảng cách. Kiểm tra báo cáo này cho các giải pháp có thể.


Tôi nêu lên câu trả lời của bạn. Tuy nhiên, bạn có thể vui lòng cung cấp các liên kết mới cho báo cáo trong câu cuối cùng không. Người cũ đã chết.
discipulus

1
Tôi sợ nó bị mất mãi mãi ... Nói chung, đó là về việc triển khai các phương thức phân cụm không xây dựng rõ ràng ma trận tương tự từng điểm mà chỉ điều tra các đối tượng theo yêu cầu.

1

Giảm kích thước về cơ bản là áp dụng thuật toán phân cụm cho các thuộc tính (cột). Do kích thước khá lớn của tập dữ liệu của bạn, bạn có thể thử sử dụng SOM (bản đồ tự tổ chức / mạng Kohonen) để tạo bản đồ cho các cá nhân hoặc trang. Sau đó, bạn có thể xem liệu các mẫu có ý nghĩa (có thể giải thích).


1

Nếu bạn làm PCA, lời khuyên của tôi sẽ là sàng lọc ngắn gọn các thành phần khác chứ không chỉ hai thành phần đầu tiên. Khi bạn có prcompđối tượng pc(xem bài đăng của suncoolsu), bạn có thể plot(pc)thấy lượng phương sai được quy cho các thành phần chính khác nhau. Bạn cũng có thể dễ dàng hình dung một vài (thường là ba hoặc bốn) trong số chúng bằng pairs(pc$x[,1:3])hoặc, sử dụng lattice, splom(pc$x[,1:3]).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.