optim과 glm의 잔차 표준 오차 차이


16

나는 함께 재현 해 봅니다 optim장착 된 단순 회귀 분석의 결과 glm또는 nlsR 기능을 제공합니다.
모수 추정치는 동일하지만 잔차 분산 추정과 다른 모수의 표준 오차는 특히 표본 크기가 작을 때 동일하지 않습니다. 이것이 최대 가능성과 최소 제곱 접근법 사이에서 잔차 표준 오차가 계산되는 방식에 차이가 있다고 가정합니다 (n으로 나 n-k + 1로 나눔 예에서 아래 참조).
웹에서 읽은 내용에 따르면 최적화가 단순한 작업이 아니라는 것을 알지만 glm사용하는 동안 표준 오류 추정치가 간단한 방식으로 재현 될 수 있는지 궁금합니다 optim.

작은 데이터 세트 시뮬레이션

set.seed(1)
n = 4 # very small sample size !
b0 <- 5
b1 <- 2
sigma <- 5
x <- runif(n, 1, 100)
y =  b0 + b1*x + rnorm(n, 0, sigma) 

최적화로 견적

negLL <- function(beta, y, x) {
    b0 <- beta[1]
    b1 <- beta[2]
    sigma <- beta[3]
    yhat <- b0 + b1*x
    likelihood <- dnorm(y, yhat, sigma)
    return(-sum(log(likelihood)))
}

res <- optim(starting.values, negLL, y = y, x = x, hessian=TRUE)
estimates <- res$par     # Parameters estimates
se <- sqrt(diag(solve(res$hessian))) # Standard errors of the estimates
cbind(estimates,se)


    > cbind(estimates,se)
      estimates         se
b0     9.016513 5.70999880
b1     1.931119 0.09731153
sigma  4.717216 1.66753138

glm 및 nls와 비교

> m <- glm(y ~ x)
> summary(m)$coefficients
            Estimate Std. Error   t value    Pr(>|t|)
(Intercept) 9.016113  8.0759837  1.116411 0.380380963
x           1.931130  0.1376334 14.030973 0.005041162
> sqrt(summary(m)$dispersion) # residuals standard error
[1] 6.671833
> 
> summary(nls( y ~ b0 + b1*x, start=list(b0 = 5, b1= 2)))

Formula: y ~ b0 + b1 * x

Parameters:
   Estimate Std. Error t value Pr(>|t|)   
b0   9.0161     8.0760   1.116  0.38038   
b1   1.9311     0.1376  14.031  0.00504 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 6.672 on 2 degrees of freedom

다음과 같이 다른 잔류 표준 오차 추정치를 재현 할 수 있습니다.

> # optim / Maximum Likelihood estimate
> sqrt(sum(resid(m)^2)/n)
[1] 4.717698
> 
> # Least squares estimate (glm and nls estimates)
> k <- 3 # number of parameters
> sqrt(sum(resid(m)^2)/(n-k+1))
[1] 6.671833

답변:


9

문제는 표준 오류가

σ^2(XX)1

σ^2summary.lm

summary.lm
#R function (object, correlation = FALSE, symbolic.cor = FALSE, 
#R     ...) 
#R {
#R    z <- object
#R    p <- z$rank
#R    rdf <- z$df.residual
#R    ...
#R    Qr <- qr.lm(object) 
#R    ... 
#R    r <- z$residuals
#R    f <- z$fitted.values
#R    w <- z$weights
#R    if (is.null(w)) {
#R         mss <- if (attr(z$terms, "intercept")) 
#R             sum((f - mean(f))^2)
#R         else sum(f^2)
#R         rss <- sum(r^2)
#R    }
#R    ...
#R    resvar <- rss/rdf
#R    ...
#R    R <- chol2inv(Qr$qr[p1, p1, drop = FALSE])
#R    se <- sqrt(diag(R) * resvar)
#R    ...

(β0,β1)σ^2(β0,β1,σ)σn/(n3+1)

set.seed(1)
n = 4 # very small sample size !
b0 <- 5
b1 <- 2
sigma <- 5
x <- runif(n, 1, 100)
y =  b0 + b1*x + rnorm(n, 0, sigma) 

negLL <- function(beta, y, x) {
  b0 <- beta[1]
  b1 <- beta[2]
  sigma <- beta[3]
  yhat <- b0 + b1*x
  return(-sum(dnorm(y, yhat, sigma, log = TRUE)))
}

res <- optim(c(0, 0, 1), negLL, y = y, x = x, hessian=TRUE)
estimates <- res$par     # Parameters estimates
(se <- sqrt(diag(solve(res$hessian))))
#R [1] 5.690 0.097 1.653
k <- 3
se * sqrt(n / (n-k+1))
#R [1] 8.047 0.137 2.338

usεr11852 요청으로 더 자세히 설명하기 위해 로그 우도는

l(β,σ)=n2log(2π)nlogσ12σ2(yXβ)(yXβ)

Xn

ββl(β,σ)=1σ2XX

이제 MLE 또는 추정되지 않은 추정기를 꽂을 수 있습니다.σ

m <- lm(y ~ x)
X <- cbind(1, x)
sqrt(sum(resid(m)^2)/n       * diag(solve(crossprod(X))))
#R                     x 
#R 5.71058285 0.09732149
k <- 3
sqrt(sum(resid(m)^2)/(n-k+1) * diag(solve(crossprod(X))))
#R                   x 
#R 8.0759837 0.1376334 

로 우리는 QR 분해와 동일한 작업을 수행 할 수 lm않습니다

obj <- qr(X)
sqrt(sum(resid(m)^2)/(n-k+1) * diag(chol2inv(obj$qr)))
#R [1] 8.0759837 0.1376334

그래서 대답

웹에서 읽은 내용에 따르면 최적화가 단순한 작업이 아니라는 것을 알지만 glm사용하는 동안 표준 오류 추정치가 간단한 방식으로 재현 될 수 있는지 궁금합니다 optim.

그런 다음 사용하는 가우스 예제에서 표준 오류를 확장해야합니다.


1
+1. 나는 당신이 완전히 옳았다는 것을 100 %는 아니지만 이것이 올바른 방향입니다. 왜 그 요소를 기대하는지 설명 할 수 있습니까?
usεr11852는 22:57에 Reinstate Monic

지금은 더 명확합니까?
벤자민 크리스토퍼슨

1
예. 좋은 대답입니다! (나는 이미 그것을 upvoted)
usεr11852는

1

optimn케이+1케이+1sqrt(4.717216^2*4/2) = 6.671151


1
답장을 보내 주셔서 감사합니다. 내 질문이 충분히 명확하지 않다는 것을 알고 있습니다 (이제 편집했습니다). 잔차 표준 오류 계산뿐만 아니라 매개 변수 표준 오류도 재현하고 싶지 않습니다.
Gilles

@Gilles 표준 오류를 재현하는 방법을 모르겠습니다. 차이점은 다음과 같습니다. 1. glm은 Fisher 정보 매트릭스를 사용하고 헤 시안을 최적화하고, 2. glm은이를 2 매개 변수 문제 (b0 및 b1 찾기)로 간주하고 3 매개 변수 문제 (b0, b1 및 sigma2)를 고려합니다. . 이러한 차이점을 극복 할 수 있는지 잘 모르겠습니다.
papgeo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.