Книги по разным темам Pages:     | 1 | 2 | Складн системи процеси № 2, 2009 НФОРМАЦЙН СИСТЕМИ ТЕХНОЛОГп НФОРМАЦЙН СИСТЕМИ ТЕХНОЛОГп УДК 004.42:519.25 ЗАСТОСУВАННЯ ПОКАЗНИКВ НЕЛНЙНОп КОРЕЛЯЦп ДЛЯ ПОБУДОВИ Й АНАЛЗУ КРОС-КОРЕЛЯЦЙНИХ ФУНКЦЙ В.к. Бахрушин, В.к. Павленко, С.В. Петрова Класичний приватний унверситет, Запоржжя, вул. Жуковського, 70-б, Украна, 69002;

Vladimir.Bakhrushin@zhu.edu.ua Вступ При дослдженн рядв динамки часто спостергаться, що взамний зв'язок процесв виявляться з певним запзненням або випередженням (з часовим лагом k). Але в бльшост випадкв неможливо впевнено стверджувати про наявнсть зв'язку. Одним з найбльш поширених методв його визначення крос-кореляцйний аналз, який широко застосовують при дослдженн рзномантних динамчних систем [1 - 3].

Взамна кореляцйна функця, або крос-кореляцйна функця визначаться для двох стацонарних часових рядв xt, yt як коефцнт парно кореляц Прсона мж xt та yt+k залежно вд k [4]:

n-k n-k n-k t+k - t t+k / n - k ( ) t t=1 t=1 t=1 rk =. (1) n n n-k n-k 2 - 2 / n - k 2 t ( ) t - 2 / n - k ( ) tt t=k t=k t=k+1 t=k+1 Наявнсть пкв на графку крос-кореляцйно функц rk = r(k) при певних значеннях k вказу на наявнсть зв'язку з вдповдними часовими лагами. Якщо пки повторюються через однаков нтервали часу, то взамний зв'язок рядв перодичним.

Коефцнт кореляц Прсона , вдповдно, крос-кореляцйна функця мрами нйного зв'язку [5]. пх значення можуть змнюватися вд -1 до +1. Значення -1 та +1 вдповдають строгому нйному функцональному зв'язку. Що ближчим значення коефцнта кореляц до -1 або +1, то бльш обрунтованим припущення про наявнсть нйного зв'язку. Наближення його значення до нуля свдчить про вдсутнсть нйного зв'язку, але не доказом вдсутност статистичного зв'язку взагал. Звдси виплива потреба у розробц засобв дагностики, як були чутливими до наявност нелнйних зв'язкв мж процесами.

Унверсальною характеристикою ступеня тсноти звТязку мж кльксними ознаками коефцнт детермнац, який можна розрахувати як:

j m yij - yj* () m j=1 i=Kd y;X = 1-, (2) ( ) n yi - y ( ) n i=де n - кльксть спостережень; j - кльксть даних, що потрапили до j-го нтервалу групування; yji - значення -го спостереження дослджувано ознаки, що потрапило до j-го Складн системи процеси № 2, j y ji i=нтервалу; yj* = - середн значення за спостереженнями, як потрапили до j-го j нтервалу; m - кльксть нтервалв.

Величина коефцнта детермнац може змнюватися в межах вд нуля до одиниц й вдобража частку загально дисперс дослджувано ознаки, яка зумовлена змною функц регрес f(X). При цьому нульове значення коефцнта детермнац вдповда вдсутност будь-якого звТязку, а його рвнсть одиниц - наявност строго функцонального звТязку. Недолком цього показника те, що групування даних також можна здйснювати рзними способами. Тому сну певна невизначенсть коефцнтв детермнац: при застосуванн рзних способв групування ми будемо отримувати дещо рзн значення коефцнта детермнац. Втм, якщо дйсно сну звТязок мж процесами варац цих значень при обрунтованому вибор нтервалу, то групування будуть незначними.

Для реалзац основних методв аналзу даних широко використовують статистичн пакети SPSS, Statistica та нши [6; 7]. Але в цих пакетах для реалзац авто- та кроскореляцйного аналзу часових рядв передбачено лише стандартн методи, що рунтуються на розрахунку коефцнта кореляц Прсона.

Принцип роботи програми Для збергання даних в памТят видляться мсце для двох вхдних масивв з тисяч елементв з фксованою десятковою крапкою. Породжуються два масиви для збергання зсунутих часових рядв на кожному етап проведення крос-кореляцйного аналзу.

Видляться пам'ять та породжуються змнн для збереження результатв аналзу й допомжних розрахункв (довжина ряду, коефцнт детермнац, кльксть нтервалв, на як подляють ряд при розрахунках тощо). При мпортуванн даних кожне значення заноситься до вдповдного масиву.

Для розрахунку значення коефцнта детермнац, по-перше, потрбно розрахувати загальне середн ряду залежних даних. Потм подлити ряд на нтервали розрахувати для кожного з них середн значення та кльксть потраплянь даних до кожного нтервалу. На наступному кроц за формулою (2) обчислюмо коефцнт детермнац.

Для проведення крос-кореляцйного аналзу на кожному кроц розрахунку один з рядв вихдних даних зсувамо стосовно ншого на одиницю. Розраховуючи коефцнт детермнац при кожному зсув ряду та будуючи даграму, де на вс абсцис вдкладатимемо величину зсуву, а на вс ординат - вдповдне значення коефцнта детермнац, ми зможемо зробити висновки про наявнсть чи вдсутнсть зв'язку.

Структура програми для здйснення нелнйного крос-кореляцйного аналзу Програма була написана мовою високого рвня програмування С++ в комплятор Borland C++ Builder 6. Спочатку було створено новий проект, форма якого показана на рис. 1.

Призначення компонент форми.

Перш дв кнопки (УЗагрузить первый рядФ та УЗагрузить второй рядФ) потрбн для взамод з невзуальним компонентом OpenDialog та мпортування вхдних даних з файлв, визначення довжини кожного з вхдних рядв та переврки рвност х розмру. До обробника под натискання на другу кнопку (УПринятьФ) записуться програмний код, завдяки якому дан заносяться до вдповдних масивв та будуться даграма розсювання.

Кнопка УОчиститьФ використовуться для обнулння змнних та очистки всх компонент, до яких заносяться результати роботи програми. За допомогою кнопки УРасчётФ проводиться крос-кореляцйний аналз, будуться графк крос-кореляцйно функц та Складн системи процеси № 2, формуться сторя обчислень. Кнопка УСохранитьФ взамод з невзуальним компонентом SaveDialog да змогу зберегти сторю обчислень до файлу.

Рис. 1. Зовншнй вигляд форми з компонентами До компонентв Label виводяться так дан: довжина першого та другого вхдних рядв, текст про те що ряди не збгаються за розмром, пдписи УКоличество лаговФ та УКоличество интерваловФ над компонентами, до яких ц параметри вводяться, назви файлв вхдних даних та нформаця про авторство розробника програмного продукту.

До двох компонентв Memo виводяться вхдн дан при мпортуванн х до програми.

До третього компонента Memo виводиться сторя розрахункв.

До компонентв Edit вводяться параметри розрахунку - кльксть лагв для проведення крос-кореляцйного аналзу та кльксть нтервалв для розрахунку коефцнта детермнац.

Властивост компонентв Chart було пдбрано таким чином, щоб дан, як вони будуть вдображати, були якомога зручншими для користувача. Область побудови даграми розсювання охоплю площу, дещо бльшу, нж потрбно для побудови, для того щоб крайн вдмтки цлком розташовувалися на нй, а не обрзалися. На даграм розсювання дан вдображаються маленькими колами, а графк крос-кореляцйно функц вдображаться стовпчиками. Над кожним стовпчиком вдображаться вдповдне значення коефцнта детермнац.

Пд час створення програми було визначено так змнн для подальшого х використання:

Ц цлочислов змнн i та e, як будуть використовуватися як чильники в циклах;

Ц змнн A_size та B_size було визначено як цлочислов, через те, що до них будуть Складн системи процеси № 2, збергатися значення довжин вхдних рядв, а довжина часового ряду - завжди цле число;

Ц X[1001] та Y[1001] - масиви з дйсних чисел, обсягом по 1002 елемента кожний, для збереження значень елементв вхдних часових рядв;

Ц Xmin, Xmax - дйсн змнн для збереження мнмального та максимального елементв першого з вхдних рядв, за яким дан будуть групуватися;

Ц KD - змнна дйсного типу для збереження значення коефцнта детермнац;

Ц дйсна змнна MAXKD та цлочислова MAXsdvig для збереження максимального значення коефцнта детермнац та номера лагу, на якому вн спостергаться пд час проведення крос-кореляцйного аналзу;

Ц цлочислов змнн LAGS та s, до яких буде записано параметри крос-кореляцйного аналзу - кльксть лагв та кльксть нтервалв для розрахунку коефцнта детермнац;

Ц цлочислова змнна sdvig, у якй буде збергатися довжина зсуву при проведенн крос-кореляцйного аналзу та яка виступатиме в рол чильника, набуваючи значення вд ЦLAGS до +LAGS;

Ц Xsmes[1001] та Ysmes[1001] - масиви дйсних чисел обсягом по 1002 елемента кожний, до яких буде розмщено значення часових рядв зсунутих один стосовно одного на кожному етап крос-кореляцйного аналзу;

Ц цлочислова змнна SizeSmes, у якй збергатиметься значення довжини зсунутих часових рядв;

Ц n - цлочислова змнна, до яко буде записано кльксть елементв вхдних рядв псля прийому даних до програми (що ста можливим тльки в випадку, якщо вихдн ряди мають однакову довжину);

Ц цлочислова змнна j, яка чильником пд час розрахунку коефцнта детермнац до яко буде записуватись номер нтервалу, з яким працю програма (1 j s );

Ц Vj - цлочислова змнна для збергання клькост елементв, що потрапляють до j-го нтервалу пд час розрахунку коефцнта детермнац;

Ц змнн firstfile та secondfile типу AnsiString, у яких збергатимуться назви файлв з вихдними даними.

Пд час прийняття ршення щодо визначення типу змнних основна увага придлялася природ даних, що будуть у нй збергатися, та х можливих значень. Було уникнуто використання типв, таких як long int, double, long double через те, що дан такого розмру та тако точност (кльксть знакв псля коми) навряд чи будуть використовуватися, проте це призведе до збльшення обсягу потрбно памТят та уповльнить процес розрахункв.

У процес написання програми було розроблено так функц:

- float max(float a[], int msize) - функця знаходження максимального елемента з msize перших елементв масиву a[]. При виклику функц до не передаються так дан:

масив дйсних даних, у якому буде виконуватися пошук найбльшого елемента та довжина цього масиву. У тл функц породжуються змнн im цлочислового типу та max дйсного типу. Змннй max привласнються значення першого елементу масиву. Змнна im буде виконувати роль чильника при виконанн циклу та змнюватися вд одиниц до msize, тобто до величини, рвно клькост елементв масиву, що опрацьовуться. На кожному кроц циклу будемо порвнювати елемент масиву a[im] з змнною max. У випадку, якщо елемент виявиться бльшим за змнну, до не запишеться значення цього елементу, накше вона залишиться сталою. У результат псля закнчення циклу в змннй max буде збергатися значення найбльшого елементу масиву, яке функця поверта в програму, з яко вона була викликана;

- float min(float a[], int msize) - функця знаходження мнмального елемента з msize перших елементв масиву a[]. Вихдн дан функц так сам, як у функц знаходження максимального елементу. Змннй min, що породжуться в функц на першому кроц, привласнються значення першого елементу масиву, що було передано. Дал в цикл за Складн системи процеси № 2, клькстю елементв ця змнна порвнються з кожним елементом масиву та й привласнються значення елементу у випадку, якщо вн виявиться меншим за змнну.

Функця поверта значення змнно min, у якй наприкнц виконання функц буде мститися значення найменшого з msize елементв масиву a[];

- float SRED(float a[], int msize) - функця знаходження середнього значення msize перших елементв масиву a[]. На вхд функц подаються масив та кльксть його елементв. Спочатку породжуться та анулються змнна SUM. Дал в цикл за клькстю елементв на кожному кроц до не буде додаватися значення вдповдного елементу масиву. На виход функця поверта середн значення елементв масиву;

- float KoefDet(float a[], float b[], int size, int k) - функця для обчислення коефцнта детермнац, де a[], b[] - масиви, що збергають вхдн часов ряди, size - довжина часових рядв, k - кльксть нтервалв, на яку подляють ряд пд час розрахунку. Коефцнт детермнац розраховумо за формулою (2). Для зручност використання в програм було розроблено функц для розрахунку окремо чисельника та знаменника виразу для коефцнта детермнац. До змнно Ro наприкнц виконання функц буде записано значення коефцнта детермнац. Значення змнно Bsr обчислються через виклик функц знаходження середнього значення масиву та передаться як вхдний параметр до функцй знаходження чисельника й знаменника розрахунково формули. До змнних ZNAM та CHIS буде записано результати виклику вдповдних функцй;

- float Znamenat(float a[], int msize, float sr) - функця для знаходження значення знаменника у формул розрахунку коефцнта детермнац, де a[] - масив, у якому збергаються дан часового ряду, msize - розмр часового ряду, sr - середн значення елементв часового ряду. Як видно з формули, нам потрбно суму квадратв рзниць елементв та середнього значення подлити на кльксть елементв. Для цього у функц було породжено змнну SUM, яка на першому кроц виконання функц дорвню нулю, а на наступному, у цикл за клькстю елементв вхдного масиву, до не додаватиметься число, що дорвню квадрату рзност вдповдного елементу та середнього значення масиву. Отримане значення, подлене на кльксть елементв, буде подано до виходу функц;

- int KolVInt(float Ryad[], int size, float left, float right) - функця для пдрахунку клькост елементв, що потрапляють до нтервалу (left; right) ряду Ryad[] розмру size.

При породженн цлочислово змнно KOL на початку виконання функц й привласнються значення 0. Потм у цикл за клькстю елементв ряду перевряться виконання умови про те, що значення елементу ряду бльше во меж та менше право, що подаються до входу функц. У випадку, якщо умова виконуться, змнна KOL збльшуться на одиницю. Псля проходження циклу та переврки умови для кожного елементу масиву в змннй KOL буде значення клькост елементв масиву, що потрапляють до заданого нтервалу;

Pages:     | 1 | 2 |    Книги по разным темам