使用广义矩法(GMM)计算逻辑回归参数


13

我想计算与逻辑回归非常相似的回归系数(实际上是具有另一个系数的逻辑回归: 当可以给出时)。我曾考虑过使用GMM来计算系数,但是我不确定应该使用什么时刻条件。A

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

有人可以帮我吗?

谢谢!


当您说“ 可以给出 ”时,您是说它是由用户指定还是由模型估算?A
2012年

无论哪种方式。我可以将其作为输入(例如,A = 0.25)或作为要找到的系数之一
user5497 2012年

它是否因主体而异(即是数据)还是在所有观测值中都是固定常数?
2012年

固定于所有观察值(例如b0,b1等)
user5497'6

2
为什么不使用最大可能性代替GMM?
2012年

Answers:


6

假设,该模型的伯努利响应变量为ÿ A1Yi

Pr(Yi=1)=A1+eXib,

其中(可能是,取决于是否将其视为常量或参数)是拟合系数,而是用于观察的数据。我假设拦截项是通过将常数值为1的变量添加到数据矩阵来处理的。A X i ibAXii

瞬间条件是:

E[(YiA1+eXib)Xi]=0.

假设有观察值,我们将其替换为条件的对应样本:N

m=1Ni=1N[(YiA1+eXib)Xi]=0

这实际上是通过使所有可能的系数值最小化来解决的(下面我们将使用Nelder-Mead单纯形法来执行此优化)。bmmb

有关该主题的出色R-bloggers教程中借来的,使用gmm包在R中实现它非常简单。例如,让我们使用虹膜数据集,根据其隔片的长度和宽度以及花瓣的长度和宽度预测虹膜是否为杂色。在这种情况下,我假设为常数且等于1:A

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 *  

我们需要使用gmm的主要部分是一个返回矩条件的函数,即每个观察行:(YiA1+eXib)Xii

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

现在,我们可以使用线性回归系数作为方便的初始点,对系数进行数值拟合(如上面链接的教程中所建议):b

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表示过程已收敛,并且参数与逻辑回归返回的参数相同。

快速查看gmm软件包的来源(功能momentEstim.baseGmm.iterative和所gmm:::.obj1提供的参数)显示,如上所述,gmm软件包正在将最小化。以下等效代码直接调用R 函数,执行与上面对的调用相同的优化:mmoptimgmm

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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.