#Aufgabe 2 #Einlesen der Daten euro <- read.table("europa.txt",header=T) X.euro <- euro[,-1] #a) cov.euro <- cov(X.euro) #Die PCA ist nicht skaleninvariant; hier sind die Varianzen sehr unterschiedlich, #dh. es wird fast nur ober eine Rolle spielen. Daher sollte man zun�chst eine #Skalierung durchf�hren, z.B. so dass alle Variablen die Varianz 1 haben #(Standardisierung) #b) #Korrelationsmatrix = Kovarianzmatrix der standardisierten Variablen. cor.euro <- cor(X.euro) # Standardisiere Matrix => cov = cor euro.stand<-scale(X.euro) cov(euro.stand) cor(euro.stand) cor.euro #PCA entspricht Spektralzerlegung der Kovarianzmatrix (bzw. hier Korrelationsmatrix; #vgl. Vorlesung) eigen.cor <- eigen(cor.euro) #Anteil der durch die ersten beiden Hauptkomponenten erkl�rten Streuung frac2 <- sum(eigen.cor$values[1:2])/sum(eigen.cor$values) frac2 #84.25% der gesamten Streuung werden durch die ersten beiden Hauptkomponenten erkl�rt. #c) frac.expl <- cumsum(eigen.cor$values)/sum(eigen.cor$values) frac.expl #1. HK: 48.66% der Streuung #1.+ 2. HK: 84.25% der Streuung (vgl. oben) #1.+ 2.+ 3. HK: 93.58% der Streuung #1. + ... + 4. HK: 100% der Streuung #1. +2. HK enthalten 84.25% der Gesamtstreuung: diese beiden sollte man f�r #notwendig erachten #d) #Matrix Q der Eigenvektoren Q <- eigen.cor$vectors p <- dim(Q)[2] #Vektor f�r Namen names <- names(X.euro) par(mfrow = c(p,1)) #Balkendiagramm f�r jede Hauptkomponente for (i in 1:p){ if(all(Q[,i]<0)){ Q[,i] <- -Q[,i] #Vorzeichen�nderung } #Anordnung gem�� der absoluten Werte o <- rev(order(abs(Q[,i]))) barplot(Q[o,i],names.arg = names[o]) abline(h = 0) } #e) #Wir betrachten die ersten beiden Hauptkomponenten. Die neuen Kovariablen erh�lt #man wie folgt: y_1=a_1'x, y_2=a_2'x #X.euro zun�chst standardisieren, da man auf Basis von Korrelationsmatrix arbeitet: Y12 <- as.matrix(euro.stand) %*% eigen.cor$vectors[,1:2] ## Alternativ: Berechnung �ber princomp PCEuro<-princomp(X.euro,cor=T) #Indices f�r CH, BUL, D, PL ind <- which(euro[,1]=="Schweiz"| euro[,1]=="Bulgarien") Y12.sel <- Y12[ind,] row.names(Y12.sel) <- as.character(euro[ind,1]) Y12.sel ## Alternativ: Berechnung �ber princomp PCEuro$scores[ind,1:2] # numerische Abweichungen gegen�ber der L�sung mit princomp #Interpretation: betrachte hierzu ersten und zweiten Eigenvektor eigen.cor$vectors[,1:2] ## Alternativ: Berechnung �ber princomp PCEuro$loadings #sowie die urspr�nglichen Variablen X.euro[ind,] #-BUL: BIP niedrig, arbl hoch; also y_1 eher. klein, y_2 gro� #-CH: BIP hoch, arbl niedrig; also y_1 hoch, y_2 eher. klein (umgekehrt) #Die Einwohnerzahl ist fast gleich, bei der Fl�che ist BUL etwa 2.5mal so gro� #(erkl�rt Unterschiede in Auspr�gung nach oben und unten). #Das Ganze geht nat�rlich auch mit Hilfe der Funktion princomp()