polr()
Paketten kullanımdan türetilen tahminleri manuel olarak doğrulamak için MASS
, kategorik bağımlı değişken ile sıralı kategoriler ve öngörücüler . orantılı oran modelini varsayar1 , … , g , … , k X 1 , … , X j , … , X pY1,…,g,…,kX1,…,Xj,…,Xppolr()
logit(p(Y⩽g))=lnp(Y⩽g)p(Y>g)=β0g−(β1X1+⋯+βpXp)
Diğer işlevlerde uygulanan olası seçenekler için bu cevaba bakın . Lojistik fonksiyon, logit-fonksiyonunun tersi olan tahmini olasılıkları bu nedenle olanp^(Y⩽g)
p^(Y⩽g)=eβ^0g−(β^1X1+⋯+β^pXp)1+eβ^0g−(β^1X1+⋯+β^pXp)
Tahmin edilen kategori olasılıkları . Burada R'de iki öngörü olan tekrarlanabilir bir örnek . Sıralı bir değişkeni için, simüle edilmiş sürekli bir değişkeni 4 kategoriye ayırdım.P^(Y=g)=P^(Y≤g)−P^(Y≤g−1)X1,X2Y
set.seed(1.234)
N <- 100 # number of observations
X1 <- rnorm(N, 5, 7) # predictor 1
X2 <- rnorm(N, 0, 8) # predictor 2
Ycont <- 0.5*X1 - 0.3*X2 + 10 + rnorm(N, 0, 6) # continuous dependent variable
Yord <- cut(Ycont, breaks=quantile(Ycont), include.lowest=TRUE,
labels=c("--", "-", "+", "++"), ordered=TRUE) # ordered factor
Şimdi orantılı oranlar modelini kullanın polr()
ve kullanarak tahmini kategori olasılık matrisini alın predict(polr(), type="probs")
.
> library(MASS) # for polr()
> polrFit <- polr(Yord ~ X1 + X2) # ordinal regression fit
> Phat <- predict(polrFit, type="probs") # predicted category probabilities
> head(Phat, n=3)
-- - + ++
1 0.2088456 0.3134391 0.2976183 0.1800969
2 0.1967331 0.3068310 0.3050066 0.1914293
3 0.1938263 0.3051134 0.3067515 0.1943088
Bu sonuçları manuel olarak doğrulamak için, parametre tahminlerini, tahmin edilen günlükleri hesaplamaktan, bu günlüklerden tahmin edilen olasılıkları hesaplamak ve daha sonra tahmin edilen kategori olasılıklarını bir matrise bağlamak gerekir .p^(Y⩽g)
ce <- polrFit$coefficients # coefficients b1, b2
ic <- polrFit$zeta # intercepts b0.1, b0.2, b0.3
logit1 <- ic[1] - (ce[1]*X1 + ce[2]*X2)
logit2 <- ic[2] - (ce[1]*X1 + ce[2]*X2)
logit3 <- ic[3] - (ce[1]*X1 + ce[2]*X2)
pLeq1 <- 1 / (1 + exp(-logit1)) # p(Y <= 1)
pLeq2 <- 1 / (1 + exp(-logit2)) # p(Y <= 2)
pLeq3 <- 1 / (1 + exp(-logit3)) # p(Y <= 3)
pMat <- cbind(p1=pLeq1, p2=pLeq2-pLeq1, p3=pLeq3-pLeq2, p4=1-pLeq3) # matrix p(Y = g)
Sonucuyla karşılaştırın polr()
.
> all.equal(pMat, Phat, check.attributes=FALSE)
[1] TRUE
Tahmin edilen kategoriler için, predict(polr(), type="class")
sadece - her bir gözlem için - en yüksek olasılıklı kategoriyi seçer.
> categHat <- levels(Yord)[max.col(Phat)] # category with highest probability
> head(categHat)
[1] "-" "-" "+" "++" "+" "--"
Sonuçtan karşılaştırın polr()
.
> facHat <- predict(polrFit, type="class") # predicted categories
> head(facHat)
[1] - - + ++ + --
Levels: -- - + ++
> all.equal(factor(categHat), facHat, check.attributes=FALSE) # manual verification
[1] TRUE
predict
İşlev tarafından döndürülen değerlerin , el ile oluşturduğunuz değerlerden farkı nedir? Bağımlı değişkeninizin yapısı nedir? Lütfen tekrarlanabilir bir örnek verin.