compute_elastic_mean function

Compute a elastic mean for a collection of curves

Compute a elastic mean for a collection of curves

Computes a Fréchet mean for the curves stored in data_curves) with respect to the elastic distance. Constructor function for class elastic_mean.

compute_elastic_mean( data_curves, knots = seq(0, 1, len = 5), type = c("smooth", "polygon"), closed = FALSE, eps = 0.01, pen_factor = 100, max_iter = 50 )

Arguments

  • data_curves: list of data.frames with observed points in each row. Each variable is one coordinate direction. If there is a variable t, it is treated as the time parametrization, not as an additional coordinate.
  • knots: set of knots for the mean spline curve
  • type: if "smooth" linear srv-splines are used which results in a differentiable mean curve if "polygon" the mean will be piecewise linear.
  • closed: TRUE if the curves should be treated as closed.
  • eps: the algorithm stops if L2 norm of coefficients changes less
  • pen_factor: penalty factor forcing the mean to be closed
  • max_iter: maximal number of iterations

Returns

an object of class elastic_mean, which is a list

with entries - type: "smooth" if mean was modeled using linear srv-splines or "polygon" if constant srv-splines are used

  • coefs: spline coeffiecients

  • knots: spline knots

  • data_curves: list of data.frames with observed points in each row. First variable t gives the initial parametrization, second variable t_optim

    the optimal parametrization when the curve is aligned to the mean.

  • closed: TRUE if the mean is supposed to be a closed curve.

Examples

curve <- function(t){ rbind(t*cos(13*t), t*sin(13*t)) } set.seed(18) data_curves <- lapply(1:4, function(i){ m <- sample(10:15, 1) delta <- abs(rnorm(m, mean = 1, sd = 0.05)) t <- cumsum(delta)/sum(delta) data.frame(t(curve(t)) + 0.07*t*matrix(cumsum(rnorm(2*length(delta))), ncol = 2)) }) #compute elastic means knots <- seq(0,1, length = 11) smooth_elastic_mean <- compute_elastic_mean(data_curves, knots = knots) plot(smooth_elastic_mean) knots <- seq(0,1, length = 15) polygon_elastic_mean <- compute_elastic_mean(data_curves, knots = knots, type = "poly") lines(get_evals(polygon_elastic_mean), col = "blue", lwd = 2) #compute closed smooth mean, takes a little longer knots <- seq(0,1, length = 11) closed_elastic_mean <- compute_elastic_mean(data_curves, knots = knots, closed = TRUE) plot(closed_elastic_mean)
  • Maintainer: Lisa Steyer
  • License: GPL-3
  • Last published: 2024-01-25

Useful links