Экстраполяция пространственных точечных паттернов с использованием R

Мне было интересно, есть ли встроенная функция для экстраполяции точечного образца за пределы «родительского» окна в R. Например, давайте сгенерируем пространственный точечный образец «X»:

require(spatstat)
X <- ppp(runif(200), runif(200), 
c(0,1), c(0,1), unitname=c("metre","metre"))

Давайте передискретизируем данные:

a <- quadratresample(X, nx=25, ny=5, replace=F, nsamples = 1)

Но новые точки генерируются в том же пространстве / пространственном окне.

> a
 planar point pattern: 200 points 
window: rectangle = [0, 1] x [0, 1] metres  

У меня вопрос: как мне изменить выборку 200 точек в новом окне, большем, чем исходное окно (1 на 1 м); другими словами, как мне экстраполировать небольшой набор из 200 пространственных точек в больший масштаб, сохраняя при этом ту же плотность повторной выборки; скажем, я хочу увидеть в общей сложности 1000 точек данных на экстенте 5 на 5 м?


person ToNoY    schedule 16.09.2015    source источник
comment
Я не уверен, что понимаю ваше использование экстраполяции. Вы просто хотите увеличить масштаб повторной выборки, то есть взять 200 точек, отобранных из вашего окна 1x1, и поместить их в окно 5x5 с такими же относительными позициями?   -  person Gregor Thomas    schedule 16.09.2015
comment
да, вы правы, это то, что я имел в виду под экстраполяцией - плотность данных останется той же на единицу площади, но я хочу выполнить повторную выборку на большем экстенте, т.е. если 200 точек в области 1 на 1 м, будет 1000 точек в поперечнике. площадь 5 на 5 м   -  person ToNoY    schedule 16.09.2015
comment
Хорошо, так что не масштабирование, какое-то создание данных. Хотите повторить передискретизированный образец из 200 точек, чтобы было 25 его копий в области 5x5?   -  person Gregor Thomas    schedule 16.09.2015
comment
да, но узоры каждый раз будут разными для случайности   -  person ToNoY    schedule 16.09.2015
comment
Итак, вы хотите взять 25 различных повторных выборок и поместить их в сетку 5x5 рядом друг с другом?   -  person Gregor Thomas    schedule 16.09.2015


Ответы (1)


Это довольно просто, потому что spatstat дает нам все необходимые инструменты. В настоящее время у вас есть сетка 1x1. Вам нужна сетка 5x5, состоящая из 25 сеток 1x1. Мы можем выбрать точки для этих сеток с аргументом nsamples:

a <- quadratresample(X, nx = 25, ny = 5, replace = F, nsamples = 25)

Теперь у нас есть список из 25 ppp. Как вы заметили, все они будут в одном окне 1x1. Чтобы превратить их в сетку, мы сдвигаем их соответствующим образом, от 0 до 4 единиц в сдвиге x и от 0 до 4 единиц в сдвиге y:

for (i in seq_along(a)) {
    a[[i]] = shift(a[[i]], vec = c((i - 1) %% 5, (i - 1) %/% 5))
}

Чтобы объединить их, используйте superimpose:

b = superimpose(a)

Это дает один объект ppp в окне 5x5 с 200 * 25 = 5000 точек, что сохраняет 200 точек на единицу в квадрате оригинала.

person Gregor Thomas    schedule 17.09.2015
comment
выглядит хорошо, но часть наложения выдает ошибку: ›b = superimpose (a) Ошибка в superimpose.default (a): в аргументе 1 нет компонентов x и y - person ToNoY; 17.09.2015
comment
@ToNoY Какую версию spatstat вы используете? В версии 1.42-0 они добавили метод списка для наложения. Если вы обновитесь до самой последней версии, все должно работать. - person Gregor Thomas; 17.09.2015
comment
У меня версия 1-43-0, и я по-прежнему получаю ту же ошибку, что и @ToNoY. Я решил эту проблему, извлекая содержимое списка в качестве аргументов: do.call(superimpose, list.of.ppps). - person Arthur; 24.11.2015