Processing math: 100%
  • 1 План лекции и основные вопросы
  • 2 Метаданные документа в формате YAML
  • 3 Создание шаблона для оформления текста (параметры страницы, шрифты, заголовки и т.д.)
  • 4 Форматирование текста
    • 4.1 Заголовки
    • 4.2 Выделение текста
    • 4.3 Гиперссылки и изображения
    • 4.4 Формулы
    • 4.5 Списки (нумерованные и обычные)
  • 5 Анализ и представление результатов исследования
    • 5.1 Загрузка библиотек и импорт базы данных
    • 5.2 Описание простых таблиц без их представления в тексте
    • 5.3 Создание таблиц по нескольким переменным: возможности библиотек gtsummary и flextable
    • 5.4 Пример использования многомерных методов: построение модели логистической регрессии
    • 5.5 «A picture is worth a thousand words». Как сделать график к результатам исследования?
  • 6 Список литературы и цитирование источников в тексте
  • 7 Заключение
  • 8 Дополнительные материалы

1 План лекции и основные вопросы

Мы продолжаем изучать язык R и язык разметки текста R Markdown для того, чтобы научиться их использовать для анализа и представления результатов научных исследований. В рамках предыдущей темы мы научились создавать документ в R Markdown и наполнять его содержимым на основе готовых шаблонов и примеров кода, разобранных на предыдущих занятиях.

Следующий этап – научиться использовать синтаксис R Markdown для подготовки рукописи научной статьи. В рамках данной темы мы научимся создавать такой документ R Markdown, при “сшивке” которого в формате Word будут соблюдены требования научного журнала к формату текста, шрифтам, заголовкам к таблицам и графикам, а также расширим наши познания в области обработки и анализа данных на языке R.

Решение данной задачи предполагает рассмотрение следующих вопросов:

  • Как настроить стили и структуру документа, чтобы они соответствовали требованиям к научным статьям, в том числе метаданных и основных разделов?
  • Какой код нужно использовать для обработки и анализа данных, чтобы “на выходе” получались таблицы и графики, выполненные по международным стандартам, предъявляемым к научным исследованиям, и оформленные определенным образом?
  • Как в R Markdown сделать красивую библиографию и упростить цитирование источников в тексте?

Чтобы ответить на эти вопросы, рассмотрим основные части документа R Markdown, помогающие нам выполнить нашу задачу. Еще раз уточним, что возможности R Markdown гораздо шире, и, если быть до конца честными, добавим, что подготовка документов в html или pdf – дело более простое и приятное, чем его использование для форматирования документа в формате Word. Большинство существующих учебных материалов и готовых кейсов как правило рассматривают именно эти форматы. Однако, учитывая, что большинство российских журналов, в том числе журнал, на требования которого мы будем ориентироваться, по-прежнему принимают рукописи в формате Word, мы будем учиться использовать R Markdown именно для этого.

Типичная структура документа, выполненного в R Markdown, включает следующие блоки:

  • метаданные документа в формате YAML
  • форматируемый текст (formatted text)
  • блоки с кодом на R или другом языке программирования (code chunks)

2 Метаданные документа в формате YAML

Когда пользователь создает документ R Markdown (напомним, что для этого нужно в программе R Studio выбрать File - New File - R Markdown, а затем указать формат документа, его название и автора), то первое, что он видит в окне после того, как откроется новый файл .Rmd, – это основные сведения о документе (то, что находится между строками, обозначенными тремя пунктирными линиями ---. Мнимальный набор элементов блока YAML включает:

  • название документа (title)
  • имя автора (author)
  • дату создания документа (date)
  • формат документа (например, word, pdf, html)

YAML — это язык для хранения информации в формате, понятном человеку (human-readable). Эта аббревиатура сначала расшифровывалась как «Yet another markup language» - «Ещё один язык разметки». Однако, позже ее изменили на «YAML Ain’t Markup Language» -— «YAML не язык разметки», чтобы отличать его от настоящих языков разметки, таких, например, как xml или html.

Блок YAML предназначен для хранения метаданных – дополнительной информации о документе, которая может автоматически обрабатываться поисковыми системами. В сфере научной информации помимо названия и сведений об авторах метаданные обычно включают также аффилиацию авторов – их принадлежность к какой-либо научной или образовательной организации, электронный адрес, аннотацию статьи и ключевые слова. Расширенный вариант метаданных может также содержать информацию о количестве слов в документе, наличии графического материала, даты принятия статьи к печати и т. д.

При подготовке итогового проекта по написанию научной статьи с использованием информационных технологий для данного курса мы будем руководствоваться требованиями научного журнала Алтайского государственного университета «Society and Security Insights».

В руководстве авторов журнала приводится пример метаданных, они достаточно традиционные:

Чтобы создать такие метаданные в формате ворд, нужно изменить блок YAML в R Markdown, добавив туда недостающие элементы:

title: "Название статьи"
author: 
  - И. И. Иванов^1^, П. П. Петров^2^
date: ^1^Алтайский государственный университет, Барнаул, Россия, ivanov@mail.ru, ^2^Московский государственный университет, Москва, Россия, petrov@mail.ru
abstract: |
  Аннотация статьи.
 
   *Ключевые слова*: ключевое слово1, ключевое слово2.

В результате после “сшивки” получится примерно следующее:

Это почти то, что нужно, однако, цвет заголовков, шрифты, выравнивание текста, абзацы и межстрочные интервалы не совсем соответствуют требованиям журнала. Что делать? Как настроить R Markdown и Word, чтобы текст соответствовал нашим правилам?

3 Создание шаблона для оформления текста (параметры страницы, шрифты, заголовки и т.д.)

Для форматов html и pdf в R Markdown создано огромное количество готовых шаблонов, позволяющих создавать научные статьи, оформленные по требованиям журналов и международных конференций, включая такие как:

  • JSS articles (Journal of Statistical Software)
  • R Journal articles
  • CTeX documents
  • ACM articles (Association of Computing Machinery)
  • ACS articles (American Chemical Society)
  • AMS articles (American Meteorological Society)
  • PeerJ articles
  • Elsevier journal submissions
  • AEA journal submissions (American Economic Association)
  • IEEE Transaction journal submissions
  • Statistics in Medicine journal submissions
  • Royal Society Open Science journal submissions
  • Bulletin de l’AMQ journal submissions
  • MDPI journal submissions
  • Springer journal submissions

Большой интерес представляет также библиотека papaja, позволяющая с помощью R Markdown создать манускрипты статей, соответствующий требованиям Американской психологической ассоциации American Psychological Association - APA. Стиль APA (сейчас действует уже 7-я версия) является одним из наиболее используемых в социальных и поведенческих науках, в области коммуникации, бизнеса и образования, а также в других областях науки и практики. Можно с уверенностью сказать, что овладение навыками оформления статьей в соответствии со стилем APA является необходимым для всех исследователей, стремящихся к высоким стандартам научной деятельности.

Для стиля APA типично использование внутритекстовых ссылок на авторов в формате (Автор, год издания) и особым образом оформленного списка используемых источников.

На сайте проекта papaja`на GitHub можно найти примеры как использовать данную библиотеку не только для оформления метаданных, но для представления результатов статистического анализа, оформления ссылок на литературные источники, графики и иллюстрации, создания перекрестных ссылок.

Для работы в Microsoft Word специалистами R Studio и авторами R Markdown сделано гораздо меньше, несмотря на то, что многие издательства да и образовательные организации по-прежнему предпочитают принимать рукописи статей, диссертаций, монографий именно в формате doc/docx. Судя по сообщениям на тематических форумах, совмещение Word и R Markdown является актуальным для многих исследователей. Между тем, несмотря на существенный разрыв в возможностях форматирования, для работы с Word (а также с Power Point) также созданы очень продвинутые инструменты, такие например, как Officer, Officedown, Flextables (автор - David Gohel и его коллеги из французской компании ArtData, специализирующейся на разработке технологических решений, связанных с использованием языка R – см. сайт.

Для создания шаблона в Word воспользуемся возможностями библиотеки officedown и технологией, преложенной Yihui Xie. Ее суть заключается в следующем:

  • Шаг 1. Создать новый документ в R Markdown и на его основе сформировать (knit) документ word не внося никаких изменений (то есть создать и сразу “сшить”).
  • Шаг 2. Использовать созданный документ в качестве шаблона для настройки параметров страницы и стилей для текста, заголовков, подписей к таблицам и рисункам и других элементов, таких как аннотация и сведения об авторах.

Важно: Если работа со стилями в программе MS Word для вас является новой, рекомендуем обратиться к дополнительным информационным материалам, и прочитать соответствующие источники, например, здесь или здесь.

  • Шаг 3. Сохранить документ со всеми настройками в той папке, которую вы планируете использовать для написания статьи в R Markdown. Обычно этот файл называют “template.docx”.

  • Шаг 4. В Файлe .Rmd в качестве формата вывода (output) указать не только формат word_document, но и файл, используемый в качестве шаблона:

output: 
  officedown::rdocx_document:
    reference_docx: template.docx

Вот короткое видео, в котором показано, как создать такой шаблон, изменить стили и использовать шаблон в R Markdown:

Для целей нашего курса был создан готовый шаблон по требованиям журнала Society & Security Insights. Он находится в приложении к практическому занятию, его нужно скачать и сохранить в папку, где Вы будете готовить свою итоговую статью.

4 Форматирование текста

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

Большим преимуществом R Markdown и причиной его популярности является простота включения данных элементов и легкость синтаксиса. Кроме того, для удобства запоминания создано огромное количество обучающих материалов и так называемых cheat sheets – инфографики, где в сжатой форме представлены основы работы в R Markdown и наиболее часто встречающиеся ситуации. Эти информационные материалы можно найти в свободном доступе в Интернете или через меню программы R Studio в разделе help:

Вот как выглядит один из таких cheat sheet:

Разберем наиболее важные элементы синтаксиса, которые могут нам пригодиться для написания научной статьи:

4.1 Заголовки

Для создания заголовков используется знак решетки (хэштэг) – #:

Вот такой синтаксис в маркдауне:

# Заголовок первого уровня

## Заголовок второго уровня

### Заголовок третьего уровня

при конвертации будет отображен как:

Когда документ будет переформатирован в Word, для оформления будут использованы стили для различных заголовков.

4.2 Выделение текста

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

Для создания курсива слово нужно обрамить с помощью звездочек или знаков нижнего подчеркивания: *выделяемое слово* и _выделяемое слово_отобразятся как выделяемое слово.

Для полужирного шрифта понадобятся двойные звездочки: **слово, которое нужно выделить**будет выглядеть как слово, которое нужно выделить.

Затронем еще один важный момент, связанный с форматированием текста – различение знаков тире и дефиса. Дефис – это орфографический знак в виде короткой черточки, который отличается от тире начертанием и тем, что он употребляется для соединения сложных слов, а также ставится между частями слов. Тире – это пунктуационный разделительный знак, который употребляется между членами предложения и простыми предложениями в составе сложных.

С дефисом обычно проблем не бывает, а вот с тире, особенно в научных публикациях, возникают сложности.

При форматировании текста нужно помнить, что тире бывает средним (его еще называют коротким) и длинным.

Короткое тире еще называют «эн-дэш», «n-dash», потому что его длина равна ширине буквы N. Короткое тире ставится между числами, например, 5–10.

Длинное тире еще называют «эм-дэш», «m-dash», потому что его длина равна ширине буквы M.

Чтобы в маркдауне поставить короткое тире нужно использовать двойной дефис --, а для длинного тире - тройной ---. Вот и все, и никаких сложностей.

4.3 Гиперссылки и изображения

Гиперссылки создаются с помощью сочетания квадратных и круглых скобок: [текст](адрес), например, [RStudio](https://www.rstudio.com) будет выглядеть как RStudio.

Синтаксис для картинок и изображений очень похож: нужно просто добавить восклицательный знак, например, ![название рисунка](путь/к/файлу). В скобках можно указывать как адрес изображения к Интернете, так и путь к файлу, сохраненному в компьютере.

Пример: ![Рисунок 1. Милый котик.](https://ichef.bbci.co.uk/news/640/cpsprodpb/14A82/production/_116301648_gettyimages-1071204136.jpg)

Рисунок 1. Милый котик.

Затекстовые ссылки оформляются внутри квадратных скобок после знака каретки ^[], например, вот так: 1. Такие ссылки нумеруются автоматически, используется сквозная нумерация.

4.4 Формулы

Формулы в маркдауне могут быть встроены непосредственно в текст с помощью так называемого построчного кода (inline code), либо с помощью TeX-нотации.

Так, знаки “тильда” (~) позволяют создать подстрочные знаки (например, код H~3~PO~4~ позволит записать формулу H3PO4), а знаки каретки (^) используются для обозначения надстрочных элементов (например, набрав Cu^2+^ получим Cu2+, а x^2^ x2).

Возможно, нам понадобятся греческие буквы, их можно получить с помощью формул TeX: $\alpha$, $\beta$, $\sigma$, $\mu$α, β, σ, μ.

Чтобы пометить какой-то код как код и не выполнять его, нужно обернуть его в одинарные кавычки: code.

Пример более сложных формул, созданных с помощью нотации TeX:

$$
E = mc^2
$$

E=mc2

$$
\sum_{i = 1}^{n}{(\bar{x} - x_i)^2}
$$

ni=1(ˉxxi)2

$$
Y \sim X\beta_0 + X\beta_1 + \epsilon
$$

YXβ0+Xβ1+ϵ Wiki-учебник по математическим формулам в TeX/LaTeX

4.5 Списки (нумерованные и обычные)

Как в теоретической, так и практической части научной статьи авторы часто структурируют информацию и представляют ее в виде списков, нумерованных или маркированных.

Нумерованные списки представляют собой набор фрагментов текста, объединенных общим смыслом, с их порядковыми номерами. В качестве нумерующих элементов обычно выступают арабские цифры (1, 2, 3, …).

Для создания нумерованных списков в R Markdown нужно просто использовать цифры в начале строки:

1. Первый элемент нумерованного списка
2. Второй элемент нумерованного списка
3. Третий элемент нумерованного списка

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

В маркдауне такие списки создаются с помощью дефисов (-) и табуляции:

- первый элемент маркированного списка
- второй элемент маркированного списка
  - элемент более низкого уровня
  - еще один элемент
- третий элемент маркированного списка

Вот как это будет выглядеть в Word:

5 Анализ и представление результатов исследования

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

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

Приведем пример анализа данных социологических опросов населения приграничных регионов России по вопросам, касающимся возвратной миграции.

5.1 Загрузка библиотек и импорт базы данных

Прежде чем что-то посчитать и описывать, мы должны получить доступ к данным.

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

Во-вторых мы должны установить (если раньше не устанавливали) и загрузить библиотеки для анализа. В рамках регодняшнего занятия нам понадобятся следующие библиотеки:

  • haven – помним, что она нужна для импорта данных из формата программы SPSS
  • sjmisc – хороша для работы с простыми таблицами и переменными класса labelled (у которых есть коды и метки)
  • flextable – чудо-библиотека от Дэвида Гоэля - француза и сотрудника ArData, созданная специально для работы с таблицами и улучшения их отображения в различных форматах, в частности в Word и Power Point
  • dplyr – содержит набор простых функций для манипулирования данными, позволяющих сосредоточиться на решении задачи, а не на второстепенных вопросах, связанных с трансформацией данных
  • gtsummary – библиотека для создания эффектных таблиц с описательными статистиками для научных публикаций
  • ggplot2 – одна из ведущих библиотек для создания графиков и диаграмм

В некоторых примерах, представленных ниже, используются другие библиотеки. Для их воспроизведения указанные в начале каждого чанка библиотеки также необходимо установить на компьютер перед запуском.

library(haven)
library(sjmisc)
library(dplyr)
library(flextable)
library(gtsummary)
library(ggplot2)

После того, как мы загрузили библиотеки, импортируем базу данных:

df<-read_sav("База_НШ_ВМ_2020_от 21.12.2020.sav", user_na = TRUE)

Теперь мы можем параллельно писать код на R, обрабатывать наши данные с помощью различных методов и процедур, и описывать результаты, не думая о том, как они будут выглядеть в текстовом редакторе, поскольку все настройки уже сохранены в шаблоне - template.docx.

5.2 Описание простых таблиц без их представления в тексте

Например, мы описываем нашу выборочную совокупность и хотим проанализировать распределение респондентов по регионам исследования.

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

df<-as_factor(df)

Если нам нужны простые частоты, не проценты, одним из простых решений будет функция table (), с которой мы уже встречались на предыдущих занятиях:

table(df$V004)
## 
##        Алтайский край     Псковская область   Саратовская область 
##                   408                   205                   471 
## Новосибирская область       Приморский край    Забайкальский край 
##                   483                   454                   431 
##                Другое 
##                    86

Чтобы выполнить этот фрагмент кода в маркдауне, нужно нажать на зеленый треугольник справа.

Вот этот треугольник:

Поскольку в настройках мы укажем, что не желаем выводить сам код knitr::opts_chunk$set(echo = FALSE) мы его будем видеть только в маркдауне, а в Word будет уже сохраняться готовый текст, графики и таблицы.

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

Например, мы хотим узнать пропорции по полу во всех регионах исследования.

flat_table(df, Q38, margin = "cell")
## x Женщина Мужчина
##                  
##     64.63   35.37

Мы видим, что в наших исследованиях приняло участие гораздо больше женщин (65%), чем мужчин (35%).

Если нужна двумерная таблица, функция flat_table также подойдет (так же как и функции prop.table, sjt.xtab, с которыми мы встречались на предыдщих занятиях, здесь дело скорее вкуса, чем функциональности):

Например, посмотрим, распределение по полу в зависимости от региона:

flat_table(df, V004, Q38, margin = "row")# df - наша база данных, V004 Q38 - пересенные для строк и столбцов, margin = "row"  - процент по строке
##                       Q38 Женщина Мужчина
## V004                                     
## Алтайский край              63.36   36.64
## Псковская область           68.69   31.31
## Саратовская область         62.58   37.42
## Новосибирская область       69.31   30.69
## Приморский край             60.14   39.86
## Забайкальский край          66.43   33.57
## Другое                      60.49   39.51

Выглядит не очень с точки зрения оформления, зато мы быстро получили результаты и можем их описать. Видим, что женщины превалируют во всех регионах, из доля составляет более 60%, в Новосибирской области - 69%.

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

5.3 Создание таблиц по нескольким переменным: возможности библиотек gtsummary и flextable

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

Библиотека gtsummary была создана специально для того, чтобы быстро создавать гибкие с точки зрения форматирования таблицы с описательными статистиками и результатами регрессионного анализа, оформленные по стандартам для научных публикациий.

Мы настоятельно рекомендуем посетить сайт проекта и подробно ознакомиться с возможностями данной библиотеки. https://www.danieldsjoberg.com/gtsummary/index.html

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

table<-df %>% 
  select(V004, Q38, age_cats, Q39, Q49) #отберем нужные переменные в отдельный сет и сохраним его под именем table
# создадим таблицу
table %>% 
  tbl_summary(missing="no") #функция tbl_summary позволяет создать комплексные таблицы
Characteristic N = 2,5381
Укажите регион, в котором Вы проживаете?
Алтайский край 408 (16%)
Псковская область 205 (8.1%)
Саратовская область 471 (19%)
Новосибирская область 483 (19%)
Приморский край 454 (18%)
Забайкальский край 431 (17%)
Другое 86 (3.4%)
Отметьте, пожалуйста, Ваш пол
Женщина 1,584 (65%)
Мужчина 867 (35%)
Возраст (по группам)
До 29 лет 447 (19%)
30-49 лет 1,194 (50%)
50 лет и старше 766 (32%)
Ваше основное занятие в настоящее время
Руководитель организации, отдела, подразделения 427 (17%)
Наемный работник, сотрудник организации 1,162 (48%)
Государственный и муниципальный служащий 297 (12%)
Индивидуальный предприниматель, фермер 117 (4.8%)
Неработающий пенсионер 120 (4.9%)
Студент, учащийся 120 (4.9%)
В данный момент не работаю 85 (3.5%)
Другое 115 (4.7%)
Если ли у Вас гражданство другой страны (не России) в настоящий момент?
Да 32 (10%)
Нет 286 (90%)

1 n (%)

В принципе, очень неплохо. Добавим группировку по региону и поменяем заголовок у переменных с “Characteristic” на “Характеристику”:

table %>% 
  tbl_summary(by=V004, missing="no") %>%#by=V004 - так мы обозначаем группирующую переменную
  modify_header(#функция, позволяющая изменить заголовок
    update = list(
      label ~ "Характеристика" #
    )
  )
Характеристика Алтайский край, N = 4081 Псковская область, N = 2051 Саратовская область, N = 4711 Новосибирская область, N = 4831 Приморский край, N = 4541 Забайкальский край, N = 4311 Другое, N = 861
Отметьте, пожалуйста, Ваш пол
Женщина 249 (63%) 136 (69%) 286 (63%) 323 (69%) 264 (60%) 277 (66%) 49 (60%)
Мужчина 144 (37%) 62 (31%) 171 (37%) 143 (31%) 175 (40%) 140 (34%) 32 (40%)
Возраст (по группам)
До 29 лет 161 (41%) 15 (7.8%) 82 (18%) 42 (9.2%) 57 (13%) 76 (18%) 14 (18%)
30-49 лет 164 (42%) 92 (48%) 230 (52%) 242 (53%) 202 (47%) 223 (54%) 41 (51%)
50 лет и старше 67 (17%) 86 (45%) 133 (30%) 174 (38%) 169 (39%) 112 (27%) 25 (31%)
Ваше основное занятие в настоящее время
Руководитель организации, отдела, подразделения 47 (12%) 34 (17%) 73 (16%) 98 (21%) 103 (24%) 54 (13%) 18 (22%)
Наемный работник, сотрудник организации 170 (44%) 90 (45%) 255 (56%) 236 (51%) 198 (46%) 185 (45%) 28 (34%)
Государственный и муниципальный служащий 28 (7.2%) 31 (16%) 57 (12%) 61 (13%) 57 (13%) 46 (11%) 17 (21%)
Индивидуальный предприниматель, фермер 68 (17%) 1 (0.5%) 2 (0.4%) 9 (1.9%) 8 (1.8%) 27 (6.5%) 2 (2.4%)
Неработающий пенсионер 21 (5.4%) 20 (10%) 5 (1.1%) 21 (4.5%) 10 (2.3%) 36 (8.7%) 7 (8.5%)
Студент, учащийся 23 (5.9%) 3 (1.5%) 37 (8.1%) 6 (1.3%) 25 (5.8%) 23 (5.5%) 3 (3.7%)
В данный момент не работаю 18 (4.6%) 5 (2.5%) 8 (1.8%) 11 (2.4%) 13 (3.0%) 26 (6.3%) 4 (4.9%)
Другое 14 (3.6%) 15 (7.5%) 20 (4.4%) 25 (5.4%) 20 (4.6%) 18 (4.3%) 3 (3.7%)
Если ли у Вас гражданство другой страны (не России) в настоящий момент?
Да 8 (19%) 6 (12%) 3 (4.8%) 5 (8.3%) 4 (6.8%) 1 (3.7%) 5 (28%)
Нет 35 (81%) 43 (88%) 59 (95%) 55 (92%) 55 (93%) 26 (96%) 13 (72%)

1 n (%)

Прочитать подробнее о функции tbl_summary, ее атрибутах, с подробным разбором примеров и возможностей изменения таблицы: http://www.danieldsjoberg.com/gtsummary/articles/tbl_summary.html

Можно сделать и простую двумерную таблицу:

 table %>%
  tbl_cross(row = Q38, col = Q39, percent = "cell", missing="no", ) %>%
  add_p(test="chisq.test") %>% 
  modify_header(#функция, позволяющая изменить заголовок
    update = list(
      label ~ "**Характеристика**" #
    )
  ) %>% 
  modify_caption("**Взаимосвязь пола и возраста** (N = {N})")
## FALSE observations with missing data have been removed.
Взаимосвязь пола и возраста (N = 2429)
Характеристика Ваше основное занятие в настоящее время Total p-value1
Руководитель организации, отдела, подразделения Наемный работник, сотрудник организации Государственный и муниципальный служащий Индивидуальный предприниматель, фермер Неработающий пенсионер Студент, учащийся В данный момент не работаю Другое
Отметьте, пожалуйста, Ваш пол <0.001
Женщина 247 (10%) 760 (31%) 209 (8.6%) 58 (2.4%) 84 (3.5%) 78 (3.2%) 62 (2.6%) 72 (3.0%) 1,570 (65%)
Мужчина 178 (7.3%) 396 (16%) 85 (3.5%) 59 (2.4%) 34 (1.4%) 42 (1.7%) 22 (0.9%) 43 (1.8%) 859 (35%)
Total 425 (17%) 1,156 (48%) 294 (12%) 117 (4.8%) 118 (4.9%) 120 (4.9%) 84 (3.5%) 115 (4.7%) 2,429 (100%)

1 Pearson's Chi-squared test

К сожалению, библиотека gtsummary, также как и библиотека gt, на основе которой она была создана, не поддерживает формат Word, однако в ней есть функция as_flex_table, позволяющая преобразовать таблицу в класс {flextable} и далее использовать возможности форматирования, заложенные в эту библиотеку.

С помощью flextable можно создавать очень красивые таблицы, на сайте проекта есть впечатляющая галерея:

Подробно изучить возможности библиотеки можно в интерактивном учебнике: https://ardata-fr.github.io/flextable-book/

5.4 Пример использования многомерных методов: построение модели логистической регрессии

Логистическая регрессия является одним из часто используемых методов регрессии, достаточно легким для применения, интерпретации результатов и тестирования гипотез. Зависимая переменная которая должна быть представлена в дихотомическом виде (0 – событие не произошло, 1 – событие произошло). Примеров таких зависимых переменных может быть множество: заболел человек или нет, приняли ли его на работу или нет. Задача такого моделирования заключается в предсказании будущего события на основе имеющихся данных об уже произошедших ранее событиях такого же рода. В качестве независимых переменных могут выступать как количественные переменные (возраст, доход, стаж работы), так и категориальные (пол, национальность, место проживания и т.д.).

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

Рассмотрим простой случай, когда в качестве зависимых будут выступать всего две переменных – пол и возраст. Создадим модель на основе метода GLM – обобщенных линейных моделей, включающего различные варианты линейной регрессии, в том числе – логистической регрессии (binomial logistic).

# Формула задается с помощью знака тильды и операторов сложения: слева от тильды располагается зависимая переменная, справа - независимые факторы
m1 <- glm(Q35_SQ005 ~ Q38 + age, df, family = binomial)
tbl_regression(m1, exponentiate = TRUE, pvalue_fun = ~style_pvalue(.x, digits = 2)) #tbl_regression - функция, создающая таблицу для представления результатов регрессионного анализа, m1 - наша модель, exponentiate = TRUE --этот аргумент задает перевод коэффициентов регрессии в отношение шансов, pvalue_fun = ~style_pvalue(.x, digits = 2 -- этот аргумент нужен для форматирования уровня значимости - с двумя знаками после запятой
Characteristic OR1 95% CI1 p-value
Отметьте, пожалуйста, Ваш пол
Женщина
Мужчина 1.69 1.19, 2.39 0.003
Возраст 0.95 0.94, 0.96 <0.001

1 OR = Odds Ratio, CI = Confidence Interval

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

В рассмотренном примере оба фактора имеют высокую статистическую значимость – p < 0,05. При этом у мужчин вероятность решиться на переезд в другую страну почти на 70% выше, чем у женщин, а вот с возрастом шансы на переезд снижаются – в среднем на 5% с каждым годом.

5.5 «A picture is worth a thousand words». Как сделать график к результатам исследования?

Диаграммы и графики позволяют представить результаты научного исследования наглядно, быстро оценить и сравнить нужные величины. Графический материал должен дополнять текст работы, иметь сквозную нумерацию и письменное пояснение к каждому объекту.

При подготовке научной статьи или диссертации графический материал часто компонуют и оформляют в отдельное приложение. Иллюстративный материал к научной работе часто ложится в основу презентации для ее защиты.

Создание красивых графиков является одной из сильных сторон R, авторы создали целую галерею, не только иллюстрирующую возможности данного языка, но и содержащую примеры кода, используемого для создания разных типов графиков:

Галерея графиков в R: https://www.r-graph-gallery.com/index.html

Выбор графика зависит от нескольких факторов. Прежде всего, большую роль играет природа данных, используемых для визуализации. Для количественных переменных подойдут гистограммы (histograms), ящичные диаграммы (boxplots) и графики плотности (density plots), для категориальных переменных – столбчатые диаграммы (barplots), радарные графики (radar plots), «леденцовые» диаграммы (lollipop plots). Второй значимый фактор – вид анализа. Сравнение выраженности признака по группам требует одних графиков, а многомерные методы, такие как факторный анализ, дискриминантный анализ или анализ соответствий - совсем других. Безусловно, в рамках нескольких занятий научиться всему не получится, но мы рассмотрим несколько интересных графических решений, которые можно взять на вооружение при написании научной статьи.

Пример графика для вопроса с множественным ответом:

# questionr - библиотека, позволяющая анализировать таблицы с множественными ответами
library(questionr)# прежде чем выполнить эту строку, установите пакет questionr на свой комьютер
# Объединим все подвопросы вопроса Q16 в один набор и сохраним его как отдельный объемт
Q16<-df %>% 
  select(contains("Q16_SQ"))
# создадим таблицу и сохраним ее как датафрейм
Q16tab<-Q16 %>% 
multi.table(true.codes=list("Да"), freq=TRUE) %>% #true.codes=list("Да") - обозначаем вариант ответа, используемый для подсчета частот и процентов, freq=TRUE - вывод процентов, а не только частот
  as.data.frame()
#создадим переменную с вариантами ответа (сокращенный вариант)
Q16tab$quest<-c("Надо поддерживать всех", "Надо поддерживать въезд в страну русского и русскоязычного населения", "Надо поддерживать въезд молодых и образованных граждан", "Надо поддерживать соотечественников разных национальностей из стран бывшего СССР", "Надо ограничить въезд в страну для всех категорий мигрантов")
# переименуем переменную с процентами
names(Q16tab)[2]<-"Proc"
# создадим график
ggplot(Q16tab, aes(x=quest, y=Proc))+#задаем, какая переменная будет по оси xб а какая по оси y
  geom_segment( aes(x=quest, xend=quest, y=0, yend=Proc)) +#эта строка задает длину палочки "леденца"
  geom_point( color="blue", size=6, alpha=0.6) +#это сам леденец - кругляшок на палочке, color="blue" - цвет "леденца", size=5 - размер, alpha=0.6 - уровень прозрачности
  coord_flip() + #переворачиваем график на 90 градусов, чтобы сделать его горизонтальный вариант
  theme_bw() +#устанавливаем тему графика на минимальную - без серого фона и лишних линий
  xlab(" ") + #убираем подписи к оси x
  ylab(" ")+ #убираем подписи к оси y
geom_label(aes(quest, Proc+1.5, label = Proc), colour = "darkred", nudge_x = 0.35, size = 4)# делаем подписи к каждому "леденцу" в виде значений процентов, которые будут отображаться темно-красным цветом

Создадим график корреляций для вопроса Q2 в котором измеряется выраженность различных идентичностей – государственно-национальной (близость с общностью жителей России), региональной, местной, этнической, конфессиональной, поколенческой, политической:

library(corrplot)# - нам понадобится библиотека corrplot
#мы должны заново загрузить нашу базу, чтобы категориальные переменные отображались цифрами
df<-read_sav("База_НШ_ВМ_2020_от 21.12.2020.sav", user_na = TRUE)
#отбираем переменные в отдельный сет:
Q2<-df %>% 
  select(contains("Q2_SQ")) %>% 
  na.omit()
# переименовываем переменные, чтобы вместо кода вопроса были буквы от a до n:
names(Q2)<-letters[1:7]
#считаем корреляции по методу Спирмена
M = cor(Q2,  method="spearman")
#делаем график
corrplot.mixed(M, number.cex= 7/ncol(M))

6 Список литературы и цитирование источников в тексте

R Markdown позволяет легко интегрировать списки литературы, созданные с помощью Mendeley, Zotero и других библиографических менеджеров, в создаваемый документ.

Для того, чтобы включить готовый список источников, необходимо в блоке метаданных YAML указать файл со списом источников в формате .bib:

output: officedown::rdocx_document:
    reference_docx: template.docx
bibliography: references.bib  

где база данных BibTeX это текстовый файд с расширением *.bib содержащий библиографические данные типа:

@Manual{R-base,
  title = {R: A Language and Environment for Statistical
           Computing},
  author = {{R Core Team}},
  organization = {R Foundation for Statistical Computing},
  address = {Vienna, Austria},
  year = {2019},
  url = {https://www.R-project.org},
}

Внутри текста источники могут цитироваться напрямую с помощью синтаксиса @key, где key – это ключевое слово, находящееся в первой строчке записи, например, R-base. Чтобы заключить источник в скобках, нужно использовать квадратные скобки – [@key]. При цитировании нескольких источник, каждый источник разделяется точкой с запятой, например, [@key-1; @key-2; @key-3].

По умолчанию в маркдауне используется чикагский формат представления цитат и источников. Чтобы использовать другой стиль, пользователь должен указать имя csl-файла, содержащего настройки стиля цитирования (CSL – Citation Style Language), в блоке метаданных, например:

output: html_document
bibliography: references.bib
csl: biomed-central.csl

Где найти такой файл? Можно воспользоваться репозиторием Zotero Style Repository, содержащим огромное количество библиотек библиографических стилей, доступных для скачивания.

7 Заключение

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

8 Дополнительные материалы

Копилка дополнительных источников для совершенствования навыков кодирования на R, проведения различных видов анализа и визуализации результатов исследования:


  1. Так выглядит затекстовая ссылка.↩︎