Привет, я пытаюсь использовать тест Колмогорова, который я собираюсь использовать в своей статье, я генерирую набор данных A, затем я случайным образом сделал набор образцов из A. Затем я хотел сравнить эти два набора образцов с kstest. но это показало мне, что у них нет одинакового распределения.
вот мой простой код:
clc clear all close all n_s = 1000; mother_random_variable = lognrnd(0.3,0.5,[1,100000]); %data lognormal S = mother_random_variable(randi(numel(mother_random_variable),1,n_s)) %sample S_y = [S]'; %selected data S_mean=mean(S_y); %mean sample S_var=std(S_y); %variance sammple test_cdf = [S_y,cdf('Lognormal',S_y,S_var,S_mean)]; %make cdf kstest(S_y,'CDF',test_cdf) %ktest plot(sort(S_y),logncdf(sort(S_y)),'r--') hold on cdfplot(S_y)
они имеют одинаковое распределение и разные результаты. Я обнаружил более странный результат, когда сравниваю свой набор данных с самим собой. Его результат показывает мне, что они не имеют одинакового распределения.
clc clear all close all n_s = 1000; mother_random_variable = lognrnd(0.3,0.5,[1,100000]); %data S=mother_random_variable; % I named data with S for simpler code S_y = [S]'; %selected data S_mean=mean(S_y); S_var=std(S_y); test_cdf = [S_y,cdf('Lognormal',S_y,S_var,S_mean)]; kstest(S_y,'CDF',test_cdf) plot(sort(S_y),logncdf(sort(S_y)),'r--') hold on cdfplot(S_y)
Есть ли у вас какие-либо идеи.
ПРИМЕЧАНИЕ.
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
Только взглянув на ваш второй блок кода, у меня есть некоторые комментарии и предложения.
1) Параметрами логнормального распределения являются среднее значение и стандартное отклонение в указанном порядке. В вашем коде вы вводите их в обратном порядке, когда вызываете функцию cdf(), и это создает совершенно другое распределение, чем вы намеревались сделать.
y = cdf('Lognormal', S_y, S_var, S_mean); % your code, incorrect y = cdf('Lognormal', S_y, S_mean, S_var); % correct
2) Это всего лишь предложение, но лучше использовать функцию makedist(), а не вводить параметры вручную в cdf().
doc cdf pd = makedist('Lognormal', 'mu', S_mean, 'sigma', S_var); y = cdf(pd, S_y); % instead of cdf('Lognormal', S_y, S_mean, S_var)
3) «когда я сравниваю свой набор данных с самим собой, его результат показывает мне, что они не имеют одинакового распределения». Но вы не сравниваете свои данные с собой. Вы сравниваете свои данные с результатами кумулятивной функции распределения ваших данных. На приведенном ниже графике показано распределение значений из ваших данных (вверху) и распределение значений из CDF. Очевидно, что эти распределения различаются, и kstest() правильно отклоняет нулевую гипотезу.
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ