[英]Correlation matrix in R from paired columns and coefficients
我有一個包含三個變量的數據框:a,b,c。 數據集中的前兩列是所有可能組合的兩個變量的配對,第三列是它們之間的相關性。 如下所示。
> var1 <- c("a","a","b")
> var2 <- c("b","c","c")
> r <- c(.55,.25,.75)
> as.data.frame(cbind(var1,var2,r))
var1 var2 r
1 a b 0.55
2 a c 0.25
3 b c 0.75
我的問題是,是否可以將包含相關性的數據幀轉換為R中的相關性矩陣對象? 我也想使用R的一些繪圖和圖形功能。
最終,我想要的是一個看起來像這樣的矩陣
a b c
a 1 .55 .25
b .55 1 .25
c .25 .75 .75
嘗試這個:
vars <- unique(c(var1, var2))
df <- cbind.data.frame(var1,var2,r)
cor.df <- expand.grid(vars, vars)
cor.df <- rbind(merge(cor.df, df, by.x=c('Var1', 'Var2'), by.y=c('var1', 'var2')),
merge(cor.df, df, by.x=c('Var2', 'Var1'), by.y=c('var1', 'var2')),
data.frame(Var1=vars, Var2=vars, r=1))
library(reshape2)
cor.mat <- dcast(cor.df, Var1~Var2, value.var='r')
rownames(cor.mat) <- cor.mat[,1]
cor.mat <- as.matrix(cor.mat[-1])
cor.mat
# a b c
# a 1.00 0.55 0.25
# b 0.55 1.00 0.75
# c 0.25 0.75 1.00
# plot the correlation matrix
library(ggplot2)
ggplot(data = cor.df, aes(x=Var1, y=Var2, fill=r)) +
geom_tile()
顯然,您具有相關矩陣的上三角部分和下三角部分(由r
提供),並且不需要data.frame來滿足您的目的。 為元素為1的矩陣提供上下三角就足夠了。
var <- unique(c(var1,var2))
corr <- matrix(1,nrow=length(r),ncol=length(r)) # a matrix with 1s
corr[lower.tri(corr,diag = FALSE)] <- r # lower triangular matrix to be r
corr[upper.tri(corr,diag = FALSE)] <- r # upper triangular matrix to be r
corr <- as.data.frame(corr) # formatting
row.names(corr) <- var # row names
colnames(corr) <- var # column names
包corrplot
具有一個功能corrplot
非常適合繪制具有不同選項的相關矩陣(請參閱參數method
)。 這是一個例子:
library(corrplot)
corrplot(as.matrix(corr),method="circle")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.