Как рассчитать расстояние Махаланобиса в R


Расстояние Махаланобиса — это расстояние между двумя точками в многомерном пространстве. Он часто используется для поиска выбросов в статистическом анализе, включающем несколько переменных.

В этом руководстве объясняется, как рассчитать расстояние Махаланобиса в R.

Пример: расстояние Махаланобиса в R

Используйте следующие шаги, чтобы вычислить расстояние Махаланобиса для каждого наблюдения в наборе данных в R.

Шаг 1: Создайте набор данных.

Во-первых, мы создадим набор данных, который отображает экзаменационные баллы 20 студентов, а также количество часов, которые они потратили на учебу, количество сданных подготовительных экзаменов и их текущую оценку по курсу:

#create data
df = data.frame(score = c(91, 93, 72, 87, 86, 73, 68, 87, 78, 99, 95, 76, 84, 96, 76, 80, 83, 84, 73, 74),
 hours = c(16, 6, 3, 1, 2, 3, 2, 5, 2, 5, 2, 3, 4, 3, 3, 3, 4, 3, 4, 4),
 prep = c(3, 4, 0, 3, 4, 0, 1, 2, 1, 2, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2),
 grade = c(70, 88, 80, 83, 88, 84, 78, 94, 90, 93, 89, 82, 95, 94, 81, 93, 93, 90, 89, 89))

#view first six rows of data
head(df)

 score hours prep grade
1 91 16 3 70
2 93 6 4 88
3 72 3 0 80
4 87 1 3 83
5 86 2 4 88
6 73 3 0 84

Шаг 2: Рассчитайте расстояние Махаланобиса для каждого наблюдения.

Далее мы будем использовать встроенную в R функцию mahalanobis() для вычисления расстояния Махаланобиса для каждого наблюдения, которая использует следующий синтаксис:

махаланобис (х, центр, ков)

куда:

  • х: матрица данных
  • центр: средний вектор распределения
  • cov: ковариационная матрица распределения

Следующий код показывает, как реализовать эту функцию для нашего набора данных:

#calculate Mahalanobis distance for each observation
mahalanobis(df, colMeans(df), cov(df))

 [1] 16.5019630 2.6392864 4.8507973 5.2012612 3.8287341 4.0905633
 [7] 4.2836303 2.4198736 1.6519576 5.6578253 3.9658770 2.9350178
[13] 2.8102109 4.3682945 1.5610165 1.4595069 2.0245748 0.7502536
[19] 2.7351292 2.2642268

Шаг 3: Рассчитайте p-значение для каждого расстояния Махаланобиса.

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

Значение p для каждого расстояния рассчитывается как значение p, которое соответствует статистике хи-квадрата расстояния Махаланобиса с k-1 степенями свободы, где k = количество переменных. Итак, в этом случае мы будем использовать степени свободы 4-1 = 3.

#create new column in data frame to hold Mahalanobis distances
df$mahal <- mahalanobis(df, colMeans(df), cov(df))

#create new column in data frame to hold p-value for each Mahalanobis distance
df$p <- pchisq (df$mahal, df= 3 , lower.tail=FALSE)

#view data frame
df

 score hours prep grade mahal p
1 91 16 3 70 16.5019630 0.0008945642
2 93 6 4 88 2.6392864 0.4506437265
3 72 3 0 80 4.8507973 0.1830542407
4 87 1 3 83 5.2012612 0.1576392526
5 86 2 4 88 3.8287341 0.2805615121
6 73 3 0 84 4.0905633 0.2518495222
7 68 2 1 78 4.2836303 0.2324211504
8 87 5 2 94 2.4198736 0.4899458807
9 78 2 1 90 1.6519576 0.6476670033
10 99 5 2 93 5.6578253 0.1294978092
11 95 2 3 89 3.9658770 0.2651724541
12 76 3 3 82 2.9350178 0.4017530495
13 84 4 3 95 2.8102109 0.4218217836
14 96 3 2 94 4.3682945 0.2243432904
15 76 3 2 81 1.5610165 0.6682610031
16 80 3 2 93 1.4595069 0.6916471506
17 83 4 3 93 2.0245748 0.5673218169
18 84 3 3 90 0.7502536 0.8613248635
19 73 4 2 89 2.7351292 0.4342904353
20 74 4 2 89 2.2642268 0.5194087143

Обычно выбросом считается p-значение меньше 0,001.Мы видим, что первое наблюдение является выбросом в наборе данных, потому что его значение p меньше 0,001.

В зависимости от контекста проблемы вы можете удалить это наблюдение из набора данных, поскольку оно является выбросом и может повлиять на результаты анализа.

Связанный: Как выполнить многомерные тесты на нормальность в R

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