WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 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:     || 2 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.