R Language (Сковорцов) / Анализ данных на языке R
.pdf18. Динамическая визуализация с plotly
library(data.table)
library(plotly)
purchases <- fread("purchases.csv")
price.hist <- ggplot(purchases) + geom_histogram(aes(totalcents), fill="white", color="black") + scale_x_log10("Item price", labels = function(x) {
format(x / 100, scientific = F, big.mark = " ") }) +
ylab("Times purchased")
interactive.price.hist <- ggplotly(price.hist)
interactive.price.hist
5. Анализ номинативных данных
Все используемые файлы доступны по ссылке: https://goo.gl/VSIZ9c.
Номинативные (номинальные) данные - это категориальные данные, которые представляют особые свойства элементов выборки. Например, цвет волос у испытуемых. Такие данные не подлежат измерению, но возможно оценить то, как часто они встречаются.
В R есть несколько инструментов для работы с такими типами данных. Для начала загрузим новый датасет:
df <- read.csv("grants.csv")
str(df) df
Проверив его структуру, мы заметим, что в столбце “status” у нас содержатся нули и единицы. Заменим их на что-то более удобоваримое.
df$status <- factor(df$status, labels = c("Not funded", "Funded"))
Перейдем к анализу наших номинативных данных. Первое, что мы можем сделать, это построить сводную таблицу. Сводные таблицы, показывают сколько раз встречаются номинативные данные. Сводные таблицы бывают одномерные (по одной переменной): t1 <- table(df$status)
t1
dim(t1)
Двумерные (по двум переменным):
t2 <- table(df$status, df$field)
t2
t2 <- table(status = df$status, field = df$field)
dim(t2)
Трехмерные (по трем переменным):
t3 <- table(Years = df$years_in_uni, Field = df$field, Status = df$status)
t3
dim(t3)
Команда dimnames() позволит нам посмотреть, какие измерения есть в таблице и как они называются.
dimnames(t3)
Кроме того, мы можем выводить нужные нам данные, основываясь на их именах. Например, вывести только поддержанные или неподдержанные заявки на гранты:
t3 [,,"Funded"]
В сводных таблицах можно высчитывать пропорции. Для этого используется функция prop.table(), первым аргументом которого
является название сводной таблицы, а вторым – как будет происходить высчитывание пропорций: по строке, столбцу или категории:
prop.table(t3, 1) prop.table(t3, 2) prop.table(t3, 3)
Кроме сводных таблиц, для представления номинативных данных удобно использовать диаграммы:
barplot(t1)
barplot(t2)
barplot(t2, legend.text = TRUE, args.legend = list(x = "topright"))
barplot(t2, legend.text = TRUE, args.legend = list(x = "topright"), beside = TRUE)
Поговорим о нескольких видах статистических тестов для категориальных переменных. Первым из них будет биномиальный тест. Он показывает какова вероятность выполнения предполагаемой гипотезы при двух возможных исходах. Например, подбросим монетку 20 раз и предположим, что 5 из них выпал орел, а остальные – решка. Вероятность выпадения орла или решки 50%:
binom.test(x = 5, n = 20, p = 0.5)
binom.test(t1)
Второй тест – хи-квадрат Пирсона.
t1
chisq.test(t1)
Результатом выполнения хи-квадрата является список. К элементам этого списка тоже можно обращаться.
chi <- chisq.test(t1) chi$exp
chi$obs t2
chisq.test(t2)
Третьим статистическим тестом станет точный критерий Фишера.
fisher.test(t2)
Задание 5.1. Из встроенной таблицы HairEyeColor в переменную red_men сохранить долю рыжеволосых (Red) от общего числа голубоглазых мужчин.
Задание 5.2. Постройте столбчатую диаграмму распределения цвета глаз по цвету волос только у женщин из
таблицы HairEyeColor. По оси X должен идти цвет волос, цвет столбиков должен отражать цвет глаз. По оси Y - количество наблюдений.
Чтобы построить столбчатую диаграмму в ggplot, вам нужно подключить нужный пакет, затем преобразовать таблицу
HairEyeColor в data frame:
mydata <- as.data.frame(HairEyeColor)
Дополните предложенный код: