Nothing
#
# fields is a package for analysis of spatial data written for
# the R software environment.
# Copyright (C) 2022 Colorado School of Mines
# 1500 Illinois St., Golden, CO 80401
# Contact: Douglas Nychka, douglasnychka@gmail.edu,
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the R software environment if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# or see http://www.r-project.org/Licenses/GPL-2
##END HEADER
##END HEADER
# tests of predictSE
# against direct linear algebra
suppressMessages(library(fields))
options( echo=FALSE)
test.for.zero.flag<- TRUE
x0<- cbind( 0,4)
Krig( ChicagoO3$x, ChicagoO3$y, cov.function = "Exp.cov", aRange=50,
lambda=.06, GCV=FALSE)-> out
# direct calculation
Krig.Amatrix( out, x=x0)-> A
test.for.zero( A%*%ChicagoO3$y, predict( out, x0),tag="Amatrix vs. predict")
Sigma0<- out$sigmahat*Exp.cov( ChicagoO3$x, ChicagoO3$x, aRange=50)
S0<- out$sigmahat*c(Exp.cov( x0, x0, aRange=50))
S1<- out$sigmahat*Exp.cov( out$x, x0, aRange=50)
#yhat= Ay
#var( f0 - yhat)= var( f0) - 2 cov( f0,yhat)+ cov( yhat)
look<- S0 - t(S1)%*% t(A) - A%*%S1 +
A%*% ( Sigma0 + diag(out$tauHat.MLE**2/out$weightsM))%*% t(A)
#
#compare to
# diagonal elements
test2<- predictSE( out, x= x0)
test.for.zero( sqrt(diag( look)), test2,tag="Marginal predictSE")
# now test shortcut formula that leverages the prediction step for Kriging
#
Sigma<- Exp.cov( ChicagoO3$x, ChicagoO3$x, aRange=50) +
diag(out$lambda/out$weightsM)
#Sigma<- ( Sigma0 + diag(out$tauHat.MLE**2/out$weightsM))
Tmatrix <- do.call(out$null.function.name, c(out$null.args,
list(x = out$xM, Z = out$ZM)))
Omega<- solve( t(Tmatrix)%*% solve( Sigma)%*% Tmatrix)
Id<- diag( 1, nrow( Tmatrix))
qr.R( out$matrices$qr.VT) -> Rmat
Omega.test<- solve(t(Rmat)%*% (Rmat))
# Omega is the GLS covariance matrix for estimated parameters in fixed part of
# spatial model (the d coefficients). These are usually the "spatial drift" -- a
# low order polynomial
test.for.zero( Omega, Omega.test, tag="comparing Omega")
# M1 and M2 are matrices that go from obs to the estimated coefficients (d,c)
M1<- Omega%*% t(Tmatrix)%*% solve( Sigma)
M2<- solve( Sigma)%*% ( Id - Tmatrix%*% M1)
x0<- cbind( 0,4)
k0<- Exp.cov( out$x, x0, aRange=50)
#k0<- S1
t0<- c( 1, c(x0))
hold<- t( t0)%*%M1 + t(k0)%*% M2
test.for.zero( hold, A)
test.for.zero( M2%*%Sigma%*%t( M2), M2)
# benchmark using standard predictSE function
SE0<- predictSE( out, x=x0)
# shortcut formula explicitly
MSE<- S0 + out$sigmahat*t(t0)%*% Omega %*%t0 -
out$sigmahat*(t(k0)%*% M2 %*% k0 + t(t0)%*% M1%*% k0) -
out$sigmahat*t(t0)%*% M1%*% k0
# collecting terms to make this look like two predict steps.
MSE2<- S0 + out$sigmahat*t(t0)%*% Omega %*%t0 -
out$sigmahat* predict( out, yM= k0, x=x0) -
out$sigmahat* predict( out, yM= k0, x=x0, just.fixed=TRUE)
hold<- Krig.coef(out, y=k0)
tempc<- t(k0)%*% hold$c
tempd<- t(t0)%*%hold$d
MSE4<- S0 + out$sigmahat*t(t0)%*% Omega %*%t0 -
out$sigmahat * (tempc +2*tempd)
test.for.zero(SE0, sqrt( MSE4), tag="test of formula with explicit d and c")
# test of new function
Krig( ChicagoO3$x, ChicagoO3$y, cov.function = "Exp.cov", aRange=50,lambda=.06)-> out0
SE0<- predictSE.Krig( out0, x=x0)
mKrig( ChicagoO3$x, ChicagoO3$y, cov.function = "Exp.cov", aRange=50, lambda=.06)-> out2
SE3<- predictSE.mKrig( out2, xnew=x0)
test.for.zero(SE0, sqrt( MSE), tag="Krig function and direct formula")
test.for.zero(sqrt(MSE), sqrt( MSE2),
tag="new predict formula and direct formula")
test.for.zero( SE3, SE0, tag="New se _function_ and old Krig _function_")
#
# test of vectors of locations.
# receate object
out0<- Krig( ChicagoO3$x, ChicagoO3$y, cov.function = "Exp.cov", aRange=50, lambda=.06)
out<- mKrig( ChicagoO3$x, ChicagoO3$y, cov.function = "Exp.cov", aRange=50, lambda=.06)
x0<-rep( c( -20, -10,10,20),4)
x0 <- cbind( x0 , sort( x0))
x0<- rbind( c(0,4), x0)
k0<- Exp.cov( ChicagoO3$x,x0, aRange=50)
t0<- t(fields.mkpoly(x0, m=out$m))
hold<- Krig.coef(out0, y=k0)
MSE5<- (rep( S0,nrow(x0)) +
out0$sigmahat * colSums( t0 *(out0$matrices$Omega%*%t0))
-out0$sigmahat* colSums((k0)*hold$c) -
2*out0$sigmahat*colSums(t0*hold$d))
hold<- mKrig.coef(out, y=k0, collapse=FALSE)
sigmahat<- out$summary["sigma2"]
MSE6<- (rep( S0, nrow(x0)) +
sigmahat * colSums( t0 *(out$Omega%*%t0))
-sigmahat* colSums((k0)*hold$c.coef) -
2*sigmahat*colSums(t0*hold$beta))
test.for.zero( predictSE( out0, x0), sqrt(MSE5),
tag="Benchmark of formula")
test.for.zero( predictSE( out0, x0), sqrt(MSE6),
tag="Benchmark of formula mKrig coefs")
test.for.zero( predictSE( out, x0), predictSE.mKrig(out, x0),
tag="test function with several locations Krig mKrig functions" )
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.