Intervalos de previsão computacionais para regressão logística

20

Gostaria de entender como gerar intervalos de previsão para estimativas de regressão logística.

Fui aconselhado a seguir os procedimentos em Modeling Binary Data de Collett , 2ª Ed p.98-99. Após implementar esse procedimento e compará-lo com os R predict.glm, acho que este livro mostra o procedimento para calcular intervalos de confiança , não intervalos de previsão.

A implementação do procedimento de Collett, com uma comparação com predict.glm, é mostrada abaixo.

Gostaria de saber: como faço para produzir um intervalo de previsão em vez de um intervalo de confiança?

#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')])
carbocação
fonte
Uma pergunta básica: por que o sqrt (sum (model.vcov * square.student)) é assumido como o erro padrão? Não é o desvio padrão e precisa ser dividido por sqrt (n)? Em caso afirmativo, qual n deve ser usado, n usado para se ajustar ao modelo ou n do novo quadro de dados usado para prever?
Rafael

Respostas:

6

Os intervalos de previsão prevêem onde os valores reais dos dados de resposta estão previstos com uma probabilidade determinada. Como os possíveis valores da resposta de um modelo logístico são restritos a 0 e 1, o intervalo de previsão de 100% é, portanto, . Nenhum outro intervalo realmente faz sentido para a previsão com regressão logística. Como sempre é o mesmo intervalo, geralmente não é interessante o suficiente para gerar ou discutir.0 0<=y<=1

Greg Snow
fonte
6
Estou procurando um intervalo de previsão de 95% de uma previsão que está no espaço de chances de log. Mais tarde eu transformo isso em espaço de probabilidade. Um intervalo de previsão de 100% nunca seria interessante para qualquer procedimento, certo? Por exemplo, um intervalo de predição de 100% para regressão linear incluiria -Inf para Inf ... De qualquer forma, como você pode ver no meu código, o intervalo de predição é calculado no espaço de chances do log, que é transformado em espaço de probabilidade posteriormente . Portanto, não acho que minha pergunta seja inútil.
carbocation
2
As probabilidades de log podem ser convertidas em uma probabilidade e você pode calcular um intervalo de confiança na probabilidade (ou nas probabilidades de log). Mas um intervalo de previsão está na variável de resposta que é 0 ou 1. Se seu resultado for sobrevivência com 0 = morto e 1 = vivo, você poderá prever a probabilidade de estar vivo para um determinado conjunto de covariáveis ​​e calcular um intervalo de confiança em essa probabilidade. Mas o resultado é 0/1, você não pode ter um paciente com 62% de vida, ele deve ser 0 ou 1; portanto, os únicos intervalos de previsão possíveis são 0-0, 0-1 e 1-1 (que é por que a maioria das pessoas se apega a intervalos de confiança).
Greg Neve
8
Se você tiver uma situação em que a resposta seja binomial (que pode ser um agregado de 0-1s sob as mesmas condições), um intervalo de previsão poderá fazer sentido.
Glen_b -Reinstate Monica
7
A regressão logística é a regressão de uma probabilidade, tentando modelar a probabilidade de algum evento em função das variáveis ​​do regressor. Os intervalos de previsão nessa configuração são tomados como intervalos na escala de probabilidade, ou na escala de probabilidades logarítmicas, para criar senes perfeitos.
b Kjetil Halvorsen
2
@ Cesar, a fórmula do intervalo de previsão é derivada assumindo que Y é normalmente distribuído sobre a linha, mas na regressão logística não temos uma distribuição normal, temos um Bernoulli ou Binomial. A aplicação das fórmulas nessa página levaria a um intervalo de confiança (já é possível) ou a um intervalo de confiança artificialmente ampliado que não atende à definição de um intervalo de previsão (previsão de resultados reais na escala de resultados original). Como Glen_b mencionado, um intervalo de previsão pode fazer sentido se o resultado for verdadeiramente binomial.
Greg Snow,