Опция весов в GAM
В моем наборе данных есть много избыточных наблюдений (но каждое наблюдение должно учитываться). Поэтому я считаю, что в GAM нужно использовать опцию "веса", потому что она значительно сокращает время вычислений.
gam
функция (в mgcv
пакет) объясняет, что они "эквивалентны" (из ?gam
на аргументы weights
):
"Обратите внимание, что вес 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 ответ
Проблемы, которые вы видели, не о 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
) не эквивалентно обычной регрессии со связями?
Ваш первый вопрос о масштабной инвариантности весовых наименьших квадратов к весам. Вот краткое резюме, которое я сделал:
Если мы изменим масштаб 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
пакет не является строго правильным.
Реальная разница между fit1
а также fit2
? это степень свободы. Проверьте приведенную выше таблицу на (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