我有一个名为seoul3112的csv文件,包含PM10浓度。 please, download.。我试图绘制样本变异函数并在其上拟合模型。
library(sp)
library(gstat)
library(rgdal)
seoul3112<-read.csv("seoul3112.csv",row.name=1)
seoul3112<-na.omit(seoul3112)
#分配CRS并重新投影
coordinates(seoul3112)=~LON+LAT
proj4string(seoul3112) = "+proj=longlat +datum=WGS84"
seoul3112<-spTransform(seoul3112, CRS("+proj=utm +north +zone=52 +datum=WGS84"))
#plot semi-variogram
g<-gstat(id="PM10",formula=PM10~LON+LAT, data=seoul3112)
seoul3112.var<-variogram(g, cutoff=70000, width=6000)
seoul3112.var
plot(seoul3112.var, col="black", pch=16,cex=1.3,
xlab="Distance",ylab="Semivariance",
main="Omnidirectional Variogram for seoul 3112")
#Model fit
model.3112<- fit.variogram(seoul3112.var,vgm(700,"Gau",40000,400),fit.method = 2)
plot(seoul3112.var,model=model.3112, col="black", pch=16,cex=1.3,
xlab="Distance",ylab="Semivariance",
main="Omnidirectional Variogram for seoul 3112")
写完这些代码后,我得到了一个像这样的半变异函数。
由于我是地质统计学的新手,所以我很困惑我的上述变异函数对于我的数据集是否合适。因为,在典型的变差函数中,半方差值在窗台处变为水平。但这个变异图上升了!我应该在我的代码中做一些修正吗?
另一件事是,实际上我的最终目标是在我的数据集上进行克里金插值(seoul3112)。我不明白,为了做克里金法,这个样本变异函数是足够的还是我应该绘制方向变异函数或任何其他东西? 有谁能详细解释一下?
答案 0 :(得分:2)
如果您查看拟合模型,它将具有sill
参数(即nugget
+ psill
),但它超出了您的样本范围。
sill = sum(model.3112$psill)
您可能没有足够的点对距离来到range
到sill
。我不认为这不是问题,只要你使用这个半变异函数来预测你的数据的空间域+ 60000米(你有数据支持的距离)。我采取这个立场是因为拟合半变异函数的最重要部分是开始,并且在数据的范围内拟合是好的。
需要检查的是您支持np
所支持的点数对(bins
)(更多点数对更好)。
另一个建议是使用水平图寻找各向异性
seoul3112.var_map<-variogram(g, cutoff=70000, width=6000, map=TRUE)
plot(seoul3112.var_map, col.regions=terrain.colors(20))
或通过设置alpha
并绘制模型拟合来查看多个方向的拟合。你只需要检查180度,因为它是对称的(你可以在下面的图中看到这一点,其中0和180是相同的)。
seoul3112.var_angles<-variogram(g, cutoff=70000, width=6000, alpha=seq(0,180,30))
plot(seoul3112.var_angles, model=model.3112, pch=16, ylim=c(0,3000))
如果方向上存在差异,则可以使用fit.variogram
为anis
模型定义vgm()
来建模各向异性的主轴和短轴。
例如:
vgm(700,"Gau",40000,400, anis=c(someangle, someratio))