সময় সিরিজের পরিবর্তনগুলি সনাক্ত করা (আর উদাহরণ)


18

আমি সময় সিরিজের ডেটাগুলিতে পরিবর্তনগুলি সনাক্ত করতে চাই, যার সাধারণত একই আকার থাকে। এখন পর্যন্ত আমি changepointআর এর জন্য প্যাকেজ cpt.mean(), cpt.var()এবং cpt.meanvar()ফাংশনগুলির সাথে কাজ করেছি । cpt.mean()PELT পদ্ধতিটি যখন ডেটা সাধারণত একটি স্তরে থাকে তখন ভাল কাজ করে। তবে আমি আরোহণের সময় পরিবর্তনগুলিও সনাক্ত করতে চাই। পরিবর্তনের উদাহরণ, আমি এটি সনাক্ত করতে চাই, এটি হ'ল বিভাগটি যেখানে হঠাৎ কালো বক্ররেখা নেমে আসে যখন এটি প্রকৃতপক্ষে লাল বিন্দুযুক্ত রেখা অনুসরণ করে। আমি cpt.var () ফাংশন নিয়ে পরীক্ষা-নিরীক্ষা করেছি, তবে আমি ভাল ফলাফল পেতে পারি না। আপনার কি কোনও প্রস্তাবনা রয়েছে (যাদের প্রয়োজনীয়ভাবে আর ব্যবহার করা উচিত নয়)?

বক্ররেখা পরিবর্তন করুন

পরিবর্তনের সাথে ডেটা এখানে রয়েছে (আর অবজেক্ট হিসাবে):

dat.change <- c(12.013995263488, 11.8460207231808, 11.2845153487846, 11.7884417180764, 
11.6865425802022, 11.4703118125303, 11.4677576899063, 11.0227199625084, 
11.274775836817, 11.03073498338, 10.7771805591742, 10.7383206158923, 
10.5847230134625, 10.2479315651441, 10.4196381241735, 10.467607842288, 
10.3682422713283, 9.7834431752935, 9.76649842404295, 9.78257968297228, 
9.87817694914062, 9.3449034905713, 9.56400153361727, 9.78120084558148, 
9.3445162813738, 9.36767436354887, 9.12070987223648, 9.21909859069157, 
8.85136359917466, 8.8814423003979, 8.61830163359642, 8.44796977628488, 
8.06957847272046, 8.37999165387824, 7.98213210294954, 8.21977468333673, 
7.683960439316, 7.73213584532496, 7.98956476021092, 7.83036046746187, 
7.64496198988985, 4.49693528397253, 6.3459274845112, 5.86993447552116, 
4.58301192892403, 5.63419551523625, 6.67847511602895, 7.2005344054883, 
5.54970477623895, 6.00011922569104, 6.882667104467, 4.74057284230894, 
6.2140437333397, 6.18511450451019, 5.83973575417525, 6.57271194428385, 
5.36261938326723, 5.48948831338016, 4.93968645996861, 4.52598133247377, 
4.56372558828803, 5.74515428123725, 5.45931581984165, 5.58701112949141, 
6.00585679276365, 5.41639695946931, 4.55361875158434, 6.23720558202826, 
6.19433060301002, 5.82989415940829, 5.69321394985076, 5.53585871082265, 
5.42684812413063, 5.80887522466946, 5.56660158483312, 5.7284521523444, 
5.25425775891636, 5.4227645808924, 5.34778016248718, 5.07084809927736, 
5.324066161355, 5.03526881241705, 5.17387528516352, 5.29864121433813, 
5.36894461582415, 5.07436929444317, 4.80619983525015, 4.42858947882894, 
4.33623051506001, 4.33481791951228, 4.38041031792294, 3.90012900415342, 
4.04262777674943, 4.34383842876647, 4.36984816425014, 4.11641092254315, 
3.83985887104645, 3.81813419810962, 3.85174630901311, 3.66434598962311, 
3.4281724860426, 2.99726515704766, 2.96694634792395, 2.94003031547181, 
3.20892607367132, 3.03980832743458, 2.85952185077593, 2.70595278908964, 
2.50931109659839, 2.1912274016859)

মনে রাখবেন যে আপনি যদি কেবল আর কোডের জন্য জিজ্ঞাসা করছেন তবে তা এখানে অফ-টপিক হবে। আপনি যদি সাধারণ পদ্ধতিগত পরামর্শের জন্য জিজ্ঞাসা করেন তবে এটি ঠিক আছে। এটি ডাব্লু / কিছু আর কোড আসতে পারে, কিন্তু আবার, এটি নাও আসতে পারে।
গুং - মনিকা পুনরায়

1
ভাল মন্তব্য, আমি একটি সাধারণ সমাধান আগ্রহী, আর ব্যবহার করা সুবিধাজনক হবে।
Mlee

উত্তর:


17

সময় সিরিজের পরিবর্তনগুলি সনাক্ত করতে আপনি টাইম সিরিজের আউটলেট সনাক্তকরণ ব্যবহার করতে পারেন। সয়েস বা চেন এবং লিউর পদ্ধতিগুলি জনপ্রিয় সময় সিরিজের আউটলেট সনাক্তকরণ পদ্ধতি। আমার আগের প্রশ্নটি এই সাইটে দেখুন।

আর এর tsoutlier প্যাকেজ সনাক্তকারী outlaers জন্য চেন এবং লিউ এর পদ্ধতি ব্যবহার করে। এসএএস / এসপিএসএস / অটোবক্সও এটি করতে পারে। সময় সিরিজের পরিবর্তনগুলি সনাক্ত করতে আর কোডের জন্য নীচে দেখুন।

library("tsoutliers")
dat.ts<- ts(dat.change,frequency=1)
data.ts.outliers <- tso(dat.ts)
data.ts.outliers
plot(data.ts.outliers)

tsoultlier প্যাকেজে tso ফাংশন নিম্নলিখিত আউটলিয়ারদের সনাক্ত করে। বিদেশিদের প্রকার জানতে আপনি ডকুমেন্টেশন পড়তে পারেন।

Outliers:
  type ind time coefhat   tstat
1   TC  42   42 -2.9462 -10.068
2   AO  43   43  1.0733   4.322
3   AO  45   45 -1.2113  -4.849
4   TC  47   47  1.0143   3.387
5   AO  51   51  0.9002   3.433
6   AO  52   52 -1.3455  -5.165
7   AO  56   56  0.9074   3.710
8   LS  62   62  1.1284   3.717
9   AO  67   67 -1.3503  -5.502

প্যাকেজ এছাড়াও দুর্দান্ত প্লট সরবরাহ করে। নিচে দেখ. প্লটটি দেখায় যেখানে আউটলিয়াররা এবং সেখানে বিদেশী না থাকলে কী হত।

এখানে চিত্র বর্ণনা লিখুন

স্তরের শিফট সনাক্ত করতে আমি স্ট্রোকচেঞ্জ নামে আর প্যাকেজটিও ব্যবহার করেছি । আপনার ডেটাতে উদাহরণ হিসাবে

library("strucchange")
breakpoints(dat.ts~1)

প্রোগ্রামটি সঠিকভাবে ব্রেকপয়েন্ট বা কাঠামোগত পরিবর্তনগুলি সনাক্ত করে।

Optimal 4-segment partition: 

Call:
breakpoints.formula(formula = dat.ts ~ 1)

Breakpoints at observation number:
17 41 87 

Corresponding to breakdates:
17 41 87 

আশাকরি এটা সাহায্য করবে


1
ধন্যবাদ, tsoভাল কাজ করে, তবে এটি বড় ডেটাসেটগুলির জন্য কিছুটা ধীর। স্ট্রুকচিন্জের ব্রেকপয়েন্ট পজিশনগুলি কিছুটা স্বেচ্ছাচারী বলে মনে হয় (পজিশন 41 বাদে)।
mlee

7

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

  • টাইম সিরিজ ক্লাস্টারিং । উদাহরণস্বরূপ, জনপ্রিয় গতিশীল টাইম ওয়ার্পিং (ডিটিডাব্লু) বা বিকল্প পদ্ধতির ব্যবহার করে। দয়া করে আমার সম্পর্কিত উত্তরগুলি দেখুন: শ্রেণিবদ্ধকরণ / ক্লাস্টারিংয়ের জন্য ডিটিডাব্লুতে এবং ডিটিডাব্লু বা অসম সময় সিরিজের বিকল্পগুলিতেধারণা বিভাগ "স্বাভাবিক" এবং "অস্বাভাবিক" (অথবা অনুরূপ) মধ্যে ক্লাস্টার সময় সিরিজ হয়।

  • এনট্রপি ব্যবস্থাসময় সিরিজের এনট্রপি ব্যবস্থা সম্পর্কে আমার প্রাসঙ্গিক উত্তর দেখুন । ধারণা একটি "স্বাভাবিক" সময় সিরিজের এনট্রপি নির্ধারণ এবং তারপর অন্য সময় সিরিজের সঙ্গে এটি তুলনা হয় (এই ধারণা একটি একজন ধৃষ্টতা হয়েছে এনট্রপি বিচ্যুতি "স্বাভাবিক" থেকে বিচ্যুতি ক্ষেত্রে)।

  • অসাধারণ সনাক্তকরণঅসাধারণ সনাক্তকরণ সম্পর্কিত আমার প্রাসঙ্গিক উত্তর দেখুন (আর সংস্থানসমূহ অন্তর্ভুক্ত)। ধারণা করা হয় সরাসরি বিভিন্ন পদ্ধতির মাধ্যমে ব্যতিক্রমসমূহ সনাক্ত (অনুগ্রহ করে রেফারেন্স দেখুন)। প্রারম্ভিক সতর্কতা সংকেত (EWS) টুলবক্স এবং Rপ্যাকেজ earlywarningsবিশেষভাবে আশাব্যঞ্জক বলে মনে হচ্ছে।


6

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


1

দেখে মনে হচ্ছে আপনি যদি আপনার ডেটা বিকৃত করেন তবে আপনার সমস্যাটি খুব সরল হয়ে উঠবে। এটি রৈখিকভাবে হ্রাস পায় বলে মনে হচ্ছে। একবার আপনি ডেটা অবরুদ্ধ করার পরে, আপনি অ-স্থিরতার জন্য বিভিন্ন ধরণের পরীক্ষা করতে পারেন।


3
এই পদ্ধতিটি ব্যর্থ হবে কারণ ইতিহাসে স্পষ্টভাবে বিভিন্ন opালু রয়েছে। আপনি একাধিক "প্রবণতা / opাল" সংযুক্ত না করা হলে এই পদ্ধতির অর্থবহ ফলাফল পাওয়া যাবে না। সাধারণ সোজা-এগিয়ে সমাধানগুলি প্রায়শই খুব সহজ।
আইরিশস্ট্যাট

1

সমস্ত সূক্ষ্ম উত্তর, তবে এখানে @MrMeritology দ্বারা প্রস্তাবিত একটি সাধারণ উত্তর দেওয়া হয়েছে, যা প্রশ্নযুক্ত সময় সিরিজের জন্য বেশ ভালভাবে কাজ করছে বলে মনে হয় এবং সম্ভবত এটি অনেকগুলি "অনুরূপ" ডেটা সেটগুলির ক্ষেত্রে রয়েছে।

নীচে স্ব-ব্যাখ্যামূলক গ্রাফ উত্পাদনকারী একটি আর-স্নিপেট এখানে।

outl = rep( NA, length(dat.change))
detr = c( 0, diff( dat.change))

ix = abs(detr) > 2*IQR( detr)
outl[ix] = dat.change[ix]

plot( dat.change, t='l', lwd=2, main="dat.change TS")
points( outl, col=2, pch=18)

plot( detr, col=4, main="detrended TS", t='l', lwd=2 )
acf( detr, main="ACF of detrended TS")

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


একাধিক ট্রেন্ড পরিবর্তন এবং একাধিক ইন্টারসেপ্ট পরিবর্তন (স্তর বদল) হতে পারে ... সুতরাং এই সমাধানগুলি সনাক্ত করতে হবে যা প্রকৃতপক্ষে এগুলি নির্ধারণ করার জন্য ডেটা নির্ধারণ করে ...
আইরিশস্ট্যাট

হ্যাঁ, প্রকৃতপক্ষে, আমি আপনার পূর্ববর্তী মন্তব্যটি উপরে পড়েছি। তবে একাধিক ট্রেন্ড / স্তর সনাক্ত করতে সময় সিরিজটি নির্ণয় করা নিজেই একটি সমস্যা। এখানে আমার বক্তব্যটি দেখাতে হবে যে উপরের সরল পদ্ধতির মাঝে মাঝে বিশেষত প্রদত্ত ডেটার জন্য কাজ করে। বিপরীতে, কোনও একক পন্থা সর্বদা ভাল কাজ করবে না। আর.হাইন্ডম্যান (আর-ফাংশন tsoutliers) এর একটি দৃষ্টিভঙ্গি এমন কিছু যা আমি অন্যথায় সুপারিশ করি।
dnqxt

অটবক্স হ'ল একক পন্থা যা সর্বদা ভালভাবে কাজ করবে (কমপক্ষে আমরা দেখেছি এমন কয়েক মিলিয়ন সময় সিরিজের জন্য) এবং এর একটি সংস্করণ রয়েছে। আমি যদি এখানে "সেলসি" পেতে চাই না বলে আপনি অফলাইনে চ্যাট করতে চান তবে আমি সেই প্রক্রিয়াটি ব্যাখ্যা করতে পারি যা পুরোপুরি বোধগম্য / স্বচ্ছ, তবে সহজেই নকল নয়।
আইরিশস্ট্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.