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

最適なアルゴリズムとは何ですか?ニュートンラプソンアルゴリズム(2次勾配降下法)ですか?Cauchyアルゴリズム(1次勾配降下)を使用するためにいくつかのパラメーターを設定できますか?


5
Newton-Raphsonアルゴリズムが「勾配降下レベルII」と呼ばれる場所を引用しても構いませんか?
クリフAB

4
FIsherスコアリング自体は、モデルでのヘッシアンをその期待値に置き換えることに関連していますが、ニュートンラプソンとは異なります。
Glen_b-モニカの復元

@CliffAB sory。これはNewton's method2次の勾配降下法です。
マルシンコシスキ

1
@ hxd1011、他の人の質問を変更するために編集しないでください。あなたは彼らが何を意味するか知っていると思うときには、編集に一つのことですが、彼らの質問は不明である(おそらく、英語が母国語、例えばないが)、しかし、あなたは彼らの質問は作るべきではない別の彼らが持っていたよりも(例えば、より一般的な)欲しかった。代わりに、あなたが望むもので新しい質問をしてください。編集をロールバックしています。
GUNG -復活モニカ

1
@MarcinKosińskiNewtonの方法 Newton-Raphson です。Raphson は、より一般的なケースのためのNewtonのアイデアに基づいています。
AdamO

回答:


19

あなたはのドキュメントことを知って興味があるだろうglm介してアクセスは、?glm下:多くの有用な洞察を提供しmethod、我々はそれを反復再重み付け最小二乗法を見つけるためのデフォルトの方法であるglm.fitため主力機能です、glm。さらに、ドキュメントでは、デフォルトではなくユーザー定義関数がここで提供される可能性があることに言及しています。


3
関数名を入力するglmfit.glmRプロンプトでソースコードを調べることもできます。
マシュードゥルーリー

@MatthewDruryあなたは、glm.fitCコードに依存しているため、完全に再現可能ではない主力製品を意味すると思いますC_Cdqrls
AdamO

ええ、あなたは正しいです、私はRの順序をたくさん混ぜます。しかし、あなたは再現できないとはどういう意味ですか?
マシュードゥルーリー

16

使用される方法は、出力自体に記載されています:フィッシャースコアリングです。これはほとんどの場合、ニュートンラプソンと同等です。例外は、非自然なパラメーター化を使用している状況です。相対リスク回帰は、このようなシナリオの一例です。そこでは、予想される情報と観察される情報が異なります。一般に、Newton RaphsonとFisher Scoringはほぼ同じ結果をもたらします。

pp(1p)フィッシャースコアリング。さらに、複雑な尤度を推定するためのより一般的なフレームワークであるEMアルゴリズムにいくつかの良い直観を与えます。

Rのデフォルトの一般的なオプティマイザーは、基本的に線形化に基づいて数値的手法を使用して2次モーメントを推定します(次元の呪いには注意してください)。したがって、効率とバイアスの比較に興味がある場合は、次のような単純なロジスティック最尤ルーチンを実装できます。

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と比較した違いは何ですか?私はあなたが説明したと思うが、私はまったく従いません。
ハイタオドゥ

@ hxd1011「制約のない最適化と非線形方程式の数値手法」を参照してくださいDennis、JEおよびSchnabel、RB
AdamO

1
@ hxd1011私の知る限り、ニュートンラプソンはステップでヘッセ行列を必要とせず、推定しません。Newton-Typeメソッドはnlm、勾配を数値的に推定し、Newton Raphsonを適用します。BFGSでは、Newton Raphsonの場合と同様に勾配が必要であると思いますが、ヘッシアンの推定値を必要とする2次近似を使用して、連続するステップが評価されます。BFGSは、高度に非線形の最適化に適しています。ただし、GLMの場合、通常は非常に適切に動作します。
AdamO

2
既存の回答では「反復的に最小化された最小二乗法」に言及していましたが、ここで言及したアルゴリズムと比較して、それはどのように写真に登場しますか?
アメーバは、モニカの復活を

@AdamOアメーバのコメントに対処できますか?ありがとう
Haitao Du

1

記録については、他の回答で説明されているように、フィッシャースコアリング(反復的に再重み付けされた最小二乗法)に基づいた、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

GLMフィッティングアルゴリズムの良い議論。Newton-Raphson(IRLSアルゴリズムで予想されるヘッシアンとは対照的に、観測されたヘッシアンを使用します)とハイブリッドアルゴリズム(IRLSで始まります。これらは初期化が簡単ですが、 Newton-Raphsonを使用したさらなる最適化で終了します)は、James W. Hardin&Joseph M. Hilbeの著書 「Generalized Linear Models and Extensions」に記載されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.