TL; DR: lme4
การเพิ่มประสิทธิภาพที่ดูเหมือนจะเป็นเชิงเส้นในจำนวนของพารามิเตอร์แบบโดยค่าเริ่มต้นและเป็นวิธีที่ช้ากว่าเทียบเท่าglm
รุ่นด้วยตัวแปรดัมมี่สำหรับกลุ่ม มีอะไรที่ฉันสามารถทำได้เพื่อเร่งความเร็วหรือไม่
ฉันพยายามจัดวางโมเดล logit แบบลำดับชั้นที่ค่อนข้างใหญ่ (ประมาณ 50k แถว, 100 คอลัมน์, 50 กลุ่ม) การปรับโมเดล logit ปกติให้เข้ากับข้อมูล (ด้วยตัวแปรดัมมี่สำหรับกลุ่ม) ทำงานได้ดี แต่โมเดลลำดับชั้นดูเหมือนจะติดขัด: ขั้นตอนการปรับให้เหมาะสมครั้งแรกจะเสร็จสมบูรณ์ดี แต่ครั้งที่สองผ่านการทำซ้ำจำนวนมาก .
แก้ไข:ฉันสงสัยว่าปัญหาส่วนใหญ่คือฉันมีพารามิเตอร์มากมายเพราะเมื่อฉันพยายามตั้งค่าmaxfn
ที่ต่ำกว่าจะให้คำเตือน:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
อย่างไรก็ตามการประมาณพารามิเตอร์ไม่ได้เปลี่ยนแปลงตลอดเวลาของการปรับให้เหมาะสมดังนั้นฉันยังคงสับสนเกี่ยวกับสิ่งที่ต้องทำ เมื่อฉันพยายามตั้งค่าmaxfn
ในตัวควบคุมเครื่องมือเพิ่มประสิทธิภาพ (แม้จะมีคำเตือน) ดูเหมือนว่าจะหยุดทำงานหลังจากการปรับให้เหมาะสมเสร็จแล้ว
นี่คือรหัสบางส่วนที่สร้างปัญหาให้กับข้อมูลสุ่ม:
library(lme4)
set.seed(1)
SIZE <- 50000
NGRP <- 50
NCOL <- 100
test.case <- data.frame(i=1:SIZE)
test.case[["grouping"]] <- sample(NGRP, size=SIZE, replace=TRUE, prob=1/(1:NGRP))
test.case[["y"]] <- sample(c(0, 1), size=SIZE, replace=TRUE, prob=c(0.05, 0.95))
test.formula = y ~ (1 | grouping)
for (i in 1:NCOL) {
colname <- paste("col", i, sep="")
test.case[[colname]] <- runif(SIZE)
test.formula <- update.formula(test.formula, as.formula(paste(". ~ . +", colname)))
}
print(test.formula)
test.model <- glmer(test.formula, data=test.case, family='binomial', verbose=TRUE)
ผลลัพธ์นี้:
start par. = 1 fn = 19900.78
At return
eval: 15 fn: 19769.402 par: 0.00000
(NM) 20: f = 19769.4 at 0 <other numbers>
(NM) 40: f = 19769.4 at 0 <other numbers>
ฉันพยายามตั้งค่าncol
เป็นค่าอื่น ๆ และปรากฏว่าจำนวนการวนซ้ำที่ทำคือ (ประมาณ) 40 ต่อคอลัมน์ เห็นได้ชัดว่านี่กลายเป็นความเจ็บปวดครั้งใหญ่เมื่อฉันเพิ่มคอลัมน์อีก มีการปรับแต่งที่ฉันสามารถทำได้กับอัลกอริทึมการเพิ่มประสิทธิภาพที่จะลดการพึ่งพาจำนวนคอลัมน์หรือไม่?
glmer
ค่อนข้างช้าโดยเฉพาะอย่างยิ่งสำหรับโมเดลที่มีโครงสร้างเอฟเฟกต์แบบสุ่มที่ซับซ้อน (เช่นลาดสุ่มจำนวนมากข้ามเอฟเฟกต์แบบสุ่ม ฯลฯ ) คำแนะนำแรกของฉันคือลองอีกครั้งด้วยโครงสร้างเอฟเฟกต์แบบสุ่มที่ง่ายขึ้น อย่างไรก็ตามหากคุณประสบปัญหานี้กับโมเดลการดักจับแบบสุ่มเท่านั้นปัญหาของคุณอาจเป็นจำนวนกรณีซึ่งในกรณีนี้คุณจะต้องลองใช้เครื่องมือบางอย่างสำหรับข้อมูลขนาดใหญ่โดยเฉพาะ