Menu

R'de Lojistik Regresyon: family = binomial ile glm()

glm(family = binomial) ile evet/hayır sonuçlarını modelleyin: özeti okuyun, log-odds katsayılarını exp() ile odds oranlarına çevirin ve tahmin edilen olasılıkları doğru şekilde alın.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Sonuç Evet/Hayır Olduğunda

Doğrusal regresyon bir sayı tahmin eder. Ama modellemeye değer soruların birçoğu ikilidir: müşteri kaybediliyor mu, hasta iyileşiyor mu, e-postaya tıklanıyor mu. 0/1 sonuca düz bir çizgi uydurmak anında bozulur - çizgi neşeyle −0.3 ya da 1.4 olasılıkları tahmin eder ve bunlar saçmadır.

Lojistik regresyon bunu, sonucun olasılığını log-odds (logit) dönüşümü üzerinden modelleyerek düzeltir: log(p / (1 − p)) = kesişim + eğim × x. Log-odds ölçeği tüm sayı doğrusu boyunca uzanır, dolayısıyla orada doğrusal bir denklem doğal biçimde oturur - ve geri eşleme her tahmini tanıdık S biçimli eğri boyunca (0, 1) aralığına sıkıştırır. Hilenin bedeli: katsayılar log-odds ölçeğinde yaşar ve bir lojistik regresyonu okumanın tüm oyunu, onları insanların anlayacağı bir şeye geri çevirmektir.

Uydurma: family = binomial ile glm()

glm() (genelleştirilmiş doğrusal model), lm() fonksiyonunun büyük kardeşidir; family = binomial lojistik regresyonu seçer. mtcars içinde am, şanzıman türünü kaydeder (1 = manuel, 0 = otomatik) - yakıt açısından verimli arabalar manuel olma eğiliminde mi?

Çıktıyı okumadan önce iki şey. Birincisi, family = binomial isteğe bağlı değildir - onu atlarsanız glm() sessizce sıradan en küçük kareleri uydurur. İkincisi, sonuç ikili olmalıdır: 0/1, mantıksal ya da iki seviyeli bir faktör (R, ikinci seviyenin olasılığını modeller).

Şimdi özet, blok blok:

  • Coefficients - mpg Estimate değeri yaklaşık 0.31'dir ve bu bir log-odds eğimidir: her ek mpg, manuel olmanın log-odds değerine 0.31 ekler. Pozitif "olasılığı yükseltir", negatif "düşürür" demektir - işaretin ötesinde kimsenin sezgisi bu ölçekte işlemez; bir sonraki bölümün var olma nedeni budur.
  • z value ve Pr(>|z|) - regresyonun t-testleriyle aynı mantık (Estimate ÷ Std. Error, sonra "bu sıfır olabilir mi?" için bir p değeri), yalnızca normal yaklaşım kullanılır - dolayısıyla t yerine z. Burada p ≈ 0.011: mpg ile şanzıman türü arasındaki ilişkinin gürültü olması olası değil.
  • Null deviance ve Residual deviance - sapma, glm dünyasının uyumsuzluk ölçüsüdür (daha küçük = daha iyi). Null deviance (31 df'te 43.2) yalnızca kesişimli modeldir; residual deviance (30 df'te 29.7) sizinkidir. Bir yordayıcılık df karşılığında yaklaşık 13.6'lık düşüş, "R-kare yükseldi" ifadesinin glm karşılığıdır.
  • AIC - uyumu karmaşıklığa karşı dengeleyen bir model karşılaştırma puanı; düşük olan kazanır. Tek başına anlamsızdır, aynı veri üzerindeki aday modeller arasında yararlıdır.

Log-Odds'tan Odds Oranlarına: exp(coef())

Üs almak, katsayıları toplamsal log-odds ölçeğinden çarpımsal odds ölçeğine taşır:

exp(0.307) ≈ 1.36 ve ezberlenecek dürüst cümle kalıbı şudur: "her ek mpg, manuel şanzıman olma odds değerini yaklaşık 1.36 ile çarpar." 1'in üstündeki bir odds oranı odds değerini yükseltir, altındaki düşürür, tam olarak 1 etki yok demektir - odds oranları için güven aralığı hükmünün "aralık 1 değerini dışlıyor mu?" olmasının nedeni budur (sıfır değil; sıfır, log-odds ölçeğindeki sınırdı).

Dile dikkat: odds, olasılık değildir. Odds = p / (1 − p), dolayısıyla 0,75 olasılık 3 odds demektir. Odds değerini 1.36 ile çarpmak, olasılığı 1.36 ile çarpmakla aynı şey değildir - ve sonuç yaygın olduğunda fark büyüktür. Nadir bir sonuç için 2 olan bir odds oranı "kabaca iki katı risk" gibi davranır; %50 oranında seyreden bir sonuç için kesinlikle öyle davranmaz. Sonuç nadir olmadıkça bir odds oranını asla risk oranı diliyle ("1.36 kat daha olası") raporlamayın.

Tahmin Edilen Olasılıklar: type = "response" Tuzağı

Doğadaki en yaygın lojistik regresyon hatası:

İlk çağrı varsayılan type = "link" değerini döndürür - log-odds ölçeğinde tahminler, negatif değerler falan. İkincisi gerçek olasılıkları döndürür. "Olasılıklarınız" negatif ya da 1'in üstünde çıkıyorsa sebep budur. Bloğu çalıştırın: 15 mpg'lik bir arabanın manuel olma şansı esasen yoktur, 30 mpg'lik bir araba büyük olasılıkla manueldir ve S eğrisi ortadan bükülür.

Sınıflandırma: Eşikleme ve Karışıklık Tablosu

Olasılıklar bir kesme noktası seçilerek tahmin edilen sınıflara dönüşür - varsayılan seçim 0,5'tir - ve dürüst karne, tahmin edilene karşı gerçek değerlerin tablosudur:

Köşegen hücreler doğru kararlardır; köşegen dışındaki iki hücre farklı iki hatadır (otomatik bir araba için manuel tahmin etmek ve tersi). Genel doğruluk tek başına bir modeli fena hâlde kayırabilir - müşterilerin %95'i ayrılmıyorsa "kimse ayrılmaz tahmin et" %95 alır ve sıfır ayrılanı yakalar - o yüzden her zaman iki hata türüne de bakın. Ve 0,5 bir gelenektir, bir yasa değil: iki hatanın maliyetleri farklı olduğunda eşiği buna göre kaydırın.

Bir dürüstlük uyarısı: bu tablo modeli, uydurulduğu aynı veri üzerinde puanlar ve bu onu kayırır. Gerçek değerlendirme, modelin hiç görmediği veriyi ayırır.

Birden Çok Yordayıcı

Tam olarak lm() gibi - terimleri + ile ekleyin ve her yorum "diğerleri sabit tutulduğunda" niteleyicisini kazanır:

Üssü alınmış her katsayı artık, diğer yordayıcılarda birbirine benzeyen arabalar arasında o yordayıcıdaki bir birimlik artış için odds çarpanıdır. Mekanizma ölçeklenir, ama doğrusal regresyondaki uyarılar da öyle: ilişkili yordayıcılar birbirlerinin katsayılarını yeniden karar.

Uyarılar

  • Tam ayrışma. Bir yordayıcı sonucu mükemmel biçimde ayırıyorsa (belirli bir mpg değerinin üstündeki her araba manuel, altındaki her araba otomatik), maksimum olabilirlik katsayısı sonsuz olmak ister. R uyarır - glm.fit: fitted probabilities numerically 0 or 1 occurred - ve saçma standart hatalarla devasa katsayılar bildirir. O sayıları yayımlamayın; modeli basitleştirin, daha fazla veri toplayın ya da cezalandırılmış bir yöntem kullanın (brglm2 ya da logistf paketleri).
  • Yeterli olay. Bağlayıcı kısıt toplam satır sayısı değil, daha nadir sonucun sayısıdır. Eski bir genel kural, yordayıcı başına 10-15 olay mertebesi ister; buradaki 32 arabalık örnekler mekanizmayı öğretmek içindir, yayımlanabilir örneklem büyüklükleri için bir şablon değil.
  • Sonuç yaygın olduğunda odds oranları risk oranı değildir - yukarıda ele alındı, tekrarlandı çünkü siz yakalamasanız da hakemler yakalayacak.

Buradan Ne Çıkarıyorsunuz

  • İkili sonuç → glm(y ~ x, data = df, family = binomial); family argümanını asla unutmayın.
  • Ham katsayılar log-odds'tur; exp(coef(fit)) odds oranlarını verir ve aralıkları için sıfır değeri 1'dir.
  • Cümle kalıbı: "x'teki her bir birimlik artış, sonucun odds değerini exp(b) ile çarpar."
  • Olasılıklar için predict(..., type = "response") - varsayılan log-odds döndürür, bir numaralı karışıklık.
  • Bir eşikle sınıflandırın ve bir karışıklık tablosuyla yargılayın; doğruluk tek başına yalan söyleyebilir.
  • Ayrışma uyarılarına dikkat edin, olaylarınızı sayın ve odds oranlarını risk oranı kılığına sokmayın.

Sırada: şimdiye kadar gördüğünüz her aralığın arkasındaki mekanizma - t.test(), confint() ve prop.test() ile güven aralıkları.

Sıkça Sorulan Sorular

R'de lojistik regresyon nasıl çalıştırılır?

glm() ve family = binomial ile: fit <- glm(am ~ mpg, data = mtcars, family = binomial), sonra summary(fit). Sonuç ikili olmalıdır - 0/1, TRUE/FALSE ya da iki seviyeli bir faktör. family = binomial unutulursa sessizce sıradan doğrusal regresyon uydurulur.

R'de glm katsayıları nasıl yorumlanır?

Ham katsayılar log-odds ölçeğindedir ve kimse bu ölçekte düşünmez. Odds oranlarını elde etmek için onların üssünü alın - exp(coef(fit)): bir yordayıcı için 1.36 değeri, her bir birimlik artışın sonucun odds değerini yaklaşık 1.36 ile çarptığı anlamına gelir. 1'in üstündeki değerler odds değerini yükseltir, altındakiler düşürür, tam olarak 1 etki yok demektir.

R'de glm'den tahmin edilen olasılıklar nasıl alınır?

predict(fit, newdata, type = "response") kullanın. Bir numaralı tuzak budur: varsayılan type = "link", olasılıkları değil log-odds değerlerini döndürür - dolayısıyla "olasılıklarınız" negatifse ya da 1'in üstündeyse type = "response" yazmayı unutmuşsunuzdur.

Odds ile olasılık arasındaki fark nedir?

Olasılık, başarıların tüm denemelere oranıdır; odds ise başarıların başarısızlıklara oranıdır. 0,75 olasılık, 3 odds demektir (başarısızlık başına üç başarı). Lojistik regresyonun odds oranları olasılıkları değil odds değerlerini çarpar - ve sonuç yaygın olduğunda bir odds oranı karşılık gelen risk oranından çok daha büyük olabilir, o yüzden birini diğeri gibi sunmayın.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA