Как создать и интерпретировать график qq в r
График QQ , сокращение от «квантиль-квантиль», представляет собой тип графика, который мы можем использовать, чтобы определить, потенциально ли набор данных является результатом теоретического распределения.
Многие статистические тесты предполагают, что набор данных соответствует нормальному распределению, и график QQ часто используется для оценки того, выполняется ли это предположение.
Хотя график QQ не является формальным статистическим тестом, он обеспечивает простой способ визуально проверить, соответствует ли набор данных нормальному распределению, а если нет, то как это предположение нарушается и какие точки данных потенциально являются причиной этого нарушения.
Мы можем создать график 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 QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data)
Чтобы еще проще увидеть, следуют ли данные по прямой линии, мы можем использовать функцию qqline() :
#create QQ plot qqnorm(data) #add straight diagonal line to plot qqline(data)
Мы видим, что точки данных рядом с хвостами не точно следуют прямой линии, но по большей части эти выборочные данные кажутся нормально распределенными (как и должно быть, поскольку мы попросили 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 QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data) qqline(data)
На этом графике 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 QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data) qqline(data)
Мы еще раз видим, что этот набор данных, похоже, не соответствует нормальному распределению, особенно вблизи хвостов.
Измените эстетику графика 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 QQ plot qqnorm(data, main = 'QQ Plot for Normality', xlab = 'Theoretical Dist', ylab = 'Sample dist', col = 'steelblue')
Затем следующий код добавляет на график прямую диагональную линию красного цвета с шириной линии 2 (lwd = 2, по умолчанию — 1) и пунктирную линию (lty = 2, по умолчанию — 1):
qqline(data, col = 'red', lwd = 2, lty = 2)
Технические примечания
Имейте в виду, что график QQ — это просто способ визуально проверить, соответствует ли набор данных теоретическому распределению. Чтобы формально проверить, соответствует ли набор данных определенному распределению, можно выполнить следующие тесты (при условии, что вы сравниваете свой набор данных с нормальным распределением):
Тест Андерсона-Дарлинга
Тест Шапиро-Уилка
Тест Колмогорова-Смирнова