অনুপস্থিত মানগুলির জন্য একাধিক অনুদান


13

আমি নির্দিষ্ট সীমাবদ্ধতার অধীনে আমার ডেটা সেটটিতে হারিয়ে যাওয়া মানগুলি প্রতিস্থাপনের জন্য অভিশাপ ব্যবহার করতে চাই।

উদাহরণস্বরূপ, আমি নিক্ষিপ্ত পরিবর্তনশীল চাই x1, বলতে বেশী হতে অথবা আমার দুই অন্যান্য ভেরিয়েবল সমষ্টির সমান x2এবং x3। আমিও চাই x3হয় এর আরোপিত করা 0বা >= 14এবং আমি চাই x2দ্বারা পারেন আরোপিত করা 0বা >= 16

আমি একাধিক অনুমানের জন্য এসপিএসে এই সীমাবদ্ধতাগুলি সংজ্ঞায়নের চেষ্টা করেছি, তবে এসপিএসএসে আমি কেবলমাত্র সর্বোচ্চ এবং সর্বনিম্ন মান নির্ধারণ করতে পারি। এসপিএসএসে আরও প্রতিবন্ধকতা নির্ধারণ করার কোনও উপায় আছে বা আপনি কি কোনও আর প্যাকেজ জানেন যা আমাকে অনুপস্থিত মূল্যবোধের প্রতিশ্রুতি দেওয়ার জন্য এই জাতীয় সীমাবদ্ধতাগুলি সংজ্ঞায়িত করতে দেয়?

আমার তথ্য নিম্নরূপ:

   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প্যাকেজটির জন্য আপনার নিজস্ব কাস্টম ইমপুটেশন ফাংশন লিখুন । প্যাকেজটি এর জন্য প্রস্তুত এবং সেটআপটি অবাক করে ব্যথা মুক্ত pain

প্রস্তাবিত হিসাবে প্রথমে আমরা ডেটা সেটআপ করি:

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ঘোরা ভবিষ্যদ্বাণীপূর্ণ গড় ম্যাচিং একটানা ভেরিয়েবল আরোপিত হিসাবের জন্য সম্ভবত সবচেয়ে জনপ্রিয় নিন্দা অ্যালগরিদম -। এটি একটি রিগ্রেশন মডেল ব্যবহার করে পূর্বাভাসিত মানটি গণনা করে এবং 5 টি নিকটতম উপাদানকে পূর্বাভাসিত মানের ( ইউক্লিডিয়ান দূরত্ব দ্বারা ) বাছাই করে। এই নির্বাচিত উপাদানগুলিকে দাতা পুল বলা হয় এবং চূড়ান্ত মানটি এই দাতা পুল থেকে এলোমেলোভাবে বেছে নেওয়া হয়।

পূর্বাভাস ম্যাট্রিক্স থেকে আমরা দেখতে পেলাম যে পদ্ধতিগুলি ভেরিয়েবলগুলি নিষেধাজ্ঞার জন্য আগ্রহী বলে পাস করেছে interest নোট করুন যে সারিটি লক্ষ্য পরিবর্তনশীল এবং কলামটি পূর্বাভাসকারী। X3 এর এক্স 3 কলামে 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. উপযুক্ত ম্যাচ না পেয়ে x বার চেষ্টা করার পরে দাতা পুলকে স্ফীত করুন (এটি প্রাথমিকভাবে বিকালবেলায় প্রযোজ্য)

এটি কিছুটা জটিল জটিল মোড়ক ফাংশনে ফলাফল:

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অনুপস্থিত মানগুলি অন্তর্ভুক্ত করে এবং আমরা সম্ভাব্য উপাদানগুলি যে উপযুক্ত ফলস্বরূপ পেয়েছি তা সরিয়ে আমরা লুপটি দ্রুততর করতে পারি, তবে আমি অভ্যন্তরীণ কার্যকারিতা সম্পর্কে অপরিচিত হিসাবে আমি এ থেকে বিরত রয়েছি।

আমার মনে হয় আপনার যখন দৃ strong় প্রতিবন্ধকতাগুলি পূর্ণ পূর্ণ হতে সময় লাগে তখন আপনার গুরুত্বপূর্ণ বিষয়গুলি হল আপনার ধারণার সমান্তরালতা ( ক্রসভিলেটেডে আমার উত্তর দেখুন )। বেশিরভাগের কাছে আজ 4-8 কোরের কম্পিউটার রয়েছে এবং আর কেবল সেগুলির মধ্যে একটি ডিফল্টরূপে ব্যবহার করে। কোরের সংখ্যা দ্বিগুণ করে সময়টি প্রায় (প্রায়) কাটা হতে পারে।

অনুমানের সময় প্যারামিটারগুলি অনুপস্থিত

x2অনুমানের সময় নিখোঁজ হওয়ার সমস্যা সম্পর্কে - ইঁদুর আসলে অনুপস্থিত মানগুলি কখনই ফিড করে না x- data.frameইঁদুরের পদ্ধতি শুরুতে কিছু র্যান্ডম মান পূরণ অন্তর্ভুক্ত করা হয়েছে। অনুমানের শৃঙ্খলা-অংশ এই প্রাথমিক মান থেকে প্রভাব সীমাবদ্ধ করে। আপনি যদি miceফাংশনটির দিকে নজর দেন তবে আপনি এটি ইমপুটেশন কল (দ্য mice:::samplerফাংশন) এর আগে খুঁজে পাবেন :

...
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.imput.sample মৌলিক স্যাম্পলিং পদ্ধতি।

ভিজিটিং ক্রম

যদি পরিদর্শন ক্রমটি গুরুত্বপূর্ণ হয় তবে আপনি ক্রমটি নির্দিষ্ট করতে পারেন যাতে- miceফাংশন অনুপ্রবেশ চালায়। ডিফল্ট থেকে হয় 1:ncol(data)তবে আপনি নিজের পছন্দমতো কিছু সেট visitSequenceকরতে পারেন।


+1 এটি দুর্দান্ত জিনিস, আমার মনের মধ্যে ঠিক কী ছিল (ফ্রাঙ্কের জবাব সম্পর্কে আমার মন্তব্য দেখুন), এবং নিশ্চিতভাবে এখনের হিসাবে অনুগ্রহের জন্য # 1 প্রার্থী। pmm_x1যদিও কয়েকটি জিনিস আমাকে সমস্যায় ফেলে : (1) সম্পূর্ণ ডেটা সেট থেকে x2এবং কোনও সম্ভাব্য সংমিশ্রণের সর্বাধিক যোগফলটি x3মূল সীমাবদ্ধতার চেয়ে অনেক বেশি শক্ত inger সঠিক জিনিস পরীক্ষা করার জন্য যে হবে প্রতিটি সারির জন্য , x1 < x2 + x3। অবশ্যই আপনার যত বেশি সারি রয়েছে, এ জাতীয় সীমাবদ্ধতা মেনে চলার আপনার সুযোগটি তত কম হবে (একক খারাপ সারি যেমন সমস্ত কিছু নষ্ট করে দেয়) এবং লুপটি সম্ভবত এটি পেতে পারে।
t0x1n

(2) উভয় x1এবং x2অনুপস্থিত, আপনার জন্য একটি মান আরোপ করতে পারে x1(আসুন বলে 50), যার জন্য সীমাবদ্ধতার অনুষ্ঠিত হয়, কিন্তু একবার x2আরোপিত পরার তারা ভাঙা হয় (আসুন বলে 55 হতে আরোপিত করা হয়েছে)। উল্লম্বের চেয়ে "অনুভূমিকভাবে" অভিযুক্ত করার কোনও উপায় আছে কি? এই ভাবে আমরা অবশ্যই একটি একক সারি আরোপ পারে x1, x2এবং x3কেবল পুনরায় আরোপ এটা না হওয়া পর্যন্ত নির্দিষ্ট সারি সীমাবদ্ধতার অধীনে পড়ে। এটি যথেষ্ট দ্রুত হওয়া উচিত এবং এটি শেষ হয়ে গেলে আমরা পরবর্তী সারিতে যেতে পারি। অবশ্যই এমআই প্রকৃতির যদি "উল্লম্ব" হয় তবে আমরা ভাগ্যের বাইরে আছি। সেক্ষেত্রে সম্ভবত আলেকসান্দ্রের দৃষ্টিভঙ্গির কথা বলা হয়েছে?
t0x1n

শীতল সমাধান, +1! আমি miceপ্যাকেজটি বর্তমানে ব্যবহার করছি বলে বিশেষত কার্যকর হতে পারে । ভাগ করে নেওয়ার জন্য ধন্যবাদ.
আলেকসান্ডার ব্লেক

1
@ t0x1n আমি আপনার মন্তব্য অনুসারে আমার উত্তরকে আরও উন্নত র‍্যাপার ফাংশন দিয়ে আপডেট করেছি। আপনি যদি আরও গভীরভাবে ডুবতে চান, তবে আমি পরামর্শ দিচ্ছি যে আপনি debug()কীভাবে mice.impute.pmmএবং এর ভাইবোনরা হুডের নীচে কীভাবে কাজ করে তা দেখার জন্য আপনি চারপাশে খেলুন ।
ম্যাক্স গর্ডন

1
@ t0x1n: আমার ধারণা - আপনার দোষযুক্ত মানগুলি পরীক্ষা করুন। যদি এগুলি অবাস্তব মনে হয় তবে আপনি কেবল মডেলটির চেয়ে কম কেন্দ্রীভূতদের অভিযুক্ত করার জন্য আমার পদ্ধতির চয়ন করতে পারেন। আমার ক্ষেত্রে আমি এক্স-রে ছাড়াই তাদের বাদ দেওয়ার জন্য বেছে নিয়েছি যেহেতু তারা অধ্যয়নের কেন্দ্রবিন্দুতে রয়েছে এবং ফলশ্রুতিগুলি চিকিত্সকভাবে প্রশংসনীয় মান প্রদান করে না (পা ফাটলের পরে দীর্ঘ হয়ে যায়)। আমি এটির সাথে পুরোপুরি সন্তুষ্ট নই তবে এটি একটি যুক্তিসঙ্গত আপস বলে মনে হচ্ছে।
ম্যাক্স গর্ডন

8

আমি যে নিকটতম জিনিসটি খুঁজে পেতে পারি তা হ'ল আমেলিয়ার পূর্বের তথ্য অন্তর্ভুক্তি। অধ্যায় 4.7 দেখুন চিত্র , নির্দিষ্টভাবে 4.7.2:

পর্যবেক্ষণ-স্তরের প্রিয়া

গবেষকরা প্রায়শই পূর্ববর্তী গবেষণা, একাডেমিক onকমত্য বা ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে ডেটা মূল্য অনুপস্থিত সম্পর্কে অতিরিক্ত পূর্বের তথ্য রাখেন। অ্যামেলিয়া এই তথ্যের সাথে ব্যাপকভাবে উন্নত অভিব্যক্তি তৈরি করতে পারে। অ্যামেলিয়া অ্যালগরিদম ব্যবহারকারীদের আরও সাধারণ মডেল পরামিতিগুলির পরিবর্তে পৃথক অনুপস্থিত ডেটা কোষগুলি সম্পর্কে তথ্যমূলক বায়েশিয়ান প্রিরিয়ারগুলি অন্তর্ভুক্ত করার অনুমতি দেয়, যার অনেকেরই সরাসরি অর্থ হয় না।

প্রিয়ারদের অন্তর্ভুক্তি বেসিক বেইসিয়ান বিশ্লেষণ অনুসরণ করে যেখানে অনুমিতিটি মডেল-ভিত্তিক অনুমিতকরণ এবং পূর্বের গড়ের ওজনযুক্ত গড় হিসাবে প্রমাণিত হয়, যেখানে ওজনগুলি ডেটার আপেক্ষিক শক্তির কার্যকারিতা এবং পূর্ববর্তী: যখন মডেলটি খুব ভালভাবে পূর্বাভাস দেয় , অনুমানটি পূর্বের ওজনকে হ্রাস করবে এবং এর বিপরীতে (হোনেকার এবং কিং, ২০১০)।

পৃথক পর্যবেক্ষণ সম্পর্কে প্রিয়ারদের অনুপস্থিত ডেটা সেলের বিতরণ সম্পর্কে বিশ্লেষকের বিশ্বাসকে বর্ণনা করা উচিত। এটি হয় গড় এবং একটি আদর্শ বিচ্যুতি বা একটি ঘনত্বের ব্যবধানের রূপ নিতে পারে। উদাহরণস্বরূপ, আমরা জানি যে থাইল্যান্ডে 1986 তারির হার প্রায় 40%, তবে সঠিক মান সম্পর্কে আমাদের কিছুটা অনিশ্চয়তা রয়েছে। অনুপস্থিত ডেটা সেলের বিতরণ সম্পর্কে আমাদের পূর্ব বিশ্বাস, তারপরে, 40-এ একটি মানক বিচ্যুতি নিয়ে কেন্দ্র করে যা আমাদের পূর্ব বিশ্বাস সম্পর্কে আমাদের যে অনিশ্চয়তা রয়েছে তার পরিমাণ বাড়ায়।

প্রিয়ারদের ইনপুট করতে আপনাকে অবশ্যই চার বা পাঁচটি কলাম দিয়ে একটি প্রাইয়ার্স ম্যাট্রিক্স তৈরি করতে হবে। ম্যাট্রিক্সের প্রতিটি সারি একটি পর্যবেক্ষণ বা একটি ভেরিয়েবলের পূর্বের প্রতিনিধিত্ব করে। যে কোনও সারিতে, প্রথম কলামে প্রবেশ পর্যবেক্ষণের সারি এবং এন্ট্রিটি দ্বিতীয় কলামটি পর্যবেক্ষণের কলাম হয়। চারটি কলাম প্রিয়ার্সের ম্যাট্রিক্সে তৃতীয় এবং চতুর্থ কলামগুলি হ'ল মানের পূর্ব বিতরণটির গড় এবং মানক বিচ্যুতি।

সুতরাং আপনি সাধারণত এর মতো কিছু বলতে সক্ষম হবেন না 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ডেটা মাল্টিভারিয়েট স্বাভাবিক বলে ধরে normal

যদি আপনার ক্ষেত্রে মাল্টিভারিয়েট স্বাভাবিকের অনুমান প্রযোজ্য না হয়, আপনি miceপ্যাকেজটি চেক করতে চাইতে পারেন , যা শৃঙ্খলিত সমীকরণের মাধ্যমে একাধিক ইমপুটেশন (এমআই) প্রয়োগ করে । এই প্যাকেজে মাল্টিভারিয়েট স্বাভাবিকতার অনুমান নেই । এটিতে একটি ফাংশন রয়েছে যা সীমাবদ্ধতা নির্দিষ্ট করার জন্য যথেষ্ট হতে পারে তবে আমি কোন ডিগ্রী সম্পর্কে নিশ্চিত নই। ফাংশন বলা হয় । আপনি ডকুমেন্টেশনে এটি সম্পর্কে পড়তে পারেন: http://cran.r-project.org/web/packages/mice/mice.pdf । এর অতিরিক্ত সুবিধা হ'ল ব্যবহারকারী-সংজ্ঞায়িত অভিব্যক্তি ফাংশনগুলির স্পেসিফিকেশন এবং অ্যালগরিদমের বিস্তৃত নির্বাচনকে মঞ্জুরি দেওয়ার ক্ষেত্রে তার নমনীয়তা। এমআই সম্পাদন করার জন্য এখানে একটি টিউটোরিয়াল রয়েছে :squeeze()micemicehttp://www.ats.ucla.edu/stat/r/faq/R_pmm_mi.htm

যতদূর আমি বুঝতে পেরেছি, ডঃ হ্যারেলের Hmiscপ্যাকেজ একই শৃঙ্খলিত সমীকরণ ( ভবিষ্যদ্বাণীপূর্ণ গড়ের মিল ) পদ্ধতির ব্যবহার করে সম্ভবত অ-সাধারণ ডেটা সমর্থন করে ( normpmmপদ্ধতি বাদে )। সম্ভবত তিনি উপরের উত্তর অনুসারে সীমাবদ্ধতার স্পেসিফিকেশন কার্যকারিতা কার্যকর করেছেন। আমি ব্যবহার করি নি aregImpute(), তাই এটি সম্পর্কে আরও বেশি কিছু বলতে পারি না (আমি ব্যবহার করেছি Ameliaএবং miceতবে আমি অবশ্যই পরিসংখ্যানের বিশেষজ্ঞ নই, কেবল যতটা পারি শেখার চেষ্টা করছি)।

শেষ অবধি, আপনি নিম্নলিখিতটি আকর্ষণীয় খুঁজে পেতে পারেন, এটি একটি সামান্য তারিখযুক্ত তবে তবুও সুন্দর, নিখোঁজ মানগুলির সাথে ডেটা একাধিক প্রত্যাখ্যানের জন্য পদ্ধতির, পদ্ধতি এবং সফ্টওয়্যার সম্পর্কিত ওভারভিউ : http://www.ncbi.nlm.nih.gov/pmc/articles / পিএমসি 1839993 । আমি নিশ্চিত যে এমআই-তে আরও নতুন ওভারভিউ পেপার রয়েছে, তবে আমি বর্তমানে এটি সম্পর্কে অবগত রয়েছি। আমি আশা করি এটি কিছুটা সহায়ক।


1
এই দুর্দান্ত মন্তব্যটি আমাকে ভাবতে বাধ্য করে যে ভবিষ্যদ্বাণীপূর্ণ গড়ের মিলটি, যা অনুপস্থিত মানগুলির সাথে মিসিংকে প্রতিস্থাপন করে, যদি পর্যবেক্ষণ করা সমস্ত ডেটা এই সীমাবদ্ধতাগুলি পূরণ করে তবে ইতিমধ্যে কিছু ধরণের প্রতিবন্ধকতাগুলি অন্তর্ভুক্ত করতে পারে। আমি এই মাধ্যমে কেউ চিন্তা করে প্রশংসা করব। আমি এখনও পর্যন্ত কোনও বিশেষ বাধা প্রয়োগ করি নি aregImpute
ফ্রাঙ্ক হ্যারেল

1
তুমি ঠিক. আমি শুধু বুঝতে পারেন যে দাতা পর্যবেক্ষণ মান যে সঙ্গে সামঞ্জস্যপূর্ণ হয় প্রদান তাদের অন্যান্য ভেরিয়েবল কিন্তু লক্ষ্য পরিবর্তনশীল অন্যান্য ভেরিয়েবল সাথে নয়।
ফ্রাঙ্ক হ্যারেল

1
আমেলিয়ার করা বিতরণ অনুমানের পাশাপাশি, আপনি কি আমার উত্তরে আমি যে চিত্র প্রদর্শন করেছি তার চেয়ে আরও বিশদে বিশদ সীমাবদ্ধতা নির্দিষ্ট করতে সক্ষম হয়েছিলেন? সমস্যাটি squeezeহ'ল এর সীমানা স্থির থাকে, সুতরাং আপনি এর মতো কিছু নির্দিষ্ট করতে পারবেন না x1<x2। এছাড়াও, এটি অভিযুক্ত ফলাফল ভেক্টরটির কাছে উপস্থিত হয়েছিল বলে মনে হয়, যা আমার বিশ্বাস অনেক দেরিতে। আমার কাছে মনে হয় যে অভিবাসন প্রক্রিয়া চলাকালীন সীমানাগুলি বিবেচনা করা উচিত, তাই তাদের সত্য-পরবর্তী সামঞ্জস্যের চেয়ে আরও বেশি অর্থ রয়েছে।
t0x1n

1
@ t0x1n: দুর্ভাগ্যক্রমে, আমার মধ্যে প্রতিবন্ধকতা নির্দিষ্ট করার সুযোগ হয়নি Amelia, কারণ আমি এটি থেকে স্যুইচ করেছি mice, আমার পরীক্ষাগুলি নিশ্চিত হওয়ার সাথে সাথেই আমার ডেটাটি মাল্টিভারিয়েট স্বাভাবিক নয়। যাইহোক, আমি সম্প্রতি বিষয়ে উপস্থাপনা স্লাইডগুলি (এমআই পদ্ধতি এবং সফ্টওয়্যার) এর এই খুব সুন্দর সেট জুড়ে দৌড়ে: statistik.lmu.de/~fkreuter/imputation_sose2011/downloads/... । যদি আমি সঠিকভাবে বুঝতে পারি তবে এটি সীমাবদ্ধতা সমস্যার সম্ভাব্য সমাধানের বর্ণনা দেয় (পিডিএফের পৃষ্ঠা 50 দেখুন - 50 নম্বর স্লাইড নয়!)। আশাকরি এটা সাহায্য করবে.
আলেকসান্দ্র ব্লেক

1
@ t0x1n: আসলে, সমাধানটি 50 এবং 51 পৃষ্ঠাগুলিতে বর্ণিত হয়েছে।
আলেকসান্দ্র ব্লেক

0

যদি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আমার কাছে মনে হয় যে আপনি ইতিমধ্যে জানেন যে অনুপস্থিত ভেরিয়েবলগুলি কী কী মানকে কিছু সীমাবদ্ধতার বিষয় বিবেচনা করবে। আমি এসপিএস-তে খুব বেশি কথোপকথনকারী নই তবে আরআই-তে মনে হয় আপনি এটি করার জন্য কোনও ফাংশন লিখতে পারেন (যা আমার বলার মতো অভিজ্ঞতার উপর নির্ভর করে খুব বেশি কঠিন হওয়া উচিত নয়)। আমি এমন কোনও প্যাকেজ জানি না যা এই জাতীয় বাধা নিয়ে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.