I have a dataset in which a variety of values are measured at a series of times, and I have some distance function that will calculate dissimilarity between these measured values. For example,
d <- data.frame(t = round(seq(0, pi, length.out = 12), 2))
d$x <- round(sin(d$t), 2)
d$y <- round(d$t * 0.5 + 1, 2)
dissim <- function(x1, x2, y1, y2) {
sqrt((x1 - x2)^2 + (y1 - y2)^2)
}
d
t x y
1 0.00 0.00 1.00
2 0.29 0.29 1.15
3 0.57 0.54 1.28
4 0.86 0.76 1.43
5 1.14 0.91 1.57
6 1.43 0.99 1.71
7 1.71 0.99 1.86
8 2.00 0.91 2.00
9 2.28 0.76 2.14
10 2.57 0.54 2.29
11 2.86 0.28 2.43
12 3.14 0.00 2.57
I want to group/cluster these observations using the dissimilarity metric, with the caveat that clusters should consist of observations contiguous in time. In this example, if I asked for 4 groups, I'd probably want 1:3, 4:6, 7:9, 10:12
.
The application is identifying 4 seasons from weekly measurements of environmental data. I've seen a variety of similar questions, but none have answers.