Lojistik regresyon parametresini hesaplamak için genelleştirilmiş moment yöntemini (GMM) kullanma


13

Lojistik regresyona çok benzeyen bir regresyon katsayılarını hesaplamak istiyorum (Aslında başka bir katsayılı lojistik regresyon: ne zaman verilebilir). Katsayıları hesaplamak için GMM kullanmayı düşündüm, ancak kullanmam gereken moment koşullarının ne olduğundan emin değilim.

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

Biri bana bununla ilgili yardım edebilir mi?

Teşekkürler!


" verilebilir" dediğinde, kullanıcı tarafından belirtildiğini mi yoksa model tarafından tahmin edildiğini mi kastediyorsun? A
Makro

öyle ya da böyle. Bir girdi olarak koyabilirim (örneğin, A = 0.25) veya bulunacak katsayılardan biri olabilirim
user5497

Konudan özneye değişiyor mu (yani veri mi) yoksa tüm gözlemlerde sabit bir sabit midir?
Makro

tüm gözlemlerde düzeltildi (b0, b1, ... gibi)
user5497

2
Neden GMM yerine maksimum olasılık kullanmıyorsunuz?
Makro

Yanıtlar:


6

olduğu varsayıldığında , bu modelde Bernoulli yanıt değişkeni .A1Yi

Pr(Yi=1)=A1+eXib,

burada (ve muhtemelen , bir sabit veya parametre olarak muamele bağlı olarak) yerleştirilmiş katsayılardır ve , gözlem için verilerdir . Kesişim teriminin veri matrisine sabit değeri 1 olan bir değişken eklenerek işlendiğini varsayıyorum.bAXii

An koşulları:

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

Bunu, gözlemini varsayarak, durumun örnek karşılığı ile değiştiriyoruz :N

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

Bu, olası tüm katsayı değerleri en aza pratik olarak çözülür (aşağıda bu optimizasyonu gerçekleştirmek için Nelder-Mead simpleksini kullanacağız).mmb

Konuyla ilgili mükemmel bir R-blogcu eğitiminden ödünç alarak , bunu gmm paketi ile R'de uygulamak oldukça basittir. Örnek olarak, iris veri kümesiyle çalışalım, bir irisin sepal uzunluğuna ve genişliğine ve petal uzunluğuna ve genişliğine bağlı olarak çok renkli olup olmadığını tahmin edelim. Bu durumda sabit ve 1'e eşit olduğunu varsayacağım :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

Lojistik regresyon kullanılarak elde edilen katsayılar:

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 *  

kullanmamız gereken ana parça , her gözlem için moment koşullarını döndüren bir işlevdir, yani satırlar :(YiA1+eXib)Xii

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

Artık lineer regresyon katsayılarını uygun bir başlangıç ​​noktası olarak kullanarak yukarıdaki katsayıları sayısal olarak sığdırabiliriz (yukarıda bağlantılı öğreticide önerildiği gibi):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 

Yakınsama kodu 0, yakınsama prosedürünü belirtir ve parametreler lojistik regresyon ile döndürülenlerle aynıdır.

Gmm paket kaynağına hızlı bir bakış ( sağlanan parametreler momentEstim.baseGmm.iterativeve fonksiyonlar gmm:::.obj1) gmm paketinin yukarıda belirtildiği gibi değerini en aza gösterir. Aşağıdaki eşdeğer kod, R işlevini doğrudan çağırır ve yukarıdaki çağrı ile elde ettiğimiz optimizasyonu gerçekleştirir :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 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.