รูปแบบอินพุตสำหรับการตอบสนองใน binomial glm ใน R


13

ในRมีสามวิธีในการจัดรูปแบบข้อมูลอินพุตสำหรับการถดถอยโลจิสติกโดยใช้glmฟังก์ชัน:

  1. ข้อมูลสามารถอยู่ในรูปแบบ "ไบนารี" สำหรับการสังเกตแต่ละครั้ง (เช่น y = 0 หรือ 1 สำหรับการสังเกตแต่ละครั้ง);
  2. ข้อมูลสามารถอยู่ในรูปแบบ "Wilkinson-Rogers" (เช่นy = cbind(success, failure)) โดยแต่ละแถวแสดงถึงการรักษาหนึ่งครั้ง หรือ
  3. ข้อมูลสามารถอยู่ในรูปแบบถ่วงน้ำหนักสำหรับการสังเกตแต่ละครั้ง (เช่น y = 0.3, น้ำหนัก = 10)

ทั้งสามวิธีมีการประมาณค่าสัมประสิทธิ์เท่ากัน แต่แตกต่างกันไปตามระดับของอิสรภาพและค่าเบี่ยงเบนและผลคะแนน AIC สองวิธีสุดท้ายมีการสังเกตน้อยกว่า (และดีกรีอิสระ) เพราะพวกเขาใช้การรักษาแต่ละครั้งสำหรับจำนวนการสังเกตในขณะที่วิธีแรกใช้การสังเกตแต่ละครั้งสำหรับจำนวนการสังเกต

คำถามของฉัน:มีความได้เปรียบเชิงตัวเลขหรือเชิงสถิติในการใช้รูปแบบอินพุตหนึ่งมากกว่าอีกรูปแบบหนึ่งหรือไม่ ข้อได้เปรียบเดียวที่ฉันเห็นคือไม่ต้องฟอร์แมตข้อมูลRเพื่อใช้กับตัวแบบ

ฉันได้ดูเอกสาร glmค้นหาบนเว็บและเว็บไซต์นี้และพบโพสต์ที่เกี่ยวข้องเป็นรูปธรรมแต่ไม่มีคำแนะนำในหัวข้อนี้

นี่คือตัวอย่างที่จำลองซึ่งแสดงให้เห็นถึงพฤติกรรมนี้:

# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
    (d - c)/ (1 + exp(-b * (log(x)  - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
                              prob = drc4(dfLong$dose, b = 2, e = 5))

# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose), 
                     FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality 
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps

fitShort <- glm( cbind(mortality, survival) ~ dose, 
                 data = dfShort, 
                 family = "binomial")
summary(fitShort)

fitShortP <- glm( mortalityP ~ dose, data = dfShort, 
                  weights = nReps,     
                  family = "binomial")
summary(fitShortP)

fitLong <- glm( mortality ~ dose, data = dfLong, 
                family = "binomial")
summary(fitLong)

1
ในตัวอย่างของคุณความแตกต่างระหว่างการเบี่ยงเบนโมฆะและการตกค้างเท่ากับทั้งสามรุ่น หากคุณเพิ่มหรือลบพารามิเตอร์การเปลี่ยนแปลงใน AIC จะเหมือนกันสำหรับทั้งสาม
Jonny Lomond

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

รูปแบบ WR ในท้ายที่สุดเป็นโอกาสถ่วงน้ำหนัก ปัญหาเกี่ยวกับตุ้มน้ำหนักคือ R ไม่สามารถบอกได้ว่าน้ำหนักตุ้มน้ำหนักความน่าจะเป็นหรืออื่น ๆ ด้วยการถ่วงน้ำหนักการสำรวจเช่นคุณอาจมีเพียงการสังเกตแบบ n เท่านั้น แต่จะแสดงถึงกลุ่มของเฟรมประชากร / การสุ่มตัวอย่าง ดังนั้นดีกรีอิสระเท่ากับ 100 แน่นอนsvyglmจากแพคเกจสำรวจให้วิธีการจัดการอาร์กิวเมนต์น้ำหนักที่ดีขึ้น
AdamO

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

คำตอบ:


9

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

ฉันคิดว่ามันมีประโยชน์ในการคำนวณ deviance อย่างชัดเจน

iniipiiyijji

แบบยาว

ij(log(pi)yij+log(1pi)(1yij))

ij(log(yij)yij+log(1yij)(1yij)).
yijlog(0)0log(0)limx0+xlog(x)

แบบสั้น (ถ่วงน้ำหนัก)

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

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

นี่เท่ากับความเบี่ยงเบนของโมเดลที่เราคำนวณข้างต้นซึ่งคุณสามารถดูได้โดยการดึงผลรวมเหนือในสมการแบบยาวเท่าที่จะทำได้j

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

ini(log(jyij/ni)jyij/ni+log(1jyij/ni)(1jyij/ni)).

ในตัวอย่างของคุณคุณสามารถตรวจสอบว่าสองเท่าของจำนวนนี้คือความแตกต่างระหว่างค่า null ที่รายงานและค่าเบี่ยงเบนที่เหลืออยู่สำหรับทั้งสองรุ่น

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance

ฉันคิดว่าคุณจะต้องชี้แจงการแสดงออกของความเบี่ยงเบนของแบบจำลองที่อิ่มตัว บันทึกของ 0 ทำงานได้ไม่ดีนัก
AdamO

ขอบคุณฉันควรจะชี้แจงสิ่งที่ฉันหมายถึง ฉันเพิ่มการแก้ไขเพื่อให้ความกระจ่างว่าโดย 0log (0) ฉันหมายถึง 0 ในบริบทนี้
Jonny Lomond

ตกลง แต่ฉันสับสนอย่างถูกต้อง (ยกโทษให้ฉันฉันไม่เคยครอบคลุมความเบี่ยงเบนในรายละเอียดที่ยอดเยี่ยมใด ๆ ): ถ้าคุณมีบันทึก (y) y - บันทึก (1-y) (1-y) เป็นความเบี่ยงเบนของแบบจำลองที่อิ่มตัว สังเกตแค่ 0
AdamO

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

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