2017-12-10 16 views
1

の遷移関数のための適切な方法次のコードはgdistance用PDFマニュアルから遷移関数の例である:gdistance

library(raster) 
library(gdistance) 

r <- raster(nrows=6, ncols=7, xmn=0, xmx=7, ymn=0, ymx=6, crs="+proj=utm +units=m") 
r[] <- c(2, 2, 1, 1, 5, 5, 5, 
     2, 2, 8, 8, 5, 2, 1, 
     7, 1, 1, 8, 2, 2, 2, 
     8, 7, 8, 8, 8, 8, 5, 
     8, 8, 1, 1, 5, 3, 9, 
     8, 1, 1, 2, 5, 3, 9) 
T <- transition(r, function(x) 1/mean(x), 8) 
# 1/mean: reciprocal to get permeability 
T <- geoCorrection(T) 
c1 <- c(5.5,1.5) 
c2 <- c(1.5,5.5) 
#make a SpatialLines object for visualization 
sPath1 <- shortestPath(T, c1, c2, output="SpatialLines") 
plot(r) 
lines(sPath1) 
#make a TransitionLayer for further calculations 
sPath2 <- shortestPath(T, c1, c2) 
plot(raster(sPath2)) 

マイ特定の関心は、この行にある:

T <- transition(r, function(x) 1/mean(x), 8) 

ため私は、次のような多くの例を見てきました。

T <- transition(1/r, mean, 8) 

fa私が知る限り、これは同等ではない1/mean(x)mean(1/x)の違いです。 enter image description here enter image description here

そして、私は21.1の距離を持っcostDistance(T, c1, c2)を使用して:

はこれを確認するために、私はこれらの2つの非常に異なるプロットをgdistanceマニュアルから上記のコードを使用して遷移関数の両方のバージョンを走った、となりました第1は13.6、第2は13.6であった。

明らかに、これらは非常に異なる結果です。ですから、私の質問は、コストマトリックス/レイヤー/ラスターからTransitionLayerオブジェクトを作成する正しい方法は何ですか?

答えて

0

これは実際に重要な違いです。詳細については、調和平均に関するWikipediaの記事をご覧ください。

この例では、入力ラスタの値はコストです。だから正しい方法は、まずコストの算術平均をとり、その逆数を取ってコンダクタンスを得ることです。旅行者は、起点セルのコストの半分と宛先セルのコストの半分(コスト1 +コスト2)/ 2を経験する。

この場合、1/mean(x)は正しいです。

入力ラスタにコンダクタンス値がある場合、もう1つの関数は正しいです:平均(1/x)。

+0

コンダクタンスとコスト(抵抗)は逆に関連していると私は理解しています(G = 1/R)。したがって、最初の例では、コストレイヤを使用していますが、2番目のレイヤでは対応するコンダクタンスレイヤ(1/r)を使用しています。それは同じレイヤーであり、異なる表現であることを考えれば、どちらも最終的に同じコスト・パスを生み出すべきではないでしょうか? (1/r、関数(x)1 /平均(1/x)、8) 'は、実際には' T < - transition(1/r、mean、8)結果? – anjama

+0

コンダクタンス層で高調波を取り、抵抗層で算術平均をとった場合も同じ結果が得られます。 T < - 遷移(1/r、関数(x)1 /平均(1/x)、8)は高調波平均をとることに等しい。 – JacobVanEtten

+0

つまり、「異なる表現」とは、同じ操作を行い、最後に逆数をとり、結果が同じであることを期待できるということを意味しません。これは算術平均の平均速度と同じ過ちですが、これは間違っています(「物理学」の下の調和平均に関するWikipediaの記事を参照)。 – JacobVanEtten