您看到的问题与 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)
所有模型具有相同的回归系数,但其他结果可能不同。您问:
- 对于加权回归
fit2
和fit3
,为什么除了残差标准误差之外几乎所有内容都相同?
- 为什么加权回归 (
fit2
或fit3
) 不等同于带关系的普通回归?
您的第一个问题是关于weight 最小二乘对 weights 的缩放不变性。这是我做的一个简短的总结:

如果我们用任意正值重新缩放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
你的第二个问题是关于weights 的含义。权重用于对异方差响应建模,以克服普通最小二乘回归中的杠杆效应。权重与倒数方差成正比:您为具有较小预期误差的数据赋予更大的权重。权重可以是非整数,因此它没有关于重复数据的自然解释。因此,mgcv
包装中写的内容并不严格正确。
fit1
和之间的真正区别fit2
?是自由度。检查上表(n - p)
。n
是您拥有的数据数量,而p
是非NA
系数的数量,n - p
剩余自由度也是。对于这两个模型,我们都有p = 2
(截距和斜率),但是对于fit1
我们有n = 10
while forfit2
我们有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