로지스틱 회귀 모수를 계산하기 위해 GMM (Generalized Method of Moments) 사용


13

나는 로지스틱 회귀 분석과 매우 유사하다 회귀 (다른 계수 사실 로지스틱 회귀 분석에 계수를 계산하려면 : 경우A는주어질 수있다). 계수를 계산하기 위해 GMM을 사용하려고 생각했지만 사용해야하는 모멘트 조건이 무엇인지 잘 모르겠습니다.

A1+e(b0+b1x1+b2x2+),
A

누구든지 저를 도울 수 있습니까?

감사!


" 제공 가능" 이라고 말하면 사용자가 지정했거나 모델에서 추정 한 것입니까?
Macro

어느 쪽이든. 입력으로 입력하거나 (예 : A = 0.25) 찾을 수있는 계수 중 하나 일 수 있습니다.
user5497

주제마다 다르거 나 (즉, 데이터입니까) 모든 관측치에서 고정 상수입니까?
매크로

모든 관측치에 고정됨 (예 : b0, b1, ...)
user5497

2
왜 GMM 대신 최대 가능성을 사용하지 않습니까?
매크로

답변:


6

가정 1 ,이 모델은 베르누이 응답 변수 갖고 Y I 로를1와이나는

아르 자형(와이나는=1)=1+이자형엑스나는',

여기서 (및 상수 또는 매개 변수로 처리되는지 여부에 따라 A )는 적합 계수이고 X i 는 관측치 i에 대한 데이터입니다 . 상수 값이 1 인 변수를 데이터 행렬에 추가하여 절편 항을 처리한다고 가정합니다.엑스나는나는

순간 조건은 다음과 같습니다.

이자형[(와이나는1+이자형엑스나는')엑스나는]=0.

우리는 이것을 관측 값을 가정하여 조건의 샘플 대응 물로 대체합니다 .

미디엄=1나는=1[(와이나는1+이자형엑스나는')엑스나는]=0

미디엄'미디엄

dat <- as.matrix(cbind(data.frame(IsVersicolor = as.numeric(iris$Species == "versicolor"), Intercept=1), iris[,1:4]))
head(dat)
#      IsVersicolor Intercept Sepal.Length Sepal.Width Petal.Length Petal.Width
# [1,]            0         1          5.1         3.5          1.4         0.2
# [2,]            0         1          4.9         3.0          1.4         0.2
# [3,]            0         1          4.7         3.2          1.3         0.2
# [4,]            0         1          4.6         3.1          1.5         0.2
# [5,]            0         1          5.0         3.6          1.4         0.2
# [6,]            0         1          5.4         3.9          1.7         0.4

로지스틱 회귀를 사용하여 피팅 된 계수는 다음과 같습니다.

summary(glm(IsVersicolor~., data=as.data.frame(dat[,-2]), family="binomial"))
# Coefficients:
#              Estimate Std. Error z value Pr(>|z|)    
# (Intercept)    7.3785     2.4993   2.952 0.003155 ** 
# Sepal.Length  -0.2454     0.6496  -0.378 0.705634    
# Sepal.Width   -2.7966     0.7835  -3.569 0.000358 ***
# Petal.Length   1.3136     0.6838   1.921 0.054713 .  
# Petal.Width   -2.7783     1.1731  -2.368 0.017868 *  

(와이나는1+이자형엑스나는')엑스나는나는

moments <- function(b, X) {
  A <- 1
  as.vector(X[,1] - A / (1 + exp(-(X[,-1] %*% cbind(b))))) * X[,-1]
}

init.coef <- lm(IsVersicolor~., data=as.data.frame(dat[,-2]))$coefficients
library(gmm)
fitted <- gmm(moments, x = dat, t0 = init.coef, type = "iterative", crit = 1e-19,
              wmatrix = "optimal", method = "Nelder-Mead",
              control = list(reltol = 1e-19, maxit = 20000))
fitted
#  (Intercept)  Sepal.Length   Sepal.Width  Petal.Length   Petal.Width  
#      7.37849      -0.24536      -2.79657       1.31364      -2.77834  
# 
# Convergence code =  0 

수렴 코드 0은 프로 시저 수렴을 나타내며 매개 변수는 로지스틱 회귀에 의해 리턴 된 것과 동일합니다.

momentEstim.baseGmm.iterativegmm:::.obj1미디엄'미디엄optimgmm

gmm.objective <- function(theta, x, momentFun) {
  avg.moment <- colMeans(momentFun(theta, x))
  sum(avg.moment^2)
}
optim(init.coef, gmm.objective, x=dat, momentFun=moments,
      control = list(reltol = 1e-19, maxit = 20000))$par
#  (Intercept) Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
#    7.3784866   -0.2453567   -2.7965681    1.3136433   -2.7783439 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.