## 开始 首先数据处理中的最常用的统计方法无非是这四种: (1)比较; (2)预测; (3)分类; (4)相关. |方法|预期结果| |-|-| |比较|掌握均值比较的统计处理方法| |预测|掌握回归分析的使用方法| |分类|区别分类与归类及其统计方法| |降维|掌握相关性处理与数据压缩方法| 因为每个方法对应的原理以及步骤处理方法网上都有详细说明,我就不过多赘述了; 我只做下总结以及每种方法适应的场景,并且举一些简单的例子。 ### (1)比较 方差分析 > 主要用来分析==某一个或几个因素==对指标是否有==显著影响==。 方差分析中要研究的因素通常是分类型的自变量,指标则是数值型的因变量。对于每一个分类型自变量,按照分类都拥有不同的水平(代表不同的总体),通过检验各总体的均值是否相等来判断分类型自变量对数值型因变量有无显著的影响。在方差分析中,我们通常把试验数据的总离差(或总方差)分解为各因素的离差和误差的离差,然后利用这些离差来构造检验统计量从而实现上述的检验。 差分析分为单因素方差分析和多因素方差分析以及协方差分析。 ==单因素==(下面所有变量的值需要看当时的数据矩阵定,我只是随便设置个数) ``` data ex;do a=1 to 3;do i=1 to 5 ; input x @@; output;end;end; cards; 数据 ; proc anova; class a;model x=a; means a/duncan cldiff;run; ``` ==双因素==(一样) ``` data ex;do a=1 to 3;do b=1 to 5; input x @@;output;end;end; cards; 数据 ; proc anova;class a b;model x=a b; means a b/duncan cldiff;run; ``` ==协方差分析== 这种不是在试验中控制某个因素,而是在试验后对该因素的影响进行估计,并对试验指标的值作出调整的方法称为统计控制,可以作为试验控制的辅助手段。以统计控制为目的,综合线性回归分析与方差分析所得到的统计分析方法,称为协方差分析,所需要统计控制的一个或多个因素,例如苹果树的长势,又如动物的初重等等称为协变量。 ``` data ex; do a=1 to 3;do i=1 to 5; input x y @ @;output ;end;end; cards; 数据 ; proc glm;class a;model y=x a/solution; lsmeans a/stderr pdiff;run; ``` ==双因素协方差分析-不考虑交互作用== ``` data ex;do a=1 to 3 ;do b=1 to 5 ; input x y @ @;output; end; end; cards; 数据 ; proc glm;class a b ;model y=x a b/solution; lsmeans a b/stderr pdiff;run; ``` ==双因素协方差分析-考虑交互作用== ``` data ex; do a=1 to 4; do b=1 to 2; do i=1 to 2;input x y @@;output;end;end;end; cards; 数据 proc glm; class a b;model y=x a b a*b/solution; lsmeans a b/stderr pdiff;run; ``` ### (2)预测 预测比较常用的是根据已有的数据推测未来一天或者某一阶段的数据 除了利用神经网络建立模型之外([利用神经网络预测我在这文中有写到](https://blog.51cto.com/nailaoer/2773670),但是主要还是利用工具箱调整神经元,没有自主建立,仅作参考),目前用的最多的还是==回归==; 主要分为一元线性和非线性和多元线性; ==一元线性回归== ``` data ex;input x y @@; cards; 数据 ; proc gplot; plot y*x; symbol i=rl v=dot; proc reg;model y=x/cli; run; ``` ==一元非线性回归== ``` data ex;input x y @@; x1=1/x;lx=log(x);ly=log(y); cards; 数据 ; proc gplot; plot y*x; symbol i=spline v=star; proc reg;model y=x1; proc reg;model ly=lx; proc reg;model ly=x;run; ``` 其中可能涉及计算剩余平方和Q ``` data ex;input x y @@; x1=1/x;lx=log(x);ly=log(y); y1=输出的方程1; y2=输出的方程2; y3=输出的方程3; ... cards; 数据 ; proc print;var q1-q3;run; ``` ==多元线性回归== ```data ex;input y k s l t @@; x1=log(k);x2=log(s);x3=log(l);y1=log(y); cards; 数据 ; proc reg;model y1=x1 x2 x3 t ; run; ``` ```data ex;input y x1-x3 t @@; y1=log(y);z1=log(x1);z2=log(x2);z3=log(x3); cards; 数据 ; proc reg;model y1=z1-z3 t/selection=stepwise;run; ``` 其实生活中还有部分情况会利用到==最优尺度回归== 对于多变量、多层次、多约束、不确定性高的非线性规划问题,适合用最优尺度回归模型。 比如分析航班飞行计划或者配车调度问题与天气或者温度是否有关系时; 航班数据一般为数字;但是天气信息多为阴天、晴天、雷雨等; 这时候为了达到近似线性的目的,反复迭代求解,可以利用最优尺度回归; 前期数据量化可以利用高斯牛顿; 根据Gauss-newton求出来的系数再进行最优广度回归,因为用SPSS会很简单,网上应该也有教程,就不具体表述了,只给个结果图作为分析吧。 (随便找了一张图,侵权删)  分析上图结果不考虑名义变量的情况下易见4变量与整体呈明显的负相关,而2因子与总人数呈明显的正相关。根据sig值本问为0.000<0.5,说明模型显著,具有统计学意义。 调整的R方为0.519,可以认为最优尺度回归模型拟合性能优秀。   上图是用spss出的两个数据流,可以看到还是把多变量、多层次、多约束、不确定性高的非线性规划问题拟合的比较优秀的~ ### (3)分类 分类最基本的还是==聚类分析==与==判别分析== 判别指标应该选取互不相关的、对已分组数据区分效力强的指标。由此可知,判别变量的选取涉及到变量间的相关(共线性 问题),各指标均值在不同组之间的均值是否有显著差异(方差分析问题)。此问题的解决采用类似多元逐步回归的方法,SAS中利用stepdisc过程来实现。 ==判别分析== ``` data ex19_2; input x1 x2@@; cards; 数据 ; proc discrim data=out testdata= ex19_2 out=sdf testlist; class grp; var x1 x2; run; ``` ``` proc discrim data=ex19_1 outstat=out testdata= ex19_2 testout=sdfh simple anova manova pool=test listerr crosslist; class grp; var x1 x2; priors prop; run; ``` 聚类分析 ``` data ex18_2; input id x1-x16; cards; 数据 ; proc cluster data=ex18_2 method=average outtree=tree rsquare pseudo; var x1-x16; id id; run; proc tree data=tree horizontal space=1 page=1; id id; run; ``` 随便找了一张图,侵权删  可以很清晰,具体分为几类,CCC值只要达到顶峰就好,从上图看其实分成3类是比较合理的 20只能单拎出来算作一个样本,其余样本按照图中分成两组。 一组:1 7 2 3 4 5 9 10 11 18 16 22 二组:6 12 14 15 13 19 23 21 24 17 8 三组:20 ### 压缩(降维度) 降维最基本的还是==主成分分析==与==因子分析== 主成分分析其实大家都很懂了,提取几个重要主成分,起到降维的作用,我这还是主要说下因子分析 因子分析基本思想 其实多元线性回归分析、主成分分析等,它们的共同特点是讨论内容为可测量变量之间的相互关系,即所分析的这些变量是可以直接观察或测量得到的。但是,在医学研究中,很多情况下我们所要研究的变量是不能直接测量的。例如,研究家庭环境、社会环境和学校环境对儿童智商的影响,这四个变量都是不能或不易直接观测得到的。我们称这种不能或不易直接观测得到的变量为潜在变量或潜在因子。虽然这些潜在变量不能直接测量,但是它们是一种抽象的客观存在,因此一定与某些可测量变量有着某种程度的关联。例如,脑部疾病患者的意识清醒状态是一个不可测变量,但可以通过患者的语言能力、辨识能力、记忆能力、理解能力等一系列可观测的指标来反映。 > 对于多指标数据中呈现出的相关性,是否存在对这种相关性起支配作用的潜在变量?如果存在,如何找出这些潜在因素?这些潜在因素是怎样对原始指标起支配作用的? 例如,随着年龄的增长,儿童的身高、体重会随着变化,具有一定的相关性,身高和体重之间为何会有相关性呢?因为存在着一个同时支配或影响着身高与体重的生长因子。那么,我们能否通过对多个变量的相关系数矩阵的研究,找出同时影响或支配所有变量的共性因子呢? 遇到这些问题时都可以通过因子分析来解决。 可以说,因子分析是主成分分析的推广,也是一种把多个变量化为少数几个综合变量的多变量分析方法,其目的是用有限个不可观测的隐变量来解释原始变量之间的相关关系。 作用:1、减少分析变量个数;2、通过对变量间相关关系探测,将原始变量进行分类。即将相关性高的变量分为一组,用共同的潜在因子代替该组变量。 ==主成分分析== ``` stdr=std(dataset); %求个变量的标准差 [n,m]=size(dataset); %定义矩阵行列数 sddata=dataset./stdr(ones(n,1),:); %将原始数据采集标准化 sddata %输出标准化数据 [p,princ,eigenvalue,t2]=princomp(sddata);%调用前三个主成分系数 p3=p(:,1:3); %提取前三个主成分得分系数,通过看行 出对应的原始数据的列,每个列在每个主成分的得分 p3 %输出前三个主成分得分系数 sc=princ(:,1:3); %提取前三个主成分得分值 %输出前三个主成分得分值 s e=eigenvalue(1:3)'; %提取前三个特征根并转置 M=e(ones(m,1),:).^0.5; %输出前三个特征根并转置 compmat=p3.*M; %利用特征根构造变换矩阵 per=100*eigenvalue/sum(eigenvalue); %求出成分载荷矩阵的前三列 per %求出各主成分的贡献率 cumsum(per); figure(1) pareto(per); t2 figure(2) plot(eigenvalue,'r+'); hold on plot(eigenvalue,'g-'); ``` ==因子分析==(提取数据的行和列是随便写得数字) ``` [X,textdata] = xlsread(**); X = X(:,3:end); varname = textdata(4,3:end); obsname = textdata(5:end,2);% [lambda,psi,T,stats] = factoran(X,4) %计算贡献率,因子载荷矩阵的列元素的平方和除以维数 Contribut = 100*sum(lambda.^2)/8 CumCont = cumsum(Contribut) %计算累积贡献率 obsF = [obsname, num2cell(F)] %因子得分在一个元胞数组中显示 F1 = sortrows(obsF, 2) ; F2 = sortrows(obsF, 3); head = {‘’}; result1 = [head; F1] result2 = [head; F2] plot(-F(:,1),-F(:,2),’k.’);%作因子 xlabel(‘’); ylabel(‘’); gname(obsname);%交互式添加各散点的标注 ``` ### (4)相关 其实相关性预测那里提的就很清楚了 譬如多元逐步线性回归只有存在相关性的前提下才会进入方程,不然是会被剔除的; 相关性的因素从相关性系数上就能观察出来,从R系数上也能判断出来显著性; 我这里只提一下相关性的可视化: 使用R语言中的corrplot()函数可以实现相关性的可视化(这里需要安装使用到corrplot包) 以下图为例:  其中前三个变量分别为time、industry、education background,其自身相关性均为1在图中显示的为最深的颜色,各个变量之间也具有一定的相关性,第4个变量为total demand,是对应于前三个自变量的一个因变量。直观地看出各个因变量和自变量之间也具有较高的相关性,用不同颜色表示了相关性的强度,根据最右边的颜色带来看,越接近蓝色说明相关性越高。其中圆形的大小也说明了行惯性的大小。