কীভাবে আর মাইস ডেটা ইমপুটেশন চলমান সময়ের উন্নতি করবেন


9

সংক্ষেপে আমার প্রশ্ন: আর মাইস (ডেটা ইমপুটেশন) চলমান সময়ে উন্নতি করার কোনও পদ্ধতি আছে কি?

আমি একটি ডেটা সেট (30 ভেরিয়েবল, 1.3 মিলিয়ন সারি) নিয়ে কাজ করছি যার মধ্যে (বেশ এলোমেলোভাবে) হারিয়ে যাওয়া তথ্য রয়েছে। 30 টির মধ্যে 15 টির মধ্যে প্রায় 8% পর্যবেক্ষণে এনএ থাকে। অনুপস্থিত ডেটাটিকে বোঝানোর জন্য, আমি মাইস প্যাকেজের অংশ মাইস ফাংশনটি চালাচ্ছি ।

আমি পদ্ধতিটি "ফাস্টপিমিএম" এবং এম = 1 সহ একটি উপসেটে (100,000 সারি), এমনকি বেশ ধীরে চলমান সময়টি অনুভব করি এবং প্রায় 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
সাধারণভাবে: এই ধরণের প্রশ্নগুলি ক্রস ভ্যালিটেটেডের জন্য উপযুক্ত, বা স্ট্যাক ওভারফ্লোয়ের জন্য আরও উপযুক্ত?
ডেনড্রোব্যাটস

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

1
আপনি 'ফাস্টপিম' বিকল্পটি 'আদর্শ' এ পরিবর্তন করতে পারেন, এটি দ্রুত হতে চলেছে
marc1s

1
THx @ marc1 গুলি, এটি বড় ডেটাসেটের জন্য অনেক উন্নতি করেছে। 10,000 সারি সহ একটি এলোমেলো ডেটা ফ্রেমের (উপরে হিসাবে) পদ্ধতি "আদর্শ" "ফাস্টপিমিএম" এর চেয়ে প্রায় 4 গুণ বেশি দ্রুত ছিল। 50,000 সারি সহ এটি আরও 12 গুণ দ্রুত ছিল। সুতরাং, চলমান সময়ে আপেক্ষিক লাভ সারি সংখ্যা দ্বারা বৃদ্ধি পাচ্ছে।
Dendrobates

1
আপনি যে মডেলটি চালাচ্ছেন তার উপর নির্ভর করে সর্বাধিক সম্ভাবনা (বা সম্পূর্ণ তথ্য সর্বাধিক সম্ভাবনা) অনুমানটি ব্যবহার করা আরও দ্রুত হতে পারে, যা মডেলটি সঠিকভাবে নির্দিষ্ট করা থাকলে অভিশাপের সমান। এখানে একটি কাগজ আমি জড়িত ছিল, যে বিভিন্ন পদ্ধতি তুলনা নেই emeraldinsight.com/doi/abs/10.1108/JCP-02-2015-0007
জেরেমি মাইলস

উত্তর:


4

আপনি ব্যবহার করতে পারেন quickpred()থেকে miceপ্যাকেজ আপনি নির্দিষ্ট করে ভবিষ্যতবক্তা সীমিত করতে পারেন যা ব্যবহার mincor (নূন্যতম পারস্পরিক সম্পর্ক) এবং minpuc (ব্যবহারযোগ্য ক্ষেত্রে অনুপাত)। এছাড়াও আপনি পূর্বাভাসীদের নিয়ন্ত্রণের জন্য বাদ দেওয়া এবং প্যারামিটারগুলি অন্তর্ভুক্ত করতে পারেন।


2

আমি miceফাংশনটির জন্য একটি মোড়ক তৈরি করেছি যার মধ্যে একটি অতিরিক্ত যুক্তি রয়েছে droplist, যেখানে আপনি প্রেডিক্টর ভেরিয়েবলের একটি অক্ষর ভেক্টরকে পাস করতে পারেন যা আপনি ইমডিউশন সূত্রগুলির ডান-হাত ব্যবহার করতে চান না । এটি গতির জন্য ছিল, কারণ আমি পেয়েছি যে অনেক স্তরের ফ্যাক্টর ভেরিয়েবলগুলি অনুপ্রেরণাটি যথেষ্ট গতি কমিয়ে দেবেquickpred@ আনিশ দ্বারা উল্লেখ করা ফাংশন সম্পর্কে আমি অবগত ছিলাম না , এবং সম্ভবত আপনি উভয় ধারণা একসাথে ব্যবহার করতে পারেন।

নীচের ফাংশনটি যেমনটি আমার গ্ল্যাম্পলাস প্যাকেজটিতে প্রদর্শিত হয় । আপনি যদি এটি দরকারী মনে করেন, আমি প্রকৃত 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.