Определите параметры округления для плоского точечного массива в UTM

Я анализирую планарный точечный рисунок, который был записан с помощью оборудования GPS с высоким разрешением и точностью до ~ 1 см. Мой фрейм данных состоит из координат UTM (в метрах) с двумя десятичными знаками, которые затем я конвертирую в объект ppp, используя многоугольник области исследования, который также находится в UTM.

Все импортируется и строится, как и ожидалось, и я могу запускать любые spatstat функции на объекте ppp, который мне нужен. Однако при преобразовании кадра данных в объект ppp координаты округляются с точностью до 0,1 м.

Есть ли способ определить / контролировать количество десятичных знаков при создании объекта ppp? Я хочу сохранить значащие цифры до 0,01 м для анализа корреляции и интервалов.

dat <- ppp(df[,1],df[,2], window = poly_owin)
summary(dat)
Planar point pattern:  1755 points

*Pattern contains duplicated points*

Coordinates are given to 1 decimal place
i.e. rounded to the nearest multiple of 0.1 m

Я проверил как df, так и dat, и координаты не усекаются на 0,1 м - данные все еще существуют на уровне 0,01 м. Тем не менее, график Фрая dat показывает регулярный интервал с шагом 10 см, поэтому точки дискретизируются с шагом 0,1 м для анализа.

Любая помощь очень ценится.

ИЗМЕНИТЬ (расширенный набор данных из предыдущего примера):

head(df)
      POINT_X     POINT_Y
1 337974.8571 6458115.131
2 337985.2904 6458132.547
3 337985.5247 6458131.010
4 337989.2619 6458130.392
5 337989.0793 6458128.664
6 337988.8296 6458127.859
head(coords(dat))
            x           y
1 337974.8571 6458115.131
2 337985.2904 6458132.547
3 337985.5247 6458131.010
4 337989.2619 6458130.392
5 337989.0793 6458128.664
6 337988.8296 6458127.859
summary(dat)
Planar point pattern:  6755 points
Average intensity 0.359048833914 points per square m

*Pattern contains duplicated points*

Coordinates are given to 1 decimal place
i.e. rounded to the nearest multiple of 0.1 m

Window: polygonal boundary
single connected closed polygon with 122 vertices
enclosing rectangle: [337968.2137, 338168.078494] x [6458047.265, 
6458200.4235] m
Window area = 18813.6 square m
Unit of length: 1 m
Fraction of frame area: 0.615

ИЗМЕНИТЬ 2

head(coords(frypoints(dat)))
        x             y
1 10.4333 17.4160000002
2 10.6676 15.8789999997
3 14.4048 15.2609999999
4 14.2222 13.5329999998
5 13.9725 12.7280000001
6 10.7175 12.7379999999

fryplot(dat, width = 0.3)

Вывод графика Фрай


person Chris Ames    schedule 26.07.2018    source источник
comment
Координаты UTM исходные данные или они были преобразованы из широты, долготы? Может быть, преобразование вызывает дискретизацию? По крайней мере, в spatstat нет ничего, что могло бы вызвать это.   -  person Ege Rubak    schedule 30.07.2018


Ответы (2)


spatstat не округляет данные координат. Функция ppp копирует входные данные непосредственно в объект точечного массива без изменения данных.

В распечатке из print.ppp округление упоминается, потому что оно пытается угадать уровень точности данных. Угадывание выполняется spatstat функцией rounding, которая в основном проверяет, совпадает ли round(x, k) с x для заданного количества цифр k.

Итак, моя интерпретация такова, что ваши данные пространственных координат, несмотря на то, что они записаны с более высокой точностью, фактически дискретизируются с точностью до 0,1 м. Хотя rounding.ppp иногда может ошибаться из-за числовых сбоев, ваше описание графика Фрая поддерживает ту же интерпретацию.

person Adrian Baddeley    schedule 28.07.2018


Звучит странно. В spatstat округление не выполняется - метод сводки просто определяет, соответствуют ли координаты некоторому количеству десятичных знаков, и затем сигнализирует об этом.

library(spatstat)
df <- data.frame(x = runif(4, 0, 10), y = runif(4, 0, 10))
dat <- ppp(df[,1], df[,2], window = square(10))
coords(dat)
#>           x        y
#> 1 0.2025274 3.458709
#> 2 9.2649444 2.272643
#> 3 5.3580148 1.270116
#> 4 8.4807510 7.745455
summary(dat)
#> Planar point pattern:  4 points
#> Average intensity 0.04 points per square unit
#> 
#> Coordinates are given to 7 decimal places
#> 
#> Window: rectangle = [0, 10] x [0, 10] units
#> Window area = 100 square units

df2 <- round(df, 2)
dat2 <- ppp(df2[,1], df2[,2], window = square(10))
coords(dat2)
#>      x    y
#> 1 0.20 3.46
#> 2 9.26 2.27
#> 3 5.36 1.27
#> 4 8.48 7.75
summary(dat2)
#> Planar point pattern:  4 points
#> Average intensity 0.04 points per square unit
#> 
#> Coordinates are given to 2 decimal places
#> i.e. rounded to the nearest multiple of 0.01 units
#> 
#> Window: rectangle = [0, 10] x [0, 10] units
#> Window area = 100 square units

Не могли бы вы попытаться добавить к вашему вопросу вывод следующего?

head(df)
head(coords(dat))

РЕДАКТИРОВАТЬ: в настоящее время spatstat использует all.equal, чтобы угадать округление данных. Однако это работает только для примерно 8 значащих цифр, поэтому, когда ваши значения координат большие, его обманывают. Это НЕ означает, что координаты на самом деле усечены - обманывают только механизм предположения. Входные данные копируются дословно. Как вы заметите, что «диаграмма Фрая для dat показывает регулярный интервал с шагом 10 см»? Не могли бы вы сообщить о выходе head(coords(frypoints(dat)))?

person Ege Rubak    schedule 27.07.2018
comment
Большое спасибо за ответ. Я добавил результат, который вы запрашивали, в свой исходный вопрос. - person Chris Ames; 29.07.2018
comment
Я также должен добавить, что координаты UTM указаны в метрах и содержат намного больше, чем 3 или 4 десятичных знака, показанных в выходных данных (хотя значения, превышающие миллиметр, не имеют значения). Насколько я могу судить, количество цифр, отображаемых на выходе, контролируется настройкой цифр. - person Chris Ames; 29.07.2018
comment
Спасибо еще раз. Дополнительная информация предоставлена ​​как второе редактирование. Цените объяснение и время. - person Chris Ames; 30.07.2018