Візуалізація результатів в R: перші кроки

В одному з попередніх постів ми вже писали про центральному поняття в статистиці — p-рівень значущості. І поки в науковому середовищі не вщухають суперечки про інтерпретації p-value, значна частина досліджень проводиться саме з використанням p-value для визначення значущості отриманих у дослідженні відмінностей. Сьогодні ж ми поговоримо про самому творчому етапі обробки даних — як же значущі відмінності візуалізувати.

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

Порівняння середніх значень R
Давайте зупинимося на одному з найбільш популярних типів графіків — порівняння середніх значень — і з'ясуємо, як їх можна будувати в R буквально в кілька рядків коду. Скористаємося вбудованими в R даними mtcars, що надають інформацію про різних технічних характеристиках 32 автомобілів. Порівняємо середні значення витрати палива у машин з автоматичною і ручною коробкою передач.

mtcars$am <- factor(mtcars$am, labels = c("Авто", "Manual")) # зробимо тип коробки передач фактором
t.test(mpg ~ am, mtcars)

Результати t — тесту:

t = -3.7671, df = 18.332, p-value = 0.001374
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-11.280194 -3.209684
sample estimates:
mean in group 0 mean in group 1
17.14737 24.39231

Статистично значущі відмінності виявлені, залишилося візуалізувати результат. Почнемо з графіка-чемпіона в категорії «як не потрібно відображати порівняння середніх значень».


Що, власне кажучи, тут не так?
Навіть якщо змиритися з тим, що середні відображені стовпчиками, основний недолік такого роду графіка — відсутність на ньому заходів мінливості наших даних. Дивлячись на такий графік, абсолютно не ясно, чи були отримані значущі відмінності. І єдиний висновок, який ми можемо зробити: правий стовпчик вище лівого!

Давайте покращимо вихідний варіант наступним чином: відобразимо середні значення точками і додамо довірчі інтервали:

library(ggplot2)
ggplot(mtcars, aes(am, mpg))+
stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.1, size = 1)+
stat_summary(fun.y = mean, geom = "point", size = 6, shape = 22, fill = "white")+
theme_bw()+
xlab("Transmission type")+
ylab("Miles / (US) gallon")



Так набагато краще! По-перше, непересічні довірчі інтервали підтверджують наш висновок про статистично значущих відмінностей. По-друге, для уважного спостерігача цей графік також надає додаткову інформацію про деталі наших даних: легко помітити, що довірчий інтервал для середнього значення витрати палива в групі з ручною коробкою передач значно ширше. У нашому випадку це пояснюється різним значенням стандартного відхилення в групах (цю інформацію в принципі неможливо отримати, дивлячись на «стовпчастий» графік).

Дисперсійний аналіз і порівняння декількох груп
Розглянемо тепер більш цікавий варіант із застосуванням дисперсійного аналізу і порівнянням кількох груп. Скористаємося ще одними вбудованими в R даними — ToothGrowth. Дані дозволяють дослідити ріст зубів у морських свинок в залежності від дозування вітаміну C і типу споживаних продуктів. Застосовується дисперсійний аналіз:

fit <- aov(len ~ dose * supp, ToothGrowth)

Результати аналізу:

Df Sum Sq Mean Sq F value Pr(>F)
dose 1 2224.3 2224.3 133.415 < 2e-16 ***
supp 1 205.3 205.3 12.317 0.000894 ***
dose:supp 1 88.9 88.9 5.333 0.024631 *
Residuals 56 933.6 16.7

Ми бачимо, що і вплив кожного фактора окремо, і їх взаємодія виявилися значущими. Це точно той випадок, коли без візуалізації зробити якісь висновки досить важко.

ggplot(ToothGrowth, aes(factor(dose), len, col = supp))+
stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.1, size = 1, position = position_dodge(0.2))+
stat_summary(fun.y = mean, geom = "point", size = 3, shape = 22, fill = "white", position = position_dodge(0.2))+
theme_bw()+
xlab("Dose in milligrams")+
ylab("Tooth lenght")+
scale_color_discrete(name = "Supplement type", labels = c("Orange juice", "Ascorbic acid"))


Тепер легко помітити збільшення середнього значення довжини зубів при збільшенні дозування (значимий фактор дозування). При цьому вплив типу продуктів сходить нанівець із збільшенням дозування (значимий фактор типу продукту і взаємодія факторів).

Таким чином, нанесення довірчих інтервалів на графік не тільки дозволяє нам оцінити, наскільки отримані статистично значимі відмінності, але також дає можливість скласти уявлення про характер мінливості усередині порівнюваних груп. Нижче представлена невелика пам'ятка про співвідношенні дистанції між довірчими інтервалами і приблизним значенням p-value.

Чому все-таки R?
На сьогоднішній день існує безліч інструментів для аналізу даних і візуалізації результатів, деякі з них дозволяють застосовувати досить широкий спектр статистичних методів, не маючи ніякого досвіду програмування (наприклад, SPSS). Також досить поширений для аналізу даних мовою програмування Python.

Якщо ви починаєте освоювати аналіз даних:
  1. R дуже простий і інтуїтивно зрозумілий мова програмування. Вивчивши ази роботи в R, ви значно спростите і прискорите рішення ваших завдань.
  2. Робота в R дає цінний досвід і допомагає при вивченні більш складних мов програмування.
  3. Зрозуміло візуалізація! Ми розглянули у цій статті лише базовий варіант графіків, але навіть він виглядає в рази симпатичніше, ніж візуалізація в програмах для аналізу даних з графічним інтерфейсом.
Якщо ви вже маєте досвід аналізу даних:
  1. R тисячі пакетів і бібліотек, надають можливість застосовувати, мабуть, абсолютно будь-які статистичні методи. Реалізувати регресійний аналіз з випадковими ефектами в R дозволить спеціальна бібліотека lme4. З допомогою мови Python, наприклад, це зробити значно складніше!
  2. R безліч бібліотек, які написані безпосередньо дослідниками і вченими для вирішення досить вузькоспеціалізованих завдань з різних наукових областей. Наприклад, bioconductor — надає інструменти для аналізу даних в біоінформатики. Бібліотека grt допоможе обробляти експериментальні дані в області обчислювальних моделей в когнітивної науці! Спеціальні бібліотеки допоможуть обробити результати EEG, FMRI або дослідження, що фіксує рух очей людини за допомогою айтрекера.
  3. І, на завершення, R дозволяє швидко вирішувати широкий спектр задач в інтерактивному режимі.
Онлайн-курс по R російською мовою: три тижні аналізу даних
Не так давно на платформі Stepic завершився онлайн-курс з введенню в статистику, присвячений базовими методами аналізу даних. У нашому новому тритижневому онлайн-курсі від Інституту біоінформатики слухачі познайомляться з основами програмування на мові R.

На першому тижні ми навчимося маніпулювати з даними і познайомимося з базовим синтаксисом мови. Друга і третя тижні курсу присвячені застосуванню основних статистичних тестів і візуалізації результатів. Курс російською мовою і абсолютно безкоштовний для всіх бажаючих! Записатися: Аналіз даних в R

Програма курсу
Тиждень 1
  1. Змінні
  2. Робота з data frame
  3. Описові статистики
  4. Описові статистики. Графіки
  5. Збереження результатів
Тиждень 2
  1. Аналіз номінативної даних
  2. Порівняння двох груп
  3. Застосування дисперсійного аналізу
  4. Створення власних функцій
Тиждень 3
  1. Кореляція і проста лінійна регресія
  2. Множинна лінійна регресія
  3. Діагностика моделі
  4. Біноміальної регресія
  5. Експорт результатів аналізу з R
До зустрічі на курсі!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.