로지스틱 회귀 분석을위한 컴퓨팅 예측 간격


20

로지스틱 회귀 추정치에 대한 예측 간격 을 생성하는 방법을 이해하고 싶습니다 .

Collett 's Modeling Binary Data , 2nd Ed p.98-99 의 절차를 따르는 것이 좋습니다 . 이 절차를 구현하고이를 R과 비교 한 후에 predict.glm실제로이 책은 예측 구간이 아닌 신뢰 구간 을 계산하는 절차를 보여주고 있다고 생각 합니다.

와 비교 한 Collett의 절차 구현 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은 무엇입니까?
Rafael

답변:


6

0<=와이<=1


6
로그 홀드 공간에있는 예측의 95 % 예측 간격을 찾고 있습니다. 나중에 나는 그것을 확률 공간으로 변형시킨다. 100 % 예측 간격은 어떤 절차에서도 흥미로울 수 없습니다. 예를 들어 선형 회귀에 대한 100 % 예측 구간에는 -Inf to Inf ...가 포함됩니다. 내 코드에서 알 수 있듯이 예측 구간은 로그 확률 공간에서 계산 된 다음 나중에 확률 공간으로 변환됩니다. . 그래서 나는 내 질문이 무의미하다고 생각하지 않습니다.
carbocation

2
로그 홀수는 확률로 변환 할 수 있으며 확률에 대한 신뢰 구간 (또는 로그 홀수)을 계산할 수 있습니다. 그러나 예측 구간은 0 또는 1 인 반응 변수에 있습니다. 결과가 0 = 사망 및 1 = 사용으로 생존 인 경우 주어진 공변량 세트에 대해 생존 확률을 예측하고 신뢰 구간을 계산할 수 있습니다 그 확률. 그러나 결과는 0/1이고, 62 % 생존 한 환자는 0 또는 1이어야합니다. 따라서 가능한 예측 구간은 0-0, 0-1 및 1-1입니다. 대부분의 사람들이 신뢰 구간을 고수하는 이유).
Greg Snow

8
반응이 이항성 인 상황 (동일한 조건에서 0-1의 집합 일 수 있음) 인 경우 예측 간격이 의미가있을 수 있습니다.
Glen_b-복지국 모니카

7
로지스틱 회귀는 확률의 회귀입니다. 회귀 변수의 함수로 일부 사건의 확률을 모델링하려고합니다. 이 설정의 예측 간격은 확률 척도 또는 로그 홀수 척도의 간격으로 간주되므로 완벽한 의미를 갖습니다.
kjetil b halvorsen

2
@Cesar, 예측 간격 공식은 Y가 선에 대해 정규 분포를 가정하고 로지스틱 회귀 분석에 정규 분포가 없으며 Bernoulli 또는 Binomial이라고 가정하여 파생됩니다. 해당 페이지에 수식을 적용하면 신뢰 구간 (이미 수행 할 수 있음) 또는 예측 구간의 정의를 충족하지 않는 인위적으로 넓어진 신뢰 구간 (원래 결과 척도에서 실제 결과 예측)으로 이어집니다. Glen_b가 언급했듯이 결과가 실제로 이항이면 예측 구간이 의미가있을 수 있습니다.
Greg Snow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.