簡體   English   中英

如何使用 R 中的 idw() 函數預測特定點的值?

[英]How can I predict values for a specific point using the idw() function in R?

Ege Rubak 的這個答案為例,我如何使用Ridw()函數預測特定點的 pH 值,比如lat = -23.49184long = 152.07185

我找到的最接近的答案是通過RPubs 中的這個文檔,但我無法僅提取特定值。

library(gstat)
library(sp)

lat <-  c(-23.49174, -23.49179, -23.49182, -23.49183, -23.49185, -23.49187)
long <- c(152.0718, 152.0718, 152.0717, 152.0717, 152.0717, 152.0717)
pH <- c(8.222411, 8.19931, 8.140428, 8.100752, 8.068141, 8.048852)
sample <- data.frame(lat, long, pH)

x.range <- range(sample$long)
y.range <- range(sample$lat)

x<-seq(x.range[1], x.range[2], length.out=20)
y<-seq(y.range[1], y.range[2], length.out=20)
grd<-expand.grid(x,y)

coordinates(sample) = ~long+lat
coordinates(grd) <- ~ Var1+Var2
gridded(grd) <- TRUE

proj4string(sample) <- CRS("+proj=longlat +datum=WGS84")
proj4string(grd) <- CRS("+proj=longlat +datum=WGS84")

dat.idw <- idw(formula=pH ~ 1, locations = sample, newdata = grd, idp = 2.0)
#> [inverse distance weighted interpolation]

我沒有在評論中專門詢問 Ege Rubak,因為我還沒有 50 個聲望。

你不需要網格。 以一致的方式提供您的新位置,以表示您觀察到的位置。

library(gstat)
library(sp)

lat <-  c(-23.49174, -23.49179, -23.49182, -23.49183, -23.49185, -23.49187)
long <- c(152.0718, 152.0718, 152.0717, 152.0717, 152.0717, 152.0717)
pH <- c(8.222411, 8.19931, 8.140428, 8.100752, 8.068141, 8.048852)

sample <- data.frame(lat, long, pH)
coordinates(sample) = ~long+lat
proj4string(sample) <- CRS("+proj=longlat +datum=WGS84")

loc <- data.frame(long = 152.07185, lat = -23.49184)
coordinates(loc)  <- ~ long + lat
proj4string(loc) <- CRS("+proj=longlat +datum=WGS84")

oo <- idw(formula=pH ~ 1, locations = sample, newdata = loc, idp = 2.0)
oo@data$var1.pred
#[1] 8.158494

您可以使用raster包中的extract功能。 請注意,您的點在原始網格之外,因此我增加了 1.5 以覆蓋該點。

library(gstat)
library(sp)

lat <-  c(-23.49174, -23.49179, -23.49182, -23.49183, -23.49185, -23.49187)
long <- c(152.0718, 152.0718, 152.0717, 152.0717, 152.0717, 152.0717)
pH <- c(8.222411, 8.19931, 8.140428, 8.100752, 8.068141, 8.048852)
sample <- data.frame(lat, long, pH)

x.range <- range(sample$long)
y.range <- range(sample$lat)

x<-seq(x.range[1], x.range[2] * 1.5, length.out=20)
y<-seq(y.range[1], y.range[2] * 1.5, length.out=20)
grd<-expand.grid(x,y)

coordinates(sample) = ~long+lat
coordinates(grd) <- ~ Var1+Var2
gridded(grd) <- TRUE

proj4string(sample) <- CRS("+proj=longlat +datum=WGS84")
proj4string(grd) <- CRS("+proj=longlat +datum=WGS84")

dat.idw <- idw(formula=pH ~ 1, locations = sample, newdata = grd, idp = 2.0)


library(raster)

# Convert to raster
dat.r <- raster(dat.idw)

# Create a matrix showing the coordinate of interest
p <- SpatialPoints(matrix(c(152.07185, -23.49184), ncol = 2))
proj4string(p) <- projection(dat.r)

# Extract the values
extract(dat.r, p)
# 8.048852 
library(gstat)
 library(sp)
 lat <-  c(-23.49174, -23.49179, -23.49182, -23.49183, -23.49185, -23.49187)
 long <- c(152.0718, 152.0718, 152.0717, 152.0717, 152.0717, 152.0717)
 pH <- c(8.222411, 8.19931, 8.140428, 8.100752, 8.068141, 8.048852)
 sample <- data.frame(lat, long, pH)
 x.range <- range(sample$long)
 y.range <- range(sample$lat)
 x<-seq(x.range[1], x.range[2] * 1.5, length.out=20)
 y<-seq(y.range[1], y.range[2] * 1.5, length.out=20)
 grd<-expand.grid(x,y)
 coordinates(sample)= ~long+lat
 coordinates(grd) <- ~ Var1+Var2
 gridded(grd) <- TRUE
 proj4string(sample) <- CRS("+proj=longlat +datum=WGS84")
 proj4string(grd) <- CRS("+proj=longlat +datum=WGS84")
 dat.idw <-idw(formula(pH~1),locations=sample,newdata=grd,idp=2.0)

idw(公式(pH〜1),位置=樣本,newdata = grd,idp = 2)中的錯誤:is.ppp(X)&& is.marked(X)不為TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM