#Aufgabe 2 #Einlesen der Daten euro <- read.table("europa.txt",header=T) X.euro <- euro[,-1] rownames(X.euro) <- euro[,1] # a) mean.euro <- colMeans(X.euro) mean.euro cov.euro <- cov(X.euro) cov.euro cor.euro <- cor(X.euro) cor.euro # b) siehe ?bungsmitschrift # c) #Die Funktion princomp() erm?glicht die Durchf?hrung einer PCA. help(princomp) # PCA auf Basis der Korrelationsmatrix (cor=T) pca.euro.cor <- princomp(X.euro,cor=T) #Vorsicht: Die standard deviations geben hier die Wurzeln der Eigenwerte an. # d) #Mit der Funktion screeplot() kann man die Beitr?ge der einzelnen Hauptkomponenten #zur Gesamtvarianz graphisch darstellen. Die H?he der Balken entspricht dann den #Eigenwerten screeplot(pca.euro.cor) # e) #Matrix Q der Eigenvektoren ?ber Funktion loadings() Q <- loadings(pca.euro.cor) 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) } ### F?r das Verst?ndnis: # Kovarianzmatrix der neuen Werte/Beobachtungen Y t(loadings(pca.euro.cor))%*%cor(X.euro)%*%loadings(pca.euro.cor) # Spektralzerlegung der Korrelationsmatrix cor.euro loadings(pca.euro.cor)%*%diag(pca.euro.cor$sdev^2)%*%t(loadings(pca.euro.cor)) # f) eigen.euro.cor <- eigen(cor.euro) frac.expl <- eigen.euro.cor$values/sum(eigen.euro.cor$values) frac.expl # g) siehe ?bungsmitschrift # h) siehe ?bungsmitschrift ind <- which(euro[,1]=="Schweiz"| euro[,1]=="Bulgarien") # skalierete Designmatrix euro.scaled <- scale(X.euro) # Eigenvektor 1 und 2 a1a2 <- eigen.euro.cor$vectors[,1:2] # Neue Werte y1 und y2 y1y2 <- euro.scaled%*%a1a2 y1y2[ind,] # oder einfach ?ber princomp() pca.euro.cor$scores[ind,1:2]