Exercise B: Similarity

Task 1: Similarity measures

library(readr)
library(ggplot2)
library(dplyr)

Attache Paket: 'dplyr'
Die folgenden Objekte sind maskiert von 'package:stats':

    filter, lag
Die folgenden Objekte sind maskiert von 'package:base':

    intersect, setdiff, setequal, union
library(tidyr)

# install.packages("SimilarityMeasures")
library(SimilarityMeasures)
# import dataset
pedestrian <- read_delim("pedestrian.csv")
Rows: 289 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl  (3): TrajID, E, N
dttm (1): DatetimeUTC

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# visualize
ggplot(pedestrian, aes(E, N, colour = factor(TrajID))) +
  geom_point() +
  geom_path() +
  facet_wrap(~TrajID, ncol=3, labeller = labeller(TrajID = c(
    "1" = "TrajID 1", 
    "2" = "TrajID 2",
    "3" = "TrajID 3", 
    "4" = "TrajID 4",
    "5" = "TrajID 5",
    "6" = "TrajID 6"))) +
  labs(title = "Visual comparison of the 6 trajectories", 
       subtitle = "Each subplot highlights a trajectory") +
  theme(legend.position = "none", axis.title = element_blank())

Task 2: Calculate similarity

# help(package = "SimilarityMeasures")

# One trajectory per matrix
pedestrian1 <- pedestrian |> 
  filter(TrajID == 1) |> 
  select(E, N) |> 
  as.matrix() 
  
pedestrian2 <- pedestrian |> 
  filter(TrajID == 2) |>
  select(E, N) |> 
  as.matrix() 

pedestrian3 <- pedestrian |> 
  filter(TrajID == 3) |> 
  select(E, N) |> 
  as.matrix() 

pedestrian4 <- pedestrian |> 
  filter(TrajID == 4) |> 
  select(E, N) |> 
  as.matrix() 

pedestrian5 <- pedestrian |> 
  filter(TrajID == 5) |>
  select(E, N) |> 
  as.matrix() 

pedestrian6 <- pedestrian |> 
  filter(TrajID == 6) |> 
  select(E, N) |> 
  as.matrix() 

DTW

# calculate
dtw2 <- DTW(pedestrian1, pedestrian2) 
dtw3 <- DTW(pedestrian1, pedestrian3)
dtw4 <- DTW(pedestrian1, pedestrian4)
dtw5 <- DTW(pedestrian1, pedestrian5)
dtw6 <- DTW(pedestrian1, pedestrian6)


# Dataframe
dtw_df <- tibble(dtw2, dtw3, dtw4, dtw5, dtw6) |> 
  pivot_longer(c(dtw2:dtw6)) |> 
  mutate(TrajID = c(2:6))


# visualize
p1 <- ggplot(dtw_df, aes(TrajID, value)) +
  geom_col(aes(fill = factor(TrajID))) +
  labs(subtitle = "DTW", 
       x = "Comparison trajectory") +
  theme(legend.position = "none") 

p1

EditDist

# calculate
ed2 <- EditDist(pedestrian1, pedestrian2) 
ed3 <- EditDist(pedestrian1, pedestrian3)
ed4 <- EditDist(pedestrian1, pedestrian4)
ed5 <- EditDist(pedestrian1, pedestrian5)
ed6 <- EditDist(pedestrian1, pedestrian6)


# Dataframe
editdist_df <- tibble(ed2, ed3, ed4, ed5, ed6) |> 
  pivot_longer(c(ed2:ed6)) |> 
  mutate(TrajID = c(2:6))


# visualize
p2 <- ggplot(editdist_df, aes(TrajID, value)) +
  geom_col(aes(fill = factor(TrajID))) +
  labs(subtitle = "Editdist", 
       x = "Comparison trajectory") +
  theme(legend.position = "none") 

p2

Frechet

# calculate
fre2 <- Frechet(pedestrian1, pedestrian2) 
fre3 <- Frechet(pedestrian1, pedestrian3)
fre4 <- Frechet(pedestrian1, pedestrian4)
fre5 <- Frechet(pedestrian1, pedestrian5)
fre6 <- Frechet(pedestrian1, pedestrian6)


# Dataframe ersetllen
frechet_df <- tibble(fre2, fre3, fre4, fre5, fre6) |> 
  pivot_longer(c(fre2:fre6)) |> 
  mutate(TrajID = c(2:6))


# visualize
p3 <- ggplot(frechet_df, aes(TrajID, value, group = TrajID)) +
  geom_col(aes(fill = factor(TrajID))) +
  labs(subtitle = "Frechet", 
       x = "Comparison trajectory") +
  theme(legend.position = "none") 

p3

LCSS

# calculate
lc2 <- LCSS(pedestrian1, pedestrian2, pointSpacing = 2, pointDistance = 2, errorMarg = 0.5) 
lc3 <- LCSS(pedestrian1, pedestrian3, pointSpacing = 2, pointDistance = 2, errorMarg = 0.5)
lc4 <- LCSS(pedestrian1, pedestrian4, pointSpacing = 2, pointDistance = 2, errorMarg = 0.5)
lc5 <- LCSS(pedestrian1, pedestrian5, pointSpacing = 2, pointDistance = 2, errorMarg = 0.5)
lc6 <- LCSS(pedestrian1, pedestrian6, pointSpacing = 2, pointDistance = 2, errorMarg = 0.5)


# Dataframe 
lcss_df <- tibble(lc2, lc3, lc4, lc5, lc6) |> 
  pivot_longer(c(lc2:lc6)) |> 
  mutate(TrajID = c(2:6))


# visualize
p4 <- ggplot(lcss_df, aes(TrajID, value, group = TrajID)) +
  geom_col(aes(fill = factor(TrajID))) +
  labs(subtitle = "LCSS", 
       x = "Comparison trajectory") +
  theme(legend.position = "none") 

p4

Visualize

library(patchwork)

p1 + p2 + p3 + p4 +
  plot_layout(ncol = 2, nrow = 2, axis_titles = "collect") +
  plot_annotation(title = "Computed similarities using different mesasures between trajectory 1 to all other trajectories")