install.packages("quantmod") library("quantmod") getSymbols("AMZN", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("AAPL", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("GOOG", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("MSFT", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("META", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("TSLA", src = "yahoo", from = "2019-01-01", to = "2025-05-30") getSymbols("NVDA", src = "yahoo", from = "2019-01-01", to = "2025-05-30") price = cbind(AMZN$AMZN.Adjusted,AAPL$AAPL.Adjusted,GOOG$GOOG.Adjusted, MSFT$MSFT.Adjusted,META$META.Adjusted,TSLA$TSLA.Adjusted, NVDA$NVDA.Adjusted) ret = apply(log(price),2,diff) p = ncol(ret) n = nrow(ret) price1 = scale(price) par(mfrow=c(1,1)) ts.plot(price1,col=1:p) legend("topleft",legend=names,col=1:p,bty="n",lty=1,cex=0.75) ret = apply(log(price),2,diff) par(mfrow=c(2,4)) for (i in 1:p) ts.plot(ret[,i],ylab="",main=names[i],ylim=range(ret)) # Principal components analysis # ----------------------------- pca = princomp(ret) summary(pca) par(mfrow=c(2,4)) for (i in 1:p) plot(pca$scores[,1],ret[,i],xlab="1st principal component",ylab=names[i]) # Factor analysis # --------------- fa = factanal(ret,factors=1,scores="regression") fa par(mfrow=c(1,1)) ts.plot(fa$scores[,1],ylab="Common factor") par(mfrow=c(1,1)) plot(fa$scores[,1],pca$scores[,1],xlab="1st principal component",ylab="Common factor") cbind(fa$load,fa$uniq)