У меня есть набор данных, и я хотел бы подогнать их к равномерному распределению и рассчитать соответствие с помощью Matlab. Однако я обнаружил, что униформа не включена в функцию 'fitdist'. Есть ли способ сделать равномерное распределение в Matlab?
Равномерное распределение фитингов в Matlab
Ответы (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 что-то знает, так как мне нужно было бы самому провести немало исследований, чтобы ответить на этот вопрос. Удачи!
В дополнение к ответу Колина, степень соответствия для равномерного распределения может быть рассчитана с использованием Pearson's chi- квадратичный тест.
Если у вас есть доступ к набору инструментов Matlab stats, вы можете сделать это довольно просто, используя chi2gof. функция. Пример 3 в документации показывает, как применить его к равномерному распределению.
Преобразуйте свою переменную в обычную распределенную переменную и используйте «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
Просто чтобы расширить ответ Алана, чтобы узнать, как правильно использовать критерий хи-квадрат Пирсона а>
Настройка параметров
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
ниже значимый уровень (альфа).