微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R-Studio 中使用 gstat 进行时空插值 - 拟合正确的变异函数

如何解决在 R-Studio 中使用 gstat 进行时空插值 - 拟合正确的变异函数

我对空间评估非常陌生,来自心理学。

我正在使用软件 R 和包“gstat”和“spacetime”。

我想做一个时空插值。为此,我遵循 Gräler 等人的论文。 (https://cran.r-project.org/web/packages/gstat/vignettes/spatio-temporal-kriging.pdf)

很遗憾,我找不到/适合正确的变异函数模型。我可以创建经验变异函数,这对我来说也是结论性的,但我没有进一步了解。我不明白如何定义各个参数,例如“sill”或“nugget”或它们代表什么。

这是我以前的方法

我的 ST 数据框:

> df.stf
An object of class "STFDF"
Slot "data":
# A tibble: 2,406 x 6
     KRS month DeprIndex MMW10 MMW25 NewInfect
   <dbl> <int>     <dbl> <dbl> <dbl>     <dbl>
 1  1001     1    -4.08   NA   NA           NA
 2  1002     1    -2.28   13.3 NA           NA
 3  1003     1    -3.29   17.8 11.7         NA
 4  1004     1    -4.31   NA   NA           NA
 5  1051     1    -2.51   17.7 NA           NA
 6  1053     1    -1.07   13.0  9.93        NA
 7  1054     1    -0.863  NA   NA           NA
 8  1055     1    -1.63   NA   NA           NA
 9  1056     1     0.887  NA   NA           NA
10  1057     1    -1.21   14.7  8.84        NA
# ... with 2,396 more rows

Slot "sp":
class       : SpatialpolygonsDataFrame 
features    : 401 
extent      : 3280359,3921536,5237511,6103443  (xmin,xmax,ymin,ymax)
crs         : +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs 
variables   : 1
names       :   AGS 
min values  :  1001 
max values  : 16077 

Slot "time":
           timeIndex
0001-01-30         1
0002-01-30         2
0003-01-30         3
0004-01-30         4
0005-01-30         5
0006-01-30         6

Slot "endTime":
[1] "0002-01-30 CET" "0003-01-30 CET" "0004-01-30 CET" "0005-01-30 CET" "0006-01-30 CET" "0007-01-30 CET"

所以,我有 401 个德国县和六个月的平均每月 PM10 值。

我的经验变异函数

eVgmPm10<-variogramST(MMW10~1,df.stf,tlags = 0:5)

eVgmPm10$dist<-eVgmPm10$dist/1000
eVgmPm10$avgdist  <- eVgmPm10$avgdist/1000
eVgmPm10$spacelag <- eVgmPm10$spacelag/1000

plot(eVgmPm10,map=F)

empirical variogram

到目前为止一切正常(我猜)

现在我想在论文中解释一个可分离的模型:

separableModel <- vgmST("separable",space = vgm(0.9,"Exp",200,0.1),time = vgm(0.9,"Sph",3.5,sill = 124)

我明白,我必须为空间和时间创建一个变异函数。但我不知道如何正确定义变异函数的参数(psill、模型、范围、金块)。如果我使用与论文中相同的参数,我会得到以下图:

Plot empircal and separable model

如您所见,在此模型中,我只有两个滞后,变异函数看起来很奇怪。所以,我认为这是因为我的模型参数错误。我还测试了另一种方法,如论文中所述。

sumMetricModel <- vgmST("sumMetric",space = vgm(20,150,1),time = vgm(10,2,0.5),joint = vgm(80,1500,2.5),stAni = 120)

同样,我不知道如何设置参数,所以我采用了与论文中相同的方法并绘制了所有三个参数。

empirical,separable,sum metric

wireframe of all three

我很确定这取决于参数,但我真的不知道如何找到正确的变异函数模型来拟合。

一个回答后更新:

正如建议的那样,我为新的经验变异函数使用了更少的时间间隔:

eVgmPm10<-variogramST(MMW10~1,tlags = 0:2)

我得到了这个线框:

wireframe

如您所见,我从“滞后 0”开始有 3 个时间步长。

我尝试按照建议填充模型参数。

separableModel<-vgmST("separable",space=vgm(psill = 15,model = "Exp",range =250,nugget = 5),time = vgm(psill = 15,range =1,nugget = 0),sill = 15)

这是两者的线框图:

wireframe

我真的很沮丧,也很抱歉我的知识不足,但我真的很努力去理解它,我很感激每一个帮助

解决方法

sillrangenugget 的初始参数可以从经验时空变异函数中读取。通过以下方式生成经验变异函数的 3D 线框图:

plot(eVgmPm10,wireframe=T,scales=list(arrows=F))

金块是关于表面与 z 轴的近似交点(这相当于模型无法解释的小尺度变化)。门槛大约是您的经验曲面接近的最大 z 值,范围大约是曲面变平的距离。您将拥有空间(x 轴)和时间(y 轴)范围。

不同的模型对这些值的解释略有不同;详细信息在您在问题中引用的 gstat 小插图的第 2.1 节中给出。在可分离的情况下,例如,空间和时间变异函数分量被归一化为 1 的联合基台(基台 + 块),并且模型被模型定义中的基台参数“拉伸”。在 sum-metric 模型中,这种归一化不适用。对于度量分量,必须拟合时空各向异性,以便在单个模型中关联空间和时间距离(检查 gstat::estiStAni())。我建议在 R 中运行 demo("stkrige") 并试验参数以更好地了解它们的影响。请注意,参数之间也会相互影响,这有时会使解释和数值优化变得很麻烦。

根据您在问题中提供的内容,5 的金块、15 的基台和 250 的空间范围可能是开始时的值。此外,看起来好像您的经验表面沿着时域以波浪的形式移动。这可能是您的数据集的时间覆盖范围的人工制品。 6 个时间步长(在您的情况下为几个月)对于估计任何时间依赖性非常少,尤其是超过 1 个(或可能 2 个)步长。您的绘图表明您正在查看 5 个时间步长,其中“lag5”将仅基于第一个月和最后一个月的值。在估计您的经验变异函数时,请考虑使用较少的时间滞后:

eVgmPm10<-variogramST(MMW10~1,df.stf,tlags = 0:2)

参考您问题的标题“正确的变异函数”,很难确定它是什么。您只能找到一个模型,该模型将是您提供给算法的数据中依赖结构的“良好”近似。例如,这种依赖性可能会在冬季和夏季月份之间发生变化,并且平均值中可能存在季节性成分,这些成分也需要反映在模型中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?