如何在R中构造特定的三次B样条基矩阵?
在R中构造满足条件的三次B样条基矩阵
当然可以实现,步骤非常直接:
- 用
splines包的bs()函数生成原始的三次B样条基矩阵,矩阵元素对应Bⱼ(xᵢ) - 计算每个基函数在
x=0处的取值,通过bs(0, ...)得到一个行向量,每个元素为Bⱼ(0) - 将原始基矩阵的每一列减去对应的
Bⱼ(0)值,即可得到目标矩阵,其第(i,j)元素为Bⱼ(xᵢ) - Bⱼ(0)
示例代码
library(splines) # 示例数据 x <- seq(-1, 3, length.out = 10) # 生成原始三次B样条基矩阵,可指定节点或自由度 knots <- quantile(x, c(0.25, 0.5, 0.75)) bs_matrix <- bs(x, knots = knots, degree = 3, intercept = FALSE) # 计算x=0处的基函数值,参数需与生成原始矩阵时完全一致 bs_0 <- bs(0, knots = knots, degree = 3, intercept = FALSE) # 构造目标基矩阵 target_matrix <- bs_matrix - rep(bs_0, each = nrow(bs_matrix))
关键说明
- 调用
bs()时,生成原始矩阵和计算bs(0)的参数(比如节点、自由度、是否包含截距)必须完全一致,否则基函数的对应关系会出错 - 经过这样的处理后,新的基函数在
x=0处的取值必然为0,完全符合你的需求
内容的提问来源于stack exchange,提问作者User505
相关产品推荐
相关产品推荐

