Hiển thị tương quan không gian và thời gian trên bản đồ


16

Tôi có dữ liệu cho một mạng lưới các trạm thời tiết trên khắp Hoa Kỳ. Điều này cho tôi một khung dữ liệu chứa ngày, vĩ độ, kinh độ và một số giá trị đo được. Giả sử rằng dữ liệu được thu thập một lần mỗi ngày và được điều khiển bởi thời tiết quy mô khu vực (không, chúng tôi sẽ không tham gia vào cuộc thảo luận đó).

Tôi muốn hiển thị bằng đồ họa cách các giá trị được đo đồng thời tương quan theo thời gian và không gian. Mục tiêu của tôi là thể hiện tính đồng nhất trong khu vực (hoặc thiếu nó) của giá trị đang được điều tra.

Tập dữ liệu

Để bắt đầu, tôi lấy một nhóm các trạm ở khu vực Massachusetts và Maine. Tôi đã chọn các trang web theo vĩ độ và kinh độ từ một tệp chỉ mục có sẵn trên trang FTP của NOAA.

nhập mô tả hình ảnh ở đây

Ngay lập tức bạn thấy một vấn đề: có rất nhiều trang web có số nhận dạng tương tự hoặc rất gần nhau. FWIW, tôi xác định chúng bằng cả mã USAF và WBAN. Nhìn sâu hơn vào siêu dữ liệu tôi thấy rằng chúng có tọa độ và độ cao khác nhau và dữ liệu dừng ở một trang web sau đó bắt đầu ở một trang web khác. Vì vậy, vì tôi không biết gì hơn, tôi phải coi chúng như những trạm riêng biệt. Điều này có nghĩa là dữ liệu chứa các cặp trạm rất gần nhau.

Phân tích sơ bộ

Tôi đã thử nhóm dữ liệu theo tháng theo lịch và sau đó tính toán hồi quy bình phương nhỏ nhất bình thường giữa các cặp dữ liệu khác nhau. Sau đó, tôi vẽ sơ đồ tương quan giữa tất cả các cặp như một đường nối các trạm (bên dưới). Màu đường cho thấy giá trị của R2 từ OLS phù hợp. Hình sau đó cho thấy 30+ điểm dữ liệu từ tháng 1, tháng 2, v.v ... có mối tương quan giữa các trạm khác nhau trong khu vực quan tâm.

mối tương quan giữa dữ liệu hàng ngày trong mỗi tháng theo lịch

Tôi đã viết các mã cơ bản để giá trị trung bình hàng ngày chỉ được tính nếu có các điểm dữ liệu cứ sau 6 giờ, do đó dữ liệu phải tương đương trên các trang web.

Các vấn đề

Thật không may, đơn giản là có quá nhiều dữ liệu để hiểu về một cốt truyện. Điều đó không thể được sửa chữa bằng cách giảm kích thước của các dòng.

knhập mô tả hình ảnh ở đây

Mạng có vẻ quá phức tạp, vì vậy tôi nghĩ rằng tôi cần tìm ra một cách để giảm độ phức tạp hoặc áp dụng một số loại hạt nhân không gian.

Tôi cũng không chắc đâu là số liệu phù hợp nhất để thể hiện mối tương quan, nhưng đối với đối tượng dự định (phi kỹ thuật), hệ số tương quan từ OLS có thể chỉ là cách đơn giản nhất để giải thích. Tôi có thể cần phải trình bày một số thông tin khác như độ dốc hoặc lỗi tiêu chuẩn.

Câu hỏi

Tôi đang học theo cách của mình vào lĩnh vực này và R cùng một lúc, và sẽ đánh giá cao các đề xuất về:

  1. Tên chính thức hơn cho những gì tôi đang cố gắng làm là gì? Có một số thuật ngữ hữu ích sẽ cho phép tôi tìm thêm tài liệu? Các tìm kiếm của tôi đang vẽ các khoảng trống cho những gì phải là một ứng dụng phổ biến.
  2. Có phương pháp thích hợp hơn để hiển thị mối tương quan giữa nhiều bộ dữ liệu được phân tách trong không gian không?
  3. ... cụ thể, phương pháp nào dễ hiển thị kết quả từ trực quan?
  4. Có ai trong số này thực hiện trong R?
  5. Có bất kỳ phương pháp tiếp cận nào cho vay tự động hóa?

[Mô tả tương quan tạm thời theo không gian trong môi trường phân tích trực quan, "Abish Malik và cộng sự] [1] [1]: google.com/ Kẻ
vỗ

2
yWy

Điều gì sẽ xảy ra nếu bạn cố gắng tăng ngưỡng vẽ (0,5) và sử dụng hơn 4 bước màu? Hoặc để sử dụng các dòng mỏng hơn dày hơn thay vì màu sắc.
nadya

nđặt hàng((n2)/2)

1
Tôi đã nhận ra rằng tôi có rất nhiều việc phải làm để xử lý trước dữ liệu trước khi tôi bắt đầu phân tích tôi đã phác thảo ở đây. Đọc phản hồi từ @nadya Tôi nghĩ rằng rõ ràng tôi cần xem xét một số loại tổng hợp không gian, nhưng điều đó sẽ là thách thức vì nó sai khi tổng hợp dữ liệu về đất liền và đại dương. Sau đó, tôi cần xem xét các chiến lược lấp đầy khoảng trống. Sau đó (và chỉ sau đó) tôi có thể bắt đầu xem xét công việc lập bản đồ / trực quan hóa.
Andy Clifton

Câu trả lời:


10

Tôi nghĩ rằng có một vài tùy chọn để hiển thị loại dữ liệu này:

Tùy chọn đầu tiên sẽ là tiến hành "Phân tích chức năng trực giao theo kinh nghiệm" (EOF) (còn được gọi là "Phân tích thành phần chính" (PCA) trong các vòng tròn phi khí hậu). Đối với trường hợp của bạn, điều này nên được tiến hành trên ma trận tương quan của các vị trí dữ liệu của bạn. Ví dụ: ma trận dữ liệu của bạn datsẽ là các vị trí không gian của bạn trong kích thước cột và tham số đo được trong các hàng; Vì vậy, ma trận dữ liệu của bạn sẽ bao gồm chuỗi thời gian cho từng vị trí. Các prcomp()chức năng sẽ cho phép bạn để có được những thành phần chủ yếu, hoặc chế độ chi phối của tương quan, liên quan đến lĩnh vực này:

res <- prcomp(dat, retx = TRUE, center = TRUE, scale = TRUE) # center and scale should be "TRUE" for an analysis of dominant correlation modes)
#res$x and res$rotation will contain the PC modes in the temporal and spatial dimension, respectively.

Tùy chọn thứ hai sẽ là tạo các bản đồ thể hiện mối tương quan liên quan đến một địa điểm ưa thích:

C <- cor(dat)
#C[,n] would be the correlation values between the nth location (e.g. dat[,n]) and all other locations. 

EDIT: ví dụ bổ sung

Mặc dù ví dụ sau không sử dụng dữ liệu vui vẻ, bạn có thể áp dụng phân tích tương tự cho trường dữ liệu sau khi nội suy với DINEOF ( http://menugget.blogspot.de/2012/10/dineof-data-interpolating-empirical.html ) . Ví dụ dưới đây sử dụng tập hợp dữ liệu áp suất mực nước biển bất thường hàng tháng từ tập dữ liệu sau ( http://www.esrl.noaa.gov/sheet/gcos_wgsp/Gridded/data.hadslp2.html ):

library(sinkr) # https://github.com/marchtaylor/sinkr

# load data
data(slp)

grd <- slp$grid
time <- slp$date
field <- slp$field

# make anomaly dataset
slp.anom <- fieldAnomaly(field, time)

# EOF/PCA of SLP anom
P <- prcomp(slp.anom, center = TRUE, scale. = TRUE)

expl.var <- P$sdev^2 / sum(P$sdev^2) # explained variance
cum.expl.var <- cumsum(expl.var) # cumulative explained variance
plot(cum.expl.var)

Ánh xạ chế độ EOF hàng đầu

# make interpolation
require(akima)
require(maps)

eof.num <- 1
F1 <- interp(x=grd$lon, y=grd$lat, z=P$rotation[,eof.num]) # interpolated spatial EOF mode


png(paste0("EOF_mode", eof.num, ".png"), width=7, height=6, units="in", res=400)
op <- par(ps=10) #settings before layout
layout(matrix(c(1,2), nrow=2, ncol=1, byrow=TRUE), heights=c(4,2), widths=7)
#layout.show(2) # run to see layout; comment out to prevent plotting during .pdf
par(cex=1) # layout has the tendency change par()$cex, so this step is important for control

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
pal <- jetPal
image(F1, col=pal(100))
map("world", add=TRUE, lwd=2)
contour(F1, add=TRUE, col="white")
box()

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
plot(time, P$x[,eof.num], t="l", lwd=1, ylab="", xlab="")
plotRegionCol()
abline(h=0, lwd=2, col=8)
abline(h=seq(par()$yaxp[1], par()$yaxp[2], len=par()$yaxp[3]+1), col="white", lty=3)
abline(v=seq.Date(as.Date("1800-01-01"), as.Date("2100-01-01"), by="10 years"), col="white", lty=3)
box()
lines(time, P$x[,eof.num])
mtext(paste0("EOF ", eof.num, " [expl.var = ", round(expl.var[eof.num]*100), "%]"), side=3, line=1) 

par(op)
dev.off() # closes device

nhập mô tả hình ảnh ở đây

Tạo bản đồ tương quan

loc <- c(-90, 0)
target <- which(grd$lon==loc[1] & grd$lat==loc[2])
COR <- cor(slp.anom)
F1 <- interp(x=grd$lon, y=grd$lat, z=COR[,target]) # interpolated spatial EOF mode


png(paste0("Correlation_map", "_lon", loc[1], "_lat", loc[2], ".png"), width=7, height=5, units="in", res=400)

op <- par(ps=10) #settings before layout
layout(matrix(c(1,2), nrow=2, ncol=1, byrow=TRUE), heights=c(4,1), widths=7)
#layout.show(2) # run to see layout; comment out to prevent plotting during .pdf
par(cex=1) # layout has the tendency change par()$cex, so this step is important for control

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
pal <- colorRampPalette(c("blue", "cyan", "yellow", "red", "yellow", "cyan", "blue"))
ncolors <- 100
breaks <- seq(-1,1,,ncolors+1)
image(F1, col=pal(ncolors), breaks=breaks)
map("world", add=TRUE, lwd=2)
contour(F1, add=TRUE, col="white")
box()

par(mar=c(4,4,0,1)) # I usually set my margins before each plot
imageScale(F1, col=pal(ncolors), breaks=breaks, axis.pos = 1)
mtext("Correlation [R]", side=1, line=2.5)
box()

par(op)

dev.off() # closes device

nhập mô tả hình ảnh ở đây


Làm thế nào tốt các chức năng này đối phó với dữ liệu bị thiếu? Tôi khá thường xuyên có những khoảng trống trong chuỗi thời gian.
Andy Clifton

2
Có các phương pháp EOF được thiết kế cho trường hợp đặc biệt của "dữ liệu vui vẻ" mà bạn mô tả. Đây là một liên kết đến một bài báo đánh giá các phương pháp này: dx.doi.org/10.6084/m9.figshare.732650 . Bạn sẽ thấy rằng các phương thức RSEOF và DINEOF là chính xác nhất để lấy EOF từ các bộ dữ liệu vui vẻ. Thuật toán nội suy DINEOF có thể được tìm thấy ở đây: menugget.blogspot.de/2012/10/ Khăn
Marc trong hộp

1
Tôi nghĩ rằng đây là câu trả lời tốt nhất cho câu hỏi khủng khiếp là gì (trong nhận thức muộn màng).
Andy Clifton

3

Tôi không thấy rõ đằng sau các dòng nhưng dường như có quá nhiều điểm dữ liệu.

Vì bạn muốn thể hiện tính đồng nhất trong khu vực và không chính xác các trạm, trước tiên tôi khuyên bạn nên nhóm chúng theo không gian. Ví dụ: lớp phủ bằng "fishnet" và tính giá trị trung bình đo được trong mỗi ô (tại mọi thời điểm). Nếu bạn đặt các giá trị trung bình này vào các trung tâm ô theo cách này, bạn sẽ quét dữ liệu (hoặc bạn có thể tính toán cũng có nghĩa là vĩ độ và kinh độ trong mỗi ô nếu bạn không muốn phủ các dòng). Hoặc để trung bình trong các đơn vị hành chính, bất cứ điều gì. Sau đó, đối với các "trạm" trung bình mới này, bạn có thể tính toán các mối tương quan và vẽ sơ đồ với số lượng đường nhỏ hơn.

nhập mô tả hình ảnh ở đây

Điều này cũng có thể loại bỏ các dòng tương quan cao ngẫu nhiên duy nhất đi qua tất cả các khu vực.


x×xx

Vâng, để chiếu tọa độ là một ý tưởng tốt. Chúc may mắn!
nadya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.