Intervalli di previsione di calcolo per la regressione logistica


20

Vorrei capire come generare intervalli di previsione per le stime di regressione logistica.

Mi è stato consigliato di seguire le procedure in Collett's Modeling Binary Data , 2nd Ed p. 98-99. Dopo aver implementato questa procedura e confrontandola con le R predict.glm, penso davvero che questo libro mostri la procedura per calcolare gli intervalli di confidenza , non gli intervalli di previsione.

Di predict.glmseguito è illustrata l' implementazione della procedura da Collett, con un confronto a .

Vorrei sapere: come posso passare da qui a produrre un intervallo di previsione anziché un intervallo di confidenza?

#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')])

Una domanda di base, perché sqrt (sum (model.vcov * square.student)) è assunto come errore standard? Non è la deviazione standard e deve essere divisa per sqrt (n)? In tal caso, quale n dovrebbe essere utilizzato, n utilizzato per adattarsi al modello o n del nuovo frame di dati utilizzato per prevedere?
Rafael,

Risposte:


6

0<=y<=1


6
Sto cercando un intervallo di previsione del 95% di una previsione che si trova nello spazio delle probabilità del registro. Successivamente lo trasformo in spazio probabilistico. Un intervallo di previsione del 100% non sarebbe mai interessante per nessuna procedura, giusto? Ad esempio, un intervallo di previsione del 100% per la regressione lineare includerebbe -Inf a Inf ... Ad ogni modo, come puoi vedere nel mio codice, l'intervallo di previsione viene calcolato nello spazio delle probabilità del log, che viene successivamente trasformato in spazio di probabilità in seguito . Quindi non penso che la mia domanda sia inutile.
carbocation

2
Le probabilità del registro possono essere convertite in probabilità e puoi calcolare un intervallo di confidenza sulla probabilità (o sulle probabilità del registro). Ma un intervallo di previsione è sulla variabile di risposta che è 0 o 1. Se il risultato è la sopravvivenza con 0 = morto e 1 = vivo, allora puoi prevedere la probabilità di essere vivo per un dato set di covariate e calcolare un intervallo di confidenza su quella probabilità. Ma il risultato è 0/1, non è possibile avere un paziente vivo al 62%, deve essere 0 o 1, quindi gli unici intervalli di predizione possibili sono 0-0, 0-1 e 1-1 (che è perché la maggior parte delle persone si attiene agli intervalli di confidenza).
Greg Snow,

8
Se hai una situazione in cui la risposta è binomiale (che potrebbe essere un aggregato di 0-1s nelle stesse condizioni), allora un intervallo di predizione potrebbe avere senso.
Glen_b

7
La regressione logistica è la regressione di una probabilità, cercando di modellare la probabilità di alcuni eventi in funzione delle variabili del regressore. Gli intervalli di previsione in questa impostazione sono presi come intervalli sulla scala di probabilità o sulla scala delle probabilità di registro, quindi rende perfetti.
kjetil b halvorsen,

2
@Cesar, la formula dell'intervallo di previsione è derivata assumendo che Y sia normalmente distribuito sulla linea, ma nella regressione logistica non abbiamo una distribuzione normale, abbiamo un Bernoulli o Binomiale. L'applicazione delle formule in quella pagina porterebbe a un intervallo di confidenza (può già farlo) o ad un intervallo di confidenza ampliato artificialmente che non soddisfa la definizione di un intervallo di previsione (prevedere i risultati effettivi sulla scala dei risultati originale). Come menzionato Glen_b, un intervallo di previsione può avere senso se il risultato è veramente binomiale.
Greg Snow,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.