Какие стандартные ошибки возвращаются с помощью predict.glm(, type = response, se.fit = TRUE)?

Я собираюсь подогнать модель к данным, представленным в этом отличном примере того, как вычислить 95% доверительный интервал для ответа, после выполнения логистической регрессии:

foo <- mtcars[,c("mpg","vs")]; names(foo) <- c("x","y")
mod <- glm(y ~ x, data = foo, family = binomial)
preddata <- with(foo, data.frame(x = seq(min(x), max(x), length = 100)))
preds <- predict(mod, newdata = preddata, type = "link", se.fit = TRUE)

critval <- 1.96 ## approx 95% CI
upr <- preds$fit + (critval * preds$se.fit)
lwr <- preds$fit - (critval * preds$se.fit)
fit <- preds$fit

fit2 <- mod$family$linkinv(fit)
upr2 <- mod$family$linkinv(upr)
lwr2 <- mod$family$linkinv(lwr)

Теперь мой вопрос исходит из того факта, что вы можете получить ответ напрямую, просто запросив

predict(..., type = 'response', se.fit = TRUE)

без преобразования

predict(..., type = 'link', se.fit = TRUE)

Однако это приводит к различным стандартным ошибкам. Что это за ошибки и можно ли их напрямую использовать для расчета доверительного интервала для подобранных значений ответа?

Код в predict.glm имеет значение:

switch(type, response = {
    se.fit <- se.fit * abs(family(object)$mu.eta(fit))
    fit <- family(object)$linkinv(fit)
}, link = , terms = )

и сравнение выходов:

preds_2 <- predict(mod, newdata = preddata, type = "response", se.fit = TRUE)


> head(preds_2$fit)
         1          2          3          4          5          6 
0.01265744 0.01399994 0.01548261 0.01711957 0.01892627 0.02091959 

> head(preds_2$se.fit)
         1          2          3          4          5          6 
0.01944681 0.02098841 0.02263473 0.02439022 0.02625902 0.02824491 

Кажется не очень очевидным, как перейти от вышесказанного к:

> head(fit2)
         1          2          3          4          5          6 
0.01265744 0.01399994 0.01548261 0.01711957 0.01892627 0.02091959 
> head(upr2)
        1         2         3         4         5         6 
0.2130169 0.2184891 0.2240952 0.2298393 0.2357256 0.2417589 
> head(lwr2)
           1            2            3            4            5            6 
0.0006067975 0.0007205942 0.0008555502 0.0010155472 0.0012051633 0.0014297930 

person Alex    schedule 14.06.2017    source источник


Ответы (1)


Если вы посмотрите на ?family, вы увидите, что $mu.eta является производной от mu по eta (т. е. производной функции обратной связи). Следовательно, se.fit = TRUE для type = "response" дает приближение первого порядка для истинной стандартной ошибки. Это известно как «дельта-метод».

Конечно, поскольку функция обратной связи обычно нелинейна, доверительный интервал не является симметричным относительно подобранных значений. Таким образом, получить доверительный интервал на шкале ссылок, а затем сопоставить его со шкалой ответов — это правильный путь.

person Zheyuan Li    schedule 14.06.2017
comment
спасибо, я бы хотел, чтобы они взяли строчку из вашего первого абзаца и вставили в документацию в ?predict.glm. - person Alex; 14.06.2017
comment
шкала связи обычно более точна, чем шкала отклика, поскольку она учитывает нелинейность функции связи. Но оба они асимптотически верны. - person Maverick Meerkat; 10.07.2020