You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用B-spline基函数计算粗糙度惩罚矩阵时getbasispenalty报错

解决fda包getbasispenalty计算粗糙度惩罚矩阵时的逻辑判断错误

错误原因

你遇到的错误根源是B-spline断点包含重复值:代码里用bp <- c(sort(x1))把所有汽车速度值(含重复)作为断点,导致内部节点存在重复项。getbasispenalty函数处理重复节点时,生成的knotmult是长度大于1的向量,但函数内部的逻辑判断knotmult > rng[1] && knotmult < rng[2]要求单个布尔值,因此触发类型不匹配的报错。

修正方案

方案1:使用唯一值作为断点

去除速度数据里的重复值,确保断点严格递增无重复:

bp <- unique(sort(x1))   # 提取唯一的速度值作为断点
bf <- fda::create.bspline.basis(
  rangeval = rg, norder = m1, breaks = bp)

方案2:自动生成等距断点

如果不需要绑定数据点作为断点,可直接指定基函数数量,让create.bspline.basis自动生成无重复的等距节点:

nbasis <- 15  # 根据建模需求自定义基函数数量
bf <- fda::create.bspline.basis(
  rangeval = rg, norder = m1, nbasis = nbasis)

方案3:手动指定无重复断点范围

根据数据范围手动设置无重复的断点,比如在3到26之间生成若干等距节点:

bp <- seq(3, 26, length.out = 10)  # 生成10个无重复的等距断点
bf <- fda::create.bspline.basis(
  rangeval = rg, norder = m1, breaks = bp)

验证修正

修改断点配置后,重新运行getbasispenalty(bf, L1)即可正常生成粗糙度惩罚矩阵,后续的image.plot也能正常执行。

内容的提问来源于stack exchange,提问作者Saidin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:11