为什么gstat.predict()函数经常返回NaN值(GSTAT包)? (R版本3.3.2,Windows 10)

时间:2017-02-15 22:27:54

标签: r gstat geostatistics

我试图用R中的Gstat包模拟两个不同的随机字段(yy1和yy2,具有不同的平均值和相关长度)与不规则边界的组合。我附上了我预期结果的图片。代码没有一致地给出这样的输出,并且我经常得到yy1和yy2中的至少一个作为NaN,这导致如图所示的不期望的输出。

我使用的关键步骤是:

1)用不同的手段和psill(rf1和rf2)创建了两个gstat对象 2)以数据帧的形式创建两个计算网格(每个随机字段一个),具有两个变量“x”和“y”坐标。 3)使用无条件模拟预测两个随机场。

在这方面的任何帮助将受到高度赞赏。

附件:2张图片(提供链接)和1张R代码

1)Expected Outcome

2)Undesired Outcome

    library(gstat)

    xy <- expand.grid(1:150, 1:200) # 150 x 200 grid is created in the form of a dataframe with x and y vectors

   names(xy)<-c('x','y') # giving names to the variables

# creating gsat objects

    rf1<-gstat(formula=z~1,locations=~x+y,dummy = T,beta=c(1,0,0),  model=vgm(psill=0.025, range=5, model='Exp'), nmax=20)  # dummy=T treats this as  a unditional simulation
    rf2<-gstat(formula=z~1,locations=~x+y,dummy = T,beta=c(4,0,0),  model=vgm(psill=0.025, range=10, model='Exp'), nmax=20)  # dummy=T treats this as a unditional simulation

# creating two computational grid

    rows<-nrow(xy)

    xy_shift <- expand.grid(60:90, 75:100)
    names(xy_shift)<-c('x','y')

    library(dplyr) # for antijoin

    xy1<-xy[1:(rows/2),]
    xy1<-anti_join(xy1, xy_shift, by = c("x","y")) # creating the irregular boundary

    xy2<-rbind(xy[(rows/2+1):rows,],xy_shift)

    library(sp)

    yy1<- predict(rf1, newdata=xy1, nsim=1) # random field 1
    yy2<- predict(rf2, newdata=xy2, nsim=1) # random field 2

    rf1_label<-gl(1,length(yy1[,1]),labels="field1")
    rf2_label<-gl(1,length(yy2[,1]),labels="field2")

    yy1<-cbind(yy1,field=rf1_label)
    yy2<-cbind(yy2,field=rf2_label)

    yy<-rbind(yy1,yy2)

    yyplot<-yy[,c(1,2,3)]

# plotting the field

    gridded(yyplot) = ~x+y
    spplot(obj=yyplot[1],scales=list(draw = TRUE))

0 个答案:

没有答案