R MICE डेटा इंप्यूटेशन के लिए रनिंग टाइम कैसे सुधारें


9

संक्षेप में मेरा प्रश्न: क्या R MICE (डेटा प्रतिरूपण) के चलने के समय में सुधार करने के तरीके हैं?

मैं एक डेटा सेट (30 चर, 1.3 मिलियन पंक्तियों) के साथ काम कर रहा हूं जिसमें (काफी यादृच्छिक रूप से) गायब डेटा है। 30 में से लगभग 15 चरों में लगभग 8% टिप्पणियों में NA हैं। लापता डेटा को लागू करने के लिए, मैं MICE फ़ंक्शन, MICE पैकेज का हिस्सा चला रहा हूं ।

मैं बहुत धीमी गति से चलने के समय का अनुभव करता हूं, यहां तक ​​कि एक सबसेट (100,000 पंक्तियों) पर, विधि = "फास्टपम" और एम = 1 के साथ और लगभग 15 मिनट तक चलता है।

क्या प्रदर्शन में बहुत अधिक खोए बिना चलने के समय में सुधार करने का एक तरीका है? (चूहों। pimpute.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
सामान्य तौर पर: क्रॉस वैधता पर इस तरह के प्रश्न उपयुक्त हैं, या स्टैक ओवरफ्लो के लिए बेहतर अनुकूल हैं?
डेन्ड्रोबेट्स

3
यह एक निर्णय कॉल हो सकता है। क्योंकि (एक सामान्य सिद्धांत के रूप में) चल रहे समय में सबसे महत्वपूर्ण सुधार अंतर्निहित एल्गोरिदम को समझने के द्वारा प्राप्त किए जाते हैं, मैं उम्मीद करूंगा कि वास्तव में प्रभावी उत्तर प्राप्त करने के आपके सर्वोत्तम अवसर यहां होंगे, एक ऐसे समुदाय में जहां लोग वैकल्पिक दृष्टिकोणों का सुझाव देने में सक्षम हो सकते हैं। । यदि आपको एक या दो दिन में पर्याप्त उत्तर नहीं मिलते हैं, तो बस इस पोस्ट को माइग्रेशन के लिए फ़्लैग करें और हम इसे SO को भेजेंगे (इस दौरान एकत्र किए गए किसी भी उत्तर और टिप्पणियों के साथ)।
whuber

1
आप 'फास्टपैम' विकल्प को 'आदर्श' में बदल सकते हैं, यह तेज़ होने जा रहा है
marc1s

1
Thx @ marc1s, जिसने बड़े डेटासेट के लिए बहुत सुधार किया। 10,000 पंक्तियों के साथ एक यादृच्छिक डेटा फ्रेम (ऊपर के रूप में) के लिए, विधि "मानदंड" "फास्टपैम" की तुलना में लगभग 4 गुना तेज था। 50,000 पंक्तियों के साथ यह 12 गुना तेज था। इसलिए, चलने के समय में सापेक्ष लाभ पंक्तियों की संख्या से बढ़ रहा है।
Dendrobates

1
आपके द्वारा चलाए जा रहे मॉडल के आधार पर, अधिकतम संभावना (या पूर्ण जानकारी अधिकतम संभावना) आकलन का उपयोग करने के लिए तेज़ हो सकता है, जो कि मॉडल सही ढंग से निर्दिष्ट होने पर असंगत के बराबर विषम है। यहाँ मैं एक पेपर में शामिल था, जो विभिन्न तरीकों की तुलना करता है: पन्नाधर्म.com
जेरेमी माइल्स

जवाबों:


4

आप उपयोग कर सकते हैं quickpred()से miceपैकेज आप निर्दिष्ट द्वारा भविष्यवक्ताओं सीमित कर सकते हैं जो का उपयोग कर mincor (न्यूनतम सहसंबंध) और minpuc (प्रयोग करने योग्य मामलों का अनुपात)। इसके अलावा, आप भविष्यवाणियों को नियंत्रित करने के लिए बहिष्करण का उपयोग कर सकते हैं और पैरामीटर शामिल कर सकते हैं।


2

मैंने 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)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.