Yanıtlar:
İşte uygulanan araştırmacının cevabı (R istatistik paketini kullanarak).
İlk olarak, bazı veriler oluşturalım, yani basit bir iki değişkenli lojistik regresyon modeli için veri simüle ediyorum :
> set.seed(3124)
>
> ## Formula for converting logit to probabilities
> ## Source: http://www.statgun.com/tutorials/logistic-regression.html
> logit2prop <- function(l){exp(l)/(1+exp(l))}
>
> ## Make up some data
> y <- rbinom(100, 1, 0.2)
> x <- rbinom(100, 1, 0.5)
Öngörücü x
, ikilik bir değişkendir:
> x
[1] 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1
[48] 1 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0
[95] 1 1 1 1 1 0
İkincisi, kesişmeyi ( ) ve eğimi ( β 1 ) tahmin edin . Gördüğünüz gibi, kesme noktası β 0 = - 0.8690 ve eğim β 1 = - 1.0769'dur .
> ## Run the model
> summary(glm.mod <- glm(y ~ x, family = "binomial"))
[...]
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.8690 0.3304 -2.630 0.00854 **
x -1.0769 0.5220 -2.063 0.03910 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
[...]
Üçüncüsü, R, çoğu istatistiksel paket gibi, takılan değerleri, yani olasılıkları hesaplayabilir. Bu değerleri referans olarak kullanacağım.
> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)
glm.rcdm
> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x
Son adım, R- fitted
fonksiyonuna ( glm.fitted
) ve "el yapımı" yaklaşımım ( logit2prop.glm.rdcm
) 'na dayanan uygun değerlerin karşılaştırılmasıdır . Kendi logit2prop
işlevim (ilk adıma bakın) günlükleri olasılıklara dönüştürür:
> ## Compare fitted values and RDCM
> df <- data.frame(glm.fitted, logit2prop(glm.rdcm))
> df[10:25,]
> df[10:25,]
glm.fitted logit2prop.glm.rdcm.
10 0.1250000 0.1250011
11 0.2954545 0.2954624
12 0.1250000 0.1250011
13 0.2954545 0.2954624
14 0.2954545 0.2954624
15 0.1250000 0.1250011
16 0.1250000 0.1250011
17 0.1250000 0.1250011
18 0.2954545 0.2954624
19 0.1250000 0.1250011
20 0.1250000 0.1250011
21 0.1250000 0.1250011
22 0.1250000 0.1250011
23 0.1250000 0.1250011
24 0.1250000 0.1250011
25 0.2954545 0.2954624
glm.fitted
Ve için tam olarak aynı sayıları almamalıydık logit2prop.glm.rdcm.
? Çok küçük farklar var. Örneğinizde neden tam olarak aynı sayılara sahip olmadığımızı anlayamadım. Kontrol ettiğimde; ve library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))
için tam olarak aynı sonuçları üretir . Bu nedenle, eşit olarak, nedenini soruyorum ve tam olarak aynı numaraları döndürmüyorum? logit2prop
invlogit
glm.fitted
invlogit
Bu nedenle, isterseniz değerlendirmen gerek sağ tarafta:
.
glm(y ~ x)
size lojistik regresyon vermez, sen setine sahipfamily=binomial(link="logit")
. ÇıktınınDispersion parameter for gaussian family
değil, dediğine dikkat edinbinomial family
. Doğru yaparsanız,fitted(glm.mod)
gerçekte günlükleri değil, tahmini olasılıkları döndürür. Günlükleri ile alırsınızpredict(glm.mod, type="link")
.