我有1318个时间序列的数据。这些系列中的许多长度不相等。除此之外,还在不同的时间点观察到每个系列的相当多的时间点。例如,考虑以下四个系列
t1 <- c(24.51, 24.67, 24.91, 24.95, 25.10, 25.35, 25.50, 25.55, 25.67)
V1 <- c(-0.1710, -0.0824, -0.0419, -0.0416, -0.0216, -0.0792, -0.0656,-0.0273, -0.0589)
ser1 <- cbind(t1, V1)
t2 <- c(24.5, 24.67, 24.91, 24.98, 25.14, 25.38)
V2 <- c(-0.0280, -0.1980, -0.2556, 0.3131, 0.3231, 0.2264)
ser2 <- cbind(t2, V2)
t3 <- c(24.51, 24.67, 24.91, 24.95, 25.10, 25.35, 25.50, 25.55, 25.65, 25.88, 25.97, 25.99)
V3 <- c(0.0897, -0.0533, -0.3497, -0.5684, -0.4294, -0.1109, 0.0352, 0.0550, -0.0536, 0.0185, -0.0295, -0.0324)
ser3 <- cbind(t3, V3)
t4 <- c(24.5, 24.67, 24.71, 24.98, 25.17)
V4 <- c(-0.0280, -0.1980, -0.2556, 0.3131, 0.3231)
ser4 <- cbind(t4, V4)
在这里,t1,t2,t3,t4是时间点,而V1,V2,V3,V4是在这些时间点进行的观察。实际数据中的时间点是儒略日期,因此它们看起来像这样,只是它们是更大的十进制数字,例如2452450.6225。
我正在尝试使用功能数据方法对这些时间序列进行聚类,为此我在R中使用“ funFEM”包。目前的示例适用于等距和等长时间序列,因此我不确定如何将包用于我的数据。最初,我尝试通过将NA添加到时间序列来使所有时间序列的长度等于具有最高观察次数(此处等于ser3)的时间序列的长度。因此,按照此示例,我将ser2设置为
t2_n <- c(24.5, 24.67, 24.91, 24.98, 25.14, 25.38, 25.50, 25.55, 25.65, 25.88, 25.97, 25.99)
V2_na <- c(V2, rep(NA, 6))
ser2_na <- cbind(t2_n, V2_na)
请注意,为了使t2等于t3的长度,我抓住了t3的最后6个时间点。为了使V2的长度等于V3的长度,我添加了NA。
然后我将数据矩阵创建为
dat <- rbind(V1_na, V2_na, V3, V4_na).
我使用的代码是
require(funFEM)
basis<- create.fourier.basis(c(min(t3), max(t3)), nbasis = 25)
fdobj <- smooth.basis(c(min(t3), max(t3)) ,dat, basis)$fd
res <- funFEM(fdobj, K = 2:9, model = "all", crit = "bic", init = "random")
但这给我一个错误
svd(X)中的错误:“ x”中的值无限或缺失。
有人可以告诉我如何处理此软件包的数据集吗?