Метод дисперсионного анализа в Выполняет Одностороннюю АНОВУ, берет набор сгруппированных данных, и определите, отличается ли среднее значение переменной значительно среди групп. Часто существуют переменные множественного ответа, и вы интересуетесь определением, отличается ли целый набор средних значений от одной группы к следующему. Существует многомерная версия дисперсионного анализа, который может решить проблему.
Набор данных 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
. Эти 1 982 автомобиля, кажется, имеют более высокий пробег, чем более старые автомобили, и они, кажется, весят меньше в среднем. Но как группа, эти три года существенно отличаются друг от друга? Функция 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}
Функция manova1
производит три выходных параметров:
Первый вывод, d
, является оценкой размерности средних значений группы. Если бы средние значения были всеми одинаковыми, размерность была бы 0, указав, что средние значения в той же точке. Если бы средние значения отличались, но упали вдоль строки, размерность была бы 1. В примере размерность равняется 2, указывая, что группа имеет в виду падение плоскости, но не вдоль строки. Это - самая большая размерность для средних значений трех групп.
Второй вывод, p
, является вектором p - значения для последовательности тестов. Первое значение p тестирует, является ли размерность 0, следующее, равняется ли размерность 1 и так далее. В этом случае оба p - значения являются маленькими. Вот почему предполагаемая размерность равняется 2.
Третий вывод, stats
, является структурой, содержащей несколько полей, описанных в следующем разделе.
W
, B
и поля T
являются матричными аналогами к в, между, и полные суммы квадратов в обычном одностороннем дисперсионном анализе. Следующие три поля являются степенями свободы для этих матриц. Поля lambda
, chisq
и chisqdf
являются компонентами теста для размерности средних значений группы. (p - значения для этих тестов являются первым выходным аргументом manova1
.)
Следующие три поля используются, чтобы сделать канонический анализ. Вспомните, что в анализе основных компонентов (Анализ главных компонентов (PCA)) вы ищете комбинацию исходных переменных, которая имеет самое большое изменение. В многомерном дисперсионном анализе вы вместо этого ищете линейную комбинацию исходных переменных, которая имеет самое большое разделение между группами. Это - одна переменная, которая дала бы старший значащий результат в одномерном одностороннем дисперсионном анализе. Найдя, что комбинация, вы затем ищете комбинацию со вторым по высоте разделением и так далее.
Поле eigenvec
является матрицей, которая задает коэффициенты линейных комбинаций исходных переменных. Поле eigenval
является вектором, измеряющим отношение отклонения между группами к отклонению в группе для соответствующей линейной комбинации. Поле canon
является матрицей канонических значений переменных. Каждый столбец является линейной комбинацией сосредоточенных средним значением исходных переменных, с помощью коэффициентов из матрицы eigenvec
.
c1 = stats.canon(:,1); c2 = stats.canon(:,2);
Постройте сгруппированный график рассеивания первых двух канонических переменных.
figure()
gscatter(c2,c1,Model_Year,[],'oxs')
Сгруппированный график рассеивания первых двух канонических переменных показывает больше разделения между группами затем сгруппированный график рассеивания любой пары исходных переменных. В этом примере это показывает три облака точек, накладываясь, но с отличными центрами. Одна точка в правом нижнем находится кроме других. Можно отметить эту точку на графике с помощью функции gname
.
Примерно разговор, первая каноническая переменная, c1
, разделяет эти 1 982 автомобиля (которые имеют высокие значения c1
) от более старых автомобилей. Вторая каноническая переменная, c2
, показывает некоторое разделение между 1 970 и 1 976 автомобилями.
Итоговые два поля структуры stats
являются расстояниями Mahalanobis. Поле mdist
измеряет расстояние от каждой точки до ее среднего значения группы. Точки с большими значениями могут быть выбросами. В этом наборе данных самый большой выброс является тем в графике рассеивания, универсале Buick Estate. (Обратите внимание на то, что вы, возможно, предоставили имя модели к функции gname
выше, если вы хотели маркировать точку с ее именем модели, а не ее номером строки.)
Найдите самое большое расстояние от среднего значения группы.
max(stats.mdist)
ans = 31.5273
Найдите точку, которая имеет самое большое расстояние от среднего значения группы.
find(stats.mdist == ans)
ans = 20
Найдите модель автомобиля, которая соответствует самому большому расстоянию от среднего значения группы.
Model(20,:)
ans = 'buick estate wagon (sw) '
Поле 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). Это сопоставимо с графиками рассеивания, где точки, кажется, следуют за прогрессией, когда год изменяется от 1 970 до 1976 до 1 982. Если у вас было больше групп, вы можете найти, что это поучительный, чтобы использовать manovacluster
функционирует, чтобы чертить схему, которая представляет кластеры групп, сформированное использование расстояний между их средними значениями.