概率和统计的MATLAB指令

1、描述性统计分析

      描述性统计分析函数标准用法都是对列状数据进行操作。

mean(X):当X为向量,返回向量的均值;当X为矩阵,返回矩阵的每列元素均值构成的行向量。
min,max,sort,mean,median,std,var,sum,prod,cumsum,sumprod等函数用法与mean类似。
cov(X,Y):这里X,Y为向量,分别代表一个样本,求得样本的协方差。
cov(X):这里X为矩阵,将各列看成一个样本,求得样本协方差矩阵。corrcoef用法与cov类似,求得相关系数。
[Y,I]=sort(X):当X为向量,Y返回X的升序排列,I返回Y各元素原来的编址,即Y=X(I);当X为矩阵,分别对各列排序。
Y=prctile(X,p):当X为向量,Y返回X的p%上分位数;当X为矩阵,分别求各列的上分位数。
trimmean(X,p):剔除上下各(p/2)%数据以后的均值。

例如:

>> data=[11 57 291; 13 54 278;10 66 253; 9 46 307; 16 75 244;15 70 256; 8 40 310]

data =

    11    57   291
    13    54   278
    10    66   253
     9    46   307
    16    75   244
    15    70   256
     8    40   310

>> % 注意mean和median的区别
>> mean(data),median(data)

ans =

   11.7143   58.2857  277.0000

ans =

    11    57   278

>> % 注意var是std的平方
>> std(data),sqrt(var(data))

ans =

    3.0394   12.7895   26.7457

ans =

    3.0394   12.7895   26.7457

>> % 注意sum与cumsum不同
>> sum(data),cumsum(data)

ans =

          82         408        1939

ans =

          11          57         291
          24         111         569
          34         177         822
          43         223        1129
          59         298        1373
          74         368        1629
          82         408        1939

>> % 将三列看成三个随机变量
>> corrcoef(data)

ans =

    1.0000    0.8299   -0.7832
    0.8299    1.0000   -0.9633
   -0.7832   -0.9633    1.0000

>> % 排序
>> [Y,I]=sort(data)

Y =

     8    40   244
     9    46   253
    10    54   256
    11    57   278
    13    66   291
    15    70   307
    16    75   310

I =

     7     7     5
     4     4     3
     3     2     6
     1     1     2
     2     3     1
     6     6     4
     5     5     7

>> % prctilr(data,50)等于median(data)
>> prctile(data,[25,50,100])

ans =

    9.2500   48.0000  253.7500
   11.0000   57.0000  278.0000
   16.0000   75.0000  310.0000

>> % 注意与mean的区别
>> trimmean(data,20)

ans =

   11.6000   58.6000  277.0000

2、统计图

bar(Y):作向量Y的条形图。

bar(X,Y):作向量Y相对于X的条形图。

hist(X,k):将向量X中数据等距分为k组,并作频数直方图。k默认为10.

[N,X]=hist(Y,k): 不做图,N返回各组数据频数,X返回各组的中心位置。

boxplot(Y):作向量Y的箱型图。

例子:

>> vdata=rand(1,100); %100个标准正态分布随机数
>> % 由于是随机数,所以每次结果都不相同
>> subplot(1,3,1);
>> % 作出5组频数直方图,如图(a)所示
>> hist(vdata,5);
>> xlabel('(a)');
>> [n,x]=hist(vdata,5)

n =

    26    18    21    17    18

x =

    0.1038    0.3021    0.5004    0.6987    0.8970

>> % 5组频率直方图,如图(b)所示
>> subplot(1,3,2);
>> bar(x,n/100)
>> xlabel('(b)')
>> % 箱型图,如图(c)
>> subplot(1,3,3);
>> boxplot(vdata);
>> xlabel('(c)')

Probability_ScaleParameter_matlab-1

箱型图的箱中包含了从75%上分位数到25%上分位数的数据,中间线为中位线。

3、随机数生成

R=rand(m,n):生成区间(0,1)上均匀分布的m行n列随机矩阵。

R=randn(m,n):生成标准正态分布N(0,1)的m行n列随机矩阵。

P=randperm(N): 生成1,2,…,N的一个随机排列。

      实际上,计算机生成的是伪随机数,其生成机制由随机种子控制。rand和randn是最基本的随机数产生函数,他们允许用户自己设置随机种子。若将随机种子设为特定值,就可以是随机模拟称为可再现的。例如:

>> rand('state',1)
>> randperm(5)

总是产生42513。另一方面,若将种子设置为系统时间

>> rand('state',sum(1000*clock))

则几乎可以得到真正的随机实验。

4、随机变量模拟

R=random(sist,p1,p2,…,m,n): 生成以p1,p2,…为参数的m行n列dist类分布随机数矩阵。dist是表示分布类型字符串。

R=unidrnd(N,m,n):生成1,2,…,N的等概率m行n列随机矩阵。

R=binornd(k,p,m,n):生成参数为k,p的m行n列二项分布随机数矩阵。

R=unifrnd(a,b,m,n):生成[a,b]区间上的连续型均匀分布m行n列随机数矩阵。

R=normrnd(mu,sigma,m,n):生成均值为μ,均方差为σ的m行n列正态分布随机数矩阵。

R=mvnrnd(mu,sigma,m):生成n维正态分布数据这里μ为n维均值向量,σ为n阶协方差矩阵(它必须是正定的),R为m*n矩阵,每行代表一个随机数。

注:通用随机数生成函数random可适用的分布类型包括:’discrete uniform’(离散均匀分布),’binpmial’(二项分布),’normal’(正态分布),’poisson’(Poisson分布),’chi-square’(χ²分布),’t’(t分布),’f’(F 分布),’geometric’(几何分布),’hypergeometric’(超几何分布),’exponential’(指数分布),’gamma’(Γ分布),’weibull’(Weibull分布)等。

5、概率函数

y=pdf(dist,x,p1,p2,…):返回以p1,p2,…为参数的m行n列dist分布概率函数(分布率或密度函数)在x处的值。dist是表示分布类型的字符串,可适用的分布类型类似于random。

y=cdf(dist,x,p1,p2,…):返回以p1,p2,…为参数的m行n列dist类分布累计概率函数(即分布函数)在x处的值。dist是表示分布类型的字符串,可适用的分布类型类似于random。

y=icdf(dist,x,p1,p2,…):返回以p1,p2,…为参数的m行n列dist类分布函数(即下分位数)在x处的值,介于0~1。dist是表示分布类型的字符串,可适用的分布类型类似于random。

y=normpdf(x,mu,sigma):返回参数为μ和σ的正态分布密度函数在x处的值。

p=normcdf(x,mu,sigma):正态分布函数值。

x=norminv(p,mu,sigma):normedf的逆函数,即p下分位。

例如:

>> a=normpdf(90,80,10)-normpdf(70,80,10)

a =

     0

>> b=normcdf(90,80,10)-normcdf(70,80,10)

b =

    0.6827

>> p=(1-b)/2;
>> c=norminv(p,80,10)

c =

    70

>> d=norminv(1-p,80,10)

d =

    90

>> pdf('normal',90,80,10)

ans =

    0.0242

>> p=cdf('normal',90,80,10)

p =

    0.8413

>> icdf('normal',p,80,10)

ans =

    90

>> icdf('t',0.95,20) % 自由度为20的t分布95%下分位数

ans =

    1.7247

6、统计推断

[muhat,sigmahat,muci,sigmaci]=normfit(x,alpha):正态总体N(μ,σ²)参数估计。求得列状样本数据x的点估计μ=muhat和σ=sigmahat,以及相应的100(1-α)%置信区间muci和sigmaci。α的默认值为0.05。

[h,sig]=ttest(x,m,alpha,tail):正态总体N均值t检验。检验列状样本数据x的均值是否为m;α为显著性水平(默认值0.05);参数tail为0表示双边检验(H1:μ≠μ0)(默认值),1表示右边检验(H1:μ>μ0),-1表示左边检验(H1:μ<μ0);h返回1表示拒绝H0,返回0表示接受H0;sig返回临界值拒绝概率,sig<α时,h=1。

[p,h]=ranksum(x,y):两个总体一致性的Wilcoxon秩和检验。p返回列状样本数据x和y分布相同的显著性概率。p<0.05时,h=1(拒绝H0)。

例如:

>> x=randn(200,1);
>> [a,b,aci,bci]=normfit(x)

a =

    0.0252

b =

    1.0883

aci =

   -0.1265
    0.1769

bci =

    0.9911
    1.2068

>> [h,sig]=ttest(x,0) % 检验均值是否为0

h =

     0

sig =

    0.7436

>> y=normrnd(0,1,1000,1); % 生成1000个正态N(0,1)随机数
>> [p,h]=ranksum(x,y) %检验x与y分布是否相同

p =

    0.6298

h =

     0

7、概率和统计相关指令

表1 概率统计主要MATLAB命令
主题词意义主题词意义
max最大值random随机数
min最小值unidrnd离散均匀分布随机数
sum各元素和unifrnd均匀分布随机数
cumsum元素累计和normrnd正态分布随机数
prod各元素积binornd二项分布随机数
cumprod元素累计积poissrnd泊松分布随机数
mean样本均值mvnrnd多维正态分布随机数
std样本标准差pdf概率密度函数
var样本方差normpdf正态分布概率密度函数
cov样本协方差cdf累计分布函数
corrcoef样本相关系数normcdf正态分布累计分布函数
sort排序(从小到大)icdf逆分布函数
median中值norminv正态分布下分位数
prctile百分位数tinvt分布下分位数
trimmean剔除极端数据的均值chi2invχ²分布下分位数
bar条形图finvF分布下分位数
hist数据分组距频数图mle参数估计
boxplot箱型图normfit正态分布参数估计
rand[0,1]均匀分布随机数ttest单总体t检验
randn标准正态分布随机数ttest2双总体t检验
randperm随机排列ranksum分布秩和检验

转载自http://www.cnblogs.com/emanlee/archive/2011/06/29/2093732.html     仅作标记备查!

 


 


附上写代码时用到的一些方法:

 

sortrows  

B = sortrows(A)
B = sortrows(A,column)
[B,index] = sortrows(A,...)

 

sortrows对矩阵进行排序,同时保证每一行都是对应的,也就是同行的数值在排序结束之后也还是同行的数值。

输入矩阵:A

输出矩阵:B, 默认按照矩阵A的第一列的值,从小到大排序。

B = sortrows(A,n); 对A根据第n列按照从小到大的顺序排列,并返回给B.

B = sortrows(A,-n);对A根据第n列按照从大到小的顺序排列,并返回给B.

 

举几个小例子:

>> A = magic(5)

A =

17    24     1     8    15
23     5     7    14    16
4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

>> B = sortrows(A,2) %对A  第2列 从小到大排序  保持每一行都还是同行

B =

23     5     7    14    16
4     6    13    20    22
10    12    19    21     3
11    18    25     2     9
17    24     1     8    15
>> B= sortrows(A,-3) % 第3列, 从大到小排序 .......

B =

11    18    25     2     9
10    12    19    21     3
4     6    13    20    22
23     5     7    14    16
17    24     1     8    15

 转自http://ieroot.com/2012/06/30/95.html


B = sort(A)   %沿着输入参量 A的不同维的方向、从小到大重新排列 A中的元素。A 可以是字符串的、实数的、复数的单元数组。对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块;若 A 为复数的,则按元素幅值的从小到大排列,若有幅值相同的复数元素,则再按它们在区间[-π ,π ]的幅角从小到大排列;若 A 中有元素为NaN,则将它们排到最后。若 A为向量,则返回从小到大的向量,若A为二维矩阵,则按列的方向进行排列;若A为多维数组,sort(A)把沿着第一非单元集的元素像向量一样进行处理。
B=sort(A,dim) %沿着矩阵A中指定维数dim方向重新排列A中的元素。
[B,IX]=sort(A); %其中IX是一个大小等于size(A)的数组,其每一列是A中列向量的元素相对应的置换位置记号。

 

feval

调用格式:

[y1, y2, ...] = feval(fhandle, x1, ..., xn)
[y1, y2, ...] = feval(fname, x1, ..., xn)

feval 中fhandle 为函数句柄,fname为函数名,x1, ..., xn为fhandle或fname所指函数的参数。

fhandle与fname的关系:fhandle= str2func(fname); str2func将函数名称字符串转化为相应的函数句柄

也可使用fhandle= @func,直接获取函数句柄。

例: func(x1,x2,x3)可以表示成 feval(func,x1,x2,x3)

 

 

repmat

即 Replicate Matrix ,复制和平铺矩阵

B = repmat(A,m,n)
将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, (size(A,2)*n] 。
 
B = repmat(A,[m n])
与 B = repmat(A,m,n) 用法一致。
 
B = repmat(A,[m n p...])
B 是由 m×n×p×… 个 A 平铺而成的高维数组。B 的维数是 [size(A,1)*m, size(A,2)*n, size(A,3)*p, ...] 。

 

prod

B = prod(A)
如果A是向量,prod(A)返回A向量的乘积。
如果A是矩阵,prod(A)将A看作列向量,返回每一列元素的乘积并组成一个行向量B。
如果A是多维数组,prod(A)沿着第一个非单例作为向量,返回一个行向量数组。 《Simulink与信号处理》
B = prod(A,dim)
沿着指定的dim标量的维计算A矩阵的乘积。注:dim=2表示沿行计算

 

当一个除数有可能会非常小时,为了避免计算出现NaN,可以加上eps(即matlab中的最小正数)

如: 0/0=NaN

但:(0+eps)/(0+eps)=1

 

使用isnan函数来判断

isnan([1 1 NaN NaN])
ans =
     0     0     1     1

使用isnan来检测出数列中的NaN

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值