使用R包RandomFields和geoR绘制Matern相关函数输出结果不一致
Matern协方差函数绘图结果差异原因及解决方案
核心原因
你遇到的geoR、自定义函数与RandomFields绘图结果不一致的问题,并非RandomFields存在实现错误,而是两个包的Matern协方差函数默认采用了不同的参数化规则:
- 你自定义的Matern函数、geoR的
cov.spatial函数采用的是Diggle & Ribeiro (2007) 《Model-based Geostatistics》中定义的参数化形式,尺度参数phi直接对应公式中的分母缩放项。 - RandomFields包中
RMmatern采用了另一种行业常用参数化,将尺度参数解释为「有效范围」(即相关系数衰减到0.05时的距离),和Diggle的参数定义不兼容。
解决方案
RandomFields中提供了和Diggle参数化完全对齐的Matern实现函数RMwhittle,你只需将原来的RMmatern替换为RMwhittle,即可得到和geoR、自定义函数完全一致的结果,修正后的代码如下:
library(RandomFields) x <- seq(0, 1.5, l=200) # 替换RMmatern为RMwhittle m1.RF <- RMwhittle(nu=0.5, scale=0.25, var = 1) m2.RF <- RMwhittle(nu=1.5, scale=0.16, var = 1) m3.RF <- RMwhittle(nu=2.5, scale=0.13, var = 1) # 绘图时指定x轴范围与之前的计算区间对齐 plot(m1.RF, xlim = c(0, 1.5)) lines(m2.RF, lty=2) lines(m3.RF, lty=3)
验证方法
你可以通过以下代码对比计算结果,确认二者完全匹配:
# 提取RandomFields的计算结果 rf_cov <- RFcov(m1.RF, x = x) # 对比自定义函数的结果,最大差值小于浮点误差 max(abs(rf_cov - m1.matern))
内容的提问来源于stack exchange,提问作者Vojta Bartak
相关产品推荐
相关产品推荐

