I am working with an hourly dataset of air temperature, recorded at ~200 stations over a relatively small area. I chose a space-time variogram (e.g. sum-metric) to fit my data and am now trying to make predictions over my same stations in order to fill NA (missing value) gaps. When using the krigeST() function over daily aggregated data everything seems to go smooth but when I use it at the original hourly resolution I always get the following error:

Error in chol.default(A) the leading minor of order 68 is not positive definite

I googled it and found that it is related to a matrix not being completely positive-definite. However, I am not sure why this happens and was wondering if any of you know a way of fixing this (a workaround to avoid it).


In the empirical semivariogram model I specify initial values for the nugget and all other parameters. Then the optimal value is found by using the fit.variogram() function, which returns a value of 0 for the spatial, temporal, and joint spatio-temporal nugget. Do you think the problem comes from here? Why would a nugget of 0 cause that?

In general I am not trying to predict over a spatial grid, rather I am trying to predict on the same observations I use to develop the variogram. The reason why I need to do this, it to fill out several NA values in my spatiotemporal dataset. The way I do the estimation, after choosing the variogram model, is by cross-validation, hence I predict the spatio-temporal values at a given monitoring stations, using a certain number of neighbors from that station. Pretty much I am estimating the value on 1 station at a time, given a number of neighbors.

I tried to aggregate my values to daily max,min,mean temperature and I do not get that error anymore. In that case my estimated nuggets are not 0, aside from the joint space-time nugget.

  • $\begingroup$ The nugget is the measurement error, if the error is zero, then what you observed is the real value. In the cross validation, you delete your station from the observed one (adding NA) and then you predict the process on that station, in this case you shouldn't have the error (is it?). Moreover, why you "use a certain number of neighboor" and not the entire observed process? $\endgroup$
    – niandra82
    Aug 1 '14 at 22:35
  • $\begingroup$ I get that error exactly when doing cross-validation to predict one station at a time given all others. I use a neighborhood to speed up the computing time but I get the same error when I use the entire observed process. I will try by manually changing the nugget from 0 to 1 and see. The only drawback is that by doing that, my space-time variogram fit gets worse (~3.2 RMSE) after adding a nugget manually. $\endgroup$ Aug 4 '14 at 13:47
  • $\begingroup$ Let me understand, when you do cross validation on station $s$ (for example), you use the model estimated with the other stations and $s$ (using its value or an NA)? $\endgroup$
    – niandra82
    Aug 4 '14 at 13:51
  • $\begingroup$ When I do cross-validation on station "s", I use the space-time variogram model fitted to the empirical variogram on all my observations (using their recorded values). As "newdata" in my ST kriging estimation, I specify station "s" (thus as if it was unknown) as the only one point on which to estimate the temperature. Is that what you were asking for? $\endgroup$ Aug 4 '14 at 15:02
  • $\begingroup$ Also, If I manually add a nugget variance, so that it is not equal to 0 anymore, I now get the following error in the krigeST() function: $\endgroup$ Aug 4 '14 at 15:03

Do you use a nugget? If you don't, the prediction on the points used for the estimation of the model are just the observed points, then if you try to make prediction on then you will have a correlation =1 and the matrix can be singular.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.