の遷移関数のための適切な方法次のコードは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)
の違いです。
そして、私は21.1の距離を持っcostDistance(T, c1, c2)
を使用して:
はこれを確認するために、私はこれらの2つの非常に異なるプロットをgdistanceマニュアルから上記のコードを使用して遷移関数の両方のバージョンを走った、となりました第1は13.6、第2は13.6であった。
明らかに、これらは非常に異なる結果です。ですから、私の質問は、コストマトリックス/レイヤー/ラスターからTransitionLayerオブジェクトを作成する正しい方法は何ですか?
コンダクタンスとコスト(抵抗)は逆に関連していると私は理解しています(G = 1/R)。したがって、最初の例では、コストレイヤを使用していますが、2番目のレイヤでは対応するコンダクタンスレイヤ(1/r)を使用しています。それは同じレイヤーであり、異なる表現であることを考えれば、どちらも最終的に同じコスト・パスを生み出すべきではないでしょうか? (1/r、関数(x)1 /平均(1/x)、8) 'は、実際には' T < - transition(1/r、mean、8)結果? – anjama
コンダクタンス層で高調波を取り、抵抗層で算術平均をとった場合も同じ結果が得られます。 T < - 遷移(1/r、関数(x)1 /平均(1/x)、8)は高調波平均をとることに等しい。 – JacobVanEtten
つまり、「異なる表現」とは、同じ操作を行い、最後に逆数をとり、結果が同じであることを期待できるということを意味しません。これは算術平均の平均速度と同じ過ちですが、これは間違っています(「物理学」の下の調和平均に関するWikipediaの記事を参照)。 – JacobVanEtten