1. 统计
1.1 描述性统计
基本操作:
画图后,点tool 点datastatistics 点save to workspace
[值,行号]=max(x,[],1)
[值,列号]=max(x,[],2)
sum(x,1),sum(x,2),sum(x,3);min;max;mean同理
排序
[sA,index] = sort(A,'descend',dim)
描述性统计量
median %中位数
mode %众数
var
std %标准差
range %极差
var %方差,返回的是每一列的var
std %标准差
moment %中心距
mean %平均值
nanmean %忽略nan的平均数
geomean %几何平均
harmmean %调和平均
kurtosis(x) %峰度
skewness %偏度
%分位数:
Q1=prctile(w,25);Q3=prctile(w,75);
cov() %协方差,返回协方差矩阵
corrcoef() %协方差
绘图
- 箱图
Boxplot (x,notch1,sym1,vert) Notch1=1凹口notch=0矩形 Sym1='* ' sym1='+' Vert=0%水平
- cdf图
x=random('unif',0,1,500,1); [f,x0]=ecdf(x) plot(x0,f) % 等价于这段代码: [h,stat]=cdfplot(x)% 统计量
- gscatter:类似plotpv的效果,但是可以取0,1以外的值,也可以取多个值
x=1:100;x=x' y=3*x+random('norm',10,100,100,1) ind=[ones(25,1);0*ones(25,1);2*ones(50,1)]; gscatter(x,y,ind)
- plotpv
plotpv(p,t)
核密度估计
[f,xi]=ksdensity(x)%xi等分100份,f对应核密度估计
f=ksdensity(x,xi)%xi处的核密度估计值f
ksdensity(...)%只画图
....
其它图
histfit 条形图,带拟合的
y=normpdf(x,mean(s),std(s));plot(x,y); %画正态分布图
normplot wblplot
qqplot
pareto%帕累托图
gscatter%散度图
tabulate(x)%频率表
cdfplot(x)%cdf图
normspec([10 inf],mu,sigma)
probplot&qqplot
QQ图(按分位数画图)
PP图(按累积概率画图)
fanplot
probplot(x)
probplot(distribution,Y)
1.2 假设检验
均值检验
[h,sig,ci,stats]=ztest(x,mu,sigma,alpha) %已知sigma未知mu。h=0,sig>0.05认为均值相等
[h,sig,ci,stats]= ttest(x,mu,0.05) %单样本T检验。h=0,sig>0.05均值相等
ttest2(x,y) %独立样本T检验
ttest(x,y,alpha) %配对样本T检验=ttest(x-y)
方差检验
vartest(x,var) %单样本方差检验
vartest2(x,y) %独立样本方差检验
方差分析
anova1 %实际上是三个以上的组的均值检验
[p,table,stats]=anova1(X) %
[...]=anova1(X,group) %group可以是矩阵或元胞
anova2 %双因素方差分析
anova2(data,rep) %rep=1,每组1个数字,rep=2,每组2个数字
分布检验
h =jbtest(x),[h,p,jbstat,cv] =jbtest(x,alpha) % Jarque-Bera检验
h =kstest(x) %Kolmogorov-Smirnov检验
h =lillietest(x),[h,p,lstat,cv]=lillietest(x,alpha)。%Lilliefors检验
另外还有一种方法:首先对于数据进行标准化:Z = ZSCORE(X),然后在进行2)的Kolmogorov-Smirnov检验,检验是否为标准正态分布,类似于对于方法2)的改进
x=random('norm',0,1,200,1);
distname='norm';
pdca = fitdist(x,distname);
[h,p,ksstat,cv] = kstest(x,'CDF',pdca);
%h=0接受原假设,认为服从'norm'分布
1.3 随机变量
分布的生成:
pdf('name',X,A,B,C)%概率密度函数
cdf('name',X,A,B,C)%累积分布函数,
random('name',A,B,C,m,n)%随机生成数字
icdf('name',x,A,B,C) %cdf的反函数
mle('name',X,alpha) %参数估计 mle('bino',n,alpha,N)比较特殊
Mle: | ||
---|---|---|
phat = mle(‘name’,data) | 分布函数名为dist的最大似然估计 | |
[phat,pci] = mle(‘name’,data) | 置信度为95%的参数估计和置信区间 | |
[phat,pci] = mle(‘name’,data,alpha) | 返回水平α的最大似然估计值和置信区间 | |
[phat,pci] = mle(‘name’,data,alpha,p1) | 仅用于二项分布,pl为试验总次数 |
class方式生成:
pd = makedist(distname,Name,Value)
pd = fitdist(x,distname,'By',groupvar,Name,Value):已知数据求参数(点估计)
% mle:已知数据求参数(极大似然估计)
pd的方法:
方法 | 举例 | 备注 |
---|---|---|
ProbDistUnivParam | ||
cdf | pd.cdf(1) | |
icdf | pd.icdf(0.5) | |
iqr | pd.iqr() | IQR:3/4距差 |
mean | ||
median | ||
std/var | ||
random | ||
paramci | ??? |
随机种子:
rng(seed)%seed是种子,正整数
rng('shuffle')%种子与当前时间有关
rng(seed, generator)%generator时,迭代的算法
rng('default')%seed=0,generator='twister'时的情况
randperm(N)随机排列
1.4 排列组合
- 求n的阶乘
factorial(n) gamma(n+1) v='n!'; vpa(v)
- 求组合(数)
combntns(x,m) %列举出从n个元素中取出m个元素的组合。其中,x是含有n个元素的向量。 nchoosek(n,m) %从n各元素中取m个元素的所有组合数。 nchoosek(x,m) %从向量x中取m个元素的组合
- 求排列(数)
perms(x) %给出向量x的所有排列。 prod(n:m) %求排列数:m*(m-1)*(m-2)*…*(n+1)*n prod(1:2:2n-1) %求(2n-1)!! prod(2:2:2n) %求(2n)!! prod(A) %对矩阵A的各列求积 prod(A,dim) %dim=1(默认);dim=2,对矩阵A的各行求积(等价于(prod(A'))')
- 函数 cumprod() 累积求积函数:
cumprod(n:m) %输出一个向量[n n*(n+1) n(n+1)(n+2) … n(n+1)(n+2)…(m-1)m] cumprod(A) % 若A为矩阵:输出同维数的矩阵,按列累积求积 cumprod(A,dim) % A为矩阵,dim=1或2,dim=1,默认,与上面一样;dim=2,按行累积求积。
列出排列组合:
randperm(6) %随机全排列
b = perms([1 1 1 0 0 0]) $全排列
b=nchoosek([1 1 1 0 0 0],3) $全组合
b = perms([1 1 1 0 0 0]); %列出[1 1 1 0 0 0]所有的排列,此时就是6的全排列等于720
b = unique(b,'rows'); %找出所有排列中的唯一值,共20个
1.5 多元线性回归
[b,bint,r,rint,stats]=regress(y,x,alpha) (调整x为x=[ones(size(x),x)])
b:系数,bint:系数的置信区间
r:残差,rint:残差的置信区间
stats:用于检验显著性,包含:相关系数的平方R^2,F,F对应的p(p<alpha时,方程显著),残差的方差(前两个越大越好,后两个越小越好)
rcoplot(r,rint) %画残差和置信区间,可以找出异常点
1.5.1 多项式回归
[p,S]=polyfit(x,y,m)%m是次幂 p是系数,S是误差矩阵
polytool(x,y,m,alpha)%画图
Y=polyval(p,x) 求预测值
[Y,delta]=polyconf(p,x,S,alpha),预测值和置信区间Y±delta
多元二次回归
rstool(x,y,'model',alpha)
%linear:线性
%purequadration纯二次
%interaction纯交叉
%quadratic以上的和
1.5.2 非线性回归
[beta,r,J]=nlinfit(X,y,FUN,beta0) %高斯牛顿法的非线性最小二乘拟合
beta是拟合系数,r是残差,J是雅克比矩阵 FUN是匿名函数/m文件函数
r' * r就是残差平方和
funtion y=fun(a,x)
ci=nlparci(beta,r,J,alpha) %根据上一条的结果,得出置信区间
nlintool(X,y,FUN,alpha) %!!!功能强大的画图工具!!!
函数 nlpredci %y预测y值
格式 ypred = nlpredci(FUN,inputs,beta,r,J) % ypred 为预测值,FUN与前面相同,beta为给出的适当参数,r为残差,J为Jacobian矩阵,inputs为非线性函数中的独立变量的矩阵值。
[ypred,delta] = nlpredci(FUN,inputs,beta,r,J) %delta为非线性最小二乘法估计的置信区间长度的一半,当r长度超过beta的长度并且J的列满秩时,置信区间的计算是有效的。[ypred-delta,ypred+delta]为置信度为95%的不同步置信区间。
ypred = nlpredci(FUN,inputs,beta,r,J,alpha,'simopt','predopt') %控制置信区间的类型,置信度为100(1-alpha)%。'simopt' = 'on' 或'off' (默认值)分别表示同步或不同步置信区间。'predopt'='curve' (默认值) 表示输入函数值的置信区间, 'predopt'='observation' 表示新响应值的置信区间。nlpredci可以用nlinfit函数的输出作为其输入。
!!!nlpredci nlintool spss线性回归,预测结果都不一样
1.5.3 逐步回归
逐步回归用来解决共线性问题
step(x,y,inmodel,alpha)
h = refcurve(p) %画图:在图中加入一条多项式曲线
tool工具回归 plot后,tool→basic fitting
1.5.4 多重共线性问题
后果:
1、参数估计值β3的方差增大
r23是x2, x3的共线性系数
var(β3)=σ^2/Σx2^2/(1-r23^2)=…/(1-r23^2)
VIF(方差扩大因子) =1/(1-r23^2)
2、参数区间估计时,置信区间变大
3、对系数进行t检验时,由于方差变大,会使得t值变小,从而使得本应否定“系数为0”的原假设被错误的接受
4、R^2很高,F检验的显著性也很高,参数的t检验却不通过。
总结:参数估计值方差增大,置信区间增大。方程通过检验,系数不通过检验。
检验:VIF法,接近1说明共线性很弱,超过10说明共线性严重
补救:
- 剔除变量法(简单粗暴)
- 增加样本容量(很多时候,多重共线性是因为样本量太小)
- 变换模型形式(用一阶差分回归,diff)
- 逐步回归法:
step1:对每一个解释变量和被解释变量做回归,以贡献最大为基础
step2:逐个引入新变量,
if 引入后改进了R^2和F检验,且其它解释变量的t检验显著,保留该变量
elseif 引入后不改进R^2和F检验,且其它解释变量的t检验显著,认为是多余的
elseif 引入后不改进R^2和F检验,且其它解释变量的t检验变得不显著,认为有严重的多重共线性
以下补救直接改变了OLS:
- 岭回归法(是一种有偏估计)
- 主成分法
- 偏最小二乘法
1.5.5 异方差
定义:误差项的方差是变化的(与解释变量有关) 后果: 。。。
1.5.6 自相关
定义:误差项之间纯在相关关系 原因: 1、经济系统的惯性 2、经济活动的滞后效应 3、数据处理造成的相关(插值、平滑化等) 4、蛛网现象 5、模型偏差(省略了某个重要变量)
1.6 PCA
主成份分析
[COEFF,latent,explained] = pcacov(V)
where,
V是协方差矩阵 p-by-p
COEFF是主成份变换矩阵
latent是特征值
explained贡献率
[COEFF,SCORE,latent,tsquare] = princomp(X)
where,
X是原始数据
SCORE是每个样本每个主成份的得分
tsquare是每个数据点的HotellingT2统计量
clear
clc
X=[
76.5 81.5 76.0 75.8 71.7
70.6 73.0 67.6 68.1 78.5
90.7 87.3 91.0 81.5 80.0
77.5 73.6 70.9 69.8 74.8
85.6 68.5 70.0 62.2 76.5
85.0 79.2 80.3 84.4 76.5
94.0 94.0 87.5 89.5 92.0
84.6 66.9 68.8 64.8 66.4
57.7 60.4 57.4 60.8 65.0
70.0 69.2 71.7 64.9 68.9
];
%%
%pcacov
num_variables=size(X,2);
V=cov(X);
[COEFF,latent,explained] =pcacov(V);%核心代码!!!
%COEFF转换矩阵,latent特征值,explained累积
%%
%可视化展示
row_names=cell(num_variables+1,1);
column_names=cell(1,num_variables);
for i=2:num_variables+1
row_names{i}=['X',num2str(i)];
end
for i=1:num_variables
column_names{i}=['PRIN',num2str(i)];
end
disp('---------------协方差矩阵--------------')
disp(V)
disp('---------------特征值------------------')
fprintf('特征值 累积\n')
disp([latent,explained])
disp('-----------------特征向量------------------')
disp([row_names,[column_names;mat2cell(COEFF,ones(1,5),ones(1,5))]])
%%
%直接输入原始数据
[COEFF,SCORE,latent,tsquare] = princomp(X)
%%
%注意:
%得出的COEFF和SCORE可能对应的行/列同时加上一个负号,也对
%X=X+100得出的结论也完全相同
%X=X/100得出的COEFF也相同
%计算SCORE时,每一项要减去均值,例如:
%[X(:,1)-mean(X(:,1)),X(:,2)-mean(X(:,2)),X(:,3)-mean(X(:,3)),X(:,4)-mean(X(:,4)),X(:,5)-mean(X(:,5))]*COEFF
%上式与SCORE完全相同
1.7 FA
[lambda,psi,T,stats,F] = factoran(X,m)
X:n*d,样本容量n,d维
m:返回m个公共因子
lambda:d*m 第(i,j)个元素为第j个因子在第i个变量上的载荷(或系数)
psi:特定方差的最大似然估计
T:包含以下字段:(H0:公共因子个数为m)
loglike 最大对数似然函数
dfe 误差自由度((d-m)^2-(d+m))/2
chisq H0的近似卡方统计量
p H0的右侧显著性水平 p小说明m太少
[lambda,psi,T]=factoran(X,2,'xtype','covariance','delta',0,'rotate','none')
书推荐
- 【强烈推荐】matlab与数学试验 国防工业出版社 全面介绍了matlab的各种应用,值得注意的是:数值积分试验,微分方程试验,随机模拟实验,加密方法试验,分形模拟试验,遗传算法试验
- 傅里叶变换及其应用 布雷斯威尔 西安交通大学出版社 好书!包含拉普拉斯变换,扩散方程,成像技术等,值得看!!
- 数理统计及其在数学建模中的实践(done)
- matlab入门到精通:符号计算,电路模拟,simulink
- 精通matlab,计算篇(插值,傅立叶分析,偏微分方程),计算实例
- 数理统计与数据分析
- matlab实用指南(上下)电子工业出版社 书比较薄,比较深