Середовище для обробки даних R являє собою довершений інструмент не тільки аналізу, але підготовки та числених перевірок даних перед проведенням аналізу. І користувачам, яким приходиться працювати зі "справжніми" даними, а не учбовими масивами - добре відомі проблеми з дописками, помилками і відвертими фальсифікаціями даних.
У цій статті ми розглянемо один із методів швидкої перевірки "адекватності" даних з позиції їхньої інформаційної цінності. Як і для всіх інших прикладів - в якості учбового набору ми використаємо зведену таблицю хімічних аналізів магматичних i ультраметаморфiчних утворень Українського щита.
У цій статті ми розглянемо один із методів швидкої перевірки "адекватності" даних з позиції їхньої інформаційної цінності. Як і для всіх інших прикладів - в якості учбового набору ми використаємо зведену таблицю хімічних аналізів магматичних i ультраметаморфiчних утворень Українського щита.
Інколи доводиться мати справу із даними, які являють собою безліч взаємопов’язаних характеристик. Наприклад, дані містять результати опробування залізних руд за допомогою гамма-гамма каротажу. Окрім вмісту заліза загального у таблиці наведено власне показники відбитої активності. Ще одним прикладом може слугувати об’єднання в одній таблиці даних про питому масу сировини, вміст корисного компоненту, щільність, міцність та інші характеристики. Обрати дійсно потрібні дані іноді дуже складно. Із випадком гамма-гамма каротажу начебто все зрозуміло - відбита активність є первинним показником, а вміст заліза - вторинним. А як бути у другому випадку? А як бути, коли кількість показників доходить до декількох десятків? Якщо нам потрібно побудувати будь-яку модель на основі цих даних, ми повинні відібрати найбільш "представницькі". "Непредставницькі" дані можуть суттєво знизити якість моделі. Це обумовлено двома причинами:
- зашумленими або надлишковими даними. Наявність шумів перешкоджає знаходженню значущіх шаблонів у даних;
- для створення якісного шаблону за наявності шумів необхідно набагато більше первинних даних.
Одним зі способів обрати адекватні і найбільш інформативні дані при побудові моделей і шаблонів є обчислення інформаційної ентропії. Для цього ми використаємо пакет entropy (але не забудьте його перед цим встановити). Цей пакет дозволяє розрахувати декілька варіантів ентропії і при цьому отримати відповідь у різних одиницях кількості інформації (біт, тріт і хартлі). Ми використаємо лише функцію entropy.empirical, яка розраховує варіант ентропії Шеннона для безперервного масиву - так звану, диференційну ентропію. Але не слід забувати, що за наявності у вибірці значень "NA", відповіддю функції також буде "NA". Для того, щоб обчислити ентропію вибірки слід позбутись порожніх значень. Ця функція також не дозволяє обчислити ентропію для текстових та факторних даних.
Спробуємо обчислити диференційну ентропію показника вмісту двоокису титану таблиці granity. Для вилучення перед розрахунком порожніх значень застосуємо функцію na.omit:
> install.package("entropy")# встановлюємо пакет "entropy"
> library(entropy)# завантажуємо пакет "entropy"
> entropy.empirical(na.omit(granity$TiO2), unit="log2")#
# обчислюємо ентропію у бітах (unit="log2"), при цьому
# позбуваючись порожніх значень у вибірці
[1] 6.547596
Для всієї таблиці granity (точніше - для всіх її числових стовпців) можна обчислити ентропію за допомогою циклу:
> for (m in 4:12)# задаємо граничні значення змінної "m"
+ {# починаємо тіло циклу
+ ent<- entropy.empirical(na.omit(granity[, m]), unit="log2")
# в змінну "ent" записуємо результат обчислення ентропії
+ print(paste(names(granity1)[m], ent))# задаємо друк
# імен стовпців та значень ентропії для кожного із них
+ rm(ent)# видаляємо змінну "ent"
+ }# закриваємо цикл та подаємо команду на виконання
[1] "SiO2 7.74586532607715"
[1] "TiO2 6.54759563533758"
[1] "Al2O3 7.69678934173541"
[1] "Fe2O3 7.18126025948399"
[1] "FeO 7.15466921883467"
[1] "MgO 6.34669384775364"
[1] "CaO 7.16039345263302"
[1] "K2O 7.44676635927913"
[1] "Na2O 7.52559955604075"
Тут постає одне принципове питання - із використанням функції na.omit для кожного стовпця в окремості, ми видкидаємо різну кількість записів. А як можна порівнювати при цьому інформаційну місткість, якщо ми обчислюємо її за різною кількістю даних? Відповідь дуже проста - нас цікавить інформаційна цінність саме наявної кількості даних, і ми a priori приймаємо тезу про неможливість отримати додаткову інформацію.
Вищенаведені приклади ще не пропагують нас відмовлятись від "класичних" показників невпорядкованості даних - дисперсії та стандартного відхилення. Але інформаційна ентропія володіє ще однією дуже чудовою властивістю - масштабною інваріантністю. Це означає, що при помноженні або діленні масиву даних на якийсь коефіцієнт - ентропія не змінюватиметься. Якщо ми помножимо нашу вибірку на 2, відповідно у два рази зростуть дисперсія та стандартне відхилення. А ентропія залишиться незмінною. Ця властивість дозволяє використовувати інформаційну ентропію для контролю вибірок, які отримано в результаті операцій множення-ділення: наприклад, при обчисленні мультиплікативних коефіцієнтів. Обчисливши інформаційну ентропію кінцевої вибірки, і порівнявши це значення із ентропією первинних даних - ми можемо сказати - скільки "шумів" ми внесли у дані своїми перерахунками.
Немає коментарів:
Дописати коментар