Как убедиться, что трехмерное синтетическое случайное поле воспроизводит свою вариограмму с помощью R gstat? - PullRequest
0 голосов
/ 14 сентября 2018

Я попытался сгенерировать трехмерное синтетическое пространственное случайное поле, используя безусловное моделирование в R gstat;со строками ниже.Однако мои попытки проверить, могут ли исчерпывающие данные воспроизвести вариограмму, использованную при создании поля, оказались безуспешными.Когда я делаю поле изотропным;модель вариограммы воспроизводится легко.Но когда я делаю это анизотропным (как показано ниже);Я заметил, что направления 90 градусов (основная непрерывность) и 0 градусов (малая непрерывность) приводили к одинаковым значениям вариограммы и графикам;и диапазон всегда составляет около 45 единиц расстояния.Я ожидаю 90 единиц расстояния как основной диапазон и 45 как второстепенный.

Я избегал установки grid = TRUE в вызове вариограммы;как указано в ответе на аналогичный вопрос в этом Переполнении стека.

library(gstat)
library(sp)

delta_X = 20
delta_Y = 20
delta_Z = 10
grd=expand.grid(1:10,1:10,1:5)
names(grd) = c("x","y","z")
BlockEasting = (delta_X*(grd$x-0.5))+0 #This is the x-coordinate of the block center.
BlockNorthing = (delta_Y*(grd$y-0.5))+0 #This is the y-coordinate of the block center.
BlockDepth = (delta_Z*(grd$z-0.5))+0 #This is the z-coordinate of the block center.
Scaledgrd = data.frame(BlockEasting, BlockNorthing, BlockDepth) 
SimPar = gstat(formula = p~1, locations=~BlockEasting+BlockNorthing+BlockDepth, dummy=T, beta=0, nmin=8, nmax=16, model= vgm(nugget = 0.02, psill = 0.98, range = 90, model = "Sph", anis=c(90,0,0,0.5,0.1)))
Sim = predict(SimPar, newdata = Scaledgrd, nsim = 1,debug=-1)
SimS = Sim
coordinates(SimS) = ~BlockEasting+BlockNorthing+BlockDepth
VarSim_90azim = variogram(sim1~1,SimS, alpha = 90, beta=0, cutoff = 150)
VarSim_0azim = variogram(sim1~1,SimS, alpha = 0, beta=0, cutoff = 150)
plot(VarSim_90azim$dist, VarSim_90azim$gamma, xlim = c(0,150), ylim = c(0,1.4))
plot(VarSim_0azim$dist, VarSim_0azim$gamma, xlim = c(0,150), ylim = c(0,1.4))

enter image description here

enter image description here

...