factomineR包与多元阐明(1)
下学期目测可以当多元统计阐明的助教了,虽说学的不咋地,但立场起码要当真,此刻看来多元对我较大的意义就是让我认识了一样神奇的对象——R(固然之前就有所相识,但真正开始利用是从那会开始的),从而开始慢慢丢弃了曾经也一度痴迷的matlab(纯属小我私家行为,请勿仿照),真正地投入了统计的度量。但万幸中的不幸,我以为我走了一条弯路,在那一个学期中完全回收了一种错误的进修要领,从而就把这么重要的一件事给延长了,亏得之后操作特另外时间恶补了一发,总算有点起色,但总体来说照旧落伍了。好吧,貌似离题了,这本应该是后话。本文想说的是,其时对付多元上机题仅仅抱着用最根基的函数来只求算出一个谜底的这种心态的确是大错特错,这无形之中忽视R强大的可扩展性,忽略了package的能量,从而给人一种R不如SAS、SPSS的假象(这种想法在同学中很是普遍)。因此这里以factomineR包为例,主要参考该包的官网,谈谈如何用它来把某些多元阐明做的更好。
一、主身分阐明
主身分阐明也算的上是多元阐明中元老级的要领,同时也不绝的再抖擞第二春,由主身分阐明也衍生出了不少现代要领。像什么Probabilistic PCA、Bayesian PCA(Bayes这玩意哪都要搞上一搞。。。)、Inverse non-linear PCA (NLPCA)等等等,多的一逼,莫非这些玩意一句princomp都能办理?恶作剧。。。虽然这也不是这也不是本文重点(上述要领都可以通过pcaMethods经办理,但不是来历于CRAN,而是来历于bioconductor,或者会抽时间再写一篇扯一扯这个包)。
所谓主身分阐明,道理应该无需多说,通过线性调动把原本具有相关性的变量转换成两两不相关的主身分,通过方差(也就是特征值)来表征孝敬率,再按照孝敬率选取前n个主身分举办阐明。作为stats包中的princomp函数,根基可以完成课本中所部署的任务,可是至少有两个缺点,一是输出信息量不足,二是可视化水平不足。首先信息量不足显然倒霉于阐明,更要命的是可视化,我相信看陈诉的人都但愿能有一个视觉上的刺激,也就是大度的图表(就正凡人而言这种刺激毫不会来历于矩阵。。。),符合的图表可以给人以直观的领略从而能能读者更快的领略所要表达的信息。而这一点恰恰是princomp最最欠缺的,也是老师所忽视的(愿意本身码代码再逐步plot的请无视这句话,甚至无视本文)。但factomineR就对princomp的上述缺陷做了一个很好的增补,这里不妨给出一个例子,数据回收北大《应用多元统计阐明》第八章课后第11题,假如只是为了完成那两个小题,那princomp足矣
library(xlsx);library(FactoMineR);data<-read.xlsx(“711.xls”,1);data.pr<-princomp(data,cor=T);summary(data.pr,loadings=T);data.pred<-predict(data.pr);dimnames(data.pred)<-list(1:13,1:8);sort(data.pred[,1],decreasing=TRUE);d<-dist(data.pred[,1:3]);hc<-hclust(d,”ward”);plot(hc,hang=-1);rect.hclust(hc,k=3,border=”red”);
之后由于涉及到排序和聚类,因此还用到了sort和hclust,主身分阐明部门仅用到了princomp。这个时候假如加上一句
res.pca<-PCA(data, scale.unit=TRUE, ncp=3, graph=T);
这里先表明一下函数的参数,data就是data无需多言,scale.unit就是问你是否尺度,TRUE就会尺度化,ncp就是功效中保存的维数,graph是问你是否绘图,我一般都是T,利便嘛,少码一句画图呼吁,多好,选TRUE了之后,就能别离获得数据关于前两个主身分的散点图以及原坐标在主身分下的偏向两张图(注:在利用princomp下biplot函数也完全这项任务,它把两张图并成一张,但我以为结果并欠好,读者可自行实验)
由于原本数据就较量好,所以很容易就可以通过图表看出主身分与变量的干系以及变量间的彼此干系,读者一看便知。另外方才PCA函数带给我们的不只仅只是两张图罢了,尚有很是富裕的计较功效,
> res.pca**Results for the Principal Component Analysis (PCA)**The analysis was performed on 13 individuals, described by 8 variables*The results are available in the following objects:
name description1 “$eig” “eigenvalues”2 “$var” “results for the variables”3 “$var$coord” “coord. for the variables”4 “$var$cor” “correlations variables – dimensions”5 “$var$cos2” “cos2 for the variables”6 “$var$contrib” “contributions of the variables”7 “$ind” “results for the individuals”8 “$ind$coord” “coord. for the individuals”9 “$ind$cos2” “cos2 for the individuals”10 “$ind$contrib” “contributions of the individuals”11 “$call” “summary statistics”12 “$call$centre” “mean of the variables”13 “$call$ecart.type” “standard error of the variables”14 “$call$row.w” “weights for the individuals”15 “$call$col.w” “weights for the variables”
很是清晰,可以按照需求按需分派。
最后尚有一点也很是值得一提,就是这里引入了增补变量,这里不妨用包中自带的运带动十项全能的数据,数据中的变量除了运带动的后果外,还包括了运带动的总得分、排名、以及哪次赛会,这三个变量就可以作为增补变量作为测试集,关于增补变量,PCA函数中的参数有两个quanti.sup和quali.sup,别离对应数量变量和质量变量(分类变量),详细的功效可以参考该包的官网,个中还先容了参数row.w和col.w的利用,这里不再赘述。
二、对应阐明与多重对应阐明
对应阐明的根基目标是将Q型因子阐明与R型因子有机团结起来,把样品点和变量点同时反应到沟通的因子轴上,可以说是因子阐明的进阶。对付经典的对应阐明,较量常用的就是MASS包中corresp函数(另外可以借助biplot函数可视化),用法很是简朴,参数也很少,用起来很是利便,可是正因为这一点,使得许多时候对它的输出并不满意,这时候FactoMineR包的用武之地又来了,对应阐明在FactoMineR包中对应的函数为CA,其对比于corresp的利益同样在于增补变量,在函数中对应的参数为col.sup可能row.sup,别离对应列和行。示例可以参考这里。
多重对应阐明相当于经典对应阐明的增强版,可以或许处理惩罚更巨大的数据,譬喻包括分类变量的数据,在包中对应的函数为MCA,可以通过quanti.sup和quali.sup两个参数添加增补变量,plot.MCA和plotellipses等函数可用于可视化(MCA函数中同样具有graph参数,寄义与PCA雷同),下面这段代码是辅佐文档中所给的个中一个示例,
data(hobbies)res.mca <- MCA(hobbies,quali.sup=19:22,quanti.sup=23)plot(res.mca,invisible=c(“ind”,”quali.sup”),hab=”quali”) plot(res.mca,invisible=c(“var”,”quali.sup”),cex=.5,label=”none”) plot(res.mca,invisible=c(“ind”,”var”),hab=”quali”)dimdesc(res.mca)plotellipses(res.mca,keepvar=1:4)
另一个示例在这里有具体的表明。
一下子写不完了,偷个懒在标题上标个1,剩下的多重因子阐明、分层多重因子阐明留到下一篇吧。罪过罪过。。。