Метод дисперсионного анализа в Perform One-Way ANOVA берёт набор сгруппированных данных и определяет, значительно ли различается среднее значение переменной среди групп. Часто существует несколько переменных отклика, и вы заинтересованы в том, чтобы определить, отличается ли весь набор средств от одной группы к следующей. Существует многомерная версия дисперсионного анализа, которая может решить проблему.
The carsmall
набор данных имеет измерения на различных моделях автомобилей 1970, 1976 и 1982 годов. Предположим, вас интересует, изменились ли характеристики автомобилей с течением времени.
load carsmall
whos
Name Size Bytes Class Attributes Acceleration 100x1 800 double Cylinders 100x1 800 double Displacement 100x1 800 double Horsepower 100x1 800 double MPG 100x1 800 double Mfg 100x13 2600 char Model 100x33 6600 char Model_Year 100x1 800 double Origin 100x7 1400 char Weight 100x1 800 double
Четыре из этих переменных (Acceleration
, Displacement
, Horsepower
, и MPG
) являются непрерывными измерениями на отдельных моделях автомобилей. Переменная Model_Year
указывает год, в который был изготовлен автомобиль. Можно создать сгруппированную матрицу графика из этих переменных с помощью gplotmatrix
функция.
Создайте сгруппированную матрицу графика этих переменных с помощью gplotmatrix
функция.
x = [MPG Horsepower Displacement Weight];
gplotmatrix(x,[],Model_Year,[],'+xo')
(Когда второй аргумент gplotmatrix
пуст, функция графически отображает столбцы x
аргумент против друг друга и помещает гистограммы вдоль диагоналей. Пустой четвертый аргумент создает график с цветами по умолчанию. Пятый аргумент управляет символами, используемыми для различения групп.)
Похоже, что автомобили отличаются в зависимости от года. Правый верхний график, для примера, является графом MPG
от Weight
. Автомобили 1982 года, по-видимому, имеют более высокий пробег, чем старые автомобили, и они, по-видимому, весят в среднем меньше. Но как группа три года значительно отличаются друг от друга? The manova1
функция может ответить на этот вопрос.
[d,p,stats] = manova1(x,Model_Year)
d = 2
p = 2×1
10-6 ×
0.0000
0.1141
stats = struct with fields:
W: [4x4 double]
B: [4x4 double]
T: [4x4 double]
dfW: 90
dfB: 2
dfT: 92
lambda: [2x1 double]
chisq: [2x1 double]
chisqdf: [2x1 double]
eigenval: [4x1 double]
eigenvec: [4x4 double]
canon: [100x4 double]
mdist: [1x100 double]
gmdist: [3x3 double]
gnames: {3x1 cell}
The manova1
функция производит три выхода:
Первый выход d
является оценкой размерности группового средства. Если бы средства были все одинаковыми, размерность составлял бы 0, что указывает на то, что средства находятся в одной точке. Если бы средства отличались, но падали вдоль линии, размерность составлял бы 1. В примере размерность равна 2, что указывает на то, что группа означает падение в плоскости, но не вдоль линии. Эта самая большая возможная размерность для средств трех групп.
Второй выходной p
является вектором p-значений для последовательности тестов. Первый p-значение проверяет, является ли размерность 0, следующий, является ли размерность 1 и так далее. В этом случае оба значения p малы. Вот почему предполагаемая размерность равна 2.
Третий выходной stats
- структура, содержащая несколько полей, описанных в следующем разделе.
Поля stats
Структура
The W
, B
, и T
поля являются матричными аналогами внутри, между и общими суммами квадратов в обыкновенном однофакторном дисперсионном анализе. Следующие три поля являются степенями свободы для этих матриц. Поля lambda
, chisq
, и chisqdf
являются ингредиентами теста на размерность групповых средств. (Значения p для этих тестов являются первым выходным аргументом manova1
.)
Следующие три поля используются для канонического анализа. Напомним, что в Анализе основных компонентов (PCA) вы ищете комбинацию исходных переменных, которые имеют наибольшее возможное изменение. В многомерном анализе отклонения вы вместо этого ищете линейную комбинацию исходных переменных, которая имеет самое большое разделение между группами. Это единственная переменная, которая дала бы самый значительный результат в одномерном однофакторном дисперсионном анализе. Найдя эту комбинацию, вы увидите комбинацию со вторым по высоте разделением и так далее.
The eigenvec
поле является матрицей, которая задает коэффициенты линейных комбинаций исходных переменных. The eigenval
поле является вектором, измеряющим отношение отклонения между группами к отклонению внутри группы для соответствующей линейной комбинации. The canon
поле является матрицей канонических значений переменных. Каждый столбец является линейной комбинацией среднецентрированных исходных переменных, использующих коэффициенты из eigenvec
матрица.
c1 = stats.canon(:,1); c2 = stats.canon(:,2);
Постройте график сгруппированных графиков поля точек первых двух канонических переменных.
figure
gscatter(c2,c1,Model_Year,[],'oxs')
Сгруппированный график поля точек первых двух канонических переменных показывает больше разделения между группами, затем сгруппированный график поля точек любой пары исходных переменных. В этом примере показаны три облака точек, перекрывающиеся, но с различными центрами. Одна точка внизу справа находится отдельно от других. Вы можете отметить эту точку на графике, используя gname
функция.
Грубо говоря, первая каноническая переменная, c1
, разделяет автомобили 1982 года (которые имеют высокие значения c1
) от старых машин. Вторая каноническая переменная, c2
, показывает некоторое разделение между автомобилями 1970 и 1976 годов.
Последние два поля stats
структура являются расстояниями Махаланобиса. The mdist
поле измеряет расстояние от каждой точки до среднего значения его группы. Точки с большими значениями могут быть выбросами. В этом наборе данных самые большие выбросы - универсал Buick Estate в график поля точек. (Обратите внимание, что вы могли задать имя модели gname
функция выше, если вы хотите пометить точку именем модели, а не номером строки.)
Найдите наибольшее расстояние от среднего значения группы.
max(stats.mdist)
ans = 31.5273
Найдите точку, которая имеет самое большое расстояние от среднего значения группы.
find(stats.mdist == ans)
ans = 20
Найдите модель автомобиля, которая соответствует наибольшему расстоянию от среднего значения группы.
Model(20,:)
ans = 'buick estate wagon (sw) '
The gmdist
поле измеряет расстояния между каждой парой групповых средств. Исследуйте группу, используя grpstats
.
grpstats(x, Model_Year)
ans = 3×4
103 ×
0.0177 0.1489 0.2869 3.4413
0.0216 0.1011 0.1978 3.0787
0.0317 0.0815 0.1289 2.4535
Найдите расстояния между каждой парой групповых средств.
stats.gmdist
ans = 3×3
0 3.8277 11.1106
3.8277 0 6.1374
11.1106 6.1374 0
Как можно ожидать, многомерное расстояние между 1970 и 1982 годами (11,1) больше, чем различие между более близко расположенными годами (3,8 и 6,1). Это согласуется с графиками поля точек, где точки, по-видимому, следуют прогрессу, когда год меняется с 1970 по 1976 по 1982 год. Если у вас было больше групп, вы можете найти, что использовать manovacluster
функция для построения схемы, которая представляет кластеры групп, сформированные с помощью расстояний между их средствами.
gname
| gplotmatrix
| manova1
| manovacluster