r-cor()热图也考虑了滞后



我有这个数据帧:

> head(calcium)
Cell 1    Cell 2     Cell 3    Cell 4    Cell 5    Cell 6    Cell 7    Cell 8    Cell 9   Cell 10
1 0.4672073 0.5844194 0.53550783 0.5364516 0.3470978 0.2802241 0.3965193 0.4651296 0.4871049 0.5685573
2 0.6724369 0.5549080 0.46405108 0.5231966 0.3634458 0.4480713 0.4991682 0.5315563 0.5486042 0.5294624
3 0.4596055 0.4670149 0.49120023 0.4395472 0.2961227 0.2931165 0.3343016 0.3347550 0.5988327 0.3738076
4 0.5033532 0.6265054 0.38094926 0.5931815 0.4030199 0.3461845 0.4966594 0.5039769 0.6795089 0.4875191
5 0.2544972 0.3734030 0.06739901 0.2006546 0.1038821 0.2315288 0.1704387 0.1001154 0.3799489 0.3224333
Cell 11   Cell 12   Cell 13   Cell 14   Cell 15    Cell 16   Cell 17   Cell 18   Cell 19   Cell 20
1 0.6870339 0.6695488 0.6130446 0.5356461 0.6609977 0.58372848 0.5422807 0.5344803 0.6320900 0.6294263
2 0.5734583 0.6547612 0.5392496 0.5330794 0.5704163 0.29659694 0.5567181 0.5780661 0.4010656 0.5863210
3 0.3404278 0.4653025 0.4841558 0.4371394 0.4779519 0.37612878 0.5571457 0.4525741 0.3330830 0.6095697
4 0.5570465 0.5552679 0.5799134 0.5745080 0.5390752 0.44927465 0.5118969 0.5618096 0.4442722 0.5840596
5 0.2730119 0.2671422 0.1901299 0.2949408 0.2715825 0.03302615 0.2712914 0.2962793 0.2137080 0.3243795
> tail(calcium)
Cell 1    Cell 2    Cell 3    Cell 4    Cell 5    Cell 6    Cell 7    Cell 8    Cell 9   Cell 10
1495 0.4740832 0.5869490 0.5582463 0.6920769 0.5148404 0.4017368 0.6079173 0.7788185 0.8114776 0.7092727
1496 0.6341606 0.5733480 0.4622866 0.6170735 0.3884858 0.3778201 0.5342382 0.6239193 0.5823868 0.6487626
1497 0.3662752 0.4143892 0.2904592 0.4388380 0.2732026 0.4264538 0.4004278 0.4336887 0.3919094 0.4598705
1498 0.4719526 0.5387774 0.4595078 0.4988954 0.4979742 0.3102995 0.5260781 0.5331988 0.6804864 0.6189913
1499 0.4194409 0.5404455 0.4455472 0.5634257 0.4054463 0.4645974 0.4627777 0.5951874 0.4545299 0.6653680
Cell 11   Cell 12   Cell 13   Cell 14   Cell 15   Cell 16   Cell 17   Cell 18   Cell 19   Cell 20
1495 0.6556259 0.7681060 0.7380664 0.7464327 0.5121680 0.6313292 0.6928669 0.7497219 0.5277792 0.7770823
1496 0.4813021 0.6268656 0.5539104 0.5806629 0.3948412 0.3627633 0.5811911 0.6131842 0.3701380 0.6591560
1497 0.3969300 0.5247286 0.4840403 0.4693218 0.4129616 0.3213437 0.5072689 0.5465302 0.2863405 0.4979315
1498 0.4925699 0.5820069 0.6174026 0.5797521 0.4415087 0.3831081 0.6320489 0.6061551 0.5626544 0.7134859
1499 0.4026728 0.5014044 0.5536220 0.5139246 0.4354147 0.3987318 0.5499019 0.5411839 0.4232987 0.5824049

我想得到一个互相关矩阵,就像我得到的那个:

library(gplots)
Colors=c("blue","yellow","red")
Colors=colorRampPalette(Colors)(100)
heatmap.2(as.matrix(cor(calcium)), dendrogram = "none",
col = Colors, trace = "none", density.info =  "none")

但这一次,我希望它考虑1的滞后。我该怎么做?

组成示例数据:

nc <- 20
calcium <- matrix(rnorm(nc^2), nc, nc)

整个矩阵上的循环(CCF(i,j,1(与CCF(j,i,1(不相同,因此我们需要计算整个矩阵,而不仅仅是一半(,计算相关矩阵:

cmat <- matrix(NA,nc,nc)
for (i in 1:nc) {
for (j in 1:nc) {
cmat[i,j] <- cor(calcium[-1,i], calcium[-nrow(calcium),j])
## or: ccf(calcium[,i],calcium[,j],lag.max=1)$acf[3,1,1]
}
}

然后在绘图代码中使用cmat代替cor(calcium)


计算CCF(i,j,1)(至少(有两种方法。

  • cor(x[-1,i], x[-nrow(x),j])手动设置列的滞后版本(通过排除一列的第一个元素和另一列的最后一个元素(
  • ccf(x[,i],x[,j],lag.max=1)$acf[3,1,1]使用内置的ccf()功能。结果在列表的$acf元素中返回,该元素是一个(滞后(x1x1数组,其中第一个维度保持滞后的范围。当lag.max=1时,计算滞后-1、0、1的互相关,因此第三个元素是+1滞后结果

最新更新