воскресенье, 1 декабря 2013 г.

Основы моделирования систем 1: Проверка гипотезы по критерию Пирсона (в Matlab)


Скачать файл с текстом программы для Matlab (.m-файл)

1. Теоретическая часть.

Общие сведения

Оценка репрезентативности выборки с определенной вероятностью по­зво­ля­ет судить о границах генеральной выборки, сделать некоторые пред­по­ло­же­ния об отдельных параметрах случайной величины, таких, как математическое ожидание, дисперсия и др. Но при этом нельзя сделать вывод о характере распределения случайной величины. Полную харак­теристи­ку случайной величины дает закон ее распределения. Однако об этом законе в генеральной совокупности можно получить информацию только из частичных выборок. Поэтому необходимо иметь критерии оцен­ки соответствия статистических законов распределения, полученных из частичных выборок, теоретическим законам распределения, характери­зующим генеральную совокупность. Такими критериями являются крите­рии согласия. Наиболее известны критерии согласия Пирсона, Колмого­рова и Смирнова.

Параметрические критерии согласия


Критерий согласия Пирсона


В ходе эксперимента нередко возникает необходимость проверки гипотезы о виде распределения исследуемой выборки. В этом случае пространство значений исследуемой величины разбивают на r интервалов S1, S2,..., Sr, каждый из которых содержит примерно одинаковое число собы­тий. Для определения числа интервалов имеется несколько рекомен­даций, которые сводятся, например, к использованию следующих зависи­мостей:


r=1,87·(n-1)2/5                                                                                (1.1)
или
r=b·lg(n).                                                            (1.2)
Здесь n-объем исследуемой выборки: b=35.
По этим данным можно построить гистограмму. Гистограмме сопоставля­ется некоторая конкретная вероятностная функция, которая лучшим об­разом, по мнению исследователя, описывает экспериментальные данные. Вероятностная функция внутри интервалов принимает значения P1P2, ..., Pr; при этом
;                                      (1.3)
Каждому множеству  Si  соответствует ni  выборочных значений и
.                                                         (1.4)
Следовательно, и любому множеству  можно сопоставить, с одной сто­роны, , а с другой  -  теоретическую вероятность.
Пирсон показал, что в соответствии с методом наименьших квадра­тов мера расхождения z между экспериментом и теорией обладает чрез­вычайно важным свойством:
.                             (1.5)
Значит, -распределение выражается через наблюдаемые частоты  и ожидаемые частоты  для всех r интервалов, при этом  -рас­пределение имеетk=r-1 степень свободы. Число степеней свободы k зависит от того, использовались ли рассматриваемые экспериментальные данные для получения параметров распределения. Выявление параметров распределения понижает число степеней свободы на число выявленных параметров .
Таким образом, рассматриваемый критерий - параметрический, он учи­ты­ва­ет и значение, и число параметров распределения. Если рас­сматривать нормальное распределение, то оно, как известно, описывается двумя па­ра­мет­ра­ми: l=2 (математическое ожидание и дисперсия). Откуда k=r-l-1=r-3.
Процедура проверки по критерию  сводится к следующим этапам:
1. Выборку объема n разбивают на r интервалов: S1,S2,...,Sr, где r рассчитывается по формуле (1.1) или (1.2). При этом необходи­мо, чтобы r>7, а каждый интервал  содержал не менее 5 выборочных значений. Интервалы могут иметь различную длину.
2. Из выборочных данных получают оценки параметров эксперимен­тального распределения . Устанавливают число степеней свободы k=r-l-1.
3. Выдвигают гипотезу (теоретическое распределение) о виде экс­периментального распределения и устанавливают уровень значимости , по которому определяют, например из таблицы, представленной в прил. 4, критическую область .
4. Определяют для каждого интервала вероятность  на основании экс­пе­ри­менталь­ных оценок параметров распределения конкретной вероят­ностной функции, наилучшим образом описывающей экспериментальные данные.
5. На основании (1.5) рассчитывают значение статистики . Если, , то гипотеза при данном уровне значимости a не противо­речит предполагаемому виду распределения. Если , то гипотеза о данном виде распределения должна быть отклонена.

2. Практическая часть — моделирование в системе Matlab
На основе вышеизложенного материала в программном пакете Matlab была составлена программа для проверки гипотезы по критерию Пирсона.
В реализованной программе используется ранее опубликованная функция для построения гистограммы.
Текст программы Matlab:

clc; clear;
n = input('Введите количество случайных величин в массиве: ');
alpha = 0.05; % устанавливаем уровень значимости
mu = 10;      % устанавливаем мат. ожидание для генерируемой выборки
sigma = 1;
x = normrnd(mu,sigma,n,1); % Массив случайных чисел, закон о виде
                           % распределения которых будем проверять
x = sort(x);               % сортируем массив (для поиска min и max)
disp('Максимальные и минимальные значения в массиве: ');
xmax = max(x)
xmin = min(x)

% Определяем количество интервалов (формула (1.2)):
b = 3;
disp('Количество интервалов:')
r = round(b*log(n))

% Определяем длину одного интервала:
disp('Длина интервала:')
stp = (xmax-xmin)/r

% Определяем частоту (количество чисел, попавших в каждый интервал)
k1 = xmin;
i = 1;
while i<=r
    k2 = 0;
    for j=1:n
        if (x(j)>=k1) & (x(j)<=k1+stp)
            k2 = k2+1;
        end
    end
    freqn(i) = k2;
    k1 = xmin+stp*i;
    i = i+1;
end
disp('Частота (количество чисел, попавших в каждый интервал):');
freqn

relfreq = freqn/n % относительная частота
disp('Относительная частота: ');
disp(relfreq)

% мат. ожидание (найденное по экспериментальным данным)
disp('Мат. ожидание: ');
m = (sum(x))/n

% среднеквадратичное отклонение
disp('Среднеквадратичное отклонение: ');
d = sqrt(sum((x-m).^2)/(n-1))

% плотность нормального распределения (для всей выборки)
f = (1/(d*sqrt(2*pi)))*exp((-(x-m).^2)/(2*d^2));

% Построение гистограммы
j = 1;
for i=1:2:2*r
    a(i) = (xmin-stp)+stp*j;
    a(i+1) = (xmin-stp)+stp*(j+1)-0.001;
    b(i) = relfreq(j)/stp;
    b(i+1) = relfreq(j)/stp;
    j = j+1;
end
plot(a,b,'b',x,f,'r');
ylabel('Плотность')

% Теоретическая вероятность:
% Складывается из суммы(j=1:r) значений определённого интеграла
% для каждого из интервалов
% --------------------------
% Для вычисления определённого интеграла используется метод Симпсона
a1 = xmin;   % верхний и нижний
b1 = a1+stp; % пределы интегрирования
for j=1:r
    s1=0;    % сумма, "основной" множитель в формуле Симпсона
    n1 = 10;% количество разбиений каждого участка
    stp1=(b1-a1)/n1; % шаг разбиения участка на интервалы
    for i=a1:2*stp1:b1-2*stp1
        % вычисляем необходимые значения функции
        % (в соответствии с формулой Симпсона):
        f1=exp((-((i)-m)^2)/(2*d^2)) / (d*sqrt(2*pi));
        f2=exp((-((i+stp1)-m)^2)/(2*d^2)) / (d*sqrt(2*pi));
        f3=exp((-((i+2*stp1)-m)^2)/(2*d^2)) / (d*sqrt(2*pi));
        s1=s1+f1+4*f2+f3;
    end
    p(j)=(stp1/3)*s1; % используем формулу Симпсона для вычисления
                      % интеграла для j-того интервала
                      % (т.е. получаем теоретическую вероятность j-того интервала)
    a1=a1+stp;
    b1=b1+stp;
end
% ----------------------------
% конец вычисления интеграла, теоритич. вероятность получена:
disp('Теоретическая вероятность: ');
disp(p);

% мера расхождения между экспериментом и теорией (формула (1.5))
disp('Мера расхождения между экспериментом и теорией');
chie = 0;
for i=1:r
    chie = chie+((freqn(i)-n*p(i)).^2)/(n*p(i));
end
chie

% количество степеней свободы
disp('Количество степеней свободы');
k = r-3

% табличное (теоретическое) значение критерия хи-квадрат
disp('Значения критерия хи-квадрат:');
chietabl = chi2inv(1-alpha, k)

% На основе вычисленных данных, делаем вывод,
% что гипотеза при данном уровне значимости (не) противоречит
% предполагаемому виду распределения:
if chie<=chietabl
    disp('Распределение случайных величин в массиве подчиняется нормальному закону распределения');
else
    disp('Распределение случайных величин в массиве не подчиняется нормальному закону распределения');
end

3.Результат работы программы:
При выборке объема n=1000 программа рассчитывает следующие значения, на основе которых делается вывод об отклонении или принятии гипотезы о виде распределения:
Введите количество случайных величин в массиве: 1000
Максимальные и минимальные значения в массиве:
xmax =
   13.4918
xmin =
    6.4130
Количество интервалов:
r =
    21
Длина интервала:
stp =
    0.3371
Частота (количество чисел, попавших в каждый интервал):
freqn =
  Columns 1 through 15
     1     1     5     4    20    35    58    78    90   124   124   142   121    69    53
  Columns 16 through 21
    36    21     9     5     2     2
relfreq =
  Columns 1 through 9
    0.0010    0.0010    0.0050    0.0040    0.0200    0.0350    0.0580    0.0780    0.0900
  Columns 10 through 18
    0.1240    0.1240    0.1420    0.1210    0.0690    0.0530    0.0360    0.0210    0.0090
  Columns 19 through 21
    0.0050    0.0020    0.0020
Относительная частота:
 Columns 1 through 9
    0.0010    0.0010    0.0050    0.0040    0.0200    0.0350    0.0580    0.0780    0.0900
  Columns 10 through 18
    0.1240    0.1240    0.1420    0.1210    0.0690    0.0530    0.0360    0.0210    0.0090
  Columns 19 through 21
    0.0050    0.0020    0.0020
Матожидание:
m =
    9.9821
Дисперсия:
d =
    1.0229
Теоретическая вероятность:
  Columns 1 through 9
    0.0005    0.0015    0.0039    0.0088    0.0178    0.0325    0.0532    0.0783    0.1035
  Columns 10 through 18
    0.1228    0.1308    0.1251    0.1075    0.0829    0.0574    0.0357    0.0200    0.0100
  Columns 19 through 21
    0.0045    0.0018    0.0007
Мера расхождения между экспериментом и теорией
chie =
   16.0763
Количество степеней свободы
k =
    18
Значения критерия хи-квадрат:
chietabl =
   28.8693
Распределение случайных величин в массиве подчиняется нормальному закону распределения
Рис. 1— гистограмма и график плотности вероятности

2 комментария:

  1. Очень полезная статья, помогла, но нашел ошибку, которая не влияет на работу программы. % дисперсия
    disp('Дисперсия: ');
    d = sqrt(sum((x-m).^2)/(n-1))
    Это не дисперсия, а среднеквадратичное отклонение

    ОтветитьУдалить
    Ответы
    1. Здравствуйте, Владислав!
      Спасибо за интерес и внимательность. Вы правы, в данной строке действительно идёт расчёт среднеквадратичного отклонения. Ошибка была исправлена, благодарим вас за комментарий.

      Удалить