R gstat krige () - Số ít ma trận hiệp phương sai tại vị trí [5,88,47,4,0]: bỏ qua


10

Khi tôi muốn thực hiện việc tìm kiếm, đôi khi nó chỉ hoạt động, tùy thuộc vào giá trị nào tôi sử dụng trong khả năng lưu trữ của mình. Là kết quả của hàm krige tôi nhận được var1.pred: NA NA NA ...var1.var: NA NA NA ...(nhưng chỉ khi tôi sử dụng các giá trị "sai" trong khả năng lưu trữ của mình.)

Ví dụ:

  • nó luôn hoạt động (cho đến nay) khi tôi chỉ sử dụng 10 giá trị
  • hoạt động khi tôi sử dụng 50 giá trị, nhưng chỉ với một số giá trị nhất định
  • hoạt động không phải khi tôi sử dụng 50 giá trị và các giá trị "sai"
  • hoạt động khi tôi sử dụng 25 giá trị và các giá trị "sai" được đề cập trước đó

Tôi không hiểu tại sao đôi khi nó hoạt động và đôi khi không. Điều kỳ lạ là khi tôi thêm Zwiesel;49.02999878;13.22999954;2.2vào dữ liệu, nó hoạt động khi tôi sử dụng ít hơn ~ 20 giá trị, nhưng nó không hoạt động khi tôi sử dụng hơn 50 giá trị ...

Lỗi của tôi ở đâu?

myWeatherTable.csv:

Place;Latitude;Longitude;Temperature
Aachen;50.77999878;6.09999990;3
Abbikenhausen;53.52999878;8.00000000;7.9
Adelbach;49.04000092;9.76000023;3.1
Adendorf;51.61999893;11.69999981;1.9
Alberzell;48.45999908;11.34000015;4.6
...
...

Mã của tôi để thực hiện phép nội suy

WeatherData <- read.csv(file="myWeatherTable", header = TRUE, sep ";")

coordinates(WeatherData) = ~Longitude + Latitude

vario <-  variogram(log(Temperature) ~1, WeatherData)
vario.fit <- fit.variogram(vario, vgm("Sph"))

min_lon <- min(WeatherData$Longitude)
max_lon <- max(WeatherData$Longitude)
min_lat <- min(WeatherData$Latitude)
max_lat <- max(WeatherData$Latitude)
Longitude.range <- as.numeric(c(min_lon,max_lon))
Latitude.range <- as.numeric(c(min_lat,max_lat))
grd <- expand.grid(Longitude = seq(from = Longitude.range[1], to = Longitude.range[2], by = 0.1),
  Latitude = seq(from = Latitude.range[1],to = Latitude.range[2], by = 0.1))
coordinates(grd) <- ~Longitude + Latitude
gridded(grd) <- TRUE

plot1 <- WU_data_spatial %>% as.data.frame %>%
  ggplot(aes(Longitude, Latitude)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points with measurements")

plot2 <- grd %>% as.data.frame %>%
  ggplot(aes(Longitude, Latitude)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points at which to estimate")

grid.arrange(plot1, plot2, ncol = 2)

kriged <- krige(Temperature~ 1, WeatherData, grd, model=variogram_fit)

Cảnh báo :

1: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [5.88,47.4,0]: skipping...
2: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [5.98,47.4,0]: skipping...
3: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [6.08,47.4,0]: skipping...
4: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [6.18,47.4,0]: skipping...
...
...

Câu trả lời:


16

Lỗi này thường được trả lại vì bạn có vị trí trùng lặp. Bạn có thể kiểm tra điều này bằng cách sử dụng sp::zerodistchức năng.

Để xóa các vị trí trùng lặp, bạn gọi sp::zerodisttrong một chỉ mục khung.

WeatherData <- WeatherData[-zerodist(WeatherData)[,1],] 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.