จะประเมินความพอดีของ binomial GLMM ที่ติดตั้ง lme4 (> 1.0) ได้อย่างไร?


19

ฉันมี GLMM ที่มีการแจกแจงแบบทวินามและฟังก์ชันการเชื่อมโยง logit และฉันรู้สึกว่าข้อมูลที่สำคัญไม่ได้ถูกนำเสนอในโมเดล

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

โปรดทราบว่าฉันใช้รุ่นใหม่ของ lme4 ( รุ่นพัฒนาจาก GitHub ):

packageVersion("lme4")
## [1] ‘1.1.0’

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

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

require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))

dat <- read.table("http://pastebin.com/raw.php?i=vRy66Bif")
dat$V1 <- factor(dat$V1)

m1 <- glmer(true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1), dat, family = binomial)

พล็อตที่ง่ายที่สุด ( ?plot.merMod) สร้างสิ่งต่อไปนี้:

plot(m1)

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

สิ่งนี้บอกอะไรฉันได้บ้าง


1
ฉันอาจหาเวลาที่จะกลับมาและหยุดพักที่นี่ แต่ฉันคิดว่าคำตอบทั่วไปคือมันยากที่จะทำข้อตกลงที่ยอดเยี่ยมกับแบบจำลองไบนารี การค้นพบหลักของฉันยังห่างไกลจากการซูมเข้าเล็กน้อยบนพล็อตที่คุณมีด้านบนและเพิ่มเส้นที่เรียบ (ใช้type=c("p","smooth")ในplot.merModหรือย้ายไปที่ggplotหากคุณต้องการช่วงความมั่นใจ) ว่ามันดูเหมือนว่ามีลวดลายเล็ก ๆ อาจสามารถแก้ไขได้โดยใช้ฟังก์ชันลิงก์อื่น นั่นมันเพื่อให้ห่างไกล ...
เบน Bolker

@BenBolker ขอบคุณ และคุณสามารถไม่เพียงแค่โพสต์สิ่งนี้และลิงค์ไปยัง freakonomics เพื่อตอบคำถามได้ไหม? อย่างน้อยคุณก็จะได้ 150 คะแนน
Henrik

3
ฉันพบกระทู้ CV นี้stats.stackexchange.com/questions/63566/…เพื่อเป็นประโยชน์ โพสต์อธิบายถึงวิธีการสร้างพล็อตที่เหลือค้างอยู่ในอาร์
โนวา

@Henrik คุณช่วยอธิบายฉันแบบจำลองtrue ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)นี้ได้อย่างไร จะประมาณการให้รูปแบบของการปฏิสัมพันธ์ระหว่างdistance*consequent, distance*direction, distance*distและความลาดเอียงของdirectionและdist แตกต่างกันไปด้วยV1? สแควร์(consequent+direction+dist)^2หมายถึงอะไร
ABC

@Henrik Warning message: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model failed to converge with max|grad| = 0.123941 (tol = 0.001, component 1)ฉันวิ่งรหัสของคุณและมันแสดงให้เห็นว่า ทำไม
ABC

คำตอบ:


18

คำตอบสั้น ๆ เนื่องจากฉันไม่มีเวลาให้ดีขึ้น: นี่เป็นปัญหาที่ท้าทาย ข้อมูลไบนารีเกือบทุกครั้งต้องใช้ binning หรือการปรับให้เรียบเพื่อประเมินความเหมาะสม มันค่อนข้างมีประโยชน์ที่จะใช้fortify.lmerMod(จากlme4การทดลอง) ร่วมกับggplot2และโดยเฉพาะอย่างยิ่งgeom_smooth()ในการวาดเนื้อเรื่องส่วนที่เหลือเทียบกับที่คุณติดตั้งด้านบน แต่ด้วยช่วงความมั่นใจ (ฉันยัง จำกัด ช่วงความเชื่อมั่นไว้เล็กน้อย -5,5) ภูมิภาค) ที่แนะนำรูปแบบที่เป็นระบบบางอย่างที่สามารถปรับปรุงได้โดย tweaking ฟังก์ชั่นการเชื่อมโยง (ฉันลองพล็อตเรื่องที่เหลือเทียบกับตัวทำนายอื่น ๆ แต่มันก็ไม่มีประโยชน์อะไร)

ฉันลองปรับโมเดลให้มีการโต้ตอบ 3 ทาง แต่ก็ไม่ได้มีการปรับปรุงมากนักทั้งในส่วนเบี่ยงเบนหรือในรูปของเส้นโค้งส่วนที่เหลือเรียบ

(โลจิสติก(x))λλ

## uses (fragile) internal C calls for speed; could use plogis(),
##  qlogis() for readability and stability instead
logitpower <- function(lambda) {
    L <- list(linkfun=function(mu)
              .Call(stats:::C_logit_link,mu^(1/lambda),PACKAGE="stats"),
              linkinv=function(eta)
              .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")^lambda,
              mu.eta=function(eta) {
                  mu <-  .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")
                  mu.eta <-  .Call(stats:::C_logit_mu_eta,eta,PACKAGE="stats")
                  lambda*mu^(lambda-1)*mu.eta
              },
              valideta = function(eta) TRUE ,
              name=paste0("logit-power(",lambda,")"))
    class(L) <- "link-glm"
    L
}

λ

ดูเพิ่มเติมที่: http://freakonometrics.hypotheses.org/8210


3

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

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


-1

คุณสามารถใช้ AIC แทนแปลงที่เหลือเพื่อตรวจสอบรุ่นได้ Command in R: AIC (model1) มันจะให้ตัวเลขกับคุณ ... ดังนั้นคุณต้องเปรียบเทียบมันกับ model อื่น (ด้วยตัวทำนายเพิ่มเติม) - AIC (model2) ซึ่งจะให้ค่าอีกจำนวนหนึ่ง เปรียบเทียบเอาต์พุตทั้งสองและคุณจะต้องการโมเดลที่มีค่า AIC ที่ต่ำกว่า

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


3
สิ่งนี้จะมีประโยชน์มากกว่าถ้า OP พยายามเปรียบเทียบแบบจำลองการแข่งขัน แต่ดูเหมือนว่าไม่ใช่สิ่งที่พวกเขากำลังพยายามทำและ AIC ไม่สามารถใช้ในการประเมินแบบจำลองที่สมบูรณ์ได้
Patrick Coulombe

-3

พล็อตที่ติดตั้งกับส่วนที่เหลือไม่ควรแสดงรูปแบบใด ๆ (ชัดเจน) โครงเรื่องแสดงให้เห็นว่าแบบจำลองนั้นใช้งานไม่ได้กับข้อมูล ดูhttp://www.r-bloggers.com/model-validation-interpreting-residual-plots/


1
ฉันคิดว่าคุณคิดผิดรูปแบบบางอย่างถูกทำนายไว้โดยฟังก์ชั่นลิงก์: stats.stackexchange.com/q/25068/442
Henrik

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