Załóżmy, że mat_pages [] zawiera strony w kolumnach (które chcesz zgrupować) i poszczególne osoby w wierszach. Możesz grupować strony w oparciu o indywidualne dane w Rby, używając następującego polecenia:
pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)
Macierz ładunków jest macierzą wektorów własnych rozkładu SVD danych. Podają względną wagę każdej STRONY przy obliczaniu wyników. Obciążenia o większych wartościach bezwzględnych mają większy wpływ na ustalenie wyniku dla odpowiedniej składowej zasady.
Powinienem jednak również zwrócić uwagę na niedociągnięcia związane z używaniem PCA do grupowania stron. Powodem tego jest to, że obciążenia nadają STRONY większym wagom z większą zmiennością, niezależnie od tego, czy ta zmiana jest faktycznie spowodowana zawartością STRONY, czy z innego powodu (może to być zmiana techniczna lub indywidualna). Ładunki niekoniecznie odzwierciedlają prawdziwe różnice między grupami, które (być może) są twoim głównym zainteresowaniem. ALE, to grupowanie naprawdę odzwierciedla różnice w grupie przy założeniu, że wszystkie strony mają tę samą wariancję (nie wiem, czy jest to prawidłowe założenie).
Jeśli masz potężne możliwości obliczeniowe (co może być możliwe z uwagi na rozmiar danych) - dobrym pomysłem może być użycie modeli hierarchicznych. W R można to zrobić za pomocą pakietu lme4.
Co zrobić po uzyskaniu wyników?
Jest to przybliżona sugestia, a analiza zależy w dużej mierze od tego, jak wyglądają dane. Sądzę także, że ten proces byłby bardzo niewykonalny, aby zgrupować dane wielkości, które posiadasz.
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()
Mamy nadzieję, że da to obraz, w jaki sposób dane są pogrupowane.
Ostrzeżenie: nie to poleciłbym.
Moja rekomendacja:
Takie problemy często pojawiają się w genomice. W twoim przypadku strony odpowiadają genom, a jednostki odpowiadają pacjentom (w zasadzie jednostki mają takie samo znaczenie jak w genomice)
Chcesz grupować strony na podstawie danych.
Możesz użyć wielu pakietów klastrowych w R i zostały wskazane w innych odpowiedziach. Podstawowym problemem związanym z pakietami jest to, jak hclust polega na tym, jak określić liczbę klastrów. Kilka moich ulubionych to:
- pvclust (Daje ci klastry, a także daje wartość p dla każdego klastra. Korzystając z wartości p, możesz określić statystycznie istotne klastry. Problem : wymaga dużej mocy obliczeniowej i nie jestem pewien, czy zadziała z danymi twojego rozmiar)
- hopach (Podaje szacunkową liczbę klastrów i klastrów)
- w Bioconductor są dostępne inne pakiety, sprawdź je w widoku zadań.
Możesz także użyć algorytmów grupowania, takich jak k-średnich itp. Jestem pewien, że widziałem na tym forum wątek dotyczący grupowania. Odpowiedzi były bardzo szczegółowe. Tal Galili zapytał mnie, czy dobrze pamiętam.
Jest to z pewnością problem klastrowania. Sprawdź
cluster
pakiet Rs , aby uzyskać przegląd opcji algorytmów (pam
iagnes
są najlepszymi opcjami na początek; reprezentują dwa główne strumienie w grupowaniu - centroidy i hierarchiczne ).Głównym problemem związanym z korzystaniem z klastrowania danych jest określenie dobrej miary podobieństwa między stronami; najprościej jest użyć odległości na Manhattanie; nieco bardziej skomplikowane, aby policzyć liczbę zwykłych widzów i znormalizować je, powiedzmy, średnią liczby widzów pierwszej i drugiej strony - to powinno wyciszyć efekty popularności.
EDYCJA: Ok, teraz widziałem rozmiar danych ... prawdopodobnie spowoduje wybuch R, ponieważ potrzebuje jednego trójkąta macierzy do odległości sklepowe. Sprawdź ten raport pod kątem możliwych rozwiązań.(number of pages)×(number of pages)
źródło
Redukcja wymiarów polega zasadniczo na zastosowaniu algorytmu grupowania do atrybutów (kolumn). Ze względu na dość duże wymiary zbioru danych, możesz spróbować użyć SOM (samoorganizującej się mapy / sieci Kohonen), aby utworzyć mapę dla osób lub stron. Następnie możesz sprawdzić, czy są to znaczące (interpretowalne) wzorce.
źródło
Jeśli robisz PCA, moja rada byłaby krótka kontrola innych komponentów niż tylko dwa pierwsze. Kiedy już będziesz mieć
prcomp
obiektpc
(patrz post suncoolsu), możeszplot(pc)
zobaczyć ilość wariancji przypisywanej różnym głównym składnikom. Można również łatwo wizualizować kilka (zwykle trzy lub cztery) z nichpairs(pc$x[,1:3])
lub, używająclattice
,splom(pc$x[,1:3])
.źródło