การถดถอยโลจิสติกใน R (อัตราต่อรอง)


40

Rฉันพยายามที่จะดำเนินการวิเคราะห์การถดถอยโลจิสติกใน ฉันเข้าร่วมหลักสูตรที่ครอบคลุมเนื้อหานี้โดยใช้ STATA Rฉันกำลังมองหามันยากมากที่จะทำซ้ำการทำงานใน มันเป็นผู้ใหญ่ในพื้นที่นี้หรือไม่? ดูเหมือนว่าจะมีเอกสารหรือคำแนะนำเล็กน้อย ดูเหมือนว่าจะต้องมีการติดตั้งepicalcและ / หรือepitoolsและ / หรือ / อื่น ๆ ซึ่งไม่สามารถที่จะทำงานออกเอกสารที่ล้าสมัยหรือขาดเอกสารได้ ฉันเคยglmทำการถดถอยโลจิสติก ข้อเสนอแนะใด ๆ ยินดีต้อนรับ

ฉันควรทำให้คำถามนี้เป็นจริง ฉันจะรันการถดถอยโลจิสติกและสร้างอัตราต่อรองได้Rอย่างไร

นี่คือสิ่งที่ฉันได้ทำการวิเคราะห์แบบ univariate:

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))(ให้คุณการเปลี่ยนแปลงหลายหลากในอัตราต่อรองสำหรับถ้า covariate ที่เกี่ยวข้องกับเพิ่มขึ้น 1) สำหรับช่วงเวลาที่เป็นไปได้ของโปรไฟล์สำหรับปริมาณนี้คุณสามารถทำได้ y = 1 βeβy=1β

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

แก้ไข: @caracal เร็วกว่า ...


1
+1 สำหรับข้อเสนอแนะของ @ fabian เป็นวิธีที่ด้อยกว่าการทำเช่นนี้ที่มักจะมีอัตราผลตอบแทนที่คล้ายกันคือช่วงเวลาในการคำนวณช่วงโย logit 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
lockedoff

42

คุณมีสิทธิ์ที่ผลลัพธ์ของ R มักจะมีเพียงข้อมูลที่จำเป็นและจำเป็นต้องคำนวณแยกต่างหาก

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()จะช่วยให้คุณประมาณพารามิเตอร์ถดถอย{J} ง่ายต่อการตีความแต่ (ยกเว้นการสกัดกั้น) 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

ในการรับอัตราส่วนอัตราต่อรองเราจำเป็นต้องมีการจัดหมวดหมู่ข้ามตารางของไดโคโตเมีย DV ดั้งเดิมและการจำแนกประเภทที่คาดการณ์ตามเกณฑ์ความน่าจะเป็นบางอย่างที่ต้องเลือกก่อน นอกจากนี้คุณยังสามารถเห็นฟังก์ชั่นClassLog()ในแพคเกจQuantPsyc(ตามที่ 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

สำหรับอัตราส่วนอัตราต่อรองคุณสามารถใช้แพคเกจ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
ขอบคุณ - ฉันจะต้องตรวจสอบคำตอบของคุณอย่างรอบคอบ ในเดินทางเข้ามายังหนึ่งก็สามารถเรียกใช้logitและlogisticและได้รับอัตราส่วนราคาต่อรองและช่วงความเชื่อมั่นได้อย่างง่ายดาย Rฉันกำลังผิดหวังค่อนข้างที่ปรากฏนี้จะมีความซับซ้อนมากและไม่ได้มาตรฐานใน ฉันสามารถใช้exp(cbind(coef(x), confint(x)))คำตอบจาก fabians ด้านล่างเพื่อรับ OD และ CI ได้หรือไม่ ฉันไม่ชัดเจนว่าคำตอบของคุณให้อะไร
SabreWolfy

3
@ SabreWolfy ฉันไม่แน่ใจว่าคุณหมายถึงอะไรหรือ: ในตอนแรกฉันคิดว่าคุณหมายถึงหรือจากตารางการจำแนกที่เปรียบเทียบความเป็นสมาชิกหมวดหมู่จริงกับสมาชิกที่คาดการณ์ไว้ ( cTabส่วนหนึ่งในคำตอบของฉัน) แต่ตอนนี้ฉันเห็นว่าคุณอาจหมายถึง : เช่น fabians อธิบายแล้วเท่ากับปัจจัยที่อัตราต่อรองที่คาดการณ์เปลี่ยนแปลงเมื่อเพิ่มขึ้น 1 หน่วย นี่คืออัตราส่วนของอัตราต่อรอง "หลังจากเพิ่ม 1 หน่วย" ถึง "ก่อนเพิ่ม 1 หน่วย" ใช่คุณสามารถใช้คำตอบ fabians e x p ( b j ) X jexp(bj)exp(bj)Xj
caracal

4
จริง ๆ @ SabreWolfy ฉันคิดว่ามันน่าผิดหวังที่ผู้คนสามารถคลิกปุ่มเดียวใน stata / sas / spss ฯลฯ และรับอัตราต่อรอง (ใส่สถิติพอดีพิมพ์ III SS ไม่ว่าคุณจะชอบอะไร) วิธีการคำนวณมัน / ไม่ว่ามันจะมีความหมายในสถานการณ์เฉพาะ / และ (อาจสำคัญกว่า) โดยไม่ต้องมีความรู้การทำงานของภาษาเอง
rawr

23

หน้าสถิติของ UCLA นั้นมีความสามารถในการดำเนินการถดถอยโลจิสติกใน R ได้เป็นอย่างดีรวมถึงส่วนสั้น ๆ เกี่ยวกับการคำนวณอัตราต่อรอง


2
น่าเสียดายที่ลิงค์นี้ตาย
Dan Chaltiel

6
โชคดีที่เว็บไม่ได้ (เสมอ) ลืม: web.archive.org/web/20110319043907/http://www.ats.ucla.edu/stat/…
snoram

5

แพ็คเกจ epiDisplay ทำได้ง่ายมาก

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?
Misnomer มีชื่อเสียง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.