ฉันสามารถคำนวณเพียร์สันสถิติทดสอบสำหรับการขาดความพอดีกับรูปแบบการถดถอยโลจิสติกใน R?


10

อัตราส่วนความน่าจะเป็น (การเบี่ยงเบน aka)สถิติและการทดสอบแบบไม่พอดี (หรือความดีของความพอดี) นั้นค่อนข้างตรงไปตรงมาที่จะได้รับแบบจำลองการถดถอยแบบโลจิสติก (พอดีกับการใช้งาน) ในอาร์ ง่ายที่จะให้จำนวนเซลล์บางส่วนสิ้นสุดต่ำพอที่การทดสอบจะไม่น่าเชื่อถือ วิธีหนึ่งในการตรวจสอบความน่าเชื่อถือของการทดสอบอัตราส่วนความน่าจะเป็นสำหรับการขาดความพอดีคือการเปรียบเทียบสถิติการทดสอบและP- value กับการทดสอบไคสแควร์ของ Pearson (หรือ ) การทดสอบแบบไม่พอดีG2glm(..., family = binomial)χ2

ทั้งglmวัตถุและsummary()วิธีการรายงานสถิติการทดสอบสำหรับการทดสอบไคสแควร์ของเพียร์สันสำหรับการขาดความพอดี ในการค้นหาของฉันสิ่งเดียวที่ฉันคิดไว้คือchisq.test()ฟังก์ชั่น (ในstatsแพ็คเกจ): เอกสารประกอบของมันบอกว่า " chisq.testทำการทดสอบตารางฉุกเฉินแบบไคสแควร์และการทดสอบความดีแบบพอดี" อย่างไรก็ตามเอกสารประกอบกระจัดกระจายในวิธีการทดสอบดังกล่าว:

ถ้าxเป็นเมทริกซ์ที่มีหนึ่งแถวหรือคอลัมน์หรือถ้าxเป็นเวกเตอร์และyไม่ได้ให้ไว้จะทำการทดสอบความดี - พอดี ( xถือว่าเป็นตารางฉุกเฉินหนึ่งมิติ) รายการของxต้องเป็นจำนวนเต็มที่ไม่เป็นลบ ในกรณีนี้สมมติฐานที่ทดสอบคือความน่าจะเป็นของประชากรเท่ากับpหรือไม่เท่ากันทั้งหมดหากpไม่ได้รับ

ฉันคิดว่าคุณสามารถใช้yส่วนประกอบของglmวัตถุสำหรับข้อโต้แย้งของx chisq.testอย่างไรก็ตามคุณไม่สามารถใช้fitted.valuesองค์ประกอบของglmวัตถุสำหรับการpโต้แย้งchisq.testเพราะคุณจะได้รับข้อผิดพลาด: " probabilities must sum to 1."

อย่างน้อยฉันจะ (ใน R) คำนวณสถิติการทดสอบPearsonสำหรับการขาดความฟิตโดยไม่ต้องทำตามขั้นตอนด้วยตนเองได้อย่างไรχ2

คำตอบ:


13

ผลรวมของส่วนที่เหลือของเพียร์สันกำลังสองเท่ากับสถิติการทดสอบของเพียร์สันสำหรับการขาดความพอดี ดังนั้นหากรูปแบบการติดตั้งของคุณ (เช่นวัตถุ) ถูกเรียกใช้รหัสต่อไปนี้จะคืนค่าสถิติการทดสอบ:χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

ดูเอกสารประกอบresiduals.glmสำหรับข้อมูลเพิ่มเติมรวมถึงสิ่งที่เหลืออยู่อื่น ๆ ตัวอย่างเช่นรหัส

sum(residuals(logistic.fit, type = "deviance")^2)

คุณจะได้รับสถิติการทดสอบเช่นเดียวกับที่ให้ไว้G2deviance(logistic.fit)


ฉันเห็นด้วยกับมาโคร หากคุณต้องการคำตอบจากกลุ่มคุณควรรอฟังสิ่งที่คนอื่นพูดก่อน ทุกสิ่งที่คุณอาจได้รับตอนนี้มีอคติโดยเห็นคำตอบของคุณ ถ้าคุณรู้คำตอบคุณจะพยายามพิสูจน์อะไรโดยทำเช่นนี้?
Michael R. Chernick

@Macro - Firefeather ได้โพสต์คำถามสี่ข้อลงในเว็บไซต์นี้ (รวมถึงเรื่องนี้) และตอบคำถามสามข้อ (รวมถึงเรื่องนี้) เขา / เธอยอมรับคำตอบของเขา / เธอหนึ่งครั้ง อีกสองสามอย่างเช่นนี้และฉันอาจเริ่มเห็นลวดลาย!
jbowman

@ jbowman ฉันนึกภาพออกตอบคำถามของคุณเองได้ถ้าคุณคิดด้วยตัวเองก่อนที่คนอื่นโพสต์คำตอบ แต่ firefeather โพสต์คำตอบอย่างน้อยกว่า 5 นาทีหลังจากโพสต์คำถามดูเหมือนว่าเขา / เธอไม่ต้องการความช่วยเหลือ ซึ่งเป็นสิ่งที่ทำให้ฉันถามว่าทำไม ... ฉันไม่เข้าใจแรงจูงใจจริงๆ ...
มาโคร

3
@Macro โปรดดูลิงค์อย่างเป็นทางการนี้: blog.stackoverflow.com/2011/07/… (ลิงก์ในหน้าถามคำถามในช่องทำเครื่องหมายที่ด้านล่าง: "ตอบคำถามของคุณเอง - แบ่งปันความรู้ถาม & สไตล์ ") ฉันมีคำถามนี้ขณะทำการบ้าน (เลือกที่จะใช้ R แทน Minitab แม้ว่า Minitab จะแสดงในชั้นเรียน) แต่ฉันไม่มีเวลาเพียงพอที่จะพิมพ์คำถามและรอการตอบกลับ ฉันหาวิธีแก้ปัญหานี้และตัดสินใจที่จะแบ่งปันกับชุมชน
ผจญเพลิง

2
@Macro คุณยินดีมาก! ฉันหวังว่าฉันสามารถถามคำถามเพิ่มเติมที่ฉันไม่ได้ให้คำตอบและตอบคำถามเพิ่มเติมที่ฉันไม่ได้ถาม แต่สิทธิของjbowmanเกี่ยวกับรูปแบบ: การมีส่วนร่วมของฉันในชุมชนมีแนวโน้มที่จะพูดคุยกับตัวเอง :) (อย่างน้อยฉันก็มีส่วนร่วมในชุมชนใช่ไหม?)
ผจญเพลิง

10

สถิติเพียร์สันมีการกระจายที่ลดลงดังนั้นจึงไม่แนะนำให้ใช้โดยทั่วไปสำหรับรูปแบบโลจิสติกที่เหมาะสม ฉันชอบการทดสอบแบบมีโครงสร้าง (เป็นเส้นตรง, เพิ่มได้) หากคุณต้องการทดสอบรถโดยสารดูระดับเดียวของเสรีภาพ Le Cessie - van Houwelingen - Copas - Hosmer ผลรวมของการทดสอบกำลังสองแบบไม่หนักหน่วงตามที่นำมาใช้ในฟังก์ชันrmsแพ็คเกจRresiduals.lrm


2
-1: ขอบคุณสำหรับความเข้าใจ! อย่างไรก็ตามสิ่งนี้ไม่ตอบคำถามของฉัน เนื่องจากเป็นความเห็น / การอภิปรายที่เกี่ยวข้องกับคำสั่งที่ฉันทำไว้เบื้องหลังคำถามของฉันคำตอบของคุณอาจอยู่ในความคิดเห็นแทนที่จะเป็นคำตอบ
ผจญเพลิง

2
ฉันเดาว่าคนสี่คนที่โหวตให้คำตอบของฉันไม่เห็นด้วยกับคุณ และคุณยังไม่ได้จัดการกับการกระจายตัวที่แย่ลง
Frank Harrell

@FrankHarrell: GOF นี้วัดต่างจากการทดสอบ GOF ของ Hosmer-Lemeshow (HL) หรือไม่? สมมติเช่นนี้เพราะชื่อและยังได้มีการเปรียบเทียบทั้งสอง: การทดสอบ HL ขาดดำเนินการเท่าที่พบในResourceSelectionแพคเกจและผลของมันจะแตกต่างกว่าสิ่งที่ฉันได้รับจากการทำงานหลังจากที่เหมาะสมแบบการถดถอยโลจิสติกของฉันเป็นresid(lrm_object, 'gof') lrm_object <- lrm(...)หากพวกเขาแตกต่างกันอย่างแท้จริงคุณสามารถแสดงความคิดเห็นเกี่ยวกับวิธีการทดสอบ HL วางซ้อนกับที่คุณพูดถึงที่นี่ได้อย่างไร ขอบคุณ!
Meg

1
ทั้งสองมีความแตกต่างกันอย่างมากมาย สถิติ HL (ตอนนี้ล้าสมัย) มีการแก้ไข df และมักจะขึ้นอยู่กับ deciles ของความเสี่ยง รุ่น HLสถิติจึงไม่ได้เป็นคนเลวเป็นNบนมืออื่น ๆ ระวังของใด ๆสถิติที่ DF ช่วยขยายกับNχ2Nχ2N
Frank Harrell

ฉันชอบที่จะเห็นการจำลองที่แสดงความเสื่อมนี้
wdkrnls

0

ขอบคุณฉันไม่ทราบว่ามันง่ายเหมือน: sum (ส่วนที่เหลือ (f1, type = "pearson") ^ 2) อย่างไรก็ตามโปรดทราบว่า Pearsons ที่เหลือแตกต่างกันไปขึ้นอยู่กับว่าจะคำนวณโดยกลุ่ม covariate หรือเป็นรายบุคคล ตัวอย่างง่ายๆ:

m1 เป็นเมทริกซ์ (อันนี้คือหัวของเมทริกซ์ที่ใหญ่กว่า):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

โดยที่ x1-3 คือตัวทำนาย, obs ไม่ใช่ การสังเกตในแต่ละกลุ่ม, pi คือความน่าจะเป็นของการเป็นสมาชิกกลุ่ม (ทำนายจากสมการถดถอย), lev คือ leverage, เส้นทแยงมุมของเมทริกซ์หมวก, สิ่งที่ไม่ได้คาดการณ์ไว้ (ของ y = 1) ในกลุ่มและ y จำนวนจริง

สิ่งนี้จะให้คุณเป็นกลุ่มของ Pearson สังเกตว่ามันแตกต่างกันอย่างไรถ้า y == 0: ' 'fun1 <- function(j){        if (m1[j,"y"] ==0){ # y=0 for this covariate pattern     Pr1 <- sqrt( m1[i,"pi"] / (1-m1[i,"pi"]))     Pr2 <- -sqrt (m1[i,"obs"]) res <- round( Pr1 * Pr2, 3) return(res) } else {  Pr1 <- m1[j,"y"] - m1[j,"yhat"] Pr2 <- sqrt(   m1[j,"yhat"] * ( 1-(m1[j,"pi"]) )   ) res <- round( Pr1/Pr2, 3) return(res) }    }

ดังนั้น

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

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

ดูเช่น Hosmer & Lemeshow "การถดถอยโลจิสติกประยุกต์", Wiley, 200


0

นอกจากนี้คุณยังสามารถใช้ที่จะให้การส่งออกเช่นเดียวกับc_hat(mod)sum(residuals(mod, type = "pearson")^2)


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