लापता मूल्यों के लिए कई प्रतिनियुक्ति


13

मैं कुछ अड़चनों के तहत अपने डेटा सेट में गुम मूल्यों को बदलने के लिए अभियोग का उपयोग करना चाहूंगा।

उदाहरण के लिए, मैं x1अपने दो अन्य चर के योग से अधिक या बराबर होने के लिए प्रतिरूपित चर की तरह कहूंगा, x2और x3। मैं भी या x3तो इंप्रेस होना चाहता हूं 0या >= 14मैं या x2तो इम्प्रेस होना चाहता हूं ।0>= 16

मैंने कई बाधाओं के लिए SPSS में इन बाधाओं को परिभाषित करने की कोशिश की, लेकिन SPSS में मैं केवल अधिकतम और न्यूनतम मूल्यों को परिभाषित कर सकता हूं। क्या एसपीएसएस में आगे की बाधाओं को परिभाषित करने का कोई तरीका है या क्या आप किसी भी आर पैकेज को जानते हैं जो मुझे लापता मूल्यों के प्रतिरूपण के लिए ऐसी बाधाओं को परिभाषित करने देगा?

मेरा डेटा इस प्रकार है:

   x1 =c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24)
   x2 = c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0)
   x3 = c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0)
   dat=data.frame(x1=x1, x2=x2, x3=x3)
   > dat
       x1 x2 x3
   1   21  0  0
   2   50 NA  0
   3   31 18  0
   4   15  0  0
   5   36 19  0
   6   82  0 54
   7   14 NA  0
   8   14  0  0
   9   19  0  0
   10  18  0  0
   11  16  0  0
   12  36  0  0
   13 583  0  0
   14  NA NA NA
   15  NA NA NA
   16  NA NA NA
   17  50 22 NA
   18  52 NA  0
   19  26  0  0
   20  24  0  0

मैंने तब 0 or 16 or >= 16से बदल दिया 0 or >= 16जब >=16से मूल्य शामिल है 16। आशा है कि अपने अर्थ गड़बड़ नहीं किया। उसी के लिए0 or 14 or >= 14
एलेक्सिस

जवाबों:


16

एक समाधान miceपैकेज के लिए अपने स्वयं के कस्टम इंप्यूटेशन फ़ंक्शन लिखना है । पैकेज इसके लिए तैयार है और सेटअप आश्चर्यजनक रूप से दर्द मुक्त है।

पहले हम सुझाए गए अनुसार डेटा सेटअप करते हैं:

dat=data.frame(x1=c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24), 
               x2=c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0), 
               x3=c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0))

अगला हम miceपैकेज को लोड करते हैं और देखते हैं कि यह डिफ़ॉल्ट रूप से क्या तरीके चुनता है:

library(mice)
# Do a non-imputation
imp_base <- mice(dat, m=0, maxit = 0)

# Find the methods that mice chooses
imp_base$method
# Returns: "pmm" "pmm" "pmm"

# Look at the imputation matrix
imp_base$predictorMatrix
# Returns:
#   x1 x2 x3
#x1  0  1  1
#x2  1  0  1
#x3  1  1  0

pmmके लिए खड़ा है भविष्य कहनेवाला मतलब मिलान सतत चर imputing के लिए शायद सबसे लोकप्रिय इलज़ाम एल्गोरिथ्म -। यह प्रतिगमन मॉडल का उपयोग करके अनुमानित मूल्य की गणना करता है और भविष्यवाणी मूल्य ( यूक्लिडियन दूरी द्वारा ) के लिए 5 निकटतम तत्वों को चुनता है । इन चुने हुए तत्वों को दाता पूल कहा जाता है और अंतिम मूल्य को इस दाता पूल से यादृच्छिक पर चुना जाता है।

भविष्यवाणी मैट्रिक्स से हमें पता चलता है कि विधियां वैरिएबल को पास कर देती हैं जो प्रतिबंधों के लिए रुचि रखते हैं। ध्यान दें कि पंक्ति लक्ष्य चर है और भविष्यवक्ता स्तंभ हैं। यदि x3 कॉलम में X1 में 1 नहीं होता है तो हमें इसे मैट्रिक्स में जोड़ना होगा:imp_base$predictorMatrix["x1","x3"] <- 1

अब मज़े की बात यह है कि इंप्यूटेशन मेथड जेनरेट करते हैं। मैंने यहाँ एक बिलकुल कच्चा तरीका चुना है जहाँ मैं सभी मानों को छोड़ देता हूँ अगर वे मापदंड को पूरा नहीं करते हैं। इसके परिणामस्वरूप लंबे लूप का समय हो सकता है और यह वैध आवेगों को बनाए रखने के लिए संभवतः अधिक कुशल हो सकता है और केवल शेष लोगों को फिर से कर सकता है, हालांकि इसके लिए थोड़ा अधिक ट्विकिंग की आवश्यकता होगी।

# Generate our custom methods
mice.impute.pmm_x1 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    max_sum <- sum(max(x[,"x2"], na.rm=TRUE),
                   max(x[,"x3"], na.rm=TRUE))
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals < max_sum)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x2 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 14)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x3 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 16)){
        break
      }
    }
    return(vals)
  }

एक बार जब हम उन तरीकों को परिभाषित करते हैं तो हम पिछले तरीकों को बदल देते हैं। यदि आप केवल एकल चर को बदलना चाहते हैं तो आप बस उपयोग कर सकते हैं imp_base$method["x2"] <- "pmm_x2"लेकिन इस उदाहरण के लिए हम सभी को बदल देंगे (नामकरण आवश्यक नहीं है):

imp_base$method <- c(x1 = "pmm_x1", x2 = "pmm_x2", x3 = "pmm_x3")

# The predictor matrix is not really necessary for this example
# but I use it just to illustrate in case you would like to 
# modify it
imp_ds <- 
  mice(dat, 
       method = imp_base$method, 
       predictorMatrix = imp_base$predictorMatrix)

अब तीसरे अभेद्य डेटासेट पर एक नजर डालते हैं:

> complete(imp_ds, action = 3)
    x1 x2 x3
1   21  0  0
2   50 19  0
3   31 18  0
4   15  0  0
5   36 19  0
6   82  0 54
7   14  0  0
8   14  0  0
9   19  0  0
10  18  0  0
11  16  0  0
12  36  0  0
13 583  0  0
14  50 22  0
15  52 19  0
16  14  0  0
17  50 22  0
18  52  0  0
19  26  0  0
20  24  0  0

ठीक है, वह काम करता है। मुझे यह समाधान पसंद है क्योंकि आप मुख्यधारा के कार्यों में शीर्ष पर आ सकते हैं और केवल उन प्रतिबंधों को जोड़ सकते हैं जो आपको सार्थक लगते हैं।

अपडेट करें

टिप्पणियों में उल्लिखित कठोर प्रतिबंध @ t0x1n को लागू करने के लिए, हम निम्नलिखित क्षमताओं को रैपर फ़ंक्शन में जोड़ना चाहते हैं:

  1. छोरों के दौरान मान्य मानों को सहेजें ताकि पिछले से डेटा, आंशिक रूप से सफल रन को खारिज न किया जाए
  2. अनंत छोरों से बचने के लिए एक भागने तंत्र
  3. एक उपयुक्त मिलान पाए बिना एक्स बार कोशिश करने के बाद दाता पूल को फुलाएं (यह मुख्य रूप से मम पर लागू होता है)

इसके परिणामस्वरूप थोड़ा अधिक जटिल आवरण कार्य होता है:

mice.impute.pmm_x1_adv <-   function (y, ry, 
                                      x, donors = 5, 
                                      type = 1, ridge = 1e-05, 
                                      version = "", ...) {
  # The mice:::remove.lindep may remove the parts required for
  # the test - in those cases we should escape the test
  if (!all(c("x2", "x3") %in% colnames(x))){
    warning("Could not enforce pmm_x1 due to missing column(s):",
            c("x2", "x3")[!c("x2", "x3") %in% colnames(x)])
    return(mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                           version = "", ...))
  }

  # Select those missing
  max_vals <- rowSums(x[!ry, c("x2", "x3")])

  # We will keep saving the valid values in the valid_vals
  valid_vals <- rep(NA, length.out = sum(!ry))
  # We need a counter in order to avoid an eternal loop
  # and for inflating the donor pool if no match is found
  cntr <- 0
  repeat{
    # We should be prepared to increase the donor pool, otherwise
    # the criteria may become imposs
    donor_inflation <- floor(cntr/10)
    vals <- mice.impute.pmm(y, ry, x, 
                            donors = min(5 + donor_inflation, sum(ry)), 
                            type = 1, ridge = 1e-05,
                            version = "", ...)

    # Our criteria check
    correct <- vals < max_vals
    if (all(!is.na(valid_vals) |
              correct)){
      valid_vals[correct] <-
        vals[correct]
      break
    }else if (any(is.na(valid_vals) &
                    correct)){
      # Save the new valid values
      valid_vals[correct] <-
        vals[correct]
    }

    # An emergency exit to avoid endless loop
    cntr <- cntr + 1
    if (cntr > 200){
      warning("Could not completely enforce constraints for ",
              sum(is.na(valid_vals)),
              " out of ",
              length(valid_vals),
              " missing elements")
      if (all(is.na(valid_vals))){
        valid_vals <- vals
      }else{
        valid_vals[is.na(valid_vals)] <- 
          vals[is.na(valid_vals)]
      }
      break
    }
  }
  return(valid_vals)
}

ध्यान दें कि यह उस तरह का प्रदर्शन नहीं करता है, सबसे अधिक संभावना है कि सुझाए गए डेटा सेट के कारण सभी मामलों की कमी के बिना गायब हो जाता है। इससे पहले कि मैं भी व्यवहार करना शुरू करूं, मुझे लूप की लंबाई 400-500 तक बढ़ानी होगी। मेरा मानना ​​है कि यह अनजाने में है, आपके इंप्यूटेशन की नकल करना चाहिए कि वास्तविक डेटा कैसे उत्पन्न होता है।

अनुकूलन

इस तर्क ryमें गैर-लापता मूल्य शामिल हैं और हम संभवतः उन तत्वों को हटाकर लूप को तेज कर सकते हैं जिन्हें हमने योग्य प्रतिरूपण पाया है, लेकिन जैसा कि मैं आंतरिक कार्यों से अपरिचित हूं, मैंने इससे परहेज किया है।

मुझे लगता है कि सबसे महत्वपूर्ण बात यह है कि जब आपके पास मजबूत बाधाएं होती हैं, जो आपके भरने के लिए समय लेती हैं, तो आपको अपने आवेगों को समानांतर करना होगा ( क्रॉसविलेक्टेड पर मेरा जवाब देखें )। अधिकांश के पास आज 4-8 कोर वाले कंप्यूटर हैं और आर केवल डिफ़ॉल्ट रूप से उनमें से एक का उपयोग करता है। समय (लगभग) कोर की संख्या को दोगुना करके आधे में कटा हुआ हो सकता है।

प्रतिनियुक्ति पर लापता पैरामीटर

प्रतिरूपण के x2समय गायब होने की समस्या के बारे में - चूहों ने वास्तव में कभी भी लापता मूल्यों को नहीं खिलाया x- data.frameचूहों विधि शुरू में कुछ यादृच्छिक मूल्य में भरने के भी शामिल है। इंप्यूटेशन का चेन-पार्ट इस प्रारंभिक मूल्य से प्रभाव को सीमित करता है। यदि आप mice-function को देखते हैं तो आप इसे इंप्यूटेशन कॉल ( mice:::sampler-function) से पहले पा सकते हैं :

...
if (method[j] != "") {
  for (i in 1:m) {
    if (nmis[j] < nrow(data)) {
      if (is.null(data.init)) {
        imp[[j]][, i] <- mice.impute.sample(y, 
                                            ry, ...)
      }
      else {
        imp[[j]][, i] <- data.init[!ry, j]
      }
    }
    else imp[[j]][, i] <- rnorm(nrow(data))
  }
}
...

समारोह और चूहों को data.initआपूर्ति की जा सकती है miceचूहों । नमूना एक बुनियादी नमूना प्रक्रिया है।

देखने का क्रम

यदि अनुक्रम का दौरा करना महत्वपूर्ण है, तो आप उस क्रम को निर्दिष्ट कर सकते हैं जिसमें mice-फंक्शन अशुद्धियों को चलाता है। डिफ़ॉल्ट से है, 1:ncol(data)लेकिन आप अपनी visitSequenceपसंद के अनुसार कुछ भी सेट कर सकते हैं।


+1 यह बहुत अच्छी बात है, वास्तव में मेरे मन में जो था (फ्रैंक के जवाब के लिए मेरी टिप्पणी देखें), और निश्चित रूप से अब तक इनाम के लिए # 1 उम्मीदवार के लिए। pmm_x1हालाँकि, कुछ चीजें मुझे परेशान करती हैं : (1) पूरे डेटा सेट से x2और किसी भी संभावित संयोजन का अधिकतम योग लेना x3मूल बाधा की तुलना में बहुत अधिक विकराल है। सही बात यह है कि परीक्षण करने के लिए है कि हो सकता है प्रत्येक पंक्ति के लिए , x1 < x2 + x3। निश्चित रूप से आपके पास जितनी अधिक पंक्तियाँ होंगी, इस तरह की बाधा के साथ अनुपालन करने की आपकी संभावना उतनी ही कम होगी (क्योंकि एक बुरी पंक्ति सब कुछ बर्बाद कर देती है), और लंबे समय तक लूप संभावित रूप से प्राप्त कर सकता है।
t0x1n

(2) यदि दोनों x1और x2याद कर रहे हैं, आप के लिए एक मूल्य के लिए आरोपित कर सकते हैं x1(चलो कहते हैं कि 50) जिसके लिए बाधाओं आयोजित कर रहे हैं, लेकिन एक बार x2अध्यारोपित हो जाता है वे टूट रहे हैं (चलो कहते हैं कि यह 55 होना करने के लिए अध्यारोपित है)। क्या खड़ी के बजाय "क्षैतिज" लगाने का एक तरीका है? इस तरह हम की एक पंक्ति लिए आरोपित कर सकता है x1, x2और x3और बस फिर से आरोपित यह जब तक कि विशेष पंक्ति की कमी के अंतर्गत आती है। यह बहुत जल्दी होना चाहिए, और एक बार ऐसा हो जाने के बाद हम अगली पंक्ति में जा सकते हैं। बेशक अगर एमआई अपनी प्रकृति में "ऊर्ध्वाधर" है तो हम भाग्य से बाहर हैं। उस मामले में, शायद दृष्टिकोण का उल्लेख किया गया है?
t0x1n

कूल समाधान, +1! विशेष रूप से उपयोगी हो सकता है, क्योंकि मैं वर्तमान में miceपैकेज का उपयोग करता हूं । साझा करने के लिए धन्यवाद।
Aleksandr Blekh

1
@ t0x1n मैंने आपकी टिप्पणियों के अनुसार एक अधिक उन्नत आवरण फ़ंक्शन के साथ अपना उत्तर अपडेट किया है। यदि आप गहराई से गोता लगाना चाहते हैं, तो मैं सुझाव देता हूं कि आप यह देखने के लिए चारों ओर से खेलें कि debug()कैसे mice.impute.pmmऔर उसके भाई-बहन हुड के नीचे काम करते हैं।
मैक्स गॉर्डन 11

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

8

निकटतम चीज़ जो मुझे मिल सकती है वह है अमेलिया की पूर्व सूचना समावेश। में अध्याय 4.7 देखें शब्दचित्र , विशेष रूप से 4.7.2:

अवलोकन स्तर के पुजारी

पिछले शोध, शैक्षणिक सहमति या व्यक्तिगत अनुभव के आधार पर लापता डेटा मूल्यों के बारे में शोधकर्ताओं को अक्सर अतिरिक्त जानकारी होती है। अमेलिया इस जानकारी को काफी हद तक बेहतर इंप्रूवमेंट बनाने के लिए शामिल कर सकता है। अमेलिया एल्गोरिथ्म उपयोगकर्ताओं को अधिक सामान्य मॉडल मापदंडों के बजाय व्यक्तिगत लापता डेटा कोशिकाओं के बारे में सूचनात्मक बेयसियन पुजारियों को शामिल करने की अनुमति देता है, जिनमें से कई का सीधा अर्थ है।

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

व्यक्तिगत टिप्पणियों के बारे में पुजारियों को लापता डेटा सेल के वितरण के बारे में विश्लेषक के विश्वास का वर्णन करना चाहिए। यह या तो एक माध्य और एक मानक विचलन या एक संघनन अंतराल का रूप ले सकता है। उदाहरण के लिए, हमें पता चल सकता है कि थाईलैंड में 1986 की दर 40% के आसपास है, लेकिन हमारे पास सटीक मूल्य के अनुसार कुछ अनिश्चितता है। लापता डेटा सेल के वितरण के बारे में हमारी पूर्व धारणा, फिर, एक मानक विचलन के साथ 40 पर केंद्र है जो हमारे पूर्व विश्वास के बारे में हमारे पास अनिश्चितता की मात्रा को फिर से स्थापित करता है।

याजकों को इनपुट करने के लिए आपको चार या पाँच कॉलम के साथ एक पुजारी मैट्रिक्स का निर्माण करना होगा। मैट्रिक्स की प्रत्येक पंक्ति एक अवलोकन या एक चर पर या तो पूर्व का प्रतिनिधित्व करती है। किसी भी पंक्ति में, rst कॉलम में प्रविष्टि अवलोकन की पंक्ति है और प्रविष्टि दूसरी कॉलम है जो अवलोकन का कॉलम है। चार कॉलम पुजारी मैट्रिक्स में तीसरे और चौथे कॉलम मिसिंग वैल्यू के पूर्व वितरण के औसत और मानक विचलन हैं।

इसलिए जब आप आम तौर पर कुछ कहने में सक्षम नहीं होंगे x1<x2+x3, तो आप अपने डेटा सेट पर लूप कर सकते हैं और प्रत्येक प्रासंगिक मामले के लिए एक अवलोकन-स्तर जोड़ सकते हैं। लगातार सीमाएं भी लागू की जा सकती हैं (जैसे कि X1, x2 और x3 को सेट करना गैर-नकारात्मक होना)। उदाहरण के लिए:

priors = matrix(NA, nrow=0, ncol=5);
for (i in seq(1, length(data))) 
{
    x1 = data$x1[i];
    x2 = data$x2[i];
    x3 = data$x3[i];

    if (is.na(x1) && !is.na(x2) && !is.na(x3))
    {
        priors = rbind(priors, c(i, 1, 0, x2+x3, 0.999999))
    }
}

amelia(data, m=1, bound = rbind(c(1, 0, Inf), c(2, 0, Inf), c(3, 0, Inf)), pr = priors);

5

कई आशंकाओं के मिलान में भविष्यवाणियां लागू करने में अड़चनें आसान होती हैं। यह मानता है कि गैर-लापता विवश चर के साथ टिप्पणियों की एक महत्वपूर्ण संख्या है जो बाधाओं को पूरा करती है। मैं आर Hmiscपैकेज aregImputeफ़ंक्शन में इसे लागू करने के बारे में सोच रहा हूं । आप एक या एक महीने में वापस जाँच कर सकते हैं। यह लक्ष्य से अधिकतम दूरी निर्दिष्ट करने के लिए महत्वपूर्ण होगा कि एक दाता अवलोकन हो सकता है, क्योंकि बाधा दाताओं को आदर्श असंबंधित दाता से आगे धकेल देगी।


मुझे भी यह अच्छा लगेगा। मुझे केवल सबसे बुनियादी अंतर-वैरिएबल बाधाओं की आवश्यकता है, कहते हैं x<y<z
t0x1n

अगर मैं रास्ते से हट गया तो अपनी अज्ञानता को क्षमा कर दूं, लेकिन मैं इस धारणा के तहत था कि कई अतिक्रमण तकनीकों में एक उचित वितरण से ड्राइंग मान शामिल हैं। अस्वीकृति के नमूने का उपयोग करने के लिए क्या यह एक साधारण मामला नहीं होना चाहिए? उदाहरण के लिए जब तक कुछ निर्दिष्ट बाधाएं (जैसे x1<x2) पूरी नहीं हो जाती हैं, तब तक ड्राइंग रखें ?
t0x1n

यही वह है जो मैं आर aregImputeफ़ंक्शन के साथ भविष्य कहनेवाला मिलान के साथ कर सकता हूं । लेकिन क्या होगा यदि दाता टिप्पणियों में से कोई भी (भविष्यवाणियों के मैचों के पास) लक्ष्य अवलोकन के लिए बाधाओं को संतुष्ट नहीं करता है, भले ही उन्हें स्पष्ट रूप से दाता चर के सेट पर बाधाओं को पूरा करना पड़े?
फ्रैंक हरेल

ऐसे मामले में, शायद अनुमानित मूल्य सीधे ले? यह केवल इस तरह के नमूने के लिए प्रतिगमन (पीएमएम चरण के बिना) पर निर्भर है?
t0x1n

प्रतिगमन प्रतिरूपण थोड़े अधिक अनुमानित मूल्यों के साथ आने की संभावना है जो विषय के बाकी रिकॉर्ड के साथ असंगत हैं। इसलिए मुझे नहीं लगता कि यह पीएमएम से बचने का एक कारण है।
फ्रैंक हरेल

4

मेरा मानना ​​है कि Amelia(अमेलिया II) पैकेज में वर्तमान में डेटा मूल्यों की सीमा को निर्दिष्ट करने के लिए सबसे व्यापक समर्थन है। हालाँकि, समस्या यह है कि Ameliaमानता है कि डेटा बहुभिन्नरूपी सामान्य है।

यदि आपके मामले में बहुभिन्नरूपी सामान्यता की धारणा लागू नहीं होती है, तो आप miceपैकेज की जांच करना चाह सकते हैं , जो जंजीर समीकरणों के माध्यम से कई प्रतिरूपण (एमआई) को लागू करता है । इस पैकेज में बहुभिन्नरूपी सामान्यता की धारणा नहीं है । इसमें एक फ़ंक्शन भी है जो बाधाओं को निर्दिष्ट करने के लिए पर्याप्त हो सकता है , लेकिन मैं किस डिग्री के लिए निश्चित नहीं हूं। फंक्शन को कहा जाता है squeeze()। : आप दस्तावेज में इसके बारे में पढ़ सकते हैं http://cran.r-project.org/web/packages/mice/mice.pdfmiceउपयोगकर्ता-परिभाषित प्रतिरूपण कार्यों के विनिर्देश और एल्गोरिदम के व्यापक चयन की अनुमति देने के संदर्भ में इसका अतिरिक्त लाभ इसका लचीलापन है। यहाँ एमआई का उपयोग करने पर एक ट्यूटोरियल है mice:http://www.ats.ucla.edu/stat/r/faq/R_pmm_mi.htm

जहाँ तक मैं समझता हूँ, डॉ। हैरेल का Hmiscपैकेज, एक ही जंजीर समीकरणों ( भविष्य कहनेवाला मिलान ) दृष्टिकोण का उपयोग करते हुए , संभवतः गैर-सामान्य डेटा ( normpmmविधि के अपवाद के साथ) का समर्थन करता है । हो सकता है कि उसने ऊपर दिए गए अपने उत्तर के अनुसार पहले ही विवशता विनिर्देश कार्यक्षमता लागू कर दी हो। मैंने उपयोग नहीं किया है aregImpute(), इसलिए इसके बारे में अधिक नहीं कह सकता (मैंने उपयोग किया है Ameliaऔर mice, लेकिन मैं निश्चित रूप से आंकड़ों में विशेषज्ञ नहीं हूं, बस उतना ही सीखने की कोशिश कर रहा हूं)।

अंत में, आपको निम्नलिखित दिलचस्प, थोड़ा दिनांकित, लेकिन अभी भी अच्छा लग सकता है, लापता मूल्यों के साथ डेटा के कई आरोपण के लिए दृष्टिकोण, विधियों और सॉफ़्टवेयर का अवलोकन : http://www.ncbi.nlm.nih.gov/pmc/articles / PMC1839993 । मुझे यकीन है कि एमआई पर नए अवलोकन पत्र हैं, लेकिन वर्तमान समय में मैं इतना ही जानता हूं। मुझे उम्मीद है कि यह कुछ हद तक मददगार है।


1
यह अच्छी टिप्पणी मुझे लगता है कि भविष्य कहनेवाला मिलान का मतलब है, जो वास्तव में मनाया मूल्यों के साथ मिसाइलों की जगह लेती है, पहले से ही कुछ प्रकार के विवादों को शामिल कर सकती है यदि सभी अवलोकन किए गए डेटा उन बाधाओं को पूरा करते हैं। मैं किसी की यह सोचकर सराहना करूंगा। मैंने अभी तक किसी विशेष बाधा को लागू नहीं किया है aregImpute
फ्रैंक हरेल

1
तुम सही हो। मुझे बस एहसास हुआ कि दाता अवलोकन उन मूल्यों को प्रदान करता है जो उनके अन्य चर के अनुरूप हैं लेकिन लक्ष्य चर में अन्य चर के साथ नहीं।
फ्रैंक हरेल

1
अमिलिया द्वारा बनाई गई वितरण धारणाओं के अलावा, क्या आप किसी भी तरह से बाधाओं को निर्दिष्ट करने में सक्षम थे, जिससे मैंने अपने उत्तर में प्रदर्शन किया है? इसके साथ समस्या squeezeयह है कि इसकी सीमाएं स्थिर हैं, इसलिए आप ऐसा कुछ निर्दिष्ट नहीं कर सकते x1<x2। इसके अलावा, यह आसन्न परिणाम वेक्टर पर लागू किया गया प्रतीत होता है, जो मुझे लगता है कि बहुत देर हो चुकी है। यह मुझे लगता है कि प्रतिरूपण प्रक्रिया के दौरान सीमा पर विचार किया जाना चाहिए, इसलिए उनके पास एक बाद के समायोजन से अधिक अर्थ है।
t0x1n

1
@ t0x1n: दुर्भाग्य से, मुझे बाधाओं को निर्दिष्ट करने का मौका नहीं मिला Amelia, क्योंकि मैंने इसे से स्विच कर दिया है mice, जैसे ही मेरे परीक्षणों ने पुष्टि की कि मेरा डेटा सामान्य नहीं है। हालाँकि, मैंने हाल ही में इस विषय (MI तरीके और सॉफ्टवेयर) पर प्रस्तुति स्लाइड्स के इस बहुत अच्छे सेट को चलाया: statistik.lmu.de/~fkreuter/imputation_sose2011/downloads/… । अगर मुझे सही तरीके से समझ में आया, तो यह बाधाओं की समस्या के संभावित समाधान का वर्णन करता है (देखें पीडीएफ का पृष्ठ 50 - स्लाइड संख्या 50 नहीं))। उम्मीद है की यह मदद करेगा।

1
@ t0x1n: दरअसल, समाधान 50 और 51 पृष्ठों पर वर्णित किया गया है।
हांग्जो Blekh

0

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो यह मुझे प्रतीत होता है कि आप पहले से ही जानते हैं कि लापता चर किन मूल्यों को कुछ बाधाओं के अधीन लेना चाहिए। मैं एसपीएसएस में बहुत अधिक बातचीत नहीं कर रहा हूं, लेकिन आरआई को लगता है कि आप ऐसा करने के लिए एक फ़ंक्शन लिख सकते हैं (जो मुझे आपके अनुभव के आधार पर बहुत मुश्किल नहीं होना चाहिए)। मुझे ऐसे किसी भी पैकेज का पता नहीं है जो इस तरह की बाधाओं के साथ काम करता है।

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