首页 > 解决方案 > 减少 R 中功能性 PCA 的功能范围 - 功能性数据分析

问题描述

我对跨越 22 年的河流流量进行了离散测量。由于河流流量自然是连续的,我试图将函数拟合到数据中。

library(FDA) 
set.seed(1) 

### 3 years of flow data
base = c(1,1,1,1,1,2,2,1,2,2,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1)
year1 = sapply(base, function(x){x + runif(1)})
year2 = sapply(base, function(x){x + runif(1)})
year3 = sapply(base, function(x){x + runif(1)})

flow.mat = matrix(c(year1, year2, year3), ncol = 3)

虽然建议对周期性数据使用傅立叶基系统,但真实数据不会表现出强烈的重复模式(忽略此假设的数据模拟)。它还包含重要的极值。因此,我尝试将 bSpline 基系统拟合到数据中。

sp.basis=create.bspline.basis(c(1,length(base)), norder=6, nbasis=15)
sb.fd=smooth.basis(1:length(base), flow.mat, sp.basis)$fd

最终,我打算将流量数据用作每月间隔的回归模型中的协变量。这带来了一个问题,因为我将年度函数拟合到数据中,因为这为月度数据提供了更好的拟合,因为数据缺乏时间独立性。

因此,我想知道是否可以对生成的函数进行子集化,一次选择一个月。

我怀疑这是不可能的,因此,是否可以对子集数据运行 fPCA,因为我打算使用 fPCA 分数作为模型中的协变量?

到目前为止,我在运行子集 fPCA 方面完全不成功。相反,我一直通过以下方式获得年度分数:

pca.flow=pca.fd(sb.fd, 2)

标签: rtime-seriespca

解决方案


在没有深入了解的情况下,我只是绘制了您的数据并进行了多项式拟合。我确实使用了 4 度多项式,因为它是具有 3 个起伏的波(4 比拟合曲线的极值多一个)。事实上,5级或以上并没有显着改善。

为你的 22 年时间序列做同样的事情怎么样?

在此处输入图像描述


推荐阅读