Q-Q график в базовом пакете R
Кроме гистограмм, еще одним тестом на нормальность распределения является Q-Q график, или график Квантиль-Квантиль. Данный график позволяет сравнить рапределение исследуемой переменной с теоретическим нормальным распределением.
В базовом пакете R график Квантиль-Квантиль построить очень просто при помощи функции qqnorm()
:
library(car)
qqnorm(Prestige$income)
Q-Q график в пакете “car”: qqPlot()
Интерпретация графика qqnorm()
затруднительна. Более наглядным является Q-Q график, построенный с помощью функции qqPlot()
из пакета car
.
qqPlot(Prestige$income)
Интерпретация такого графика достаточно проста:
- Прямая красная непрерывная линия символизирует теоретическое нормальное распределение: если бы тестируемое распределение (отображается на графике круглыми точками) было нормальным, оно бы в точности легло на эту линию.
- Пунктирные красные линии ограничивают допустимые отклонения от нормального распределения в пределах 95% доверительного интервала (по умолчанию).
- Точки за границами пунктирных линий говорят о том, что тестируемое распределение не является нормальным, или о наличии выбросов (outliers).
Аргументы функции qqPlot()
methods(qqPlot)
## [1]qqPlot.default* qqPlot.glm* qqPlot.lm* ## ## Non-visible functions are asterisked
args(car:::qqPlot.default)
## function (x, distribution = "norm", ..., ylab = deparse(substitute(x)), ## xlab = paste(distribution, "quantiles"), main = NULL, las = par("las"), ## envelope = 0.95, col = palette()[1], col.lines = palette()[2], ## lwd = 2, pch = 1, cex = par("cex"), line = c("quartiles", ## "robust", "none"), labels = if (!is.null(names(x))) names(x) else seq(along = x), ## id.method = "y", id.n = if (id.method[1]== "identify") Inf else 0, ## id.cex = 1, id.col = palette()[1], grid = TRUE) ## NULL
Помимо таких параметров как main=
, xlab=
, ylab=
, с помощью которых можно задать название графика и осей, важными с точки зрения интерпретации результатов являются следующие аргументы:
id.n=
– параметр показывает количество точек-выбросов, которые должны быть снабжены “ярлыком”labels=
– указывает значение ярлыка, которым должна быть помечена точка-выброс на графике, например номер ряда, где возник выброс, или его название.
qqPlot(Prestige$income,
main="График Квантиль-Квантиль",
xlab="Квантили нормального распределения",
ylab="Доход, $",
labels=rownames(Prestige),
id.n = 3)
## general.managers physicians lawyers ## 102 101 100
Q-Q график для распределения Стьюдента (t), Хи-квадрат (Chi-squared), и других распределений
Помимо нормального распределения, qqPlot()
позволяет визуально сравнивать распределение под вопросом с другими распространенными распределениями, задавая параметр distribution
. Помимо "norm"
, которое является значением distribution
по умолчанию (см. аргументы qqPlot()
выше), distribution
может принимать следующие значения: "t"
, "chisq"
, "pois"
, "binom"
, "f"
и "unif"
.
Соответственно, Квантиль-Квантиль график с 95% доверительным интервалом относительно t распределения Стьюдента будет выглядеть следующим образом:
# рассчитаем количество степеней свободы
nPredictors <- length(colnames(Prestige)) - 1
nObservations <- nrow(Prestige)
dFreedoms <- nObservations - nPredictors -1 # df=n-k-1
# построим Q-Q график
qqPlot(Prestige$income,
distribution = "t",
df=dFreedoms,
main="График Квантиль-Квантиль для t распределения Стьюдента",
xlab="Квантили t распределения",
ylab="Доход, $",
labels=rownames(Prestige), id.n = 3)
## general.managers physicians lawyers ## 102 101 100
Как мы видим, визуально, результаты тестирования дохода участников выборки относительно нормального рапределения и рапределения Стьюдента с числом степеней свободы 96 практически ничем не отличается: результат, который можно было предвидеть теоретически.