精华内容
下载资源
问答
  • NUMPAGES 数据分析方法数据处理流程实战案例 大数据时代我们人人都逐渐开始用数据眼光来看待每一个情况事物确实数据直观明了传达出来信息让人一下子就能领会且毫无疑点只是前提是数据本身真实性和准确度要有...
  • 2016年上半年系统分析师案例分析真题 全国计算机技术与软件专业技术资格(水平)考试 2016年下半年 系统分析师 下午试卷 I (考试时间 13:30~15:00 共 90 分钟) 请按下表选答试题 试题号 一 二~五 选择方法 必...
  • 关于后悔值计算法的案例说明 某企业准备投资一个新项目拟定要比较分析的备选方案有三个分别是ABC三种不同的项目预计将来可能出现的经营形势有好一般差三种情况现无法把握每种情况出现的概率但可预测出计划期内各方案...
  • 该资源包括了几个关于生产运作的案例,分别设计运营管理、运营战略、设计、计划和控制。
  • GAME模式案例分析 例 收集事实米粉...岗位上个别员工将粉先烫好放在工作台上待售有3次 本次来货米粉比原来计划1对生滚岗位10名员工进行一次项目训练关于米粉烫制时间和岗位保存时间 张三7月20日前 组织厨
  • 这是我在csdn博客的第2篇技术文章,本来按原计划是要介绍开源 ajax框架buffalo的第2部分,即js<...我选了比较简单且大家也比较熟悉的案例分析,案例虽然简单,但是基本的分析方法和推导过程还
  • 介绍了多种多样的关于如何构建这样的测试包的方法。选择和你质量风险管理需求相一致的技术并且使之适应你的具体情况,敏捷地监督已计划的测试的执行过程,这样你就可以拥有可靠的测试执行过程。
  • 主成分分析和因子分析的理论与速成应用丨R语言和SPSS比较案例小卫哥之数据分析R语言学习者、爬虫、SPSS、民谣​关注他13 人赞了该文章本章内容□ 主成分分析□ 探索性因子分析□ 理解其他潜变量模型学习计划:背景在...

    主成分分析和因子分析的理论与速成应用丨R语言和SPSS比较案例

    13 人赞了该文章
    本章内容
    □ 主成分分析
    □ 探索性因子分析
    □ 理解其他潜变量模型

    学习计划:

    背景

    在实际的科学研究中,为了更好地、全面地、完整地把握和认识问题,我们往往对反映问题的多个变量进行大量观测,尽可能多地收集关于分析对象的数据信息。在大多数情况下,这些变量之间可能存在着相关性,从而增加了数据分析的复杂性。为了更能充分有效地利用数据,通常希望用较少的指标来代替原先较多的变量,同时又要求这些较少的指标尽可能多地反映原始变量的信息,而这些指标之间又互不相关。在本章中的主成分分析和因子分析就是解决这类问题的方法之一。

    主成分分析(PCA)是一种数据降维技巧,它能将相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。例如,使用PCA可将30个相关(很可能冗余)的环境变量转化为5个无关的成分变量,并且尽可能地保留原始数据集的信息。

    探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法。它通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系。

    PCA与EFA模型间的区别参见下图。

    主成分(PC1和PC2)是观测变量(X1到X5)的线性组合。形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证各主成分间不相关。

    什么叫最大化各主成分所解释的方差?如何验证各主成分间的独立性?

    因子(F1和F2)被当做观测变量的结构基础或“原因”,而不是他们的线性组合。代表观测变量方差的误差(e1到e5)无法用因子来解释。图中的圆圈表示因子和误差无法直接观测,但是可通过变量间的相互关系推导得到。在本例中,因子间带曲线的箭头表示它们之间的相关性。在EFA模型中,相关因子是常见的,但并不是必须的。

    1.R中的主成分和因子分析丨R

    R的基础安装包提供了PCA和EFA的函数,分别为princomp()和factanal()。本章我们将重点介绍psych包中提供的函数。它们提供了比基础函数更丰富和有用的选项。另外,输出的结果形式也更为社会学家所熟悉,与其他统计软件如(SAS和SPSS)所提供的输出十分相似。

    最常见的EFA处理步骤如下:

    1. 数据预处理。PCA和EFA都根据观测变量间的相关性来推导结果。用户可以输入原始数据矩阵或者相关系数矩阵到principal()和fa()函数中。若输入初始数据,相关系数矩阵将会自动计算,在计算前请确保数据中没有缺失值。
    2. 选择因子模型。判断是PCA(数据降维)还是EFA(发现潜在结构)更符合你的研究目标。如果选择EFA方法,你还需要选择一种估计因子模型的方法(如最大似然估计)。
    3. 判断要选择的主成分/因子数目。
    4. 选择主成分/因子。
    5. 旋转主成分/因子。
    6. 解释结果。
    7. 计算主成分或因子得分。

    ******************************************************************************************

    一、主成分分析

    2.主成分分析丨SPSS

    2.1主成分分析原理和方法

    主成分分析(Principal Component Analysis)的思维就是利用降维思想,将多个互相关联的数值变量转化成少数几个互不相关的综合指标的统计方法。这些综合指标就是原来多个变量的主成分,每个主成分都是原始变量的线性组合,并且各个主成分之间互不相关。

    主成分分析的任务之一就是计算主成分,计算步骤是:首先将原有的变量标准化,然后计算各变量之间的相关矩阵、该矩阵的特征根和特征向量,最后将特征根由大到小排列,分别计算出对应的主成分。

    主成分分析的另一个任务是确定主成分的个数,确定方法主要有两种:

    1. 累计贡献率:当前k个主成分的累计贡献率达到某一特定值(一般采用70%以上)时,则保留前k个主成分;
    2. 特征根:一般选取特征根≥1的主成分。

    2.2 主成分分析中的相关概念

    1. 特征根(Eigenvalue):表示主成分影响力度大小的指标,即引入该主成分后可以解释平均多少原始变量的信息。如果特征根小于1,说明该主成分的解释程度还不如直接引入一个原始变量的平均解释程度大,因此在确定主成分个数时,常常选取特征根大于1的主成分。
    2. 主成分Zi的方差贡献率,计算公式为:

    式中分子表示主成分Zi的方差在全部方差中的比重。这个值越大,表明主成分Zi综合原始变量信息的能力越强。

    3.累计贡献率:前K个主成分的累计贡献率定义如下,表示前K个主成分累计提取了原始变量多少的信息:

    2.3 主成分分析的用途

    主要的用途我们在这里介绍两种常用的:

    1. 主成分评价:在进行多指标综合评价时,由于要求结果客观、全面,就需要从各个方面用多个指标进行测量,但这样就会使得各观测指标间存在信息重叠,同时还存在量纲、累加时如何确定权重系数等问题。因此使用主成分分析方法进行信息的浓缩,并解决权重的确定等问题。
    2. 主成分回归:在线性模型中,常用最小二乘法求回归系数的估计。但由于共线性的存在,最小二乘法的估计结果并不是很理想。这时我们可以考虑主成分回归求回归系数的估计,所谓主成分回归使用原始自变量的主成分代替原始自变量做回归分析。多重共线性是由于自变量之间关系复杂、相关性大引起的,而主成分既保留了原指标的绝大部分信息,又有主成分之间互不相关的优点,故借用主成分替代原始指标后,再用最小二乘法建立主成分与目标变量之间的回归方程,所得的回归系数估计能克服“估计不稳定”的缺点。但主成分回归不是无偏估计。

    2.4 实例与操作丨SPSS

    实例:某研究单位测得20名肝病患者4项肝功能指标:转氨酶(x1)、肝大指数(x2)、硫酸锌浊度(x3)、甲胎球蛋白(x4),试做主成分分析。

    1. 操作:(用软件,比较简单,这里不再介绍)
    2. 结果解读:

    (1)统计描述:包括均数、标准差和样本量,如下图所示:

    (2)相关矩阵:包含偏相关系数及其相应的P值,如下图所示:

    (3)主成分结果如下图所示:包括特征根由大到小的排列顺序、各主成分的贡献率和累计贡献率:第一主成分的特征根为1.718,它解释了总变异的42.956%,第二主成分的特征根为1.094,解释了总变异的27.338%。前两个主成分的特征根均大于1,累计贡献率达到了70.295%。由于第三个主成分的特征根接近于1,且其贡献率与第二主成分相近,故本例选取3个主成分,此时累计贡献率达到了94.828%。

    (4)成分矩阵如下图:可见第一主成分包含原变量转氨酶(x1)和肝大指数(x2)的信息,因此第一主成分可作为急性肝炎的描述指标。类似的第二主成分包含原变量硫酸锌浊度(x3)的信息,可作为慢性肝炎的描述指标。第三成分可作为原发性肝癌的描述指标。

    (5)如下为因子的得分系数矩阵。这是主成分分析的最终结果,通过该系数矩阵可以将主成分表示为各个变量的线性组合。本题可以写出三个主成分的表达式:

    Z1=0.534*stdx1+0.526*stdx2+0.067*stdx3+0.124*stdx4;
    Z2=0.091*stdx1-0.271*stdx2+0.865*stdx3+0.292*stdx4
    Z3=-0.242*stdx1+0.059*stdx2-0.273*stdx3+0.939*stdx4

    其中stdxi(i=1、2、3、4)表示指标变量:

    stdx1=(x1-138)/88.888
    stdx2=(x2-2.325)/1.0548
    stdx3=(x3-15)/7.420
    stdx4=(x4-35.5)/21.879

    (6)成分得分协方差矩阵:

    3 主成分分析丨R

    PCA的目标是用一组较少的不相关变量代替大量相关变量,同时尽可能保留初始变量的信息,这些推导所得的变量称为主成分,它们是观测变量的线性组合。如第一主成分为:

    它是k个观测变量的加权组合,对初始变量集的方差解释性最大。第二主成分也是初始变量的线性组合,对方差的解释性排第二,同时与第一主成分正交(不相关)。后面每一个主成分都最大化它对方差的解释程度,同时与之前所有的主成分都正相交。理论上来说,你可以选取与变量数相同的主成分,但从实用的角度来看,我们都希望用较少的主成分来近似全变量集。下面看一个简单的示例。

    数据集USJudgeRatings包含了律师对美国高等法院法官的评分。数据框包含43个观测,12个变量。如下表列出了所有的变量。

    3.1 判断主成分的个数丨R

    以下是一些可用来判断PCA中需要多少个主成分的准则:

    • 根据先验经验和理论知识判断主成分分数;
    • 根据要解释变量方差的积累值的阈值来判断需要的主成分数;
    • 通过检查变量间kxk的相关系数矩阵来判断保留的主成分数。

    最常见的是基于特征值的方法。每个主成分都与相关系数矩阵的特征值相关联,第一主成分与最大的特征值相关联,第二主成分与第二大的特征值相关联,依次类推。Kaiser-Harris准则建议保留特征值大于1的主成分(此与前面一部分介绍的理论一致),特征值小于1的成分所解释的方差比包含在单个变量中的方差更少。

    利用fa.parallel()函数,你可以同时对三种特征值判别准则进行评价。对于11种评分,代码如下:

    > install.packages("psych")
    > library(psych)
    > fa.parallel(USJudgeRatings[,-1],fa="pc",n.iter = 100,
    +         show.legend=F,main="Scree plot with parallel analysis")
    The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
    Parallel analysis suggests that the number of factors =  NA  and the number of components =  1 
    

    评价美国法官评分中要保留的主成分个数。碎石图(直线与X符号)、特征值大于1准则(水平线)和100次模拟的平行分析(虚线)都表明保留一个主成分即可。

    三种准则表明选择一个主成分即可保留数据集的大部分信息。下一步是使用principal()函数挑选出相应的主成分。

    3.2 提取主成分

    之前已经介绍过,principal()函数可以根据原始矩阵或者相关系数矩阵做主成分分析。格式为:

    principal(r,nfactors=,rotate=,scores=)
    

    其中:

    • r是相关系数矩阵或原始数据矩阵;
    • nfactors设定主成分系数(默认为1);
    • rotate指定旋转的方法(默认最大方差旋转(varimax));
    • scores设定是否需要计算主成分得分(默认不需要)。

    使用代码清单14-1中的代码可获取第一主成分。

    代码清单14-1 美国法官评分的主成分分析

    > library(psych)
    > pc <- principal(USJudgeRatings[,-1],nfactors = 1)
    > pc
    Principal Components Analysis
    Call: principal(r = USJudgeRatings[, -1], nfactors = 1)
    Standardized loadings (pattern matrix) based upon correlation matrix
          PC1   h2     u2 com
    INTG 0.92 0.84 0.1565   1
    DMNR 0.91 0.83 0.1663   1
    DILG 0.97 0.94 0.0613   1
    CFMG 0.96 0.93 0.0720   1
    DECI 0.96 0.92 0.0763   1
    PREP 0.98 0.97 0.0299   1
    FAMI 0.98 0.95 0.0469   1
    ORAL 1.00 0.99 0.0091   1
    WRIT 0.99 0.98 0.0196   1
    PHYS 0.89 0.80 0.2013   1
    RTEN 0.99 0.97 0.0275   1
    
                 PC1
    

    SS loadings 10.13
    Proportion Var 0.92

    Mean item complexity = 1
    Test of the hypothesis that 1 component is sufficient.

    The root mean square of the residuals (RMSR) is 0.04
    with the empirical chi square 6.21 with prob < 1

    Fit based upon off diagonal values = 1

    此处,你输入的是没有CONT变量的原始数据,并指定获取一个未旋转的主成分。由于PCA只对相关系数矩阵进行分析,在获取主成分前,原始数据将会自动转换为相关系数矩阵。

    PC1栏包含了成分载荷,指观测变量与主成分的相关系数。如果提取不止一个主成分,那么还将会有PC2、PC3等栏。成分载荷(component loadings)可用来解释主成分的含义。此处可以看到,第一主成分(PC1)与每个变量都高度相关,也就是说,它是一个可用来进行一般性评价的维度。

    h2栏指成分公因子方差,即主成分对每个变量的方差解释度。u2栏指成分唯一性,即方差无法被主成分解释的比例(1-h2)。例如,体能(PHYS)80%的方差都可用第一主成分来解释,20%不能。相比而言,PHYS是用第一主成分表示性最差的变量。

    SS loadings行包含了与主成分相关联的特征值,指的是与特定主成分相关联的标准化后的方差值(本例中,第一主成分的值为10)。最后,Proportion Var行表示的是每个主成分对整个数据集的解释程度。此处可以看到,第一主成分解释了11个变量92%的方差。

    3.3 SPSS的例子用R实现

    1.先把数据集导入R

    > library(openxlsx)
    > data <- read.xlsx(“G:/SPSS/本书源数据/21/data01.xlsx”)
    > data
    x1 x2 x3 x4
    1 40 2.0 5 20
    2 10 1.5 5 30
    3 120 3.0 13 50
    4 250 4.5 18 0
    5 120 3.5 9 50
    6 10 1.5 12 50
    7 40 1.0 19 40
    8 270 4.0 13 60
    9 280 3.5 11 60
    10 170 3.0 9 60
    11 180 3.5 14 40
    12 130 2.0 30 50
    13 220 1.5 17 20
    14 160 1.5 35 60
    15 220 2.5 14 30
    16 140 2.0 20 20
    17 220 2.0 14 10
    18 40 1.0 10 0
    19 20 1.0 12 60
    20 120 2.0 20 0

    2.提取主成分:(在SPSS中我们已根据特征根判断,需要三个主成分)

    > library(psych)
    > pc <- principal(data,nfactors = 3)
    > pc
    Principal Components Analysis
    Call: principal(r = data, nfactors = 3)
    Standardized loadings (pattern matrix) based upon correlation matrix
    RC1 RC2 RC3 h2 u2 com
    x1 0.92 0.25 -0.04 0.91 0.092 1.2
    x2 0.92 -0.21 0.12 0.91 0.091 1.1
    x3 0.02 0.99 0.04 0.98 0.021 1.0
    x4 0.04 0.04 1.00 1.00 0.003 1.0
                       RC1  RC2  RC3
    

    SS loadings 1.69 1.09 1.01
    Proportion Var 0.42 0.27 0.25
    Cumulative Var 0.42 0.70 0.95
    Proportion Explained 0.45 0.29 0.27
    Cumulative Proportion 0.45 0.73 1.00

    Mean item complexity = 1.1
    Test of the hypothesis that 3 components are sufficient.

    The root mean square of the residuals (RMSR) is 0.05
    with the empirical chi square 0.51 with prob < NA

    Fit based upon off diagonal values = 0.98

    从上面的结果我们可以查看到与我们SPSS中的数据不一致,经检查,是由于principal()函数中的变量rotate未设置所致,修正后如下:

    > pc4 <- principal(data,nfactors = 3,rotate = “none”)
    > pc4
    Principal Components Analysis
    Call: principal(r = data, nfactors = 3, rotate = “none”)
    Standardized loadings (pattern matrix) based upon correlation matrix
    PC1 PC2 PC3 h2 u2 com
    x1 0.92 0.10 -0.24 0.91 0.092 1.2
    x2 0.90 -0.30 0.06 0.91 0.091 1.2
    x3 0.12 0.95 -0.27 0.98 0.021 1.2
    x4 0.21 0.32 0.92 1.00 0.003 1.4
                       PC1  PC2  PC3
    

    SS loadings 1.72 1.09 0.98
    Proportion Var 0.43 0.27 0.25
    Cumulative Var 0.43 0.70 0.95
    Proportion Explained 0.45 0.29 0.26
    Cumulative Proportion 0.45 0.74 1.00

    Mean item complexity = 1.2
    Test of the hypothesis that 3 components are sufficient.

    The root mean square of the residuals (RMSR) is 0.05
    with the empirical chi square 0.51 with prob < NA

    Fit based upon off diagonal values = 0.98

    所得结果与SPSS中的数据一致。

    3.4 提取主成分的实例丨R

    让我们再来看看第二个例子,它的结果不止一个主成分。Harman23.cor数据集包含了305个女孩的8个身体测量指标。本例中,数据集由变量的相关系数组成,而不是原始数据集。

    同样地,我们希望用较少的变量替换这些原始身体指标。如下代码可判断要提取的主成分数。此处,你需要填入相关系数矩阵(Harman23.cor对象中的cov部分),并设定样本大小(n.obs):

    > library(psych)
    > fa.parallel(Harman23.cor$cov,n.obs = 302,fa=“pc”,n.iter = 100,
    • show.legend=F,main=“Scree plot with parallel analysis”)
      Parallel analysis suggests that the number of factors = NA and the number of components = 2

      与第一个例子类似,图形中的Kaiser-Harris准则、碎石检验和平行分析都建议选择两个主成分。但是三个准备并不总是相同,你可能根据需要依据实际情况提取不同数目的主成分,选择最优解决方案。代码清单14-2从相关系数矩阵中提取了前两个主成分。

      代码清单14-2 身体测量指标的主成成分

      > library(psych)
      > pc <- principal(Harman23.corKaTeX parse error: Expected 'EOF', got '&' at position 35: …tate = "none") &̲gt; pc Principa…cov, nfactors = 2, rotate = “none”)
      Standardized loadings (pattern matrix) based upon correlation matrix
      PC1 PC2 h2 u2 com
      height 0.86 -0.37 0.88 0.123 1.4
      arm.span 0.84 -0.44 0.90 0.097 1.5
      forearm 0.81 -0.46 0.87 0.128 1.6
      lower.leg 0.84 -0.40 0.86 0.139 1.4
      weight 0.76 0.52 0.85 0.150 1.8
      bitro.diameter 0.67 0.53 0.74 0.261 1.9
      chest.girth 0.62 0.58 0.72 0.283 2.0
      chest.width 0.67 0.42 0.62 0.375 1.7
                       PC1  PC2
      

    SS loadings 4.67 1.77
    Proportion Var 0.58 0.22
    Cumulative Var 0.58 0.81
    Proportion Explained 0.73 0.27
    Cumulative Proportion 0.73 1.00

    Mean item complexity = 1.7
    Test of the hypothesis that 2 components are sufficient.

    The root mean square of the residuals (RMSR) is 0.05

    Fit based upon off diagonal values = 0.99

    从代码清单14-2中的PC1和PC2栏可以看到,第一主成分解释了身体测量指标58%的方差,而第二主成分解释了22%,两者总共解释了81%的方差。对于高度变量,两者则共解释了其88%的方差。

    荷载阵解释了成分和因子的含义。第一主成分与每个身体测量指标都正相关,看起来似乎是一个一般性的衡量因子;第二主成分与前四个变量(height、arm.span、forearm和lower.leg)负相关,与后四个变量正相关,因此看起来似乎是一个长度-容量因子。但理念上的东西都不容易构建,当提取了多个成分时,对它们进行旋转可使结果更具解释性。

    3.5 主成分旋转丨R

    旋转是一系列将成分载荷阵变得更容易解释的数学方法,它们尽可能地对成分去噪。旋转方法有两种:使选择的成分保持不相关(正交旋转),和让它们变得相关(斜交旋转)。旋转方法也会依据去噪定义的不同而不同。最流行的正交旋转是方差极大旋转,它试图对载荷阵的列进行去噪,使得每个成分只由一组有限的变量来解释(即载荷阵每列只由少数几个很大的载荷,其他都是很小的载荷)。对身体测量数据使用方差极大旋转,你可以得到如代码清单14-3所示的结果。

    代码清单14-3 方差极大旋转的主成分分析

    > rc <- principal(Harman23.corKaTeX parse error: Expected 'EOF', got '&' at position 38: …e = "varimax")
    &̲gt; rc
    Principa…cov, nfactors = 2, rotate = “varimax”)
    Standardized loadings (pattern matrix) based upon correlation matrix
    RC1 RC2 h2 u2 com
    height 0.90 0.25 0.88 0.123 1.2
    arm.span 0.93 0.19 0.90 0.097 1.1
    forearm 0.92 0.16 0.87 0.128 1.1
    lower.leg 0.90 0.22 0.86 0.139 1.1
    weight 0.26 0.88 0.85 0.150 1.2
    bitro.diameter 0.19 0.84 0.74 0.261 1.1
    chest.girth 0.11 0.84 0.72 0.283 1.0
    chest.width 0.26 0.75 0.62 0.375 1.2
                       RC1  RC2
    

    SS loadings 3.52 2.92
    Proportion Var 0.44 0.37
    Cumulative Var 0.44 0.81
    Proportion Explained 0.55 0.45
    Cumulative Proportion 0.55 1.00

    Mean item complexity = 1.1
    Test of the hypothesis that 2 components are sufficient.

    The root mean square of the residuals (RMSR) is 0.05

    Fit based upon off diagonal values = 0.99

    列的名字都从PC变成了RC,以表示成分被旋转。观察RC1栏的载荷,你可以发现第一主成分主要由前四个变量来解释(长度变量)。RC2栏的载荷表示第二主成分主要由变量5到变量8来解释(容量变量)。注意两个主成分仍不相关,对变量的解释性不变,这是因为变量的群组没有发生变化。另外,两个主成分旋转后的累积方差解释性没有发生变化(81%),变的只是各个主成分对方差的解释度。

    3.6 获取主成分得分丨R

    在美国法官评分例子中,我们根据原始数据中的11个评分变量提取了一个主成分。利用principal()函数,你很容易获得每个调查对象在该主成分上的得分:

    代码清单14-4 从原始数据中获取成分得分

    > library(psych)
    > pc <- principal(USJudgeRatings[,-1],nfactors = 1,score=T)
    > head(pcKaTeX parse error: Expected 'EOF', got '&' at position 367: …"><span></span>&̲gt; cor(USJudge…CONT,pcKaTeX parse error: Expected group after '^' at position 112: …可能会有不一样的结果,开个玩笑^̲_^)</p><p> 当主成分…cov,nfactors = 2,rotate = “varimax”)
    > round(unclass(rcKaTeX parse error: Expected 'EOF', got '&' at position 853: …"><span></span>&̲gt; library(psy…weights),3)
    PC1 PC2 PC3
    x1 0.534 0.091 -0.242
    x2 0.526 -0.271 0.059
    x3 0.067 0.865 -0.273
    x4 0.124 0.292 0.939

    显然,从结果上看,两者的数据结果都一致。

    4 R与SPSS使用的比较

    ******************************************************************************************

    第二、因子分析丨SPSS

    背景:许多实际问题不仅涉及的变量众多,而且各个变量之间可能存在在错综复杂的相关关系,这时最好能从中提取少数的综合变量,使其能够包含原变量提供的大部分信息,还要求这些综合变量尽可能地彼此不相关。因子分析就是解决这一问题而提出的统计分析方法。

    因子分析方法能把多个观测变量转换为少数几个不相关的综合指标,这些综合指标往往不是能直接观测到的,但有时却更能反映事物的特点和本质。因此,分析在医学、生物学、经济学等诸多领域都得到了广泛的应用。

    1、概述丨SPSS

    1.1 基本概念

    因子分析是一种通过显在变量,通过具体指标评测抽象因子的分析方法,最早是由心理学家Chales Spearman 在1904年提出的。

    因子分析的基本目的是用少数几个因子去描述多个变量之间的关系,被描述的变量一般都是能实际观测到的随机变量,而那些因子是不可观测的潜在变量。

    因子分析的基本思想是根据相关性的大小把变量分组,使得同组内的变量相关性较高,而不同组内的变量相关性较低。每组变量代表一个基本结构,这些基本结构够成为一个公共因子。对于所研究的问题就可以试图用最少数的不可观测的公共因子的线性函数与特殊因子之和来描述原来观测的每一个分量。

    因子分析可以分为两类,一类为探索性因子分析(Exploratory factor analysis),另一类为确定性因子分析(confirmatory factor analysis)。探索性因子分析通常称为因子分析,主要应用在数据分析的初期阶段,其主要目的是探讨可观测变量的特征、性质及内部的关联性,并揭示有哪些主要的潜在因子肯呢个影响这些观测变量,它要求所找出的潜在因子之间相互独立及有实际意义,并且这些潜在因子尽可能多地表达原可观测变量的信息。确定性因子分析是在探索性因子分析的基础上进行的,当已经找到可观测变量可能被哪些潜在因子影响,而进一步确定每一个潜在因子对可观测变量的影响程度,以及这些潜在因子之间的关联程度时,则可进行确定性因子分析。该分析不要求所找出的这些潜在因子之间相互独立,其目的是明确潜在因子之间的关联性,它是将多个指标之间的关联性研究简化为对较少几个潜在因子之间的关联性研究,其分析结果需进行统计检验,确定性因子分析是结构方程模型分析的第一步。

    1.2 原理和方法

    因子分析的出发点是用较少的相互独立的因子变量代替原来变量的大部分信息,可以用下面的数学模型来表示:

    式中,x1,x2,…,xp为p个原有变量,是均值为0、标准差为1的标准化变量,F1,F2,…,Fm为m个因子变量,m小于p,表示成矩阵形式为:

    式中,F为公共因子,可以理解为高维空间中相互垂直的m个坐标轴;A为因子载荷矩阵,是第i个原有变量在第j个因子变量上的负荷。

    1.3 因子分析中的几个相关概念

    (1)因子载荷aij

    因子载荷aij为第i个变量与第j个公共因子上的相关系数,反映了第i个变量在第j个公共因子的相对重要性。

    (2)变量共同度

    变量共同度,也称公共方差,反映全部公共因子对原有变量xi的总方差的解释性说明比例。原有变量xi的共同度为因子载荷矩阵A中第i行元素的平方和,即:

    hi^{2} 越接近1(原有变量 x_{i} 在标准化前提下,总方差为1),说明公共因子解释原有变量的信息越多。

    (3)公共因子 F_{j} 的方差贡献

    公共因子 F_{j} 的方差贡献定义为因子载荷矩阵A中第 j 列各元素的平方和,即:

    可见,公共因子 F_{j} 的方差贡献反映了因子 F_{j} 对原有变量总方差的解释能力,其值越高,说明因子的重要程度越高。

    1.4 因子分析的基本步骤

    因子分析的核心问题有两个:一个是如何构造因子变量;二是如何对因子变量的命名解释。因此因子分析的基本步骤和解决思路就是围绕这两个核心问题展开的。

    基本步骤:

    1. 确定待分析的原有若干变量是否适合做因子分析。
    2. 构造因子变量。
    3. 利用旋转方法使因子变量更具有可解释性。
    4. 计算因子得分。

    2 实例与操作

    2.1 实例

    (具体数据不再展示)

    2.2 操作过程

    (具体操作不再展示)

    2.3 结果解读

    (1)KMO和Bartlett的检验结果如下图所示:

    KMO统计量为0.585,大于最低标准0.5,适合做因子分析。Bartlett球形检验,拒绝单位相关阵的原假设,P<0.001,适合做因子分析。

    (2)主成分列表如下图所示:

    结果显示前3个主成分的特征值大于1,它们的累计贡献率达到了72%,故选取前3个公共因子。

    (3)公因子方差结果如下图所示:

    结果显示,每一个指标变量的共性方差大部分在0.5以上,且大多数接近或超过0.7,说明这3个公因子能够较好地反应原始各项指标变量的大部分信息。

    (4)碎石图如下图所示,结合特征根曲线的拐点及特征值,从图上可以看出,前3个主成分折现坡度较陡,而后面的趋于平缓,该图侧面说明了取前3个主成分为宜。

    (5)旋转前的因子载荷如下图所示。根据0.5原则,各项指标在各类因子上的解释不明显,为了更好解释各项因子的意义,需要进行旋转。

    (6)正交旋转矩阵如图所示。该结果是通过4次方最大旋转得到的正交变换矩阵。

    (7)旋转后的因子载荷如下图所示,经过旋转后,指标出发点、发展机会、权利距离、职位升迁、领导风格在因子1上由较大载荷。指标合作性、分配、工作投入在因子2上有较大载荷。指标社会地位在因子3上有较大载荷。故因子1可称为发展潜力因子,因子2可称为协作能力因子,因子3是单指标因子,可称为社会地位因子。

    ******************************************************************************************

    三 主成分分析与因子分析的区别与联系丨SPSS

    SPSS
    R(编程语言)
    数据分析
    赞同 132 条评论
    分享
    收藏
    赞同 13
    分享

    文章被以下专栏收录

      数据分析和数据挖掘

      数据分析和数据挖掘

      让专业的数据分析和数据挖掘,给公司业务带来一定性帮助
      关注专栏

    推荐阅读

      SPSS—因子分析案例+求助

      老实讲这个分析用到的机会实在是太少了,导致我都怀疑是不是只有特定领域才用得到,或者压根就完全用不到?而且也实在分不清,在实际应用中,它与主成分分析有个毛的区别?所以写这篇纯粹为…

      SPSS超详细教程:主成分分析

      SPSS超详细教程:主成分分析

      SPSS——因子分析

      基本原理:针对变量作因子分析,称为R型因子分析;对样本做因子分析,称为Q型因子分析。基本步骤:步骤1:确认待分析的原始变量之间是否存在较强的相关关系。可采用计算“相关系数矩阵”“…

      快速掌握SPSS数据分析

      快速掌握SPSS数据分析

    2 条评论

    切换为时间排序
    很棒!

    谢谢!

    展开全文
  • 关于企业信息化建设长远发展的计划、制定与企业发展战略相一致信息化发展战略
  • 信息系统项目管理师-信息系统项目管理师--几个案例分析 阅读下列关于项目进度控制方面叙述,回答问题1和问题2。 某信息系统项目合同工期为23个月,其施工网络计划如下图所示。(时间单位:月)
  • 原本按原计划是要介绍开源 ajax ...选了比较简单且大家也比较熟悉的案例分析,案例虽然简单,但是基本的分析方法和推导过程还是一致的主要想讲的原始需求是怎么通过层层分析和推导而形成最后可执行代码的限于自

    原本按原计划是要介绍开源 ajax 框架 buffalo 第 2 局部, 这是 csdn 博客的第 2 篇技术文章。即 js<>java 序列化,这里面涉及不少设计模式的运用和 JA VA SE 知识,代码精简,比较精彩。但是由于个人时间有限,抉择之后,打算先写一篇关于面向对象分析的文章,也算是对自己过去 1 年多在这方面学习的总结。选了比较简单且大家也比较熟悉的案例来分析,案例虽然简单,但是基本的分析方法和推导过程还是一致的主要想讲的原始需求是怎么通过层层分析和推导而形成最后可执行代码的限于自己的个人能力,如果有谬论和错误之处,还望同行多指教和帮助,共同进步。

     

    原始需求描述如下:某公司鉴于业务和员工的快速发展,为了提升整体工作效率,公司准备开发一套员工报账系统,取代原来的人工处置方式,更加方便的服务于员工日常的账务操作。财务部门能够通过账务系统定期向各部门负责人反映账务统计情况,并设置和维护相关额度准则。系统应该具有基于先进技术的操作界面。

     

    这段描述里包含的业务目标大致有二:

     

    1.        为员工提供账务的自动化操持,提高办事效率,方便员工。

    2.        方便财务部门管理好账务信息。

     

      这些业务目标一般在项目的招标书里都有相关的描述,也可以由开发方整理得出。之所以这里要把业务目标列出来,因为我所采取的方法里,业务目标是进行需求分析的第一步,接下来的推导过程和业务模型的建立都是根据业务目标开始的

     

       整理出了业务目标后,接下来先不要一头扎进具体的业务流程和业务细节之中去,应该先把涉众找出来,整理出一份涉众分析报告,涉众就是和这个项目相关的人。也不要就去考虑技术实现细节,要用什么先进的技术,界面如何美观,性能如何优越等等,虽然这些确实重要,但是相比起来,忠实的实现涉众的期望,满足涉众的需求才是最为重要,也是一个项目成败的关键。实际的项目中,可以通过需求调研找出相关的涉众,这里我就直接列出本案例的涉众分析报告:

     

      员工:公司的正式录用雇员; 期望:通过网上料理账务业务申请,计算机控制流程。

     

      部门经理:部门负责人,负责审核员工提交的申请;期望:方便审核操作,通过计算机代替原来的手工审核方式。

     

      公司主任:公司负责人,负责 2 次审核员工提交的申请;期望:方便审核操作,通过计算机代替原来的手工审核方式,界面友好易用。

     

      财务主任:公司财务部门负责人,负责发放报账款项; 期望:通过计算机转账的方式替代原来的人为付款方式。

     

    以上的涉众分析报告是很简单的实际稍微复杂些的项目中要下功夫好好整理清楚一份完整的文档才是因为接下来的业务用例获取工作也是此基础上展开的

     

    这里先罗嗦下业务用例和平时开发中的开发人员从项目经理或者需求人员手中拿到需求文档中的用例什么区别。按我个人理解来说后者是系统用例,两者的关键区别在于笼统层次和用例粒度的不同,系统用例是以人与计算机的每次交互为单位的而业务用例则是较高的层次上用于确立业务需求范围和描述系统功能性需求的也就是说我描述业务用例的时候,可以不用去考虑具体和计算机相关的实现方法和细节,从而降低我人脑需要考虑的复杂度,专注于确立业务需求范围,笼统就是面向对象的优势所在不用像过程化思维那样通盘考虑,因为人脑能接受的信息量是有限的系统用例一般是从业务用例中推导出来的本文之后会有关于这方面的推导过程。

     

      不知道有没跑题,罗嗦了一段,现在回来,分析下本案例中的业务用例获取工作。说到用例,就必需结合边境和业务主角,否则用例的粒度就会出现问题,因为用例是以参与者(业务主角)为核心的由业务主角发起的以达到业务主角完整目标为标准的要获取用例就必需先得出边界,边境有了那么边境外的业务主角就有了那么业务主角对这个边境内的目标就是用例了用 UML 表示如下:

    展开全文
  • <br /> 这是我在csdn...我选了比较简单且大家也比较熟悉的案例分析,案例虽然简单,但是基本的分析方法和推导过程还是一致的,我主要想讲的是原始需求是怎么通过层层分析和推导而形成最后可执行代码的,限于


       这是我在csdn博客的第2篇技术文章,本来按原计划是要介绍开源ajax框架buffalo的第2部分,即js<>java的序列化,这里面涉及不少设计模式的运用和JAVA SE知识,代码精简,比较精彩。但是由于个人时间有限,在抉择之后,打算先写一篇关于面向对象分析的文章,也算是对自己过去1年多在这方面学习的总结。我选了比较简单且大家也比较熟悉的案例来分析,案例虽然简单,但是基本的分析方法和推导过程还是一致的,我主要想讲的是原始需求是怎么通过层层分析和推导而形成最后可执行代码的,限于自己的个人能力,如果有谬论和错误之处,还望同行多指教和帮助,共同进步。

     

    原始需求描述如下:某公司鉴于业务和员工的快速发展,为了提升整体工作效率,公司准备开发一套员工报账系统,取代原来的人工处理方式,更加方便的服务于员工日常的账务操作。财务部门能够通过账务系统定期向各部门负责人反映账务统计情况,并设置和维护相关额度准则。系统应该具有基于先进技术的操作界面。

     

    这段描述里包含的业务目标大致有二:

     

    1.        为员工提供账务的自动化办理,提高办事效率,方便员工。

    2.        方便财务部门管理好账务信息。

     

      这些业务目标一般在项目的招标书里都有相关的描述,也可以由开发方整理得出。之所以这里要把业务目标列出来,是因为我所采取的方法里,业务目标是进行需求分析的第一步,接下来的推导过程和业务模型的建立都是根据业务目标开始的。

     

       整理出了业务目标后,接下来先不要一头扎进具体的业务流程和业务细节之中去,应该先把涉众找出来,整理出一份涉众分析报告,涉众就是和这个项目相关的人。也不要就去考虑技术实现细节,要用什么先进的技术,界面如何美观,性能如何优越等等,虽然这些确实重要,但是相比起来,忠实的实现涉众的期望,满足涉众的需求才是最为重要,也是一个项目成败的关键。在实际的项目中,我们可以通过需求调研找出相关的涉众,这里我就直接列出本案例的涉众分析报告:

     

      员工:公司的正式录用雇员; 期望:通过网上办理账务业务申请,计算机控制流程。

     

      部门经理:部门负责人,负责审核员工提交的申请;期望:方便审核操作,通过计算机代替原来的手工审核方式。

     

      公司主任:公司负责人,负责2次审核员工提交的申请;期望:方便审核操作,通过计算机代替原来的手工审核方式,界面友好易用。

     

      财务主任:公司财务部门负责人,负责发放报账款项; 期望:通过计算机转账的方式替代原来的人为付款方式。

     

    以上的涉众分析报告是很简单的了,在实际稍微复杂些的项目中要下功夫好好整理清楚一份完整的文档才是,因为接下来的业务用例获取工作也是在此基础上展开的。

     

    这里先罗嗦下业务用例和平时开发中的我们开发人员从项目经理或者需求人员手中拿到的需求文档中的用例什么区别。按我个人理解来说后者是系统用例,两者的关键区别在于抽象层次和用例粒度的不同,系统用例是以人与计算机的每次交互为单位的,而业务用例则是在较高的层次上用于确立业务需求范围和描述系统功能性需求的。也就是说我们在描述业务用例的时候,可以不用去考虑具体和计算机相关的实现步骤和细节,从而降低我们人脑需要考虑的复杂度,专注于确立业务需求范围,抽象就是面向对象的优势所在,不用像过程化思维那样通盘考虑,因为人脑能接受的信息量是有限的。系统用例一般是从业务用例中推导出来的,本文之后会有关于这方面的推导过程。

     

      不知道有没跑题,罗嗦了一段,现在回来,分析下本案例中的业务用例获取工作。说到用例,就必须结合边界和业务主角,否则用例的粒度就会出现问题,因为用例是以参与者(业务主角)为核心的,是由业务主角发起的以达到业务主角完整目标为标准的。要获取用例就必须先得出边界,边界有了,那么边界外的业务主角就有了,那么业务主角对这个边界内的目标就是用例了。用 UML 表示如下:

     

     

     

    我们先来看看一个小例子,没有引入边界的概念对获取用例有什么影响,比如我去食堂就餐,要先领取餐具,然后点菜,打菜的阿姨帮忙盛菜,接着我刷卡付款,去盛饭和汤,之后是找座位,最后才开始就餐。那么领取餐具,点菜,刷卡付款之类的算是一个用例吗 ?说算也算,说不算也不算。因为这要根据边界来确定的,我们都知道用例是以主角发起的以完成主角的完整目标为标准的。这里的主角就是我本人,要确定我的目标就必须先确定边界,比如以整个食堂为边界,那么我去食堂的目的就是就餐,就餐才是我的完整目标,而其他诸如领取餐具,点菜,刷卡付款之类的都不是我去食堂的目的,这些只是我完成就餐的步骤而已,但如果把边界粒度降低到食堂的内部,那么这个时候领取餐具,刷卡付款之类的也是一个用例了,虽然都是用例,但是和就餐这个用例的粒度是不同的,因为他们边界所在的抽象层次不同。所以要描述用例就必须先划分出边界来,主角站在边界外对这个边界提出目标,一个目标就是一个用例,否则在描述系统的时候就会出现如我去食堂的目的是刷卡付款这样的笑话来,当然了,除非我去食堂的目的真的只是为了付款。

     

     回到本文的案例中来,开始进行获取业务用例的分析,刚才说了,要获取用例必须先确定好边界,那么怎么确定边界呢 ? 这个时候我们前面划分业务目标的作用就体现出来了,我们可以以每个业务目标为一个边界,因为所有业务目标汇集起来就表示达到了系统建设目标,而针对每个业务目标定义的边界,明确了哪些涉众与这一业务目标有关,他们作为业务主角站在这一边界外提出他们的期望,这些期望作为用例都是为实现这一业务目标服务的,获取业务用例的方向就明确了(不符合这一业务目标的期望则不被采纳)。

     


     

     


     

     

     

    如上图,边界和业务主角都已经有了,接着就是找出用例了,我以员工账务服务边界为例,根据涉众分析报告和客户访谈(这个在实际项目中需要好好历练的,我觉得要有技巧引导客户,还要有较强的总结概括能力吧)得出的。假定我从与客户访谈的结果中得出员工对这个系统的期望和目标有通过计算机申请报销业务,申请借款业务,这两个期望都是与员工账务服务这个特定的业务目标有关的,所以可以作为业务用例被纳入到员工账务服务边界之中。如果假设员工也可以参与管理账务信息,那么得出的员工对系统的期望就不止这两个,但是分析的时候要注意与员工账务服务这一业务目标相关的期望只有申请报销业务和申请借款业务两个,其他的期望是与管理账务信息这个业务目标有关,应当被划分到管理账务信息边界中去。

     

     


     

    有的人可能会问了,貌似部门经理也有对员工账务服务边界有贡献啊,不是有参与审核吗,为啥部门经理审核账单就不能算一个业务用例呢?之所以会出现这个疑惑和误区还是因为没有分清楚边界造成的。因为对于员工账务服务边界来说,处于该边界的之外的业务主角只有员工,而部门经理,公司主任,财务主任都是在这个边界之内的,他们的工作都只是完成业务主角提出的业务用例的一个步骤,在这里他们作为业务工人无权提出业务用例,他们的职责可以在绘制用例场景活动图的时候通过泳道体现出来。

     

     接下来是建立业务模型阶段,建立业务模型的目的是为了通过UML这种对象语言将现实世界描述出来,是我们为了理解客户的业务并和客户达成业务上的理解而建立的模型(我们的系统将要面对的问题领域就是这个样子),它不需要考虑计算机环境,相对于系统模型来说,他没有加入计算机元素,是对现实业务的一种直观的理解。我们平时开发时接触的《软件需求规格说明书》来源于系统模型,他描述的是软件系统要实现的功能范围,和计算机环境密切相关,软件需求只是整个需求过程的一部分,可以从业务需求中推导出来的。

     

     业务模型主要包括业务用例,业务用例实现场景,业务规则,业务用例规约等等,限于个人掌握程度及个人精力所限,本案例中我主要讲述业务用例和业务用例场景图,业务用例场景主要是描述业务用例的执行过程,一般通过活动图中的泳道来绘制,这里以“申请报销”用例来说明:

     

     

        


                                  (报销申请的业务用例场景活动图)

     

     

      其他用例的场景图也是依样画葫芦了,再搭配上业务用例规约的文字描述(用例前置条件,后置条件,流程等等),这个报销申请用例的描述也就基本形成了,所有的业务用例如此之后形成业务模型,然后以业务模型为基础,撰写用户业务需求说明书。

     

       接下来要做的就是引入计算机,降低用例粒度,进入系统模型的建立过程。同样这里也是包括系统用例和系统用例场景,系统用例可以从业务用例场景中推导出来,业务用例场景一般描述为某某做什么,某某做什么,这个某某做什么就是一个备选的系统用例,然后从备选用例中确定系统用例,分析过程如下:

     

       员工申请报销,这是一个填写报账单的过程,是通过计算机完成的,可以直接映射成一个系统用例;

     

       部门经理审核报账单,这是通过计算机来操作决定是否通过审核,可以直接映射成一个系统用例;

     

       部门经理说明(填写)拒绝原因,经过分析,这个备选用例其实是审核报账单的结果之一,也就是说审核报账单中包含了说明拒绝原因这个行为,所以取消部门经理说明(填写)拒绝原因的独立用例资格,将它作为部门经理审核报账单的包含用例。

      公司主任审核报账单,公司主任说明(填写)拒绝原因 同上。

     

      财务主任发放还款,这个备选用例是否能成为系统用例要看情况的,如果财务主任是人为的发放现金或者人为的去银行汇款转账,那么没有通过计算机(意思是该系统)进行操作,就不能算是一个系统用例;而如果财务主任是通过系统提供的转账功能汇款的话,那么就是一个系统用例。回顾涉众分析报告后我们确定这可以成为一个系统用例。

     

            

     

     

      接下来我们绘制系统用例场景,看看他们是如何通过人机交互,通过计算机来实现的,以员工申请报销为例子,通过泳道绘制用例场景图:

     

            

     

     

      其他系统用例的场景图绘制也是依样画葫芦了,这里就省略了。所有系统用例和系统用例场景图绘制出来后,再配合相应的用例规则,用例规约(前置条件,后置条件,流程等),那么完整的系统用例模型就出来了,以此为基础便可以撰写系统需求文档,即软件需求规格说明书。

     

       到此为止,用例已经全部找出来了,接着就是要进入用例实现阶段了,因为用例只是描述了系统应该做什么,是对系统提出的设想,用例实现的目的就是实现需求,把设想变为现实,由于我们采用的是面向对象的方法,所以用例实现的过程就是用对象之间的交互来实现需求的过程。

     

       不少人到这一步,包括我自己,可能直接进入类设计,数据库表结构设计了,但是经常说不清楚类是如何推导出来的,为什么是设计2个类,为什么不是3个类 ? 美其名曰:经验,哈哈,无非就是拍脑袋拍出来的咯,尤其是在业务复杂的大型项目中,这种拍脑袋出来的设计估计要经过反复修改才能满足需求。现在我发现,原来从系统需求到设计之间可以通过分析模型作为过渡,通过分析模型推导出设计模型,推导出设计类。分型模型就是采用分析类(边界类,控制类,实体类)来实现用例场景的一种对象模型,这个抽象层次上需求已经通过对象之间的交互实现出来了,而又不必去关注具体的技术细节,如采用什么语言,什么框架之类的,可能安心的为需求到设计之间的跨越做一个桥梁。绘制分析类图一般需求根据用例场景来推导,先一步步的分析场景中的活动:

     

      创建新申请报账单:这是一条由外面发出的命令,需要用边界对象接受它;

      展现录入新报账单界面:这是一个控制逻辑,需要有控制对象处理;

      输入报账单信息:这是一个人工活动,由边界接受,报账单是一个实体对象;

      提交申请:这是一条外界发出的指令,由边界对象接受;

      验证信息:这是业务规则,通过控制对象来处理;

      保存申请单:这是一段处理逻辑,由控制对象处理,同时,报账单作为实体对象封装了要处理的数据;

      发送邮件通知:这是一段处理逻辑,需要由控制对象处理;

      显示结果:这个是处理结果,用控制对象处理,并反映到边界对象。

     

     

    根据上面的分析,接下来我绘制出员工报销申请用例实现的分析类时序图:

     

           

     

     在绘制该时序图的过程中我们得到了关键对象以及这些对象的方法,接下来把这些对象及其方法绘制在一个图里,定义出他们的关系,就得出了分析类静态图:

     

         

     

       (这个图其实有点小问题,就是这个矩形元素代表的是设计类而不是分析类,分析类的形状应该是绘制时序图那时候的圆形,也没有 void 这个语言层次的东西,我用的建模工具是 EA ,不知道的是工具不支持在分析类中绘制方法,还是我自己没找到。反正 rose 中是可以的)

     

      用分析类对象实现用例场景的过程就是类的推导过程,现在我们已经得到初试的类及其方法,虽然看上去还很粗糙,但已经脱离了需求视角,进入系统设计的视角了。

     

       这些分析类就是我们进行系统设计的基础了,分析类结合采用的具体框架(比如SSH),架构等,就可以推导出设计类,产生设计模型了。

     

       推导设计类的过程由于要结合具体框架,可能要实现某某接口,继承某个抽象类等原因,这里就不说了,等过段时间我再新写一篇文章来说吧。由于我工作中的项目采用 SSH框架,所以我曾经疑惑觉得怎么没有看到 Action 类啊,Service类呢, pojo呢,DAO呢,没看到啊!后来才恍然醒悟,哦,原来所处的抽象层次不同,分析模型的抽象层次比设计模型高,不涉及到具体的框架,架构,语言等实现方式,所以在这个抽象层次上,可以不去考虑实现细节,屏蔽掉无关的信息,而专注于通过分析类的3种对象之间的交互来实现需求,为需求到设计之间搭建桥梁,设计模型就是在分析模型的基础上结合具体框架,架构,语言等实现方式实例化分析模型的过程。完整而全面的分析模型就可以作为系统概要设计文档了。

     

      其实我个人觉得,从业务模型到设计模型(中间可能还有概念模型),到分析模型,再到设计模型,这种建模的过程就是一个降低抽象层次和边界粒度的过程,类似于我们要描述一个东西,比如汽车,我们可以这样说:站在汽车这个抽象层次上,我们看到的是车身,轮胎等边界;降低抽象层次到车身上,我们面对的有方向盘,发动机,座位等边界;站在发动机这个抽象层次上,我们看到的是引擎,活塞等边界。。。。。。。。这个抽象层次可以一直延伸下去,采用这种自顶向下的方法把一个事物描述清楚。抽象层次的好处是无论站在哪个层次上都只需要面对有限的复杂度和结构,从而帮助我们理解清楚这个层次上的对象是如何工作的。边界和抽象层次是相伴的,不同的抽象层次面对的边界粒度就不同。编程中所谓的“针对接口编程”,其实也就是把对对象的认识附加在接口这个边界上,我们只要清楚他能做什么就可以,不需要降低边界粒度去考虑具体实现方式,这样才带来了具体实现可替换的灵活性。

     

       这篇文章就写到这里吧,感觉要再往下写,我目前也是有心无力了,毕竟以我自己目前的能力能写出这么多来也是不容易了,虽然本问中的案例非常简单,但是这种面向对象的分析思路都是一样的。

     

       福州这两天天气好热,我把周末两天都拿来写这篇文章了,都是窝在宿舍里,边吹空调边写。其实一个项目要面对的问题远不止本文所讲,比如要针对某个问题建立领域模型,例如权限系统等,本文也省略了业务规则的分析,尽管如此,我觉得已经基本把自己想要说的表达出来了,以我目前的水平,能说这么多也算有个交代了,至少我觉得自己已经找到了通往面向对象分析的大门了。路漫漫其修远兮啊。。。。。

     

       最后引用面向对象大师Grady Booch在2004年IBM Developer Works Live!大会的访谈中讲过的一段流传甚广的话作为本文的结尾吧:“我对面向对象编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在面向对象兴起运动之前,编程以过程为中心,例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统——我认为,这才是面向对象编程运动的真正胜利”。


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FcBayernMunchen/archive/2010/08/15/5813667.aspx

    展开全文
  • BOM定义理解 BOM应用技巧 BOM层次应用意义 和计划系统关系 和成本核算关系 案例分析;第一层 狭义B OM 狭义上BOM(Bill of Materials)通常称为物料清单就是产品结构Product Structure)仅仅表述是对...
  • 某植树项目,预算是1万元,计划10天内,种100棵树木,每天需要种10颗。到第5天时候,我们发现该项目完成了30棵树木。实际花费4500元。 问: 1求成本偏差,进度偏差。成本绩效,进度绩效。 2如果按照该进度发展下去...


    PV、EV、AC、BAC、EAC、ETC等计算公式含义

    PV Planned Value:计划值

      应该完成多少工作, (按照计划截止目前应该花费的预算)

    AC Actual Cost:实际成本,

      完成工作的实际成本是多少 (截止目前实际的花费)

    EV Earned Value:挣值

      完成了多少预算的工作 (实际完成的工作,按照预算标准应该有的花费)以上三个指标是成本管理最基本的三个概念;

    BAC Budget cost at completion:完工预算

      全部工作的预算是多少?按照原计划,完成所有工作所需的预算成本)不改变成本基准,BAC就不会发生变化.

    EAC Estimate at completion:完工估算

      (全部工作的成本是多少?)它是根据项目的绩效和风险量化对项目最可能的总成本所做的一种预测。(根据截止目前的工作效率和工作方法,如果不采取任何措施,到完工时,需要花费的成本预算)

    ETC :完成尚需成本

    以上6个指标为成本管理的基础指标,其余指标均可根据此6个指标进行计算。


    SPI 进度绩效指标 SPI = EV/PV

    CV 成本差异 
    CV = EV–AC CV>0代表成本节约,好!CPI 成本绩效指数 

    CPI = EV/AC CPI>1代表工作价值高,好!


    SV 进度差异 
    SV = EV–PV SV>0代表进度提前,好!

    SPI 进度绩效指数 
    SPI = EV/PV SPI>1代表实际进度快,好!


    EAC=AC+ETC


    ETC的计算有两种,一种是采取了措施,使目前状态和计划匹配

    那么ETC=(BAC-EV)/(单价)   单价如何算就是 计划的总预算除以计划的总工作量

    一种是没有采取措施,还按目前的状态持续干完

    那么ETC=(BAC-EV)/CPI



    举个例子:某植树项目,预算是1万元,计划10天内,种100棵树木,每天需要种10颗。到第5天的时候,我们发现该项目完成了30棵树木。实际花费4500元。
    问:
    1求成本偏差,进度偏差。成本绩效,进度绩效。
    2如果按照该进度发展下去,完工尚需为多少钱。
    3,如果项目采用了纠正措施,完工尚需多少钱。


    经过分析:我们发现

    第五天的时候

    1答案

    ac=actually cost真实花费值=4500元

    pv=plan value计划值=5000元

    ev=earn value挣值=30颗*100元/颗=3000元


    cv=成本偏差 Cost Variance=ev-ac=3000-4500=-1500.小于0说明,成本超支

    sv=进度偏差schedule Variance=ev-pv=3000-5000=-2000.小于0说明进度滞后

    cpi=ev/ac=3000/4500=2/3=0.66667

    spi=ev/pv=3000/5000=0.6


    2答案

    按照该趋势,意思是要除以cpi哦

    etc=(bac-ev)/cpi=(10000-3000)/(2/3)=3500*3=10500

    也可以这么理解,现在是150元/颗,那么剩余需要完成70颗。那么150乘以70就是10500,完工尚需

    3答案

    etc=bac-ev=10000-3000=7000.采用纠正措施,以后花费就是100每颗。那么70颗就是70*100=7000.完工尚需7000.






    展开全文
  • 中国展览总网商业计划书 目 录 前言………………………………………………………………………………………03 一、电子商务发展趋势……………………………………………………………… 04 二、中国展览业发展...
  • PERT图采用网络图来描述一个项目任务网络,不仅可以表达子任务的计划安排,还可以在任务计划执行过程中估计任务完成情况。针对表1-2中关于PERT图中关键路径描述(1)~(5),判断対PERT图特点描述是否正确,...
  • Note:目前内容为初稿,后续完善过后,我会将内容之间逻辑梳理出来!一、公司介绍。主要描述:公司名称及类型,业务或产品经营范围,服务人群及解决了他们什么问题;注意逻辑,一点要考虑...1.表达主观分分析,...
  • 开放策略分析项目,以进行驱虫干预的成本效益分析 在RStudio中打开: 直接进入Shiny应用程序: ... 这项工作以及将来的案例研究将为《指南》提供依据。 要了解有关BITSS和我们的OPA计划的更多信息,。 如
  • 或者,这些代表可以用作更详细分析的案例。 我们将选择代表的问题称为无监督原型缩减问题。 我们讨论了针对此问题的 KC-UPR 方法,并将其与可能适用于此问题的其他现有方法进行了比较。 我们提出了一种新型的距离...
  • 于是打算先从 String 类的源码分析入手,作为后面学习的案例。这篇文章寄托着今后进阶系列产出的愿望,希望能坚持下去,不忘初心,让自己保持那份对技术的热爱。 因为学习分析源码,所以借鉴了 HollisChuang 成神...
  • ECS官方案例2. IJobForEach

    千次阅读 2019-08-10 11:18:56
    在上一篇基于Unity2019最新ECS架构开发MMO游戏笔记0中讲了官方第一个案例,通过图文并茂的分析,相信各位大佬已经对ECS有了一定认识,这一篇会继续分析官方案例关于源码,如果有意想深入了解,...
  • Java源码分析——String设计

    千次阅读 2016-04-20 21:49:46
    于是打算先从String类的源码分析入手,作为后面学习的案例。这篇文章寄托着今后进阶系列产出的愿望,希望能坚持下去,不忘初心,让自己保持那份对技术的热爱。 因为学习分析源码,所以借鉴了HollisChuang成神之路的...
  • 数学建模模型案例解析大全105个如下所示: DVD在线租赁方案优化模型 Word排版下载地址 world排版技巧数模论文必备 艾滋病疗法评价及疗效预测 奥运会场馆人员疏散模型 奥运会临时超市网点优化设计 ...
  • 该研究报告以描述性形式使用了案例研究,以获取关于担保有限责任公司未能向PACRA提交年度收益原因和后果深入而详细信息。 该研究样本总数为151名受访者,其中121名来自卢萨卡地区选定担保有限责任公司,...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

关于计划的案例分析