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