【问题标题】:R: Correlation matrix between multiple rows (objects) over multiple columns (variables)R:多列(变量)上多行(对象)之间的相关矩阵
【发布时间】:2021-01-03 16:30:55
【问题描述】:

我正在处理多列(变量)上的多行(对象)的数据框。我想看看是否有任何行(对象)是相关的。我已经阅读了 corr() 并且似乎对于一个变量,我可以转置我的数据帧并将其输入 corr() 函数。但是如何处理每个观察/对象的多个变量?最终目标是在热图上绘制相关矩阵以吸引感兴趣的对象。

示例如下:

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 库那样在热图上绘制它们的相关性呢?

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    这可能会做到:

    # 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() 重做您的数据框,因为它会生成数字列。

    【讨论】:

    • 但这仅返回所有变量(列)之间的相关性。我想得到观察结果(行),每个观察结果都由多列(变量)解释。所以最终目标是我得到一个行到行的相关矩阵。绘制它
    • 嗯,我不确定我是否理解你。如果你想得到一个行到行的相关矩阵,你可以用t()转置你的数据框,就像cor(t(YourDataFrame[,c("Variable1","Variable2","Variable3")]), use="complete")一样。也许您可以编辑您的问题并发布一个示例来说明您的数据是什么样的?
    • 是的,你是对的,我写这个问题很草率。让我举一些例子。道歉
    • 嗨@Werner,我认为它可能有效。但是,现在相关矩阵仅按数字显示行和列,而不是它们的实际名称,所以我不确定。我已经更新了我的问题,希望这对我的目标有所帮助
    • 谢谢!是的,结果和我想象的一样。看起来我被困在转置部分。现在我只需要美化热图。此测试数据中有 190 种治疗方法,还有更多,哈哈
    【解决方案2】:

    我认为您实际上是在错误地看待这个问题。您应该将药物视为变量并研究测量的相关结构。

    即感兴趣的相关矩阵是

    cor(cbind(Measurment_V1, Measurment_V2, Measurment_V3, Measurment_V4, Measurment_V5))
    

    一种方法是对测量值进行 PCA,以便您可以将药物放置在标准化空间中。

    然后,您可以在该空间中寻找药物的聚类,以查看彼此相似的药物。请注意,在测量的原始空间中进行聚类要困难得多,因为它们的尺度非常不同——您必须以某种方式对它们进行标准化,这就是 PCA 可以做的。它还降低了测量空间的维度,这将帮助您可视化正在发生的事情。

    【讨论】:

    • 关于 PCA 的好点,我实际上在单细胞级别(更大的数据集)以及 tSNE 和 UMAP 都这样做了。在这里,我正在研究治疗的良好效果,目的是概述某些药物是否相似。我希望相关性可以成为一种快速的肮脏方式。虽然我不清楚测量的相关性可以告诉我什么。你能再解释一下吗?
    • 您提供的测量结果看起来像是对每种药物进行了一次多次不同的实验(而不是对同一种药物重复进行的实验),因此不同药物之间存在差异。如果前几个主成分解释了大部分方差,您可以将每种药物的位置绘制在二维散点图上,并通过肉眼查看药物效果之间是否存在相似之处。
    • 我的坏朋友,很抱歉造成混乱,我用于这个肮脏的快速查看的数据实际上是 15 次实验的平均测量表,这样做我已经失去了变化。以前,当我随机抽取井中的单个细胞进行 PCA 时,猜猜看,前 12 个 PCA 仅解释了约 75% 的方差。但非常好的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2019-07-23
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多