วิธีการคำนวณหลอก -


46

การเขียนของ Christopher Manning เกี่ยวกับการถดถอยโลจิสติกใน Rแสดงการถดถอยโลจิสติกใน R ดังนี้:

ced.logr <- glm(ced.del ~ cat + follows + factor(class), 
  family=binomial)

เอาท์พุทบาง:

> summary(ced.logr)
Call:
glm(formula = ced.del ~ cat + follows + factor(class),
    family = binomial("logit"))
Deviance Residuals:
Min            1Q    Median       3Q      Max
-3.24384 -1.34325   0.04954  1.01488  6.40094

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)   -1.31827    0.12221 -10.787 < 2e-16
catd          -0.16931    0.10032  -1.688 0.091459
catm           0.17858    0.08952   1.995 0.046053
catn           0.66672    0.09651   6.908 4.91e-12
catv          -0.76754    0.21844  -3.514 0.000442
followsP       0.95255    0.07400  12.872 < 2e-16
followsV       0.53408    0.05660   9.436 < 2e-16
factor(class)2 1.27045    0.10320  12.310 < 2e-16
factor(class)3 1.04805    0.10355  10.122 < 2e-16
factor(class)4 1.37425    0.10155  13.532 < 2e-16
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 958.66 on 51 degrees of freedom
Residual deviance: 198.63 on 42 degrees of freedom
AIC: 446.10
Number of Fisher Scoring iterations: 4

จากนั้นเขาจะพูดถึงรายละเอียดเกี่ยวกับวิธีตีความค่าสัมประสิทธิ์เปรียบเทียบแบบจำลองต่างๆและอื่น ๆ มีประโยชน์มากทีเดียว

อย่างไรก็ตามโมเดลมีความแปรปรวนเท่าไร หน้า Stata ในการถดถอยโลจิสติกพูดว่า:

ในทางเทคนิคแล้วไม่สามารถคำนวณแบบเดียวกับการถดถอยโลจิสติกได้เช่นเดียวกับในการถดถอย OLS pseudo-ในการถดถอยโลจิสติกถูกกำหนดเป็นโดยที่แสดงถึงโอกาสในการบันทึกสำหรับโมเดล "ค่าคงที่เท่านั้น" และเป็นโอกาสในการบันทึกสำหรับแบบจำลองเต็มรูปแบบด้วย ค่าคงที่และตัวทำนายR 2 1 - L 1R2R2 L0L11L1L0L0L1

ฉันเข้าใจสิ่งนี้ในระดับสูง แบบจำลองค่าคงที่เท่านั้นจะไม่มีพารามิเตอร์ใด ๆ (เฉพาะคำดักจับ) ความน่าจะเป็นบันทึกคือการวัดความใกล้ชิดของพารามิเตอร์ที่เหมาะสมกับข้อมูล ในความเป็นจริง Manning เรียงลำดับของคำแนะนำที่เบี่ยงเบนอาจจะL บางทีความเบี่ยงเบนเป็นโมฆะเป็นแบบคงที่เท่านั้นและส่วนเบี่ยงเบนเหลืออยู่คือของโมเดล? อย่างไรก็ตามฉันไม่ได้ใสกับมัน- 2 บันทึกL2logL2logL

ใครสามารถตรวจสอบวิธีการคำนวณหลอกจริงในโดยใช้ตัวอย่างนี้R2


5
หน้าคอมพิวเตอร์สถิติยูซีแอลมักจะยอดเยี่ยมได้ทำข้อผิดพลาดที่หายากที่นี่ - ไม่ควรมีวงเล็บใด ๆ ในการแสดงออกสำหรับหลอกคือมันควรจะเป็น1(ขออภัยที่ไม่ตอบคำถามของคุณขณะที่ฉันกำลังมุ่งหน้าไปนอน - ฉันแน่ใจว่ามีคนอื่นจะตอบคำถามนี้ก่อนที่ฉันจะตื่นพอที่จะทำเช่นนั้น) 1 - L 1 / L 0R21L1/L0
onestop


3
หน้านี้กล่าวถึงหลายหลอก -R ^ 2s
dfrankow

2
หมายเหตุ: คำถามที่เกี่ยวข้องไม่ชอบการปลอมแปลง R-2 ใด ๆ แต่ชอบการตรวจสอบความถูกต้องข้ามหรือการคาดการณ์การทดสอบ
dfrankow

คำตอบ:


49

อย่าลืมแพ็คเกจrmsโดย Frank Harrell คุณจะพบทุกสิ่งที่คุณต้องการสำหรับการติดตั้งและตรวจสอบความถูกต้องของ GLM

นี่คือตัวอย่างของเล่น (ที่มีตัวทำนายเพียงตัวเดียว):

set.seed(101)
n <- 200
x <- rnorm(n)
a <- 1
b <- -2
p <- exp(a+b*x)/(1+exp(a+b*x))
y <- factor(ifelse(runif(n)<p, 1, 0), levels=0:1)
mod1 <- glm(y ~ x, family=binomial)
summary(mod1)

อัตราผลตอบแทนนี้:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.8959     0.1969    4.55 5.36e-06 ***
x            -1.8720     0.2807   -6.67 2.56e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 258.98  on 199  degrees of freedom
Residual deviance: 181.02  on 198  degrees of freedom
AIC: 185.02

ตอนนี้ใช้lrmฟังก์ชั่น

require(rms)
mod1b <- lrm(y ~ x)

คุณจะได้รับดัชนีแบบจำลองมากมายรวมถึง Nagelkerkeด้วย:R2print(mod1b)

Logistic Regression Model

lrm(formula = y ~ x)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       

Obs           200    LR chi2      77.96    R2       0.445    C       0.852    
 0             70    d.f.             1    g        2.054    Dxy     0.705    
 1            130    Pr(> chi2) <0.0001    gr       7.801    gamma   0.705    
max |deriv| 2e-08                          gp       0.319    tau-a   0.322    
                                           Brier    0.150                     


          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept  0.8959 0.1969  4.55  <0.0001 
x         -1.8720 0.2807 -6.67  <0.0001 

ที่นี่และคำนวณเป็นที่ LR เป็นสถิติ (เปรียบเทียบทั้งสองรุ่นซ้อนกันคุณอธิบาย) ในขณะที่ตัวหารเป็นเพียงค่าสูงสุดสำหรับ 2 สำหรับรูปแบบที่สมบูรณ์แบบเราจะคาดหวังที่เป็น 1( 1 - exp ( - LR / n ) ) / ( 1 - exp ( - ( - 2 L 0 ) / n ) ) χ 2 R 2 LR = 2 L 0 R 2 = 1R2=0.445(1exp(LR/n))/(1exp((2L0)/n))χ2R2LR=2L0R2=1

ด้วยมือ,

> mod0 <- update(mod1, .~.-x)
> lr.stat <- lrtest(mod0, mod1)
> (1-exp(-as.numeric(lr.stat$stats[1])/n))/(1-exp(2*as.numeric(logLik(mod0)/n)))
[1] 0.4445742
> mod1b$stats["R2"]
       R2 
0.4445742 

Ewout W. Steyerberg พูดคุยเกี่ยวกับการใช้กับ GLM ในแบบจำลองการพยากรณ์ทางคลินิกในหนังสือของเขา(Springer, 2009, § 4.2.2 หน้า 58-60) โดยพื้นฐานแล้วความสัมพันธ์ระหว่างสถิติ LR และ Nagelkerke ของนั้นเป็นเส้นตรง (มันจะเป็นเส้นตรงมากกว่าและมีอุบัติการณ์ต่ำ) ตอนนี้ตามที่กล่าวไว้ในหัวข้อก่อนหน้าที่ฉันเชื่อมโยงในความคิดเห็นของฉันคุณสามารถใช้มาตรการอื่น ๆ เช่นสถิติซึ่งเทียบเท่ากับสถิติ AUC (นอกจากนี้ยังมีภาพประกอบที่ดีในการอ้างอิงด้านบนดูรูปที่ 4.6)R 2 cR2R2c


คุณช่วยอธิบายได้อย่างไรว่าคุณได้รับ. ฉันใช้ 1-exp (-77.96 / 200) แต่ฉันได้รับ. 323 ฉันทำอะไรผิด ขอบคุณ

2
อันไหนคือ Nagelkerke R2
JetLag

1
@JetLag ภายใต้ดัชนีการเลือกปฏิบัติ Nagelkerke นั้นย่อว่า R2 (เช่น 0.445) คุณสามารถตรวจสอบสิ่งนี้ได้โดยใช้ฟังก์ชั่น NagelkerkeR2 () จากแพ็คเกจ fmsb
Chernoff


7

R2

R2RM2=1lnL^fulllnL^nulllnL^fulllnL^full

R2

  1. deviance=2ln(Lfull)null.deviance=2ln(Lnull)

    pR2 = 1 - mod$deviance / mod$null.deviance # works for glm

R2

  1. ใช้ฟังก์ชั่น "logLik" ใน R และการกำหนด (ใช้ได้กับตัวอย่าง)

    mod_null <- glm(y~1, family = binomial, data = insample) 1- logLik(mod)/logLik(mod_null)

สิ่งนี้สามารถปรับเปลี่ยนได้เล็กน้อยเพื่อคำนวณ Pseudoกลุ่มตัวอย่างR2

ตัวอย่าง:

pseudo-R ที่ไม่อยู่ในกลุ่มตัวอย่าง

R2

Rp2=1Lest.outLnull.out,
Lest.outLnull.out

รหัส:

pred.out.link <- predict(mod, outSample, type = "link") mod.out.null <- gam(Default~1, family = binomial, data = outSample) pR2.out <- 1 - sum(outSample$y * pred.out.link - log(1 + exp(pred.out.link))) / logLik(mod.out.null)


deviance=2ln(Lfull)model1 <- glm(cbind(ncases, ncontrols) ~ agegp + tobgp * alcgp, data = esoph, family = binomial)model1$deviance-2*logLik(model1)

6

ถ้าความเบี่ยงเบนเป็นสัดส่วนในการบันทึกความน่าจะเป็นและหนึ่งใช้คำจำกัดความ (ดูตัวอย่างของ McFadden ที่นี่ )

pseudo R^2 = 1 - L(model) / L(intercept)

R21198.63958.66

คำถามคือมีการรายงานสัดส่วนความเบี่ยงเบนในการเข้าสู่ระบบโอกาส?


3
pseudo-R ^ 2 นี้ไม่เห็นด้วยเลยกับคำตอบของ Nagelkerke R ^ 2 ของ @ chl
dfrankow

Deviance ถูกกำหนดเป็น -2 * LL เมื่อฉันอยู่ในโรงเรียน
DWIN

@dfrankow ไม่เห็นด้วยเพราะ Nagelkerke เป็นมาตรฐานของ Cox และ Snell R2 ซึ่งแตกต่างจาก McFaddens R2
ลิน

0

R2R2=1llfullllconstantllfullllconstant

R2R2=1i(yiy^i)2i(yiy¯train)2i(yiy¯train)2y¯traini(yiβ0)2β^0=y¯trainR2R2

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