我使用样条曲线包的bs函数为图形目的创建b样条平滑曲线。 (至少有一个报告表明,Excel使用三阶b样条作为其平滑线条图,我希望能够复制这些曲线。)我无法理解bs函数所需的参数。代表代码遵循下面,作为适于从BS文档:指定在样条曲线中使用bs函数的b样条拟合的自由度程序包
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文档中的示例代码指定DF = 5在调用BS,并且不指定程度。我不知道我有多少自由度。我所知道的是我想要一个三阶b样条。我已经尝试过指定df的不同值,或者除了度数之外,我得到的结果大不相同。这就是为什么我怀疑df的规格是这里的问题。在这种情况下我将如何计算df?
帮助文件建议df =长度(节)+度。如果我将内部点视为结点,则此示例给出了df = 11,这将生成错误消息和无意义的样条拟合。
预先感谢您。
我显然不清楚我的意图。我试图做到这一点: How can I use spline() with ggplot?,但与b样条。
您能否提供Frank Harrel评论的来源? – takje 2017-09-03 13:35:41
我看的第一个地方是他的RMS书的索引。我记得他有一个专门研究受限立方样条的部分。 – 2017-09-03 17:48:50