Посчитать количество значений в столбце r studio

Обновлено: 07.07.2024

Сегодня обсудим интересную базу данных – базу с экспериментальными данными по шоколадным тортикам (к политологии вернемся на семинаре).

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

Посмотрим на нее:

Для вывода описательных статистик в R есть специальная функция summary() :

Для количественных переменных эта функция выдает минимальное и максимальное значение, среднее арифметическое, медиану, нижний (1st Qu.) и верхний (3rd Qu.) квартиль. Нижний квартиль – значение, которое 25% значений в выборке не превышают, а верхний квартиль – значение, которое 75% значений в выборке не превышают. Для качественных переменных (текстовые, факторные), R будет выводить количество значений по каждой группе (уровню).

В данном случае по выдаче R мы можем определить следующее. Всего в базе данных у нас 270 наблюдений (переменная X здесь служит id наблюдений, а ее максимальное значение 270), значит, в рамках исследования было приготовлено 270 шоколадных тортов. Минимальная температура, при которой выпекали торты, равна 175 градусам, максимальная - 225. Средняя температура, при которой выпекали торты, равна 200. Медианное значение температуры в данном случае совпадает со средним значением – в половине случаев температура при выпечке не превышала 200 градусов. Нижний квартиль равен 185 градусам – в 25% случаев торты выпекались при температуре не выше 185 градусов, верхний квартиль равен 215 – 75% случаев температура не превышала 215 градусов (или в 25% случаев превышала!).

Необязательно выводить описательные статистики для всех переменных в базе данных, можно вывести описание одной переменной:

Или проделать то же самое для нескольких переменных:

Точно так же необязательно выводить все статистики сразу. Можно запрашивать по отдельности:

В данном случае все показатели считаются без проблем, потому что в базе данных все строки полностью заполнены. В прошлый раз было хуже – вместо среднего значения R выдавал NA , так как в переменной были пропущенные значения. Напомню, чтобы решить эту проблему, мы прописывали дополнительный аргумент na.rm = TRUE , который говорил R не учитывать пропущенные значения при расчете статистик (из самой базы значения при этом не выкидываются!).

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

Но сами по себе эти значения не очень информативны – по ним сложно понять, насколько однородны наши данные (сильно ли они разбросаны относительно среднего значения). Для того, чтобы оценить степень однородности наших данных, нашей выборки, можно воспользоваться таким показателем как коэффициент вариации. Коэффициент вариации считается несложно: стандартное отклонение нужно поделить на среднее значение. Обычно значение коэффициента вариации, взятое по модулю, лежит в пределах от 0 до 1, но иногда, если данные очень разнородны (стандартное отклонение большое), оно может быть больше 1.

Вопрос: а когда коэффициент вариации нужно использовать с осторожностью?

Часто коэффициент вариации выражают в процентах. Давайте напишем код, который будет считать коэффициент вариации в процентах для переменной angle . Ваш ход код, маэстро!

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

Пока мы обсудили только описательные статистики для количественных переменных. А как быть с качественными? Какую информацию по ним можно получить? Число наблюдений, соответствующих каждому значению (классу):

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

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

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

Задание

  1. При наклоне на какой угол, в среднем, шоколадный торт начинает ломаться?
  2. Найдите коэффициент вариации (в процентах) для переменной temperature . Однородны ли значения температуры, при которой выпекали торты?
  3. Найдите моду показателя recipe .
  4. Найдите первый, второй и третий децили для показателя temperature . Проинтерпретируйте.

Решение

Описательные статистики с dplyr

Обратимся к библиотеке:

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

Добавим в таблицу коэффициент вариации:

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

Можем вывести описательные статистики для групп наблюдений. Сгруппируем наблюдения по рецепту, по которому готовился торт.

Выгрузка результатов

R позволяет выгружать не только таблицы с результатами регрессии, но и почти любые таблицы, например, таблицу с описательными статистиками. Единственная проблема: просто так в Word выгрузить ничего не получится, R дружелюбен только по отношению к LaTeX :) Но эту проблему можно решить.

Для начала загрузим библиотеку stargazer . Она используется для выгрузки таблиц “во внешний мир”.

Для того, чтобы вывести таблицу с описательными статистиками, нужно просто набрать stargazer() и указать базу данных:

Для тех, кто умеет работать в LaTeX, все просто – R выдал теховский код, который можно просто скопировать в tex-файл. Обратите внимание: в начале кода в качестве комментария всегда указывается, есть ли необходимость догружать (указывать в преамбуле) специальные пакеты или нет. В данном случае не нужно.

Тем, кто в LaTeX не работает, легче не стало. Но выход есть. Целых два.

Выход 1. Stargazer умеет не только выводить код в консоль, но и сохранять результат в отдельный файл. Этот файл может быть теховским файлом ( .tex ), текстовым ( .txt ) и html-файлом ( .html или .htm ). Word умеет открывать файлы с расширением .htm . И Libre Office тоже.

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

Выход 2. Воспользоваться онлайн-редактором для LaTeX, скопировать в него код из консоли и скомпилировать симпатичный pdf-файл. Можно зарегистрироваться на сайте ShareLatex, это бесплатно. Затем зайти и нажать Создать проектНовый проект. Когда мы дадим имя проекту, откроется поле для работы. В левой части – код, в правой части – pdf-файл. Нужно добавить в преамбулу (часть перед \begin) строку \usepackage[english, russian] , чтобы в документе нормально отображалась кириллица. Затем мы можем убрать строку для заголовка ( \maketitle ) и раздела ( \section ) и вставить туда код из консоли:

Теперь для простоты вернемся к html-файлам и будем приводить таблицу в порядок. Для начала дадим ей заголовок.

Редактирование таблиц в R

В прошлый раз мы говорили о том, как загрузить данные в среду R. Следующим важным этапом является их подготовка к визуализации и статистическому анализу. Для этого нам, как правило, необходимо внести некоторые изменения в таблицу, например: удалить столбец или строку, переименовать колонку, произвести сортировку или фильтрацию данных. Многие из этих операций можно сделать в Excel. Однако, зачастую возникают ситуации, когда необходимо изменить структуру или содержание таблицы прямо в ходе анализа. И вот тут у начинающих пользователей R могут возникнуть проблемы. В этой статье мы научимся их решать.

Структура таблицы и изменение типов данных

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

Функции head и str

Для того, чтобы посмотреть правильно ли загрузились данные, введем команду head(voenvuz) , которая покажет первые 6 строчек нашей таблицы. Если все загрузилось нормально, то переходим к команде str(voenvuz) , которая выведет в консоль структуру таблицы.

Функция str R

Итак, в поле "data.frame" мы видим, что наша таблица состоит из 20 строк и 6 столбцов. Под ним располагается список названий столбцов, тип данных и первые шесть элементов каждого столбца. Обратите внимание, что колонки "Name" и "Rhesus.factor" сейчас хранят в себе категориальный тип данных (Factor), а остальные - целочисленный. Компьютер вычислил это автоматически, но в нашем случае - вычислил неверно. Прежде чем мы исправим типы этих данных, немного теоретической информации.

О типах данных

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

В языке R можно выделить 5 основных типов данных, хранящихся в столбцах таблицы:

  • числовой (numeric);
  • целочисленный (integer);
  • текстовый (character);
  • категориальный (Factor);
  • логический (logical).

Есть также комплексный (complex) и сырой (raw) типы данных, но они редко встречаются, и поэтому я о них здесь писать не буду. Пропущенные данные обозначаются как "NA" (от англ. not available - недоступно), и тогда R игнорирует их.

Изменим типы данных на практике

Посмотрим еще раз на таблицу. Логично предположить, что столбец "Name" с именами студентов не содержит никаких категорий, поэтому, преобразуем эту колонку в обычный текстовый тип данных:

Идем дальше, столбец "Age" был правильно идентифицирован как целочисленный. А вот столбцы "Height" и "Weight" являются скорее числовыми, т.к. могут содержать промежуточные значения, например 182.5. Переделаем их из типа Integer в тип Numeric:

Последнее, что нам нужно - это изменить тип данных в столбце "Blood.group". Каждый из студентов так или иначе имеет одну из 4 групп крови, соответственно, этот столбец содержит четыре категории: "1", "2", "3", "4". Другими словами, в нем должен находиться категориальный тип данных:

В итоге, повторив команду str(voenvuz) , мы должны получить вот такую картинку.

Меняем тип данных в R

Редактирование элементов таблицы

Иногда возникают ситуации, когда необходимо вставить в таблицу столбец или строку, изменить значение элемента или название колонки. Наша таблица - не исключение и нуждается в доработке.

Добавление строк

Добавим в таблицу данные о двух новых студентах: Иване и Олеге. Для этого необходимо создать новую структуру - список (list) , В список мы по порядку вносим параметры, совпадающие со структурой таблицы (напомню, что в кавычках мы пишем нечисловые типы данных):

После, при помощи функции rbind (от англ. row bind, что дословно означает "связать строчки") мы объединим эти два списка с нашей таблицей:

Добавление столбцов

Теперь у нас в таблице два Ивана и два Олега. В данном случае хорошо было бы прописать для каждого студента свой идентификационный номер (ID), чтобы не запутаться, кто есть кто. Для этого создадим структуру, которая называется вектор (последовательность элементов одного типа). В него мы запишем последовательность от 1 до 22, так, чтобы у каждого из наших 22 студентов был свой уникальный ID:

Теперь объединим наш вектор с таблицей, воспользовавшись функцией cbind (от англ. column bind):

Не забудьте поменять тип данных нового столбца на символьный:

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

Проверьте, что получилось, используя уже знакомые нам функции head и str

Удаление строк и столбцов

Существует относительно "универсальная формула" для удаления элементов таблицы: new.data <- my.data[ , ]
Для того, чтобы корректно ее использовать необходимо запомнить несколько правил:

  1. После имени таблицы пространство внутри квадратных скобок следует разделить на две части запятой.
  2. Все, что находится до запятой, относится к строчкам, все что после - к столбцам.
  3. Поставьте минус перед номером столбца или номером строки, которую собираетесь удалить.
  4. Если таких элементов несколько, используйте функцию c(. ) : внутри скобок перечисление элементов через запятую.

В нашем случае, удалять из таблицы ничего не надо, но я покажу пару примеров, назвав "укороченные" таблицы именами "trash1", "trash2", "trash3", "trash4":

Изменение имен столбцов и данных в ячейках:

Переименуем колонку "Rhesus.factor" на укороченное "Rhesus". Для этого нужно вызвать функцию names , написать в параметрах функции имя таблицы и номер столбца, и присвоить ему новое имя :

Изменение данные в ячейках таблицы не представляет особой сложности. В квадратных скобках прописываем координаты нужной ячейки (до запятой - строка, после запятой - столбец) и присваиваем новое значение:

Редактируем таблицу в R

После всех наших манипуляций мы должны получить вот такую таблицу данных:

Фильтрация и сортировка данных

В качестве примера, исключим из таблицы данных студентов, чей возраст больше 23 лет. Существует множество способов решения подобного рода задач, включая циклы if-else, for или while (о них будет написана отдельная статья). Однако в нашем случае хватит простого фильтра, основанного на логическом операторе "< wp-block-preformatted"> voenvuz.final <- voenvuz[voenvuz$Age <= 23, ]

Того же результата мы добьемся, если будем использовать логические операторы ">" (больше) и "!" (исключить):

Итак, мы получили финальную версию таблицы "voenvuz.final ". Осталось лишь упорядочить столбцы:

И произвести сортировку данных по имени студентов, используя функцию order :

Результат обработки данных R

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

Заключение

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

  1. сайт http://stackoverflow.com/ (уже подробно разобраны тысячи вопросов по этой теме)
  2. книгу-справочник "R book" by Michael J. Crawley (легко найти бесплатную PDF версию в интернете).

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

kod col.x col.y delta
1 00046949 1,000 1,000 2
2 00047069 3,000 3,000 2
3 00047070 19,000 19,000 2
4 00047071 49,000 49,000 2
5 00047072 21,000 21,000 2
356 CB128164 2,000 2
252 CB164884 1,000 2
Всем привет! Только начал изучать R и столкнулся с некой проблемой: Есть такая волшебная таблица. И задача, вывести в последний столбец разницу 2 и 3 го, и с учетом того что данные в последних строках NA, соответственно вывести в последний столбец NA2 или NA3, в зависимости от того где стоит NA. Проблема в том, что стандартные функции(о которых я еще мало знаю) удаляют строки с NA, а мне важно их сохранить и обработать.
Если у кого то будут мысли по теме, буду рад помощи. Да и еще, у меня типы данных факторы в первых трех столбцах, а последний число.

((ETH1567:0.07723012967,((ETH1478:0.03477412382,ETH1481:0.03998172409)100:0.01982264043,(LAV2470:0.04453502013,LAV2519:0.04666678739) и т.д. без пробелов.

Мне нужно извлечь блоки содержащие буквы и последующие цифры до знака двоеточия, т.е.: ETH1567 ETH1478 ETH1481 LAV2470 LAV2519

Я подобрал регулярку для этого: ([A-z]4*)

treenames <- grep("([A-z]9*)", tree, value = TRUE)

treenames
named character(0)

Перерыд весь stackoverflow и иже с ним, но ответа не нашел.
Буду благодарен за подсказку.

Здравствуйте, Данила! Вот одно из возможных решений Вашей задачи:

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

Отлично, все работает, большое спасибо!

Добрый день!
После преобразования матрицы в таблицу, провожу моделирование.
Выходит такая вещь:
Warning messages:
1: In log(b$y) : NaNs produced
2: In log(b$x1) : NaNs produced
3: In log(b$x2) : NaNs produced
4: In log(b$x4) : NaNs produced
5: In log(b$x5) : NaNs produced
6: In log(b$x6) : NaNs produced

Подскажите, пожалуйста, где ошибка? Голова кипит, не получается(

Доброго дня, Эсмира!

Сегодня все посмотрю и надеюсь смогу помочь ;)

Здравствуйте. Как пропустить заголовок таблицы; учесть, что заголовка нет?

В скобках функции read.table вставьте аргумент header = FALSE.

Здравствуйте! Подскажите как правильно оформить цикл и получить агрегированные данные из нескольких ресурсов гугл аналитики.

Потом я хочу взять в цикле каждый ресурс и получить агрегированные данные в объекте gaData по всем ресурсам функцией:

gaData <- get_ga(profileId = "resource_id",
start.date = "2019-09-01",
end.date = "2019-10-21",
metrics = "ga:sessions",
dimensions = "ga:date",
samplingLevel = "HIGHER_PRECISION",
max.results = 1000,
token = rga_auth)

Здравствуйте! Сходу ответить не смогу. Сейчас дописываю диссертацию, к сожалению совсем нет свободного времени.

Samoedd приветствую.
Вопрос
После расчетов на экране отображается таблица в таком формате

Qtr1 Qtr2 Qtr3 Qtr4
2000 119.28993 118.89396 118.10201 116.91410
2001 115.33021 114.48457 114.37718 115.00804
2002 116.37716 117.13394 117.27839 116.81051
2003 115.73031 114.20610 112.23790 109.82569
2004 106.96949 105.67921 105.95486 107.79644
2005 111.20394 112.48537 111.64071 108.66998

Сам пробовал искать ответ, но видимо это настолько просто, что об этом ни где не пишут. :-)
Заранее спасибо.

Сентябрь 13, 2019 в 11:55 Samoedd (Автор записи)

Здравствуйте, Alex! Извините, был в отпуске, не смог ответить. Ваш вопрос еще актуален или уже решен?

Data Frame используются для хранения табличных данных. Они представляют собой особый тип списков (lists), матрицу данных. Это – именованный список векторов одной и той же длины, в которых элементы отвечают за переменные. В отличие от матриц, таблица данных содержит элементы разных классов, т.е. допускаются столбцы с числовыми, текстовыми и логическими значениями.

Создать Data Frame

Для создания таблицы данных применяется функция data.frame()

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

Определим сначала два вектора, а после введем величину d, которая является таблицей данных, включающей эти два вектора:

Еще один пример по созданию таблицы данных

Пусть требуется изменить названия столбцов. Тогда

Кроме того, вывод значений 1-го столбца (переменной) осуществляется следующим образом

Изложенная процедура создания таблицы данных с изменением названий столбцов имеет аналог

Выбор числа, строк и столбцов

Для работы со списком по одной переменной (столбцом) используется знак $

[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770

Если нужно взять определенные элементы из вектора, пользуемся записью вида

[1] 5640 6390 6805

Здесь с(…) запись, которая определяет вектор, состоящий из чисел под указанными порядковыми номерами.

Это же можно делать следующим образом

[1] 5640 6390 6805

Кроме того, применяются логические условия для выбора чисел из вектора

intake.post[intake.pre > 7000 & intake.pre <= 8000]

Индексирование с data frame происходит так

В квадратных скобках первый параметр указывает на номер строки, а второй – столбца. То же самое получаем, если вместо номера указывается наименование переменной

Если нужна конкретная строка целиком, например, 5-я, то записываем

Следует подчеркнуть, что запятая нужна.

По аналогии получаем все значения по конкретному столбцу

[1] 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335

Пусть необходимо вывести значения по заданным строкам и столбцам. Для этого следует выполнить

Выбор по условию

Если нужна выборка записей (строк), которые соответствуют выполнению условия по одной переменной, то команда имеет такой вид

Данную выборку можно получить несколько другим способом

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE

Шапка – head ()

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

Конец – tail()

Чтобы посмотреть конец таблицы, введите tail() .

Сведения о таблице: количество строк и столбцов, их названия

Чтобы узнать, сколько строк и столбцов насчитывается в таблице, воспользуемся функцией dim()

Благодаря dimnames() можно увидеть названия строк и столбцов

Как видим, Data Frame имеет особый атрибут raw.names

Чтобы узнать и применять в дальнейших расчетах количество строк, вводим функцию nrow(). А количество столбцов определяется через ncol().

Полезной функцией для получения информации о таблице данных является str()

При создании таблицы можно указать, что переменная типа “Factor” является “Character”

Войти через uID

Minitab

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

Работая с примерами этого цикла публикаций, Вы сможете самостоятельно, начиная с азов, освоить R и постепенно научиться выполнять вычисления простой и средней сложности. Кроме того, изучив все материалы этой серии, для Вас не составит труда применить и более сложные методики анализа, описанные на нашем сайте. Мы также рекомендуем настоящий цикл материалов как отправную точку для участников наших on-line курсов шести сигм, отдавшим предпочтение R в качестве среды анализа в своих проектах.

Итак, в первой статье мы познакомимся со способами расчета некоторых показателей, объединенных под общим понятием описательных или базовых статистик. Сюда принято относить среднее значение (среднее арифметическое, медиана, мода), минимальное и максимальное значения, разброс, вариацию и стандартное отклонение, квартили и процентили…

Чтобы сохранить эти значения введите еще одну команду:

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

> read.csv(file="data.csv", header=TRUE, sep=",", dec=".")

или присвоить значения какой-либо переменной:

Теперь рассчитаем среднее арифметическое значение:

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

Чтобы рассчитать медиану введите команду:

А вот для моды стандартной команды в R не предусмотрено, поэтому используйте следующее выражение:

Минимальное и максимальное значения можно рассчитать, используя следующие команды, соответственно:

Стандартная команда range, отражает диапазон значений в формате “от-до” (от минимального значения до максимального):

> range(x)
[1] 39.44106 65.11346

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

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

Квадратный корень этого значения покажет стандартное (среднеквадратическое) отклонение:

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

Чтобы рассчитать квартили введите команду:

> quantile(x)
0% 25% 50% 75% 100%
39.44106 47.04634 50.56743 52.57987 65.11346

Полученные результаты показывают минимальное значение, первый, второй, третий и четвертый квартили.

Чтобы рассчитать какой-либо процентиль (квантиль), воспользуйтесь командой:

В аргументе вектора “c” следует указать соответствующие доли от единицы. Например, чтобы рассчитать 30, 60 и 90% квантили введите команду:

> quantile(x, c(.30, .60, .90))
30% 60% 90%
48.52572 51.30114 56.32634

Существую также команды для вызова стандартного набора описательных статистик. Например:

> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
39.44 47.05 50.57 50.33 52.58 65.11

> fivenum(x)
[1] 39.44106 47.02794 50.56743 52.61602 65.11346

С помощью последней команды получают минимальное значение, первый квартиль, медиану, третий квартиль и максимальное значение.

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

UPD 05.03.2012: Базовые операции в R. Часть 2

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

Чтобы отразить наблюдения в графическом виде используйте команду:


Конечно же, в таком виде наблюдения мало о чем могут сказать. Гораздо информативнее изображение в виде гистограммы:


или ящичной диаграммы:


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

> data names(data) barplot(data)



Теперь разберем основные способы настройки диаграмм и попробуем применить их:

  • main – заголовок диаграммы
  • sub – подзаголовок (футер) диаграммы
  • ylab – подпись оси ординат
  • xlab – подпись оси абсцисс

> barplot(data, ylab="%", xlab="Атмосферные газы", main="Состав атмосферы", sub="SixSigmaOnline.ru")


С помощью команды “col”, можно разрисовать диаграмму в любой цвет:

> color=c("red", "blue", "yellow")
> barplot(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")

> pie(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")


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

UPD 02.04.2012: Базовые операции в R. Часть 3

В настоящей публикации мы рассмотрим некоторые способы представления числовых рядов в виде простейших графиков, продолжим рассматривать способы настройки диаграмм в R, а также способы изучения взаимосвязи между двумя факторами – корреляцию. В качестве набора наблюдения я использую ряды данных, присвоенные переменным. Каждый ряд представляет координаты отдельных точек: координаты абсцисс присвоены переменной x, а ординат – y.

С помощью следующей команды мы представим результаты наблюдений в виде точек на плоскости декартовых координат:


Обратите внимание на положение переменных в аргументе функции – оно соответствует зависимой (y) и независимой (x) переменной. Если поменять их местами, то диаграмма примет несколько иной вид:


Попробуем видоизменить способ изображения наблюдений с помощью аргумента “type”. Значение аргумента может принимать одно из следующих значений:

  • "p" для точек (значение по умолчанию)
  • "l" для линий
  • "b" для точек и линий (раздельно)
  • "o" для точек и линий
  • "c" для пунктирных линий
  • "h" для вертикальных линий (разновидность гистограмм)

Используем соединительные линии:


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


Функция abline() позволяет добавить на любой график прямую линию. В настоящем примере, мы записали в ее аргументе функцию lm(), указав, таким образом, что прямая линия должна отражать линейную зависимость переменных x и y.

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


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

В аргументе команды следует указать метод расчета корреляции – method и способ выбора наблюдений – use:

> cor(x,y, use="complete.obs", method="spearman")
[1] 0.7316308

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

> cor(x,y, method="pearson")
[1] 0.7432663
> plot(x, y, main="x-y correlation", sub="pearson correlation = 0.7432663")
> abline(lm(y


UPD 09.04.2012: Базовые операции в R. Часть 4

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

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


Реже используют ящичные диаграммы:


Альтернативный способ визуализации распределения величины – график плотности вероятности:


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

> hist(x)
> xfit yfit lines(xfit, yfit)


Унимодальные распределения, неподверженные асимметрии (в том числе и нормальное), обладают той особенностью, что среднее арифметическое, медиана и мода близки (идеальный вариант – все значения равны между собой). Рассчитав указанные статистики:

> mean(x)
[1] -0.0214007
> median(x)
[1] 0.09739521
> density(x)$x[which.max(density(x)$y)]
[1] 0.2171224,-

можно нанести их на график плотности вероятности или гистограмму. Например:

>hist(x)
>abline(v=mean(x), col="red")
>abline(v=median(x), col="yellow")
>abline(v= density(x)$x[which.max(density(x)$y)], col="green")


Наличие асимметрии можно диагностировать по порядку расположения выбранных статистик:

  • при левосторонней асимметрии – среднее арифметическое – медиана – мода;
  • при правосторонней асимметрии – мода – медиана – среднее арифметическое.

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

Для анализа асимметрии по величине скоса (Skewness) необходимо предварительно установить пакет “moments”. С помощью этого пакета мы также сможем проверить эксцесс (Kurtosis) – “остроту пика” распределения. Алгоритм анализа выглядит следующим образом:

> install.packages("moments")
> library("moments")
> skewness(x)
[1] -0.3032459
> kurtosis(x)
[1] 3.188327

Отрицательный показатель скоса (Skewness) свидетельствует о незначительной левосторонней асимметрии, а положительный эксцесс (Kurtosis) – о более островершинной форме кривой функции вероятности распределения. Следует учесть, что равенство средних значений (среднего арифметического, медианы и моды) и отсутствие асимметрии еще не доказывают подчинение распределения величины нормальному закону. Логистическое распределение и распределение Лапласа также удовлетворяют этим условиям. Однако показатель эксцесса для этих распределений будет выше 0 – значения эксцесса нормального распределения.

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

Читайте также: