GAM中的权重选项

时间:2016-10-18 07:10:52

标签: r regression mgcv

我的数据集有许多冗余观察结果(但应对每个观察结果进行计算)。所以我考虑在GAM中使用'权重'选项,因为它可以显着缩短计算时间。

gam函数(在mgcv包中)解释它们是“等效的”(来自?gam weights} {/ p>}

  

“请注意,例如,2的重量相当于两次完全相同的观察。”

但这似乎不对。

yy = c(5,2,8,9)
xx = 1:4
wgts = c(3,2,4,1)
yy2 = rep(yy, wgts)
xx2 = rep(xx, wgts)
mod1 = gam(yy2 ~ xx2)
mod2 = gam(yy ~ xx, weights = wgts)
mod3 = gam(yy ~ xx, weights = wgts / mean(wgts))

predict(mod1,data.frame(xx2=1:4))
predict(mod2,data.frame(xx=1:4))
predict(mod3,data.frame(xx=1:4))

所有三种模型的估计值相同。 模型2和3中的标准误差相同,但模型1中的标准误差不同。 GCV在所有三种模型中都有所不同。

我理解GCV可能会有所不同。但是,如果标准误差不同,我们怎么能说模型是相同的呢?这是一个错误,还是有任何好的解释?

1 个答案:

答案 0 :(得分:2)

您看到的问题与GAM无关。您已使用gam来拟合参数模型,在这种情况下,gam的行为几乎与lm相同。要回答您的问题,关注线性回归案例就足够了。 线性模型会发生什么事情也会发生在GLM和GAM上。以下是我们如何使用lm重现问题:

yy <- c(5,2,8,9)
xx <- 1:4
wgts <- c(3,2,4,1)
yy2 <- rep(yy,wgts)
xx2 <- rep(xx,wgts)
fit1 <- lm(yy2 ~ xx2)
fit2 <- lm(yy ~ xx, weights = wgts)
fit3 <- lm(yy ~ xx, weights = wgts/mean(wgts))
summary1 <- summary(fit1)
summary2 <- summary(fit2)
summary3 <- summary(fit3)
pred1 <- predict(fit1, list(xx2 = xx), interval = "confidence", se.fit = TRUE)
pred2 <- predict(fit2, list(xx = xx), interval = "confidence", se.fit = TRUE)
pred3 <- predict(fit3, list(xx = xx), interval = "confidence", se.fit = TRUE)

所有模型都具有相同的回归系数,但其他结果可能不同。你问:

  1. 对于加权回归fit2fit3,除了残差标准误差之外,为什么几乎所有内容都相同?
  2. 为什么加权回归(fit2fit3)不等同于带关系的普通回归?
  3. 您的第一个问题是权重最小二乘与权重的缩放不变性。以下是我的简要总结:

    enter image description here

    如果我们将 W 重新缩放任意正值,则只有残差标准误差和未缩放协方差才会改变。这种变化并不意味着一种不同的,非等同的模式。事实上,与预测相关的一切都不会受到影响。在加权回归中,不要只看sigma2;这只是一个边际变化。真正令人感兴趣的是乘以权重后的总差异。 如果您将权重除以2,您会发现sigma2两倍,但在将它们相乘时仍会得到相同的结果。

    summary2$coef
    summary3$coef
    
    #            Estimate Std. Error   t value  Pr(>|t|)
    #(Intercept) 2.128713   3.128697 0.6803832 0.5664609
    #xx          1.683168   1.246503 1.3503125 0.3094222
    
    pred2
    pred3
    
    #$fit
    #       fit        lwr      upr
    #1 3.811881 -5.0008685 12.62463
    #2 5.495050 -0.1299942 11.12009
    #3 7.178218  0.6095820 13.74685
    #4 8.861386 -1.7302209 19.45299
    #
    #$se.fit
    #       1        2        3        4 
    #2.048213 1.307343 1.526648 2.461646 
    #
    #$df
    #[1] 2
    #
    #$residual.scale  ## for `pred2`
    #[1] 3.961448
    #
    #$residual.scale  ## for `pred3`
    #[1] 2.50544
    

    您的第二个问题是权重的含义。权重用于模拟异方差响应以克服普通最小二乘回归中的杠杆效应。权重与倒数方差成正比:您为具有较小预期误差的数据赋予较大权重。 权重可以是非整数,因此在重复数据方面没有天生的解释。因此,mgcv包中写的内容并不严格。

    fit1fit2之间的真正区别?是自由度。检查上表(n - p)n是您拥有的数据的数量,而p是非NA系数的数量,因此n - p是剩余的自由度。对于这两个模型,我们有p = 2(截距和斜率),但对于fit1我们有n = 10,而fit2我们有n = 4。这对推理具有显着影响,因为现在系数和预测的标准误差(因此置信区间)将不同。这两个模型远非等效。

    summary1$coef
    #            Estimate Std. Error  t value   Pr(>|t|)
    #(Intercept) 2.128713  1.5643486 1.360766 0.21068210
    #xx2         1.683168  0.6232514 2.700625 0.02704784
    
    summary2$coef
    
    #            Estimate Std. Error   t value  Pr(>|t|)
    #(Intercept) 2.128713   3.128697 0.6803832 0.5664609
    #xx          1.683168   1.246503 1.3503125 0.3094222
    
    pred1
    
    #$fit
    #       fit      lwr       upr
    #1 3.811881 1.450287  6.173475
    #2 5.495050 3.987680  7.002419
    #3 7.178218 5.417990  8.938446
    #4 8.861386 6.023103 11.699669
    #
    #$se.fit
    #        1         2         3         4 
    #1.0241066 0.6536716 0.7633240 1.2308229 
    #
    #$df    # note, this is `10 - 2 = 8`
    #[1] 8
    #
    #$residual.scale
    #[1] 1.980724
    
    pred2
    
    #$fit
    #       fit        lwr      upr
    #1 3.811881 -5.0008685 12.62463
    #2 5.495050 -0.1299942 11.12009
    #3 7.178218  0.6095820 13.74685
    #4 8.861386 -1.7302209 19.45299
    #
    #$se.fit
    #       1        2        3        4 
    #2.048213 1.307343 1.526648 2.461646 
    #
    #$df    # note, this is `4 - 2 = 2`
    #[1] 2
    #
    #$residual.scale  ## for `pred2`
    #[1] 3.961448