Как получить ковариационные данные из географического растра для `ppm`? - PullRequest
3 голосов
/ 15 октября 2019

Я хочу добавить модель точечного процесса Пуассона с spatstat::ppm, и я не уверен, каков наилучший способ передачи ковариатных данных в функцию. Я понимаю, что spatstat ожидает плоские координаты, поэтому я преобразовал свои данные о точечном местоположении в планарные crs перед созданием ppp объекта точечного массива. Ковариатные данные находятся в растровом стеке с непрогнозируемыми географическими координатами, и я понимаю, что проецирование растров, как правило, не рекомендуется . Я извлек ковариатные значения для местоположений точек из растра, используя исходные географические координаты точек и raster::extract. Все идет нормально. Проблема в том, что ...

недостаточно наблюдать ковариату только в точках шаблона точек данных;ковариата также должна была наблюдаться в других местах окна. - ppm helpfile

Похоже, у меня есть два варианта предоставления ковариатных данных для аргумента data.

  1. Пиксельное изображение;кажется опрометчивым из-за проблем проекции растра.
  2. Список функций (по одной на ковариату), которые можно оценить в любом месте (x, y) для получения соответствующих значений ковариаты. Это похоже на путь, но моя попытка написать такую ​​функцию оказывается смехотворно медленной. Он вызывает raster::extract для каждой пары координат после преобразования координат в crs растра. Несмотря на то, что raster::extract достаточно быстрый, если ему дается большое количество баллов, для каждого звонка, по-видимому, возникают значительные издержки. Согласно microbenchmark, преобразование координат занимает около 4 мс, а извлечение занимает около 582 мс для одного ковариата или около 4 секунд для каждой точки, чтобы получить все 7 ковариат. Я не знаю, сколько раз ppm захочет вызвать это, но если это будет хотя бы один раз на точку в схеме, это займет слишком много времени.

Есть ли способ, которым я могувыяснить, каков полный набор точек, которые ppm будет запрашивать ковариатные данные, чтобы я мог извлечь их заранее одним вызовом?

Кажется, что мой сценарий использования (ковариат в географическом растре) долженбыть довольно распространенным, так что я предполагаю, что есть надежный способ сделать это правильно. Что это?

1 Ответ

1 голос
/ 15 октября 2019

Спасибо за хорошо написанный вопрос, четко определяющий ваши потребности. Было бы еще лучше с простым воспроизводимым примером, использующим, например, встроенные данные из raster и spatstat или искусственно сгенерированные данные. В отсутствие воспроизводимого примера мой ответ не будет содержать никакого кода, но обрисует, что вы могли бы сделать.

Первый шаг в ppm заключается в создании квадратурной схемы или класса quad или logiquad в зависимости от того, какойприближение максимального правдоподобия используется в ppm. Они могут быть сгенерированы непосредственно пользователем через quadscheme или quadscheme.logi. Квадратурная схема содержит все точки, где ppm будет оценивать ковариаты. Вы можете извлечь координаты квадратурной схемы, используя функцию coords. Если вы построите data.frame со всеми ковариатами, оцененными в этих точках, вы можете указать это в качестве аргумента data для ppm, тогда как квадратурная схема является первым аргументом. Чтобы лучше понять вещи, попробуйте прочитать раздел Подробности help(ppm.quad).

Другой подход, который может дать вам оптимальное использование ваших данных, состоит в том, чтобы извлечь точки сетки вашего текущего стека растров вместе со всеми ковариатными значениями. и спроецировать эту точку данных. Затем преобразуйте его в простой data.frame со столбцами x, y, covar1, covar2 и т. Д. Затем вы можете использовать x и y вместе с интересующими вас точечными наблюдениями, чтобы создатьквадратурная схема вручную, а остальные столбцы можно указать как data до ppm.

Было бы интересно сравнить результаты обоих этих подходов, а также результаты простого проецирования стека растра и преобразованияэто список im объектов.

...