マップでの空間的および時間的相関の表示


16

私は全米の気象観測所のネットワークのデータを持っています。これにより、日付、緯度、経度、測定値を含むデータフレームが表示されます。データは1日に1回収集され、地域規模の天候によって駆動されると仮定します(いいえ、その議論に入るつもりはありません)。

同時に測定された値が時間と空間にわたってどのように相関するかをグラフィカルに示したいと思います。私の目標は、調査されている価値の地域的な均質性(またはその欠如)を示すことです。

データセット

まず、マサチューセッツ州とメイン州の地域にあるステーションのグループに参加しました。NOAAのFTPサイトで利用可能なインデックスファイルから緯度と経度でサイトを選択しました。

ここに画像の説明を入力してください

すぐに1つの問題が表示されます。同じような識別子を持つサイトや非常に近いサイトがたくさんあります。FWIW、私はUSAFとWBANコードの両方を使用してそれらを識別します。メタデータを詳しく見ると、座標と標高が異なり、データはあるサイトで停止してから別のサイトで開始することがわかりました。それで、私はそれ以上良く分からないので、それらを別々のステーションとして扱わなければなりません。これは、データが互いに非常に近いステーションのペアを含むことを意味します。

予備分析

暦月ごとにデータをグループ化して、異なるデータのペア間の通常の最小二乗回帰を計算してみました。次に、すべてのペア間の相関を、ステーションを結ぶ線としてプロットします(下図)。線の色は、OLS近似からのR2の値を示しています。図は、1月、2月などからの30以上のデータポイントが、対象エリアの異なるステーション間でどのように相関しているかを示しています。

各暦月の日次データ間の相関

6時間ごとにデータポイントがある場合にのみ1日の平均が計算されるように基礎となるコードを記述したため、データはサイト間で比較可能である必要があります。

問題点

残念ながら、1つのプロットで意味をなさないデータが多すぎます。行のサイズを小さくしても修正できません。

領域内の最近傍間の相関をプロットしようとしましたが、それはすぐに混乱に変わります。以下のファセットは、ステーションのサブセットから最近傍を使用して、相関値のないネットワークを示しています。この図は、概念をテストするためのものです。 kここに画像の説明を入力してください

ネットワークは複雑すぎるように見えるので、複雑さを軽減する方法、または何らかの空間カーネルを適用する方法を見つける必要があると思います。

また、相関を示すのに最も適切なメトリックが何であるかはわかりませんが、意図した(非技術的な)対象者にとっては、OLSからの相関係数が最も簡単に説明できるかもしれません。勾配や標準誤差などの他の情報も提示する必要がある場合があります。

ご質問

私はこの分野とRへの道を同時に学んでいます。

  1. 私がやろうとしていることの正式な名前は何ですか?より多くの文献を見つけることができる役立つ用語はありますか?私の検索は、一般的なアプリケーションでなければならないもののために空白を描いています。
  2. スペースで区切られた複数のデータセット間の相関を示すより適切な方法はありますか?
  3. ...特に、視覚的に結果を簡単に表示できる方法はありますか?
  4. これらのいずれかがRに実装されていますか?
  5. これらのアプローチのいずれかが自動化に役立ちますか?

[ビジュアル解析環境、」Abishマリクら空間的時間的相関を記述する。] [1] [1]:google.com/...
パット

2
あなたのアプローチは、バリオグラムの推定と非常によく似ています。これは、セミバリオグラムの非マップベースの散布図を示唆しています。あなたは空間ウェイトマトリックスに落ち着くことができれば、あなたもあるモラン散布、プロットでき y軸とで、x軸上に。W yのyWy
アンディW

プロットのしきい値(0.5)を増やして、4つ以上のカラーステップを使用しようとするとどうなりますか?または、色の代わりに細い線を使用します。
ナディア

@nadya-私はプロットのしきい値を増やすことを考えてきましたが、それは良いアイデアだと思います。ただし、6色を超えると、目は異なるレベルを認識するのが困難になります。各サイトで最高相関関係のみをプロットできます。しかし、毎月のデータに相当相関を計算してプロットすることを避ける方法があればいいのにと思います。ペアの数を減らすためにネットワーク/グラフ理論から使用できるものがあるかもしれません。n 2/ 2 n注文n2/2
アンディクリフトン

1
このことから、ここで概説した分析を開始する前に、データの前処理に多くの作業を行う必要があることに気付きました。@nadyaからの応答を読む何らかの空間的な集約を検討する必要があることは明らかだと思いますが、陸と海のデータを集約するのは間違っているため、それは難しいでしょう。次に、ギャップを埋める戦略を検討する必要があります。それから(そしてその時だけ)マッピング/視覚化の仕事を見始めることができます。
アンディクリフトン

回答:


10

このタイプのデータを表示するには、いくつかのオプションがあると思います。

最初のオプションは、「経験的直交関数分析」(EOF)(非気候円で「主成分分析」(PCA)とも呼ばれます)を実行することです。あなたの場合、これはあなたのデータの場所の相関行列で行われるべきです。たとえば、データマトリックスdatは、列次元の空間位置であり、行の測定されたパラメーターです。したがって、データマトリックスは各場所の時系列で構成されます。このprcomp()関数を使用すると、このフィールドに関連する主成分または相関の支配的なモードを取得できます。

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.

2番目のオプションは、関心のある個々の場所に関連する相関を示すマップを作成することです。

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

編集:追加の例

次の例ではギャップのあるデータを使用していませんが、DINEOFによる補間に続いて同じ分析をデータフィールドに適用できます(http://menugget.blogspot.de/2012/10/dineof-data-interpolating-empirical.html) 。以下の例では、次のデータセット(http://www.esrl.noaa.gov/psd/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)

主要なEOFモードをマップする

# 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

ここに画像の説明を入力してください

相関マップを作成する

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

ここに画像の説明を入力してください


これらの関数は欠損データをどの程度うまく処理しますか?時系列にギャップがあることがよくあります。
アンディクリフトン

2
説明する「ギャップのあるデータ」の特殊なケース用に設計されたEOFメソッドがあります。以下は、これらの方法をレビューする論文へのリンクです: dx.doi.org/10.6084/m9.figshare.732650。ギャップのあるデータセットからEOFを取得するには、RSEOFメソッドとDINEOFメソッドが最も正確であることがわかります。DINEOF補間アルゴリズムは、ここで見つけることができます:menugget.blogspot.de/2012/10/...
マルク・ボックスで、

1
これは恐ろしい質問(後知恵で)に対する最善の答えだと思います。
アンディクリフトン

3

線の後ろにははっきりと見えませんが、データポイントが多すぎるようです。

正確なステーションではなく、地域の均質性を表示するため、まず空間的にグループ化することをお勧めします。たとえば、「フィッシュネット」でオーバーレイし、すべてのセルで(すべての時刻で)平均測定値を計算します。この方法でこれらの平均値をセルの中心に配置すると、データをラスタライズできます(または、ラインをオーバーレイしたくない場合は、すべてのセルの平均緯度と経度も計算できます)。または、管理ユニット内の平均をなんとかします。次に、これらの新しい平均「ステーション」について、相関を計算し、より少ない行数でマップをプロットできます。

ここに画像の説明を入力してください

また、これにより、すべての領域を通るランダムな単一の高相関線を削除できます。


バツ×バツバツ

はい、座標を投影するのは良い考えです。幸運を!
ナディア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.