วิธีปรับปรุงเวลาทำงานสำหรับการใส่ข้อมูล R MICE


9

คำถามของฉันในระยะสั้น: มีวิธีการปรับปรุงเกี่ยวกับเวลาทำงานของ R MICE (การใส่ข้อมูล) หรือไม่

ฉันกำลังทำงานกับชุดข้อมูล (30 ตัวแปร, 1.3 ล้านแถว) ซึ่งมีข้อมูลที่หายไป (ค่อนข้างสุ่ม) ประมาณ 8% ของการสังเกตในตัวแปรประมาณ 15 จาก 30 ตัวประกอบด้วย NAs เพื่อระบุข้อมูลที่หายไปฉันกำลังเรียกใช้ฟังก์ชัน MICE ซึ่งเป็นส่วนหนึ่งของแพ็คเกจMICE

ฉันพบเวลาทำงานค่อนข้างช้าแม้จะอยู่บนชุดย่อย (100,000 แถว) ด้วยเมธอด = "fastpmm" และ m = 1 และทำงานประมาณ 15 นาที

มีวิธีปรับปรุงเวลาทำงานโดยไม่สูญเสียประสิทธิภาพมากเกินไปหรือไม่? (mice.impute.mean ค่อนข้างเร็ว แต่มาพร้อมกับการสูญเสียข้อมูลที่สำคัญ!)

รหัสที่ทำซ้ำได้:

library(mice)
df <- data.frame(replicate(30,sample(c(NA,1:10),1000000,rep=TRUE)))
df <- data.frame(scale(df))

output <- mice(df, m=1, method = "fastpmm")

1
โดยทั่วไป: คำถามประเภทนี้เหมาะสมกับการตรวจสอบความถูกต้องของ Cross หรือเหมาะสมกว่าสำหรับ Stack Overflow หรือไม่
Dendrobates

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

1
คุณสามารถเปลี่ยนตัวเลือก 'fastppm' เป็น 'norm' มันจะเร็วขึ้น
marc1s

1
ขอบคุณ @ marc1s ที่ปรับปรุงหลายอย่างสำหรับชุดข้อมูลขนาดใหญ่ สำหรับกรอบข้อมูลแบบสุ่ม (ด้านบน) ที่มี 10,000 แถววิธี "มาตรฐาน" นั้นเร็วกว่า "fastpmm" ประมาณ 4 เท่า ด้วย 50,000 แถวมันยิ่งเร็วขึ้น 12 เท่า ดังนั้นกำไรที่สัมพันธ์กันในเวลาทำงานจึงเพิ่มขึ้นตามจำนวนแถว
Dendrobates

1
ขึ้นอยู่กับแบบจำลองที่คุณกำลังจะใช้งานการประมาณค่าความน่าจะเป็นสูงสุด (หรือความน่าจะเป็นข้อมูลสูงสุดแบบเต็ม) อาจจะเร็วกว่าซึ่งจะเท่ากับการใส่ความหมายแบบ asymptotically หากระบุแบบจำลองได้อย่างถูกต้อง นี่คือกระดาษที่ฉันเข้าร่วมซึ่งเปรียบเทียบวิธีการต่าง ๆ : emeraldinsight.com/doi/abs/10.1108/JCP-02-2015-0007
Jeremy Miles

คำตอบ:


4

คุณสามารถใช้quickpred()จากmiceแพ็คเกจที่ใช้ซึ่งคุณสามารถ จำกัด ตัวทำนายโดยระบุmincor (ความสัมพันธ์ขั้นต่ำ) และminpuc (สัดส่วนของกรณีที่ใช้งานได้) นอกจากนี้คุณสามารถใช้การยกเว้นและรวมพารามิเตอร์สำหรับการควบคุมการทำนาย


2

ฉันสร้าง wrapper สำหรับmiceฟังก์ชั่นที่มีอาร์กิวเมนต์พิเศษหนึ่งตัวdroplistซึ่งคุณสามารถส่งเวกเตอร์อักขระของตัวแปรตัวทำนายที่คุณไม่ต้องการให้ใช้ในด้านขวาของสูตรการใส่ข้อมูล นี่เป็นเรื่องของความเร็วเนื่องจากฉันพบว่าตัวแปรปัจจัยที่มีหลายระดับจะทำให้การแสดงผลช้าลงอย่างมาก ฉันไม่ทราบถึงquickpredฟังก์ชั่นที่อ้างอิงโดย @Aanish และบางทีคุณอาจใช้แนวคิดทั้งสองร่วมกันได้

ด้านล่างเป็นฟังก์ชั่นตามที่ปรากฏในแพ็คเกจglmmplusของฉัน หากคุณพบว่ามีประโยชน์ฉันอาจเปิดคำขอดึงในmiceแพ็คเกจจริง

ImputeData <- function(data, m = 10, maxit = 15, droplist = NULL) {
  if (length(intersect(names(data), droplist)) < length(droplist)) {
    stop("Droplist variables not found in data set")
  }
  predictorMatrix <- (1 - diag(1, ncol(data)))
  for (term in droplist) {
  drop.index <- which(names(data) == term)
    predictorMatrix[, drop.index] <- 0
  }
  mids.out <- mice(data, m = m, maxit = maxit,
                   predictorMatrix = predictorMatrix)
  return(mids.out)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.