GAM使用“ gp”更流畅:如何检索变异函数参数?

时间:2018-08-02 17:10:07

标签: r regression gam mgcv geostatistics

我正在使用以下地理叠加模型

library(gamair)
library(mgcv)

data(mack)    
mack$log.net.area <- log(mack$net.area)

gm2 <- gam(egg.count ~ s(lon,lat,bs="gp",k=100,m=c(2,10,1)) +
                       s(I(b.depth^.5)) +
                       s(c.dist) +
                       s(temp.20m) +
                       offset(log.net.area),
                       data = mack, family = tw, method = "REML")

在这里,我正在使用范围为10且功效为1(m=c(2,10,1))的指数协方差函数。如何从结果中检索变异函数参数(金块,窗台)?我在模型输出中找不到任何内容。

1 个答案:

答案 0 :(得分:1)

在平滑方法中,指定了相关矩阵,因此您仅估计方差参数,即基石。例如,您已将m = c(2, 10, 1)设置为s(, bs = 'gp'),从而给出了具有范围参数phi = 10的指数相关矩阵。请注意,phi除球面相关性外与范围不同。对于许多相关模型,实际范围是phi的函数。

方差/底线参数与惩罚回归中的平滑参数密切相关,您可以通过将scale参数除以平滑参数来获得它:

with(gm2, scale / sp["s(lon,lat)"])
#s(lon,lat) 
#  26.20877 

这是对的吗?否。这里有一个陷阱:smoothing parameters returned in $sp are not real ones,我们需要满足以下条件:

gm2_sill <- with(gm2, scale / sp["s(lon,lat)"] * smooth[[1]]$S.scale) 
#s(lon,lat) 
#    7.7772 

然后复制您指定的range参数:

gm2_phi <- 10

由于平滑函数是连续的,所以掘金必须为零。使用lines.variomodel包中的geoR函数,您可以可视化由s(lon,lat)建模的潜在高斯空间随机场的半变异函数。

library(geoR)
lines.variomodel(cov.model = "exponential", cov.pars = c(gm2_sill, gm2_phi),
                 nugget = 0, max.dist = 60)
abline(h = gm2_sill, lty = 2)

enter image description here

但是,请对此变异函数表示怀疑。 mgcv并不是解释地统计学的简单环境。使用低秩平滑器表明,上述方差参数用于新参数空间中的参数,而不是原始参数空间中的参数。例如,mack数据集在空间字段中有630个唯一的空间位置,因此相关矩阵应为630 x 630,并且完全随机效应应为长度为630的向量。但是,通过在k = 100中设置s(, bs = 'gp'),可以将截断的本征分解和随后的低秩近似将随机效应减小到length-100。对于此向量,方差参数实际上不是原始参数。这可能可以解释为什么门槛和实际范围与数据和预测的s(lon,lat)不一致。

## unique locations
loc <- unique(mack[, c("lon", "lat")])

max(dist(loc))
#[1] 15.98

数据集中两个空间位置之间的最大距离为15.98,但从方差图得出的实际范围似乎在40到60之间,这太大了。

## predict `s(lon, lat)`, using the method I told you in your last question
## https://stackoverflow.com/q/51634953/4891738
sp <- predict(gm2,
              data.frame(loc, b.depth = 0, c.dist = 0, temp.20m = 0,
                         log.net.area = 0),
              type = "terms", terms = "s(lon,lat)")

c(var(sp))
#[1] 1.587126

预测的s(lon,lat)仅具有1.587的方差,但在7.77处的底线要高得多。