пакет spgwr: применение параметров модели GWR к более тонкому пространственному масштабу
я используюR
пакет для выполнения географически взвешенной регрессии (GWR). Я хочу применить параметры модели к более тонкому пространственному масштабу, но получаю эту ошибку:Error in validObject(.Object): invalid class “SpatialPointsDataFrame” object: number of rows in data.frame and SpatialPoints don't match
.
Когда я использую другой пакет для GWR, называемый , у меня нет этой проблемы. Например, с помощьюGWmodel
, Я делаю:
# library(GWmodel)
# library(sp)
# library(raster)
ghs = raster("path/ghs.tif") # fine resolution raster
regpoints <- as(ghs, "SpatialPoints")
block.data = read.csv(file = "path/block.data.csv")
coordinates(block.data) <- c("x", "y")
proj4string(block.data) <- "EPSG:7767"
eq1 <- ntl ~ ghs
abw = bw.gwr(eq1,
data = block.data,
approach = "AIC",
kernel = "gaussian",
adaptive = TRUE,
p = 2,
parallel.method = "omp",
parallel.arg = "omp")
ab_gwr = gwr.basic(eq1,
data = block.data,
regression.points = regpoints,
bw = abw,
kernel = "gaussian",
adaptive = TRUE,
p = 2,
F123.test = FALSE,
cv = FALSE,
parallel.method = "omp",
parallel.arg = "omp")
ab_gwr
sp <- ab_gwr$SDF
sf <- st_as_sf(sp)
# intercept
intercept = as.data.frame(sf$Intercept)
intercept = SpatialPointsDataFrame(data = intercept, coords = regpoints)
gridded(intercept) <- TRUE
intercept <- raster(intercept)
raster::crs(intercept) <- "EPSG:7767"
intercept = resample(intercept, ghs, method = "bilinear")
# slope
slope = as.data.frame(sf$ghs)
slope = SpatialPointsDataFrame(data = slope, coords = regpoints)
gridded(slope) <- TRUE
slope <- raster(slope)
raster::crs(slope) <- "EPSG:7767"
slope = resample(slope, ghs, method = "bilinear")
gwr_pred = intercept + slope * ghs
writeRaster(gwr_pred,
"path/gwr_pred.tif",
overwrite = TRUE)
Как я могу применить параметры модели GWR к более мелкому пространственному масштабу, используя пакет?
Вот код, используяspgwr
упаковка:
library(spgwr)
library(sf)
library(raster)
library(parallel)
ghs = raster("path/ghs.tif") # fine resolution raster
regpoints <- as(ghs, "SpatialPoints")
block.data = read.csv(file = "path/block.data.csv")
#create mararate df for the x & y coords
x = as.data.frame(block.data$x)
y = as.data.frame(block.data$y)
#convert the data to spatialPointsdf and then to spatialPixelsdf
coordinates(block.data) = c("x", "y")
# specify a model equation
eq1 <- ntl ~ ghs
# find optimal ADAPTIVE kernel bandwidth using cross validation
abw <- gwr.sel(eq1,
data = block.data,
adapt = TRUE,
gweight = gwr.Gauss)
# fit a gwr based on adaptive bandwidth
cl <- makeCluster(detectCores())
ab_gwr <- gwr(eq1,
data = block.data,
adapt = abw,
gweight = gwr.Gauss,
hatmatrix = TRUE,
regpoints,
predictions = TRUE,
se.fit = TRUE,
cl = cl)
stopCluster(cl)
#print the results of the model
ab_gwr
sp <- ab_gwr$SDF
sf <- st_as_sf(sp)
# intercept
intercept = as.data.frame(sf$Intercept)
intercept = SpatialPointsDataFrame(data = intercept, coords = regpoints)
gridded(intercept) <- TRUE
intercept <- raster(intercept)
raster::crs(intercept) <- "EPSG:7767"
intercept = resample(intercept, ghs, method = "bilinear")
# slope
slope = as.data.frame(sf$ghs)
slope = SpatialPointsDataFrame(data = slope, coords = regpoints)
gridded(slope) <- TRUE
slope <- raster(slope)
raster::crs(slope) <- "EPSG:7767"
slope = resample(slope, ghs, method = "bilinear")
gwr_pred = intercept + slope * ghs
writeRaster(gwr_pred,
"path/gwr_pred.tif",
overwrite = TRUE)
Более того, если я установил в
ab_gwr <- gwr(eq1,
data = block.data,
adapt = abw,
gweight = gwr.Gauss,
hatmatrix = TRUE,
fit.points = regpoints,
predictions = TRUE,
se.fit = TRUE,
cl = cl)
Я получаю эту ошибку:Error in gwr(eq1, data = block.data, adapt = abw, gweight = gwr.Gauss,: No data slot in fit.points
.
Растр высокого разрешения:ghs = raster(ncols=47, nrows=92, xmn=582216.388, xmx=603366.388, ymn=1005713.0202, ymx=1047113.0202, crs='+proj=lcc +lat_0=18.88015774 +lon_0=76.75 +lat_1=16.625 +lat_2=21.125 +x_0=1000000 +y_0=1000000 +datum=WGS84 +units=m +no_defs')
The csv
можно скачать отсюда.