我正在使用 splines 包的 bs 函数来创建用于图形目的的 b 样条平滑曲线。(至少有一份报告称 Excel 使用三阶 b 样条曲线作为其平滑线图,我希望能够复制这些曲线。)我无法理解 bs 函数所需的参数。代表性代码如下,改编自 bs 文档:
require(splines)
require(ggplot2)
n <- 10
x <- 1:10
y <- rnorm(n)
d <- data.frame(x=x, y=y)
summary(fm1 <- lm(y ~ bs(x, degree=3)), data=d)
x.spline <- seq(1, 10, length.out=n*10)
spline.data <- data.frame(x=x.spline, y=predict(fm1, data.frame(x=x.spline)))
ggplot(d, aes(x,y)) + geom_point + geom_line(aes(x,y), data=spline.data)
bs 文档中的示例代码在对 bs 的调用中指定了 df=5,并且没有指定度数。我不知道我有多少自由度。我所知道的是我想要一个三阶 b 样条。我已经尝试指定不同的 df 值来代替度数,或者除了度数之外,我得到了截然不同的结果。这就是为什么我怀疑 df 的规范是这里的问题。在这种情况下我将如何计算 df ?
帮助文件建议 df = length(knots) + degree。如果我将内部点视为结,则在此示例中为我提供 df=11,这会生成错误消息和无意义的样条拟合。
先感谢您。
我显然不清楚我的意图。我正在尝试这样做: 如何将 spline() 与 ggplot 一起使用?,但使用 b 样条。