[R] GSTAT Co-Kriging: How can i fix a non positive definte correlation matrix

Roberts, Blake wrober26 at vols.utk.edu
Mon Jan 5 23:54:40 CET 2015


QUESTION: Can anyone give me advice on how to resolve an error message regarding a non positive definite correlation matrix so that the computed negative cross-variogram can be used to perform co-kriging?

I am performing co-kriging on negatively correlated parameters. 

data = dtrd 

x	y	n.ts	n.ae
3.2	6.4	-0.052514693	0.055104755
6.4	6.4	-0.375234492	-0.861381682
9.6	6.4	1.362810557	-0.23577909
12.8	6.4	-0.333087778	0.134741672
16	6.4	0.699916885	-2.348188189
22.4	6.4	0.605552409	-0.75492334
25.6	6.4	0.406868496	0.329847607
3.2	9.6	-0.529754386	0.251549504
6.4	9.6	-0.416509276	1.094807283
9.6	9.6	-0.450700276	0.988002955
12.8	9.6	-0.732937251	1.344413512
16	9.6	0.377457633	-0.542187169
19.2	9.6	-0.989029229	2.002433474
22.4	9.6	-1.259551904	-0.895859924
25.6	9.6	-0.470220669	0.370809323
3.2	12.8	1.046426438	0.168121785
6.4	12.8	-1.440639861	1.423433672
9.6	12.8	-0.899563555	0.83844681
12.8	12.8	-1.287567164	-0.086478673
16	12.8	-0.816931437	1.156633451
19.2	12.8	-0.782655308	0.299641538
22.4	12.8	0.048342822	-0.763091614
3.2	16	-0.5581308	-0.130509134
6.4	16	-0.217874377	0.815852429
9.6	16	-0.272702769	0.906621066
12.8	16	-0.996064	0.274459785
16	16	-1.97520507	2.017626766
19.2	16	-0.718163458	0.444173367
22.4	16	0.337266312	0.831151021
25.6	16	-0.565668608	0.513114809
3.2	19.2	0.651736313	-0.055114304
6.4	19.2	-0.715751462	0.205488257
9.6	19.2	0.650820529	0.558032798
12.8	19.2	-1.184380204	0.612006591
16	19.2	0.132388601	0.462059331
19.2	19.2	1.08502868	0.399240335
22.4	19.2	-0.85196341	0.113079949
25.6	19.2	0.099887288	-1.922971577
3.2	22.4	-0.233091874	-0.287556625
6.4	22.4	-0.989196908	0.10047403
9.6	22.4	-0.025054063	0.384754057
12.8	22.4	-0.394999955	-1.272051846
16	22.4	0.049839033	-2.568551091
19.2	22.4	1.327518037	-0.974203156
22.4	22.4	-0.421157849	-0.0101211
25.6	22.4	-0.178717505	0.408401438
3.2	25.6	-0.065413063	-0.195765074
6.4	25.6	1.167410569	-1.626236059
9.6	25.6	0.428968564	-1.287922066
12.8	25.6	1.550074254	-1.011990828
16	25.6	2.931334909	-1.872352342
19.2	25.6	4.126464345	-2.254471152
22.4	25.6	0.44561262	-0.709554064
25.6	25.6	0.543591219	1.03999109
3.2	28.8	0.716228164	-0.671315106
6.4	28.8	1.856183532	-1.403466298
9.6	28.8	0.774644882	-0.952601604
12.8	28.8	0.425336383	-0.776073605
16	28.8	0.294908064	-0.00019281
19.2	28.8	2.38260471	-0.778811406
22.4	28.8	-0.315391214	-0.223383771
25.6	28.8	1.136916243	-0.238938091
3.2	32	-0.233091874	-0.520269718
6.4	32	-0.352017426	-0.556041646
9.6	32	-0.933099317	-0.441354858
16	32	-0.865945243	-1.011088256
19.2	32	-0.594339105	-0.399550741
22.4	32	-0.653328511	1.213119402
25.6	32	0.076670222	0.819568017
3.2	35.2	-0.14022361	0.166527242
6.4	35.2	-0.545492977	-0.613535469
9.6	35.2	-0.084386566	-0.423754708
12.8	35.2	2.107283841	-0.891753223
16	35.2	-1.645006796	0.566968259
22.4	35.2	0.512684145	0.515250895
25.6	35.2	0.517794479	-1.144578624
3.2	38.4	-0.359495901	0.191964723
6.4	38.4	0.548288806	-1.011825356
9.6	38.4	-0.597741695	0.046560408
12.8	38.4	-1.003803022	0.319904274
16	38.4	0.060157729	0.824035747
19.2	38.4	0.251793973	0.632946256
22.4	38.4	-1.148625922	1.257360463
25.6	38.4	-0.957779058	0.30201831
3.2	41.6	0.267364885	1.139304073
6.4	41.6	0.171656399	0.623288738
9.6	41.6	-0.912461925	0.820049388
12.8	41.6	-0.645228334	1.041375034
16	41.6	0.83148026	2.914000894
19.2	41.6	-1.187664129	2.756035789
22.4	41.6	-0.467591981	0.467880919
25.6	41.6	-0.121964677	0.878460826
3.2	44.8	-0.158281328	-0.266451488
6.4	44.8	-0.235932095	1.440612621
12.8	44.8	-0.436274739	-0.298237058
16	44.8	-1.136811015	-0.688794913
19.2	44.8	0.87349541	0.449964869
22.4	44.8	-0.661067533	-0.08882536
25.6	44.8	0.301101862	-0.255259598
3.2	48	1.265698729	0.948786211
6.4	48	-0.806040053	0.352201302
9.6	48	1.006815543	1.12999254
12.8	48	-0.0132082	0.581935908
16	48	-1.214201235	1.431842632
19.2	48	-0.323473333	-0.083379843
22.4	48	-0.003250658	-0.248324838
25.6	48	-0.168398809	-0.916859761
3.2	51.2	-0.854793312	-0.231928117
6.4	51.2	0.507014021	-0.49107152
9.6	51.2	3.104090518	-2.654897126
12.8	51.2	-0.193785381	0.067244345
16	51.2	-0.71632415	-1.46047875
19.2	51.2	2.480632323	-0.336852087
22.4	51.2	-0.534663506	-1.093553232
25.6	51.2	-0.124544351	-0.603005465

Using the following code I compute a negative cross-variogram:

dtrd = as.data.frame(dtrd)
# create a grid onto which i will interpolate
# first get a range in data
x.range <- as.integer(range(dtrd[,1]))
y.range <- as.integer(range(dtrd[,2]))
# now expand to a grid with desired spacing
grid <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=0.4), 
y=seq(from=y.range[1], to=y.range[2], by=1.6))
plot(grid)

# Convert to spatial data frame
coordinates(grid) = c("x", "y")
coordinates(dtrd) = c("x", "y")

# Compute cross-variogram 
g <- gstat(id = "n.ae", formula = n.ae ~ + 1, data = dtrd, nmax=10)
g <- gstat(g, "n.ts", n.ts ~ 1, dtrd, nmax=10)
g1 <- gstat(g, id=c("n.ae", "n.ts"), model = vgm(psill=-0.65, model="Sph", range=15, nugget=-0.05), fill.all = T)
v <- variogram(g)
g.fit<-fit.lmc(v, g1, correct.diagonal = 1.01)

# Plot cross-variogram with fitted model
plot(v[v$id == "n.ae.n.ts",], g.fit$model[[2]], main="Cross-variogram: 
Air Entry and Saturated Water Content", xlab="Lag Distance (mm)", 
ylab="Semivariance (-)", ylim=c(0,-0.8))

When attempting to use the negative cross-variogram in the co-kriging plan I receive the following error message:

# Perform co-kriging predictions
ck <- predict.gstat(g1, grid)

non-positive definite coefficient matrix in structure 1non-positive definite coefficient matrix in structure 2Warning: No Intrinsic Correlation or Linear Model of Coregionalization found
Reason: coefficient matrix not positive definite
Warning: [add `set nocheck = 1;' to the command file to ignore the following error]

Error in predict.gstat(g1, grid) : 
  gstat: value not allowed for: variograms do not satisfy a legal model

I have successfully produced kriged maps of each of the parameters individually, but do not know exactly how to deal with the negative cross-variogram and resolve the issue of a non positive definite correlation matrix. I think the problem arises from using a negative sill and nugget to model the sample cross-variogram with the fit.lmc function. If I use the same code but make the sill and nugget positive I get the same fit of the model to the sample cross-variogram and a message reading : Intrinsic Correlation found. Good. [using ordinary cokriging], which I initial thought that this was a good sign, but once again I can not resolve the following error message:

# Compute cross-variogram 
g <- gstat(id = "n.ae", formula = n.ae ~ + 1, data = dtrd, nmax=10)
g <- gstat(g, "n.ts", n.ts ~ 1, dtrd, nmax=10)
g1 <- gstat(g, id=c("n.ae", "n.ts"), model = vgm(psill=0.65, model="Sph", range=15, nugget=0.05), fill.all = T)
v <- variogram(g)
g.fit<-fit.lmc(v, g1, correct.diagonal = 1.01)

# Perform co-kriging predictions
ck <- predict.gstat(g1, grid)

Intrinsic Correlation found. Good. 
[using ordinary cokriging]

ERROR: "chfactor.c", line 131: singular matrix in function LDLfactor()
Error in predict.gstat(g1, grid) : LDLfactor

The gstat manual shows that this problem can be fixed by adding correct.diagonal = 1.01 to the fit.lmc function, but this does not eliminate the error message

I am very confused about all of this and would appreciate any help to fix the non positive correlation matrix so that the negative cross-variogram can be used to perform co-kriging.

Thanks in advance for any help,

Blake Roberts



More information about the R-help mailing list