статистика::

Классический тест качества подгонки хи-квадрата

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

stats::csGOFT(x1, x2, …, [[a1, b1], [a2, b2], …], CDF = f | PDF = f | PF = f)
stats::csGOFT([x1, x2, …], [[a1, b1], [a2, b2], …], CDF = f | PDF = f | PF = f)
stats::csGOFT(s, <c>, [[a1, b1], [a2, b2], …], CDF = f | PDF = f | PF = f)

Описание

stats::csGOFT(data, cells, CDF = f) применяет классический тест качества подгонки хи-квадрата для нулевой гипотезы: “данные являются f-distributed”.

Тест качества подгонки хи-квадрата делит действительную строку на интервалы k ('ячейки'). Это вычисляет количество данных x j, попадающий в ячейки c i, и сравнивает эти 'эмпирические частоты ячейки' с 'ожидаемыми частотами ячейки' n  pi, где n является объемом выборки и p i =, Pr (a i <xb i) является 'вероятностями ячейки' случайной переменной с предполагавшимся распределением, заданным X = f.

Все данные x1, x2 и т.д. должен быть конвертируемым к действительным числам с плавающей запятой. Данные не должны быть отсортированы на входе: stats::csGOFT автоматически преобразовывает данные в плавания и сортирует их внутренне.

Внешние статистические данные, сохраненные в ASCII-файле, могут быть импортированы в сеанс MuPAD® через import::readdata. В частности, смотрите Пример 1 из соответствующей страницы справки.

Конечные границы ячейки a i, b i должен быть конвертируемым к действительным числам с плавающей запятой, удовлетворяющим a 1 <b 1a 2 <b 2a 3 <…. Они задают полуоткрытый меж-Вальс.

Когда предполагавшееся распределение, f задан как кумулятивная функция распределения (CDF = f), левый контур первой ячейки и правильный контур последней ячейки, проигнорировано. Они заменяются - ∞ и infinity, соответственно, т.е. разделение ячейки

используется внутренне.

Ячейки должны быть непересекающимися. Их объединение должно покрыть область поддержки распределения, т.е. 'вероятности ячейки' p i =, Pr (a i <xb i) должен составить в целом 1 для случайной переменной x с предполагавшимся распределением, данным f. Для непрерывных распределений, соседних элементов с b 1 = a 2, b 2 = a 3, … являются соответствующими.

Можно использовать a 1 = - ∞ и b k = ∞ для дистрибутивов, поддержанных на целой действительной строке.

Примечание

Ячейки должны быть выбраны таким образом, что никакая вероятность ячейки p i не исчезает!

Смотрите раздел 'Background' этой страницы справки для рекомендаций на разделении ячейки. В частности, использование равновероятных ячеек (с постоянным p i) рекомендуется. Для удобства служебная функция stats::equiprobableCells обеспечивается, чтобы сгенерировать такие ячейки. Смотрите Пример 1, Пример 3 и Пример 4.

Распределение, на которое тестируются данные, задано уравнением X = f, где X является одним из флагов CDF, PDF или PF.

Для эффективности рекомендуется задать кумулятивную функцию распределения (CDF = f).

Функциональный f может быть процедурой, предоставленной библиотекой MuPAD stats. Спецификации, такие как CDF = stats::normalCDF(m, v) или CDF = stats::poissonCDF(m) с подходящими численными значениями m, v возможен и рекомендован.

Дистрибутивы, которые не обеспечиваются stats - пакет, могут быть реализованы легко пользователем. Определяемая пользователем процедура f может реализовать любую функцию распределения. В случае CDF stats::csGOFT вызывает f с граничными значениями a i, b i ячеек, чтобы вычислить вероятности ячейки через p i = f (b i) - f (a i) (автоматически установка f (a 1) = 0 и f (b k) = 1).

Функциональный f должен возвратить числовое действительное значение между 0 и 1. Смотрите Пример 5 и Пример 6.

Также функциональный f может быть задан одномерным арифметическим выражением g (x) в зависимости от символьной переменной x. Это интерпретировано как функция. Cf. Пример 6.

Смотрите раздел 'Background' этой страницы справки для получения дополнительной информации о спецификации распределения через CDF = f, PDF = f или PF = f.

Вызов stats::csGOFT(data, cells, X = f) возвращает список [PValue = p, StatValue = s, MinimalExpectedCellFrequency = m]:

  • s является наблюдаемой величиной статистической величины хи-квадрата

    ,

    где n является объемом выборки, k является количеством ячеек, y i является наблюдаемой частотой ячейки данных (т.е. y, i является количеством данных x j, попадающий в ячейку c i), и p, i является ячейкой probabilitiy соответствие предполагавшемуся распределению f.

  • p является наблюдаемым уровнем значения статистической величины хи-квадрата с k - 1 степенью свободы, т.е. p = 1 - stats:: chisquareCDF (k - 1) (s)

  • минимум ожидаемых частот ячейки n  pi. Эта информация предоставляется тестом, чтобы убедиться, что граничные условия для “разумного” разделения ячейки соблюдают (см. раздел “Background” этой страницы справки).

Наиболее релевантная информация, возвращенная stats::csGOFT, является наблюдаемым уровнем значения PValue = p. Это должно быть интерпретировано следующим образом: По нулевой гипотезе, статистической величине хи-квадрата

приблизительно распределенный хи-квадрат (для больших выборок):

.

По нулевой гипотезе вероятность p = Pr (S> s) не должен быть маленьким, где s является значением статистической величины, достигнутой выборкой.

А именно, p = Pr (S> s) ≥ α должен содержать для данного уровня 0 значения <α <1, Если это условие нарушено, гипотеза может быть отклонена на уровне α.

Таким образом, если PValue (наблюдаемый уровень значения) p = Pr (S> s) удовлетворяет p, демонстрационное продвижение к наблюдаемой величине, s статистического S представляет маловероятное событие, и нулевая гипотеза может быть отклонена на уровне α.

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

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы рассматриваем случайные данные, которые должны быть нормально распределены со средним значением 15 и отклонение 2:

f := stats::normalRandom(15, 2, Seed = 0):
data := [f() $ i = 1..1000]:

Согласно рекомендациям в разделе 'Background' этой страницы справки, количество ячеек должно быть приблизительно, где n = 1000 является объемом выборки.

Мы хотим использовать 32 ячейки, которые равновероятны относительно предполагавшегося нормального распределения. Мы оцениваем средний m и отклонение v данных:

[m, v] := [stats::mean(data), stats::variance(data, Sample)]

Служебная функция stats::equiprobableCells используется, чтобы вычислить равновероятное разделение ячейки через функцию квантиля нормального распределения с эмпирическими параметрами:

cells := stats::equiprobableCells(32, stats::normalQuantile(m, v)):
stats::csGOFT(data, cells, CDF = stats::normalCDF(m, v))

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

В следующем, мы impurify выборка путем добавления некоторых равномерно распределенных чисел. Вычисляется новая равновероятная ячейка, делящая подходящий для новых данных:

r := stats::uniformRandom(10, 20, Seed = 0):
data := append(data, r() $ 40):
[m, v] := [stats::mean(data), stats::variance(data, Sample)]:
k := round(2*nops(data)^(2/5)):
cells := stats::equiprobableCells(k, stats::normalQuantile(m, v)):
stats::csGOFT(data, cells, CDF = stats::normalCDF(m, v))

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

delete f, data, m, v, k, cells, r:

Пример 2

Мы создаем выборку случайных данных, которые должны быть биномиальным образом распределены с испытательным параметром 70 и параметром вероятности:

r := stats::binomialRandom(70, 1/2, Seed = 123):
data := [r() $ k = 1..1000]:

Со значением ожидания 35 и стандартным отклонением этого распределения, мы ожидаем, что большинство данных будет иметь значения между 30 и 40. Таким образом, разделение ячейки, состоящее из 12 ячеек, соответствующих интервалам

должно быть соответствующим. Обратите внимание на то, что все ячейки интерпретированы как интервалы, т.е. левый контур не включен в интервал. Строго говоря значение 0 не покрыто этими ячейками. Однако со спецификацией CDF, stats::csGOFT игнорирует крайний левый контур и заменяет его - infinity. Таким образом объединение ячеек действительно покрывает все целые числа 0, …, 70, который может быть достигнут предполагавшимся биномиальным распределением с 'испытательным параметром' 70:

cells := [[0, 30], [i, i + 1] $ i = 30..39, [40, 70]]

Мы применяем χ 2 теста с различными спецификациями биномиального распределения. Они все приводят к тому же результату. Однако первый вызов с помощью спецификации CDF является самым эффективным (самым быстрым) вызовом:

stats::csGOFT(data, cells, CDF = stats::binomialCDF(70, 1/2));

stats::csGOFT(data, cells, PF = stats::binomialPF(70, 1/2));

f := binomial(70, x)*(1/2)^x*(1/2)^(70 - x):
stats::csGOFT(data, cells, PF = f)

Наблюдаемый уровень значения указывает, что данные проходят тест хорошо.

Затем, мы любим до безумия выборку путем добавления значения 35 сорок раз:

data := data . [35 $ 40]:
stats::csGOFT(data, cells, CDF = stats::binomialCDF(70, 1/2));

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

delete r, data, cells, f:

Пример 3

Мы тестовые данные, которые подразумевают быть выборкой беты, распределили числа с масштабными коэффициентами 3 и 2. Поскольку бета отклоняется, достигают значений между 0 и 1, мы выбираем равноотстоящее разделение ячейки интервала [0, 1] состоящий из 10 ячеек. Продемонстрированы различные эквивалентные вызовы stats::csGOFT:

r := stats::betaRandom(3, 2, Seed = 1):
data := [r() $ i = 1..100]:
cells := [[(i - 1)/10, i/10] $ i = 1..10]:
stats::csGOFT(data, cells, CDF = stats::betaCDF(3, 2)); 
stats::csGOFT(data, cells, CDF = (x -> stats::betaCDF(3, 2)(x)))

Также бета распределение может быть передано спецификацией PDF. Это, однако, менее эффективно, чем спецификация CDF, используемая прежде:

stats::csGOFT(data, cells, PDF = stats::betaPDF(3, 2));
stats::csGOFT(data, cells, PDF = (x -> stats::betaPDF(3, 2)(x)));

Наблюдаемый уровень значения не является небольшим. Следовательно, этот тест не указывает, что данные должны быть отклонены как бета распределенная выборка с заданными параметрами. Обратите внимание, однако, что минимальная ожидаемая частота ячейки, данная третьим элементом возвращенного списка, довольно мала. Это указывает, что разделение ячейки не очень удачно. Мы исследуем ожидаемые частоты ячейки путем вычисления n  pi = n   (f (b i) - f (a i)), где f является кумулятивной функцией распределения бета распределения, и n является объемом выборки:

f:= stats::betaCDF(3, 2):
map(cells, cell -> 100*(f(cell[2]) - f(cell[1])))

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

cells := [[0, 3/10], [(i - 1)/10, i/10] $ i = 4..8, [8/10, 1]]

Для этого разделения ячейки ожидаемые частоты в случайной выборке размера 100 являются достаточно большими для всех ячеек:

map(cells, cell -> 100*(f(cell[2]) - f(cell[1])))

Мы применяем другой χ 2 теста с этим улучшенным разделением:

stats::csGOFT(data, cells, CDF = f)

Снова, с наблюдаемым уровнем значения, тест не дает подсказки, что данные не являются бетой, распределенной с заданными параметрами.

Теперь, мы тестируем, могут ли данные быть расценены как являющийся нормально распределенным. Во-первых, мы оцениваем параметры (среднее значение и отклонение) требуемый для нормального распределения:

[m, v] := [stats::mean(data), stats::variance(data, Sample)]

Разделение ячейки, используемое прежде, было разделением интервала [0, 1], потому что бета отклоняется, достигают значений в этом интервале. Теперь мы создаем разделение 7 равновероятных ячеек с помощью функции квантиля нормального распределения:

k := 7:
cells := stats::equiprobableCells(7, stats::normalQuantile(m, v))

Действительно, ячейки тезисов равновероятны:

f:= stats::normalCDF(m, v):
map(cells, cell -> f(cell[2]) - f(cell[1]))

Мы тестируем на нормальность с предполагаемым средним значением и отклонением:

stats::csGOFT(data, cells, CDF = f)

С наблюдаемым уровнем значения данные не должны быть отклонены как нормально распределенная выборка. Мы отмечаем, что непараметрический тест Шапиро-Вилка, реализованный в stats::swGOFT, действительно обнаруживает ненормальность выборки:

stats::swGOFT(data)

С наблюдаемым уровнем значения нормальность может быть отклонена на уровнях настолько же низко как.

delete r, data, cells, f, m, v, k, boundaries:

Пример 4

Мы демонстрируем использование выборок типа stats::sample. Мы создаем выборку, состоящую из одного столбца строки и двух столбцов нестроки:

s := stats::sample(
  [["1996", 1242, 156], ["1997", 1353, 162], ["1998", 1142, 168],
   ["1999", 1201, 182], ["2001", 1201, 190], ["2001", 1201, 190],
   ["2001", 1201, 205], ["2001", 1201, 210], ["2001", 1201, 220],
   ["2001", 1201, 213], ["2001", 1201, 236], ["2001", 1201, 260],
   ["2001", 1201, 198], ["2001", 1201, 236], ["2001", 1201, 245],
   ["2001", 1201, 188], ["2001", 1201, 177], ["2001", 1201, 233],
   ["2001", 1201, 270]])
"1996"  1242  156
"1997"  1353  162
"1998"  1142  168
"1999"  1201  182
"2001"  1201  190
"2001"  1201  190
"2001"  1201  205
"2001"  1201  210
"2001"  1201  220
"2001"  1201  213
"2001"  1201  236
"2001"  1201  260
"2001"  1201  198
"2001"  1201  236
"2001"  1201  245
"2001"  1201  188
"2001"  1201  177
"2001"  1201  233
"2001"  1201  270

Мы рассматриваем данные в третьем столбце. Среднее значение и отклонение этих данных вычисляются:

[m, v] := float([stats::mean(s, 3), 
                 stats::variance(s, 3, Sample)])

Мы проверяем, нормально распределены ли данные третьего столбца с эмпирическим средним значением и отклонением, вычисленным выше. Мы вычисляем соответствующую ячейку, делящую таким же образом, как объяснено в Примере 1:

samplesize := s::dom::size(s):
k := round(2*samplesize^(2/5)):
cells := stats::equiprobableCells(k, stats::normalQuantile(m, v)):
stats::csGOFT(s, 3, cells, CDF = stats::normalCDF(m, v))

Таким образом данные проходят тест.

delete s, m, v, samplesize, k, cells:

Пример 5

Мы демонстрируем, как могут использоваться пользовательские функции распределения. Умирание прокручивается 60 раз. Следующие частоты очков 1, 2, …, 6 наблюдаются:

             score  | 1 |  2 | 3
|  4 | 5 | 6           ----------+---+----+---+----+---+--       
   frequency | 7 | 16 | 8 | 17 | 3 | 9 

Мы тестируем нулевую гипотезу, что игра в кости справедлива. В соответствии с этой гипотезой, переменная X, данная счетом одного списка, достигает значений 1 - 6 с постоянной вероятностью. В настоящее время stats - пакет не обеспечивает дискретное равномерное распределение, таким образом, мы реализуем соответствующую совокупную функцию дискретного распределения f:

f := proc(x)
     begin
          if x < 0 then
               0
          elif x <= 6 then
               trunc(x)/6
          else 1
          end_if;
     end_proc:

Мы создаем данные, представляющие 60 списков:

data := [ 1 $ 7, 2 $ 16, 3 $ 8, 4 $ 17, 5 $ 3, 6 $ 9]:

Мы выбираем набор ячеек, каждая из которых содержит точно одно из целых чисел 1, …, 6:

Wir wählen sodann eine Zellzerlegung, таким образом, dass jede Zelle genau eine der ganzen Zahlen 1, …, 6 enthält:

cells := [[i - 1/2, i + 1/2] $ i = 1..6]

stats::csGOFT(data, cells, CDF = f)

На уровне значения всего, нулевая гипотеза 'игра в кости справедлива', должен быть отклонен.

delete f, data, cells:

Пример 6

Мы даем дальнейшую демонстрацию пользовательских функций распределения. Следующая процедура представляет кумулятивную функцию распределения переменной X, поддержанной на интервале. Это будет вызвано значениями от границ ячейки и должно возвратить численные значения между 0 и 1:

f := proc(x)
     begin
       if x <= 0 then return(0)
       elif x <= 1 then return(x^2)
       else return(1)
       end_if
     end_proc:

Мы тестируем гипотезу, что следующими данными является f - распределенный. Ячейки формируют равноотстоящее разделение интервала [0, 1]:

data := [sqrt(frandom()) $ i = 1..10^3]:
k := 10:
cells := [[(i - 1)/k, i/k] $ i = 1..k]:
stats::csGOFT(data, cells, CDF = f)

Тест не дисквалифицирует выборку, как являющуюся f - распределенный. Действительно, для универсальной формы отклоняют Y на интервале [0, 1] (как произведено frandom), кумулятивная функция распределения действительно дана f.

Мы отмечаем, что предыдущая функция приводит к правильным значениям CDF для всех действительных аргументов. Выбранное разделение ячейки указывает, что только значения от интервала рассматриваются. Поскольку stats::csGOFT только оценивает CDF на границах ячейки, чтобы вычислить вероятность ячейки ячейки f (b) - f (a), это достаточно, чтобы ограничить f интервалом. Следовательно, для выбранных ячеек, символьное выражение f = x^2 может также использоваться, чтобы задать распределение:

stats::csGOFT(data, cells, CDF = x^2)

delete f, data, k, cells:

Параметры

x1, x2, …

Статистические данные: действительные численные значения

s

Выборка доменного типа stats::sample

c

Целое число, представляющее индекс столбца демонстрационного s. Этот столбец предоставляет данным x1, x2 и т.д. Нет никакой потребности задать столбец c, если выборка имеет только один столбец.

a1, b1, a2, b2, …

Границы ячейки: вещественные числа, удовлетворяющие a 1 <b 1a 2 <b 2a 3 <…. Также допущен как граница ячейки. Должны быть заданы по крайней мере 3 ячейки.

f

Процедура, представляющая предполагавшееся распределение: любой кумулятивная функция распределения (CDF = f), функция плотности вероятности (PDF = f), или (дискретная) функция вероятности (PF = f). Как правило, f является одной из функций распределения пакета stats, таких как stats::normalCDF(m, v) и т.д. Вместо процедуры также может быть задано арифметическое выражение в некотором неопределенном x, который будет интерпретирован как функция x.

Опции

CDF, PDF, PF

Это определяет, как процедура f интерпретирована stats::csGOFT.

Возвращаемые значения

список трех уравнений

[PValue = p, StatValue = s, MinimalExpectedCellFrequency = m]

со значениями с плавающей точкой p, s, m. Смотрите раздел “Details” ниже для интерпретации этих значений.

Алгоритмы

В Р.Б. Д'Агостино и М.А. Стивенсе, “Методы Качества подгонки”, Марсель Деккер, 1986, p. 70-71, каждый находит следующие рекомендации для выбора разделения ячейки:

  • Количество используемых ячеек должно быть приблизительно, где n является объемом выборки.

  • Ячейки должны иметь равные вероятности p i при предполагавшемся распределении.

  • С равновероятными ячейками средним значением ожидаемых частот ячейки n  pi должен быть по крайней мере 1 при тестировании на уровне значения α = 0.05. Для α = 0.01, средней ожидаемой частотой ячейки должен быть, по крайней мере, 2. Когда ячейки не приблизительно равновероятны, средняя ожидаемая частота ячейки для уровней значения выше должна быть удвоена. Например, средней ожидаемой частотой ячейки на уровне значения α = 0.01 должен быть, по крайней мере, 4.

Функция распределения, которую f передал stats::csGOFT через X = f, только используется, чтобы вычислить вероятности ячейки p i = Pr (a i <xb i) ячеек.

Кумулятивная функция распределения f, заданный CDF = f, используется, чтобы вычислить вероятности ячейки через p i = f (b i) - f (a i).

Функция плотности вероятности f, заданный через PDF = f, используется, чтобы вычислить вероятности ячейки через численное интегрирование:. это довольно дорого!

Функция дискретной вероятности, заданная через PF = f, используется, чтобы вычислить вероятности ячейки через суммирование.

Примечание

Таким образом, со спецификацией PF = f, распределение, как неявно предполагается, поддерживается на целых числах в ячейках. Не используйте PF = f, если функция дискретной вероятности не поддерживается на целых числах! Используйте CDF = f с соответствующей (дискретной) кумулятивной функцией распределения вместо этого!

Со спецификацией PF = f, значение - ∞ не допускают для левого контура a 1 из первой ячейки c 1 = Intval ([a 1], [b 1]).

Смотрите также

Функции MuPAD

Для просмотра документации необходимо авторизоваться на сайте