OTUS. Онлайн-образование corporate blog
R
Data visualization
July 16

Представьте себе ваши данные перед тем, как вы их соберете

Original author: Graeme Blair, Jasper Cooper, Alexander Coppock, Macartan Humphreys
Translation


Перевод подготовлен для студентов курса «Прикладная аналитика на R».




Нам, как исследователям данных (data scientist), часто дают набор данных и просят использовать его для получения информации. Мы используем R для обработки, визуализации, моделирования, подготовки таблиц и графиков, чтобы поделиться результатами или опубликовать их. Если мы смотрим на данные таким образом, то нам не важно откуда эти данные пришли. Размер выборки, набор признаков и их шкалы фиксированы. Тем не менее, процедуры, используемые для сбора или генерирования данных, чрезвычайно важны для будущего анализа, а также для качества информации, которую мы, в конечном итоге, можем получить. Процесс сбора данных влияет на то, как следует анализировать полученные данные. Для исследований, которые измеряют причинно-следственные связи, важно какие данные следует брать во внимание, а какие нет.


Поскольку эти процессы очень важны, мы хотели создать инструмент, который помог бы ученым и другим исследователям представить (эмулировать)свои данные до их сбора, чтобы любые изменения в этапе сбора данных могли быть сделаны до того, пока это не станет слишком поздно.


Если данные уже собраны, то инструмент позволяет вам представить себе ваши данные, прежде чем их анализировать. Когда мы принимаем решения об обработке данных и моделировании на основе результатов, которые мы получаем на каждой операции, или используем статистические модели, мы неосознанно уязвимы для таких предубеждений как ”сад расходящихся тропок” или p-hacking, которые могут привести нас к выбору процедуры анализа, которая даст лучший результат. Мы используем фактические данные, потому что у нас нет хорошей альтернативы: нет данных с той же структурой и признаками, которые мы собрали.


Эта статья знакомит с пакетом fabricatr (из набора пакетов DeclareDesign), роль которого заключается в моделировании структуры данных и признаков. Посмотрите обзор DeclareDesign на RViews, описывающий его философию. Пакет fabricatr помогает вам подумать о ваших данных, прежде чем вы начнете анализ или даже сбор. Какие данные? Как они структурированы? Какие измерения вы предпримете? Каковы их диапазоны и как они коррелируют? fabricatr может помочь вам смоделировать фиктивные данные перед сбором реальных данных и протестировать различные стратегии оценки, не беспокоясь об изменении ваших предположений.


Представьте себе вашу структуру данных


В самом простом варианте fabricatr создаст одноуровневую структуру данных с заданным количеством.


library(fabricatr)
fabricate(N = 100, temp_fahrenheit = rnorm(N, mean = 80, sd = 20))
## Warning: `is_lang()` is deprecated as of rlang 0.2.0.
## Please use `is_call()` instead.
## This warning is displayed once per session.
## Warning: `lang_name()` is deprecated as of rlang 0.2.0.
## Please use `call_name()` instead.
## This warning is displayed once per session.

ID TEMP_FAHRENHEIT
001 56.6
002 46.3
003 90.5
004 75.1
005 85.1
006 102.8

Социологические данные часто иерархичны. Например, в школах есть классы, в классах есть ученики. С помощью команды add_level fabricatr решит и эту задачу. По умолчанию новые уровни вложены в вышестоящие уровни.


library(fabricatr)
fabricate(
  # five schools
  school  = add_level(N = 5,
  n_classrooms = sample(10:15, N, replace = TRUE)),
  # 10 to 15 classrooms per school
  classroom  = add_level(N = n_classrooms),
  # 15 students per classroom
  student = add_level(N = 15)
  )
## Warning: `lang_modify()` is deprecated as of rlang 0.2.0.
## Please use `call_modify()` instead.
## This warning is displayed once per session.

SCHOOL N_CLASSROOMS CLASSROOM STUDENT
1 12 01 001
1 12 01 002
1 12 01 003
1 12 01 004
1 12 01 005
1 12 01 006

В реальном мире часто возникают беспорядочные, перекрывающиеся иерархии. Например, данные об учениках могут быть получены из средней школы, а также из старшей школы. В этом случае ученики будут в двух разных школах и эти школы будут не связаны друг с другом. Ниже показан пример как сделать такие «перекрестные» данные. Параметр rho определяет, насколько должны коррелировать primary_rank и second_rank.


dat <- 
fabricate(
  primary_schools = add_level(N = 5, primary_rank = 1:N),
  secondary_schools = add_level(N = 6, secondary_rank = 1:N, nest = FALSE),
  students = link_levels(N = 15, by = join(primary_rank, secondary_rank, rho = 0.9))
)
## `link_levels()` calls are faster if the `mvnfast` package is installed.
ggplot(dat, aes(primary_rank, secondary_rank)) + geom_point(position = position_jitter(width = 0.1, height = 0.1), alpha = 0.5) + theme_bw()


Аналогично, вы можете сгенерировать лонгитюдные данные через cross_levels:


fabricate(
 students = add_level(N = 2),
 years = add_level(N = 20, year = 1981:2000, nest = FALSE),
 student_year = cross_levels(by = join(students, years))
)

STUDENTS YEARS YEAR STUDENT_YEAR
1 01 1981 01
2 01 1981 02
1 02 1982 03
2 02 1982 04
1 03 1983 05
2 03 1983 06

Представьте себе ваши признаки


R имеет множество отличных инструментов для моделирования признаков. Однако, в некоторых случаях обычные типы переменных на удивление сложно смоделировать. В fabricatr есть небольшое количество функций с простым синтаксисом для создания признаков с часто используемыми типами. Здесь мы опишем два примера, остальное см. в статье.


Признаки с внутриклассовой корреляцией


С помощью инструментов, описанных выше, можно построить данные, которые имеют внутриблочные и межблочные вариации, например, вариации в учебных классах и вариации между учебными классами. Во многих случаях нужно более точно установить уровень внутриклассовой корреляции (intra-class correlation, ICC). Здесь помогут draw_normal_icc и draw_binary_icc.


dat <- 
  fabricate(
    N = 1000,
    clusters = sample(LETTERS, N, replace = TRUE),
    Y1 = draw_normal_icc(clusters = clusters, ICC = .2),
    Y2 = draw_binary_icc(clusters = clusters, ICC = .2)
  )
ICC::ICCbare(clusters, Y1, dat)
## [1] 0.09726701
ICC::ICCbare(clusters, Y2, dat)
## [1] 0.176036

Упорядоченные результаты


У нас также есть инструменты для дискретных случайных величин (включая упорядоченные результаты). Мы берем латентную переменную (например, test_ability) и преобразуем ее в упорядоченный признак (test_score).


dat <- 
fabricate(
  N = 100,
  test_ability = rnorm(N),
  test_score = draw_ordered(test_ability, breaks = c(-.5, 0, .5))
)
ggplot(dat, aes(test_ability, test_score)) + geom_point() + theme_bw()


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


Куда идти дальше


Эта статья представляет собой высокоуровневый обзор функциональных возможностей fabricatr. Для более глубокого ознакомления читайте статью Getting started with fabricatr.


Вы можете установить fabricatr через CRAN:


install.packages("fabricatr")
library(fabricatr)



Есть вопросы? Пишите в комментариях!


+15
1.9k 25
Leave a comment
Top of the day