2016-12-09 20 views
0

Rのgstatパッケージでkrige関数を使用して、いくつかの空間的な海洋深度データを補間しようとしています。約1000ポイント以上を探しています。関数は、無理やりに時間をかけて終了します(つまり、完了するまでに数時間から数日かかる)。これは正常ですか、何か間違っていますか?私の最終的な目標は非常に大きなデータセット(> 30,000データポイント)の時空間クリギングを行うことであり、これらの実行時間では実現できないと心配しているため、特に心配しています。gstatでkrigingすると遅い速度が遅い

私はgstat-1.1-3とR-3.3.2を実行しています。以下は、私が実行しているコードです:

library(sp); library(raster); library(gstat) 
v.utm # SpatialPointsDataFrame with >30,000 points 

# Remove points with identical positons 
zd = zerodist(v.utm) 
nzd = v.utm[-zd[,1],] # Layer with no identical positions 

# Make a raster layer covering point layer 
resolution=1e4 
e = extent(as.matrix([email protected]))+resolution 
r = raster(e,resolution=resolution) 
proj4string(r) = proj4string(v.utm) 

# r is a 181x157 raster 

# Fit variogram 
fv = fit.variogram(variogram(AVGDEPTH~1, nzd),model=vgm(6000,"Exp",1,5e5,1)) 

# Krige on random sample of 500 points - works fine 
size=500 
ss=nzd[sample.int(nrow(nzd),size),] 
depth.krig = krige(AVGDEPTH~1,ss,as(r,"SpatialPixelsDataFrame"), 
       model=depth.fit) 

# Krige on random sample of 5000 points - never seems to end 
size=5000 
ss=nzd[sample.int(nrow(nzd),size),] 
depth.krig = krige(AVGDEPTH~1,ss,as(r,"SpatialPixelsDataFrame"), 
       model=depth.fit) 

答えて

1

コレスキー分解(または類似)の複雑あなたが10でポイント数を掛けた場合、時間はそれがかかることを意味し、O(N^3)されます係数1000との増加は、少なくとも限りgstatが懸念しているため、この問題のうち二つの方法があります:

  1. BLAS(例えばOpenBLAS、またはMKL)の最適化バージョンをインストールする - これが解決しませんO(n^3)問題ではあるが、利用可能なコアの数nでnを最大に高速化する可能性がある
  2. 完全共分散行列を選択しないでください地元の地域(引数maxdistおよび/またはnmax)
+0

役に立つお返事ありがとうございます。私はnmaxを合理的な量に設定しました。 variogramSTのスピードアップに似たものがあるのだろうか?私はtwindowとcutoffの引数を設定しようとしましたが、バリオグラムの計算はまだ非常に遅いです。私が使用している正確なコードは次のとおりです。 vst = variogramST(BOTTEMP〜AVGDEPTH + lat、 データ= v、cutoff = 7e5、 twindow = 5 * 365.25、tlags =(0:15)* 365.25、tunit = "days ") – user3004015

+0

バリオグラム計算はO(n^2)演算です。 –

+0

私の質問は、 'cutoff'と' twindow'の引数は、nmaxとmaxdistの引数が 'krige'の場合と同じ意味で計算の数を減らしているのでしょうか?また、私が投稿したコードでtwindow引数を正しく使用しているとは思わない。あなたはtwindowの単位が時間単位ではなく、観測の数であることを確認できますか?ありがとう! – user3004015

関連する問題