[R-sig-Geo] Spatial correlation between two 'sf' kriging objects
Nicola Gambaro
n|co|@ @end|ng |rom g@mb@ro@co@uk
Sat Aug 15 23:15:52 CEST 2020
Dear Ákos,
Thank you very much for your help.
I ran your code but unfortunately it returns the error:
Error in Ops.units(distance_matrix[as_units(point_number), , drop = TRUE], :
both operands of the expression should be "units" objects
Any ideas how to fix this?
Cheers!
Nicola Gambaro
BSc Environmental Geoscience, First Class
Durham University
> Message: 1
> Date: Fri, 14 Aug 2020 14:01:43 +0200
> From: =?UTF-8?Q?Bede-Fazekas_=c3=81kos?= <bfalevlist using gmail.com>
> To: r-sig-geo using r-project.org
> Subject: Re: [R-sig-Geo] Spatial correlation between two 'sf' kriging
> objects
> Message-ID: <043f13cc-20e1-a768-3419-03301f8d8f7b using gmail.com>
> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>
> Dear Nicola,
>
> Instead of raster::focal(), you can apply the cor() function in
> combination with st_distance() (or st_buffer() and st_within()). E.g.
> let's say that 'grid' is a POINT type sf object containing columns
> 'temperature' and 'yield':
> distance_threshold <- 40
> distance_matrix <- st_distance(grid)
> grid$correlation <- vapply(X = 1:nrow(grid), FUN.VALUE = numeric(1), FUN
> = function (point_number) {cor(x = st_set_geometry(grid,
> NULL)[distance_matrix[point_number, distance_matrix[point_number, , drop
> = TRUE] < distance_threshold , drop = TRUE], "temperature"], y =
> st_set_geometry(grid, NULL)[distance_matrix[point_number,
> distance_matrix[point_number, , drop = TRUE] < distance_threshold , drop
> = TRUE], "yield"])})
>
> Or something like this... I have not tested this code, and am sure that
> it is not the most efficient solution.
>
> For large, square grids, raster might be faster than sf. You can convert
> your grid to RasterLayer with function rasterFromXYZ() combined with
> st_coordinates(), st_set_geometry(, NULL) and cbind.data.frame(). There
> might be more straightforward solutions for the conversion...
>
> HTH,
> Ákos Bede-Fazekas
> Hungarian Academy of Sciences
>
>
> 2020.08.13. 20:11 keltezéssel, Nicola Gambaro írta:
>> I have created two ‘sf’ kriging objects (point vectors), one for temperature and another for agricultural yields. To make the grid and carry out the point interpolation, I have remained within the ‘sf’ package.
>>
>> I would now like to create a spatial local correlation ‘raster’ between these two variables, as shown on this webpage https://statnmap.com/2018-01-27-spatial-correlation-between-rasters/ <https://statnmap.com/2018-01-27-spatial-correlation-between-rasters/>. However, in that example, they use the ‘raster’ package and the ‘focal’ function. I was wondering if there was a way of doing this within ‘sf’, i.e. without having to change classes? If not, what is the best way to convert those objects into raster classes?
>>
>> Here is an excerpt of my kriging code for reference:
>> library(sf)
>> sf_data <- st_as_sf(x = data, coords = c("longitude", "latitude"), crs = 4326)
>> library(gstat)
>> vgm_utci <- variogram(UTCI~1, sf_data)
>> utci_fit <- fit.variogram(vgm_utci, vgm("Gau"), fit.kappa = TRUE)
>> plot(vgm_utci, utci_fit)
>> istria <- read_sf(“./Istria_Boundary.shp")
>> istria <- istria$geometry
>> istria.grid <- istria %>%
>> st_make_grid(cellsize = 0.05, what = "centers") %>%
>> st_intersection(istria)
>> library(ggplot2)
>> ggplot() + geom_sf(data = istria) + geom_sf(data = istria.grid)
>> library(stars)
>> utci_krig <- krige(formula = sf_data$UTCI ~ 1, locations = sf_data,
>> newdata = istria.grid, model = utci_fit)
>>
>>
>> Thank you very much in advance,
>>
>> Nicola
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list