R - 两个数据集之间具有相关性的世界等高线图

时间:2012-01-27 05:39:31

标签: r matrix correlation contour world-map

我有两个数据集A和B,我想找到相关性并绘制等值线图。

A只是一个包含230个流数据的简单向量。

B是系列日期下的复杂海面温度(SST)数据。在每个日期,SST都有一个360row * 180列的记录温度矩阵。

向量A(230数据)是:

Houlgrave_flow_1981_2000 = window(Houlgrave_flow_average, start = as.Date("1981-11-15"),end = as.Date("2000-12-15")) 
Houlgrave_SF_1981_2000 = coredata(Houlgrave_flow_1981_2000)

矩阵B的维数如下所示,我只使用1到230.

> dim(ssta_sst)
[1] 360 180 362

我找到相关性的想法如下。

z_correlation = cor(Houlgrave_SF_SST_1981_2000,ssta_sst[c(181:360, 1:180),,i])

尝试,i = 1。但是,它不起作用。错误消息说:

"Error in cor(Houlgrave_SF_SST_1981_2000, ssta_sst[c(181:360, 1:180), ,  : 
  incompatible dimensions.".

另外,这是我的等值线图代码,

require(maps)
par(ask=TRUE)
for (i in 1:230) {
    maps::map(database="world", fill=TRUE, col="light blue")
    maps::map.axes()
    contour(x=lon_sst, y=lat_sst, z=cor(Houlgrave_SF_1981_2000,ssta_sst[c(181:360, 1:180),,i]), zlim=c(-3,3), add=TRUE)
    title(paste("Year: ", year_sst[i], ", Month: ", month_sst[i]))
}

我想我只需要在轮廓代码下修改z。是否有必要将每个A的数据重新定义为360 * 180数据矩阵?

1 个答案:

答案 0 :(得分:1)

如果我理解正确的问题,你有一个时间序列,即一个索引可以解释为时间的矢量,一个三维数组,其索引可以解释为时间和位置。

# Sample data
n <- 230
m <- 100
dates <- seq.Date( from=Sys.Date(), length=n, by="day" )
flow <- rnorm(n)
names(flow) <- as.character(dates)
temperatures <- array( rlnorm(n*m*m), dim=c(n,m,m) )
dimnames( temperatures ) <- list(
  time = as.character( dates ),
  longitude = NULL,
  latitude = NULL
)

对于每个职位,您可以使用u计算您的“流量”时间序列与该职位的“温度”时间序列(apply)之间的相关性。 / p>

correlations <- apply( 
  temperatures, 
  2:3, 
  function (u) cor(u, flow) 
)
image(correlations)