R gstat krige () - เมทริกซ์ความแปรปรวนร่วมที่ตำแหน่ง [5.88,47.4,0]: การข้าม


10

เมื่อฉันต้องการที่จะดำเนินการ kriging บางครั้งก็ใช้งานได้ขึ้นอยู่กับค่าที่ฉันใช้ใน DataTable ของฉัน เป็นผลมาจากฟังก์ชั่น krige ฉันได้รับvar1.pred: NA NA NA ...และvar1.var: NA NA NA ...(แต่เฉพาะเมื่อฉันใช้ค่า "ผิด" ใน DataTable ของฉัน)

ตัวอย่างเช่น:

  • มันทำงานได้เสมอ (จนถึงตอนนี้) เมื่อฉันใช้เพียง 10 ค่า
  • มันใช้งานได้เมื่อฉันใช้ 50 ค่า แต่ใช้ได้กับบางค่าเท่านั้น
  • มันใช้งานไม่ได้เมื่อฉันใช้ 50 ค่าและค่า "ผิด"
  • ใช้งานได้เมื่อฉันใช้ 25 ค่าและค่าที่กล่าวถึงก่อนหน้านี้ "ผิด"

ฉันไม่เข้าใจว่าทำไมบางครั้งมันถึงทำงานได้และบางครั้งก็ไม่ สิ่งที่แปลกคือเมื่อฉันเพิ่มลงZwiesel;49.02999878;13.22999954;2.2ใน DataTable มันจะทำงานเมื่อฉันใช้น้อยกว่า ~ 20 ค่า แต่มันไม่ทำงานเมื่อฉันใช้มากกว่า 50 ค่า ...

ความผิดพลาดของฉันอยู่ที่ไหน

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
...
...

รหัสของฉันเพื่อทำการแก้ไขที่น่าสนใจ

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)

คำเตือน :

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...
...
...

คำตอบ:


16

ข้อผิดพลาดนี้มักถูกส่งคืนเนื่องจากคุณมีสถานที่ตั้งที่ซ้ำกัน คุณสามารถตรวจสอบได้โดยใช้sp::zerodistฟังก์ชั่น

ในการลบสถานที่ที่ซ้ำกันที่คุณโทรsp::zerodistภายในดัชนีวงเล็บเหลี่ยม

WeatherData <- WeatherData[-zerodist(WeatherData)[,1],] 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.