วิธีการจัดการกับการแยกที่สมบูรณ์แบบในการถดถอยโลจิสติก?


163

หากคุณมีตัวแปรที่แยกศูนย์และตัวแปรในเป้าหมายได้อย่างสมบูรณ์ R จะให้ข้อความเตือน "การแยกแบบสมบูรณ์แบบหรือกึ่งสมบูรณ์แบบ" ดังต่อไปนี้:

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

เรายังได้โมเดล แต่การประมาณค่าสัมประสิทธิ์สูงเกินจริง

คุณจัดการกับสิ่งนี้ได้อย่างไรในทางปฏิบัติ?



1
คำถามและการสาธิตที่เกี่ยวข้องกับการทำให้เป็นระเบียบที่นี่
Haitao Du

คำตอบ:


100

วิธีการแก้ปัญหานี้คือการใช้รูปแบบของการถดถอยที่ถูกลงโทษ ในความเป็นจริงนี่คือเหตุผลดั้งเดิมที่บางส่วนของแบบฟอร์มการถดถอยที่ถูกลงโทษได้รับการพัฒนา (แม้ว่าพวกเขาจะกลายเป็นคุณสมบัติที่น่าสนใจอื่น ๆ

ติดตั้งและโหลดแพ็คเกจ glmnet ใน R และคุณพร้อมที่จะไป ด้านหนึ่งที่เป็นมิตรกับผู้ใช้น้อยกว่าของ glmnet คือคุณสามารถป้อนเมทริกซ์ได้เท่านั้นไม่ใช่สูตรที่เราคุ้นเคย อย่างไรก็ตามคุณสามารถดู model.matrix และชอบสร้าง matrix นี้จาก data.frame และสูตร ...

ตอนนี้เมื่อคุณคาดหวังว่าการแยกที่สมบูรณ์แบบนี้ไม่ได้เป็นเพียงผลพลอยได้จากตัวอย่างของคุณ แต่อาจเป็นจริงในประชากรคุณไม่ต้องการจัดการสิ่งนี้โดยเฉพาะ: ใช้ตัวแปรแยกนี้เพียงเพื่อเป็นตัวทำนายผลของคุณเท่านั้นไม่ใช่ จ้างรูปแบบใด ๆ


20
คุณยังสามารถใช้สูตรอินเตอร์เฟสสำหรับ glmnet ผ่านแพ็คเกจ caret
ซัค

"ตอนนี้เมื่อคุณคาดหวัง ... " คำถามเกี่ยวกับเรื่องนี้ ฉันมีกรณีศึกษา / การควบคุมกำลังดูความสัมพันธ์กับ microbiome นอกจากนี้เรายังมีการรักษาที่พบได้ในเกือบทุกกรณี อย่างไรก็ตามเราคิดว่าการรักษาอาจส่งผลต่อ microbiome นี่เป็นตัวอย่างของข้อแม้ของคุณหรือไม่ สมมุติฐานว่าเราสามารถค้นหาผู้ป่วยจำนวนมากที่ไม่ได้ใช้การรักษาหากเราพยายาม แต่เรามีสิ่งที่เรามี
หยุดงาน

142

คุณมีหลายทางเลือก:

  1. ลบอคติบางส่วน

    (a) โดยการลงโทษโอกาสตามคำแนะนำของ @ Nick แพคเกจlogistfใน R หรือFIRTHตัวเลือกใน SAS PROC LOGISTICใช้วิธีการที่เสนอใน Firth (1993), "การลดความลำเอียงของการประเมินความเป็นไปได้สูงสุด", Biometrika , 80 , 1; ซึ่งจะลบอคติการสั่งซื้อครั้งแรกจากการประมาณการความน่าจะเป็นสูงสุด (ที่นี่ @Gavin แนะนำbrglmแพคเกจที่ฉันไม่คุ้นเคย แต่ฉันรวบรวมมันใช้วิธีการที่คล้ายกันสำหรับฟังก์ชั่นลิงค์ที่ไม่ใช่แบบบัญญัติเช่น probit)

    (b) โดยใช้ค่ามัธยฐานที่ไม่เอนเอียงในการถดถอยโลจิสติกตามเงื่อนไขที่แน่นอน แพคเกจelrmหรือLogistixใน R หรือEXACTคำสั่งใน PROC LOGISTICSAS

  2. ยกเว้นกรณีที่หมวดหมู่หรือค่าพยากรณ์ที่ทำให้เกิดการแยกเกิดขึ้น สิ่งเหล่านี้อาจอยู่นอกขอบเขตของคุณ หรือควรมีการสอบสวนเพิ่มเติมที่มุ่งเน้นต่อไป (แพ็คเกจ R safeBinaryRegressionมีประโยชน์สำหรับการค้นหา)

  3. จำลองโมเดลอีกครั้ง โดยทั่วไปนี่คือสิ่งที่คุณต้องทำไว้ล่วงหน้าหากคุณคิดเพราะมันซับซ้อนเกินไปสำหรับขนาดตัวอย่างของคุณ

    (a) ถอดตัวทำนายออกจากตัวแบบ Dicey ด้วยเหตุผลที่ได้รับจาก @Simon: "คุณกำลังลบตัวทำนายที่อธิบายการตอบสนองได้ดีที่สุด"

    (b) โดยการยุบหมวดหมู่ของผู้ทำนาย / การแบ่งค่าของผู้ทำนาย เฉพาะในกรณีนี้ทำให้รู้สึก

    (c) การแสดงตัวทำนายอีกครั้งเป็นปัจจัยเชิงไขว้สองตัว (หรือมากกว่า) โดยไม่มีการโต้ตอบ เฉพาะในกรณีนี้ทำให้รู้สึก

  4. ใช้การวิเคราะห์แบบเบย์ตาม @ Manoel ของข้อเสนอแนะ แม้ว่ามันจะดูเหมือนว่าไม่น่าที่คุณต้องการเพียงเพราะการแยกมูลค่าการพิจารณาบนกระดาษ merits.The คนอื่น ๆ เขาแนะนำคือGelman, et al (2008), "เริ่มต้นให้ข้อมูลที่ไม่ค่อยกระจายก่อนสำหรับโลจิสติกและการถดถอยรุ่นอื่น ๆ" แอน Appl สถิติ , 2 , 4 : ค่าเริ่มต้นในคำถามเป็นอิสระ Cauchy ก่อนสำหรับแต่ละสัมประสิทธิ์ด้วยค่าเฉลี่ยของศูนย์ & ระดับของ ; จะใช้หลังจากมาตรฐานทำนายอย่างต่อเนื่องทั้งหมดจะมีค่าเฉลี่ยอยู่ที่ศูนย์และค่าเบี่ยงเบนมาตรฐานของ{2} หากคุณสามารถอธิบายให้นักบวชที่ให้ข้อมูลอย่างยิ่งดีกว่านั้นมาก 15212

  5. ไม่ทำอะไร. (แต่คำนวณช่วงความเชื่อมั่นตามความน่าจะเป็นของโปรไฟล์เนื่องจากการประมาณการ Wald ของข้อผิดพลาดมาตรฐานจะผิดพลาดมาก) ตัวเลือกที่มักมองเกิน หากจุดประสงค์ของแบบจำลองเป็นเพียงการอธิบายสิ่งที่คุณได้เรียนรู้เกี่ยวกับความสัมพันธ์ระหว่างตัวทำนายและการตอบสนองไม่มีความละอายในการระบุช่วงความมั่นใจสำหรับอัตราต่อรองของการพูด 2.3 ขึ้นไป (อันที่จริงแล้วมันอาจดูแปลกที่จะอ้างช่วงความเชื่อมั่นโดยอิงจากการประมาณการที่ไม่ลำเอียงซึ่งไม่รวมอัตราส่วนอัตราต่อรองที่ดีที่สุดที่ได้รับการสนับสนุนจากข้อมูล) ปัญหาเกิดขึ้นเมื่อคุณพยายามคาดการณ์โดยใช้การประมาณจุด

  6. ใช้รูปแบบการถดถอยโลจิสติกซ่อนอยู่ตามที่อธิบายไว้ใน Rousseeuw & Christmann (2003), "ความทนทานกับการแยกและค่าผิดปกติในการถดถอยโลจิสติก" คำนวณสถิติและการวิเคราะห์ข้อมูล , 43 , 3, และดำเนินการในแพคเกจ R HLR (@ user603 แนะนำสิ่งนี้ ) ฉันยังไม่ได้อ่านบทความ แต่พวกเขาพูดในเชิงนามธรรมว่า "มีการเสนอแบบจำลองที่มีความเป็นทั่วไปมากกว่าเล็กน้อยซึ่งการตอบสนองที่สังเกตนั้นเกี่ยวข้องอย่างยิ่ง แต่ไม่เท่ากับการตอบสนองที่แท้จริงที่ไม่สามารถสังเกตเห็นได้" ฉันอาจไม่ควรใช้วิธีการนี้เว้นแต่ว่าจะเป็นไปได้

  7. "เปลี่ยนไม่กี่ข้อสังเกตสุ่มเลือก 1-0 หรือ 0-1 ระหว่างตัวแปร exhibiting แยกสมบูรณ์": @ RobertF ของความคิดเห็น คำแนะนำนี้ดูเหมือนว่าจะเกิดขึ้นจากการแยกตัวเป็นปัญหาต่อกันมากกว่าเป็นอาการของความขัดสนของข้อมูลในข้อมูลซึ่งอาจทำให้คุณชอบวิธีอื่นในการประมาณค่าความน่าจะเป็นสูงสุดหรือเพื่อ จำกัด การอนุมานที่คุณสามารถทำได้ ความแม่นยำที่สมเหตุสมผล - แนวทางที่มีข้อดีของตนเอง & ไม่ใช่แค่ "แก้ไข" เพื่อแยก (นอกเหนือจากการเฉพาะกิจอย่างไร้เหตุผลมันก็ไม่อร่อยสำหรับนักวิเคราะห์ส่วนใหญ่ที่ถามคำถามเดียวกันกับข้อมูลเดียวกันการตั้งสมมติฐานเดียวกันควรให้คำตอบที่แตกต่างกันเนื่องจากผลของการโยนเหรียญหรืออะไรก็ตาม)


1
@Scortchi มีตัวเลือก (นอกรีต) อีก สิ่งที่เกี่ยวกับการเปลี่ยนการสังเกตแบบสุ่มไม่กี่เลือกจาก 1 ถึง 0 หรือ 0 เป็น 1 ระหว่างตัวแปรที่แสดงการแยกโดยสมบูรณ์
RobertF

@RobertF: ขอบคุณ! ฉันไม่ได้คิดถึงเรื่องนี้ - หากคุณมีการอ้างอิงใด ๆ เกี่ยวกับการแสดงของฉันฉันจะขอบคุณ คุณเจอคนที่ใช้มันในทางปฏิบัติหรือไม่?
Scortchi

@Scortchi - ไม่มีการอ้างอิงถึงนักวิจัยที่เพิ่มข้อมูลเทียมเพื่อกำจัดการแยกแบบสมบูรณ์ แต่ฉันไม่พบบทความใด ๆ เกี่ยวกับการปรับเปลี่ยนแบบเลือกของข้อมูล ฉันไม่รู้ว่าวิธีการนี้มีประสิทธิภาพเพียงใด
RobertF

1
@tatami: ไม่ทุกโปรแกรม (มาก?) เตือนเกี่ยวกับการแยกต่อ se ซึ่งอาจเป็นเรื่องยากที่จะเห็นเมื่อมันอยู่ในการรวมกันของตัวแปรหลายอย่างเชิงเส้น แต่เกี่ยวกับความล้มเหลวของการบรรจบ & / หรือค่าติดตั้งใกล้กับศูนย์หรือหนึ่ง - ฉันต้องการ ตรวจสอบเหล่านี้เสมอ
Scortchi

2
@Scortchi: สรุปที่ดีมากในคำตอบของคุณ ส่วนตัวผมชอบวิธีการแบบเบย์ แต่ก็คุ้มค่าการกล่าวขวัญการวิเคราะห์ที่สวยงามของปรากฏการณ์ทั่วไปจาก frequentist จุดของมุมมองในprojecteuclid.org/euclid.ejs/1239716414 ผู้เขียนเสนอช่วงความเชื่อมั่นด้านเดียวที่สามารถใช้ได้แม้ในกรณีที่มีการแยกอย่างสมบูรณ์ในการถดถอยโลจิสติก
สีฟ้า

55

นี่คือการขยายคำตอบของ Scortchi และ Manoel แต่เนื่องจากคุณดูเหมือนจะใช้ RI คิดว่าฉันต้องการส่งรหัสบางอย่าง :)

ฉันเชื่อว่าวิธีที่ง่ายที่สุดและตรงไปตรงมาที่สุดในการแก้ไขปัญหาของคุณคือการใช้การวิเคราะห์แบบเบย์พร้อมสมมติฐานที่ไม่ได้ให้ข้อมูลตามที่เสนอโดย Gelman et al (2008) ตามที่ Scortchi กล่าวไว้ Gelman แนะนำให้ใส่ Cauchy ก่อนด้วยค่ามัธยฐาน 0.0 และสเกล 2.5 ในแต่ละสัมประสิทธิ์ (ปรับให้มีค่าเฉลี่ย 0.0 และ SD เท่ากับ 0.5) สิ่งนี้จะทำให้สัมประสิทธิ์เป็นปกติและดึงเข้าหาศูนย์เล็กน้อย ในกรณีนี้มันเป็นสิ่งที่คุณต้องการ เนื่องจากมีหางที่กว้างมาก Cauchy ยังอนุญาตให้มีค่าสัมประสิทธิ์ขนาดใหญ่ (ตรงข้ามกับ Normal Tailed สั้น) จาก Gelman:

ป้อนคำอธิบายรูปภาพที่นี่

จะทำการวิเคราะห์นี้อย่างไร? ใช้bayesglmฟังก์ชั่นในแพ็คเกจแขนที่ใช้การวิเคราะห์นี้!

library(arm)

set.seed(123456)
# Faking some data where x1 is unrelated to y
# while x2 perfectly separates y.
d <- data.frame(y  =  c(0,0,0,0, 0, 1,1,1,1,1),
                x1 = rnorm(10),
                x2 = sort(rnorm(10)))

fit <- glm(y ~ x1 + x2, data=d, family="binomial")

## Warning message:
## glm.fit: fitted probabilities numerically 0 or 1 occurred 

summary(fit)
## Call:
## glm(formula = y ~ x1 + x2, family = "binomial", data = d)
##
## Deviance Residuals: 
##       Min          1Q      Median          3Q         Max  
## -1.114e-05  -2.110e-08   0.000e+00   2.110e-08   1.325e-05  
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)    -18.528  75938.934       0        1
## x1              -4.837  76469.100       0        1
## x2              81.689 165617.221       0        1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1.3863e+01  on 9  degrees of freedom
## Residual deviance: 3.3646e-10  on 7  degrees of freedom
## AIC: 6
## 
## Number of Fisher Scoring iterations: 25

ไม่ได้ผลดี ... ตอนนี้เวอร์ชั่น Bayesian:

fit <- bayesglm(y ~ x1 + x2, data=d, family="binomial")
display(fit)
## bayesglm(formula = y ~ x1 + x2, family = "binomial", data = d)
##             coef.est coef.se
## (Intercept) -1.10     1.37  
## x1          -0.05     0.79  
## x2           3.75     1.85  
## ---
## n = 10, k = 3
## residual deviance = 2.2, null deviance = 3.3 (difference = 1.1)

ง่ายสุด ๆ

อ้างอิง

Gelman et al (2008), "การกระจายก่อนหน้านี้ข้อมูลเริ่มต้นอ่อนสำหรับโลจิสติกและรูปแบบการถดถอยอื่น ๆ " แอน Appl Stat., 2, 4 http://projecteuclid.org/euclid.aoas/1231424214


6
ไม่ง่ายเกินไป คุณช่วยอธิบายสิ่งที่คุณเพิ่งทำไปได้ไหม ก่อนหน้านั้นbayesglmใช้อะไร หากการประมาณค่า ML นั้นเทียบเท่ากับแบบเบย์ก่อนหน้านี้นักบวชที่ไม่ให้ข้อมูลช่วยอะไรได้บ้าง?
StasK

5
เพิ่มข้อมูลเพิ่มเติม! ก่อนหน้านี้ไม่ชัดเจน แต่ไม่แบน มันมีอิทธิพลบางอย่างเนื่องจากมันทำให้การประมาณเป็นปกติและดึงพวกเขาไปทาง 0.0 เล็กน้อยซึ่งเป็นสิ่งที่ฉันเชื่อว่าคุณต้องการในกรณีนี้
Rasmus Bååth

> m = bayesglm (จับคู่ ~., ตระกูล = binomial (ลิงก์ = 'logit'), data = df) ข้อความเตือน: ความน่าจะเป็นที่ติดตั้งเป็นตัวเลข 0 หรือ 1 เกิดขึ้น ไม่ดี!
คริส

ในฐานะผู้เริ่มต้นให้ลองปรับมาตรฐานให้แข็งแรงขึ้นเล็กน้อยโดยการเพิ่มprior.dfค่าเริ่มต้นที่1.0และ / หรือลดprior.scaleค่าเริ่มต้นซึ่ง2.5อาจเริ่มลอง:m=bayesglm(match ~. , family = binomial(link = 'logit'), data = df, prior.df=5)
Rasmus Bååth

1
เราทำอะไรกันแน่เมื่อเราเพิ่ม before.df ในแบบจำลอง มีข้อ จำกัด ว่าเราต้องการไปมากแค่ไหน? ความเข้าใจของฉันคือว่ามัน จำกัด รูปแบบเพื่อให้การบรรจบกับประมาณการผิดพลาดที่ถูกต้อง?
hamilthj

7

หนึ่งในคำอธิบายที่ละเอียดที่สุดของปัญหา "การแยกแบบกึ่งสมบูรณ์" ในความเป็นไปได้สูงสุดคือบทความของ Paul Allison เขาเขียนเกี่ยวกับซอฟต์แวร์ SAS แต่ปัญหาที่เขากล่าวถึงนั้นสามารถแก้ไขได้กับซอฟต์แวร์ใด ๆ :

  • การแยกอย่างสมบูรณ์เกิดขึ้นเมื่อใดก็ตามที่ฟังก์ชันเชิงเส้นของ x สามารถสร้างการทำนายที่สมบูรณ์แบบของ y

  • การแยกแบบกึ่งสมบูรณ์เกิดขึ้นเมื่อ (a) มีเวกเตอร์สัมประสิทธิ์bเช่นbxi ≥ 0เมื่อใดก็ตามที่yi = 1 , และbxi ≤ 0 * เมื่อใดก็ตามที่ ** yi = 0และความเสมอภาคนี้มีอย่างน้อยหนึ่งกรณีในแต่ละหมวดหมู่ของ ตัวแปรตาม กล่าวอีกนัยหนึ่งก็คือในกรณีที่ง่ายที่สุดสำหรับตัวแปรอิสระสองขั้วในการถดถอยแบบโลจิสติกหากมีศูนย์ในตาราง 2 × 2 ที่เกิดขึ้นจากตัวแปรนั้นและตัวแปรตามนั้นค่าประมาณ ML สำหรับสัมประสิทธิ์การถดถอยจะไม่มีอยู่

แอลลิสันกล่าวถึงวิธีการแก้ปัญหาต่าง ๆ ที่กล่าวถึงแล้วรวมถึงการลบตัวแปรปัญหาการยุบหมวดหมู่การไม่ทำอะไรเลยใช้ประโยชน์จากการถดถอยโลจิสติกที่แน่นอนการประมาณแบบเบย์และการประเมินความเป็นไปได้สูงสุด

http://www2.sas.com/proceedings/forum2008/360-2008.pdf


3

warning

ด้วยข้อมูลที่สร้างขึ้นตามสายของ

x <- seq(-3, 3, by=0.1)
y <- x > 0
summary(glm(y ~ x, family=binomial))

มีการเตือน:

Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

ซึ่งเห็นได้ชัดมากสะท้อนถึงการพึ่งพาที่สร้างไว้ในข้อมูลเหล่านี้

ใน R การทดสอบ Wald พบได้ด้วยsummary.glmหรือwaldtestในlmtestแพ็คเกจ การทดสอบอัตราส่วนความน่าจะเป็นจะดำเนินการกับanovaหรือlrtestในlmtestแพคเกจ ในทั้งสองกรณีเมทริกซ์ข้อมูลนั้นมีค่าไม่ จำกัด และไม่มีการอนุมาน แต่ R ไม่ผลิตออก แต่คุณไม่สามารถไว้วางใจได้ การอนุมานที่โดยทั่วไป R สร้างในกรณีเหล่านี้มีค่า p ใกล้กับค่ามาก นี่เป็นเพราะการสูญเสียความแม่นยำใน OR เป็นลำดับของขนาดที่เล็กกว่าซึ่งการสูญเสียความแม่นยำในเมทริกซ์ความแปรปรวนร่วม - ความแปรปรวนร่วม

วิธีแก้ปัญหาบางอย่างระบุไว้ที่นี่:

ใช้เครื่องมือประมาณการแบบขั้นตอนเดียว

มีทฤษฎีมากมายที่สนับสนุนอคติต่ำประสิทธิภาพและความสามารถในการสรุปทั่วไปของเครื่องมือประมาณค่าแบบขั้นตอนเดียว มันง่ายที่จะระบุตัวประมาณค่าแบบขั้นตอนเดียวใน R และผลลัพธ์มักจะเป็นที่นิยมมากสำหรับการทำนายและการอนุมาน และรุ่นนี้จะไม่เบี่ยงเบนเพราะตัววนซ้ำ (นิวตัน - ราฟสัน) ก็ไม่มีโอกาสทำเช่นนั้น!

fit.1s <- glm(y ~ x, family=binomial, control=glm.control(maxit=1))
summary(fit.1s)

ให้:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.03987    0.29569  -0.135    0.893    
x            1.19604    0.16794   7.122 1.07e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

ดังนั้นคุณสามารถเห็นการคาดการณ์สะท้อนทิศทางของแนวโน้ม และการอนุมานนั้นเป็นการชี้นำอย่างสูงถึงแนวโน้มที่เราเชื่อว่าเป็นจริง

ป้อนคำอธิบายรูปภาพที่นี่

ทำการทดสอบคะแนน

คะแนน (หรือราว) สถิติที่แตกต่างจากอัตราส่วนความน่าจะเป็นและสถิติ Wald ไม่จำเป็นต้องมีการประเมินความแปรปรวนภายใต้สมมติฐานทางเลือก เราพอดีกับโมเดลภายใต้ null:

mm <- model.matrix( ~ x)
fit0 <- glm(y ~ 1, family=binomial)
pred0 <- predict(fit0, type='response')
inf.null <- t(mm) %*% diag(binomial()$variance(mu=pred0)) %*% mm
sc.null <- t(mm) %*% c(y - pred0)
score.stat <- t(sc.null) %*% solve(inf.null) %*% sc.null ## compare to chisq
pchisq(score.stat, 1, lower.tail=F)

χ2

> pchisq(scstat, df=1, lower.tail=F)
             [,1]
[1,] 1.343494e-11

ในทั้งสองกรณีคุณมีการอนุมานสำหรับหรือไม่มีที่สิ้นสุด

และใช้ค่ามัธยฐานที่ไม่เอนเอียงสำหรับช่วงความเชื่อมั่น

คุณสามารถสร้างค่ามัธยฐานที่ไม่เอนเอียงและไม่มีเอกพจน์ 95% CI สำหรับอัตราส่วนอัตราต่อรองที่ไม่มีที่สิ้นสุดโดยใช้การประมาณค่ามัธยฐานแบบไม่ลำเอียง แพ็คเกจepitoolsใน R สามารถทำได้ และฉันยกตัวอย่างของการใช้ตัวประมาณนี้ที่นี่: ช่วงความเชื่อมั่นสำหรับการสุ่มตัวอย่างเบอร์นูลลี


2
นี่เป็นสิ่งที่ดี แต่ฉันมีข้อสงสัยบางอย่าง: (1) การทดสอบอัตราส่วนความน่าจะเป็นไม่ได้ใช้เมทริกซ์ข้อมูล มันเป็นเพียงการทดสอบของวอลด์เท่านั้นที่จะทำได้ & ที่ล้มเหลวอย่างรุนแรงในที่ที่มีการพลัดพราก (2) ฉันไม่คุ้นเคยกับเครื่องมือประมาณการแบบขั้นตอนเดียว แต่การประเมินความชันที่นี่ดูเหมือนจะต่ำอย่างน่าหัวเราะ (3) ช่วงความมั่นใจไม่ได้เป็นค่ามัธยฐาน สิ่งที่คุณเชื่อมโยงไปยังในส่วนนั้นคือช่วงความเชื่อมั่นกลาง p (4) คุณสามารถรับช่วงความมั่นใจได้โดยการสลับ LR หรือการทดสอบคะแนน ...
Scortchi

... (5) คุณสามารถทำการทดสอบคะแนนใน R โดยให้อาร์กิวเมนต์test="Rao"แก่anovaฟังก์ชัน (อืม, สองคนสุดท้ายเป็นโน้ต, ไม่ใช่ quibbles)
Scortchi

@scortchi เป็นการดีที่จะรู้ว่า anova มีการทดสอบคะแนนเริ่มต้น! บางทีการใช้งานด้วยมืออาจมีประโยชน์ CIs ไม่ใช่ค่าเฉลี่ยที่เป็นกลาง แต่ CIs สำหรับตัวประมาณค่าที่เป็นกลางจะให้การอนุมานที่สอดคล้องกันสำหรับพารามิเตอร์ขอบเขต mid p เป็นตัวประมาณค่า p สามารถแปลงเป็นอัตราต่อรอง b / c มันไม่แปรเปลี่ยนกับการแปลงแบบหนึ่งต่อหนึ่ง การทดสอบ LR สอดคล้องกับพารามิเตอร์ขอบเขตหรือไม่?
AdamO

มีเพียงสมมติฐานว่างเท่านั้นที่จะต้องไม่มีพารามิเตอร์ที่ขอบเขตสำหรับทฤษฎีบทของวิลก์สที่จะใช้แม้ว่าการทดสอบคะแนน & LR นั้นเป็นค่าประมาณในกลุ่มตัวอย่าง จำกัด
Scortchi

2

ระมัดระวังกับข้อความเตือนนี้จากอาร์ลองดูที่นี้บล็อกโพสต์โดยแอนดรูว์เกลแมนและคุณจะเห็นว่ามันไม่ได้เป็นปัญหาเสมอของการแยกที่สมบูรณ์แบบ glmแต่บางครั้งมีข้อผิดพลาด ดูเหมือนว่าหากค่าเริ่มต้นอยู่ไกลจากการประเมินความเป็นไปได้สูงสุดมันจะระเบิดขึ้น ดังนั้นให้ตรวจสอบกับซอฟต์แวร์อื่นก่อนเช่น Stata

หากคุณมีปัญหานี้จริง ๆ คุณอาจลองใช้การสร้างแบบจำลองแบบเบย์กับผู้ให้ข้อมูล

แต่ในทางปฏิบัติฉันเพิ่งกำจัดตัวทำนายที่ทำให้เกิดปัญหาเพราะฉันไม่รู้วิธีเลือกข้อมูลก่อน แต่ฉันเดาว่ามีบทความโดย Gelman เกี่ยวกับการใช้ข้อมูลก่อนที่คุณจะมีปัญหาของปัญหาการแยกที่สมบูรณ์แบบนี้ แค่ google มัน บางทีคุณควรลองดู


8
ปัญหาของการลบตัวทำนายคือคุณกำลังลบตัวทำนายที่อธิบายการตอบสนองได้ดีที่สุดซึ่งมักเป็นสิ่งที่คุณตั้งใจจะทำ! ฉันจะยืนยันว่าสิ่งนี้เหมาะสมถ้าคุณใช้โมเดลของคุณมากเกินไปเช่นโดยการโต้ตอบที่ซับซ้อนมากเกินไป
Simon Byrne

4
ไม่ใช่ข้อบกพร่อง แต่เป็นปัญหาของการประมาณค่าเริ่มต้นที่ไกลเกินไปจาก MLE ซึ่งจะไม่เกิดขึ้นหากคุณไม่ได้ลองเลือกด้วยตนเอง
Scortchi

ฉันเข้าใจสิ่งนี้ แต่ฉันคิดว่านี่เป็นข้อบกพร่องในอัลกอริทึม
Manoel Galdino

5
ฉันไม่ต้องการพูดเล่นเกี่ยวกับคำจำกัดความของ 'บั๊ก' แต่พฤติกรรมนั้นไม่อาจหยั่งรู้หรือไม่สามารถแยกได้ใน base R - คุณไม่จำเป็นต้อง "ตรวจสอบกับซอฟต์แวร์อื่น" หากคุณต้องการจัดการกับปัญหาที่ไม่รวมกันโดยอัตโนมัติglm2แพคเกจจะดำเนินการตรวจสอบว่าโอกาสที่เพิ่มขึ้นจริงในแต่ละขั้นตอนการให้คะแนนและลดขนาดของขั้นตอนลงถ้าไม่ใช่
Scortchi

3
มี (บน CRAN) แพ็คเกจ R safeBinaryRegression ซึ่งออกแบบมาเพื่อวินิจฉัยและแก้ไขปัญหาดังกล่าวโดยใช้วิธีการปรับให้เหมาะสมเพื่อ ckeck แน่นอนว่ามีการแยกหรือแยก ลองมัน!
kjetil b halvorsen

2

ฉันไม่แน่ใจว่าฉันเห็นด้วยกับข้อความในคำถามของคุณ

ฉันคิดว่าข้อความเตือนหมายถึงสำหรับระดับX ที่สังเกตได้ในข้อมูลของคุณความน่าจะเป็นที่พอดีคือ 0 หรือ 1 ในคำอื่น ๆ ที่ความละเอียดจะแสดงเป็น 0 หรือ 1

คุณสามารถเรียกใช้predict(yourmodel,yourdata,type='response')และคุณจะพบ 0 หรือ / และ 1 ที่นั่นตามที่คาดการณ์ความน่าจะเป็น

เป็นผลให้ฉันคิดว่ามันใช้ได้เพียงใช้ผลลัพธ์


-1

ฉันเข้าใจว่านี่เป็นโพสต์เก่า แต่ฉันจะยังคงตอบคำถามนี้ต่อไปเพราะฉันได้พยายามมาหลายวันแล้วและสามารถช่วยเหลือผู้อื่นได้

การแยกอย่างสมบูรณ์เกิดขึ้นเมื่อตัวแปรที่คุณเลือกให้พอดีกับแบบจำลองสามารถแยกแยะความแตกต่างระหว่าง 0 ถึง 1 หรือใช่และไม่ใช่ วิธีการทั้งหมดของวิทยาศาสตร์ข้อมูลขึ้นอยู่กับการประมาณความน่าจะเป็น แต่มันล้มเหลวในกรณีนี้

ขั้นตอนการแก้ไข: -

  1. ใช้ bayesglm () แทน glm () เมื่อในกรณีที่ความแปรปรวนระหว่างตัวแปรต่ำ

  2. บางครั้งการใช้ (maxit =” ค่าตัวเลขบางตัว”) พร้อมกับ bayesglm () สามารถช่วยได้

3. การตรวจสอบตัวแปรที่คุณเลือกและสำคัญที่สุดสำหรับการปรับแบบจำลองนั้นจะต้องมีตัวแปรที่มีค่าความหลากหลายหลายค่าพร้อมตัวแปร Y (ค่า outout) สูงมากทิ้งตัวแปรนั้นจากแบบจำลองของคุณ

ในกรณีของฉันฉันมีข้อมูลปั่นโทรคมนาคมเพื่อทำนายปั่นสำหรับข้อมูลการตรวจสอบ ฉันมีตัวแปรในข้อมูลการฝึกอบรมซึ่งสามารถแยกความแตกต่างระหว่างใช่และไม่ใช่ หลังจากวางลงฉันจะได้แบบที่ถูกต้อง ยิ่งไปกว่านั้นคุณสามารถใช้ stepwise (พอดี) เพื่อทำให้แบบจำลองของคุณแม่นยำยิ่งขึ้น


2
ฉันไม่เห็นว่าคำตอบนี้เพิ่มการสนทนามากนัก วิธีการแบบเบย์นั้นครอบคลุมอย่างทั่วถึงในคำตอบก่อนหน้านี้การลบคำทำนาย "ที่มีปัญหา" ก็ถูกกล่าวถึงแล้วเช่นกัน (และหมดกำลังใจ) การเลือกตัวแปรแบบขั้นตอนไม่ค่อยเป็นความคิดที่ดีเท่าที่ฉันรู้
einar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.