Вычисление интервалов прогнозирования для логистической регрессии

20

Я хотел бы понять, как генерировать интервалы прогнозирования для оценок логистической регрессии.

Мне посоветовали следовать процедурам в Моделирующих двоичных данных Коллетта , 2-е издание, с.98-99. После реализации этой процедуры и сравнения ее с R predict.glm, я на самом деле думаю, что в этой книге показана процедура вычисления доверительных интервалов , а не интервалов прогнозирования.

Реализация процедуры от Collett, со сравнением predict.glm, показана ниже.

Я хотел бы знать: как мне перейти к созданию интервала прогнозирования вместо доверительного интервала?

#Derived from Collett 'Modelling Binary Data' 2nd Edition p.98-99
#Need reproducible "random" numbers.
seed <- 67

num.students <- 1000
which.student <- 1

#Generate data frame with made-up data from students:
set.seed(seed) #reset seed
v1 <- rbinom(num.students,1,0.7)
v2 <- rnorm(length(v1),0.7,0.3)
v3 <- rpois(length(v1),1)

#Create df representing students
students <- data.frame(
    intercept = rep(1,length(v1)),
    outcome = v1,
    score1 = v2,
    score2 = v3
)
print(head(students))

predict.and.append <- function(input){
    #Create a vanilla logistic model as a function of score1 and score2
    data.model <- glm(outcome ~ score1 + score2, data=input, family=binomial)

    #Calculate predictions and SE.fit with the R package's internal method
    # These are in logits.
    predictions <- as.data.frame(predict(data.model, se.fit=TRUE, type='link'))

    predictions$actual <- input$outcome
    predictions$lower <- plogis(predictions$fit - 1.96 * predictions$se.fit)
    predictions$prediction <- plogis(predictions$fit)
    predictions$upper <- plogis(predictions$fit + 1.96 * predictions$se.fit)


    return (list(data.model, predictions))
}

output <- predict.and.append(students)

data.model <- output[[1]]

#summary(data.model)

#Export vcov matrix 
model.vcov <- vcov(data.model)

# Now our goal is to reproduce 'predictions' and the se.fit manually using the vcov matrix
this.student.predictors <- as.matrix(students[which.student,c(1,3,4)])

#Prediction:
this.student.prediction <- sum(this.student.predictors * coef(data.model))
square.student <- t(this.student.predictors) %*% this.student.predictors
se.student <- sqrt(sum(model.vcov * square.student))

manual.prediction <- data.frame(lower = plogis(this.student.prediction - 1.96*se.student), 
    prediction = plogis(this.student.prediction), 
    upper = plogis(this.student.prediction + 1.96*se.student))

print("Data preview:")
print(head(students))
print(paste("Point estimate of the outcome probability for student", which.student,"(2.5%, point prediction, 97.5%) by Collett's procedure:"))
manual.prediction
print(paste("Point estimate of the outcome probability for student", which.student,"(2.5%, point prediction, 97.5%) by R's predict.glm:"))    
print(output[[2]][which.student,c('lower','prediction','upper')])
карбкатион
источник
Основной вопрос, почему sqrt (sum (model.vcov * square.student)) считается стандартной ошибкой? Разве это не стандартное отклонение и должно быть разделено на sqrt (n)? Если да, какой n следует использовать, n использовать для соответствия модели или n нового фрейма данных, используемого для прогнозирования?
Рафаэль

Ответы:

6

0<=Y<=1

Грег Сноу
источник
6
Я ищу 95% интервал прогноза, который находится в пространстве логарифмов. Позже я преобразую это в пространство вероятностей. Интервал 100% прогнозирования никогда не будет интересен для любой процедуры, верно? Например, 100% -ный интервал прогнозирования для линейной регрессии будет включать в себя -Inf to Inf ... Во всяком случае, как вы можете видеть в моем коде, интервал прогнозирования рассчитывается в пространстве лог-шансов, которое затем преобразуется в пространство вероятностей позже , Поэтому я не думаю, что мой вопрос бессмысленен.
карбокатация
2
Лог-шансы могут быть преобразованы в вероятность, и вы можете вычислить доверительный интервал по вероятности (или лог-шансы). Но интервал прогнозирования находится на переменной отклика, которая равна 0 или 1. Если ваш результат - выживание с 0 = мертвым и 1 = живым, то вы можете предсказать вероятность быть живым для данного набора ковариат и вычислить доверительный интервал на эта вероятность. Но результат 0/1, вы не можете иметь пациента, который на 62% жив, он должен быть 0 или 1, поэтому единственно возможные интервалы прогнозирования - это 0-0, 0-1 и 1-1 (что почему большинство людей придерживаются доверительных интервалов).
Грег Сноу
8
Если у вас есть ситуация, когда ответ является биномиальным (который может быть совокупностью 0-1 с при тех же условиях), тогда интервал прогнозирования может иметь смысл.
Glen_b
7
Логистическая регрессия - это регрессия вероятности, попытка смоделировать вероятность некоторого события как функцию переменных регрессора. Интервалы прогнозирования в этом параметре берутся как интервалы на шкале вероятностей или шкале логарифмов, что делает идеальные значения.
kjetil b halvorsen
2
@Cesar, формула интервала предсказания получена, если предположить, что Y обычно распределяется по линии, но в логистической регрессии у нас нет нормального распределения, у нас есть Бернулли или Бином. Применение формул на этой странице может привести либо к доверительному интервалу (который уже может это сделать), либо к искусственно расширенному доверительному интервалу, который не соответствует определению интервала прогнозирования (прогнозирование фактических результатов по исходной шкале результатов). Как упоминалось в Glen_b, интервал прогнозирования может иметь смысл, если результат действительно биномиален.
Грег Сноу,