如何解决如何绘制多个时间点之间的 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)
(线性模型在这里做得不是很好,因为 mRNA 水平随时间的波动存在模式)
- 将数据转换为矩阵以促进热图/cor.tests:
mat <- as.matrix(cdc15)[,-1]
rownames(mat) <- cdc15$time
heatmap(t(mat),Colv = NA,xlab = "Time")
(这表明变量内部和变量之间存在很大差异)
- pheatmap 包通常会生成更好的绘图,因此请尝试一下:
pheatmap::pheatmap(t(mat),cluster_cols = FALSE)
- 选择两个变量并评估所有时间点的相关性
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")
- 如果您按“时间”为点着色,看看它的样子:
ggscatter(cdc15,fill = "time",shape = 21,ylab = "log ratio YAR043C")
- 可视化随时间变化的所有变量(样本)之间的相关性:
corrplot::corrplot(corr = mat,is.corr = FALSE,method = "color")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。