लॉजिस्टिक रिग्रेशन के लिए पूर्वानुमान अंतराल की गणना


20

मैं यह समझना चाहूंगा कि लॉजिस्टिक रिग्रेशन अनुमानों के लिए भविष्यवाणी अंतराल कैसे उत्पन्न करें ।

मुझे कोललेट के मॉडलिंग बाइनरी डेटा , द्वितीय एड p.98-99 में प्रक्रियाओं का पालन करने की सलाह दी गई थी । इस प्रक्रिया को लागू करने और R की तुलना करने के बाद predict.glm, मुझे वास्तव में लगता है कि यह पुस्तक विश्वास अंतराल की गणना करने की प्रक्रिया दिखा रही है , न कि भविष्यवाणी अंतराल।

इसकी तुलना के साथ, कोललेट से प्रक्रिया का कार्यान्वयन 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
मैं एक ९ ५% भविष्यवाणी के अंतराल की तलाश कर रहा हूं जो लॉग-ऑड स्पेस में है। बाद में मैंने उसे संभावना स्थान में बदल दिया। एक 100% भविष्यवाणी अंतराल किसी भी प्रक्रिया के लिए कभी भी दिलचस्प नहीं होगा, है ना? उदाहरण के लिए, रैखिक प्रतिगमन के लिए एक 100% भविष्यवाणी अंतराल में शामिल होगा-इन्फ से ... किसी भी दर पर, जैसा कि आप मेरे कोड में देख सकते हैं, पूर्वानुमान अंतराल की गणना लॉग ऑड्स स्पेस में की जाती है, जिसे बाद में प्रायिकता स्थान में बदल दिया जाता है। । इसलिए मुझे नहीं लगता कि मेरा प्रश्न व्यर्थ है।
कार्बोकेशन

2
लॉग-ऑड को एक संभावना में परिवर्तित किया जा सकता है और आप संभावना (या लॉग-ऑड) पर एक विश्वास अंतराल की गणना कर सकते हैं। लेकिन एक प्रतिक्रिया अंतराल प्रतिक्रिया चर पर होता है जो 0 या 1 है। यदि आपका परिणाम 0 = मृत और 1 = जीवित होने के साथ जीवित है, तो आप किसी दिए गए कोवरिएट्स के जीवित होने की संभावना का अनुमान लगा सकते हैं और एक आत्मविश्वास अंतराल की गणना कर सकते हैं। वह संभावना। लेकिन परिणाम 0/1 है, आपके पास एक रोगी नहीं हो सकता है जो 62% जीवित है उसे 0 या 1 होना है, इसलिए केवल संभावित पूर्वानुमान अंतराल 0-0, 0-1 और 1-1 हैं (जो है) क्यों ज्यादातर लोग विश्वास अंतराल से चिपके रहते हैं)।
ग्रेग स्नो

8
यदि आपके पास ऐसी स्थिति है जहां प्रतिक्रिया द्विपद है (जो समान शर्तों के तहत 0-1 का कुल हो सकता है), तो एक पूर्वानुमान अंतराल समझ में आ सकता है।
ग्लेन_ब -इंटरनेट मोनिका

7
लॉजिस्टिक रिग्रेशन एक संभावना का प्रतिगमन है, जो किसी घटना की संभावना को प्रतिगामी चर के एक समारोह के रूप में मॉडल करने की कोशिश कर रहा है। इस सेटिंग में भविष्यवाणी अंतराल को प्रायिकता स्केल या लॉग-ऑड्स स्केल पर अंतराल के रूप में लिया जाता है, जिससे सही सीन्स बनते हैं।
kjetil b halvorsen

2
@ सीजर, भविष्यवाणी अंतराल सूत्र यह मानकर किया जाता है कि वाई को आम तौर पर लाइन के बारे में वितरित किया जाता है, लेकिन लॉजिस्टिक रिग्रेशन में हमारे पास सामान्य वितरण नहीं है, हमारे पास एक बर्नौली या बिनोमियल है। उस पृष्ठ पर फ़ार्मुलों को लागू करने से या तो एक विश्वास अंतराल (यह पहले से ही ऐसा हो सकता है) या एक कृत्रिम रूप से चौड़ा आत्मविश्वास अंतराल हो सकता है जो एक भविष्यवाणी अंतराल की परिभाषा को पूरा नहीं करता है (मूल परिणाम पैमाने पर वास्तविक परिणामों की भविष्यवाणी)। जैसा Glen_b उल्लेख किया गया है, एक भविष्यवाणी अंतराल समझ में आ सकता है अगर परिणाम वास्तव में द्विपद है।
ग्रेग स्नो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.