आर में तार्किक प्रतिगमन (विषम अनुपात)


40

मैं एक लॉजिस्टिक रिग्रेशन एनालिसिस करने की कोशिश कर रहा हूँ R। मैंने STATA का उपयोग करके इस सामग्री को कवर करने वाले पाठ्यक्रमों में भाग लिया। मुझे कार्यक्षमता को दोहराने में बहुत मुश्किल हो रही है R। क्या यह इस क्षेत्र में परिपक्व है? लगता है बहुत कम प्रलेखन या मार्गदर्शन उपलब्ध है। उत्पादन अनुपात अनुपात आउटपुट को स्थापित करने epicalcऔर / या epitools/ या अन्य की आवश्यकता होती है, जिनमें से कोई भी मैं काम नहीं कर सकता, पुराने हैं या प्रलेखन की कमी है। मैंने glmलॉजिस्टिक रिग्रेशन करने के लिए उपयोग किया है। किसी भी सुझाव का स्वागत होगा।

मैं बेहतर यह एक असली सवाल करना होगा। मैं लॉजिस्टिक रिग्रेशन कैसे चलाऊं और इसमें ऑड्स राशन का उत्पादन Rकरूं?

यहाँ मैंने एक विश्लेषण के लिए क्या किया है:

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

और बहुभिन्नरूपी के लिए:

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

मैं तो देखा है x, y, summary(x)और summary(y)

है x$coefficientsकिसी भी मूल्य का?

जवाबों:


36

exp(coef(x))eβy=1β

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

संपादित करें: @caracal जल्दी था ...


1
@ फैबियन के सुझाव के लिए +1। ऐसा करने का एक हीन तरीका जो आमतौर पर समान अंतराल पैदा करता है, वह है लॉग स्केल पर अंतराल की गणना करना और फिर ऑड्स स्केल में बदलना 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]) ):। डेल्टा विधि भी है: ats.ucla.edu/stat/r/faq/deltamethod.htm
लॉकऑफ़

42

आप सही हैं कि आर के आउटपुट में आमतौर पर केवल आवश्यक जानकारी होती है, और अलग से गणना करने की अधिक आवश्यकता होती है।

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()bjexp(bj)

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

बाधाओं के अनुपात को प्राप्त करने के लिए, हमें मूल द्विभाजित DV के वर्गीकरण क्रॉस-टेबल और कुछ संभाव्यता सीमा के अनुसार अनुमानित वर्गीकरण की आवश्यकता होती है, जिसे पहले चुने जाने की आवश्यकता होती है। आप ClassLog()पैकेज में फ़ंक्शन भी देख सकते हैं QuantPsyc(जैसा कि संबंधित प्रश्न में उल्लिखित है )।

# 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

बाधाओं के अनुपात के लिए, आप या तो पैकेज का उपयोग कर सकते हैं या vcdमैन्युअल रूप से गणना कर सकते हैं ।

> 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
धन्यवाद - मुझे आपके उत्तर को ध्यान से देखना होगा। STATA में कोई भी बस दौड़ सकता है logitऔर logisticआसानी से अनुपात और विश्वास अंतराल प्राप्त कर सकता है। मैं कुछ निराश हूं कि यह इतना जटिल और गैर-मानक प्रतीत होता है R। क्या मैं केवल exp(cbind(coef(x), confint(x)))ओडी और सीआई प्राप्त करने के लिए नीचे दिए गए फ़ैबियन के उत्तर से उपयोग कर सकता हूं ? मैं स्पष्ट नहीं हूं कि आपका जवाब क्या प्रदान कर रहा है?
सब्रेवुल्फी

3
cTabexp(bj)exp(bj)Xj

4
वास्तव में @SabreWolfy मुझे यह निराशा होती है कि लोग स्टैटा / sas / spss इत्यादि में एक बटन पर क्लिक कर सकते हैं, और ऑड्स रेशियो प्राप्त कर सकते हैं (फिट आँकड़ों को टाइप करें, III SS, जो भी आपको यहाँ पसंद है) जो कि इसका कोई मतलब नहीं है / इसकी गणना कैसे करें / क्या यह किसी विशेष स्थिति में सार्थक है / और (शायद अधिक महत्वपूर्ण बात) भाषा के काम के ज्ञान के बिना।
कच्ची

23

UCLA सांख्यिकी पृष्ठ में R में लॉजिस्टिक प्रतिगमन करने का अच्छा चलन है। इसमें ऑड्स अनुपात की गणना पर एक संक्षिप्त खंड शामिल है।


2
दुर्भाग्य से, यह लिंक मर चुका है
Dan Chaltiel

6
सौभाग्य से, वेब (हमेशा) नहीं भूलता: web.archive.org/web/20110319043907/http://www.ats.ucla.edu/stat/…
snoram

5

एपिडिसप्ले पैकेज यह बहुत आसानी से करता है।

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

क्या लेटेक्स रैपर जैसे outregया के साथ लॉजिस्टिक डिस्प्ले को संयोजित करने का कोई तरीका है xtable?
प्रतिष्ठित मिसनोमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.