我正在尝试将障碍模型拟合到已知一年中的哪一天的季节性数据。
为此,我尝试构建具有循环限制的样条曲线(末端与起点相接)。这是一个 MWE 使用lm
而不是障碍模型来简化问题:
# Example data
set.seed(1234)
n <- 1000
x <- runif(n, 0, 2 * pi) # some random time in the year (2 * pi being day 365)
y <- sin(x) + rnorm(n)
# Generate cyclic B-spline bases using mgcv
k <- 4
knots <- seq(0, 2 * pi, length.out = k)
cyclicSpline <- mgcv::cSplineDes(x, knots = knots)
但是,如果我尝试使用生成的样条基函数作为模型的预测变量,它最终会出现秩不足:
> lm(y ~ cyclicSpline)
Call:
lm(formula = y ~ cyclicSpline)
Coefficients:
(Intercept) cyclicSpline1 cyclicSpline2 cyclicSpline3 cyclicSpline4
-0.09211 -1.40510 0.03613 1.68947 NA
我尝试正交化样条基函数,但这仍然导致秩不足:
> Q <- svd(t(cyclicSpline))$v
> lm(y ~ Q)
Call:
lm(formula = y ~ Q)
Coefficients:
(Intercept) Q1 Q2 Q3 Q4
8.173 258.817 -7.297 21.510 NA
我也尝试过使用不同数量的结,但它似乎总是导致等级不足。我的印象是,一旦正交化,我最终会得到独立的基函数。如果是这样,为什么会导致秩不足的设计矩阵?