R의 glm 함수에 어떤 최적화 알고리즘이 사용됩니까?


17

이러한 코드를 사용하여 R에서 로짓 회귀를 수행 할 수 있습니다.

> library(MASS)
> data(menarche)
> glm.out = glm(cbind(Menarche, Total-Menarche) ~ Age,
+                                              family=binomial(logit), data=menarche)
> coefficients(glm.out)
(Intercept)         Age 
 -21.226395    1.631968

최적화 알고리즘이 수렴 된 것처럼 보입니다. 피셔 스코어링 알고리즘의 단계 수에 대한 정보가 있습니다.

Call:
glm(formula = cbind(Menarche, Total - Menarche) ~ Age, family = binomial(logit), 
    data = menarche)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0363  -0.9953  -0.4900   0.7780   1.3675  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -21.22639    0.77068  -27.54   <2e-16 ***
Age           1.63197    0.05895   27.68   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 3693.884  on 24  degrees of freedom
Residual deviance:   26.703  on 23  degrees of freedom
AIC: 114.76

Number of Fisher Scoring iterations: 4

그것이 어떤 최적화 알고리즘인지 궁금합니다. Newton-Raphson 알고리즘 (2 차 기울기 하강)입니까? Cauchy 알고리즘 (일차 경사 하강)을 사용하도록 일부 매개 변수를 설정할 수 있습니까?


5
Newton-Raphson 알고리즘이 "그라데이션 디센트 레벨 II"라고 언급되어 있습니까?
Cliff AB

4
피셔 스코어 자체는 뉴턴-라프 슨과 관련이 있지만 뉴턴-라프 슨과는 다른 점에서 헤 시안을 모델에서 예상되는 값으로 대체합니다.
Glen_b-복지 주 모니카

@CliffAB 간장. 나는 Newton's method2 차 그라디언트 디센트 방법입니다.
Marcin Kosiński

1
@ hxd1011, 다른 사람의 질문을 변경하기 위해 편집해서는 안됩니다. 의미가 무엇인지 아는 것으로 생각할 때 편집해야 할 것이지만 질문이 분명하지는 않지만 (예를 들어 영어가 모국어가 아닐 수도 있음) 질문 과 다르게 질문해서는 안됩니다 (예 : 더 일반적). 원했다. 대신, 당신이 원하는 것에 새로운 질문을하십시오. 편집 내용을 롤백하고 있습니다.
gung-Monica Monica 복원

1
@ MarcinKosiński Newton의 방법 Newton-Raphson이며, Raphson은 더 일반적인 경우에 대한 Newton의 아이디어를 기반으로합니다.
AdamO

답변:


19

glm를 통해 액세스 한에 대한 문서 ?glm는 많은 유용한 통찰력 을 제공 한다는 점에 관심이 있습니다 . method반복적으로 가중 된 최소 제곱이 기본 방법 인에 대한 기본 함수임을 알게 glm.fit되었습니다 glm. 또한 설명서에는 기본값 대신 사용자 정의 함수가 제공 될 수 있다고 언급되어 있습니다.


3
또한 단지 함수 이름을 입력 할 수 있습니다 glm또는 fit.glm상기 R메시지의 소스 코드를 공부.
Matthew Drury

@MatthewDrury 나는 glm.fitC 코드에 의존하기 때문에 완전히 재현 할 수없는 작업대를 의미한다고 생각 한다 C_Cdqrls.
AdamO

그래, 맞아, 나는 R의 순서를 많이 섞었다. 재현 할 수 없다는 것은 무엇을 의미합니까?
Matthew Drury

16

사용 된 방법은 출력 자체에서 언급됩니다. 피셔 스코어링입니다. 이것은 대부분의 경우 Newton-Raphson과 같습니다. 자연스럽지 않은 매개 변수를 사용하는 상황은 예외입니다. 상대 위험 회귀는 이러한 시나리오의 예입니다. 거기에서 예상되는 정보와 관찰 된 정보가 다릅니다. 일반적으로 Newton Raphson과 Fisher Scoring은 거의 동일한 결과를 제공합니다.

(1)피셔 득점. 또한 복잡한 가능성을 추정하기위한보다 일반적인 프레임 워크 인 EM 알고리즘에 대한 직관적 인 정보를 제공합니다.

R의 기본 일반 옵티마이 저는 기본적으로 선형화 (차원의 저주에주의)를 기반으로 두 번째 모멘트를 추정하기 위해 수치 방법을 사용합니다. 따라서 효율성과 편향을 비교하는 데 관심이 있다면 다음과 같은 방법으로 순진한 물류 최대 가능성 루틴을 구현할 수 있습니다.

set.seed(1234)
x <- rnorm(1000)
y <- rbinom(1000, 1, exp(-2.3 + 0.1*x)/(1+exp(-2.3 + 0.1*x)))
f <- function(b) {
  p <- exp(b[1] + b[2]*x)/(1+exp(b[1] + b[2]*x))
  -sum(dbinom(y, 1, p, log=TRUE))
}
ans <- nlm(f, p=0:1, hessian=TRUE)

나에게 준다

> ans$estimate
[1] -2.2261225  0.1651472
> coef(glm(y~x, family=binomial))
(Intercept)           x 
 -2.2261215   0.1651474 

그래디언트 괜찮은 / 뉴턴의 방법 / BFGS와 비교하여 차이점은 무엇입니까? 나는 당신이 설명했다고 생각하지만, 나는 따르지 않습니다.
Haitao Du

@ hxd1011 참조 "무제한 최적화 및 비선형 방정식에 대한 수치 적 방법"Dennis, JE 및 Schnabel, RB
AdamO

1
내가 알 수있는 한, @ hxd1011, Newton Raphson은 단계에서 Hessian을 요구하거나 추정하지 않습니다. nlm구배를 수치로 추정 한 뉴턴-유형 방법은 뉴턴 라프 슨을 적용합니다. BFGS에서는 그래디언트가 Newton Raphson과 같이 필요하다고 생각하지만 연속 단계는 Hessian의 추정이 필요한 2 차 근사를 사용하여 평가됩니다. BFGS는 비선형 최적화에 적합합니다. 그러나 GLM의 경우 일반적으로 잘 작동합니다.
AdamO

2
기존 답변은 "반복적으로 가중 된 최소 제곱"이라고 언급했는데 여기에서 언급 한 알고리즘과 비교하여 어떻게 그림에 들어 옵니까?
amoeba는

@AdamO 당신은 amoeba의 의견을 해결할 수 있습니까? 감사합니다
Haitao Du

1

기록을 위해, 다른 답변에서 설명 된 것처럼 Fisher 점수 (반복적으로 가중 된 최소 제곱)를 기반으로 R의 glm 알고리즘의 간단한 순수한 R 구현은 다음과 같습니다.

glm_irls = function(X, y, weights=rep(1,nrow(X)), family=poisson(log), maxit=25, tol=1e-16) {
    if (!is(family, "family")) family = family()
    variance = family$variance
    linkinv = family$linkinv
    mu.eta = family$mu.eta
    etastart = NULL

    nobs = nrow(X)    # needed by the initialize expression below
    nvars = ncol(X)   # needed by the initialize expression below
    eval(family$initialize) # initializes n and fitted values mustart
    eta = family$linkfun(mustart) # we then initialize eta with this
    dev.resids = family$dev.resids
    dev = sum(dev.resids(y, linkinv(eta), weights))
    devold = 0
    beta_old = rep(1, nvars)

    for(j in 1:maxit)
    {
      mu = linkinv(eta) 
      varg = variance(mu)
      gprime = mu.eta(eta)
      z = eta + (y - mu) / gprime # potentially -offset if you would have an offset argument as well
      W = weights * as.vector(gprime^2 / varg)
      beta = solve(crossprod(X,W*X), crossprod(X,W*z), tol=2*.Machine$double.eps)
      eta = X %*% beta # potentially +offset if you would have an offset argument as well
      dev = sum(dev.resids(y, mu, weights))
      if (abs(dev - devold) / (0.1 + abs(dev)) < tol) break
      devold = dev
      beta_old = beta
    }
    list(coefficients=t(beta), iterations=j)
}

예:

## Dobson (1990) Page 93: Randomized Controlled Trial :
y <- counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
X <- model.matrix(counts ~ outcome + treatment)

coef(glm.fit(x=X, y=y, family = poisson(log))) 
  (Intercept)      outcome2      outcome3    treatment2    treatment3 
 3.044522e+00 -4.542553e-01 -2.929871e-01 -7.635479e-16 -9.532452e-16

coef(glm_irls(X=X, y=y, family=poisson(log)))
     (Intercept)   outcome2   outcome3    treatment2   treatment3
[1,]    3.044522 -0.4542553 -0.2929871 -3.151689e-16 -8.24099e-16

Newton-Raphson (IRLS 알고리즘에서 예상되는 Hessian과는 달리 관측 된 Hessian을 사용함)과 하이브리드 알고리즘 (IRLS로 시작하는 것이 쉽지만 초기화하기는 쉽지만)과의 비교를 포함하여 GLM 피팅 알고리즘에 대한 좋은 설명 Newton-Raphson을 사용한 추가 최적화로 마무리)는 James W. Hardin & Joseph M. Hilbe의 "Generalized Linear Models and Extensions" 책에서 찾을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.