如何使用Matlab检验数据服从什么分布—童鞋数据分析问题集锦(1)

如何使用Matlab检验数据服从什么分布—童鞋数据分析问题集锦(1),第1张

说多了都是虚幻,祈祷能坚持下去吧,因为坚持才是世界上最痛苦的事情。来点实际的吧:MatLab实现数据分布检验的程序function f=p_judge(A,alpha)% 本程序用于判别所给数据源在置信率为0.05时的概率分布形式。A的形式为n×1。A=A(:)[mu,sigma]=normfit(A)p1=normcdf(A,mu,sigma)[H1,s1]=kstest(A,[A,p1],alpha)n=length(A)if H1==0disp('该数据源服从正态分布。')elsedisp('该数据源不服从正态分布。')endphat=gamfit(A,alpha)p2=gamcdf(A,phat(1),phat(2))[H2,s2]=kstest(A,[A,p2],alpha)if H2==0disp('该数据源服从γ分布。')elsedisp('该数据源不服从γ分布。')endlamda=poissfit(A,alpha)p3=poisscdf(A,lamda)[H3,s3]=kstest(A,[A,p3],alpha)if H3==0disp('该数据源服从泊松分布。')elsedisp('该数据源不服从泊松分布。')endmu=expfit(A,alpha)p4=expcdf(A,mu)[H4,s4]=kstest(A,[A,p4],alpha)if H4==0disp('该数据源服从指数分布。')elsedisp('该数据源不服从指数分布。')end[phat, pci] = raylfit(A, alpha)[H5,s5]=kstest(A,[A,p5],alpha)if H5==0disp('该数据源服从rayleigh分布。')elsedisp('该数据源不服从rayleigh分布。')end

clear all

min=88%最小值

mi_1=90%区间最小值

mi_2=107%区间最小值

mi_3=123%区间最小值

max=138%最大值

n=1000%总共多少个数

m=500%107以上的个数

%根据你的指示设定如下区间及个数

m1=100%88-89的个数

m2=n-m-m1%90-106的个数

m3=450%107-123的个数

m4=m-m3%124-138的个数

x1=rand(1,m1)

y1=round(min+(mi_1-min-1)*x1)%88-89的数据

x2=rand(1,m2)

y2=round(mi_1+(mi_2-mi_1-1)*x2)%90-106的数据

x3=rand(1,m3)

y3=round(mi_2+(mi_3-mi_2)*x3)%107-123的数据

x4=rand(1,m4)

y4=round(mi_3+1+(max-mi_3-1)*x4)%124-138的数据

Y1=[y1,y2,y3,y4]%合并四个区间的数据

Y=Y1(randperm(n))%将数据顺序打乱,得到最终结果

Yn1=length(find(Y>=mi_2&Y<=max))%检测107以上的个数是否符合设定m

Yn2=length(find(Y>=min&Y<=(mi_1-1)))%检测88-89的个数是否符合设定m1

Yn3=length(find(Y>=mi_1&Y<=(mi_2-1)))%检测90-106的个数是否符合设定m2

Yn4=length(find(Y>=mi_2&Y<=mi_3))%检测107-123的个数是否符合设定m3

Yn5=length(find(Y>=(mi_3+1)&Y<=max))%检测124-138的个数是否符合设定m4

figure(1)

plot(Y)

xlabel('数据点'),ylabel('数值')

title(['数据 (>170:',num2str(Yn1),';','88-89:',num2str(Yn2),';','90-106:',num2str(Yn3),';','107-123:',num2str(Yn4),';','124-138:',num2str(Yn5),';',')'])

%这程序每运行一次得到的每种数据值的个数都不同,请注意及时保存成数据文件

实例程序,应对普通情况应该够了,但是有些特殊情况不合适,不过大多数情况不必要求非常准确,如果要很准确,自行修改下。

% 数据

ydata = random('Normal',0,1,1,1024)

% 准备一些变量

bins = 100%分100个区间进行统计

maxdat = max(ydata)%最大值

mindat = min(ydata)%最小值

bin_space = (maxdat - mindat) / bins%每个bin宽度

xtick = mindat : bin_space : maxdat - bin_space

% 求pdf

distribution = hist(ydata,bins)%使用直方图得到数据落在各区间的总数

pdf = bins * distribution / ((sum(distribution )) * (maxdat - mindat))%计算pdf

% 画图

figure

plot(xtick,pdf)

% 验证:sum(pdf) * bin_space应该接近1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11514660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存