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

Fitting different splines in R (Cubic, Natural, Smoothing)

所以我正在尝试将立方、自然和平滑的样条拟合到 ISLR 包中的 Auto 数据集。我遇到了一些问题,收到了一些 warning/error 消息,这让我觉得我的数据或我创建的矩阵有问题。

真正令人困惑的是这个基本命令是如何抛出错误的。

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

Error in qr.default(t(const)) : NA/NaN/Inf in foreign function call (arg 1)

我的代码中还有其他 errors/warnings,但问题是:我基本上是从某处复制了代码,而且我还 运行 它适用于 Carseats 数据集并将其修改为更改变量以匹配 Auto 数据集。这就是为什么它让我感到困惑。我不明白为什么我会收到 Auto 数据集错误而不是 Carseats 数据集错误。有没有人有一些见解?

您遇到的问题是您定义的节点超出了预测变量的范围。这是一个可以工作的基本代码(我刚刚定义了变量 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)