2012-01-27 63 views
0

我有两个数据集A和B,我想找到相关性并绘制等值线图。R - 两个数据集之间具有相关性的世界等值线图

A只是一个简单的向量,有230个流的流量数据。

B是一系列日期下的复杂海表温度(SST)数据。在每个日期,SST有一个360°×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]) 

尝试,我= 1。然而,这并不work.The错误消息指出:

"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])) 
} 

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

回答

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

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

我试过你的方法,但它不起作用。对于我的流量数据,它已经是包含日期向量的动物园格式。我尝试过不同的方法,但是使用循环,它包含一个小错误。我希望你能帮助我。它在“http://stackoverflow.com/questions/9057449/r-lopp-in-matrix”上。谢谢。 – 2012-01-29 22:44:27

相关问题