Загрузка данных

Описание данных

Сегодня мы поработаем с файлом, в котором содержатся результаты исследования (Cowles, 1994), в котором респонденты фиксировали свой пол и участие/не участие в волонтёрской деятельности, а также заполняли анкету, по которой определялся уровень экстраверсии-интроверсии и уровень нейротизма (тревожности). Подробнее об измерениях и анкете можно почитать здесь.

Переменные в файле:

dat <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/carData/Cowles.csv")

Посмотрим на структуру данных:

str(dat)
## 'data.frame':    1421 obs. of  5 variables:
##  $ X           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ neuroticism : int  16 8 5 8 9 6 8 12 15 18 ...
##  $ extraversion: int  13 14 16 20 19 15 10 11 16 7 ...
##  $ sex         : Factor w/ 2 levels "female","male": 1 2 2 1 2 2 1 2 2 2 ...
##  $ volunteer   : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...

Установка и загрузка библиотеки

Библиотека ggplot2 позволяет строить красивые графики. Установим её:

install.packages("ggplot2")

Загрузим библиотеку:

library(ggplot2)

Теперь перейдем к ggplot2. Можно считать, что у библиотеки ggplot2 есть своя философия, поняв которую, строить графики гораздо легче.

Во-первых, графики ggplot многослойные, то есть строятся они поэтапно, по слоям. Сначала указывается датафрейм, с которой мы работаем, и интересующие нас показатели (первый слой), затем указывается тип графика (второй слой), затем настройки для подписей, легенды и прочее (остальные слои). Все слои добавляются через +.

Во-вторых, для любого графика указывается функция aes(), сокращенно от aesthetics, задающая оформление графика, которое непосредственно связано с переменными в датафрейме. О чём речь? Проще понять на примерах.

Пример 1. Строим диаграмму рассеяния для роста и веса человека, хотим, чтобы все точки на диаграмме рассеяния были зелёными.

Пример 2. Строим диаграмму рассеяния для роста и веса человека, хотим, чтобы точки на диаграмме рассеяния, соответствующие женщинам, были красными, а мужчинам — синими.

В первом примере оформление графика никак не связано со значениями переменных в базе данных, все точки закрашиваем одним цветом. Во втором примере цвет точек зависит от значения переменной пол, то есть оформление графика связано с переменными в базе данных. Как увидим позже, в случаях, аналогичным первому, цвет точек будет определяться за пределами aes(), второму – внутри aes().

Гистограмма

Для чего нужны гистограммы, мы уже обсуждали. Гистограммы строятся для визуализации формы распределения количественного показателя. Построим гистограмму для индекса экстраверсии (extraversion). Укажем датафрейм dat, сам показатель, значения которого идут по оси x, запишем внутри aes(). А потом допишем слой geom_histogram(), который отвечает за тип графика.

ggplot(data = dat, aes(x = extraversion)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Гистограмма получилась не очень красивой, и не только из-за тёмного цвета. Она получилась какой-то «дырявой». Почему? По умолчанию ggplot всегда строит гистограмму с 30 столбцами, поэтому в нашем случае столбцы получились слишком узкими. Собственно, поэтому R нам и выдал предупреждение Pick better value with binwidth. Поменяем шаг у гистограммы вручную, добавив binwidth внутри geom_histogram():

# выставим шаг равен 4 
ggplot(data = dat, aes(x = extraversion)) + geom_histogram(binwidth = 4)

Теперь сделаем гистограмму более красивой — добавим цвет. При изменении цвета «заполненных» (состоящих не из отдельных линий и точек) графиков нужно помнить, что есть два параметра: color и fill. Параметр color отвечает за цвет контура графика, а за не цвет их заливки. А уже fill – как раз за заливку.

# гистограмма цвета лайма,
# столбцы которой очерчены черной линией
ggplot(data = dat, aes(x = extraversion)) + 
  geom_histogram(binwidth = 4, fill = "limegreen", color = "black")

А теперь попробуем построить гистограммы для extraversion по группам, отдельно для респондентов мужского пола, отдельно — для женского. С помощью ggplot2 это сделать гораздо проще, чем с помощью обычной функции hist(): не нужно сохранять строки в отдельные датафреймы и после строить гистограммы, можно просто добавить ещё один слой для группировки. Слой называется facet_wrap («фасетки»), так как графики для каждой группы отображаются в отдельных окнах-фасетках. Переменная группировки, в нашем случае sex, указывается после «тильды» (~).

ggplot(data = dat, aes(x = extraversion)) + 
  geom_histogram(binwidth = 4, fill = "limegreen", color = "black") + 
  facet_wrap(~sex)

График плотности распределения

Вместо гистограммы можно построить график плотности распределения (density plot). Его можно рассматривать как сглаженный аналог гистограммы. Логика построения графика абсолютно та же, только опция binwidth нам уже не нужна (столбцов нет), а вместо histogram будет density.

ggplot(data = dat, aes(x = extraversion)) + 
  geom_density(fill = "lightblue", color = "black") + 
  facet_wrap(~sex)