জিরো সমেত ইনপুট ডেটাতে একটি ওয়েইবুল বিতরণ কীভাবে ফিট করবেন?


14

আমি একটি বিদ্যমান পূর্বাভাস অ্যালগরিদম পুনরুত্পাদন করার চেষ্টা করছি, যা অবসরপ্রাপ্ত গবেষক দ্বারা হস্তান্তরিত। প্রথম পদক্ষেপটি একটি ওয়েবেল বিতরণে কিছু পর্যবেক্ষণ করা ডেটা ফিট করা, একটি আকার এবং স্কেল অর্জন করা যা ভবিষ্যতের মানগুলির পূর্বাভাসের জন্য ব্যবহৃত হবে। আমি এটি করতে আর ব্যবহার করছি। এখানে আমার কোডের একটি উদাহরণ রয়েছে:

x<-c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,51,77,78,144,34,29,45,16,15,37,218,170,44,121)
f<-fitdistr(x, 'weibull')

ইনপুট অ্যারেতে কোনও জিরো না থাকলে এটি কাজ করে যা এটি সম্পূর্ণরূপে ব্যর্থ হয়। একই জিনিসটি এসএএস-এ ঘটে। যেহেতু আমি এটি বুঝতে পেরেছি, কারণ ওয়েবুল বিতরণ গণনা করার একটি পদক্ষেপ প্রাকৃতিক লগ গ্রহণ করছে, যা 0 এর জন্য পূর্বনির্ধারিত? এটির চারপাশে কাজ করার কোনও যুক্তিসঙ্গত উপায় আছে কি?

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

সম্পাদনা: ইনপুট অ্যারেতে মানগুলি পর্যবেক্ষণ করা হয়, রিয়েল-ওয়ার্ল্ড ডেটা (কোনও কিছুর সংখ্যার সংখ্যা) কয়েক বছর ধরে। সুতরাং কিছু বছরগুলিতে সংখ্যার সংখ্যা শূন্য ছিল। এটি সর্বোত্তম উপায়ে হোক বা না হোক (আমি একমত যে এটি নাও হতে পারে), মূল অ্যালগোরিদম লেখক ওয়েবুল বিতরণ ব্যবহার করেছেন বলে দাবি করেছেন এবং তাদের প্রক্রিয়াটি প্রতিলিপি করার চেষ্টা করতে হবে।


5
ওয়েইবুল একটি অবিচ্ছিন্ন বিতরণ যাতে সঠিক শূন্য হওয়ার সম্ভাবনা শূন্য থাকে। আপনি যদি আপনার ডেটাতে অনেকগুলি শিরো পেয়ে থাকেন তবে তা অবিলম্বে একটি ক্লু যা ওয়েবুল অনুপযুক্ত। যে কোনও হারে, আপনার ডেটা গণনা ডেটার মতো দেখায় (বা কমপক্ষে পৃথক হয়) এবং তাই কোনও ওয়েইবুল সম্ভবত সেরা পছন্দ নয়।
কার্ডিনাল

তথ্যটি কোথা থেকে এসেছে সে সম্পর্কে কিছু প্রসঙ্গ যুক্ত করা যে কাউকে দুর্দান্ত উত্তর দেওয়ার চেষ্টা করতে সহায়তা করবে।
কার্ডিনাল

উত্তর:


8

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

বিভিন্ন বিকল্প পদ্ধতি রয়েছে যা ডেটাতে জিরো দ্বারা প্রভাবিত হয় না, যেমন বিভিন্ন পদ্ধতি-মুহুর্তের অনুমানকারী ব্যবহার করে। এগুলির জন্য সাধারণত গামা ফাংশন জড়িত সমীকরণগুলির সংখ্যাসূচক সমাধান প্রয়োজন, কারণ ওয়েইবুল বিতরণের মুহুর্তগুলি এই ফাংশনের শর্তে দেওয়া হয়। আমি আর এর সাথে পরিচিত নই, তবে এখানে একটি সেজ প্রোগ্রাম রয়েছে যা একটি সহজ পদ্ধতির চিত্রিত করে - সম্ভবত এটি আর এর সাথে মানিয়ে নেওয়া যায়? (আপনি এগুলি এবং এই জাতীয় অন্যান্য পদ্ধতিগুলির বিষয়ে পড়তে পারেন, উদাহরণস্বরূপ, "দ্য ওয়েইবুল ডিস্ট্রিবিউশন: একটি হ্যান্ডবুক" হোর্স্ট রিনির, পৃষ্ঠা 455 f- তবে, তাঁর eq.12.4b তে একটি টাইপও রয়েছে, '-1' হিসাবে অপ্রয়োজনীয়)।

"""
Blischke-Scheuer method-of-moments estimation of (a,b)
for the Weibull distribution F(t) = 1 - exp(-(t/a)^b)
""" 

x = [23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,16,15,37,218,170,44,121]
xbar = mean(x)
varx = variance(x)
var("b"); f(b) = gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2
bhat = find_root(f, 0.01, 100)
ahat = xbar/gamma(1+1/bhat)
print "Estimates: (ahat, bhat) = ", (ahat, bhat)

এই আউটপুট উত্পাদন

Estimates: (ahat, bhat) =  (81.316784310814455, 1.3811394719075942)


0

x = [23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121]

তারপরে একই পদ্ধতি আউটপুট উত্পাদন করে

Estimates: (ahat, bhat) =  (78.479354097488923, 1.2938352346035282)


সম্পাদনা: আমি একবার চেষ্টা করে দেখতে আর ইনস্টল করেছি। এই উত্তরটি দীর্ঘস্থায়ী করার ঝুঁকিতে, এখানে আগ্রহী যে কারও জন্য ব্লিস্ক-স্কিউয়ার পদ্ধতির জন্য আমার আর-কোডটি রয়েছে:

fit_weibull <- function(x)
{
    xbar <- mean(x)
    varx <- var(x)
    f <- function(b){return(gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2)}
    bhat <- uniroot(f,c(0.02,50))$root
    ahat <- xbar/gamma(1+1/bhat)
    return(c(ahat,bhat))
}

এটি উপরের দুটি সেজের উদাহরণ পুনরুত্পাদন করে (পাঁচটি উল্লেখযোগ্য অঙ্কে):

x <- c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
     51,77,78,144,34,29,45,16,15,37,218,170,44,121)
fit_weibull(x)
[1] 81.316840  1.381145

x <- c(23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121)
fit_weibull(x)
[1] 78.479180  1.293821

4

θfitdistrθθfitdistr

foo <- function(theta, x)
{
  if (theta <= -min(x)) return(Inf);
  f <- fitdistr(x+theta, 'weibull')
  -2*f$loglik
}

তারপরে এক-মাত্রিক অপ্টিমাইজেশন ব্যবহার করে এই ফাংশনটি হ্রাস করুন:

bar <- optimize(foo, lower=-min(x)+0.001, upper=-min(x)+10, x=x)

যেখানে আমি কিছুই করার ভিত্তিতে সবেমাত্র "+10" তৈরি করেছি।

জিরো দিয়ে প্রতিস্থাপন করা তিনটি ক্ষুদ্রতম মান সহ ডেটাগুলির জন্য, আমরা পাই:

> bar
$minimum
[1] 2.878442

$objective
[1] 306.2792

> fitdistr(x+bar$minimum, 'weibull')
     shape        scale   
   1.2836432   81.1678283 
 ( 0.1918654) (12.3101211)
> 

bar$minimum এর এমএলই θ, এবং fitdistrআউটপুটগুলি যৌথভাবে ওয়েইবুল প্যারামিটারের এমএলইগুলি হয়θএটাই. আপনি দেখতে পাচ্ছেন যে, তারা উপরে বর্ণিত পদ্ধতিটির মুহুর্তের আনুমানিকের খুব কাছাকাছি।


2

এটি ব্যর্থ হওয়া উচিত, এটি ব্যর্থ হওয়ার জন্য আপনার কৃতজ্ঞ হওয়া উচিত।

আপনার পর্যবেক্ষণগুলি প্রমাণ করেছে যে আপনি তাদের পর্যবেক্ষণ শুরু করার মুহুর্তেই ব্যর্থতাগুলি ঘটেছে। যদি এটি একটি আসল প্রক্রিয়া হয়, আসল (এবং সিমুলেটেড ডেটা নয়) থেকে আসে তবে আপনি কেন জিরো হচ্ছেন সে কারণেই আপনাকে কোনওভাবে অ্যাকাউন্ট করতে হবে। আমি বেঁচে থাকার অধ্যয়ন দেখেছি যেখানে 0 টি বেশ কয়েকটি জিনিসের একটিতে ফলাফল হিসাবে প্রদর্শিত হয়:

  1. ডেটা আসলে কাটা হয়েছে: অধ্যয়ন শুরুর আগে অবজেক্টগুলি ঝুঁকিতে পড়েছিল এবং ব্যর্থ হয়েছিল এবং আপনি ভেবে দেখতে চান যে আপনি সেগুলি সমস্ত পর্যবেক্ষণ করেছেন।
  2. যন্ত্রগুলি খারাপভাবে ক্যালিব্রেটেড করা হয়েছে: আপনার কাছে অধ্যয়নের জন্য পর্যাপ্ত পরিমাপের যথার্থতা নেই এবং তাই শুরুর সময়টির সাথে ঘটে যাওয়া ব্যর্থতাগুলি ঠিক শূন্য হিসাবে কোড করা হয়েছিল।
  3. শূন্য হিসাবে কোড করা জিনিসটি শূন্য নয়। তারা এমন ব্যক্তি বা বস্তু যা বিশ্লেষণ থেকে একরকম বা অন্য কোনওভাবে বাদ ছিল না। শূন্যটি মার্জ করা মানগুলি পুনরায় সাজানোর বা অন্যথায় পুনর্নির্মাণের ফলাফল হিসাবে ডেটাতে দেখায়।

সুতরাং কেস 1: আপনার যথাযথ সেন্সরিং পদ্ধতিগুলি ব্যবহার করা দরকার, এমনকি যদি এর অর্থ retrospectively রেকর্ডগুলি টানতে হয়। কেস 2 এর অর্থ হ'ল আপনি EM অ্যালগরিদম ব্যবহার করতে পারেন কারণ আপনার কাছে যথার্থ সমস্যা রয়েছে। বায়েশিয়ান পদ্ধতিগুলিও এখানে একইভাবে কাজ করে। কেস 3 এর অর্থ হ'ল আপনাকে যে মানগুলি অনুপস্থিত বলে মনে করা হয়েছিল তা বাদ দিতে হবে।


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

ওহ, ভাল নোট! ওয়েইবুল বিতরণে ফিট করা অত্যন্ত ভুল। এটির অবিচ্ছিন্ন সমর্থন রয়েছে এবং এটি কখনও গণনা ছাড়াও বেঁচে থাকার সময় হিসাবে ব্যবহৃত হয় না। নেতিবাচক দ্বিপদী বিতরণগুলি মডেলিং গণনাগুলির জন্য সমতুল্য দুটি প্যারামিটার বিতরণ হবে, যা অবশ্যই ডেটা তৈরির প্রক্রিয়াটির প্রকৃতির উপর নির্ভর করে (যার মধ্যে আমাদের সমস্যা রয়েছে বলে 0 তথ্য রয়েছে)। আমার যে ইশারা জন্য ধন্যবাদ।
আদমো

1

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


0

[ধরে নিলাম ওয়েইবুল উপযুক্ত) জনসন কোটজ এবং বালাকৃষ্ণনের বইতে ওয়েবুলের প্যারামিটারগুলি অনুমান করার অনেকগুলি উপায় রয়েছে। এর মধ্যে কিছু জিরো (উদাহরণস্বরূপ গড় এবং মানক বিচ্যুতি ব্যবহার করে বা কিছু শতকরা ব্যবহার করে) অন্তর্ভুক্ত না করে এমন ডেটার উপর নির্ভর করে না।

জনসন, এনএল, কোটজ, এস।, এবং বালাকৃষ্ণান, এন। (1994)। অবিচ্ছিন্ন বিতরণ নিউ ইয়র্ক: উইলে, প্রায় 632 পৃষ্ঠায়।

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