474
Київський нацiональний унiверситет iменi Тараса Шевченка Кафедра теорiї ймовiрностей, статистики та актуарної математики Р. Майборода КОМП’ЮТЕРНА СТАТИСТИКА — професiйний старт (з використанням ) Київ — 2018

КОМП’ЮТЕРНА СТАТИСТИКА — професiйний стартprobability.univ.kiev.ua/userfiles/mre/compsta1.pdf · Матерiал, викладений у пiдручнику,

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

  • Київський нацiональний унiверситет iменi Тараса ШевченкаКафедра теорiї ймовiрностей, статистики та актуарної математики

    Р. Майборода

    КОМП’ЮТЕРНА СТАТИСТИКА—професiйний старт

    (з використанням R)

    Київ — 2018

  • 2

    УДК 519.22.35ББК 22.172я73

    Рецензенти:доктор фiз.-мат. наук, проф. О. I. Клесов,доктор фiз.-мат. наук А. Ю. Пилипенко,кандидат фiз.-мат. наук В. В. Голомозийкандидат фiз.-мат. наук, доцент О. О. Диховичний

    Майборода Р.Є. Комп’ютерна статистика - професiйний старт (з викори-станням R). Пiдручник.

    У пiдручнику розглядаються основнi питання використання комп’ютерноїтехнiки статистичного аналiзу для дослiдження прикладних даних. Описаноосновнi властивостi мови статистичного програмування R, розглянутi технiкидескриптивного та вiзуального аналiзу статистичних даних. Описанi методистатистичного оцiнювання та перевiрки гiпотез. Розглянуто основнi засобилiнiйного та нелiнiйного регресiйного аналiзу. Основна увага придiлена змi-стовнiй iнтерпретацiї результатiв статистичного аналiзу.

    Матерiал, викладений у пiдручнику, вiдповiдає курсам “Дескриптивнастатистика” i “Комп’ютерна статистика” для студентiв механiко-математи-чного факультету спецiальностей “статистика” та “математика”. Вiн можебути корисний студентам i аспiрантам фiзико-математичних, економiчних тамедико-бiологiчних спецiальностей а також всiм, хто цiкавиться прикладноюта теоретичною статистикою.

    Затверджено вченою радою механiко-математичного факультетуКиївського нацiонального унiверситету iменi Тараса Шевченка, протокол№8 вiд 16 квiтня 2018 р.

    © Майборода Р.Є. 2017

  • Передмова

    Всiм, хто хоч трохи знайомий з статистикою або комп’ютерами, зрозумi-ло, що в однiй книжцi розповiсти про всю комп’ютерну статистику неможли-во. Ця книжка писалась, перш за все, як пiдручник для студентiв механiко-математичного факультету, якi вивчають курси комп’ютерної, дескриптивноїта математичної статистики. Проблема полягає в тому, що такi курси чи-таються i на третьому, i на четвертому i на п’ятому роках навчання. Прицьому студенти можуть спецiалiзуватись i по математицi, i по статистицi, i поактуарнiй справi. Значною мiрою, саме цим обумовлена структура книжки:поєднання роздiлiв, орiєнтованих на читачiв з рiзним науковим багажем, алеоб’єднаних наскрiзними спiльними мотивами та сюжетами. Сподiваюсь, щовона може стати у пригодi не тiльки нашим студентам, а i багатьом iншим чи-тачам, що цiкавляться застосуванням статистики до дослiдження реальнихданих та можливостями розробки своїх власних технологiй статистичногоаналiзу.

    Отже, про що у нас пiде мова?Першi три роздiли присвяченi системi статистичного програмування R.

    Тут розповiдається, що таке R, звiдки його треба брати i як встановлювати,як виглядають основнi засоби програмування мови R i як працює базова гра-фiка у цiй системi. Цю частину книжки можна використовувати для першогознайомства з R. Тут скажу тiльки, що R це не лише гнучка i зручна мова про-грамування та набiр функцiй, якi реалiзують практично всi сучаснi технологiїстатистичної обробки даних. Це також пропуск у R-спiльноту, братство, де визавжди зможете знайти пiдтримку та вiдповiдь на найнесподiванiшi питання.R це свого роду сучасна латина, мiжнародна мова, яка об’єднує статистикiв-практикiв i розробникiв нових iдей.

    Далi у четвертому i п’ятому роздiлах розповiдається про дескриптивнiстатистики, тобто про числовi характеристики, якi використовуються, коливеликi набори статистичних даних потрiбно коротко описати одним або кiль-

    3

  • 4

    кома числами. Тут читач може дiзнатись, коли середнє положення у вибiрцiдоцiльно характеризувати медiаною, а коли — геометричними середнiм. Щотаке робастнiсть. Чому потрiбно брати корiнь з вибiркової дисперсiї. Як вi-добразити структуру кореляцiй у виглядi графу. I багато iншого.

    Для читання перших п’яти роздiлiв достатньо тiльки знання елементарноїшкiльної математики. Аби лише не боятись символiв

    ∑︀,∏︀

    i 𝑛√𝑥.

    З шостого роздiлу починається застосування математичних, ймовiрнiс-них моделей у статистицi. Тут описанi основнi ймовiрнiстнi розподiли, якiвикористовуються для побудови теоретичних моделей даних. Крiм того, по-яснюється технiка генерацiї псевдовипадкових послiдовностей iз заданимрозподiлом. Такi послiдовностi широко використовуються у сучаснiй стати-стицi для аналiзу реальних даних i для перевiрки якостi алгоритмiв, про церозповiдається далi. Для читання цього i наступних роздiлiв треба мати хочаб мiнiмальне уявлення про похiднi та iнтеграли.

    У сьомому роздiлi йдеться про графiчнi засоби аналiзу розподiлу даних,вибору теоретичної моделi i порiвняння розподiлiв рiзних наборiв.

    Що можна робити, коли ви вибрали теоретичну модель? Оцiнювати їїневiдомi параметри i перевiряти гiпотези про них. Цьому присвяченi, вiдпо-вiдно, восьмий i дев’ятий роздiли книжки. Вони побудованi трохи незвично:вiд складного — до простого. Спочатку розповiдь йде про загальнi пiдходидо розв’язання задач оцiнки i тестування гiпотез, показано, як їх можна са-мостiйно реалiзувати в R для дослiдження даних, що описуються порiвняноскладними, нестандартними моделями. I лише потiм сказано про стандартнiфункцiї R, що реалiзують тi ж методи у стандартних, широко застосовнихмоделях. По-справжньому розiбратись у складному, на дiлi, легше нiж у про-стому: складне можна розкласти на простiшi складовi, а простого так незрозумiєш! Крiм того, майстру, навченому робити складнi речi, непотрiбнобуде вганяти нетипову справу у стандартнi рамки — як це часом буває зтими, хто починав з простого.

    Нарештi, десятий роздiл оповiдає про технiку регресiйного аналiзу —мабуть, найбiльш поширений роздiл статистики на сьогоднi. Тут застосову-ються всi тi пiдходи, якi описанi у книзi ранiше. Але значну частину роздiлуможна читати майже не звертаючись до попереднього матерiалу. Наприклад,за бажанням читач може почати знайомство з книгою з п. 10.1. I вже склавшипевне уявлення про те, що буде наприкiнцi, звернутись до початку книжки,якщо захоче розплутати всю iнтригу.

    У додатках вмiщенi тi вiдомостi з алгебри та теорiї ймовiрностей, якiстуденти-математики зазвичай отримують у iнших навчальних курсах, але

  • 5

    деяким читачам вони можуть бути не зовсiм вiдомi, або вiдомi у дещо iншомуосвiтленнi.

    Трохи про те, чого немає у цiй книжцi—я одразу вiдмiчу, де про це можнапрочитати. Немає аналiзу часових рядiв [24, 47]. Немає того, що зазвичай вiд-носять до машинного навчання: нейронних мереж, технiки кросс-валiдацiї,зниження вимiрностi, кластерного аналiзу i т.д. [31, 33]. Майже немає непа-раметричної статистики [52]. Немає технiк вибiркових обстежень [1]. Немаєпослiдовного викладу математичних основ статистики i теорiї ймовiрностей[3, 9, 46, 51]. I хотiлося б про все це написати, але десь треба ставити крапку1.

    Я прошу читачiв, за все цiкаве i хороше, що знайдеться у цiй книзi, разомзi мною подякувати моїм колегам, чиї поради, коментарi i критика значноюмiрою сформували її. Спецiально хочу подякувати тим, хто читав i вичитувавцю книгу в процесi її пiдготовки — О. Сугаковiй, А. Оленку, А. Пилипенку.А також своїм студентам, вiд яких я теж багато чому навчився, особливо упрограмуваннi на R. Ви можете приєднатись до цих людей, написавши менiсвої вiдгуки на адресу [email protected]

    Успiхiв вам у статистицi i не тiльки.Р. Майборода

    1Iще три рекомендацiї для тих, кому, можливо, варто вiдкласти цю книгу i пошукати бiльшпiдхожої. Якщо вам потрiбний швидкий огляд того, як реалiзувати стандартнi статистичнiтехнiки у R, можна почати з [12]. Якщо ви взагалi не хочете мати справу навiть з мiнiмальнимпрограмуванням, а волiєте обмежитись такою обробкою, яку можна реалiзувати, обираючипункти у стандартному меню, варто скористатись, пакетом Statistica, див. [15]. Якщо васцiкавить не конкретна комп’ютерна платформа, а загальна логiка комп’ютерного статистич-ного аналiзу у застосуваннi до конкретних прикладних задач — хорошим пiдручником длявас може стати [44].

  • Змiст

    1 Початок роботи з системою R 101.1 Що таке R i де його взяти . . . . . . . . . . . . . . . . . . . . . 101.2 Система R-Studio . . . . . . . . . . . . . . . . . . . . . . . . . . 131.3 Завантаження пакетiв, робота з Help та iншi органiзацiйнi пи-

    тання . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2 Мова статистичного програмування R 192.1 Базовi поняття . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2 Типи даних та елементарнi функцiї . . . . . . . . . . . . . . . 23

    2.2.1 Вектори. Арифметичнi та логiчнi операцiї. . . . . . . . 232.2.2 Iндексацiя векторiв. . . . . . . . . . . . . . . . . . . . . 272.2.3 Фактори. . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2.4 Матрицi, масиви та фрейми даних. . . . . . . . . . . . 322.2.5 Векторнi i матричнi функцiї. Функцiя apply. Пропу-

    щенi значення. . . . . . . . . . . . . . . . . . . . . . . . 412.3 Деякi кориснi функцiї . . . . . . . . . . . . . . . . . . . . . . . 45

    2.3.1 Функцiї покрокового обчислення . . . . . . . . . . . . 462.3.2 Впорядкування та пошук у масивах . . . . . . . . . . . 482.3.3 Злиття наборiв даних — merge . . . . . . . . . . . . . . 50

    2.4 Експорт та iмпорт даних у R . . . . . . . . . . . . . . . . . . . 512.4.1 Експорт та iмпорт даних у внутрiшньому форматi . . . 512.4.2 Експорт та iмпорт текстових таблиць з даними. . . . . 52

    2.5 Переформатування фреймiв даних . . . . . . . . . . . . . . . . 552.6 Пiдстановки (pipes) . . . . . . . . . . . . . . . . . . . . . . . . 582.7 Програмування у R . . . . . . . . . . . . . . . . . . . . . . . . . 61

    2.7.1 Створення власних функцiй . . . . . . . . . . . . . . . 612.7.2 Векторизацiя функцiй . . . . . . . . . . . . . . . . . . . 652.7.3 Структури управлiння виконанням програм у мовi R . . 67

    6

  • ЗМIСТ 7

    2.7.4 Вибiр з кiлькох умов: switch . . . . . . . . . . . . . . . 692.7.5 Цикли while та repeat . . . . . . . . . . . . . . . . . . . 692.7.6 Цикл for . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    2.8 Формули: y ˜ x . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    3 Базова графiка в R 753.1 Стовпцевi та круговi дiаграми . . . . . . . . . . . . . . . . . . 753.2 Точки та лiнiї на площинi . . . . . . . . . . . . . . . . . . . . . 783.3 Елементи тривимiрної графiки . . . . . . . . . . . . . . . . . . 863.4 Географiчнi карти . . . . . . . . . . . . . . . . . . . . . . . . . 91

    4 Одновимiрна описова статистика 1024.1 Статистики середнього положення . . . . . . . . . . . . . . . . 1034.2 Статистики розкиду . . . . . . . . . . . . . . . . . . . . . . . . 1134.3 Алгебраїчнi властивостi описових статистик . . . . . . . . . . 1164.4 Статистики форми розподiлу . . . . . . . . . . . . . . . . . . . 1194.5 Групування та навантаження . . . . . . . . . . . . . . . . . . . 1214.6 Обчислення описових статистик у R . . . . . . . . . . . . . . . 126

    5 Опис залежностей 1325.1 Дiаграми розсiювання . . . . . . . . . . . . . . . . . . . . . . . 1325.2 Коефiцiєнт кореляцiї Пiрсона . . . . . . . . . . . . . . . . . . 1385.3 Вiзуалiзацiя кореляцiй . . . . . . . . . . . . . . . . . . . . . . . 1435.4 Ранги та ранговi кореляцiї . . . . . . . . . . . . . . . . . . . . . 1525.5 Сила i значущiсть кореляцiї . . . . . . . . . . . . . . . . . . . . 160

    6 Основнi ймовiрнiснi розподiли 1676.1 Загальнi поняття та схема використання основних розподiлiв

    в R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1676.2 Неперервнi розподiли на прямiй . . . . . . . . . . . . . . . . . 170

    6.2.1 Одновимiрний гауссiв (нормальний) розподiл . . . . . 1716.2.2 Пiвнормальний розподiл . . . . . . . . . . . . . . . . . 1736.2.3 Логнормальний розподiл . . . . . . . . . . . . . . . . . 1746.2.4 Експоненцiйний i гамма розподiли та розподiл Лапласа 1766.2.5 Розподiли екстремальних типiв: Вейбулла, Фреше i

    Гумбеля . . . . . . . . . . . . . . . . . . . . . . . . . . 1796.2.6 Рiвномiрний розподiл . . . . . . . . . . . . . . . . . . . 1806.2.7 Розподiли, пов’язанi з гауссовим: 𝜒2, 𝑇 i 𝐹 . . . . . . . 182

  • ЗМIСТ 8

    6.3 Дискретнi розподiли на прямiй . . . . . . . . . . . . . . . . . . 1846.3.1 Бiномiальний розподiл . . . . . . . . . . . . . . . . . . 1846.3.2 Розподiл Пуассона . . . . . . . . . . . . . . . . . . . . . 1866.3.3 Геометричний розподiл . . . . . . . . . . . . . . . . . . 187

    6.4 Комбiнацiї та перетворення розподiлiв . . . . . . . . . . . . . 1886.4.1 Зрiзанi розподiли . . . . . . . . . . . . . . . . . . . . . 1896.4.2 Суми незалежних випадкових величин . . . . . . . . . 1916.4.3 Сумiшi кiлькох розподiлiв . . . . . . . . . . . . . . . . 195

    6.5 Генерацiя псевдовипадкових послiдовностей . . . . . . . . . . 1986.5.1 Генератори рiвномiрних псевдовипадкових чисел . . . 1996.5.2 Генерацiя псевдовипадкових чисел iз заданим розподi-

    лом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2056.5.3 Випадковi числа в R . . . . . . . . . . . . . . . . . . . . 211

    7 Методи графiчного аналiзу одновимiрних даних 2137.1 Гiстограми . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2137.2 Графiчна перевiрка узгодженостi розподiлу. P-P та Q-Q дiаграми2197.3 Q-Q дiаграма з прогнозними iнтервалами . . . . . . . . . . . . 2257.4 Порiвняння розподiлiв кiлькох наборiв даних. . . . . . . . . . 2277.5 Скриньки з вусами . . . . . . . . . . . . . . . . . . . . . . . . . 230

    8 Оцiнювання невiдомих параметрiв розподiлу 2358.1 Оцiнки узагальненого методу моментiв . . . . . . . . . . . . . 2368.2 Оцiнки методу квантилiв . . . . . . . . . . . . . . . . . . . . . 2478.3 Оцiнки методу найбiльшої вiрогiдностi . . . . . . . . . . . . . 2518.4 Асимптотична нормальнiсть i матриця розсiювання оцiнок . . 2598.5 Довiрчi iнтервали та елiпсоїди . . . . . . . . . . . . . . . . . . 277

    8.5.1 Побудова асимптотичних довiрчих iнтервалiв . . . . . 2778.5.2 Побудова довiрчих елiпсоїдiв . . . . . . . . . . . . . . 283

    8.6 Оцiнювання параметрiв стандартних розподiлiв у R . . . . . . 290

    9 Перевiрка статистичних гiпотез 2979.1 Загальнi вiдомостi . . . . . . . . . . . . . . . . . . . . . . . . . 2979.2 Тест вiдношення вiрогiдностi для перевiрки простих гiпотез . 3029.3 Тест вiдношення вiрогiдностi для складних гiпотез . . . . . . . 316

    9.3.1 Загальна схема тестiв вiдношення вiрогiдностi . . . . . 3169.3.2 Асимптотика тесту вiдношення вiрогiдностi для вкла-

    дених гiпотез . . . . . . . . . . . . . . . . . . . . . . . . 319

  • ЗМIСТ 9

    9.3.3 Багатовибiрковi задачi . . . . . . . . . . . . . . . . . . 3239.4 Довiрчi iнтервали та елiпсоїди у перевiрцi гiпотез . . . . . . . 3259.5 Тести для даних з нормальним розподiлом . . . . . . . . . . . 332

    9.5.1 T-тест. Перевiрка гiпотез про середнi. Дисперсiя —заважаючий параметр. . . . . . . . . . . . . . . . . . . 334

    9.5.2 F-тест. Перевiрка гiпотез про дисперсiї. Заважаючийпараметр — математичне сподiвання . . . . . . . . . . 341

    9.5.3 Z-тест для гiпотез про середнє без заважаючих пара-метрiв . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

    9.5.4 Знову про тести для дисперсiї . . . . . . . . . . . . . . 3469.5.5 Знову про тести для математичних сподiвань . . . . . . 350

    9.6 Тести 𝜒2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3539.6.1 Тест 𝜒2 для простих основних гiпотез . . . . . . . . . . 3539.6.2 Тест 𝜒2 для складної основної гiпотези . . . . . . . . . 3589.6.3 Тест 𝜒2 з групуванням для перевiрки узгодженостi . . . 3639.6.4 Перевiрка незалежностi двох змiнних тестом 𝜒2 . . . . 366

    9.7 Перевiрка залежностi двох змiнних . . . . . . . . . . . . . . . 3709.7.1 Однофакторний дисперсiйний аналiз . . . . . . . . . . 3719.7.2 Тести кореляцiй . . . . . . . . . . . . . . . . . . . . . . 3779.7.3 Порiвняння рiзних пiдходiв до пошуку залежностi . . . 380

    10 Регресiя 39010.1 Проста лiнiйна регресiя . . . . . . . . . . . . . . . . . . . . . . 39210.2 Множинна лiнiйна регресiя. Метод найменших квадратiв . . . 40610.3 Позначення у формулах для функцiї lm() . . . . . . . . . . . . 42810.4 Перевiрка лiнiйних гiпотез. Тест Фiшера . . . . . . . . . . . . . 43210.5 Нелiнiйний МНК . . . . . . . . . . . . . . . . . . . . . . . . . . 447

    A Векторна i матрична алгебра 455

    B Вiдомостi з теорiї ймовiрностей 459B.1 Випадковi величини та вектори . . . . . . . . . . . . . . . . . . 459B.2 Умовнi ймовiрностi та математичнi сподiвання. Незалежнiсть. 462B.3 Багатовимiрний гауссiв (нормальний) розподiл . . . . . . . . . 465B.4 Збiжнiсть та граничнi теореми . . . . . . . . . . . . . . . . . . 465

    Покажчик засобiв R 472

  • Роздiл 1

    Початок роботи з системою R

    У цьому пiдроздiлi мiститься переважно технiчна iнформацiя, кориснадля тих, хто вперше вирiшив поекспериментувати з R. Тут розподiдається,що таке R, R-Studio, пакети (бiблiотеки), чим вони можуть бути кориснi, деїх взяти i як встановити на своєму комп’ютерi. Пояснюється також, як вестидiалог з Ri R-Studio, користуватись help-системою i де в iнтернетi можнашукати порад по роботi з R, коли вони вам потрiбнi.

    Якщо R вже встановлений на вашому комп’ютерi i першi кроки булиуспiшними, пропускайте цей роздiл i переходьте до наступного.

    1.1 Що таке R i де його взятиR це середовище програмування для статистичного аналiзу даних. Воно

    складається з базової програми R, що працює як iнтерпретатор мови ста-тистичного програмування S та окремих пакетiв, якi реалiзують спецiальнiметоди та технологiї статистичної обробки даних. Базова програма створе-на у рамках проекту GNU, як альтернативна програмна реалiзацiя мови S(ця мова та комерцiйний пакет S+ для її реалiзацiї були розробленi у BellLaboratories пiд керiвництвом Дж. Чемберса). На вiдмiну вiд S+, програмаR є некомерцiйною i вiльно розповсюджується за умови дотримання вимогGNU General Public License. Комерцiйний проект S+ нинi практично не ак-тивний, остання версiя програми випущена у 2007р. Подальший розвитокiдей, закладених у мовi S, та їх реалiзацiя продовжується в рамках системиR. Тому сучасна версiя мови також має назву R. Але ряд книжок, написанихз орiєнтацiєю на S та S+, зберiгає свою актуальнiсть, оскiльки у них питання

    10

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 11

    прикладного застосування часто пояснюються детальнiше i зрозумiлiше, нiжу документацiї до R, розробленiй ентузiастами.

    Офiцiйна сторiнка проекту R— http://www.r-project.org/ . Отриматиостанню версiю iнсталятора базової програми R для операцiйної системиWindows можна за адресою1:

    http://cran.r-project.org/bin/windows/base/ .(На 20 сiчня 2016 це була версiя R-3.2.3). Iнсталятор завантажується у

    виглядi exe-файлу. Для iнсталяцiї програми досить запустити цей файл i вiд-повiдати на запитання, якi задаватиме iнсталятор. При першiй спробi роботиз R рекомендовано погоджуватись з усiма пропозицiями, якi робить iнсталя-тор.

    Проблеми можуть виникнути, якщо на вашому комп’ютерi встановленiрiзнi права доступу для рiзних користувачiв. Справа в тому, що R наприкiн-цi кожної сесiї роботи зберiгає на диску “робочий простiр” (workspace) -сукупнiсть даних та програм, якi були завантаженi пiд час сесiї. На початкунаступної сесiї workspace завантажується з диску. Якщо пiд час iнсталяцiї длязберiгання workspace буде обрано директорiю, недоступну певному користу-вачевi, то при роботi з R можуть виникати повiдомлення про неможливiстьзавантаження або зберiгання workspace. Для усунення таких повiдомлень по-трiбно або вибрати директорiю вiльного доступу при iнсталяцiї, або змiнитидиректорiю, використовуючи пункт File->Change Dir. . . у головному менюголовного вiкна програми R.

    Пiсля iнсталяцiї R його можна запустити i отримати приблизно таке вiкно,як зображено на рис. 1.1. Тут зверху знаходиться головне меню, а нижче вiд-крито вiкно “консолi R”, у якiй можна давати команди програмi та отримуватиїї вiдповiдi. Синiм кольором у цьому вiкнi виведено початкову iнформацiюпро вашу версiю базової програми R. Далi червоним кольором можуть бу-ти вказанi команди, якi R виконав автоматично при завантаженнi. Нарештi,червоний символ > є запрошенням користувачу вводити власнi команди. Дляперевiрки роботи системи можна пiсля > ввести 2+2 i натиснути Enter. Ре-зультат буде виведено на консоль:

    [1] 4

    R виводить результати виконання безпосередньо пiсля команди синiм ко-льором, пiсля чого переходить у режим очiкування наступної команди, прощо повiдомляє червоним знаком >. При роботi з R можна виконувати одразу

    1У цiй книжцi я орiєнтуюсь на використання R у системiWindows, але на сайтi r-projectможна знайти версiї i для iнших операцiйних систем.

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 12

    Рис. 1.1. Початок роботи з R

    багато команд, що записанi у окремому файлi. Найпростiший спосiб зробитице - завантажити такий файл в якому-небудь текстовому редакторi, зробититам copy, а потiм— paste на консолi. При цьому, якщо команди у файлi розмi-щенi у окремих рядочках, роздiлових знакiв мiж ними не потрiбно. Команди,вмiщенi в одному рядочку, роздiляють символом ;.

    Якщо довга команда не вмiщується у одному рядочку, її можна розбитина декiлька рядочкiв, причому, при переходi до наступного рядочку R авто-матично виводить символ продовження +. R сам здогадується, що командане закiнчена — за її синтаксисом. Тому деякi синтаксичнi помилки (як от —забутi дужки) можуть сприйматись як незакiнченi команди. У цьому випадкуR виставить + на початку наступного рядочка i перейде у режим очiкування.Натиснiть esc щоб перейти у режим введення нової команди без продовженняаналiзу попередньої.

    Програми, що складаються з команд R, називають скриптами (script). Во-ни мають стандартне розширення .r. У базовiй програмi є можливiсть вiд-крити вiкно редактора для створення нового скрипту, або завантажити файлзi скриптом, використовуючи пункти головного меню File->New script абоFile->Open script. Виконати завантажений у вiкнi редактора скрипт повнiстюможна, використовуючи Edit->Run all. Можна також виконати видiлену ча-стину скрипту використовуючи кнопку “Run line or selection”. Закiнчившироботу зi скриптом, його можна зберегти, використовуючи File->Save.

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 13

    Рис. 1.2. Початок роботи з R

    1.2 Система R-StudioЗа потреби, всi технологiї статистичної обробки можна реалiзовувати, ви-

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

    Такою оболонкою-iнтегратором є система R-Studio. Вона також розпо-всюджується безкоштовно. Iнсталятор R-Studio можна отримати на офi-цiйному сайтi www.rstudio.com. Перш нiж iнсталювати цю програму, требавстановити на комп’ютерi базовий R. Пiсля цього можна запустити iнсталяторR-Studio i погоджуватись з усiма його запитаннями.

    При роботi вiкно R-Studio може мати приблизно такий вигляд, як зобра-жено на рис. 1.2. Основне вiкно роздiлене на чотири дочiрнi вiкна. У лiвомуверхньому вiкнi виведено script — програму, яка редагується. (У цього вiкнабагато закладинок, якi дозволяють працювати з кiлькомафайлами-скриптамиодразу). У лiвому нижньому вiкнi — консоль, у якiй виконуються команди.Тут також можна запускати скрипти або їх частини. У правому верхньомувiкнi можна переглядати активнi змiннi, з якими працює програма. Тут також

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 14

    можна побачити iсторiю роботи — що ви робили у Rне тiльки пiдчас даноїсесiї (це вiдображено на консолi) а i ранiше, у попереднiх сесiях.

    Найбiльш навантажене вiкно внизу праворуч. Сюди виводять рисунки, якiробить програма, тут можна проглянутиHelp, подивитись, якi додатковi паке-ти завантаженi, а також працювати з рiзними файлами з вашого комп’ютера.

    Звичайно, користувач може мiняти цi вiкна мiсцями, змiнювати їх розмiрита користуватись iншими можливостями системи.

    Зокрема, користуючись головним меню, можна перезавантажувати R, ви-бирати новий робочий каталог (тобто каталог, з якого R завантажує файли заумовчанням), зберiгати та завантажувати у пам’ять workspace, отримувати зiнтернету новi бiблiотеки програм/даних (packages). В принципi, все це можнаробити i безпосередньо з R, але в R-Studio такi речi органiзованi зручнiше.

    R-Studio корисний також пiдказками, якi вiн робить пiд час набору командна консолi та у вiкнi скриптiв.

    Ще одна додаткова зручнiсть R-Studio — можливiсть генерацiї текстовихзвiтiв, якi виконуються з поєднанням системи програмування R та системиформатування текстiв LaTeX. При цьому R-Studio спирається на R пакетknitr. За допомогою цiєї технологiї пiдготовлена дана книга. Нажаль, дляповного опису knitr потрiбно пояснювати не тiльки роботу R, а i принципиорганiзацiї LaTeX, що виходить за рамки цiєї книги.

    1.3 Завантаження пакетiв, робота з Help та iншiорганiзацiйнi питання

    Базовий R має великий набiр функцiй для реалiзацiї математичних тастатистичних алгоритмiв. Але користувачi весь час розробляють свої власнiфункцiї, що доповнюють базовi. Коли деякий набiр функцiй, що реалiзуютьпевну технологiю статистичної обробки даних, буде вiдпрацьований настiль-ки, що у розробника виникає бажання подiлитись ним також iз iншими мож-ливими користувачами, вiн оформлює такий набiр у виглядi пакету (package).Пакет повинен мати також help-документацiю, яка дозволить можливим ко-ристувачам зрозумiти його призначення. До пакету часто включають i набориданих, на яких можна перевiрити роботу його функцiй. Бувають пакети, скла-денi лише з даних — це просто колекцiї цiкавих або популярних прикладiв,якi хтось пiдiбрав для власних потреб.

    Правильно оформленi пакети розробники вiдсилають до депозитарiїв,

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 15

    звiдки їх можна переписати на свiй комп’ютер у каталог, доступний для R (iн-сталювати). Оскiльки пакети створюються рiзними розробниками за власноюiнiцiативою, незалежно один вiд одного, мiж ними можуть iснувати неузгод-женостi. Наприклад, функцiї з рiзних пакетiв можуть мати однаковi iмена татипи параметрiв, тодi при завантаженнi у пам’ять комп’ютера обох пакетiвкористувач не зможе правильно їх використовувати2. Тому рекомендуєтьсязавантажувати не всi iнстальованi на комп’ютерi пакети, а лише тi, якi дiйснопотрiбнi для роботи пiд час даної сесiї.

    Просунутi користувачi R розрiзняють поняття пакет (package) i бiблiо-тека (library). Пакетом називають файл, або набiр файлiв з скриптами та їхописом, а бiблiотекою - мiсце, тобто каталог у файловiй системi, де лежитьпакет. З точки зору користувача-початкiвця ця вiдмiннiсть несуттєва. Старо-жили пам’ятають, що в мовi S library означало приблизно те ж, що у R зветьсяpackage. У цiй книжцi ми теж не будемо надавати ваги цiй вiдмiнностi.

    Iнсталювати пакет на комп’ютерi, тобто отримати його з iнтернету увиглядi zip-архiву, розархiвувати i покласти у зручне для R мiсце, можна:

    1. Пiд час сесiї роботи з R з консолi, викликавши функцiю iнсталяцiїinstall.packages. Наприклад, команда install.packages('raster') ви-кличе звертання комп’ютера до стандартного депозитарiю (як правило, цеcran.us.r-project.org), отримання вiд нього пакету i розмiщення його увiдповiдному каталозi на комп’ютерi. Звичайно, якщо комп’ютер не має ви-ходу в iнтернет, або депозитарiй недоступний, в результатi виконанняфункцiївиникне помилка.

    2. При роботi безпосередньо з базовим R iнсталяцiю можна робити, ви-користовуючи пункти головного меню Packages->Install package(s). Спочат-ку програма пропонує вибрати iнтернет-архiв, з якого робиться iнсталяцiя.Варiант 0-cloud, що пропонується за умовчанням, як правило, працює цiл-ком задовiльно. Пiсля цього треба у списку вибрати потрiбний для вас па-кет. Якщо цей пакет використовує якi-небудь iншi, котрих немає на вашомукомп’ютерi, вони будуть iнстальованi автоматично.

    3. При роботi з R-Studio можна скористатись пунктами головного менюTools->Install packages. . . При цьому вiдкривається дiалогове вiкно, де ви мо-жете вказати, звiдки проводиться iнсталяцiя (з iнтернет-депозитарiю, чи зzip-архiву на вашому комп’ютерi), який пакет ви хочете iнсталювати, мiс-

    2Функцiї, що мають однаковi iмена але працюють з параметрами рiзних типiв — ценормальне явище для об’єктно-орiєнтованих мов. Комп’ютер при виклику обирає правильнуфункцiю, виходячи з специфiкацiї її параметрiв.

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 16

    це, де буде розмiщений пакет i чи треба iнсталювати iншi пакети, якi нимвикористовуються.

    Для завантаження (пiдключення) пакету у робочу область пам’ятi(Workspase) пiд час сесiї використовують функцiю library(). Наприклад,library(raster) пiдключає пакет raster i дає змогу використовувати всiйого функцiї у подальшiй сесiї.

    Вiдключити пакет можна, використовуючи функцiю detach(). Такdetach("package:raster") зробить пакет raster неактивним — йогофункцiї перестануть бути доступними у подальшiй сесiї. Але при цьому вiнзалишиться у оперативнiй пам’ятi.

    Видалити непотрiбний пакет з Workspase можна, використовуючи функ-цiю remove(), наприклад,

    remove.packages("raster").Для того, щоб очистити весь Workspase, можна набратиremove(list = ls()).Для того, щоб отримати довiдку по яким-небудь можливостям R мож-

    на скористатись help-системою. Для цього призначена функцiя help(), абоскорочено ?. Набравши на консолi R

    ?sin

    ви отримаєте довiдку про тригонометричнi функцiї в R, зокрема — i профункцiю sin(𝑥). Довiдка, як правило, починається з iнформацiї про те, уякому пакетi знаходиться функцiя (данi, об’єкти, тощо) У випадку ?sin цевиглядає як

    Trig {base}

    що вказує на набiр тригонометричних функцiй з базового R.Iнколи назву функцiї (тему help) пiсля знаку запитання потрiбно зада-

    вати у лапках. Так, при спробi викликати help запитом ?+ (або ?for) ви увiдповiдь отримаєте запрошення продовжувати введення команди (+). Якщонабрати ?"+" (вiдповiдно— ?"for") можна отримати довiдку про реалiзацiюарифметичних операцiй (або про цикл for) у R.

    Базовий R для перегляду help-документацiї може запускати iнтернет-браузер, але це не означає, що документацiя шукається у iнтернетi. Все,що видається за командою ? або ??, знаходиться на вашому комп’ютерi i непотребує доступу до iнтернету.

    Команда ? виводить основний файл, пов’язаний з темою запитання. Якщови хочете проглянути всi файли, де згадується дана тема, можна скористатисьфункцiєю help.search(), скорочено — ??. Наприклад, за запитом

    ??"linear models"

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 17

    у браузерi буде виведена сторiнка з перелiком усiх документiв help-у, де зга-дуються лiнiйнi моделi з коротким описом їх змiсту. Бiльшiсть з цих сторiнокбуде стосуватись лiнiйних регресiйних моделей, або узагальнених лiнiйнихмоделей. Але можливi i посилання на лiнiйнi моделi чогось зовсiм iншого.Переходячи за гiперпосиланнями, можна продивлятись цi документи.

    Задаючи спецiальнi параметрифункцiйhelp() абоhelp.search()можнаотримувати довiдки по окремих пакетах, або тiльки за ключовими словами,або тiльки по документах з певного каталогу i т.д.

    Документацiю для help автори пакетiв розробляють самi i поставляєтьсявона разом з пакетами. Тому за запитом ? ви отримуєте iнформацiю лишепро тi функцiї, якi знаходяться у пакетах, доступних пiд час сесiї (пiдключе-них при запуску R або додатково командою library()). Якщо, скажiмо, напочатку сесiї я запитаю

    ?ginv вiдповiдь буде

    No documentation for ‘ginv’ in specified packages and libraries:

    you could try ‘??ginv’

    При запитi ??ginv виводиться вся iнформацiя про ginv, що є на комп’ютерi(як пiдключена до сесiї, так i не пiдключена). Зокрема, на моєму комп’ютерiна сторiнцi довiдки з’являється гiперпосилання

    MASS::ginv Generalized Inverse of a Matrix,що вказує на наявнiсть функцiї ginv у пакетi MASS i коротко описує її призна-чення—знаходження узагальнених оберненихматриць. А пiсля пiдключенняпакету MASS довiдка про цю функцiю стане доступною за запитом ?ginv. Прироботi в R-Studio комп’ютер стане пiдказувати вам параметри цiєї функцiїпри наборi i т.д.

    У R-Studio у вiкнi help (праворуч знизу на екранi у стандартнiй конфiгу-рацiї) є поле для пошуку (Search), яке дiє аналогiчно запиту ?, але при цьомудає додаткову пiдказку при наборi.

    Якщо ви хочете отримувати iнформацiю про можливостi всiх функцiй зусiх пакетiв, що лежать у всiх доступних депозитарiях, то ви можете iнста-лювати на своєму комп’ютерi пакет sos. Пiсля пiдключення його до сесiї(library(sos)) стане доступним запит у формi ???, за яким буде ви-даватись результат пошуку заданої темипо всiх R-депозитарiях свiту. Розiбра-тись у таких багатосторiнкових перелiках буває не просто, але iнколи вонидають несподiванi i дуже кориснi результати.

  • РОЗДIЛ 1. ПОЧАТОК РОБОТИ З СИСТЕМОЮ R 18

    Оскiльки документацiю до пакетiв розробляють їх автори, то вона ча-сто буває переобтяженою технiчними подробицями, не дуже зрозумiлимипочаткiвцю. Логiка застосування програми (очевидна авторам) при цьомувтрачається. Тому дуже корисним буває ознайомлення з думками користува-чiв. Найпростiше знайти такi думки, скориставшись якою-небудь пошуковоюiнтернет-машиною (я вiддаю перевагу Google). Набравши, скажiмо, запит

    "inverse matrix in r"

    — ви отримаєте посилання на багато рiзних рекомендацiй по знаходжен-ню обернених матриць за допомогою R. Не всi вони будуть адекватними! Ярекомендую звертати увагу на поради сайтiв:

    stackoverflow.com

    — це сайт програмiстiв та математикiв, тут можна знайти поради спе-цiалiстiв та обговорення проблем на серйозному рiвнi.

    www.statmethods.net

    — тут можна шукати швидкi i простi поради у стилi Quick-R.cran.r-project.org/doc/FAQ/

    — це офiцiйний сайт R, мiсце де зiбранi вiдповiдi на запитання, що вини-кають особливо часто.

    На ютубi можна також побачити лекцiї з багатьох окремих питань викори-стання R у стилi “зрозумiло навiть немовлятам”. Вони можуть бути корисни-ми на перших етапах вивчення R, щоб не почувати себе зовсiм безпорадним.Потiм їх зрозумiлiсть починає дратувати. Але коли ви набуваєте певного до-свiду у роботi з R i виникає потреба подiлитись ним з iншими, перегляд такихлекцiй знову може стати у пригодi.

  • Роздiл 2

    Мова статистичногопрограмування R

    Цей роздiл присвячений першому знайомству з програмуванням мовоюR. Тут, в першу чергу, розповiдається те, без чого неможливо розумiти текстина R, вмiщенi у наступних роздiлах. Звичайно, дещо викладено бiльш деталь-но, щоб читач мiг також орiєнтуватись у простих R-програмах, якi можутьпотрапити у поле його зору, наприклад, при пошуку в iнтернетi. Але немож-ливо стати програмiстом на R прочитавши тiльки цей роздiл. Для подальшогознайомства з програмуванням на R, а також з особливостями комп’ютерноїреалiзацiї цього середовища, можна рекомендувати книжку [54]. Рiзним пе-ретворенням наборiв статистичних даних за допомогою R присвяченi книжки[20] i [48]. З технiками статистичного аналiзу даних на основi R можна ознай-омитись у [49] i [50].

    2.1 Базовi поняттяМова R складається з команд. Кожна команда може виконуватись окремо,

    або у складi програми. Програми у R звуться скриптами (script). Окремакоманда записується у командному рядочку системи R пiсля запрошення “>”i запускається на виконання клавiшею Enter:

    > 1+1

    [1] 2

    19

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 20

    (Запрошення комп’ютер видає автоматично).Команда може бути виразом (тодi результат її виконання просто виво-

    диться на екран, як у попередньому прикладi) або привласненням:

    > x x

    [1] 2

    Тут ” виводить символ продовження вводу“+” i ви можете закiнчити введення команди:

    > x x

    [1] 6

    Команди працюють з об’єктами1. Прикладами об’єктiв є вектори, мат-рицi, фрейми (набори) даних, функцiї. Часто функцiя, що виконує певнупроцедуру статистичного аналiзу даних (наприклад — регресiйний аналiз)всi свої результати записує у окремий об’єкт, який потiм можна надрукува-ти на екранi у виглядi звiту, або вiдобразити у виглядi серiї рисункiв, абовикористати для подальшого аналiзу iншiими функцiями.

    Грубо кажучи, об’єкт — це поiменована область пам’ятi, де зберiгаєтьсявсе, що вiдноситься до цього об’єкта: значення координат вектора, описроботи функцiї, тощо. У R, як i в iнших об’єктно-орiєнтованих мовах, уодному об’єктi можуть об’єднуватись данi i функцiї, що їх обробляють. Данi,з яких складається об’єкт, називають його атрибутами, а функцiї, якi з нимпов’язанi — методами. Об’єкти належать рiзним класам. Клас визначає,

    1Якщо ви не зовсiм вiдчуваєте, про що йдется у цьому та наступному абзацах — непереймайтесь тим. Все стане зрозумiлiше у подальших прикладах. При першому читаннiможна одразу перейти до наступного пiдроздiлу.

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 21

    якi атрибути може/повинен мати мати об’єкт i якi методи можна до ньогозастосовувати.

    До атрибута atr об’єкта x можна звертатись використовуючи символ $:x$atr

    Наприклад:

    > x x$name x$age x$married x

    $name

    [1] "Коваленко"

    $age

    [1] 24

    $married

    [1] FALSE

    — ми спочатку створили пустий (NULL) об’єкт x, а потiм надали йому атри-бути name, age i married. Щоб подивитсь, як тепер виглядає об’єкт x, мипросто набрали його назву у скриптi, i R вiдобразив всi x атрибути на екранi.

    Тепер з x можна працювати як з єдиним цiлим, наприклад, присвоїти йогозначення новому об’єкту y:

    > y y

    $name

    [1] "Коваленко"

    $age

    [1] 24

    $married

    [1] FALSE

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 22

    — тепер y теж став 24 лiтнiм неодруженим Коваленком.Звернiть увагу, що при привласненнi за допомогою y y$married y$married

    [1] TRUE

    > x$married

    [1] FALSE

    Наш y-Коваленко одружився, але x-Коваленко залишився неодруженим.Для того, щоб побачити значення об’єкта x, як правило, досить просто

    ввести команду x. Якщопотрiбне бiльш акуратне вiдображення, можна скори-статись функцiєю print(). Зокрема, якщо записати print(z,digits=3) тоR намагатиметься виводити не бiльше трьох значущих цифр у всiх числовихатрибутах z:

    > z=1/3

    > z

    [1] 0.3333333

    > print(z,digits=3)

    [1] 0.333

    Структуру об’єкта зручно перевiряти використовуючи функцiю str():

    > str(x)

    List of 3

    $ name : chr "Коваленко"

    $ age : num 24

    $ married: logi FALSE

    Тут ми не тiльки бачимо iмена i значення атрибутiв, але можемо дiзнатисьпро їх тип: символьний для name, числовий для age i логiчний для married.

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 23

    2.2 Типи даних та елементарнi функцiї

    2.2.1 Вектори. Арифметичнi та логiчнi операцiї.Найпростiшою структурою умовi R є вектор (скаляри як окремi структури

    не iснують, а трактуються як вектори одиничної довжини).R використовує п’ять простих векторних типiв об’єктiв:

    logical: логiчний — вектор складений з елементiв що приймаютьзначення “iстинно” (TRUE або T) та “хибно” (FALSE або F);

    numeric: числовий — вектор, складений з дiйсних чисел;

    integer: цiлий — вектор, складений з цiлих чисел;

    complex: вектор, складений з комплексних чисел;

    character: символьний — вектор, елементами якого є символьнi ря-дочки.

    Якщо в одному наборi даних потрiбно об’єднати елементи рiзної природи,використовують об’єкт типу list— список2.

    Створити будь-який вектор можна використовуючи функцiю c(), якаоб’єднує рiзнi списки в один об’єкт (конкатенацiя)3:

    > c(1,5,-3,4)

    [1] 1 5 -3 4

    —з чотирьох одноелементних векторiв створений числовий вектор, що скла-дається з чотирьох елементiв (1,5,-3,4) i результат роботи виведено на екран.

    Звернiть увагу, що, хоча всi використанi нами числа були цiлими, вектормає тип numeric. Для того, щоб сказати комп’ютеру, що ви хочете по мож-ливостi використовувати цiлочислову арифметику при роботi з даним век-тором, потрiбно або перетворити його у цiлочисловий за допомогою функцiїas.integer(), або поставити лiтеру L пiсля кожного числа:

    > str(c(1,5,-3,4))

    2Список це не вектор!3Списки створюються функцiєю list().

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 24

    num [1:4] 1 5 -3 4

    > str(c(1L,5L,-3L,4L))

    int [1:4] 1 5 -3 4

    > str(as.integer(c(1,5,-3,4)))

    int [1:4] 1 5 -3 4

    З числовими векторами можна виконувати звичайнi дiї додавання, мно-ження i т.д. З логiчними — операцiї & (логiчне i), | (логiчне або), ! (запе-речення) та iн. Операцiї порiвняння (, ,==,!=) застосовуються дочислових даних i дають логiчний результат.

    Усi цi операцiї застосовуються до векторiв поелементно:

    > x y x+y

    [1] 4 4 -1 5

    Також поелементно застосовуються до векторiв елементарнi функцiї sin, logi т.д.

    Для цiлочисельного дiлення використовується операцiя %/% для знаход-ження залишку вiд дiлення — %%..

    Якщо у бiнарнiй операцiї вектори-аргументи мають рiзну довжину, токоротший аргумент повторюється циклiчно при виконаннi операцiї:

    > x y x*y

    [1] 3 6 3 6 3

    При цьому, якщо довжина довшого вектора не кратна довжинi коротшого,комп’ютер видає попередження (warning) про це. Далi у прикладах попере-дження не вiдображаються.

    При виконаннi арифметичних дiй можуть виникати значення Inf (нескiн-ченнiсть) та NaN (невизначено). З ними можна виконувати рiзнi дiї, якi даютьосмислений результат:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 25

    > x x

    [1] Inf

    > 3-x

    [1] -Inf

    > x>3

    [1] TRUE

    > x/x

    [1] NaN

    Крiм значення NaN, яке вiдповiдає невизначеностi, пов’язанiй з арифметич-ними операцiями, в R використовується також значення NA, що позначаєпропущенi значення, тобто значення, якi є невiдомими статистику. Особ-ливостi обробки NA-значень обговорюються далi. Крiм того, можливе iщезначення NULL, яке позначає пустий список.

    Вектори можуть бути iменованими (named), у такому випадку кожен еле-мент вектора має iм’я. Щоб зробити вектор iменованим, потрiбно задати длянього атрибут names:

    > x names(x) x

    вiдмiнно добре задовiльно незадовiльно погано

    5 4 3 2 1

    (У цьому скриптi виклик функцiї names() стоїть лiворуч вiд знаку привлас-нення. У R такий синтаксис дозволений лише у невеликiй кiлькостi випадкiв.Як правило, вживання виклику довiльної функцiї лiворуч вiд

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 26

    > seq(2.5,6,0.5)

    [1] 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0

    Виклик seq можливий у рiзних форматах (це характерна особливiсть не лишеseq, а всiх функцiй мови R) Формальна специфiкацiя цiєї функцiї така:

    seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),

    length.out = NULL, along.with = NULL, ...)

    У цьому записi seq — iм’я функцiї, from (перший елемент), to (останнiй),by (крок), length.out (кiлькiсть елементiв) i along.with— iмена формаль-них параметрiв. Пiсля знаку рiвностi вказанi значення, яких цi параметринабувають за умовчанням, якщо вони не вказанi у виклику функцiї (якщо,скажiмо, параметр from не заданий у виклику, то першим елементом буде 1).Наприклад, можливий виклик:

    > seq(2,10,length.out=6)

    [1] 2.0 3.6 5.2 6.8 8.4 10.0

    Тут крок прогресiї не заданий явно, вiн обирається комп’ютером так, щобкiлькiсть елементiв дорiвнювала заданому length.out.

    (... позначає, що у функцiї можуть бути i iншi параметри).Як працюватиме ця функцiя при виклику з iншими наборами параметрiв,

    можна подивитись у help, задавши команду ?seq.Для випадку, коли крок послiдовностi дорiвнює ±1, можна використову-

    вати скорочений запис seq у виглядi from:to, наприклад:

    > 5:10

    [1] 5 6 7 8 9 10

    > -5:10

    [1] -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

    > -(5:10)

    [1] -5 -6 -7 -8 -9 -10

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 27

    > -10:-5

    [1] -10 -9 -8 -7 -6 -5

    Функцiя rep() розмножує свiй перший параметр задану кiлькiсть разiв:

    > x rep(x,3)

    [1] 1 2 3 4 1 2 3 4 1 2 3 4

    > rep(x,each=3)

    [1] 1 1 1 2 2 2 3 3 3 4 4 4

    Числовий вектор,що складається з нулiв, можна створити такожфункцiєюnumeric(n), де n— кiлькiсть елементiв вектора:

    > x x

    [1] 0 0 0 0 0

    2.2.2 Iндексацiя векторiв.Для того, щоб при обробцi мати можливiсть використати певну частину

    вектора (матрицi, багатовимiрного масиву), у R застосовується дуже гнучкасистема iндексацiї. Зараз ми обмежимось прикладами її застосування довекторiв, матрицi розглянемо далi. Як звичайно, 𝑖-тий елемент вектора можнавидiлити, використовуючи прямi дужки:

    > x names(x) x[2]

    добре

    4

    (Нумерацiя елементiв векторiв завжди починається з 1).Можна звернутись до елемента за iм’ям, якщо воно є:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 28

    > x["задовiльно"]

    задовiльно

    3

    Якщо у прямих дужках вказати вектор iндексiв, то видiлиться пiдвекторвiдповiдних елементiв:

    > x[c(3,1,5)]

    задовiльно вiдмiнно погано

    3 5 1

    (елементи переставленi в тому порядку, в якому йдуть iндекси). I нарештi, як-що задати вiд’ємнi значення iндексiв, то вiдповiднi елементи будуть вилученiз пiдвектора:

    > x[-c(3,1,5)]

    добре незадовiльно

    4 2

    Цеще не все. Можна для iндексацiї використовувати логiчнi вектори, тодiвключатись у пiдвектор будуть тiльки елементи, яким вiдповiдає значенняTRUE:

    > x[c(T,T,F,F,T)]

    вiдмiнно добре погано

    5 4 1

    У прямих дужках можна записувати будь-який вираз, значення якого будутьвикористанi для iндексацiї:

    > x[x%%2==0]

    добре незадовiльно

    4 2

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 29

    Роботу цiєї команди можна описати так: спочатку створюється логiчний век-торx%%2==0, в якомуTRUEвiдповiдає тим елементам, якi є парнимичислами,а потiм за цим логiчним вектором робиться вiдбiр вiдповiдних елементiв упiдвектор.

    Вираз вигляду x[...] може стояти i у лiвiй частинi команди привласнен-ня, наприклад:

    > alp alp[2] alp

    [1] "a" "bbb" "c" "d" "e" "f"

    > alp[c(1,3)] alp

    [1] "u" "bbb" "v" "d" "e" "f"

    2.2.3 Фактори.Щеодин векторний тип даних—фактори (factors) заслуговує спецiаль-

    ного розгляду. Елементи вектора факторiв можуть приймати значення лишез фiксованого набору значень. Данi такого типу часто виникають у статистич-них дослiдженнях, коли дослiджуванi об’єкти розбиваються на кiлька груп(категорiй) за деякою ознакою, наприклад— люди за нацiональнiстю, статтю,вiдношенням до вiйськової служби, юридичнi особи— за формою власностi,слова — за частинами мови (iменник, прикметник, дiєслово. . . ) тощо4. Рiзнiзначення, якi може приймати фактор, прийнято називати рiвнями (levels).

    Рiзнi рiвнi зручно позначати їх назвами, наприклад, тип валюти — USD,EUR, UAH, RUR. Скажiмо, набiр даних про тип валют, якими було зробленоплатежi протягом дня, може мати вигляд:

    (’USD’,’EUR’,’EUR’,’UAH’,’EUR’,’USD’,’UAH’,’RUR’).Якщо задати такий вектор конкатенацiєю:

    > z z

    4Вiдповiдно, змiннi, що можуть приймати лише скiнченну кiлькiсть значень, прийнятоназивати категорiйними (categorical variables).

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 30

    [1] "USD" "EUR" "EUR" "UAH" "EUR" "USD" "UAH" "RUR"

    то z буде мати тип character (символьнi рядочки). Щоб пояснити комп’ютеру,що йдеться про рiвнi деякого фактора, потрiбно зробити перетворення типу:

    > zf zf

    [1] USD EUR EUR UAH EUR USD UAH RUR

    Levels: EUR RUR UAH USD

    Тепер, хоча на екранi рiвнi фактора вiдображаються їх назвами, у внутрiш-ньому представленнi комп’ютера вони кодуються натуральними числами. Пе-релiк рiзних рiвнiв виведено у рядочку Levels в порядку зростання кодiв.Якщо вам потрiбен тiльки цей перелiк у виглядi символьного рядочка, можнаскористатись функцiєю levels()

    > zl zl

    [1] "EUR" "RUR" "UAH" "USD"

    Вiдповiднi коди можна побачити, використовуючи функцiю unclass:

    > unclass(zf)

    [1] 4 1 1 3 1 4 3 2

    attr(,"levels")

    [1] "EUR" "RUR" "UAH" "USD"

    Зрозумiло, що використання векторiв з факторiв замiсть символьних рядоч-кiв дозволяє економити мiсце у пам’ятi комп’ютера, якщо довжина векторавелика, а кiлькiсть рiвнiв — помiрна. Крiм того, задання перелiку рiвнiв доз-воляє перевiрити наявнiсть зайвих назв, що могли б утворитись внаслiдокякихось помилок. У статистицi є багато алгоритмiв обробки даних, що прац-юють саме з категорiйними даними (наприклад, у дисперсiйному аналiзi та уаналiзi таблиць спряженостi). З цим пов’язано видiлення факторiв у окремийтип.

    Вiдмiтимо, що у векторi факторiв можуть зустрiчатись не всi допустимiрiвнi, але для них будуть зарезервованi числовi коди. Iнформацiя про мож-ливiсть їх появи зберiгається у атрибутi levels:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 31

    > z2 z2

    [1] USD EUR

    Levels: EUR RUR UAH USD

    Якщо при видiленнi пiдмножини вектора факторiв потрiбно вилучити рiвнi,що не зустрiчаються у пiдмножинi, це можна зробити, задавши опцiю drop:

    > z2d z2d

    [1] USD EUR

    Levels: EUR USD

    У статистичних дослiдженнях часто розбиття дослiджуваних об’єктiв на ка-тегорiї проводится в залежностi вiд того, у який дiапазон потрапляє певначислова характеристика цих об’єктiв. Наприклад, домогосподарства можнароздiлити на категорiї з високим (high), середнiм (mid) та низьким (low) рiв-нем прибутку в залежностi вiд числового розмiру їх прибуткiв. Для того, щобробити це автоматично, застосовується функцiя cut:

    > u ul ul

    [1] high high high mid low low

    Levels: low mid high

    Тут ми створили вектор зi значеннями числової характеристики u i розби-ли дослiджуванi об’єкти на три категорiї в залежностi вiд значень u. Опцiяbreaks вказує межi iнтервалiв, що визначають цi категорiї: до першої по-трапляють об’єкти, для яких 𝑢 ∈ (−∞, 2.5], до другої — з 𝑢 ∈ (2.5, 3.5], дотретьої — 𝑢 ∈ (3.5,∞). Назви цих категорiй (рiвнiв факторiв) заданi у опцiїlabels.

    У цьому випадку (а також у багатьох iнших) для рiвнiв фактора можнавказати природний порядок: low

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 32

    > ulo ulo

    [1] high high high mid low low

    Levels: low < mid < high

    Деякi функцiї R аналiзують впорядкованi фактори спецiальним чином, не так,як невпорядкованi.

    2.2.4 Матрицi, масиви та фрейми даних.Матрицi в R обов’язково складаються з елементiв одного типу (наприклад,

    тiльки з чисел, або тiльки з логiчних значень). Є багато рiзних способiвстворити матрицю, наприклад, її можна скласти з окремих векторiв-рядочкiвфункцiєю rbind() або з векторiв-стовпчикiв функцiєю cbind():

    > x1 x2 u u

    [,1] [,2] [,3]

    x1 1 2 3

    x2 5 6 7

    > v v

    x1 x2

    [1,] 1 5

    [2,] 2 6

    [3,] 3 7

    (Звернiть увагу, що iмена векторiв перетворились на iмена вiдповiдних стовп-чикiв або рядочкiв).

    Правила iндексацiї зрозумiлi з цього прикладу— перший iндекс позначаєрядочок, другий — стовпчик, тобто u[2,3] це елемент на перетинi другогорядочка i третього стовпчика матрицi u. Використання iндексiв та iмен дужегнучке, як показують наступнi приклади:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 33

    > u[,1]

    x1 x2

    1 5

    > u[2,]

    [1] 5 6 7

    > v[,"x2"]

    [1] 5 6 7

    > v[1:2,"x2"]

    [1] 5 6

    “Вийнятий” з матрицi стовпчик перетворюється на вектор-рядочок. Якщо вихочете отримати як результат матрицю, що складається з одного стовпчика,скористайтесь опцiєю drop=F

    > v[,"x2",drop=F]

    x2

    [1,] 5

    [2,] 6

    [3,] 7

    Iнколи видiлення частини матрицi або вектора буває зручно оформлятине через iндексацiю, а використовуючи спецiальну функцiю

    subset(x, subset, select, drop = FALSE, ...).Параметри у цiй функцiїї x—об’єкт, з якого видiляється частина, subset

    — умова на рядочки, за якою вiдбувається видiлення, select — перелiкстовпчикiв, що видiляються.

    Iнший спосiб створення матрицi — функцiя matrix(), яка перетворюєвектор у матрицю. Першим параметром функцiї є вектор, який використо-вується для заповнення матрицi, параметри ncol i nrow задають кiлькiстьстовпчикiв i рядочкiв утвореної матрицi.

    Логiка роботи функцiї зрозумiла з наступних прикладiв:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 34

    > x matrix(x,nrow=2)

    [,1] [,2] [,3] [,4] [,5]

    [1,] 1 3 5 7 9

    [2,] 2 4 6 8 10

    > matrix(x,ncol=2)

    [,1] [,2]

    [1,] 1 6

    [2,] 2 7

    [3,] 3 8

    [4,] 4 9

    [5,] 5 10

    > matrix(x,ncol=2,nrow=2)

    [,1] [,2]

    [1,] 1 3

    [2,] 2 4

    > matrix(x,ncol=3)

    [,1] [,2] [,3]

    [1,] 1 5 9

    [2,] 2 6 10

    [3,] 3 7 1

    [4,] 4 8 2

    У останньому прикладi для того, щоб заповнити матрицю, прийшлось цик-лiчно повторити вектор x.

    Iмена рядочкiв та стовпчикiв матрицi можна задавати, використовуючифункцiю dimnames, як показано у наступному прикладi:

    > x X dimnames(X) X

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 35

    a b c d e

    first 1 3 5 7 9

    second 2 4 6 8 10

    (Тут функцiя list() створює список, що складається з двох елементiв, кож-ний з яких є вектором. letters у R — це вектор, складений з латинськихлiтер у алфавiтному порядку.)

    Кiлькiсть рядочкiв (або стовпчикiв) вже iснуючої матрицi X можна дiзна-тись, використовуючи nrow(X) (або ncol(X)).

    Для задання назв тiльки рядочкiв (стовпчикiв) можна використовуватифункцiї rownames() (colnames()) . Тi ж функцiї використовуються, якщопотрiбно дiзнатись iмена для iснуючої матрицi:

    > rownames(X)

    [1] "first" "second"

    Часто буває корисною функцiя diag(), яку можна застосовувати рiзнимиспособами. Якщо її параметром є вектор, вона породжує дiагональну матри-цю:

    > x diag(x)

    [,1] [,2] [,3]

    [1,] 1 0 0

    [2,] 0 2 0

    [3,] 0 0 3

    Якщо параметр — матриця, diag() видiляє її головну дiагональ у виглядiвектора:

    > X diag(X)

    [1] 1 5 9

    Нарештi, якщо diag зустрiчається лiворуч вiд символа привласнення, воназамiнює дiагональ свого матричного параметра:

  • РОЗДIЛ 2. МОВА СТАТИСТИЧНОГО ПРОГРАМУВАННЯ R 36

    > diag(X) X

    [,1] [,2] [,3]

    [1,] 0 4 7

    [2,] 2 0 8

    [3,] 3 6 0

    Арифметичнi та логiчнi дiї виконуються з матрицями поелементно. Для то-го, щоб виконати матричне множення, потрiбно застосувати операцiю %*%.Функцiя t() транспонує матрицю.

    Функцiя solve(A,b) розв’язує рiвняння 𝐴𝑥 = 𝑏. Якщо викликати її бездругого параметра, вона пiдраховує обернену матрицю: значенням solve(A)буде 𝐴−1. (Зрозумiло, що матриця 𝐴 має бути невиродженою, iнакшеsolve(A) повiдомить про помилку).

    Обернену матрицю можна також пiдрахувати, використовуючи функцiюginv(), яка не входить у ядро R, а мiститься у пакетi (бiблiотецi) MASS.Якщо ця бiблiотека не була пiдключена ранiше, її потрiбно пiдключити передвикористанням ginv().

    Точнiше, ginv() обчислює пс�