【问题标题】:Fitting different splines in R (Cubic, Natural, Smoothing)在 R 中拟合不同的样条曲线(三次、自然、平滑)
【发布时间】:2018-11-12 03:07:32
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: r spline


    【解决方案1】:

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

    【讨论】:

    • 哦,那么我在“knots”命令中输入的值是实际值吗?我认为它们代表分位数。感谢您清除它。
    • 是的。您必须将断点定义为变量的值。请,如果这解决了您的问题,您介意投票并勾选答案吗?
    猜你喜欢
    • 2021-02-23
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多