Polr fonksiyonunu kullanarak orantılı olasılık varsayımının sıralı bir lojistik regresyonda kontrol edilmesi


9

MASS paketindeki 'polr' işlevini, 15 sürekli açıklayıcı değişkenli bir sıralı kategorik yanıt değişkeni için bir sıralı lojistik regresyon çalıştırmak için kullandım.

Kodumu (aşağıda gösterilen) modelimin UCLA'nın kılavuzunda verilen tavsiyelere göre orantılı oran varsayımına uygun olup olmadığını kontrol etmek için kullandım . Bununla birlikte, çıktı için biraz endişeliyim, sadece çeşitli kesme noktalarındaki katsayıların benzer olmadığını, aynı olduklarını da ima ediyorlar (aşağıdaki grafiğe bakın).

FGV1b <- data.frame(FG1_val_cat=factor(FGV1b[,"FG1_val_cat"]), 
                    scale(FGV1[,c("X","Y","Slope","Ele","Aspect","Prox_to_for_FG", 
                          "Prox_to_for_mL", "Prox_to_nat_border", "Prox_to_village", 
                          "Prox_to_roads", "Prox_to_rivers", "Prox_to_waterFG", 
                          "Prox_to_watermL", "Prox_to_core", "Prox_to_NR", "PCA1", 
                          "PCA2", "PCA3")]))
b     <- polr(FG1_val_cat ~ X + Y + Slope + Ele + Aspect + Prox_to_for_FG + 
                            Prox_to_for_mL + Prox_to_nat_border + Prox_to_village + 
                            Prox_to_roads + Prox_to_rivers + Prox_to_waterFG + 
                            Prox_to_watermL + Prox_to_core + Prox_to_NR, 
              data=FGV1b, Hess=TRUE)

Modelin bir özetini görüntüleyin:

summary(b)
(ctableb <- coef(summary(b)))
q        <- pnorm(abs(ctableb[, "t value"]), lower.tail=FALSE) * 2
(ctableb <- cbind(ctableb, "p value"=q))

Ve şimdi parametre tahminleri için güven aralıklarına bakabiliriz:

(cib <- confint(b)) 
confint.default(b)

Ancak bu sonuçların yorumlanması hala oldukça zordur, bu yüzden katsayıları oran oranlarına dönüştürelim

exp(cbind(OR=coef(b), cib))

Varsayımın kontrol edilmesi. Dolayısıyla aşağıdaki kod, grafiklendirilecek değerleri tahmin edecektir. İlk olarak bize hedef değişkenin her bir değerinden büyük veya ona eşit olma olasılıklarının logit dönüşümlerini gösterir

FG1_val_cat <- as.numeric(FG1_val_cat)
sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}
(t <- with(FGV1b, summary(as.numeric(FG1_val_cat) ~ X + Y + Slope + Ele + Aspect + 
                             Prox_to_for_FG + Prox_to_for_mL + Prox_to_nat_border + 
                             Prox_to_village + Prox_to_roads + Prox_to_rivers + 
                             Prox_to_waterFG + Prox_to_watermL + Prox_to_core + 
                             Prox_to_NR, fun=sf)))

Yukarıdaki tabloda, paralel değişkenler varsayımı olmadan tahmin değişkenlerimizdeki bağımlı değişkenimizi birer birer gerilediğimizde alacağımız (doğrusal) tahmin edilen değerler gösterilmektedir. Şimdi, kesme noktaları arasındaki katsayıların eşitliğini kontrol etmek için bağımlı değişken üzerinde değişen kesme noktalarına sahip bir dizi ikili lojistik regresyon çalıştırabiliriz

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,7:8]))

varsayım denetimi

İstatistik uzmanı olmadığım için özür dilerim ve belki de burada bariz bir şeyi kaçırıyorum. Ancak, model varsayımını nasıl test ettiğimde bir sorun olup olmadığını anlamaya çalışmak ve aynı modeli çalıştırmak için başka yollar bulmaya çalışmak için uzun zaman harcadım.

Örneğin, birçok yardım posta listesinde diğerlerinin vglm işlevini (VGAM paketinde) ve lrm işlevini (rms paketinde) kullandığını okudum (örneğin buraya bakın: R ile paketlerdeki sıralı lojistik regresyonda orantılı olasılık varsayımı VGAM ve rms ). Aynı modelleri çalıştırmayı denedim ama sürekli uyarılara ve hatalara karşı geliyorum.

Örneğin, vglm modelini 'parallel = FALSE' bağımsız değişkeniyle (önceki bağlantıdan bahsettiğimiz orantılı olasılık varsayımını test etmek için önemli olduğu için) yerleştirmeye çalıştığımda, aşağıdaki hatayla karşılaşıyorum:

Lm.fit hatası (X.vlm, y = z.vlm, ...): 'y' içinde NA / NaN / Inf
Ayrıca: Uyarı iletisi:
In Deviance.categorical.data.vgam (mu = mu, y = y, w = w, artıklar = artıklar,: 0 veya 1'e yakın takılmış değerler

Lütfen yukarıda ürettiğim grafiğin neden göründüğünü anlayabilecek ve açıklayabilecek biri olup olmadığını sormak istiyorum. Gerçekten bir şeyin doğru olmadığı anlamına gelirse, lütfen sadece polr işlevini kullanırken orantılı olasılık varsayımını test etmenin bir yolunu bulmama yardımcı olabilir misiniz? Ya da bu mümkün değilse, o zaman vglm işlevini kullanmaya çalışacağım, ancak neden yukarıda verilen hatayı almaya devam ettiğimi açıklamak için biraz yardıma ihtiyacım olacak.

NOT: Arka plan olarak, aslında bir çalışma alanı boyunca konum noktaları olan 1000 veri noktası vardır. Kategorik yanıt değişkeni ile bu 15 açıklayıcı değişken arasında herhangi bir ilişki olup olmadığını görmek istiyorum. Bu açıklayıcı 15 değişkenin tümü mekansal özelliklerdir (örneğin, yükseklik, xy koordinatları, ormana yakınlık vb.). 1000 veri noktası rastgele bir CBS kullanılarak tahsis edildi, ancak katmanlı bir örnekleme yaklaşımı kullandım. 8 farklı kategorik yanıt seviyesinin her birinde 125 puanın rastgele seçildiğinden emin oldum. Umarım bu bilgiler de yardımcı olur.

Yanıtlar:


1

Bağımlı değişken 8 sıralı seviyeye sahiptir, bu nedenle orantılı oran varsayımını test etmek için grafikte her bağımsız değişken için 8 farklı sembol görmelisiniz. Muhtemelen x-ekseni değerleri için çok kısa bir aralık seçtiğiniz için her bağımsız değişken için sadece 2 sembol görüyorsunuz. Benim tahminim doğruysa, sadece x ekseni değerleri için daha geniş bir aralık kullanmanız gerekir. Bu kodu deneyin:

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,3:9]))

5
Bu, standartlarımıza cevap olmak için yeterli değildir. Detaylandırabilir misin? Bu kod ne işe yarar / PO varsayımını kontrol etmek nasıl çalışır? (Örneğin, farklı yazılımlar kullanan biri aynı yaklaşımı nasıl kullanır?)
gung - Reinstate Monica

Cevabımı yeni geliştirdim. Lütfen bana tatmin edici olup olmadığını söyle
John M

1

Yani, bunu etrafta dolaşarak buldum ve bir cevap hala bu nedenle faydalı olabilir. Bence hata var

sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}

kullanmak FG1_val_catyerine y. Harrell'in Regresyon Modelleme Stratejilerinden örnek kullanarak:

library(Hmisc)
getHdata(support)
support <- support[complete.cases(support[, c("sfdm2", "adlsc", "sex", "age", "meanbp")]), ]
sfdm <- as.integer (support$sfdm2 ) - 1

sf1 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(sfdm >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(sfdm >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(sfdm >= 3))
  )
}

sf2 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(y >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(y >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(y >= 3))
  )
}

s1 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf1,
              data = support)
s2 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf2,
              data = support)  

plot(s1, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

plot(s2, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

resim açıklamasını buraya girin vs

resim açıklamasını buraya girin

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.