当前位置:天才代写 > tutorial > 其他教程 > R语言多元阐明系列

R语言多元阐明系列

2017-12-04 08:00 星期一 所属: 其他教程 浏览:377

主身分阐明(principal components analysis, PCA)是一种阐明、简化数据集的技能。它把原始数据调动到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主身分)上,第二大方差在第二个坐标(第二主身分)上,依次类推。主身分阐明常常用淘汰数据集的维数,同时保持数据集的对方差孝敬较大的特征。这是通过保存低阶主身分,忽略高阶主身分做到的。这样低阶身分往往可以或许保存住数据的最重要方面。可是在处理惩罚视察数目小于变量数目时无法发挥浸染,譬喻基因数据。

R语言中举办主身分阐明可以回收根基的princomp函数,将功效输入到summary和plot函数中可别离获得阐明功效和碎石图。但psych扩展包更具机动性。


1 选择主身分个数
选择主身分个数凡是有如下几种评判尺度:

  • 按照履历与理论举办选择
  • 按照累积方差孝敬率 ,譬喻选择使累积方差孝敬率到达80%的主身分个数。
  • 按拍照干系数矩阵的特征值,选择特征值大于1的主身分。
  • 另一种较为先进的要领是平行阐明(parallel analysis)。该要领首先生成若干组与原始数据布局沟通的随机矩阵,求出其特征值并举办平均,然后和真实数据的特征值举办比对,按照交错点的位置来选择主身分个数。我们选择USJudgeRatings数据集举例,首先加载psych包,然后利用fa.parallel函数绘制下图,从图中可见第一主身分位于红线上方,第二主身分位于红线下方,因此主身分数目选择1。

    fa.parallel(USJudgeRatings[,-1], fa=”pc”,n.iter=100, show.legend=FALSE)

    2 提取主身分
    pc=principal(USJudgeRatings[,-1],nfactors=1)

        PC1   h2     u2
    1 0.92 0.84 0.1565
    2 0.91 0.83 0.1663
    3 0.97 0.94 0.0613
    4 0.96 0.93 0.0720
    5 0.96 0.92 0.0763
    6 0.98 0.97 0.0299
    7 0.98 0.95 0.0469
    8 1.00 0.99 0.0091
    9 0.99 0.98 0.0196
    10 0.89 0.80 0.2013
    11 0.99 0.97 0.0275

    PC1
    SS loadings 10.13
    Proportion Var 0.92


    从上面的功效调查到,PC1即视察变量与主身分之间的相干系数,h2是变量能被主身解析释的比例,u2则是不能表明的比例。主身解析释了92%的总方差。留意此功效与princomp函数功效差异,princomp函数返回的是主身分的线性组合系数,而principal函数返回原始变量与主身分之间的相干系数,这样就和因子阐明的功效意义相一致。

    3 旋转主身分
    旋转是在保持累积方差孝敬率稳定条件下,将主身分负荷举办调动,以利便表明。身分旋转这后各身分的方差孝敬率将从头分派,此时就不行再称之为“主身分”而仅仅是“身分”。旋转又可分为正交旋转和斜交旋转。正交旋转的风行要领是方差较大化,需要在principal中增加rotate=’varimax’参数加以实现。也有概念认为主身分阐明一般不需要举办旋转。

    4 计较主身分得分
    主身分得分是各变量的线性组合,在计较出主身分得分之后,还可以将其举办回归等做进一步阐明处理惩罚。但留意假如输入数据不是原始数据时,则无法计较主身分得分。我们需要在principal中增加score=T的参数配置,功效将存放在功效的score元素中。

    R语言多元阐明系列之二:摸索性因子阐明

    摸索性因子阐明(Exploratory Factor Analysis,EFA)是一项用来找出多元视察变量的本质布局、并举办处理惩罚降维的技能。 因而EFA可以或许将具有错综巨大干系的变量综合为少数几个焦点因子。EFA和PCA的区别在于:PCA中的主身分是原始变量的线性组合,而EFA中的原始变量是民众因子的线性组合,因子是影响变量的潜在变量,变量中不能被因子所表明的部门称为误差,因子和误差均不能直接调查到。举办EFA需要大量的样本,一般履历认为如何预计因子的数目为N,则需要有5N到10N的样本数目。

    固然EFA和PCA有本质上的区别,但在阐明流程上有相似之处。下面我们用ability.cov这个心理丈量数据举例,其变量是对人的六种本领,譬喻阅读和拼写本领举办了考试,其数据是一个协方差矩阵而非原始数据。R语言中stats包中的factanal函数可以完成这项事情,但这里我们利用更为机动的psych包。


    一、选择因子个数
    一般选择因子个数可以按拍照干系数矩阵的特征值,特征值大于0则可选择做为因子。我们仍利用平行阐明法(parallel analysis)。该要领首先生成若干组与原始数据布局沟通的随机矩阵,求出其特征值并举办平均,然后和真实数据的特征值举办比对,按照交错点的位置来选择因子个数。按照下图我们可以调查到特征值与红线的干系,有两个因子都位于红线上方,显然应该选择两个因子。

    library(psych)
    covariances = ability.cov$cov
    correlations = cov2cor(covariances)
    fa.parallel(correlations, n.obs=112, fa=”fa”, n.iter=100,show.legend=FALSE)

    二、提取因子
    psych包中是利用fa函数来提取因子,将nfactors参数设定因子数为2,rotate参数设定了较大化方差的因子旋转要领,最后的fm暗示阐明要领,由于极大似然要领有时不能收敛,所以此处设为迭代主轴要领。从下面的功效中可以调查到两个因子表明白60%的总方差。Reading和vocabulary这两个变量于第一项因子有关,而picture、blocks和maze变量与第二项因子有关,general变量于两个因子都有干系。

    fa = fa(correlations,nfactors=2,rotate=”varimax”,fm=”pa” )
             PA1  PA2   h2    u2
    general 0.49 0.57 0.57 0.432
    picture 0.16 0.59 0.38 0.623
    blocks 0.18 0.89 0.83 0.166
    maze 0.13 0.43 0.20 0.798
    reading 0.93 0.20 0.91 0.089
    vocab 0.80 0.23 0.69 0.313

    PA1 PA2
    SS loadings 1.83 1.75
    Proportion Var 0.30 0.29
    Cumulative Var 0.30 0.60

    假如回收根基函数factanal举办因子阐明,那么函数形式应该是factanal(covmat=correlations,factors=2,rottion=’varimax’),这会获得沟通的功效。另外,我们还可以用图形来暗示因子和变量之间的干系
    factor.plot(fa,labels=rownames(fa$loadings))
    三、因子得分
    获得民众因子后,我们可以象主身分阐明那样反过来考查每个样本的因子得分。假如输入的是原始数据,则可以在fa函数中配置score=T参数来得到因子得分。假如象上面例子那样输入的是相关矩阵,则需要按照因子得分系数往返归预计。
    fa$weights

                     PA1         PA2
    general 0.017702900 0.21504415
    picture -0.007986044 0.09687725
    blocks -0.198309764 0.79392660
    maze 0.019155930 0.03027495
    reading 0.841777373 -0.22404221
    vocab 0.190592536 -0.02040749


    参考资料:R in Action

    R语言多元阐明系列之三:多维标度阐明

    多维标度阐明(MDS)是一种将多维空间的研究工具简化到低维空间举办定位、阐明和归类,同时又保存工具间原始干系的数据阐明要领。

    设想一下假如我们在欧氏空间中已知一些点的座标,由此可以求出欧氏间隔。那么反过来,已知间隔应该也能获得这些点之间的干系。这种间隔可以是古典的欧氏间隔,也可以是广义上的“间隔”。MDS就是在只管保持这种高维度“间隔”的同时,将数据在低维度上揭示出来。从这种意义上来讲,主身分阐明也是多维标度阐明的一个特例。


    一、间隔的怀抱
    多元阐明中常用有以下几种间隔,即值间隔、欧氏间隔(euclidean)、马氏间隔(manhattan)、 两项间隔(binary)、明氏间隔(minkowski)。在R中凡是利用disk函数获得样本之间的间隔。MDS就是对间隔矩阵举办阐明,以揭示并表明数据的内涵布局。

    在经典MDS中,间隔是数值数据暗示,将其看作是欧氏间隔。在R中stats包的cmdscale函数实现了经典MDS。它是按照各点的欧氏间隔,在低维空间中寻找各点座标,而只管保持间隔稳定。

    非怀抱MDS要领中,“间隔”不再看作数值数据,而只是顺序数据。譬喻在心理学尝试中,受试者只能答复很是同意、同意、差异意、很是差异意这几种谜底。在这种环境下,经典MDS不再有效。Kruskal在1964年提出了一种算法来办理这个问题。在R中MASS包的isoMDS函数可以实现这种算法,另一种风行的算法是由sammon函数实现的。
    二、经典MDS
    下面我们以HSAUR2包中的watervoles数据来举例。该数据是一个相似矩阵,暗示了差异地域水田鼠的相似水平。首先加载数据然后用cmdscales举办阐明。

    library(ggplot2)
    data(watervoles, package = “HSAUR2”)
    data(watervoles)
    voles.mds=cmdscale(watervoles,k=13,eig=T)
    下面计较前两个特征值在所有特征值中的比例,这是为了检测可否用两个维度的间隔来暗示高维空间中间隔,假如到达了0.8阁下则暗示是符合的。
    sum(abs(voles.mds$eig[1:2]))/sum(abs(voles.mds$eig))
    sum((voles.mds$eig[1:2])^2)/sum((voles.mds$eig)^2)
    然后从功效中提取前两个维度的座标,用ggplot包举办画图。
    x = voles.mds$points[,1]
    y = voles.mds$points[,2]
    p=ggplot(data.frame(x,y),aes(x,y,label = colnames(watervoles)))
    p+geom_point(shape=16,size=3,colour=’red’)+
    geom_text(hjust=-0.1,vjust=0.5,alpha=0.5)


    三、非怀抱MDS
    第二例子中的数据是关于新泽西州议员投票行为的相似矩阵,这里我们用MASS包中的isoMDS函数举办阐明
    library(“MASS”)
    data(voting, package = “HSAUR2”)
    voting_mds = isoMDS(voting)
    x = voting_mds$points[,1] y = voting_mds$points[,2] g=ggplot(data.frame(x,y),aes(x,y,label = colnames(voting)))
    g+geom_point(shape=16,size=3,colour=’red’)+
    geom_text(hjust=-0.1,vjust=0.5,alpha=0.5)


    参考资料:
    A Handbook of Statistical Analyses Using R
    多元统计阐明及R语言建模

    R语言多元阐明系列之四:鉴别阐明

    鉴别阐明(discriminant analysis)是一种分类技能。它通过一个已知类此外“练习样本”来成立鉴别准则,并通过预测变量来为未知类此外数据举办分类。

    鉴别阐明的要领概略上有三类,即Fisher鉴别、Bayes鉴别和间隔鉴别。Fisher鉴别思想是投影降维,使多维问题简化为一维问题来处理惩罚。选择一个适当的投影轴,使所有的样品点都投影到这个轴上获得一个投影值。对这个投影轴的偏向的要求是:使每一组内的投影值所形成的组内离差尽大概小,而差异组间的投影值所形成的类间离差尽大概大。Bayes鉴别思想是按照先验概率求出后验概率,并依据后验概率漫衍作出统计揣度。间隔鉴别思想是按照已知分类的数据计较种种此外重心,对未知分类的数据,计较它与种种重心的间隔,与某个重心间隔最近则归于该类。

    1.线性鉴别
    当差异类样本的协方差矩阵沟通时,我们可以在R中利用MASS包的lda函数实现线性鉴别。lda函数以Bayes鉴别思想为基本。当分类只有两种且总体听从多元正态漫衍条件下,Bayes鉴别与Fisher鉴别、间隔鉴别是等价的。本例利用iris数据集来对花的品种举办分类。首先载入MASS包,成立鉴别模子,个中的prior参数暗示先验概率。然后操作table函数成立夹杂矩阵,比对真实种别和预测种别。

    library(MASS)
    model1=lda(Species~.,data=iris,prior=c(1,1,1)/3)
    table(Species,predict(model1)$class)

    Species setosa versicolor virginica
    setosa 50 0 0
    versicolor 0 48 2
    virginica 0 1 49
    从以上功效可调查到判定错误的样本只有三个。在鉴别函数成立后,还可以雷同主身分阐明那样对鉴别得分举办画图
    ld=predict(model1)$x
    p=ggplot(cbind(iris,as.data.frame(ld))
    ,aes(x=LD1,y=LD2))
    p+geom_point(aes(colour=Species),alpha=0.8,size=3)


    2.二次鉴别
    当差异类样本的协方差矩阵差异时,则应该利用二次鉴别。
    model2=qda(Species~.,data=iris,cv=T)
    这里将CV参数配置为T,是利用留一交错检讨(leave-one-out cross-validation),并自动生成预测值。这种条件下生成的夹杂矩阵较为靠得住。另外还可以利用predict(model)$posterior提取后验概率。
    在利用lda和qda函数时留意:其假设是总体听从多元正态漫衍,若不满意的话则审慎利用。
    参考资料:
    Modern Applied Statistics With S
    Data_Analysis_and_Graphics_Using_R__An_Example_Based_Approach

    R语言多元阐明系列之五:聚类阐明(完)

    聚类阐明(Cluster Analysis)是按照“物以类聚”的原理,对样品或指标举办分类的一种多元统计阐明要领,它是在没有先验常识的环境下,对样本按各自的特性来举办公道的分类。

    聚类阐明被应用于许多方面,在贸易上,聚类阐明被用来发明差异的客户群,而且通过购置模式刻画差异的客户群的特征;在生物上,聚类阐明被用来动植物分类和对基因举办分类,获取对种群固有布局的认识;在因特网应用上,聚类阐明被用来在网长举办文档归类来修复信息。


    聚类阐明有两种主要计较要领,别离是凝结条理聚类(Agglomerative hierarchical method)和K均值聚类(K-Means)。

    一、条理聚类
    条理聚类又称为系统聚类,首先要界说样本之间的间隔干系,间隔较近的归为一类,较远的则属于差异的类。可用于界说“间隔”的统计量包罗了欧氏间隔(euclidean)、马氏间隔(manhattan)、 两项间隔(binary)、明氏间隔(minkowski)。还包罗相干系数和夹角余弦。

    条理聚类首先将每个样本单独作为一类,然后将差异类之间间隔最近的举办归并,归并后从头计较类间间隔。这个进程一直一连到将所有样本归为一类为止。在计较类间间隔时则有六种差异的要领,别离是最短间隔法、最长间隔法、类平均法、重心法、中间间隔法、离差平方和法。

    下面我们用iris数据集来举办聚类阐明,在R语言中所用到的函数为hclust。首先提取iris数据中的4个数值变量,然后计较其欧氏间隔矩阵。然后将矩阵绘制热图,从图中可以看到颜色越深暗示样本间间隔越近,大抵上可以区分出三到四个区块,其样本之间较量靠近。

    data=iris[,-5]
    dist.e=dist(data,method=’euclidean’)
    heatmap(as.matrix(dist.e),labRow = F, labCol = F)

    然后利用hclust函数成立聚类模子,功效存在model1变量中,个中ward参数是将类间间隔计较要领配置为离差平方和法。利用plot(model1)可以绘制出聚类树图。假如我们但愿将种别设为3类,可以利用cutree函数提取每个样本所属的种别。
    model1=hclust(dist.e,method=’ward’)
    result=cutree(model1,k=3)
    为了显示聚类的结果,我们可以团结多维标度和聚类的功效。先将数据用MDS举办降维,然后以差异的的形状暗示原本的分类,用差异的颜色来暗示聚类的功效。可以看到setose品种聚类很乐成,但有一些virginica品种的花被错误和virginica品种聚类到一起。
    mds=cmdscale(dist.e,k=2,eig=T)
    x = mds$points[,1] y = mds$points[,2] library(ggplot2)
    p=ggplot(data.frame(x,y),aes(x,y))
    p+geom_point(size=3,alpha=0.8,
    aes(colour=factor(result),
    shape=iris$Species))

    二、K均值聚类
    K均值聚类又称为动态聚类,它的计较要领较为简朴,也不需要输入间隔矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计较百般本与类中心的间隔并举办归类,所有样本分别完成后从头计较类中心,反复这个进程直到类中心不再变革。

    在R中利用kmeans函数举办K均值聚类,centers参数用来配置分类个数,nstart参数用来配置取随机初始中心的次数,其默认值为1,但取较多的次数可以改进聚类结果。model2$cluster可以用来提取每个样本所属的种别。
    model2=kmeans(data,centers=3,nstart=10)
    利用K均值聚类时需要留意,只有在类的平均值被界说的环境下才气利用,还要求事先给出分类个数。一种要领是先用条理聚类以抉择个数,再用K均值聚类加以改造。可能以表面系数来判定分类个数。改进聚类的要领还包罗对原始数据举办调动,如对数据举办降维后再实施聚类。

    cluster扩展包中也有很多函数可用于聚类阐明,如agnes函数可用于凝结条理聚类,diana可用于分别条理聚类,pam可用于K均值聚类,fanny用于恍惚聚类。
     

      关键字:

    天才代写-代写联系方式