Как создать и интерпретировать график QQ в R


График QQ , сокращение от графика «квантиль-квантиль», представляет собой тип графика, который мы можем использовать, чтобы определить, потенциально ли набор данных получен из некоторого теоретического распределения.

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

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

Мы можем создать график QQ, нанеся два набора квантилей друг против друга. Если оба набора квантилей получены из одного и того же распределения, то точки на графике должны примерно образовывать прямую диагональную линию.

Пример графика Q-Q в R

Пример графика QQ Квантиль представляет точки в наборе данных, ниже которых находится определенная часть данных. Например, квантиль 0,9 представляет собой точку, ниже которой находится 90% данных. Квантиль 0,5 представляет собой точку, ниже которой падает 50% данных, и так далее.

Графики QQ определяют квантили в ваших выборочных данных и отображают их в зависимости от квантилей теоретического распределения. В большинстве случаев используется нормальное распределение, но на самом деле график QQ можно построить для любого теоретического распределения.

Если точки данных падают на прямую диагональную линию на графике QQ, то набор данных, вероятно, следует нормальному распределению.

Как создать график QQ в R

Мы можем легко создать график QQ, чтобы проверить, следует ли набор данных нормальному распределению, используя встроенную функцию qqnorm() .

Например, следующий код генерирует вектор из 100 случайных значений, следующих нормальному распределению, и создает график QQ для этого набора данных, чтобы убедиться, что он действительно соответствует нормальному распределению:

#make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a normal distribution
data <- rnorm(100)

#create Q-Q plot to compare this dataset to a theoretical normal distribution
qqnorm(data) 
Нормальный график Q-Q

Чтобы было еще проще увидеть, ложатся ли данные вдоль прямой линии, мы можем использовать функцию qqline() :

#create Q-Q plot
qqnorm(data)

#add straight diagonal line to plot
qqline(data) 

График QQ с диагональной линией в R

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

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

#make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a gamma distribution
data <- rgamma(100, 1)

#create Q-Q plot to compare this dataset to a theoretical normal distribution
qqnorm(data)
qqline(data) 
График QQ в R для гамма-распределения

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

Рассмотрим другой фрагмент кода, который генерирует вектор из 100 случайных значений, следующих распределению хи-квадрат с 5 степенями свободы, и создает график QQ для этих данных, чтобы проверить, соответствует ли он нормальному распределению:

#make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a Chi-Square distribution
data <- rchisq(100, 5)

#create Q-Q plot to compare this dataset to a theoretical normal distribution
qqnorm(data)
qqline(data) 
QQplot для распределения хи-квадрат

Мы снова видим, что этот набор данных не соответствует нормальному распределению, особенно вблизи хвостов.

Изменение эстетики графика QQ в R

Мы можем изменить некоторые элементы внешнего вида графика QQ в R, включая заголовок, метки осей, цвета точек данных, цвет линии и ширину линии.

Следующий код изменяет заголовки, метки осей и цвет точек на графике:

#make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a normal distribution
data <- rnorm(100)

#create Q-Q plot
qqnorm(data, main = 'Q-Q Plot for Normality', xlab = 'Theoretical Dist',
 ylab = 'Sample dist', col = 'steelblue') 
График QQ в R

Затем следующий код добавляет к графику прямую диагональную линию красного цвета, ширину линии 2 (lwd = 2, значение по умолчанию — 1) и пунктирную линию (lty = 2, значение по умолчанию — 1):

qqline(data, col = 'red', lwd = 2, lty = 2) 
График QQ с прямой диагональной линией

Технические примечания

Имейте в виду, что график QQ — это просто способ визуально проверить, соответствует ли набор данных теоретическому распределению. Чтобы формально проверить, соответствует ли набор данных определенному распределению, можно выполнить следующие тесты (при условии, что вы сравниваете свой набор данных с нормальным распределением):

Тест Андерсона-Дарлинга
Тест Шапиро-Уилка
Тест Колмогорова-Смирнова

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