0

automap パッケージの autoKrige() 関数を使用して、ユニバーサル クリギングを簡単に適用しようとしています。不規則な間隔の測定グリッドがあり、それらの間を細かい空間スケールで補間したいと考えています。コード例:

    library('automap')

    # create an irregularly spaced grid
    y <-x <-c(-5,-4,-2,-1,-0.5,0,0.5,1,2,4,5)
    grid <-expand.grid(x,y)
    names(grid) <-c('x', 'y')

    # create some measurements, greatest in the centre, with some noise
    vals <-apply(grid,1, function(x) {12/(0.1+sqrt(x[1]^2 + x[2]^2))+rnorm(1,2,1.5)})

    # get data into sp format
    s <-SpatialPointsDataFrame(grid, data.frame(vals))

    # make some prediction locations and get them into sp format
    pred <-expand.grid(seq(-5,5,by=0.5), seq(-5,5,by=0.5))
    pred <-cbind(pred[,1], pred[,2])    # this seems to be needed, not sure why
    pred <-SpatialPoints(pred)

    # try universal kriging
    surf <-autoKrige(vals~x+y, s, new_data=pred)    

これにより、次のエラーが発生します。

    Error in gstat.formula.predict(d$formula, newdata, na.action = na.action,  : 
      NROW(locs) != NROW(X): this should not occur

new_data の行数を元のデータと同じにしようとしましたが、new_data の座標を元のデータとまったく同じにしようとしましたが、それでもこのエラーが発生します。私は地球統計学の手法に慣れていないので、基本的な間違いを犯していたら申し訳ありません。誰が私が間違っているのかアドバイスできますか? ありがとう。

4

1 に答える 1

5

問題は、関数の構文がautoKrige間違っていることです。への数式入力はautoKrige、使用する線形モデルを指定します。たとえば、次のようになります。

log(zinc) ~ dist

データセットからmeuse。この場合、線形モデルを使用してモデル化し、このモデルの残差はlog(zinc)バリオグラムdistを使用して補間されます。基本的に、ユニバーサル クリギングは、空間的に相関する残差を持つ線形回帰です。

あなたの場合、次を指定します。

val ~ x+y

そのため、autoKrige (実際には) は最初に対と(多変量回帰)gstatの線形モデルをモデル化し、バリオグラム モデルを使用して残差を補間しようとします。ただし、および変数は にはありません。valsxyxySpatialPointsDataFrame

あなたがやりたいと思うことは、バリオグラム モデルを使用して空間的にのみ補間することです。その場合、線形モデルは非常に単純で、実際には平均値をフィッティングするだけです。

vals ~ 1

の平均valsが決定され、バリオグラム モデルを使用して残差が補間されます。これは実際には通常のクリギングとして知られています。への呼び出しautoKrigeは次のようになります。

surf <-autoKrige(vals ~ 1, s, new_data=pred) 
于 2015-09-08T13:57:34.367 に答える