Skip to contents

This function applies the mean shift clustering algorithm to a functional data object of class fdata. It uses a kernel-based approach to iteratively shift points towards high-density regions.

Usage

fmeanshift(
  fdataobj,
  h = -0.15,
  metric = metric.lp,
  par.metric = list(lp = 2),
  derr = 0.1
)

Arguments

fdataobj

An object of class fdata containing the functional data to be clustered.

h

The bandwidth parameter. If h < 0, the bandwidth is estimated using the h.default function with prob = abs(h). Defaults to h = -0.15.

metric

A function to compute the distance between elements of fdataobj. Defaults to metric.lp.

par.metric

A list of additional parameters to be passed to the metric function. By default, list(lp = 2) to compute the L2 distance.

derr

A convergence tolerance parameter used to determine when the mean shift has converged. Defaults to derr = 0.1.

Value

A list with the following components:

cluster

An integer vector indicating the cluster assignment for each observation in fdataobj.

centers

An fdata object representing the centers of the clusters.

Details

The fmeanshift algorithm iteratively shifts each observation towards the mode of its neighborhood, defined using a kernel with bandwidth h. The procedure continues until the shift distance is smaller than a convergence threshold controlled by derr.

The distance between functional data is computed using the distance function metric, which defaults to the L2 distance provided by metric.lp from the fda.usc package. The bandwidth h controls the size of the neighborhood c onsidered for the shift.

See also

See metric.lp for distance calculations.

Examples

if (FALSE) { # \dontrun{
set.seed(8:1)
t <- seq(0, 2 * pi, length.out = 101)
res <- rprocKclust(t, n = c(40, 40), process = c("cos_sin", "sin"),
                   c = c(-1, 2), k = c(NA, NA), s = c(0.3, 0.3))
# Run mean shift clustering with automatic bandwidth selection
result <- fmeanshift(res$X)
# Display cluster assignments and centers
table(result$cluster,res$groups)
plot(result$centers)
plot(res$X, col = result$cluster, main = "functional meanshift")
} # }