olduğu varsayıldığında , bu modelde Bernoulli yanıt değişkeni .A≤1Yi
Pr(Yi=1)=A1+e−X′ib,
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[(Yi−A1+e−X′ib)Xi]=0.
Bunu, gözlemini varsayarak, durumun örnek karşılığı ile değiştiriyoruz :N
m=1N∑i=1N[(Yi−A1+e−X′ib)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).m′mb
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 :(Yi−A1+e−X′ib)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.iterative
ve 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 :m′moptim
gmm
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