0

我正在绘制具有各种形状参数(0.5、1.5 和 2.5)和比例参数(分别为 0.25、0.16 和 0.13)值的 Matern 相关函数。这些值的灵感来自 Diggle & Ribeiro (2007) 基于模型的地质统计学一书中的一个示例,该书与 geoR 包相关。我尝试根据他们的 geoR 示例绘制相关函数,然后尝试使用 RandomFields 包绘制相同的图。这些图假设是相同的,但它们不是(见下文)。我检查了参数化,它似乎是正确的。

library(geoR)
x <- seq(0, 1.5, l=200)
m1.geoR <- cov.spatial(x, cov.model = "mat", kappa=0.5, cov.pars = c(1, 0.25))
m2.geoR <- cov.spatial(x, cov.model = "mat", kappa=1.5, cov.pars = c(1, 0.16))
m3.geoR <- cov.spatial(x, cov.model = "mat", kappa=2.5, cov.pars = c(1, 0.13))

plot(x, m1.geoR, "l")
lines(x, m2.geoR, lty=2)
lines(x, m3.geoR, lty=3)

使用 geoR 生成的绘图

library(RandomFields)
m1.RF <- RMmatern(nu=0.5, scale=0.25, var = 1)
m2.RF <- RMmatern(nu=1.5, scale=0.16, var = 1)
m3.RF <- RMmatern(nu=2.5, scale=0.13, var = 1)

plot(m1.RF)
lines(m2.RF, lty=2)
lines(m3.RF, lty=3)

使用 RandomFields 生成的绘图

我还尝试将我自己的函数用于 Matern 模型,结果图对应于基于 geoR 的图。所以 RandomFields 的实现似乎有问题。还是我错过了什么?我无法找到 RandomFields 包中使用的实际实现。任何解释将不胜感激。

matern <- function(x, nu, scale){
  ifelse(x==0, 1, (2^(1-nu))*(gamma(nu)^(-1))*(x/scale)^nu*besselK((x/scale), nu))
}
m1.matern <- matern(x, nu=0.5, scale=0.25)
m2.matern <- matern(x, nu=1.5, scale=0.16)
m3.matern <- matern(x, nu=2.5, scale=0.13)

plot(x, m1.matern, "l")
lines(x, m2.matern, lty=2)
lines(x, m3.matern, lty=3)

由我自己的函数 matern 生成的图

4

0 回答 0