How to reconstruct multiple patterns

2019-03-25

In case you want to reconstruct several patterns at once (e.g. for different points in time if repeated censuses are available), you can use the following code.

# library(tidyverse)
library(shar)
library(spatstat)

In case you want to only create the spatial characteristics, this is straightforward using lapply().

# create list with patterns
list_pattern <- list(species_a, species_b)

# reconstruct all patterns in list
result <- lapply(list_pattern, function(x) reconstruct_pattern(pattern = x, 
                                                               n_random = 3, 
                                                               verbose = FALSE))

The result will be a nested list including all m randomization (including the observed pattern) of the n provided input patterns.

# get mean energy
lapply(result, function(x) calculate_energy(pattern = x,
                                            verbose = FALSE))
## [[1]]
## [1] 0.06492894 0.05105062 0.04557950
## 
## [[2]]
## [1] 0.02771039 0.02980070 0.03049143

Another possible would be to first reconstruct n times the spatial characteristics and afterwards reconstruct the marks m times for each of the n spatial reconstructions.

Firstly, reconstruct only the spatial characteristics n times. The observed pattern is not needed in this case, so you can put return_input = FALSE.

# reconstruct spatial strucutre
reconstructed_pattern <- reconstruct_pattern(species_a, 
                                             n_random = 3, 
                                             return_input = FALSE,
                                             verbose = FALSE)

Secondly, to reconstruct the (numeric) marks of the observed pattern for each of the spatially reconstructed patterns, just use lapply() in combination with reconstruct_marks().

# get only selected marks of input (numeric marks)
species_a_marks <- spatstat::subset.ppp(species_a, select = dbh)

# reconstruct marks 3 times for each input pattern
result_marks <- lapply(reconstructed_pattern, 
                       function(x) reconstruct_marks(pattern = x, 
                                                     marked_pattern = species_a_marks, 
                                                     n_random = 3, verbose = FALSE))

Again, the result is a nested list with the same dimensions as provided input patterns and reconstructions.

# get energy
lapply(result_marks, function(x) calculate_energy(pattern = x, 
                                                  method = "marks", verbose = FALSE))
## $randomized_1
## [1] 0.01957447 0.01975207 0.01921160
## 
## $randomized_2
## [1] 0.01954606 0.01945287 0.01998276
## 
## $randomized_3
## [1] 0.01980108 0.01994809 0.01970166