在R中拟合不同的样条曲线(三次,自然,平滑)

时间:2018-11-11 18:52:17

标签: r spline

因此,我正在尝试将三次,自然且平滑的样条曲线拟合到ISLR包中的“自动”数据集。我遇到了麻烦,并且收到了一些警告/错误消息,这使我认为我的数据或创建的矩阵有问题。

真正令人困惑的是该基本命令是如何引发错误的。

natural.splines.fit <- lm(horsepower ~ ns(mpg, knots = c(25, 50, 75)), data = Auto)
  

qr.default(t(const))中的错误:外部函数调用中的NA / NaN / Inf   (arg 1)

我的代码中还有其他错误/警告,但事实是:我实际上是从某处复制代码并运行的,它适用于Carseats数据集,并对其进行了修改以更改变量以匹配Auto数据集。这就是为什么它使我感到困惑。我不明白为什么我会为Auto数据集而不是Carseats数据集出错。有人有见识吗?

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,要在预测变量范围之外定义结。这是将起作用的基本代码(我刚刚定义了在mpg变量范围内的节点)。

x <- ISLR::Auto

natural.splines.fit <- lm(horsepower ~ ns(mpg, knots = c(10,20,30,40)), data = x)
summary(natural.splines.fit)

我相信您正在尝试为25%,50%和75%的百分位设置结,所以我建议首先获取与这些位置相对应的值,然后拟合模型。 这是我的方法

target_quantiles <- unname(quantile(x$mpg, probs = c(0.25,0.5,0.75)))

natural.splines.fit2 <- lm(horsepower ~ ns(mpg, knots = target_quantiles), data = x)
summary(natural.splines.fit2)