Равномерное распределение фитингов в Matlab

У меня есть набор данных, и я хотел бы подогнать их к равномерному распределению и рассчитать соответствие с помощью Matlab. Однако я обнаружил, что униформа не включена в функцию 'fitdist'. Есть ли способ сделать равномерное распределение в Matlab?


person Tao Liu    schedule 21.10.2012    source источник
comment
Мне просто интересно, был ли мой ответ полезен для вас? Если нет, пожалуйста, дайте мне знать, почему, и, возможно, я могу улучшить его. Ваше здоровье.   -  person Colin T Bowers    schedule 24.10.2012


Ответы (4)


Когда вы говорите, что хотели бы подогнать набор данных к униформе, я предполагаю, что вы имеете в виду, что хотите оценить параметры равномерного распределения, которые лучше всего соответствуют вашему набору данных.

На самом деле это довольно интересный вопрос. Я не удивлен, что fitdist не помогло, поскольку равномерное распределение — это особый случай. Например, можно показать, что при одних обстоятельствах оценка максимального правдоподобия параметров равномерного распределения не существует, а при других обстоятельствах не имеет единственного решения.

Так что делать? Итак, равномерное распределение имеет два параметра, a и b, которые определяют нижнюю и верхнюю границы плотности. Пусть X обозначает ваш набор данных (скажем, вектор-столбец наблюдений). Наивная оценка a и b:

a = min(X);
b = max(X);

Конечно, эти оценки почти наверняка будут переоценивать (для a) и недооценивать (для b) истинные параметры, поскольку маловероятно, что случайная выборка, взятая из плотности, попадет прямо на границу.

Для случая, когда известно, что a равно 0, несмещенная оценка минимальной дисперсии b равна:

b = max(X) + (max(X) / length(X))

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

a = min(X) - c;
b = max(X) + c;

куда

c = (max(X) - min(X)) / length(X)

Что касается соответствия, надеюсь, кто-то еще на SO что-то знает, так как мне нужно было бы самому провести немало исследований, чтобы ответить на этот вопрос. Удачи!

person Colin T Bowers    schedule 21.10.2012

В дополнение к ответу Колина, степень соответствия для равномерного распределения может быть рассчитана с использованием Pearson's chi- квадратичный тест.

Если у вас есть доступ к набору инструментов Matlab stats, вы можете сделать это довольно просто, используя chi2gof. функция. Пример 3 в документации показывает, как применить его к равномерному распределению.

person Alan    schedule 03.04.2013

Преобразуйте свою переменную в обычную распределенную переменную и используйте «kstest». Итак, если у вас есть переменная X, которая однородна от a до b, сделайте следующий код

X_uni=(X-a)/(b-a); %Uniform 0,1 variable

X_norm=norminv(X_uni); % transform to normal distributed variable
[h,P]=kstest(X_norm) ; %P is the test statistic
person Peter Pallesen    schedule 26.04.2015

Просто чтобы расширить ответ Алана, чтобы узнать, как правильно использовать критерий хи-квадрат Пирсона

Настройка параметров

N=100; % sample size
a=0; % lower boundary
b=1; % higher boundary

Выборка N равномерно распределенных значений между a и b. А во второй строке добавьте немного байса, чтобы он был неоднородным, если вы хотите протестировать код.

x=unifrnd(a,b,N,1);
%x(x<.9) = rand(sum(x<.9),1);

Использование chi2gof

Как описано здесь, с chi2gof, вы не можете использовать 'cdf гипотетического распределения' и должны указать ячейки, края и ожидаемые значения.

nbins = 10; % number of bin
edges = linspace(a,b,nbins+1); % edges of the bins
E = N/nbins*ones(nbins,1); % expected value (equal for uniform dist)

[h,p,stats] = chi2gof(x,'Expected',E,'Edges',edges)

Использование chi2cdf

С помощью этой функции вам необходимо предоставить статистику теста хи-квадрат, $\displaystyle \chi ^{2}$, которую можно вычислить с помощью функции histogramm:

h = histogram(x,edges);
chi = sum((h.Values - N/nbins).^2 / (N/nbins));
k = nbins-1; % degree of freedom
chi2cdf(chi, k)

Обратите внимание, что если вы не используете ребра для вычисления количества значений в ячейках, histogramm выберет их от меньшего значения до самого высокого, и поэтому окончательный результат будет отличаться от chi2gof.

В конце вы хотите использовать значение p, чтобы ответить на вопрос «Могу ли я безопасно отклонить нулевую гипотезу (т. е. x не исходит из равномерного распределения)?». Да, вы можете с уверенностью сказать, что x не поступает из равномерного распределения, если p ниже значимый уровень (альфа).

person Rafnuss    schedule 09.06.2016