如何绘制多个时间点之间的 Pearson 相关性?

问题描述

我得到了一个 cDNA 数据集,我从中提取了 cdc15 实验:

cdc15 <- dat[,(23:46)]

然后我使用 Pearson 相关性绘制 CDc15 实验中时间点之间的相关矩阵:

    # Calculate a correlation matrix between the time points (use Pearson's correlation).
library(tidyverse)
library(ggpubr)
library(minerva)
library(ggpmisc)

mat <- as.matrix(cdc15[,-1])
cor.test(x = mat[,1],y = mat[,2],method = "pearson",use = "pairwise.complete.obs")

    ggscatter(cdc15,x = "YAL001C","YAL002W",fill = "time",add = "reg.line",title = "Correlation matrix between time points of 
          cdc15 temperature-sensitive mutant",conf.int = TRUE,cor.coef = TRUE,cor.method = "pearson",xlab = "log ratio YAL001C",ylab = "log ratio YAL002W")

但是,当我尝试绘图时,代码给了我一个错误

Error in `[.data.frame`(data,x) : undefined columns selected

垫子[,1] > 打印(垫 [,1]) YAL001C YAL002W YAL003W YAL004W YAL005C YAL007C YAL008W YAL009W 0.09 不适用 -0.22 不适用 -1.33 不适用 0.04 -0.02 YAL010C YAL011W YAL012W YAL013W YAL014C YAL015C YAL016W YAL017W -0.06 不适用 -0.94 不适用 0.34 0.08 0.15 -0.69 YAL018C YAL019W YAL020C YAL021C YAL022C YAL023C YAL024C YAL025C 0.61 0.36 -0.42 0.17 -0.24 -0.35 -0.08 1.04 YAL026C YAL027W YAL028W YAL029C YAL030W YAL031C YAL032C YAL033W -0.23 NA NA -0.40 NA -0.37 NA 0.19

导致错误的原因是什么?

解决方法

感谢您在评论中澄清数据来自哪里(“数据来源于:rdrr.io/cran/minerva/man/Spellman.html”);此信息对于解决您遇到的问题非常有用。

来自网站:

该数据集包含取自酵母细胞周期数据的子集 斯佩尔曼等人。 (1998)(见下面的参考资料)。斯佩尔曼等人。 (1998) 监测了 6108 个酵母基因的全基因组 mRNA 水平 7 分钟间隔为 119 分钟。共 256 个基因 确定在至少两个数据集中显着振荡。这 示例数据集包含这 256 个基因在 前 16 个时间点(从 0 分钟到 105 分钟)。

基于此,您正在处理的数据集中的值(mRNA 水平)不是原始数据,而是相对值(对数比率)。这会影响您分析它们的方式,并且按照您在问题中的方式使用 cor.test() 是没有意义的。

有很多方法可以分析这个数据集中的相关性,我建议从这些步骤开始:

  • 从 Spellman 数据集开始,取一个子集进行分析并包含“时间”变量(第一列):
library(tidyverse)
library(ggpubr)
library(minerva)
library(ggpmisc)

data(Spellman)
dat <- Spellman
cdc15 <- select(dat,1,23:46)
  • 绘制数据以可视化变量之间的相关性:
cdc15 %>%
  pivot_longer(cols = -c(time)) %>%
  ggplot(aes(x = time,y = value)) +
  geom_point() +
  facet_wrap(~ name,ncol = 4) +
  geom_smooth(formula = y ~ x,method = "lm") +
  stat_poly_eq(formula = y ~ x,aes(label = paste(..eq.label..,..rr.label..,sep = "~~~~")),parse = TRUE)

example_3.png

(线性模型在这里做得不是很好,因为 mRNA 水平随时间的波动存在模式)

  • 将数据转换为矩阵以促进热图/cor.tests:
mat <- as.matrix(cdc15)[,-1]
rownames(mat) <- cdc15$time
heatmap(t(mat),Colv = NA,xlab = "Time")

example_4.png

(这表明变量内部和变量之间存在很大差异)

  • pheatmap 包通常会生成更好的绘图,因此请尝试一下:
pheatmap::pheatmap(t(mat),cluster_cols = FALSE)

example_5.png

  • 选择两个变量并评估所有时间点的相关性
cor.test(x = mat[,1],y = mat[,2])

#   Pearson's product-moment correlation
#
# data:  mat[,1] and mat[,2]
# t = -2.0605,df = 21,p-value = 0.05195
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
#  -0.703393088  0.002537664
# sample estimates:
#        cor 
# -0.4100935

(两个变量之间存在相关性,但不是很强)

  • 绘制两个变量:
ggscatter(cdc15,x = "YAR035W",y = "YAR043C",add = "reg.line",title = "Correlation matrix between time points of cdc15 temperature-sensitive mutant",conf.int = TRUE,cor.coef = TRUE,cor.method = "pearson",xlab = "log ratio YAR035W",ylab = "log ratio YAR043C")

example_6.png

  • 如果您按“时间”为点着色,看看它的样子:
ggscatter(cdc15,fill = "time",shape = 21,ylab = "log ratio YAR043C")

example_7.png

  • 可视化随时间变化的所有变量(样本)之间的相关性:
corrplot::corrplot(corr = mat,is.corr = FALSE,method = "color")

example_8.png