A one sentence summary of PCA is diagonalizing the covariance matrix and sort the eigenvalues from largest to smallest. It is a way for dimensionality reduction. When you have points lying on a straight line in two dimension, you do not need two coordinates to describe the data. Instead, you only need to rotate your coodinate system and store them as 1 dimensional points.

A short article on how PCA works: https://zhuanlan.zhihu.com/p/21580949

data(iris)
head(iris)
par(mfrow = c(2, 2))
hist(iris$Sepal.Length, breaks = 20)
hist(iris$Sepal.Width, breaks = 20)
hist(iris$Petal.Length, breaks = 20)
hist(iris$Petal.Width, breaks = 20)

Let us do a log transform on the data.

log.iris <- log(iris[, 1:4])
iris.species <- iris[, 5]
par(mfrow = c(2, 2))
hist(log.iris$Sepal.Length, breaks = 20)
hist(log.iris$Sepal.Width, breaks = 20)
hist(log.iris$Petal.Length, breaks = 20)
hist(log.iris$Petal.Width, breaks = 20)

Not sure why this is done since the data after the transformation is still bimodal.

ir.pca <- prcomp(log.iris, center = TRUE, scale = TRUE)
print(ir.pca)
Standard deviations (1, .., p=4):
[1] 1.7124583 0.9523797 0.3647029 0.1656840

Rotation (n x k) = (4 x 4):
                    PC1         PC2        PC3         PC4
Sepal.Length  0.5038236 -0.45499872  0.7088547  0.19147575
Sepal.Width  -0.3023682 -0.88914419 -0.3311628 -0.09125405
Petal.Length  0.5767881 -0.03378802 -0.2192793 -0.78618732
Petal.Width   0.5674952 -0.03545628 -0.5829003  0.58044745
plot(ir.pca, type='l')

summary(ir.pca)
Importance of components:
                          PC1    PC2     PC3     PC4
Standard deviation     1.7125 0.9524 0.36470 0.16568
Proportion of Variance 0.7331 0.2268 0.03325 0.00686
Cumulative Proportion  0.7331 0.9599 0.99314 1.00000

Now let us do PCA again by diagonalizing the covariance matrix. Note the PCA vectors we got are exactly the same as the ones we got using the prcomp function.

iris.mat <- as.matrix(log.iris)
cov.mat <- cor(iris.mat)
eigen(cov.mat)
eigen() decomposition
$`values`
[1] 2.9325135 0.9070271 0.1330082 0.0274512

$vectors
           [,1]        [,2]       [,3]        [,4]
[1,]  0.5038236 -0.45499872  0.7088547  0.19147575
[2,] -0.3023682 -0.88914419 -0.3311628 -0.09125405
[3,]  0.5767881 -0.03378802 -0.2192793 -0.78618732
[4,]  0.5674952 -0.03545628 -0.5829003  0.58044745
LS0tDQp0aXRsZTogIlBDQSBvbiBJcmlzIGRhdGFzZXQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpBIG9uZSBzZW50ZW5jZSBzdW1tYXJ5IG9mIFBDQSBpcyBkaWFnb25hbGl6aW5nIHRoZSBjb3ZhcmlhbmNlIG1hdHJpeCBhbmQgc29ydA0KdGhlIGVpZ2VudmFsdWVzIGZyb20gbGFyZ2VzdCB0byBzbWFsbGVzdC4gSXQgaXMgYSB3YXkgZm9yIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi4NCldoZW4geW91IGhhdmUgcG9pbnRzIGx5aW5nIG9uIGEgc3RyYWlnaHQgbGluZSBpbiB0d28gZGltZW5zaW9uLCB5b3UgZG8gbm90IG5lZWQgDQp0d28gY29vcmRpbmF0ZXMgdG8gZGVzY3JpYmUgdGhlIGRhdGEuIEluc3RlYWQsIHlvdSBvbmx5IG5lZWQgdG8gcm90YXRlIHlvdXIgDQpjb29kaW5hdGUgc3lzdGVtIGFuZCBzdG9yZSB0aGVtIGFzIDEgZGltZW5zaW9uYWwgcG9pbnRzLiANCg0KQSBzaG9ydCBhcnRpY2xlIG9uIGhvdyBQQ0Egd29ya3M6IGh0dHBzOi8vemh1YW5sYW4uemhpaHUuY29tL3AvMjE1ODA5NDkNCg0KDQpgYGB7cn0NCmRhdGEoaXJpcykNCmhlYWQoaXJpcykNCnBhcihtZnJvdyA9IGMoMiwgMikpDQpoaXN0KGlyaXMkU2VwYWwuTGVuZ3RoLCBicmVha3MgPSAyMCkNCmhpc3QoaXJpcyRTZXBhbC5XaWR0aCwgYnJlYWtzID0gMjApDQpoaXN0KGlyaXMkUGV0YWwuTGVuZ3RoLCBicmVha3MgPSAyMCkNCmhpc3QoaXJpcyRQZXRhbC5XaWR0aCwgYnJlYWtzID0gMjApDQpgYGANCkxldCB1cyBkbyBhIGxvZyB0cmFuc2Zvcm0gb24gdGhlIGRhdGEuDQpgYGB7cn0NCmxvZy5pcmlzIDwtIGxvZyhpcmlzWywgMTo0XSkNCmlyaXMuc3BlY2llcyA8LSBpcmlzWywgNV0NCnBhcihtZnJvdyA9IGMoMiwgMikpDQpoaXN0KGxvZy5pcmlzJFNlcGFsLkxlbmd0aCwgYnJlYWtzID0gMjApDQpoaXN0KGxvZy5pcmlzJFNlcGFsLldpZHRoLCBicmVha3MgPSAyMCkNCmhpc3QobG9nLmlyaXMkUGV0YWwuTGVuZ3RoLCBicmVha3MgPSAyMCkNCmhpc3QobG9nLmlyaXMkUGV0YWwuV2lkdGgsIGJyZWFrcyA9IDIwKQ0KYGBgDQoNCk5vdCBzdXJlIHdoeSB0aGlzIGlzIGRvbmUgc2luY2UgdGhlIGRhdGEgYWZ0ZXIgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIA0Kc3RpbGwgYmltb2RhbC4NCg0KYGBge3J9DQppci5wY2EgPC0gcHJjb21wKGxvZy5pcmlzLCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpDQpwcmludChpci5wY2EpDQpwbG90KGlyLnBjYSwgdHlwZT0nbCcpDQpzdW1tYXJ5KGlyLnBjYSkNCmBgYA0KTm93IGxldCB1cyBkbyBQQ0EgYWdhaW4gYnkgZGlhZ29uYWxpemluZyB0aGUgY292YXJpYW5jZSBtYXRyaXguIE5vdGUgdGhlIFBDQSB2ZWN0b3JzIHdlIGdvdCBhcmUgZXhhY3RseSB0aGUgc2FtZSANCmFzIHRoZSBvbmVzIHdlIGdvdCB1c2luZyB0aGUgYHByY29tcGAgZnVuY3Rpb24uDQpgYGB7cn0NCmlyaXMubWF0IDwtIGFzLm1hdHJpeChsb2cuaXJpcykNCiMgVXNlIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXggc28gdGhhdCB0aGUgZGF0YSBhcmUgY2VudGVyZWQgYW5kIHNjYWxlZA0KY292Lm1hdCA8LSBjb3IoaXJpcy5tYXQpIA0KZWlnZW4oY292Lm1hdCkNCmBgYA0KDQo=