R Language (Сковорцов) / Анализ данных на языке R
.pdflibrary("ggplot2")
mydata <- as.data.frame(HairEyeColor)
obj <- ggplot(data = , aes(x = , y = Freq)) + geom_bar(stat="identity", position = ) + scale_fill_manual(values=c("Brown", "Blue", "Darkgrey", "Darkgreen"))
Задание 5.3. Воспользуемся данными diamonds из библиотеки ggplot2. При помощи критерия Хи - квадрат проверьте гипотезу о взаимосвязи качества огранки бриллианта (сut) и его цвета (color). В переменную MainStat сохраните значение статистики критерия Хи - квадрат. Обратите внимание, MainStat должен быть вектором из одного элемента, а не списком (листом).
Задание 5.4. При помощи точного критерия Фишера проверьте гипотезу о взаимосвязи типа коробки передач (am) и типа двигателя (vs) в данных mtcars. Результат выполнения критерия сохраните в переменную.Получившийся p - уровень значимости сохраните в переменную FisherTest.
6. Сравнение двух групп
Перейдем к более сложным тестам. Начнем с того, что воспользуемся встроенным набором данных.
?iris
df <- iris
str(df)
При просмотре структуры можно заметить, что количество категорий - три. Избавимся от одной из них.
df1 <- subset(df, Species != "setosa") str(df1)
table(df1$Species)
Далее посмотрим как распределены наши данные. Для примера возьмем длины чашелистика и сравним их по оставшимся двум типам цветка. Сначала построим простую, доступную из базового пакета гистограмму.
hist(df1$Sepal.Length)
Как видно из построенной гистограммы, данные распределяются относительно симметрично, но при этом нет разбиения по типу цветка. Воспользуемся пакетом ggplot2, чтобы построить более интересный график. Команда facet_grid () позволяет разбить наблюдения на группы. Можно заметить, что в качестве аргумента используется довольно странная конструкция “Species ~ .” Давайте
разберем эту конструкцию. Знак тильды указывает на разбиение по группам, слева от тильды мы указываем что разбиваем, а справа как. Точка означает, что каких-то определенных границ разбиения нет, то есть мы используем обе категории.
ggplot(df1, aes(x =Sepal.Length ))+ geom_histogram(fill = "white", col = "black",
binwidth = 0.4)+ facet_grid(Species ~ .)
Далее построим еще несколько графиков. Первым из них будет диаграмма плотности. А вторым диаграмма размаха. Из диаграммы размаха можно выяснить, что в наших данных есть выброс некоторых данных.
ggplot(df1, aes(Sepal.Length, fill = Species ))+ geom_density(alpha = 0.5)
ggplot(df1, aes(Species, Sepal.Length))+ geom_boxplot()
Так как были замечены выбросы в данных, стоит проверить их на однородность и нормальность распределения. Для проверки нормальности распределения воспользуемся критерием Шапиро-Уилка.
shapiro.test(df1$Sepal.Length)
shapiro.test(df1$Sepal.Length[df1$Species == "versicolor"]) shapiro.test(df1$Sepal.Length[df1$Species == "virginica"])
by(iris$Sepal.Length, INDICES = iris$Species, shapiro.test)
Для проверки однородности данных воспользуемся критерием Бартлетта.
bartlett.test(Sepal.Length ~ Species, df1)
После проверки нормальности распределения и однородности данных, можно перейти к построению t-критерия Стьюдента. Чаще всего он применяется для сравнения средних значений двух выборок.
t.test(Sepal.Length ~ Species, df1)
test1 <- t.test(Sepal.Length ~ Species, df1)
Как и в предыдущих статистических тестах результатом t-критерия Стьюдента является список.
str(test1) test1$p.value
Выше t-критерий Стьюдента использовался для независимых выборок. Если выборки зависимые, то используется дополнительный аргумент paired.
t.test(df1$Petal.Length, df1$Petal.Width, paired = T)
Подытожим пройденное:
t-Критерий Стьюдента для независимых выборок
t.test(Var1 ~ Var2, data) # если первая переменная количественная, а вторая фактор
t.test(data$Var1, data$Var2) # если обе переменные количественные
t-Критерий Стьюдента для зависимых выборок t.test(data$Var1, data$Var2, paired = T)
Проверка на нормальность распределения
shapiro.test(Var1) # проверка на нормальность распределения переменной Var1
# но не удобно когда есть группирующая факторная переменная
Поможет функция by(), которая применяет различные функции на каждом уровне фактора.
by(iris$Sepal.Length, INDICES = iris$Species, shapiro.test) # проверка на нормальность переменной
# Sepal.Length в трех разных группах в соответствии с переменной Species
Проверка на гомогенность дисперсий
bartlett.test(mpg ~ am, mtcars) #Критерий Бартлетта
Иногда возникает необходимость выполнить непараметрический аналог t-критерия Стьюдента. Такая потребность может возникнуть, когда не выполняется одно из требований к t.test или не так много данных, или не очень хорошее распределение. Воспользуемся тестом Уилкоксона, который также известен как тест Манна-Уитни.
?wilcox.test
test2 <- wilcox.test(Petal.Length ~ Species, df1) pv <- test2$p.value