Обчислювальні інтервали прогнозування для логістичної регресії


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 (сума (model.vcov * square.student)) вважається стандартною помилкою? Хіба це не стандартне відхилення і його потрібно ділити на sqrt (n)? Якщо так, то який n слід використовувати, n використовувати для моделі або n нового кадру даних, який використовується для прогнозування?
Рафаель

Відповіді:


6

0<=у<=1


6
Я шукаю інтервал прогнозування на 95%, який знаходиться в просторі журналу. Пізніше я перетворюю це на простір ймовірностей. Інтервал прогнозу на 100% ніколи не буде цікавим для будь-якої процедури, правда? Наприклад, 100% -ний інтервал прогнозування для лінійної регресії буде включати -Inf до Inf ... У будь-якому випадку, як ви бачите в моєму коді, інтервал прогнозування обчислюється в просторі журналу, який потім перетворюється на простір ймовірностей пізніше . Тому я не думаю, що моє запитання є безглуздим.
карбокація

2
Коефіцієнти журналу можуть бути перетворені на ймовірність, і ви можете обчислити довірчий інтервал щодо ймовірності (або коефіцієнтів журналу). Але інтервал прогнозування є змінною відповіді, яка дорівнює 0 або 1. Якщо ваш результат - виживання з 0 = мертвим і 1 = живим, то ви можете передбачити ймовірність існування для заданого набору коваріатів і обчислити довірчий інтервал на та ймовірність. Але результат 0/1, ви не можете мати пацієнта з 62% живих, він повинен бути 0 або 1, тому єдині можливі інтервали прогнозування 0-0, 0-1 та 1-1 (що є чому більшість людей дотримуються довірчих інтервалів).
Грег Сноу

8
Якщо у вас є ситуація, коли відповідь є двочленною (яка може бути сукупною 0-1s за тих самих умов), то інтервал прогнозування може мати сенс.
Glen_b -Встановіть Моніку

7
Логістична регресія - це регресія ймовірності, намагається моделювати ймовірність якоїсь події як функції змінних регресорів. Інтервали прогнозування в цьому налаштуванні приймаються як інтервали за шкалою ймовірності або шкалою відхилень журналу, що робить ідеальними проміжки часу.
kjetil b halvorsen

2
@ Сезар, формула інтервалу прогнозування виводиться з припущення, що Y зазвичай розподіляється по лінії, але в логістичній регресії ми не маємо нормального розподілу, у нас є Бернуллі або Біноміал. Застосування формул на цій сторінці призвело б до довірчого інтервалу (вже можна це зробити), або до штучно розширеного інтервалу довіри, який не відповідає визначенню інтервалу прогнозування (прогнозування фактичних результатів за початковою шкалою результатів). Як і Glen_b, згаданий, інтервал прогнозування може мати сенс, якщо результат буде справді двочленним.
Грег
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.