r - R中的多元回归样条

标签 r regression lm spline

大多数人可能都熟悉 bs从样条:

library(splines)

workingModel <- lm(mpg ~ factor(gear) + bs(wt, knots = 5) + hp, data = mtcars)

bs(mtcars$wt, knots = 4)

这对单个变量权重使用 b 样条,但您也可以执行多变量样条:
bs(cbind(mtcars$wt,mtcars$hp), knots = 4)

但这会产生一个矩阵,其行数是 mtcars 的两倍,所以当我尝试:
brokenModel <- lm(mpg ~ bs(cbind(mtcars$wt,mtcars$hp), knots = 4), data = mtcars)

我收到关于不同长度的错误。

我的问题是:如果模型的行数与结果变量的行数不同,我该如何在模型中使用多元样条?我是否将结果变量叠加在自身之上 y <- c(y, y) ?为什么多元样条会产生额外的行?

谢谢。

最佳答案

您不能使用 splines::bs在这种情况下,因为它严格用于构建单变量样条。如果你这样做 bs(mat)哪里mat是一个矩阵,它只是在做 bs(c(mat)) .例如,

mat <- matrix(runif(8), 4, 2)
identical(bs(mat), bs(c(mat)))
# [1] TRUE

这解释了为什么在执行 bs(cbind(mtcars$wt,mtcars$hp) 时会得到双倍的行数.

要创建 2D 样条,最简单的方法是创建附加样条:
lm(mpg ~ factor(gear) + bs(wt, knots = 5) + bs(hp, knots = 4), mtcars)

但这可能不是您想要的。然后考虑交互:
model <- lm(mpg ~ factor(gear) + bs(wt, knots = 5):bs(hp, knots = 4), mtcars)
bs(wt, knots = 5):bs(hp, knots = 4)正在两个设计矩阵之间形成行式 Kronecker 乘积。自 bs(wt, knots = 5)是一个 4 列的矩阵,而 bs(hp, knots = 4)是 3 列矩阵,交互有 4 * 3 = 12 列。

或者,考虑使用 mgcv包裹。在 mgcv ,多元样条可以通过两种方式构造:
  • 各向同性薄板样条;
  • 尺度不变张量积样条。

  • 显然你想要第二个,如 wthp有不同的单位。要构造张量积样条,我们可以使用:
    library(mgcv)
    fit <- gam(mpg ~ factor(gear)
                     + s(wt, bs = 'cr', k = 4, fx = TRUE)
                     + s(hp, bs = 'cr', k = 4, fx = TRUE)
                     + ti(wt, hp, bs = 'cr', k = c(4, 4), d = c(1, 1), fx = TRUE),
                     data = mtcars)
    

    在这里,我特意设置了fx = TRUE禁用惩罚回归。

    我不想写一个广泛的答案来介绍mgcv .对于如何s , tigam工作,只需阅读文档。如果您需要弥合理论上的差距,请阅读 Simon Wood 于 2006 年出版的书:Generalized Additive Models: an Introduction with R。

    A practical example of mgcv usage?



    我有答案 Cubic spline method for longitudinal series data这可能会帮助您熟悉 mgcv .但作为介绍性示例,它仅展示了如何使用单变量样条。幸运的是,这也是关键。张量积样条由单变量样条构造而成。

    我的其他答案与 mgcv 有关更多的是理论方面;虽然并非我所有的答案都与 spline 有关引用 mgcv .所以这个问题和答案是我在这个阶段能给你的最好的答案。

    Would the scale invariant tensor product splines be equivalent to radial smoothing or would that be the isotropic thin-place splines?



    径向平滑等效于薄板样条,因为薄板样条的基函数是径向的。这就是为什么它是各向同性的并且可以用于空间回归。

    张量积样条是尺度不变的,因为它被构造为单变量样条基的(成对)乘法。

    关于r - R中的多元回归样条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623214/

    相关文章:

    r - 在没有审查案例时使用 tidycmprsk (R)

    matlab - y = A *x + B 的多维线性回归

    r - 通过简单拟合预测 x 值并在图中注释

    r - 可以使用 xlim 和 ylim 参数仅更改 R 直方图 (hist) 中的下限/上限吗?

    在 R 或聚合中 reshape 数据长数据?

    python - 如何用Python和sklearn编写多元对数回归?

    machine-learning - 低估和高估的不同成本

    r - R中的约束线性回归系数

    r - 如何在同一数据子集上更新 `lm` 或 `glm` 模型?

    R:分组最小值或最大值