繁体   English   中英

R中的多元回归样条

[英]Multivariate regression splines in R

大多数人可能都熟悉splines中的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)时获得双倍行数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 关于stigam如何工作,只需阅读文档。 如果你需要在理论上弥合差距,那就抓住Simon Wood在2006年出版的书: 广义增材模型:R的介绍


mgcv用法的一个实际例子?

我得到了纵向系列数据的Cubic样条方法的答案,这可能有助于您熟悉mgcv 但作为介绍性示例,它仅显示如何使用单变量样条曲线。 幸运的是,这也是关键。 张量乘积样条由单变量样条构成。

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

尺度不变的张量积样条是否等同于径向平滑或者是各向同性的薄点样条?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM