从参数化协方差函数(STK)

时间:2018-03-02 20:37:35

标签: matlab statistics kriging covariogram

我一直在使用STK工具箱几天,用于克服环境参数字段,即在地统计背景下。

我发现工具箱已经很好地实现并且非常有用(非常感谢作者!),而我通过STK获得的克里金预测实际上看起来很好;然而,我发现自己无法根据STK输出(即高斯过程/协方差函数的估计参数)可视化半变异函数模型。

我附上一个示例图,显示了一个简单的1D测试用例的经验半变异函数和一个直接拟合到该数据的高斯半变异函数模型(通常用于地质统计学,见图)。该图进一步示出了基于STK输出的半变异函数模型,即使用先前估计的模型参数(来自model.param的{​​{1}})来获得滞后距离的目标网格上的协方差K,然后将K转换为半方差(根据到已知关系semivar = K0-K,其中K0是零滞后的协方差)。我附上一个简单的脚本来重现图形并详细说明尝试的转换。

正如您在图中所看到的,这并不能解决问题。我已经尝试了其他一些简单的例子和​​STK数据集,但是通过STK与直接拟合获得的模型从未达成一致,实际上通常看起来与示例中的不同(即范围通常看起来非常不同,除了sill / sigma2 ;取消注释脚本中的第12行以查看另一个示例)。我还尝试将转换后的STK参数输入到地统计模型中(也在脚本中),但是,输出与基于转换K的结果相同。

我非常感谢你的帮助!

Figure illustrating the lack of agreement between semivariograms based on direct fit vs conversion of STK output

stk_param_estim

1 个答案:

答案 0 :(得分:0)

计算半变异函数的方式没有任何问题。

要了解您获得的数字,请考虑:

  1. 模型的参数在STK中使用(限制的)最大似然法估算,通过半变差函数的最小二乘法拟合。
  2. 对于在短间隔内观察到的非常平滑的静止随机场,您不应期望理论半变异函数与经验半变异函数一致,无论是否有分箱。这样做的原因是,在这种情况下,观察结果和平方差异非常相关
  3. 为说服自己第二点,您可以重复运行以下脚本:

    % a smooth GP
    model = stk_model (@stk_gausscov_iso, 1);
    model.param = log ([1.0, 0.2]);  % unit variance
    
    x_max = 20;  x_obs = x_max * rand (50, 1);
    
    % Simulate data
    z_obs = stk_generate_samplepaths (model, x_obs);
    
    % Empirical semivariogram (raw, no binning)
    h = (pdist (double (x_obs)))';
    semivar_emp = 0.5 * (pdist (z_obs)') .^ 2;
    
    % Model-based semivariogram
    x1 = (0:0.01:x_max)';
    x0 = zeros (size (x1));
    K = feval (model.covariance_type, model.param, x0, x1, -1, true);
    semivar_th = 1 - K;
    
    % Figure
    figure;  subplot (1, 2, 1);  plot (x_obs, z_obs, '.');
    subplot (1, 2, 2);  plot (h(:), semivar_emp(:),'.k');  hold on;
    plot (x1, semivar_th,'-b','LineWidth',2);
    legend ('empirical', 'model');  xlabel ('lag');  ylabel ('semivar');
    

    关于高斯过程模型的参数估计的其他问题应该在交叉验证而不是堆栈溢出上提出。