【问题标题】:How to interpret lm() coefficient estimates when using bs() function for splines使用样条曲线的 bs() 函数时如何解释 lm() 系数估计
【发布时间】:2016-09-18 15:59:32
【问题描述】:

我在“对称 V 形”中使用一组从 (-5,5)(0,0)(5,5) 的点。我正在用lm()bs() 函数拟合模型以拟合“V 形”样条曲线:

lm(formula = y ~ bs(x, degree = 1, knots = c(0)))

当我通过predict() 预测结果并绘制预测线时,我得到了“V 形”。但是当我查看模型估计值coef() 时,我看到了我没有预料到的估计值。

Coefficients:
                                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)                       4.93821    0.16117  30.639 1.40e-09 ***
bs(x, degree = 1, knots = c(0))1 -5.12079    0.24026 -21.313 2.47e-08 ***
bs(x, degree = 1, knots = c(0))2 -0.05545    0.21701  -0.256    0.805 

我希望第一部分有一个-1 系数,第二部分有一个+1 系数。我必须以不同的方式解释估算值吗?

如果我手动填充lm() 函数中的结,我会得到这些系数:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.18258    0.13558  -1.347    0.215    
x           -1.02416    0.04805 -21.313 2.47e-08 ***
z            2.03723    0.08575  23.759 1.05e-08 ***

这更像是。 Z(结点)与 x 的相对变化为 ~ +1

我想了解如何解释bs() 结果。我查过,manual和bs模型预测值一模一样。

【问题讨论】:

  • 对不起,我不是故意的,我想也许我可以将它们都选为有效。
  • 两个答案最终都告诉我同样的事情......但是对于我自己来说,我想了解为什么系数不同的原因,以便我可以理解逻辑。这两个答案都导致了如何计算实际系数值,但对我来说,哲元也给了我对其背后逻辑的广泛解释,因此这是我的首选答案。
  • 对不起@rbm

标签: r regression lm spline bspline


【解决方案1】:

我希望第一部分使用-1 系数,第二部分使用+1 系数。

我认为您的问题实际上是关于什么是 B 样条函数。如果您想了解系数的含义,您需要知道样条曲线的基函数是什么。请参阅以下内容:

library(splines)
x <- seq(-5, 5, length = 100)
b <- bs(x, degree = 1, knots = 0)  ## returns a basis matrix
str(b)  ## check structure
b1 <- b[, 1]  ## basis 1
b2 <- b[, 2]  ## basis 2
par(mfrow = c(1, 2))
plot(x, b1, type = "l", main = "basis 1: b1")
plot(x, b2, type = "l", main = "basis 2: b2")

注意:

  1. 1 次 B 样条是 帐篷函数,如您在 b1 中所见;
  2. 1 次 B 样条被缩放,因此它们的函数值在(0, 1) 之间;
  3. 1 次 B 样条的它弯曲的地方
  4. 1 次 B 样条 紧凑,并且仅在(不超过)三个相邻节点上非零。

您可以从Definition of B-spline 获得 B 样条的(递归)表达式。 0次B样条是最基类,而

  • 1 次 B 样条是 0 次 B 样条的线性组合
  • 2 次 B 样条是 1 次 B 样条的线性组合
  • 3 次 B 样条是 2 次 B 样条的线性组合

(对不起,我跑题了……)

您使用 B 样条的线性回归:

y ~ bs(x, degree = 1, knots = 0)

只是在做:

y ~ b1 + b2

现在,你应该可以理解你得到的系数是什么意思了,这意味着样条函数是:

-5.12079 * b1 - 0.05545 * b2

在汇总表中:

Coefficients:
                                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)                       4.93821    0.16117  30.639 1.40e-09 ***
bs(x, degree = 1, knots = c(0))1 -5.12079    0.24026 -21.313 2.47e-08 ***
bs(x, degree = 1, knots = c(0))2 -0.05545    0.21701  -0.256    0.805 

您可能想知道为什么b2 的系数不显着。那么,比较一下您的yb1:您的y对称V 形,而b1反向对称V 形。如果您首先将-1 乘以b1,然后通过乘以5 重新缩放(这解释了b1 的系数-5),您会得到什么?很好的比赛,对吧?所以不需要b2

但是,如果您的y 是不对称的,从(-5,5)(0,0),然后到(5,10),那么您会注意到b1b2 的系数都很重要。我认为另一个答案已经给了你这样的例子。


此处演示了将拟合的 B 样条重新参数化为分段多项式:Reparametrize fitted regression spline as piece-wise polynomials and export polynomial coefficients

【讨论】:

    【解决方案2】:

    单节点一阶样条曲线的简单示例和解释估计系数以计算拟合线的斜率

    library(splines)
    set.seed(313)
    x<-seq(-5,+5,len=1000)
    y<-c(seq(5,0,len=500)+rnorm(500,0,0.25),
         seq(0,10,len=500)+rnorm(500,0,0.25))
    plot(x,y, xlim = c(-6,+6), ylim = c(0,+8))
    fit <- lm(formula = y ~ bs(x, degree = 1, knots = c(0)))
    x.predict <- seq(-2.5,+2.5,len = 100)
    lines(x.predict, predict(fit, data.frame(x = x.predict)), col =2, lwd = 2)
    

    产生情节 由于我们用degree=1(即直线)和x=0 处的结拟合样条线,因此x&lt;=0x&gt;0 有两条线。

    系数是

    > round(summary(fit)$coefficients,3)
                                     Estimate Std. Error  t value Pr(>|t|)
    (Intercept)                         5.014      0.021  241.961        0
    bs(x, degree = 1, knots = c(0))1   -5.041      0.030 -166.156        0
    bs(x, degree = 1, knots = c(0))2    4.964      0.027  182.915        0
    

    使用结(我们在x=0 指定)和边界结(解释数据的最小值/最大值)可以将其转换为每条直线的斜率: p>

    # two boundary knots and one specified
    knot.boundary.left <- min(x)
    knot <- 0
    knot.boundary.right <- max(x)
    
    slope.1 <- summary(fit)$coefficients[2,1] /(knot - knot.boundary.left)
    slope.2 <- (summary(fit)$coefficients[3,1] - summary(fit)$coefficients[2,1]) / (knot.boundary.right - knot)
    slope.1
    slope.2
    > slope.1
    [1] -1.008238
    > slope.2
    [1] 2.000988
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2021-05-27
      • 1970-01-01
      • 2023-03-22
      • 2022-11-09
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多