답변:
그래 넌 할수있어.
모델은
경우 제로이고, 이는에서의 글로벌 극한치 갖는다 .
로지스틱 회귀 분석 에서는 이러한 계수를 로 추정 합니다 . 이것은 최대 우도 추정치이므로 매개 변수 함수의 ML 추정치는 추정치와 동일한 함수이므로 극한의 위치는 입니다.
해당 추정치에 대한 신뢰 구간이 중요합니다. 점근 적 최대 우도 이론을 적용하기에 충분히 큰 데이터 집합의 경우 를 다음 형식 으로 다시 표현하여이 구간의 끝점을 찾을 수 있습니다.
로그 가능성이 너무 낮아지기 전에 얼마나 많은 가 변할 수 있는지 찾는 것. "너무 많이"는 무증상으로 1 자유도를 갖는 카이 제곱 분포 의 분위수의 1/2 입니다.
이 방법은 의 범위가 피크의 양 측면을 커버 하고 값 사이에 해당 피크를 묘사 하기에 충분한 수의 과 응답이있는 한 잘 작동 합니다. 그렇지 않으면, 피크의 위치는 매우 불확실하고 점근 적 추정치는 신뢰할 수 없을 것이다.
R
이를 수행하는 코드는 다음과 같습니다. 신뢰 구간의 적용 범위가 의도 한 적용 범위에 가까운 지 확인하기 위해 시뮬레이션에서 사용할 수 있습니다. 실제 피크가 이고 히스토그램의 맨 아래 행을 보면 신뢰 하한의 대부분이 실제 값보다 작고 신뢰 상한이 대부분이 실제 값보다 큰 방법에 유의하십시오. 우리가 바라는대로. 이 예에서 의도 된 적용 범위는 이고 실제 적용 범위 ( 물류 회귀가 수렴하지 않은 사례 중 4 개 제외 )는 이며 방법이 제대로 작동하고 있음을 나타냅니다 (시뮬레이션 된 데이터 종류에 대해) 여기).
n <- 50 # Number of observations in each trial
beta <- c(-1,2,2) # Coefficients
x <- seq(from=-3, to=3, length.out=n)
y0 <- cbind(rep(1,length(x)), x, x^2) %*% beta
# Conduct a simulation.
set.seed(17)
sim <- replicate(500, peak(x, rbinom(length(x), 1, logistic(y0)), alpha=0.05))
# Post-process the results to check the actual coverage.
tp <- -beta[2] / (2 * beta[3])
covers <- sim["lcl",] <= tp & tp <= sim["ucl",]
mean(covers, na.rm=TRUE) # Should be close to 1 - 2*alpha
# Plot the distributions of the results.
par(mfrow=c(2,2))
plot(x, logistic(y0), type="l", lwd=2, col="#4040d0", main="Simulated Data",ylim=c(0,1))
points(x, rbinom(length(x), 1, logistic(y0)), pch=19)
hist(sim["peak.x",], main="Estimates"); abline(v=tp, col="Red")
hist(sim["lcl",], main="Lower Confidence Limits"); abline(v=tp, col="Red")
hist(sim["ucl",], main="Upper Confidence Limits"); abline(v=tp, col="Red")
logistic <- function(x) 1 / (1 + exp(-x))
peak <- function(x, y, alpha=0.05) {
#
# Estimate the peak of a quadratic logistic fit of y to x
# and a 1-alpha confidence interval for that peak.
#
logL <- function(b) {
# Log likelihood.
p <- sapply(cbind(rep(1, length(x)), x, x*x) %*% b, logistic)
sum(log(p[y==1])) + sum(log(1-p[y==0]))
}
f <- function(gamma) {
# Deviance as a function of offset from the peak.
b0 <- c(b[1] - b[2]^2/(4*b[3]) + b[3]*gamma^2, -2*b[3]*gamma, b[3])
-2.0 * logL(b0)
}
# Estimation.
fit <- glm(y ~ x + I(x*x), family=binomial(link = "logit"))
if (!fit$converged) return(rep(NA,3))
b <- coef(fit)
tp <- -b[2] / (2 * b[3])
# Two-sided confidence interval:
# Search for where the deviance is at a threshold determined by alpha.
delta <- qchisq(1-alpha, df=1)
u <- sd(x)
while(fit$deviance - f(tp+u) + delta > 0) u <- 2*u # Find an upper bound
l <- sd(x)
while(fit$deviance - f(tp-l) + delta > 0) l <- 2*l # Find a lower bound
upper <- uniroot(function(gamma) fit$deviance - f(gamma) + delta,
interval=c(tp, tp+u))
lower <- uniroot(function(gamma) fit$deviance - f(gamma) + delta,
interval=c(tp-l, tp))
# Return a vector of the estimate, lower limit, and upper limit.
c(peak=tp, lcl=lower$root, ucl=upper$root)
}