Как оценить потенциальную площадь пути (PPA), используя пакет {STPtrajectories} в R - PullRequest
0 голосов
/ 02 сентября 2018

Я использую пакет {STPtrajectories} для своего исследования, чтобы оценить potential path area (PPA) жителей, который используется в терминологии пространственно-временного анализа, в качестве объективной переменной анализа, который предназначен для проверки, если есть значительная разница жилой сферы (или домашней зоны) между разными типами жителей города.

Тем не менее, я получил довольно большой PPA, чем ожидал после обучения, которое вводится здесь .

Поскольку я использую данные о поездке, которые содержат только начальную / конечную точку и время движения за один день, я преобразовал их в 24-часовой формат активности и оценил PPA примерно так:

## ---------- START OF CODE ---------- ##

## Load packages
library(sp)
library(spacetime)
library(knitr)
library(rgl)
library(xts)
library(rgeos)
knit_hooks$set(webgl = hook_webgl)
library(STPtrajectories)

## Start time of activity
time <- as.POSIXct(c(
"2012-01-01 00:00:00",  # Sleeping
"2012-01-01 07:00:00",  # Start to leave for workplace
"2012-01-01 07:30:00",  # Arrive at workplace [change coordinates]
"2012-01-01 10:00:00",  # Start to leave for home
"2012-01-01 10:30:00",  # Arrive at home for houseshore [change coordinates]
"2012-01-01 17:30:00",  # Start to leave for another destination
"2012-01-01 17:45:00",  # Arrive at another destination  [change coordinates]
"2012-01-01 21:30:00",  # Start to leave for home
"2012-01-01 21:45:00"), # Arrive at home [change coordinates]
origin="1970-1-1",tz="Asia/Phnom_Penh")

## End time of activity
endtime <- as.POSIXct(c(
"2012-01-01 07:00:00",  # Sleeping and preparation to leave
"2012-01-01 07:30:00",  # Arrive at workplace
"2012-01-01 10:00:00",  # End time of work
"2012-01-01 10:30:00",  # Arrive at home
"2012-01-01 17:30:00",  # Houseshore and leave for another destination
"2012-01-01 17:45:00",  # Arrive at anther destination
"2012-01-01 21:30:00",  # Arrive at destination  [change coordinates]
"2012-01-01 21:45:00",  # Do private matter and leave for home
"2012-01-02 00:00:00"), # End of the day  [change coordinates],
origin="1970-1-1",tz="Asia/Phnom_Penh")

## X coordinates of activity
x <- c(
475465.6, # Home
475465.6, # Home (time to leave)
473548.0, # Workplace (time to start to work)
473548.0, # Workplace (time to leave for home)
475465.6, # Home (houseshore)
475465.6, # Home (time to leave for another destination)
484869.7, # Another place (private matter)
484869.7, # Another place (time to leave for home)
475465.6  # Home (night time until sleep)
)

## Y coordinates of activity
y <- c(
1272272,
1272272,
1279171,
1279171,
1272272,
1272272,
1270558,
1270558,
1272272
)

## Combine X and Y
xy <- cbind(x,y)

## Dummy data frame for spdf
dummy <-  data.frame(sp=rep(0,nrow(test)))

## Build spatial points data frame
spdf <- SpatialPointsDataFrame(coords=xy,data=dummy,
            proj4string=CRS("+proj=utm +north +zone=48 ellps=WGS84"))

## Dummy data frame for STIDF
dummy <-  data.frame(df=rep(0,nrow(test)))

## Activity time: this is canceled to implement
# a <- track@connections
# a$duration[a$speed!=0] <- 0
# atime <- a$duration

## Build STIDF class object
stidf <- STIDF(spdf,time,dummy,endtime)

#### Build track class object
track <- Track(stidf)
## Convert meters into kilometers
track@connections$distance <- track@connections$distance/1000
## Convert velocity m/s into km/h
track@connections$duration <- track@connections$duration/3600

#### Build STP_track class object
## Velocity to build STP_track class object
v <- track@connections$speed * 1.0 # No adjustment
v[v==0] <- 3.0 # Walk speed in kph
## BUild STP_track class object
stp <- STP_Track(track=track,vmax=v)

## Plot STP_track class object
xrange <- c(350000,605000)   # Manually set to see too large PAA
yrange <- c(1140000,1410000) # Manually set to see too large PAA
plot(stp,type="p",col="red",pch=16,cex=2,xlim=xrange,ylim=yrange,
     xlab="lon (meters)",ylab="y (meters)",main="Tragectories of xxx")

#### Estimate PPA
ppa <- PPA(stp)
plot(ppa,add=T)
ppa.area <- area(ppa)

## ---------- END OF CODE ---------- ##

Это текущий вывод из кодов:

enter image description here Примечание: административные границы показаны только для вашего понимания

Я ожидал, что PPA будет оцениваться только вокруг каждой красной точки активности, потому что скорость каждого движения составляет всего около 3-10 км / ч, а его продолжительность составляет около часа или меньше, однако, по оценкам, PPA охватывает почти весь город как показано на рисунке.

Существуют некоторые основные проблемы / предположения о фрейме данных:

  1. Координаты деятельности Местоположение каждого действия не закодировано в фактических координатах, а представлено центроидами зоны, построенными в центре административных границ.

  2. Количество и продолжительность деятельности Предполагается, что перемещения жителей фиксируются только в момент движения, поэтому в этом кадре данных его / ее движения фиксируются в 9 раз, когда он / она проснулся, (2) ушел на работу, ( 3) прибыл на рабочее место, (4) уехал домой, (5) прибыл домой, (6) уехал в другое место назначения, (7) прибыл в другое место назначения, (8) уехал домой, (9) прибыл домой. Таким образом, [activity_time] в @connections не установлено. Таким образом, он / она должен иметь возможность перемещаться между каждым видом деятельности. Однако из-за этого формата некоторые пары действий не имеют расстояния, например, действия между (1) и (2). Я полагаю, что это не проблема для оценки PPA.

  3. Нет интерполяции между действиями Случайные траектории оцениваются в примере. Однако я не применил эту операцию для своего фрейма данных, поскольку он не позволяет генерировать новые точки вдали от фактических мест действия. Тем не менее, это, кажется, влияет на результат такого огромного PPA. Для информации, когда я уменьшил число разделенных фреймов данных в примере (например, n_points изменяется с 15 на 3), он все еще генерировал PPA эллипсоида, который по-прежнему доступен, однако в моем фрейме данных этого не произошло .

  4. Хитрое поведение пакета

    • Согласно виньеткам {STPtrajectories}, endTime штампов точек отслеживания и activity_time используется для запрета перемещения образца во время действия. Однако эти две переменные, похоже, не влияют на результат, когда я изменил настройку.
    • Speed и period в @connections слот
      Объект класса Track изначально сохраняет расстояние в метрах, период в минутах и ​​скорость в км / ч. Поскольку это, кажется, не в форме, я преобразовал расстояние в километр и точку в час после создания объекта класса дорожки. Однако это также не влияет на результат оценки PPA.

Буду очень признателен, если вы дадите совет для соответствующей оценки PPA.

...