gpt4 book ai didi

r - GAM 中的权重选项

转载 作者:行者123 更新时间:2023-12-02 05:23:39 24 4
gpt4 key购买 nike

我的数据集有许多冗余观测值(但每个观测值都应该被计数)。因此我考虑在 GAM 中使用“权重”选项,因为它可以显着减少计算时间。

gam函数(在 mgcv 包中)解释说它们是“等价的”(来自参数 ?gam 上的 weights ):

"Note that a weight of 2, for example, is equivalent to having made exactly the same observation twice."

但是好像不太对。

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 可能有所不同。但如果标准误不同,我们怎么能说模型是相同的呢?这是一个错误吗?或者对此有什么好的解释吗?

最佳答案

您看到的问题与 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)与普通回归不等价?
<小时/>

您的第一个问题是关于权重最小二乘法与权重的缩放不变性。以下是我的简要总结:

enter image description here

如果我们将 W 重新调整为任意正值,则只有残差标准误差和未调整的协方差会发生变化。这种变化并不意味着不同的、不等效的模型。事实上,与预测相关的一切都不受影响。在加权回归中,不要只看sigma2;还要看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包中编写的内容并不严格正确。 p>

fit1fit2 之间的真正区别?是自由度。检查上表中的(n - p)n 是您拥有的数据数量,而 p 是非 NA 系数的数量,因此 n - p code> 是剩余自由度。对于这两个模型,我们有 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

关于r - GAM 中的权重选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com