# Programm zur Durchführung einer PCA
# mit vorheriger Standardisierung der Spalten von X

# V 0.2 vom 7.1.2005/23.1.2009

# (c) Dr. Alexander Preuß

# Eine vollständige Datenmatrix X muss vorhanden sein!



# Bestimmung von I und J

I <- nrow(X)

J <- ncol(X)

# Standardisierung der Matrix X

	s <- rep(0, times=J)

	# Bestimmung der Spaltensummen

	# Bestimmung eines Spaltenvektors mit I Komponenten

	einsI <- rep(1,times=I)	

	ssum <- t(einsI)%*%X

	# Bestimmung von xquer für jede Spalte

	xquer <- ssum/I

	# Bestimmung der Standardabweichung pro Spalte

	for (j in 1:J)

	{

	for (i in 1:I)

		{s[j] <- s[j] + (X[i,j]-xquer[j])^2}

		s[j] <- sqrt(s[j]/(I-1))
	
	}


	# Bildung der Matrix XS, die spaltenweise die standardisierten Merkmale enthält

	XS <- X

	for (i in 1:I)

		{

		for (j in 1:J)

			{XS[i,j] <- (X[i,j]-xquer[j])/s[j]}

		}



# Die Matrix A entspricht der Matrix XS-XQuer, denn durch die Standardisierung
# liegt der Schwerpunkt der Vektorenspitzen von XS bereits im Ursprung des Koordinatensystems

A <- XS

# Eigenwertzerlegung von A'A

L <- eigen(t(A)%*%A)$values
E <- eigen(t(A)%*%A)$vectors

# Bildung der Matrix E12, die die beiden größten Eigenvektoren enthält

E12 <- E[1:J,1:2]

# Bildung der Hauptkoordinaten für die Zeilen

K12 <- A%*%E12

# Bestimmung der Anpassungsgüte

G1 <- L[1]/sum(L)
G2 <- L[2]/sum(L)
G <- G1 + G2

# Graphische Ausgabe der Hauptkoordinaten

plot(K12[1:I,1],K12[1:I,2], pch=".",xlab="1. Achse", ylab="2. Achse")
abline(h=0)
abline(v=0)

for (i in 1:I) {text(K12[i,1],K12[i,2],rnamen[i],col="red")}









