Lojistik regresyon için tahmin aralıklarını hesaplama


20

Lojistik regresyon tahminleri için tahmin aralıklarının nasıl oluşturulacağını anlamak istiyorum .

Collett'in Modelleme İkili Verileri , 2. Baskı s.98-99'daki prosedürleri izlemem önerildi. Bu prosedürü uyguladıktan ve R'lerle karşılaştırdıktan sonra predict.glm, aslında bu kitabın tahmin aralıklarını değil, güven aralıklarını hesaplama prosedürünü gösterdiğini düşünüyorum .

Prosedürün Collett ile karşılaştırılması predict.glm, aşağıda gösterilmiştir.

Bilmek istiyorum: Buradan bir güven aralığı yerine bir tahmin aralığı üretmeye nasıl gidebilirim?

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

Temel bir soru, neden sqrt (sum (model.vcov * square.student)) standart hata olarak kabul edilir? Standart sapma değil midir ve sqrt (n) olarak bölünmesi gerekir mi? Eğer öyleyse, hangi n kullanılmalıdır, n tahmin etmek için kullanılan yeni veri çerçevesinin modeline veya n?
Rafael

Yanıtlar:


6

Tahmin aralıkları, gerçek yanıt veri değerlerinin belirli bir olasılıkla nerede düşeceği tahmin edilir. Bir lojistik modelin yanıtının olası değerleri 0 ve 1 ile sınırlı olduğundan,% 100 tahmin aralığı . Başka hiçbir aralık lojistik regresyon ile tahmin için gerçekten anlamlı değildir. Her zaman aynı aralık olduğundan, genellikle üretmek veya tartışmak için yeterince ilginç değildir.0<=y<=1


6
Ben log-odds uzayda bir tahmin% 95 tahmin aralığı arıyorum. Daha sonra bunu olasılık alanına dönüştürdüm. % 100 tahmin aralığı herhangi bir prosedür için asla ilginç olmaz, değil mi? Örneğin, doğrusal regresyon için% 100 tahmin aralığı, -Inf'den Inf'ye ... Her halükarda, kodumda görebileceğiniz gibi, tahmin aralığı, günlük olasılık alanında hesaplanır ve daha sonra olasılık uzayına dönüştürülür. . Bu yüzden sorumun anlamsız olduğunu sanmıyorum.
karbokasyon

2
Log olasılıkları bir olasılığa dönüştürülebilir ve olasılık (veya log olasılıkları) üzerinde bir güven aralığı hesaplayabilirsiniz. Ancak 0 veya 1 olan yanıt değişkeni üzerinde bir tahmin aralığı vardır. Sonuçunuz 0 = ölü ve 1 = canlı ile hayatta kalmaksa, belirli bir ortak değişkenler grubu için hayatta kalma olasılığını tahmin edebilir ve bu olasılık. Ancak sonuç 0 / 1'dir,% 62 canlı olan bir hastaya sahip olamazsınız, 0 veya 1 olmalıdır, bu yüzden olası tahmin aralıkları 0-0, 0-1 ve 1-1'dir (ki bu neden çoğu kişi güven aralıklarına bağlı kalır).
Greg Snow

8
Yanıtın binom olduğu (aynı koşullar altında 0-1'lik bir toplam olabilir) bir durumunuz varsa, bir tahmin aralığı anlamlı olabilir.
Glen_b

7
Lojistik regresyon, bir olayın olasılığını regresör değişkenlerinin bir fonksiyonu olarak modellemeye çalışan bir olasılığın gerilemesidir. Bu ayardaki tahmin aralıkları, olasılık ölçeğinde veya log-odds ölçeğinde aralık olarak alınır, bu nedenle mükemmel sesler oluşturur.
kjetil b halvorsen

2
@ Sezar, tahmin aralığı formülü Y'nin normalde çizgi etrafında dağıtıldığı varsayılarak elde edilir, ancak lojistik regresyonda normal bir dağılımımız yoktur, bir Bernoulli veya Binom var. Bu sayfadaki formüllerin uygulanması, bir güven aralığına (bunu zaten yapabilir) veya tahmin aralığı tanımına uymayan (orijinal sonuç ölçeğinde gerçek sonuçları tahmin etme) yapay olarak genişletilmiş bir güven aralığına yol açar. Glen_b'in de belirttiği gibi, sonuç gerçekten binomiyse bir tahmin aralığı anlamlı olabilir.
Greg Snow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.