R & Stats

Ivan Pozdniakov

10 02 2020

Введение

Кто

  • Поздняков Иван

  • Выпускник МГУ (2014) и Вышки (2016)

  • Работаю дата-аналитиком

  • Cтарший преподаватель Школы Лингвистики НИУ ВШЭ

  • Cognitive neuroscience, Digital Literary Studies

Что

  • Для тех, кто без опыта программирования: R с нуля

  • Для тех, кто умеет в MATLAB, python: R-way

  • Для тех, кто уже знает R: продвинутые фишки R

  • И все это в едином потоке безумия

Как

  • Много практики (в т.ч. на данных)

  • Задания разного уровня

  • Да, будет тяжело

  • Зато интересно!

Linear Warriors, Quadratic Wizards

Основы R

Работа с данными в R

Работа с данными в R

Работа с данными в R

  • Создание функций

  • Функции семейства apply()

  • Работа с пакетами

  • Основы tidyverse

Трансформация данных в tidyverse

Исследование данных: описательная статистика и визуализация данных

ggplot2

Введение в R

Работа с данными в R

Бинарные vs текстовые файлы данных

Текстовые:

  • .csv = comma separated values

  • .tsv = tab separated values

  • .txt, .dat и так далее

Бинарные:

  • Excel formats (.xls, .xlsx)

Бинарные vs текстовые файлы данных

Функция apply()

apply

data.table vs tidyverse

Трансформация данных в tidyverse

tidyverse

dplyr::slice(), dplyr::filter()

magrittr

dplyr::select()

dplyr::group_by(…) %>% summarise(…)

dplyr::group_by(…) %>% mutate(…)

Семейство функций *_join()

“Широкий” формат

Студент До курса по R После курса по R
Маша 70 63
Рома 80 74
Антонина 86 71

“Длинный” формат

Студент Время измерения Вес (кг)
Маша До курса по R 70
Рома До курса по R 80
Антонина До курса по R 86
Маша После курса по R 63
Рома После курса по R 74
Антонина После курса по R 71

tidyr::pivot_*

ggplot2 и другие пакеты для визуализации данных

Layered Grammar of Graphics

Layered Grammar of Graphics

ggplot2 basics

Слои (Layers):

  • Data

  • Mapping (aes)

  • Statistical transformation (stat)

  • Geometric object (geom)

  • Position adjustment (position)

ggplot2 basics

На одном графике можно соединять несколько слоев!

Кроме слоев, у графика есть:

  • scale

  • Coordinate system (coord)

  • Faceting (facet)

  • theme

  • Defaults:
    • Data
    • Mapping

Layered Grammar of Graphics

“…In brief, the grammar tells us that a statistical graphic is a mapping from data to aesthetic attributes (colour, shape, size) of geometric objects (points, lines, bars). The plot may also contain statistical transformations of the data and is drawn on a specific coordinate system. Facetting can be used to generate the same plot for different subsets of the dataset…” (Hadley Wickham, “ggplot2: Elegant Graphics for Data Analysis”, 2016)

ggplot2 example: Pie Chart

library(tidyverse)
got <- read_csv("data/character-deaths.csv")
ggplot(data = got)

ggplot(data = got) +
  geom_bar(aes(x = "", fill = as.factor(Gender)))

ggplot(data = got) +
  geom_bar(aes(x = "", fill = as.factor(Gender)))+
  coord_polar(theta = "y")

ggplot(data = got) +
  geom_bar(aes(x = "", fill = as.factor(Gender)))+
  coord_polar(theta = "y")+
  theme_void()

ggplot2 example: Education and IQ meta-analysis

  • Мета-анализ связи количества лет обучения и интеллект: “How Much Does Education Improve Intelligence? A Meta-Analysis” (Ritchie, Tucker-Drob, 2018)

  • Данные и скрипт находятся в открытом доступе: https://osf.io/r8a24/

ggplot2 extentions

plotly

  • Dynamic visualization

  • Using d3.js

plotly example: scatterplot

library(plotly)
data(diamonds)
diamonds <- diamonds[sample(nrow(diamonds), 1000),]
gg <- ggplot(data = diamonds)+
  geom_point(aes(x = carat, y = price, colour = price), alpha = 0.1)
ggplotly(gg)
plot_ly(diamonds, x = ~carat, y = ~price, color = ~carat, size = ~carat)

echarts4r

Other html-widgets

http://gallery.htmlwidgets.org/

  • leaflet
  • listviewer
  • wordcloud2
  • networkD3

RMarkdown

Статистика Вывода

Нормальное распределение

Статистики, параметры, оценки

Функции распределений в R

Центральная предельная теорема

Центральная предельная теорема

Строим доверительный интервал

Строим доверительный интервал

http://rpsychologist.com/d3/CI/

Ошибки первого и второго рода

Принятое решение  Реальность \(H_0\) верна \(H_1\) верна
Не отклоняем \(H_0\) Верный пропуск Ошибка 2 рода (type II error)
Отклоняем \(H_0\) Ошибка 1 рода (type I error) Верное попадание

Ошибки первого и второго рода

t-тест

  • Формула t-статистики:

\[t = \frac{\overline{x} - \mu} {s_x / \sqrt{N}} \]

t-distribution

t_normal_pdf_gg <- tibble(x = seq(-3, 3, .01),
       t_5 = dt(x, df = 3),
       t_15 = dt(x, df = 10),
       t_100 = dt(x, df = 100),
       normal = dnorm(x)) %>%
  pivot_longer(cols = -x, values_to = 'pdf', names_to = 'distribution') %>%
  ggplot(aes(x = x, y = pdf, colour = distribution))+
  geom_line()+
  theme_light()

t-distribution

t_normal_pdf_gg

Dependent vs. independent t-test

t-тест Зависимый (парный) Независимый
Эксперимент Within-subject Between-subject

Зависимый t-тест

\[t = \frac{\overline{x} - \mu} {s_x / \sqrt{N}} = \frac{\overline{d} - (\mu_1 - \mu_2)} {s_d / \sqrt{N}} = \frac{\overline{d} - 0} {s_d / \sqrt{N}} = \frac{\overline{d}} {s_d / \sqrt{N}}\]

  • То же самое, что и одновыборочный t-тест, только для разниц!

Независимый t-тест

объединенное стандартное отклонение (pooled standard deviation):

\[s^2_{pool} = \frac {(n_1-1)s^2_1 + (n_2-1)s^2_2} {(n_1 - 1) + (n_2 -1)}\]

Стандартная ошибка разницы средних:

\[se_{m_1 - m_2} = \sqrt {(s^2_{pool}) (\frac {1} {n_1} + \frac {1}{n_2} )}\]

t-статистика:

\[t = \frac {(m_1 - m_2) - (\mu_1 - \mu_2)} {se_{m_1 - m_2}} = \frac {(m_1 - m_2) - 0} {se_{m_1 - m_2}} = \frac {m_1 - m_2} {se_{m_1 - m_2}}\]

Корреляция

http://guessthecorrelation.com

Ковариация

  • Ковариация:

\[\sigma_{xy} = cov(x, y) = \frac{\sum_{i = 1}^n(x_i - \overline{x})(y_i - \overline{y})}{n}\]

  • Оценка ковариации по выборке:

\[\hat{\sigma}_{xy} = \frac{\sum_{i = 1}^n(x_i - \overline{x})(y_i - \overline{y})}{n-1}\]

  • Ковариация переменной самой с собой — дисперсия

Корреляция

  • Корреляция — это ковариация, нормированная на стандартное отклонение обоих переменных.

  • Коэффициент корреляции Пирсона:

\[\rho_{xy} = \frac{\sigma_{xy}}{\sigma_x \sigma_y} = \frac{\sum_{i = 1}^n(x_i - \overline{x})(y_i - \overline{y})}{\sqrt{\sum_{i = 1}^n(x_i - \overline{x})^2}\sqrt{\sum_{i = 1}^n(y_i - \overline{y})^2}} = \frac{1}{n}\sum_{i = 1}^n z_{x,i} z_{y, i}\]

  • Оценка коэффициента корреляции Пирсона по выборке: \[r_{xy} = \frac{\hat{\sigma}_{xy}}{\hat{\sigma}_x \hat{\sigma}_y} = \frac{\sum_{i = 1}^n(x_i - \overline{x})(y_i - \overline{y})}{\sqrt{\sum_{i = 1}^n(x_i - \overline{x})^2}\sqrt{\sum_{i = 1}^n(y_i - \overline{y})^2}} = \frac{1}{n - 1}\sum_{i = 1}^n z_{x,i} z_{y, i}\]