2012-01-27 7 views
0

У меня есть два набора данных A и B, и я хочу найти корреляцию и построить карту контура.R - Всемирная карта контура с корреляцией между двумя наборами данных

A - это простой вектор с данными потока потока 230.

B - это сложная информация о температуре морской поверхности (SST) в соответствии с датой серии. На каждой дате SST имеет матрицу 360 * 180 столбцов зарегистрированных температур.

Вектор А (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. Однако, это не 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])) 
} 

Я думаю, что я просто нужно изменить г при контурной кода. Нужно ли переопределять данные каждого А в виде матрицы данных 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». Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^