Как провести MANOVA в R


Чтобы понять MANOVA, сначала нужно понять ANOVA.

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

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

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

Пример одностороннего дисперсионного анализа

В ANOVA у нас есть одна переменная отклика. Однако в MANOVA (многомерном дисперсионном анализе) у нас есть несколько переменных ответа.

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

Пример одностороннего MANOVA

Связанный: Понимание различий между ANOVA, ANCOVA, MANOVA и MANCOVA

Как провести MANOVA в R

В следующем примере мы проиллюстрируем, как провести односторонний MANOVA в R, используя встроенный набор данных iris , который содержит информацию о длине и ширине различных измерений цветов для трех разных видов («сетоза», « virginica», «лишай»):

#view first six rows of *iris* dataset
head(iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa

Предположим, мы хотим знать, влияет ли вид на длину и ширину чашелистиков. Используя виды в качестве независимой переменной, а длину и ширину чашелистиков в качестве переменных отклика, мы можем провести односторонний MANOVA, используя функцию manova() в R.

Функция manova() использует следующий синтаксис:

manova(cbind(rv1, rv2, …) ~ iv, данные)

куда:

  • rv1, rv2 : переменная ответа 1, переменная ответа 2 и т. д.
  • iv : независимая переменная
  • data : имя фрейма данных

В нашем примере с набором данных радужной оболочки мы можем подобрать MANOVA и просмотреть результаты, используя следующий синтаксис:

#fit the MANOVA model
model <- manova(cbind(Sepal.Length, Sepal.Width) ~ Species, data = iris)

#view the results
summary(model)
# Df Pillai approx F num Df den Df Pr(>F) 
#Species 2 0.94531 65.878 4 294 < 2.2e-16 \*\*\*
#Residuals 147 
#---
#Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1

Из вывода мы видим, что F-статистика равна 65,878, а соответствующее значение p чрезвычайно мало. Это указывает на то, что существует статистически значимая разница в размерах чашелистиков в зависимости от вида.

Техническое примечание. По умолчанию manova() использует статистику теста Пиллаи.Поскольку распределение этой тестовой статистики является сложным, для облегчения интерпретации также предоставляется приблизительное значение F.
Кроме того, можно указать «Рой», «Хотеллинг-Лоули» или «Уилкс» в качестве используемой тестовой статистики, используя следующий синтаксис: summary(model, test = 'Wilks')

Чтобы точно узнать, как длина и ширина чашелистиков зависят от вида , мы можем выполнить одномерный дисперсионный анализ с помощью summary.aov() , как показано в следующем коде:

summary.aov(model)


# Response Sepal.Length :
# Df Sum Sq Mean Sq F value Pr(>F) 
#Species 2 63.212 31.606 119.26 < 2.2e-16 \*\*\*
#Residuals 147 38.956 0.265 
#---
#Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1

# Response Sepal.Width :
# Df Sum Sq Mean Sq F value Pr(>F) 
#Species 2 11.345 5.6725 49.16 < 2.2e-16 \*\*\*
#Residuals 147 16.962 0.1154 
#---
#Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1

Из результатов видно, что значения p для обоих одномерных ANOVA чрезвычайно малы (<2,2e-16), что указывает на то, что виды оказывают статистически значимое влияние как на ширину , так и на длину чашелистиков .

Визуализация групповых средних

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

Например, мы можем использовать библиотеку gplots и функцию plotmeans() для визуализации средней длины чашелистика по видам :

#load *gplots* library
library(gplots)

#visualize mean *sepal length* by *species*
plotmeans(iris$Sepal.Length ~ iris$Species) 
функция gplots plot_means() в R

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

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

plotmeans(iris$Sepal.Width ~ iris$Species) 
MANOVA в R с графиками

Посмотреть полную RDocumentation для функции manova() можно здесь .

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