Aynı türden 92 veri setim var.
Mümkün olan herhangi iki kombinasyon için bir korelasyon matrisi yapmak istiyorum.
yani 92 x92'lik bir matris istiyorum.
öyle ki (ci, cj) öğesi ci ve cj arasında korelasyon olmalıdır.
Bunu nasıl yaparım?
Aynı türden 92 veri setim var.
Mümkün olan herhangi iki kombinasyon için bir korelasyon matrisi yapmak istiyorum.
yani 92 x92'lik bir matris istiyorum.
öyle ki (ci, cj) öğesi ci ve cj arasında korelasyon olmalıdır.
Bunu nasıl yaparım?
Yanıtlar:
Bir örnek,
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
cor(d) # get correlations (returns matrix)
'Corrplot' paketini kullanabilirsiniz.
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
M <- cor(d) # get correlations
library('corrplot') #package corrplot
corrplot(M, method = "circle") #plot matrix
Daha fazla bilgi burada: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
Kor fonksiyonu korelasyon hesaplanmasında matrisin sütun kullanır. Yani, satır sayısı x matrisiniz ve y matrisiniz arasında aynı olmalıdır . Ör .:
set.seed(1)
x <- matrix(rnorm(20), nrow=5, ncol=4)
y <- matrix(rnorm(15), nrow=5, ncol=3)
COR <- cor(x,y)
COR
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, xlab="x column", ylab="y column")
text(expand.grid(x=seq(dim(x)[2]), y=seq(dim(y)[2])), labels=round(c(COR),2))
Tek bir matrisle hesaplanan bir korelasyon matrisindeki özel satır ve sütun etiketlerinin bir örneğini burada bulabilirsiniz:
png("corplot.png", width=5, height=5, units="in", res=200)
op <- par(mar=c(6,6,1,1), ps=10)
COR <- cor(iris[,1:4])
image(x=seq(nrow(COR)), y=seq(ncol(COR)), z=cor(iris[,1:4]), axes=F, xlab="", ylab="")
text(expand.grid(x=seq(dim(COR)[1]), y=seq(dim(COR)[2])), labels=round(c(COR),2))
box()
axis(1, at=seq(nrow(COR)), labels = rownames(COR), las=2)
axis(2, at=seq(ncol(COR)), labels = colnames(COR), las=1)
par(op)
dev.off()
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column")
image
İşlevi otomatik satır ve sütun adlarını almaz, bu nedenle bu eklenmelidir.
Qtlcharts'a bir göz atın . Etkileşimli korelasyon matrisleri oluşturmanıza olanak sağlar :
library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)
Paketin vinyetinde olduğu gibi daha fazla değişkeni ilişkilendirdiğinizde daha etkileyici:
Burada bunu başarmanın başka yolları da var: ( Korelasyon matrisini bir grafiğe çizin ), ancak kutudaki korelasyonların bulunduğu versiyonunuzu beğendim. Değişken adlarını yalnızca bu dizin numaraları yerine x ve y sütunlarına eklemenin bir yolu var mı? Benim için bu, bunu mükemmel bir çözüm yapar. Teşekkürler!
düzenleme: [Kutudaki Marc] tarafından yayınla ilgili yorum yapmaya çalışıyordum, ancak ne yaptığımı açıkça bilmiyorum. Ancak bu soruyu kendim cevaplamayı başardım.
d matrisse (veya orijinal veri çerçevesi) ve sütun adları istediğiniz şeyse, aşağıdaki çalışır:
axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 isimleri normal konumlarına geri çevirirdi, benimki uzun, bu yüzden onları eksene dik yapmak için las = 2 kullandım.
edit2: resim () işlevinin ızgaradaki sayıları yazdırmasını engellemek için (aksi takdirde değişken etiketlerinizle örtüşürler), xaxt = 'n' ekleyin, örneğin:
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column", xaxt='n')
cor
veya pakettekircorr
işleve bir göz atınHmisc