Unsupervised Learning: Hauptkomponentenanalyse (PCA)

DS3 - Vom experimentellen Design zur
explorativen Datenanalyse & Data Mining

Saskia Otto

Universität Hamburg, IMF

Wintersemester 2024/2025

Lernziele

Am Ende dieser VL- und Übungseinheit werden Sie

  • die Grundlagen der Hauptkomponentenanalyse (im Englischen ‘Principal Component Analysis’ oder PCA) verstanden haben, einschließlich des Ziels, die Dimensionalität von Daten zu reduzieren und die wichtigsten Informationen zu extrahieren.
  • in der Lage sein, die Unterschiede und Gemeinsamkeiten zwischen Clusteranalyse und PCA zu verstehen und zu erklären.

Principal Component Analysis (PCA)

Ordinationstechniken




  • Durch mathematische Verfahren wird eine sog. Dimensionsreduktion durchgeführt, so dass die Lage der Daten in einem zwei- oder dreidimensionalen Koordinatensystem dargestellt werden kann.
  • Dabei werden Objekte (z. B. Standorte) oder Variablen (z. B. Arten) geometrisch so angeordnet, dass die Abstände zwischen ihnen im Diagramm ihre natürlichen Abstände darstellen.
    • Nahe beieinander liegende Standorte im Diagramm werden als ähnlich in z.B. der Artenzusammensetzung interpretiert.
  • Die Achsen des Diagramms stellen neue Variablen dar, die Zusammenfassungen der ursprünglichen Variablen sind.
  • Die meisten Methoden beruhen auf der Extraktion der Eigenvektoren einer Assoziationsmatrix.

Beispiele für Ordinationsverfahren

  • PCA (Principal Component Analysis, Hauptkomponentenanalyse)
  • CA (Correspondence Analysis, Korrespondenzanalyse)
  • MDS (Multidimensional Scaling, Multidimensionale Skalierung)
  • CCA (Canonical Correspondence Analysis, Kanonische Korrespondenzanalyse)
  • DCA (Detrended Correspondence Analysis)
  • RDA (Redundanz-Diskriminanz-Analyse)

PCA - Hauptkomponentenanalyse

  • stellt die wichtigste eigenvektorbasierte Methode, arbeitet mit quantitativen Daten und bewahrt den euklidischen Abstand zwischen den Objekten.
  • findet eine Folge von Linearkombinationen der Variablen, die eine maximale Varianz aufweisen und untereinander unkorreliert sind.
  • dient nicht nur als Werkzeug zur Datenvisualisierung, sondern erzeugt auch abgeleitete Variablen zur Verwendung in überwachten Lernproblemen.
  • Abstände zwischen Objekten im sog. Biplot sind eine Annäherung an ihre euklidischen Abstände im multivariaten Raum → Standardisierung bei Abundanzdaten und Daten mit unterschiedlichen Einheiten!
  • Voraussetzungen:
    • lineare Beziehung zwischen den Variablen
    • Datensätze sollten multivariat normalverteilt sein
    • keine fehlenden Werte

PCA - “Geometrischer” Ansatz | 1

  • Ursprung des neuen Koordinatensystems wird in die Mitte der Datenpunkte verschoben (Zentrierung).
  • Rotation des neuen Koordinatensystems, bis die Varianz der 1. Achse maximiert ist (Reduzierung der Restvarianz).

PCA - “Geometrischer” Ansatz | 2

  • Ursprung des neuen Koordinatensystems wird in die Mitte der Datenpunkte verschoben (Zentrierung).
  • Rotation des neuen Koordinatensystems, bis die Varianz der 1. Achse maximiert ist (Reduzierung der Restvarianz).

PCA - “Geometrischer” Ansatz | 3

  • Zusätzliche Achsen müssen unabhängig voneinander sein (=orthogonal).
  • Visualisierung der reduzierten Dimensionen als sogenanntes “Biplot” (d.h. nur ein Teil der Variation im ursprünglichen Datensatz wird dargestellt).

Scores: Koordinaten von Objekten (hier Standorte) entlang des hypothetischen Gradienten PC1 zu PC2.

Loadings: Koordinaten des Vektorscheitels entlang des hypothetischen Gradienten → Maß für die Korrelation mit den PC-Achsen.

PCA - “Geometrischer” Ansatz | 4

  • Gesamtvariation: Summe der quadrierten Abstände vom Ursprung

  • Erklärte Varianz: Summe der quadrierten Projektionen auf die Hauptkomponenten (PC) = λ (Eigenwerte)

  • Residuale Varianz: Summe der quadrierten orthogonalen Abstände zu den Hauptkomponenten

  • Nur eine Rotation: Alle Achsen/Hauptkomponenten erklären die Gesamtvarianz!


PCA - Mathematischer Ansatz

  • Die erste Hauptkomponente Z1 eines Satzes von Variablen X1, X2, X3, ..,Xp ist die normalisierte lineare Kombination dieser Variablen, welche die größte Varianz hat:

Z_1 = \phi_{11}X_1 + \phi_{21}X_2 + ...+\phi_{p1}X_p

  • Die Koeffizienten \phi_{11}, .., \phi_{p1} repräsentieren die Ladungen (‘loadings’) der ersten Hauptkomponente; zusammen bilden diese den Hauptkomponenten-Ladevektor, \phi_1 = (\phi_{11}, \phi_{21},.., \phi_{p1})^T.
  • Die Ladungen werden so eingeschränkt, dass ihre Quadratsumme gleich eins ist, da andernfalls die Festlegung dieser Elemente auf einen beliebig großen Absolutwert zu einer beliebig großen Varianz führen könnte (Normalisierung).

Berechnung der PC ‘Scores’

Angenommen wir haben einen n x p Datensatz (n Zeilen und p Spalten), dann lässt sich jeder Datenpunkt im ursprünglichen Raum durch die lineare Kombination der Hauptkomponenten repräsentiert = PC ‘Score’ z_{ik}:

z_{ik} = \phi_{1k}x_{i1} + \phi_{2k}x_{i2} + ...+\phi_{kk}x_{ip}

mit i=1 bis n als Stichprobenumfang (= Anzahl Objekte) und k=1 bis p Hauptkomponenten

In Matrixform ausgedrückt: \mathbf{Z} = \mathbf{X}*\mathbf{U}

Matrix Z:

Datenpunkte entlang der neuen Hauptkomponenten (PC-Achsen) z_{ik} \rightarrow \mathbf{Z} =\left( \begin{array}{ccc} z_{11} & \cdots & z_{1k} \\ \vdots & \ddots & \vdots \\ z_{i1} & \cdots & z_{ik} \end{array} \right)

(Zentrierte) Datenmatrix X:

Variablen Xk in i Beobachtungen x_{ik} \rightarrow \mathbf{X} =\left( \begin{array}{ccc} x_{11} & \cdots & x_{1k} \\ \vdots & \ddots & \vdots \\ x_{i1} & \cdots & x_{ik} \end{array} \right)

Matrix U der k Eigenvektoren:

Regressionskoeffizienten/Ladungen \phi_{kk} \phi_{kk} \rightarrow \mathbf{U} =\left( \begin{array}{ccc} \phi_{11} & \cdots & \phi_{1k} \\ \vdots & \ddots & \vdots \\ \phi_{k1} & \cdots & \phi_{kk} \end{array} \right)

Durchführung in R

Manuelle Berechnung (in R)

Für ganz interessierte…

myPCA <- function(X) {
  X_mat <- as.matrix(X)
  object_names <- rownames(X)
  var_names <- colnames(X)
  
  ### 1. Zentrierung der Daten (wird für die Berechnung von Z gebraucht) 
  X_cent <- scale(X_mat, center = TRUE, scale = FALSE)
  
  ### 2. Berechnung der Kovarianzmatrix S
  X_cov <- cov(X_cent)
  
  ### 3. Berechnung der Eigenwerte lambda und der Eigenvektoren v 
  # der Kovarianzmatrix S (s. Legendre & Legendre, 1998, eq. 9.1 und 9.2)
  # Die Eigenwerte und -vektoren erfüllen die Gleichung S*v = lambda*v.
  X_eig <- eigen(X_cov)
  
  # (Eigenwerte sind ein Maß für die Bedeutung (Varianz) der Achsen. Sie 
  # können als "Proportions Explained" (Anteil der erklärten Variation) 
  # ausgedrückt werden, indem sie durch die Summe aller Eigenwerte geteilt 
  # werden.)
  
  ### 4. Eigenvektoren als Matrix U abspeichern
  U <- X_eig$vectors
  rownames(U) <- var_names
  
  ### 5. Matrix Z berechnen
  Z <- X_cent%*%U       # (s. Legendre & Legendre, 1998, eq. 9.4)
  rownames(Z) <- object_names
  
  # Output als Liste mit allen 3 Matrizen
  result <- list(X_eig$values,U,Z)
  names(result) <- c("eigenvalues","U", "Z")
  return(result)
}

myPCA(X = spiderA_hell)

PCA in R

Beispiel mit der PCA() Funktion aus 'FactoMineR'
library(FactoMineR)
pcaA <- PCA(spiderA_hell, scale.unit = FALSE, graph = FALSE)
  # unsere Daten sind bereits standardisiert, daher 'scale.unit = FALSE'
pcaA
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 28 individuals, described by 12 variables
*The results are available in the following objects:

   name               description                          
1  "$eig"             "eigenvalues"                        
2  "$var"             "results for the variables"          
3  "$var$coord"       "coord. for the variables"           
4  "$var$cor"         "correlations variables - dimensions"
5  "$var$cos2"        "cos2 for the variables"             
6  "$var$contrib"     "contributions of the variables"     
7  "$ind"             "results for the individuals"        
8  "$ind$coord"       "coord. for the individuals"         
9  "$ind$cos2"        "cos2 for the individuals"           
10 "$ind$contrib"     "contributions of the individuals"   
11 "$call"            "summary statistics"                 
12 "$call$centre"     "mean of the variables"              
13 "$call$ecart.type" "standard error of the variables"    
14 "$call$row.w"      "weights for the individuals"        
15 "$call$col.w"      "weights for the variables"          

Output extrahieren

# Eigenwerte
pcaA$eig

# Ergebnisse der Variablen
pcaA$var$coord          # Koordinaten
pcaA$var$contrib        # Beiträge zu den PCs in %
pcaA$var$cor            # Korrelation der Variablen mit den PCs
pcaA$var$cos2           # Qualität der Repräsentation

# Ergebnisse der Objekte (hier Standorte)
pcaA$ind$coord          # Koordinaten
pcaA$ind$contrib        # Beiträge zu den PCs in %
pcaA$ind$cos2           # Qualität der Repräsentation

Anteil der erklärten Varianz

Um die Stärke der einzelnen Hauptkomponenten (PCs) zu verstehen, interessiert uns der Anteil der Varianz, der durch die einzelnen PCs erklärt wird (die Summe ist immer 1 bzw. 100%):

pcaA$eig
          eigenvalue percentage of variance cumulative percentage of variance
comp 1  0.2391942862             50.2281942                          50.22819
comp 2  0.1149343105             24.1349530                          74.36315
comp 3  0.0619177247             13.0020476                          87.36519
comp 4  0.0153305527              3.2192490                          90.58444
comp 5  0.0139610114              2.9316603                          93.51610
comp 6  0.0086239473              1.8109350                          95.32704
comp 7  0.0075595385              1.5874207                          96.91446
comp 8  0.0047529702              0.9980720                          97.91253
comp 9  0.0038069611              0.7994204                          98.71195
comp 10 0.0031663955              0.6649086                          99.37686
comp 11 0.0019933060              0.4185725                          99.79543
comp 12 0.0009741778              0.2045667                         100.00000

Es gibt so viele Hauptkomponenten, wie es Variablen gibt: in unserem Fall 12.

Wie viele Komponenten (PCs)?

  • Welche Achsen sind wichtig, d.h. wie viel Varianz erklären sie jeweils?
  • Gibt keine einfache Antwort und keinen Test.
  • ‘Scree plot’ kann als Anhaltspunkt dienen: Wir suchen nach einem “Ellbogen”.
fviz_eig(pcaA)

Beiträge der Variablen zu den PCs

p1 <- fviz_contrib(pcaA, choice = "var", axes = 1, top = 10)
p2 <- fviz_contrib(pcaA, choice = "var", axes = 2, top = 10)
gridExtra::grid.arrange(p1, p2, ncol = 2)

Ergebnisse visualisieren | Variablen

Darstellung der Ladungen (‘loadings’) der Variablen entlang der PC1/PC2 Achsen (= Maß für die Korrelation mit den PC-Achsen) mit fviz_pca_var():

Code
fviz_pca_var(
  X = pcaA,  # das PCA Objekt
  repel = TRUE, # Labels sollen nciht ueberlappen
  col.var = "contrib", # Variablenpfeile entsprechend dem Beitrag zur PC1/PC2 einfaerben
  gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07") # Farbwahl
)

Ergebnisse visualisieren | Objekte

Darstellung der einzelnen Standorte anhand ihrer ‘scores’ im neuen 2-dimensionalen Raum mit fviz_pca_ind():

Code
fviz_pca_ind(pcaA, repel = TRUE)

Ergebnisse visualisieren | Biplot

Gemeinsame Darstellung der ‘scores’ und ‘loadings’ im sog. Biplot mit fviz_pca_biplot():

Code
fviz_pca_biplot(pcaA, repel = TRUE,
  col.var = "contrib", 
  gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
  col.ind = "#696969" ) # einheitliche Farbwahl Datenpunkte (Objekte)

PCA und (hierarchische) Clusteranalyse

Code
pheatmap::pheatmap(t(spiderA_hell), 
  cutree_cols = 4, 
  clustering_method = "average", 
  cluster_rows = FALSE
)

Code
fviz_pca_biplot(pcaA, repel = TRUE,
  col.ind = hc_cluster,
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  addEllipses = TRUE, 
  legend.title = "Groups"
)

  • In Cluster 1 gibt es mehrere schwach dominierende Arten, in Cluster 2 kommt besonders häufig Trocterr und Pardlugu vor. Cluster 3 (Standorte 22-28) weist eine ganz andere Gemeinschaftsstruktur auf mit Alopacce und Alopfabr als dominierende Arten. Die Standorte 9-12 (Cluster 3) werden dominiert von der Art Pardmont.
  • Zwischen Trocterr und Alopacce bzw. Pardmont und Pardlugu gibt es eine besonders starke negative Korrelation.

Zusammenfassung

Welche Informationen haben wir extrahiert?

  • Wie die Arten miteinander verwandt sind.
  • Ob Arten an bestimmten Standorten besonders häufig vorkommen.
  • Ob es Cluster in den Daten gibt, also Gruppen von Daten, die einander ähnlich sind und welche Arten am stärksten zu den Unterschieden beitragen.

Welche Rolle spielen bei der Gemeinschaftsstruktur die Umweltbedingungen?Übungsaufgabe

Interpretation bei großen Datensätzen?

Beispiel Genexpressionsmessungen

Code
nci_labs <- NCI60$labs
nci_dat <- NCI60$data
nci_scaled <- scale(nci_dat)
col <- colorRampPalette(c("green", "black", "red"))(255) 

annotation_col = data.frame(nci_labs = nci_labs)
rownames(annotation_col) = rownames(nci_scaled)

pheatmap(t(nci_scaled), cutree_cols = 4, clustering_method = "complete",
  color = col, cluster_rows = FALSE, show_rownames = FALSE,
  annotation_col = annotation_col, fontsize = 7)

Code
pca_nci <- PCA(nci_dat, scale.unit = TRUE, 
  graph = FALSE)
col <- RColorBrewer::brewer.pal(n = 12, 
  name = "Paired")
col[c(13,14)] <- c("grey25", "grey75")
p <- fviz_pca_ind(pca_nci, col.ind = nci_labs, 
  geom.ind = "point",
  legend.title = "nci_labs",  addEllipses=F)
p + scale_color_manual(values = col) +
  scale_shape_manual(values = 11:24)

Lassen sich die Krebszelllinien auf Grundlage ihres Genexpressionsprofils in verschiedene Gruppen oder Cluster einordnen?

Übungen

Übungswoche 7

Gemeinschaftsstruktur von Wolfsspinnen und mögliche Umwelteinflüsse (Teil 2)

Vorbereitung @home

  • Univariate Analyse der Diversität
    • Datenexploration
  • PCA der Wolfspinnengemeinschaft
    • Wiederholung der PCA Methode (inkl. dem R Code) und die Ergebnisse zur Spinnengemeinschaft aus der Vorlesung.
  • Beantworten Sie vor der sechsten Übungsstunde die Fragen zur PCA im Moodle-Quiz.

Fragen..??

Total konfus?

Buchkapitel zum Nachlesen

  • The R Book von M.J. Crawley:
    • Kapitel 25.1 Principal components analysis
  • Experimental Design and Data Analysis for Biologists von G.P. Quinn & M.J. Keough:
    • Kapitel 17 Principal components and correspondence analysis
  • Weitere empfehlenswerte Bücher:
    • P. Legendre & L. Legendre (2012): Numerical Ecology, Elsevier Offizielle Webseite
    • Borcard, Gillet & Legendre (2011): Numerical Ecology with R, Springer Offizielle Webseite
    • A. Kassambara (2017): Practical Guide To Principal Component Methods in R. Weblink
  • Online-Tutorial von A. Kassambara: PCA - Principal Component Analysis Essentials

Cheetsheets

Empfehlenswert ist auch das Cheatsheet des ‘vegan’ Pakets: https://github.com/rstudio/cheatsheets/blob/main/vegan.pdf

Total gelangweilt?

Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz…

Abschlussquiz

Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Creative Commons License
Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.