R:多列(变量)上多行(对象)之间的相关矩阵
R: Correlation matrix between multiple rows (objects) over multiple columns (variables)
我正在处理多列(变量)上多行(对象)的数据框。我想看看是否有任何行(对象)相关。我一直在阅读 corr() 并且似乎对于一个变量,我可以转置我的数据帧并将其输入 corr() 函数。但是如何处理每个 observation/object 的多个变量?最终目标,在热图上绘制相关矩阵以吸引有趣的对象。
例子如下:
Treatment <- c('Drug A','Drug B','Drug C','Drug D','Drug E','Drug F')
Measurment_V1 <- runif(6, 0, 3000)
Measurment_V2 <- runif(6, 0, 20)
Measurment_V3 <- runif(6, 0, 1)
Measurment_V4 <- runif(6, 0, 120000)
Measurment_V5 <- runif(6, 0, 100)
df<- as.data.frame(cbind(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5))
每种药物都用测量值 V1-V5 来解释(实际上有几百列)
那么如何获得所有药物 ABCD 之间的相关矩阵,然后像 Hmisc 库那样在热图上绘制它们的相关性呢?
这可能会做到:
# Redo your data frame
df <- data.frame(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5)
# Transpose numeric columns
dft <- as.data.frame(t(df[,2:6]))
# Rename vars
names(dft) <- c("Drug_A","Drug_B","Drug_C","Drug_D","Drug_E","Drug_F")
# Correlation matrix
cor(dft)
Output:
Drug_A Drug_B Drug_C Drug_D Drug_E Drug_F
Drug_A 1.0000000 0.9995697 0.9999240 0.9999939 0.9998902 0.9999665
Drug_B 0.9995697 1.0000000 0.9998554 0.9994612 0.9998946 0.9997758
Drug_C 0.9999240 0.9998554 1.0000000 0.9998748 0.9999969 0.9999911
Drug_D 0.9999939 0.9994612 0.9998748 1.0000000 0.9998324 0.9999320
Drug_E 0.9998902 0.9998946 0.9999969 0.9998324 1.0000000 0.9999777
Drug_F 0.9999665 0.9997758 0.9999911 0.9999320 0.9999777 1.0000000
然后您可以使用上述相关矩阵绘制热图。
请注意,我使用 data.frame()
重做您的数据框,因为它生成数字列。
我认为您实际上是在错误地看待这个问题。您应该将药物视为变量并研究测量的相关结构。
即感兴趣的相关矩阵是
cor(cbind(Measurment_V1, Measurment_V2, Measurment_V3, Measurment_V4, Measurment_V5))
一种方法是对测量结果进行 PCA,这样您就可以将药物置于标准化 space。
然后您可以在 space 中寻找药物的聚类,看看哪些药物彼此相似。请注意,在测量的原始 space 中进行聚类要困难得多,因为它们的尺度非常不同 - 您必须以某种方式对它们进行标准化,这正是 PCA 可以做的。它还降低了测量的维度space,这将帮助您直观地了解正在发生的事情。
我正在处理多列(变量)上多行(对象)的数据框。我想看看是否有任何行(对象)相关。我一直在阅读 corr() 并且似乎对于一个变量,我可以转置我的数据帧并将其输入 corr() 函数。但是如何处理每个 observation/object 的多个变量?最终目标,在热图上绘制相关矩阵以吸引有趣的对象。
例子如下:
Treatment <- c('Drug A','Drug B','Drug C','Drug D','Drug E','Drug F')
Measurment_V1 <- runif(6, 0, 3000)
Measurment_V2 <- runif(6, 0, 20)
Measurment_V3 <- runif(6, 0, 1)
Measurment_V4 <- runif(6, 0, 120000)
Measurment_V5 <- runif(6, 0, 100)
df<- as.data.frame(cbind(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5))
每种药物都用测量值 V1-V5 来解释(实际上有几百列) 那么如何获得所有药物 ABCD 之间的相关矩阵,然后像 Hmisc 库那样在热图上绘制它们的相关性呢?
这可能会做到:
# Redo your data frame
df <- data.frame(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5)
# Transpose numeric columns
dft <- as.data.frame(t(df[,2:6]))
# Rename vars
names(dft) <- c("Drug_A","Drug_B","Drug_C","Drug_D","Drug_E","Drug_F")
# Correlation matrix
cor(dft)
Output:
Drug_A Drug_B Drug_C Drug_D Drug_E Drug_F
Drug_A 1.0000000 0.9995697 0.9999240 0.9999939 0.9998902 0.9999665
Drug_B 0.9995697 1.0000000 0.9998554 0.9994612 0.9998946 0.9997758
Drug_C 0.9999240 0.9998554 1.0000000 0.9998748 0.9999969 0.9999911
Drug_D 0.9999939 0.9994612 0.9998748 1.0000000 0.9998324 0.9999320
Drug_E 0.9998902 0.9998946 0.9999969 0.9998324 1.0000000 0.9999777
Drug_F 0.9999665 0.9997758 0.9999911 0.9999320 0.9999777 1.0000000
然后您可以使用上述相关矩阵绘制热图。
请注意,我使用 data.frame()
重做您的数据框,因为它生成数字列。
我认为您实际上是在错误地看待这个问题。您应该将药物视为变量并研究测量的相关结构。
即感兴趣的相关矩阵是
cor(cbind(Measurment_V1, Measurment_V2, Measurment_V3, Measurment_V4, Measurment_V5))
一种方法是对测量结果进行 PCA,这样您就可以将药物置于标准化 space。
然后您可以在 space 中寻找药物的聚类,看看哪些药物彼此相似。请注意,在测量的原始 space 中进行聚类要困难得多,因为它们的尺度非常不同 - 您必须以某种方式对它们进行标准化,这正是 PCA 可以做的。它还降低了测量的维度space,这将帮助您直观地了解正在发生的事情。