Использование функции summary()

В системе R имеется возможность и более быстрого расчета основных параметров описательной статистики. Для этого, в частности, служит функция общего назначения summary():

 

Всего одной строки кода оказалось достаточно для получения минимального (Min) и максимального (Max) значений переменной mpg, медианы (Median), арифметической средней (Mean), первого (1st Qu.) и третьего (3rd Qu.) квартилей, а также для выяснения количества отсутствующих значений (NA's). Более того, подобную сводку мы можем получить сразу для всей таблицы данных:

 

 

Результат выглядел бы замечательно, если бы не одно "но". Переменные vs и am являются факторами, но уровни их закодированы при помощи чисел 0 и 1. К сожалению, система R не распознала эти две переменные как факторы и рассчитала соответствующие параметры описательной статистики, как для обычных числовых переменных. Однако мы можем изменить такое поведение R, самостоятельно преобразовав vs и am в факторы при помощи функции as.factor(), теперь результат выглядит следующим образом:

 

 

Разведочный анализ данных (англ. exploratory data analysis, EDA) — анализ основных свойств данных, нахождение в них общих закономерностей, распределений и аномалий, построение начальных моделей, зачастую с использованием инструментов визуализации.

Протокол разведочного анализа данных можно сформулировать следующим образом:

1. Формулировка исследовательской гипотезы. Выполнение экспериментов/наблюдений для сбора данных.

2. Разведочный анализ данных:

● Выявление точек - выборосов

● Проверка однородности дисперсий

● Проверка нормальности распределения данных

● Выявление избыточного количества нулевых значений

● Выявление коллинеарных переменных

● Выявление характера связи между анализируемыми переменными

● Выявление взаимодействий между переменными-предикторами

● Выявление пространственно-временных корреляций среди значений зависимой переменной

3. Применение соответствующего ситуации статистического метода (модели).

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

Рассмотрение приведенного РДА-протокола начнем с выявления точек-выбросов. Чувствительность разных статистических методов к наличию выбросов в данных неодинакова. Так, при использовании обобщенной линейной модели для анализа зависимой переменной, распределенной по закону Пуассона (например, количество случаев какого-либо заболевания в разных городах), наличие выбросов может вызвать избыточную дисперсию, что сделает модель неприменимой. В то же время при использовании непараметрического многомерного шкалирования, основанного на индексе Жаккара, все исходные данные переводятся в номинальную шкалу с двумя значениями (1/0), и наличие выбросов никак не сказывается на результат анализа. Исследователь должен четко понимать эти различия между разными методами и при необходимости выполнять проверку на наличие выборосов в данных. Дадим рабочее определение: под "выбросом" мы будем понимать наблюдение, которое "слишком" велико или "слишком" мало по сравнению с большинством других имеющихся наблюдений.

Обычно для выявления выбросов используют диаграммы размахов. В R при построении диаграмм размахов используются устойчивые (робастные) оценки центральной тенденции (медиана) и разброса (интерквартильный размах, ИКР, IQR). Верхний "ус" простирается от верхней границы "ящика" до наибольшего выборочного значения, находящегося в пределах расстояния 1.5 х ИКР от этой границы. Аналогично, нижний "ус" простирается от нижней границы "ящика" до наименьшего выборочного значения, находящегося в пределах расстояния 1.5 х ИКР от этой границы. Наблюдения, находящиеся за пределами "усов", рассматриваются как потенциальные выбросы (Рисунок 1).

 

Рисунок 1. Строение диаграммы размахов.

 

Диаграмма размахов (или «ящик с усами») позволяет построить функция boxplot(). Рассмотрим на примере встроенного набора данных InsectSprays, который содержит столбец номера химиката инсектицида для борьбы с насекомыми вредителями, и второй столбец выживших насекомых.

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

boxplot(InsectSprays$count).

 

Для построения графика, на котором будут представлены "ящики с усами" для каждого инсектицида, достаточно выполнить команду:

          Обратите внимание на то, как были указаны переменные для построения графика - в виде т.н. формулы: count ~ spray. Это стандартный способ, используемый в R для формулировки статистических моделей. По левую сторону от знака ~ (называется "тильда") указывается зависимая переменная, по правую - предикторы. Как видим, количество насекомых на растениях, обработанных инсектицидами C, D и E было наиболее низким, что говорит о высокой эффективности этих средств по сравнению с тремя другими средствами. На растениях, обработанных средствами C и D, были отмечены необычно высокие количества насекомых (см. точки над "усами"). Однако для насекомых характерно пятнистое пространственное распределение и поэтому вряд ли эти необычно высокие наблюдения являются истинными выбросами. Как всегда, мы можем поработать над автоматически построенным графиком и несколько улучшить его внешний вид. Например, можно добавить заголовки осей и самого рисунка (аргументы xlab, ylab и main), а также закрасить "ящики" каким-нибудь цветом (аргумент col):

 

Подобно функции plot(), функция boxplot() обладает большим числом управляющих аргументов. Например, используя аргумент log можно изобразить данные на логарифмической шкале. Аргумент varwidth (от variable - переменная, и width - ширина) позволяет сделать так, что ширина "ящиков" будет пропорциональна квадратному корню из числа наблюдений в каждой группе (для этого необходимо использовать varwidth = TRUE). Это может оказаться полезной опцией для визуализации выборок, значительно различающихся по размеру (в нашем примере смысла в varwidth = TRUE не было бы, поскольку в каждой группе имеется по 12 наблюдений). Аргумент horizontal со значением TRUE позволяет изобразить "ящики" горизонтально (см. ниже). Подробнее об аргументах boxplot() можно узнать из файла помощи по этой функции (доступен по команде?boxplot).

 

Использование функции tapply()

 

Функция tapply() принадлежит к важному "apply-семейству" R-функций. Эти функции позволяют выполнять математические вычисления над определенными элементами таблиц данных, матриц, или массивов (например, быстро вычислять среднее значение для каждого столбца или строки таблицы, и т.п.).

 

Предположим, мы хотим выяснить средний объем двигателя (переменная disp, в кубических дюймах) у моделей с автоматической и ручной коробкой передач (переменная am; 1 - ручная коробка, 0 - автоматическая коробка). Функция tapply() позволяет сделать это следующим образом:

 

tapply (X = mtcars $disp, INDEX = mtcars $am, FUN = mean)

0     1

290.38 143.53

 

 

Как видно из приведенной команды, основными аргументами функции tapply() являются:

Х - числовой вектор

INDEX - список факторов, для уровней которых рассчитываются значения функции FUN

FUN - любая, в том числе пользовательская, функция

Поскольку аргумент INDEX способен принимать список из нескольких факторов, мы можем усложнить приведенную выше команду:

 

tapply (X = mtcars $disp, INDEX = list (mtcars $am, mtcars $vs), FUN = mean)

  0 1

0 357.62 175.11

1 206.22 89.80

 

Аргумент FUN, как уже было отмечено, может принимать любые, в том числе и пользовательские функции. Рассмотрим, например, расчет стандартных ошибок для средних значений объема двигателя у автомобилей с автоматической и ручной коробкой передач. Для начала создадим функцию SE для расчета стандартных ошибок (см. пример выше):

 

SE <- function (x) { sd (x)/ sqrt (length(x))}

 

Теперь совместим эту новую функцию с tapply():

 

tapply (X = mtcars $disp, INDEX = mtcars $am, FUN = SE)

0 1

25.3 24.2

 

Таким образом, объем двигателя у моделей с автоматической коробкой передач составляет в среднем 290.4 ± 25.3, а у автомобилей с механической коробкой - 143.5 ± 24.2 кубических дюймов.

 

Аналог функции tapply является функция aggregate().

 

Проверка распределения на нормальность.

 

В R реализованы практически все имеющиеся тесты на нормальность - либо в виде стандарных функций, либо в виде функций, входящих в состав отдельных пакетов. Примером базовой функции является shapiro.test(), при помощи которой можно выполнить широко используемый тест Шапиро-Уилка:

 

Манипуляция с данными в Дата-Фрейме:

Пусть у нас имеется таблица данных студентов с именем df.

 

df[1, ] – вывести 1 строку

df[,1] – вывести 1 столбец

df[3,4] – вывести элемент из 3 строки и 4 столбца

df[3, 2:5] – вести 3 стрку и столбцы со 2 по 5-й

df$Рост – вывести столбец с именем Рост

df$имя – добавить в таблицу данный новый столбец с именем «имя».

df$names=c(‘name’, ‘heigth’, ‘age’) – Присвоить имена столбцам таблицы данных

df$[ df$Рост>150, df$Имя] – Вывести именя тех студентов, чем рост больше 150 см.

 

Аналогично индексации работает функция subset. Вот так мог выглядеть идентичный запрос через функцию subset.

 

subset(df, Рост>150, select = Имя)

 

 

Загрузка данных из файла.

 

Базовый пакет R позволяет загружать данные из файлов формата.txt и.csv.

Универсальная функция, предназначенная для этого read.csv().

 

Основные аргументы:

1. Путь к файлу

2. sep - Разделитель между столбцами (пробел, запятая, точка с запятой и т.д…).

3. dec - Разделитель десятичной части числа (точка или запятая)

 

Все файлы, загруженные извне, сохраняются в формате data.frame.

 

Пример: read.csv(“table.csv”, sep=” “, dec=”.”)

 

ЗАДАНИЕ.

1. Загрузить данные средней зарплаты в России по регионам из файла df.csv. Приведите все числовые данные к типу double, названия регионов к типу данных factor.

2. Добавить в таблицу столбец, содержащий среднюю з/п за последние 3 квартала для каждого субъекта РФ.

3. Командой summary() вывести все основные характеристики данного распределения.

4. Построить гистограмму распределения средней з/п на текущий момент и проверить данное распределение на нормальность.

5. Построить диаграмму размахов (ящик с усами) распределения средней з/п по регионам за последние 3 квартала, подписать все оси и название графика. Есть ли выбросы, аномальные регионы?

6. Создайте вектор, состоящий из средней стоимости жилья в каждом квартале по стране в целом. Постройте график, добавьте подписи осей

7. Выведите 5 регионов с самым низкими з/п на текущий момент, и 5 регионов с самыми высокими з/п.

8. Построить 2 графика в одном окне: изменение минимальной з/п, изменение максимальной з/п поквартально. Типа графика - линия, обе линии построить на 1 рисунке, образовав “коридор” изменения заработной платы от минимальной к максимальной.

9. Как различаются медиана и среднее значение з/п в каждом из кварталов? В какую сторону смещена средняя? Постройте график изменения средней и медианной з/п поквартально.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: