Диаграмма квантиль-квантиль
График «квантиль — квантиль» (Q–Q) сравнивает два распределения вероятностей по соответствующим квантилям: например, первым, вторым и третьим процентилям каждого распределения. Часто так сопоставляют эмпирическое распределение данных с теоретическим. Если распределения похожи, точки располагаются вдоль прямой; заметные отклонения указывают на различия.
Здесь эмпирическая выборка сравнивается с двумя теоретическими распределениями. Измените источник входных данных — выборки из нормального или равномерного распределения — и посмотрите, как меняется соответствие. Преобразование quantile вычисляет квантили входных данных, а функции выражений quantileUniform и quantileNormal — теоретические квантили.
Спецификация Vega в JSON <>
{
"$schema": "https://vega.github.io/schema/vega/v6.json",
"description": "Диаграмма квантиль-квантиль для сравнения распределений.",
"padding": 5,
"signals": [
{ "name": "plotWidth", "value": 250 },
{ "name": "height", "update": "plotWidth" },
{
"name": "numQuantiles", "value": 100,
"bind": {"name": "Число квантилей", "input": "range", "min": 20, "max": 200, "step": 1}
},
{
"name": "url",
"value": "data/normal-2d.json",
"bind": {"name": "Набор данных",
"input": "select",
"options": [
"data/normal-2d.json",
"data/uniform-2d.json"
]
, "labels": ["Нормальное распределение", "Равномерное распределение"]}
}
],
"data": [
{
"name": "points",
"url": {"signal": "url"}
},
{
"name": "quantiles",
"source": "points",
"transform": [
{
"type": "quantile",
"field": "u",
"step": {"signal": "1 / (numQuantiles + 1)"}
},
{
"type": "formula",
"as": "quniform",
"expr": "quantileUniform(datum.prob)"
},
{
"type": "formula",
"as": "qnormal",
"expr": "quantileNormal(datum.prob)"
}
]
}
],
"scales": [
{
"name": "y",
"domain": {"data": "points", "field": "u"},
"range": "height",
"nice": true
}
],
"layout": {
"columns": 2,
"padding": 10
},
"marks": [
{
"type": "group",
"encode": {
"update": {
"width": {"signal": "plotWidth"},
"height": {"signal": "plotWidth"}
}
},
"signals": [
{"name": "width", "update": "plotWidth"}
],
"scales": [
{
"name": "x",
"domain": [0, 1],
"range": "width"
}
],
"axes": [
{
"scale": "y",
"orient": "left",
"offset": 10,
"grid": true,
"title": "Квантили выборки"
},
{
"scale": "x",
"orient": "bottom",
"grid": true,
"title": "Теоретические квантили равномерного распределения"
}
],
"marks": [
{
"type": "symbol",
"from": {"data": "quantiles"},
"encode": {
"update": {
"x": {"scale": "x", "field": "quniform"},
"y": {"scale": "y", "field": "value"},
"fill": {"value": "steelblue"},
"size": {"value": 16}
}
}
}
]
},
{
"type": "group",
"encode": {
"update": {
"width": {"signal": "plotWidth"},
"height": {"signal": "plotWidth"}
}
},
"signals": [
{"name": "width", "update": "plotWidth"}
],
"scales": [
{
"name": "x",
"domain": [-3, 3],
"range": "width"
}
],
"axes": [
{
"scale": "y",
"orient": "left",
"domain": false, "labels": false, "ticks": false, "grid": true
},
{
"scale": "x",
"orient": "bottom",
"grid": true,
"title": "Теоретические квантили нормального распределения"
}
],
"marks": [
{
"type": "symbol",
"from": {"data": "quantiles"},
"encode": {
"update": {
"x": {"scale": "x", "field": "qnormal"},
"y": {"scale": "y", "field": "value"},
"fill": {"value": "steelblue"},
"size": {"value": 16}
}
}
}
]
}
]
}