R'de Lojistik Regresyon (Oran Oranı)


40

İçinde lojistik bir regresyon analizi yapmaya çalışıyorum R. STATA kullanarak bu materyali kapsayan derslere katıldım. İçinde işlevselliği çoğaltmak çok zor buluyorum R. Bu alanda olgunlaşmış mu? Çok az dokümantasyon veya rehberlik mevcut gibi görünüyor. Olasılık oranı çıktısı üretmek , hiçbiri çalışamadığım, eskimiş veya belge eksikliği olan kurulum epicalcve / veya epitoolsve / veya diğerleri gerektiriyor . Ben glmlojistik regresyon yaptım. Herhangi bir öneriniz memnuniyetle karşılanacaktır.

Bunu gerçek bir soru yapsam iyi olur. Lojistik bir regresyonda nasıl çalışabilir ve oran oranlarını nasıl yükseltirim R?

Tek değişkenli bir analiz için yaptığım şey:

x = glm(Outcome ~ Age, family=binomial(link="logit"))

Ve çok değişkenli için:

y = glm(Outcome ~ Age + B + C, family=binomial(link="logit"))

Sonra baktım x, y, summary(x)ve summary(y).

x$coefficientsherhangi değerin?

Yanıtlar:


36

Tahmini etkileri göreli oran oranları olarak yorumlamak istiyorsanız, sadece exp(coef(x))( verir , oranındaki çarpımsal değişiklik, eğer ile ilişkili ortak değişken 1 artarsa). Bu miktar için profil olabilirlik aralıkları için, y = 1 βeβy=1β

require(MASS)
exp(cbind(coef(x), confint(x)))  

EDIT: @caracal daha hızlıydı ...


1
@ Fabian'ın önerisi için +1. Genellikle benzer aralıklarını verir o bunu yapmak için bir alt yolu logit ölçekte aralığını hesaplamak ve sonra bahis ölçeğine dönüştürmektir: cbind( exp(coef(x)), exp(summary(x)$coefficients[,1] - 1.96*summary(x)$coefficients[,2]), exp(summary(x)$coefficients[,1] + 1.96*summary(x)$coefficients[,2]) ). Delta yöntemi de var: ats.ucla.edu/stat/r/faq/deltamethod.htm
lockedoff 23:11

42

R'nin çıktısının genellikle yalnızca temel bilgileri içerdiğini ve daha fazla hesaplamanın da yapılması gerektiği konusunda haklısınız.

N  <- 100               # generate some data
X1 <- rnorm(N, 175, 7)
X2 <- rnorm(N,  30, 8)
X3 <- abs(rnorm(N, 60, 30))
Y  <- 0.5*X1 - 0.3*X2 - 0.4*X3 + 10 + rnorm(N, 0, 12)

# dichotomize Y and do logistic regression
Yfac   <- cut(Y, breaks=c(-Inf, median(Y), Inf), labels=c("lo", "hi"))
glmFit <- glm(Yfac ~ X1 + X2 + X3, family=binomial(link="logit"))

coefficients()Size tahmini regresyon parametrelerini verir . Ancak yorumlaması daha kolaydır hariç). e x p ( b j )bjexp(bj)

> exp(coefficients(glmFit))
 (Intercept)           X1           X2           X3 
5.811655e-06 1.098665e+00 9.511785e-01 9.528930e-01

Olasılık oranını elde etmek için, ilk ikioton DV'in sınıflandırma çapraz tablosuna ve ilk olarak seçilmesi gereken bazı olasılık eşiğine göre öngörülen sınıflandırmaya ihtiyacımız var. Ayrıca ClassLog()paketi paket içinde görebilirsiniz QuantPsyc( ilgili soruda belirtilen chl ).

# predicted probabilities or: predict(glmFit, type="response")
> Yhat    <- fitted(glmFit)
> thresh  <- 0.5  # threshold for dichotomizing according to predicted probability
> YhatFac <- cut(Yhat, breaks=c(-Inf, thresh, Inf), labels=c("lo", "hi"))
> cTab    <- table(Yfac, YhatFac)    # contingency table
> addmargins(cTab)                   # marginal sums
     YhatFac
Yfac   lo  hi Sum
  lo   41   9  50
  hi   14  36  50
  Sum  55  45 100

> sum(diag(cTab)) / sum(cTab)        # percentage correct for training data
[1] 0.77

Oran oranı için, paketi kullanabilir vcdveya hesaplamayı manuel olarak yapabilirsiniz.

> library(vcd)                       # for oddsratio()
> (OR <- oddsratio(cTab, log=FALSE)) # odds ratio
[1] 11.71429

> (cTab[1, 1] / cTab[1, 2]) / (cTab[2, 1] / cTab[2, 2])
[1] 11.71429

> summary(glmFit)  # test for regression parameters ...

# test for the full model against the 0-model
> glm0 <- glm(Yfac ~ 1, family=binomial(link="logit"))
> anova(glm0, glmFit, test="Chisq")
Analysis of Deviance Table
Model 1: Yfac ~ 1
Model 2: Yfac ~ X1 + X2 + X3
  Resid. Df Resid. Dev Df Deviance P(>|Chi|)    
1        99     138.63                          
2        96     110.58  3   28.045 3.554e-06 ***

2
Teşekkürler - Cevabınıza dikkatlice bakmam gerekecek. STATA'da kişi kolaylıkla koşabilir logitve logisticoranlar ve güven aralıkları ile kolayca kazanılabilir. Bu kadar karmaşık ve standart dışı göründüğü için biraz sinirliyim R. exp(cbind(coef(x), confint(x)))OD ve CI’yı almak için Fabian’ın cevabını kullanabilir miyim ? Cevabınızın ne sağladığı net değil mi?
SabreWolfy

3
@SabreWolfy Ne demek istediğin veya ne demek istediğinden emin değildim: aslen, asıl kategori üyeliğini öngörülen üyelikle ( cTabbenim cevabımdaki bölümle) karşılaştıran sınıflandırma tablosundan demek istediğini sanıyordum . Ama şimdi görüyorum ki, muhtemelen sadece demek istediniz : fabians’ın açıkladığı gibi, , 1 birim yükseldiğinde tahmin edilen oranın değiştiği faktöre eşittir . Bu, "1 birim artıştan sonra" oranının "1 birim artıştan önce" oranına oranıdır. Yani evet, sadece fabians cevap kullanabilirsiniz. e x p ( b j ) X jexp(bj)exp(bj)Xj
caracal

4
aslında @SabreWolfy İnsanların stata / sas / spss etc içindeki tek bir düğmeyi tıklatabildiğini ve bunun ne anlama geldiğine dair bir ipucu bulmadan oran oranlarını (uygun istatistikleri, tip III SS modelini, burada ne şekilde istersen) elde etmesini sinir bozucu buluyorum dilin kendisi hakkında bir çalışma bilgisine sahip olmadan nasıl hesaplanabileceği / belirli bir durumda anlamlı olup olmadığı / ve (belki de daha önemlisi).
rawr


5

EpiDisplay paketi bunu çok kolay bir şekilde yapar.

library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association, 
            family=binomial, data=Wells)
logistic.display(glm1)
Logistic regression predicting switch : yes vs no 

                       crude OR(95%CI)         adj. OR(95%CI)         P(Wald's test) P(LR-test)
arsenic (cont. var.)   1.461 (1.355,1.576)     1.595 (1.47,1.731)     < 0.001        < 0.001   

distance (cont. var.)  0.9938 (0.9919,0.9957)  0.9911 (0.989,0.9931)  < 0.001        < 0.001   

education (cont. var.) 1.04 (1.021,1.059)      1.043 (1.024,1.063)    < 0.001        < 0.001   

association: yes vs no 0.863 (0.746,0.999)     0.883 (0.759,1.027)    0.1063         0.1064    

Log-likelihood = -1953.91299
No. of observations = 3020
AIC value = 3917.82598

Lojistik ekranını outregveya benzeri bir lateks sarmalayıcıyla birleştirmenin herhangi bir yolu var mı xtable?
Saygın Hatalı
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.