[This article was first published on Quantitative thoughts » EN, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I came up with an idea to draw correlation network to get a grasp about relationship between a list of stocks. An alternative way to show correlation matrix would be head map, which can have limitations with big matrices (>100).
Unfortunately, ggplot2 package doesn’t have a easy way to draw the networks, so I was left with igraph or network. I tried both, but somehow chose igraph. If you want to master either package I highly recommend to start from theoretical part – it is very well written and it will save your time trying to understand the package’s conception.
Here is correlation matrix of stocks, which correlation coef. is more than 0.5:
require(xts) require(quantmod) require(igraph) cor_mat<- matrix( runif(100), nr=10 ) cor_mat[ lower.tri(cor_mat, diag=TRUE) ]<- 0 cor_mat[ abs(cor_mat) < 0.5]<- 0 graph <- graph.adjacency(cor_mat>0.5, weighted=TRUE, mode="upper") E(graph)$weight<-t(cor_mat)[abs(t(cor_mat))>0.5] E(graph)[ weight>0.7 ]$color <- "black" E(graph)[ weight>=0.65 & weight<0.7 ]$color <- "red" E(graph)[ weight>=0.6 &weight<0.65 ]$color <- "green" E(graph)[ weight>=0.55 &weight<0.6 ]$color <- "blue" E(graph)[ weight<0.55 ]$color <- "yellow" V(graph)$label<- seq(1:10)#V(graph)$name graph$layout <- layout.fruchterman.reingold factor<-as.factor(cut(E(graph)$weight*10,c(4,5,6,7,8),labels=c(1,10,20,30))) png('corr_network.png',width=500) plot(decompose.graph(graph)[[which.max(sapply(decompose.graph(graph), vcount))]],edge.width =as.numeric(factor)*1.5,frame=T) legend("bottomleft", title="Colors", cex=0.75, pch=16, col=c("black", "blue","red", "green","pink"), legend=c(">70%", "65-70","60-65","55-60","50-55"), ncol=2) dev.off() |
The code can be found on github.
To leave a comment for the author, please follow the link and comment on their blog: Quantitative thoughts » EN.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.